123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /* $Header$ */
- /* PREPROCESSOR: INITIALIZATION ROUTINES */
- #include "nopp.h"
- #ifndef NOPP
- #include "predefine.h" /* UF */
- #include "alloc.h"
- #include "class.h"
- #include "macro.h"
- #include "idf.h"
- #include "interface.h"
- #include "system.h"
- #include "string.h"
- PRIVATE struct mkey {
- char *mk_reserved;
- int mk_key;
- } mkey[] = {
- {"define", K_DEFINE},
- {"elif", K_ELIF},
- {"else", K_ELSE},
- {"endif", K_ENDIF},
- {"if", K_IF},
- {"ifdef", K_IFDEF},
- {"ifndef", K_IFNDEF},
- {"include", K_INCLUDE},
- {"line", K_LINE},
- {"undef", K_UNDEF},
- {0, K_UNKNOWN}
- };
- EXPORT
- init_pp()
- {
- time_type clock;
- static char date[30];
- char *ctime();
- /* Initialise the control line keywords (if, include, define, etc)
- Although the lexical analyzer treats them as identifiers, the
- control line handler can recognize them as keywords by the
- id_resmac field of the identifier.
- */
- {
- register struct mkey *mk = &mkey[0];
- while (mk->mk_reserved) {
- struct idf *idf = str2idf(mk->mk_reserved);
-
- if (idf->id_resmac)
- fatal("maximum identifier length insufficient");
- idf->id_resmac = mk->mk_key;
- mk++;
- }
- }
- /* Initialize __DATE__, __FILE__ and __LINE__ macro
- definitions. The compile-time specified predefined macros
- are also predefined: if this file is compiled with
- -DPREDEFINE="vax,pdp", the macro definitions "vax" and
- "pdp" are predefined macros.
- */
- /* __DATE__ */
- clock = sys_time((time_type *) 0);
- strcpy(&date[1], ctime(&clock));
- date[26] = '\0'; /* zap nl */
- date[0] = date[25] = '"';
- macro_def(str2idf("__DATE__"), date, -1, 26, NOFLAG);
- /* __LINE__ */
- macro_def(str2idf("__LINE__"), "0", -1, 1, FUNC);
- /* __FILE__ */
- macro_def(str2idf("__FILE__"), "", -1, 1, FUNC);
- #ifdef PREDEFINE
- {
- /* PREDEFINE is a compile-time defined string
- containing a number of identifiers to be
- predefined at the host machine (for example
- -DPREDEFINE="vax,unix,pmds").
- Note that PREDEF causes the identifier not
- to be substituted.
- */
- register char *s = PREDEFINE;
- register char *id;
- char c;
- for (;;) {
- while (*s && class(*s++) != STIDF);
- if (*s) {
- /* gobble identifier */
- id = s - 1;
- while (in_idf(*s++));
- c = *--s;
- *s = '\0';
- macro_def(str2idf(id), "", -1, 0, PREDEF);
- *s = c;
- }
- else
- break;
- }
- }
- #endif PREDEFINE
- }
- #endif NOPP
|