[BACK]Return to NOTES CVS log [TXT][DIR] Up to [local] / src / usr.bin / m4

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:        +-------+