|
|
1.1 ! root 1: /* Copyright (c) 1980 Regents of the University of California */ ! 2: /* "@(#)asscan.h 4.3 8/15/80" */ ! 3: /* ! 4: * The character scanner is called to fill up one token buffer ! 5: * ! 6: * However, once the tokens are filled up by the ! 7: * character scanner, they are used in both the first and the second ! 8: * pass. Holes created by .stab removal are replaced ! 9: * with 'skip' tokens that direct the second pass to ignore the ! 10: * following tokens. ! 11: */ ! 12: ! 13: #define TOKBUFLG BUFSIZ ! 14: #define MAXVAX 32 ! 15: #define SAFETY 16 ! 16: ! 17: #define AVAILTOKS TOKBUFLG -\ ! 18: sizeof(int) -\ ! 19: sizeof (struct tokbufdesc *) -\ ! 20: MAXVAX - SAFETY ! 21: ! 22: struct tokbufdesc{ ! 23: int tok_count; /*absolute byte length*/ ! 24: struct tokbufdesc *tok_next; ! 25: char toks[AVAILTOKS]; ! 26: char bufovf[MAXVAX + SAFETY]; ! 27: }; ! 28: /* ! 29: * Definitions for handling tokens in the intermediate file ! 30: * buffers. ! 31: * ! 32: * We want to have the compiler produce the efficient auto increment ! 33: * instruction for stepping through the buffer of tokens. We must ! 34: * fool the type checker into thinking that a pointer can point ! 35: * to various size things. ! 36: */ ! 37: ! 38: typedef char toktype; ! 39: ! 40: typedef char *ptrall; /*all uses will be type cast*/ ! 41: typedef short lgtype; /*for storing length of strings or skiping*/ ! 42: /* ! 43: * defintions for putting various typed values ! 44: * into the intermediate buffers ! 45: * ptr will ALWAYS be of type ptrall ! 46: */ ! 47: ! 48: #define pchar(ptr,val) *ptr++ = val ! 49: #define puchar(ptr,val) *ptr++ = val ! 50: ! 51: #define pshort(ptr,val) *(short *)ptr=val, ptr += sizeof(short) ! 52: #define pushort(ptr,val) *(unsigned short *)ptr=val, ptr += sizeof(short) ! 53: #define pint(ptr,val) *(int *)ptr = val, ptr += sizeof(int) ! 54: #define puint(ptr,val) *(unsigned int *)ptr=val, ptr += sizeof(int) ! 55: #define plong(ptr,val) *(long *)ptr = val, ptr += sizeof(long) ! 56: #define pulong(ptr,val) *(unsigned long *)ptr=val, ptr += sizeof(long) ! 57: #define pfloat(ptr,val) *(float *)ptr = val, ptr += sizeof (float) ! 58: #define pdouble(ptr,val) *(double *)ptr = val, ptr += sizeof (double) ! 59: #define pptr(ptr,val) *(int *)ptr = (val), ptr += sizeof(ptrall) ! 60: #define ptoken(ptr,val) *ptr++ = val ! 61: #define pstrlg(ptr,val) *(lgtype *)ptr = val, ptr += sizeof(short) ! 62: #define pskiplg(ptr,val) *(lgtype *)ptr = val, ptr += sizeof(short) ! 63: ! 64: #define gchar(val, ptr) val = *ptr++ ! 65: #define guchar(val, ptr) val = *ptr++ ! 66: ! 67: #define gshort(val, ptr) val = *(short *)ptr , ptr += sizeof (short) ! 68: #define gushort(val, ptr) val = *(unsigned short *)ptr , ptr += sizeof (short) ! 69: #define gint(val, ptr) val = *(int *)ptr, ptr += sizeof (int) ! 70: #define guint(val, ptr) val = *(unsigend int *)ptr, ptr += sizeof (int) ! 71: #define glong(val, ptr) val = *(long *)ptr, ptr += sizeof (long) ! 72: #define gulong(val, ptr) val = *(unsigned long *)ptr, ptr += sizeof (long) ! 73: #define gfloat(val, ptr) val = *(float *)ptr, ptr += sizeof (float) ! 74: #define gdouble(val, ptr) val = *(double *)ptr, ptr += sizeof (double) ! 75: #define gptr(val, ptr) val = *(int *)ptr, ptr += sizeof (ptrall) ! 76: #define gtoken(val, ptr) val = *ptr++ ! 77: #define gstrlg(val, ptr) val = *(lgtype *)ptr, ptr += sizeof (short) ! 78: #define gskiplg(val, ptr) val = *(lgtype *)ptr, ptr += sizeof (short) ! 79: ! 80: ! 81: extern ptrall tokptr; /*the next token to consume, call by copy*/ ! 82: extern ptrall tokub; /*current upper bound in the current buffer*/ ! 83: ! 84: /* ! 85: * Strings are known for their characters and for their length. ! 86: * We cannot use a normal zero termination byte, because strings ! 87: * can contain anything. ! 88: * ! 89: * We have two "strings", so that an input string that is too long can be ! 90: * split across two string buffers, and not confuse the yacc grammar. ! 91: * (This is probably superflous) ! 92: * ! 93: * We have a third string of nulls so that the .skip can be ! 94: * handled in the same way as strings. ! 95: */ ! 96: #define MAXSTRLG 127 ! 97: ! 98: struct strdesc{ ! 99: char str_lg; ! 100: char str[MAXSTRLG]; ! 101: }; ! 102: ! 103: extern struct strdesc strbuf[3]; ! 104: extern struct strdesc *strptr; /*points to the current string*/ ! 105: extern int strno; /*the current string being filled*/ ! 106: char *savestr();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.