comparison doc/manual/x182.html @ 398:7987ee447833 3.0-beta1

Added generated files for release
author lost@l-w.ca
date Fri, 23 Jul 2010 17:18:52 -0600
parents
children
comparison
equal deleted inserted replaced
397:09fe7c40a082 398:7987ee447833
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
2 <HTML
3 ><HEAD
4 ><TITLE
5 >Assembler Directives</TITLE
6 ><META
7 NAME="GENERATOR"
8 CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
9 REL="HOME"
10 TITLE="LW Tool Chain"
11 HREF="index.html"><LINK
12 REL="UP"
13 TITLE="LWASM"
14 HREF="c43.html"><LINK
15 REL="PREVIOUS"
16 TITLE="Numbers and Expressions"
17 HREF="x174.html"><LINK
18 REL="NEXT"
19 TITLE="Macros"
20 HREF="x465.html"></HEAD
21 ><BODY
22 CLASS="SECTION"
23 BGCOLOR="#FFFFFF"
24 TEXT="#000000"
25 LINK="#0000FF"
26 VLINK="#840084"
27 ALINK="#0000FF"
28 ><DIV
29 CLASS="NAVHEADER"
30 ><TABLE
31 SUMMARY="Header navigation table"
32 WIDTH="100%"
33 BORDER="0"
34 CELLPADDING="0"
35 CELLSPACING="0"
36 ><TR
37 ><TH
38 COLSPAN="3"
39 ALIGN="center"
40 >LW Tool Chain</TH
41 ></TR
42 ><TR
43 ><TD
44 WIDTH="10%"
45 ALIGN="left"
46 VALIGN="bottom"
47 ><A
48 HREF="x174.html"
49 ACCESSKEY="P"
50 >Prev</A
51 ></TD
52 ><TD
53 WIDTH="80%"
54 ALIGN="center"
55 VALIGN="bottom"
56 >Chapter 3. LWASM</TD
57 ><TD
58 WIDTH="10%"
59 ALIGN="right"
60 VALIGN="bottom"
61 ><A
62 HREF="x465.html"
63 ACCESSKEY="N"
64 >Next</A
65 ></TD
66 ></TR
67 ></TABLE
68 ><HR
69 ALIGN="LEFT"
70 WIDTH="100%"></DIV
71 ><DIV
72 CLASS="SECTION"
73 ><H1
74 CLASS="SECTION"
75 ><A
76 NAME="AEN182"
77 >3.6. Assembler Directives</A
78 ></H1
79 ><P
80 >Various directives can be used to control the behaviour of the
81 assembler or to include non-code/data in the resulting output. Those directives
82 that are not described in detail in other sections of this document are
83 described below.</P
84 ><DIV
85 CLASS="SECTION"
86 ><H2
87 CLASS="SECTION"
88 ><A
89 NAME="AEN185"
90 >3.6.1. Data Directives</A
91 ></H2
92 ><P
93 ></P
94 ><DIV
95 CLASS="VARIABLELIST"
96 ><DL
97 ><DT
98 >FCB <CODE
99 CLASS="PARAMETER"
100 >expr[,...]</CODE
101 >, .DB <CODE
102 CLASS="PARAMETER"
103 >expr[,...]</CODE
104 >, .BYTE <CODE
105 CLASS="PARAMETER"
106 >expr[,...]</CODE
107 ></DT
108 ><DD
109 ><P
110 >Include one or more constant bytes (separated by commas) in the output.</P
111 ></DD
112 ><DT
113 >FDB <CODE
114 CLASS="PARAMETER"
115 >expr[,...]</CODE
116 >, .DW <CODE
117 CLASS="PARAMETER"
118 >expr[,...]</CODE
119 >, .WORD <CODE
120 CLASS="PARAMETER"
121 >expr[,...]</CODE
122 ></DT
123 ><DD
124 ><P
125 >Include one or more words (separated by commas) in the output.</P
126 ></DD
127 ><DT
128 >FQB <CODE
129 CLASS="PARAMETER"
130 >expr[,...]</CODE
131 >, .QUAD <CODE
132 CLASS="PARAMETER"
133 >expr[,...]</CODE
134 >, .4BYTE <CODE
135 CLASS="PARAMETER"
136 >expr[,...]</CODE
137 ></DT
138 ><DD
139 ><P
140 >Include one or more double words (separated by commas) in the output.</P
141 ></DD
142 ><DT
143 >FCC <CODE
144 CLASS="PARAMETER"
145 >string</CODE
146 >, .ASCII <CODE
147 CLASS="PARAMETER"
148 >string</CODE
149 >, .STR <CODE
150 CLASS="PARAMETER"
151 >string</CODE
152 ></DT
153 ><DD
154 ><P
155 >Include a string of text in the output. The first character of the operand
156 is the delimiter which must appear as the last character and cannot appear
157 within the string. The string is included with no modifications&#62;</P
158 ></DD
159 ><DT
160 >FCN <CODE
161 CLASS="PARAMETER"
162 >string</CODE
163 >, .ASCIZ <CODE
164 CLASS="PARAMETER"
165 >string</CODE
166 >, .STRZ <CODE
167 CLASS="PARAMETER"
168 >string</CODE
169 ></DT
170 ><DD
171 ><P
172 >Include a NUL terminated string of text in the output. The first character of
173 the operand is the delimiter which must appear as the last character and
174 cannot appear within the string. A NUL byte is automatically appended to
175 the string.</P
176 ></DD
177 ><DT
178 >FCS <CODE
179 CLASS="PARAMETER"
180 >string</CODE
181 >, .ASCIS <CODE
182 CLASS="PARAMETER"
183 >string</CODE
184 >, .STRS <CODE
185 CLASS="PARAMETER"
186 >string</CODE
187 ></DT
188 ><DD
189 ><P
190 >Include a string of text in the output with bit 7 of the final byte set. The
191 first character of the operand is the delimiter which must appear as the last
192 character and cannot appear within the string.</P
193 ></DD
194 ><DT
195 >ZMB <CODE
196 CLASS="PARAMETER"
197 >expr</CODE
198 ></DT
199 ><DD
200 ><P
201 >Include a number of NUL bytes in the output. The number must be fully resolvable
202 during pass 1 of assembly so no forward or external references are permitted.</P
203 ></DD
204 ><DT
205 >ZMD <CODE
206 CLASS="PARAMETER"
207 >expr</CODE
208 ></DT
209 ><DD
210 ><P
211 >Include a number of zero words in the output. The number must be fully
212 resolvable during pass 1 of assembly so no forward or external references are
213 permitted.</P
214 ></DD
215 ><DT
216 >ZMQ <CODE
217 CLASS="PARAMETER"
218 >expr<CODE
219 CLASS="PARAMETER"
220 ></CODE
221 ></CODE
222 ></DT
223 ><DD
224 ><P
225 >Include a number of zero double-words in the output. The number must be fully
226 resolvable during pass 1 of assembly so no forward or external references are
227 permitted.</P
228 ></DD
229 ><DT
230 >RMB <CODE
231 CLASS="PARAMETER"
232 >expr</CODE
233 >, .BLKB <CODE
234 CLASS="PARAMETER"
235 >expr</CODE
236 >, .DS <CODE
237 CLASS="PARAMETER"
238 >expr</CODE
239 >, .RS <CODE
240 CLASS="PARAMETER"
241 >expr</CODE
242 ></DT
243 ><DD
244 ><P
245 >Reserve a number of bytes in the output. The number must be fully resolvable
246 during pass 1 of assembly so no forward or external references are permitted.
247 The value of the bytes is undefined.</P
248 ></DD
249 ><DT
250 >RMD <CODE
251 CLASS="PARAMETER"
252 >expr</CODE
253 ></DT
254 ><DD
255 ><P
256 >Reserve a number of words in the output. The number must be fully
257 resolvable during pass 1 of assembly so no forward or external references are
258 permitted. The value of the words is undefined.</P
259 ></DD
260 ><DT
261 >RMQ <CODE
262 CLASS="PARAMETER"
263 >expr</CODE
264 ></DT
265 ><DD
266 ><P
267 >Reserve a number of double-words in the output. The number must be fully
268 resolvable during pass 1 of assembly so no forward or external references are
269 permitted. The value of the double-words is undefined.</P
270 ></DD
271 ><DT
272 >INCLUDEBIN <CODE
273 CLASS="PARAMETER"
274 >filename</CODE
275 ></DT
276 ><DD
277 ><P
278 >Treat the contents of <CODE
279 CLASS="PARAMETER"
280 >filename</CODE
281 > as a string of bytes to
282 be included literally at the current assembly point. This has the same effect
283 as converting the file contents to a series of FCB statements and including
284 those at the current assembly point.</P
285 ><P
286 > If <CODE
287 CLASS="PARAMETER"
288 >filename</CODE
289 > beings with a /, the file name
290 will be taken as absolute. Otherwise, the current directory will be
291 searched followed by the search path in the order specified.</P
292 ><P
293 > Please note that absolute path detection including drive letters will
294 not function correctly on Windows platforms. Non-absolute inclusion will
295 work, however.</P
296 ></DD
297 ></DL
298 ></DIV
299 ></DIV
300 ><DIV
301 CLASS="SECTION"
302 ><H2
303 CLASS="SECTION"
304 ><A
305 NAME="AEN288"
306 >3.6.2. Address Definition</A
307 ></H2
308 ><P
309 >The directives in this section all control the addresses of symbols
310 or the assembly process itself.</P
311 ><P
312 ></P
313 ><DIV
314 CLASS="VARIABLELIST"
315 ><DL
316 ><DT
317 >ORG <CODE
318 CLASS="PARAMETER"
319 >expr</CODE
320 ></DT
321 ><DD
322 ><P
323 >Set the assembly address. The address must be fully resolvable on the
324 first pass so no external or forward references are permitted. ORG is not
325 permitted within sections when outputting to object files. For the DECB
326 target, each ORG directive after which output is generated will cause
327 a new preamble to be output. ORG is only used to determine the addresses
328 of symbols when the raw target is used.</P
329 ></DD
330 ><DT
331 ><CODE
332 CLASS="PARAMETER"
333 >sym</CODE
334 > EQU <CODE
335 CLASS="PARAMETER"
336 >expr</CODE
337 >, <CODE
338 CLASS="PARAMETER"
339 >sym</CODE
340 > = <CODE
341 CLASS="PARAMETER"
342 >expr</CODE
343 ></DT
344 ><DD
345 ><P
346 >Define the value of <CODE
347 CLASS="PARAMETER"
348 >sym</CODE
349 > to be <CODE
350 CLASS="PARAMETER"
351 >expr</CODE
352 >.</P
353 ></DD
354 ><DT
355 ><CODE
356 CLASS="PARAMETER"
357 >sym</CODE
358 > SET <CODE
359 CLASS="PARAMETER"
360 >expr</CODE
361 ></DT
362 ><DD
363 ><P
364 >Define the value of <CODE
365 CLASS="PARAMETER"
366 >sym</CODE
367 > to be <CODE
368 CLASS="PARAMETER"
369 >expr</CODE
370 >.
371 Unlike EQU, SET permits symbols to be defined multiple times as long as SET
372 is used for all instances. Use of the symbol before the first SET statement
373 that sets its value is undefined.</P
374 ></DD
375 ><DT
376 >SETDP <CODE
377 CLASS="PARAMETER"
378 >expr</CODE
379 ></DT
380 ><DD
381 ><P
382 >Inform the assembler that it can assume the DP register contains
383 <CODE
384 CLASS="PARAMETER"
385 >expr</CODE
386 >. This directive is only advice to the assembler
387 to determine whether an address is in the direct page and has no effect
388 on the contents of the DP register. The value must be fully resolved during
389 the first assembly pass because it affects the sizes of subsequent instructions.</P
390 ><P
391 >This directive has no effect in the object file target.</P
392 ></DD
393 ><DT
394 >ALIGN <CODE
395 CLASS="PARAMETER"
396 >expr</CODE
397 >[,<CODE
398 CLASS="PARAMETER"
399 >value</CODE
400 >]</DT
401 ><DD
402 ><P
403 >Force the current assembly address to be a multiple of
404 <CODE
405 CLASS="PARAMETER"
406 >expr</CODE
407 >. If <CODE
408 CLASS="PARAMETER"
409 >value</CODE
410 > is not
411 specified, a series of NUL bytes is output to force the alignment, if
412 required. Otherwise, the low order 8 bits of <CODE
413 CLASS="PARAMETER"
414 >value</CODE
415 >
416 will be used as the fill. The alignment value must be fully resolved on the
417 first pass because it affects the addresses of subsquent instructions.
418 However, <CODE
419 CLASS="PARAMETER"
420 >value</CODE
421 > may include forward references; as
422 long as it resolves to a constant for the second pass, the value will be
423 accepted.</P
424 ><P
425 >Unless <CODE
426 CLASS="PARAMETER"
427 >value</CODE
428 > is specified as something like $12,
429 this directive is not suitable for inclusion in the middle of actual code.
430 The default padding value is $00 which is intended to be used within data
431 blocks. </P
432 ></DD
433 ></DL
434 ></DIV
435 ></DIV
436 ><DIV
437 CLASS="SECTION"
438 ><H2
439 CLASS="SECTION"
440 ><A
441 NAME="AEN335"
442 >3.6.3. Conditional Assembly</A
443 ></H2
444 ><P
445 >Portions of the source code can be excluded or included based on conditions
446 known at assembly time. Conditionals can be nested arbitrarily deeply. The
447 directives associated with conditional assembly are described in this section.</P
448 ><P
449 >All conditionals must be fully bracketed. That is, every conditional
450 statement must eventually be followed by an ENDC at the same level of nesting.</P
451 ><P
452 >Conditional expressions are only evaluated on the first assembly pass.
453 It is not possible to game the assembly process by having a conditional
454 change its value between assembly passes. Due to the underlying architecture
455 of LWASM, there is no possible utility to IFP1 and IFP2, nor can they, as of LWASM 3.0, actually
456 be implemented meaningfully. Thus there is not and never will
457 be any equivalent of IFP1 or IFP2 as provided by other assemblers. Use of those opcodes
458 will throw a warning and be ignored.</P
459 ><P
460 >It is important to note that if a conditional does not resolve to a constant
461 during the first parsing pass, an error will be thrown. This is unavoidable because the assembler
462 must make a decision about which source to include and which source to exclude at this stage.
463 Thus, expressions that work normally elsewhere will not work for conditions.</P
464 ><P
465 ></P
466 ><DIV
467 CLASS="VARIABLELIST"
468 ><DL
469 ><DT
470 >IFEQ <CODE
471 CLASS="PARAMETER"
472 >expr</CODE
473 ></DT
474 ><DD
475 ><P
476 >If <CODE
477 CLASS="PARAMETER"
478 >expr</CODE
479 > evaluates to zero, the conditional
480 will be considered true.</P
481 ></DD
482 ><DT
483 >IFNE <CODE
484 CLASS="PARAMETER"
485 >expr</CODE
486 >, IF <CODE
487 CLASS="PARAMETER"
488 >expr</CODE
489 ></DT
490 ><DD
491 ><P
492 >If <CODE
493 CLASS="PARAMETER"
494 >expr</CODE
495 > evaluates to a non-zero value, the conditional
496 will be considered true.</P
497 ></DD
498 ><DT
499 >IFGT <CODE
500 CLASS="PARAMETER"
501 >expr</CODE
502 ></DT
503 ><DD
504 ><P
505 >If <CODE
506 CLASS="PARAMETER"
507 >expr</CODE
508 > evaluates to a value greater than zero, the conditional
509 will be considered true.</P
510 ></DD
511 ><DT
512 >IFGE <CODE
513 CLASS="PARAMETER"
514 >expr</CODE
515 ></DT
516 ><DD
517 ><P
518 >If <CODE
519 CLASS="PARAMETER"
520 >expr</CODE
521 > evaluates to a value greater than or equal to zero, the conditional
522 will be considered true.</P
523 ></DD
524 ><DT
525 >IFLT <CODE
526 CLASS="PARAMETER"
527 >expr</CODE
528 ></DT
529 ><DD
530 ><P
531 >If <CODE
532 CLASS="PARAMETER"
533 >expr</CODE
534 > evaluates to a value less than zero, the conditional
535 will be considered true.</P
536 ></DD
537 ><DT
538 >IFLE <CODE
539 CLASS="PARAMETER"
540 >expr</CODE
541 ></DT
542 ><DD
543 ><P
544 >If <CODE
545 CLASS="PARAMETER"
546 >expr</CODE
547 > evaluates to a value less than or equal to zero , the conditional
548 will be considered true.</P
549 ></DD
550 ><DT
551 >IFDEF <CODE
552 CLASS="PARAMETER"
553 >sym</CODE
554 ></DT
555 ><DD
556 ><P
557 >If <CODE
558 CLASS="PARAMETER"
559 >sym</CODE
560 > is defined at this point in the assembly
561 process, the conditional
562 will be considered true.</P
563 ></DD
564 ><DT
565 >IFNDEF <CODE
566 CLASS="PARAMETER"
567 >sym</CODE
568 ></DT
569 ><DD
570 ><P
571 >If <CODE
572 CLASS="PARAMETER"
573 >sym</CODE
574 > is not defined at this point in the assembly
575 process, the conditional
576 will be considered true.</P
577 ></DD
578 ><DT
579 >ELSE</DT
580 ><DD
581 ><P
582 >If the preceding conditional at the same level of nesting was false, the
583 statements following will be assembled. If the preceding conditional at
584 the same level was true, the statements following will not be assembled.
585 Note that the preceding conditional might have been another ELSE statement
586 although this behaviour is not guaranteed to be supported in future versions
587 of LWASM.</P
588 ></DD
589 ><DT
590 >ENDC</DT
591 ><DD
592 ><P
593 >This directive marks the end of a conditional construct. Every conditional
594 construct must end with an ENDC directive.</P
595 ></DD
596 ></DL
597 ></DIV
598 ></DIV
599 ><DIV
600 CLASS="SECTION"
601 ><H2
602 CLASS="SECTION"
603 ><A
604 NAME="AEN400"
605 >3.6.4. OS9 Target Directives</A
606 ></H2
607 ><P
608 >This section includes directives that apply solely to the OS9
609 target.</P
610 ><P
611 ></P
612 ><DIV
613 CLASS="VARIABLELIST"
614 ><DL
615 ><DT
616 >OS9 <CODE
617 CLASS="PARAMETER"
618 >syscall</CODE
619 ></DT
620 ><DD
621 ><P
622 >&#13;This directive generates a call to the specified system call. <CODE
623 CLASS="PARAMETER"
624 >syscall</CODE
625 > may be an arbitrary expression.&#13;</P
626 ></DD
627 ><DT
628 >MOD <CODE
629 CLASS="PARAMETER"
630 >size</CODE
631 >,<CODE
632 CLASS="PARAMETER"
633 >name</CODE
634 >,<CODE
635 CLASS="PARAMETER"
636 >type</CODE
637 >,<CODE
638 CLASS="PARAMETER"
639 >flags</CODE
640 >,<CODE
641 CLASS="PARAMETER"
642 >execoff</CODE
643 >,<CODE
644 CLASS="PARAMETER"
645 >datasize</CODE
646 ></DT
647 ><DD
648 ><P
649 >&#13;This tells LWASM that the beginning of the actual module is here. It will
650 generate a module header based on the parameters specified. It will also
651 begin calcuating the module CRC.&#13;</P
652 ><P
653 >&#13;The precise meaning of the various parameters is beyond the scope of this
654 document since it is not a tutorial on OS9 module programming.&#13;</P
655 ></DD
656 ><DT
657 >EMOD</DT
658 ><DD
659 ><P
660 >&#13;This marks the end of a module and causes LWASM to emit the calculated CRC
661 for the module.&#13;</P
662 ></DD
663 ></DL
664 ></DIV
665 ></DIV
666 ><DIV
667 CLASS="SECTION"
668 ><H2
669 CLASS="SECTION"
670 ><A
671 NAME="AEN425"
672 >3.6.5. Miscelaneous Directives</A
673 ></H2
674 ><P
675 >This section includes directives that do not fit into the other
676 categories.</P
677 ><P
678 ></P
679 ><DIV
680 CLASS="VARIABLELIST"
681 ><DL
682 ><DT
683 >INCLUDE <CODE
684 CLASS="PARAMETER"
685 >filename</CODE
686 >, USE <CODE
687 CLASS="PARAMETER"
688 >filename</CODE
689 ></DT
690 ><DD
691 ><P
692 > Include the contents of <CODE
693 CLASS="PARAMETER"
694 >filename</CODE
695 > at
696 this point in the assembly as though it were a part of the file currently
697 being processed. Note that if whitespace appears in the name of the file,
698 you must enclose <CODE
699 CLASS="PARAMETER"
700 >filename</CODE
701 > in quotes.</P
702 ><P
703 >Note that the USE variation is provided only for compatibility with other
704 assemblers. It is recommended to use the INCLUDE variation.</P
705 ><P
706 >If <CODE
707 CLASS="PARAMETER"
708 >filename</CODE
709 > begins with a "/", it is
710 interpreted as an absolute path. If it does not, the search path will be used
711 to find the file. First, the directory containing the file that contains this
712 directive. (Includes within an included file are relative to the included file,
713 not the file that included it.) If the file is not found there, the include path
714 is searched. If it is still not found, an error will be thrown. Note that the
715 current directory as understood by your shell or operating system is not searched.</P
716 ></DD
717 ><DT
718 >END <CODE
719 CLASS="PARAMETER"
720 >[expr]</CODE
721 ></DT
722 ><DD
723 ><P
724 >This directive causes the assembler to stop assembling immediately as though
725 it ran out of input. For the DECB target only, <CODE
726 CLASS="PARAMETER"
727 >expr</CODE
728 >
729 can be used to set the execution address of the resulting binary. For all
730 other targets, specifying <CODE
731 CLASS="PARAMETER"
732 >expr</CODE
733 > will cause an error.</P
734 ></DD
735 ><DT
736 >ERROR <CODE
737 CLASS="PARAMETER"
738 >string</CODE
739 ></DT
740 ><DD
741 ><P
742 >Causes a custom error message to be printed at this line. This will cause
743 assembly to fail. This directive is most useful inside conditional constructs
744 to cause assembly to fail if some condition that is known bad happens. Everything
745 from the directive to the end of the line is considered the error message.</P
746 ></DD
747 ><DT
748 >WARNING <CODE
749 CLASS="PARAMETER"
750 >string</CODE
751 ></DT
752 ><DD
753 ><P
754 >Causes a custom warning message to be printed at this line. This will not cause
755 assembly to fail. This directive is most useful inside conditional constructs
756 or include files to alert the programmer to a deprecated feature being used
757 or some other condition that may cause trouble later, but which may, in fact,
758 not cause any trouble.</P
759 ></DD
760 ><DT
761 >.MODULE <CODE
762 CLASS="PARAMETER"
763 >string</CODE
764 ></DT
765 ><DD
766 ><P
767 >This directive is ignored for most output targets. If the output target
768 supports encoding a module name into it, <CODE
769 CLASS="PARAMETER"
770 >string</CODE
771 >
772 will be used as the module name.</P
773 ><P
774 >As of version 3.0, no supported output targets support this directive.</P
775 ></DD
776 ></DL
777 ></DIV
778 ></DIV
779 ></DIV
780 ><DIV
781 CLASS="NAVFOOTER"
782 ><HR
783 ALIGN="LEFT"
784 WIDTH="100%"><TABLE
785 SUMMARY="Footer navigation table"
786 WIDTH="100%"
787 BORDER="0"
788 CELLPADDING="0"
789 CELLSPACING="0"
790 ><TR
791 ><TD
792 WIDTH="33%"
793 ALIGN="left"
794 VALIGN="top"
795 ><A
796 HREF="x174.html"
797 ACCESSKEY="P"
798 >Prev</A
799 ></TD
800 ><TD
801 WIDTH="34%"
802 ALIGN="center"
803 VALIGN="top"
804 ><A
805 HREF="index.html"
806 ACCESSKEY="H"
807 >Home</A
808 ></TD
809 ><TD
810 WIDTH="33%"
811 ALIGN="right"
812 VALIGN="top"
813 ><A
814 HREF="x465.html"
815 ACCESSKEY="N"
816 >Next</A
817 ></TD
818 ></TR
819 ><TR
820 ><TD
821 WIDTH="33%"
822 ALIGN="left"
823 VALIGN="top"
824 >Numbers and Expressions</TD
825 ><TD
826 WIDTH="34%"
827 ALIGN="center"
828 VALIGN="top"
829 ><A
830 HREF="c43.html"
831 ACCESSKEY="U"
832 >Up</A
833 ></TD
834 ><TD
835 WIDTH="33%"
836 ALIGN="right"
837 VALIGN="top"
838 >Macros</TD
839 ></TR
840 ></TABLE
841 ></DIV
842 ></BODY
843 ></HTML
844 >