1m4 - macro processor 2 3PD m4 is based on the macro tool distributed with the software 4tools (VOS) package, and described in the "SOFTWARE TOOLS" and 5"SOFTWARE TOOLS IN PASCAL" books. It has been expanded to include 6most of the command set of SysV m4, the standard UN*X macro processor. 7 8Since both PD m4 and UN*X m4 are based on SOFTWARE TOOLS macro, 9there may be certain implementation similarities between 10the two. The PD m4 was produced without ANY references to m4 11sources. 12 13written by: Ozan S. Yigit 14 15References: 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 32Implementation 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 +-------+ 65