Annotation of src/usr.bin/m4/NOTES, Revision 1.1.1.1
1.1 deraadt 1: m4 - macro processor
2:
3: PD m4 is based on the macro tool distributed with the software
4: tools (VOS) package, and described in the "SOFTWARE TOOLS" and
5: "SOFTWARE TOOLS IN PASCAL" books. It has been expanded to include
6: most of the command set of SysV m4, the standard UN*X macro processor.
7:
8: Since both PD m4 and UN*X m4 are based on SOFTWARE TOOLS macro,
9: there may be certain implementation similarities between
10: the two. The PD m4 was produced without ANY references to m4
11: sources.
12:
13: written by: Ozan S. Yigit
14:
15: References:
16:
17: Software Tools distribution: macro
18:
19: Kernighan, Brian W. and P. J. Plauger, SOFTWARE
20: TOOLS IN PASCAL, Addison-Wesley, Mass. 1981
21:
22: Kernighan, Brian W. and P. J. Plauger, SOFTWARE
23: TOOLS, Addison-Wesley, Mass. 1976
24:
25: Kernighan, Brian W. and Dennis M. Ritchie,
26: THE M4 MACRO PROCESSOR, Unix Programmer's Manual,
27: Seventh Edition, Vol. 2, Bell Telephone Labs, 1979
28:
29: System V man page for M4
30:
31:
32: Implementation Notes:
33:
34: [1] PD m4 uses a different (and simpler) stack mechanism than the one
35: described in Software Tools and Software Tools in Pascal books.
36: The triple stack thing is replaced with a single stack containing
37: the call frames and the arguments. Each frame is back-linked to a
38: previous stack frame, which enables us to rewind the stack after
39: each nested call is completed. Each argument is a character pointer
40: to the beginning of the argument string within the string space.
41: The only exceptions to this are (*) arg 0 and arg 1, which are
42: the macro definition and macro name strings, stored dynamically
43: for the hash table.
44:
45: . .
46: | . | <-- sp | . |
47: +-------+ +-----+
48: | arg 3 ------------------------------->| str |
49: +-------+ | . |
50: | arg 2 --------------+ .
51: +-------+ |
52: * | | |
53: +-------+ | +-----+
54: | plev | <-- fp +---------------->| str |
55: +-------+ | . |
56: | type | .
57: +-------+
58: | prcf -----------+ plev: paren level
59: +-------+ | type: call type
60: | . | | prcf: prev. call frame
61: . |
62: +-------+ |
63: | <----------+
64: +-------+