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