|
|
1.1 ! root 1: /**************************************************************** ! 2: Copyright 1990, 1991 by AT&T Bell Laboratories and Bellcore. ! 3: ! 4: Permission to use, copy, modify, and distribute this software ! 5: and its documentation for any purpose and without fee is hereby ! 6: granted, provided that the above copyright notice appear in all ! 7: copies and that both that the copyright notice and this ! 8: permission notice and warranty disclaimer appear in supporting ! 9: documentation, and that the names of AT&T Bell Laboratories or ! 10: Bellcore or any of their entities not be used in advertising or ! 11: publicity pertaining to distribution of the software without ! 12: specific, written prior permission. ! 13: ! 14: AT&T and Bellcore disclaim all warranties with regard to this ! 15: software, including all implied warranties of merchantability ! 16: and fitness. In no event shall AT&T or Bellcore be liable for ! 17: any special, indirect or consequential damages or any damages ! 18: whatsoever resulting from loss of use, data or profits, whether ! 19: in an action of contract, negligence or other tortious action, ! 20: arising out of or in connection with the use or performance of ! 21: this software. ! 22: ****************************************************************/ ! 23: ! 24: #include "defs.h" ! 25: #include "iob.h" ! 26: ! 27: #define MEMBSIZE 32000 ! 28: #define GMEMBSIZE 16000 ! 29: ! 30: extern void exit(); ! 31: ! 32: char * ! 33: gmem(n, round) ! 34: int n, round; ! 35: { ! 36: static char *last, *next; ! 37: char *rv; ! 38: if (round) ! 39: #ifdef CRAY ! 40: if ((long)next & 0xe000000000000000) ! 41: next = (char *)(((long)next & 0x1fffffffffffffff) + 1); ! 42: #else ! 43: #ifdef MSDOS ! 44: if ((int)next & 1) ! 45: next++; ! 46: #else ! 47: next = (char *)(((long)next + sizeof(char *)-1) ! 48: & ~((long)sizeof(char *)-1)); ! 49: #endif ! 50: #endif ! 51: rv = next; ! 52: if ((next += n) > last) { ! 53: rv = Alloc(n + GMEMBSIZE); ! 54: ! 55: next = rv + n; ! 56: last = next + GMEMBSIZE; ! 57: } ! 58: return rv; ! 59: } ! 60: ! 61: struct memblock { ! 62: struct memblock *next; ! 63: char buf[MEMBSIZE]; ! 64: }; ! 65: typedef struct memblock memblock; ! 66: ! 67: static memblock *mem0; ! 68: memblock *curmemblock, *firstmemblock; ! 69: ! 70: char *mem_first, *mem_next, *mem_last, *mem0_last; ! 71: ! 72: void ! 73: mem_init() ! 74: { ! 75: curmemblock = firstmemblock = mem0 ! 76: = (memblock *)Alloc(sizeof(memblock)); ! 77: mem_first = mem0->buf; ! 78: mem_next = mem0->buf; ! 79: mem_last = mem0->buf + MEMBSIZE; ! 80: mem0_last = mem0->buf + MEMBSIZE; ! 81: mem0->next = 0; ! 82: } ! 83: ! 84: char * ! 85: mem(n, round) ! 86: int n, round; ! 87: { ! 88: memblock *b; ! 89: register char *rv, *s; ! 90: ! 91: if (round) ! 92: #ifdef CRAY ! 93: if ((long)mem_next & 0xe000000000000000) ! 94: mem_next = (char *)(((long)mem_next & 0x1fffffffffffffff) + 1); ! 95: #else ! 96: #ifdef MSDOS ! 97: if ((int)mem_next & 1) ! 98: mem_next++; ! 99: #else ! 100: mem_next = (char *)(((long)mem_next + sizeof(char *)-1) ! 101: & ~((long)sizeof(char *)-1)); ! 102: #endif ! 103: #endif ! 104: rv = mem_next; ! 105: s = rv + n; ! 106: if (s >= mem_last) { ! 107: if (n > MEMBSIZE) { ! 108: fprintf(stderr, "mem(%d) failure!\n", n); ! 109: exit(1); ! 110: } ! 111: if (!(b = curmemblock->next)) { ! 112: b = (memblock *)Alloc(sizeof(memblock)); ! 113: curmemblock->next = b; ! 114: b->next = 0; ! 115: } ! 116: curmemblock = b; ! 117: rv = b->buf; ! 118: mem_last = rv + sizeof(b->buf); ! 119: s = rv + n; ! 120: } ! 121: mem_next = s; ! 122: return rv; ! 123: } ! 124: ! 125: char * ! 126: tostring(s,n) ! 127: register char *s; ! 128: int n; ! 129: { ! 130: register char *s1, *se, **sf; ! 131: char *rv, *s0; ! 132: register int k = n + 2, t; ! 133: ! 134: sf = str_fmt; ! 135: sf['%'] = "%"; ! 136: s0 = s; ! 137: se = s + n; ! 138: for(; s < se; s++) { ! 139: t = *(unsigned char *)s; ! 140: s1 = sf[t]; ! 141: while(*++s1) ! 142: k++; ! 143: } ! 144: sf['%'] = "%%"; ! 145: rv = s1 = mem(k,0); ! 146: *s1++ = '"'; ! 147: for(s = s0; s < se; s++) { ! 148: t = *(unsigned char *)s; ! 149: sprintf(s1, sf[t], t); ! 150: s1 += strlen(s1); ! 151: } ! 152: *s1 = 0; ! 153: return rv; ! 154: } ! 155: ! 156: char * ! 157: cpstring(s) ! 158: register char *s; ! 159: { ! 160: return strcpy(mem(strlen(s)+1,0), s); ! 161: } ! 162: ! 163: void ! 164: new_iob_data(ios, name) ! 165: register io_setup *ios; ! 166: char *name; ! 167: { ! 168: register iob_data *iod; ! 169: register char **s, **se; ! 170: ! 171: iod = (iob_data *) ! 172: mem(sizeof(iob_data) + ios->nelt*sizeof(char *), 1); ! 173: iod->next = iob_list; ! 174: iob_list = iod; ! 175: iod->type = ios->fields[0]; ! 176: iod->name = cpstring(name); ! 177: s = iod->fields; ! 178: se = s + ios->nelt; ! 179: while(s < se) ! 180: *s++ = "0"; ! 181: *s = 0; ! 182: } ! 183: ! 184: char * ! 185: string_num(pfx, n) ! 186: char *pfx; ! 187: long n; ! 188: { ! 189: char buf[32]; ! 190: sprintf(buf, "%s%ld", pfx, n); ! 191: /* can't trust return type of sprintf -- BSD gets it wrong */ ! 192: return strcpy(mem(strlen(buf)+1,0), buf); ! 193: } ! 194: ! 195: static defines *define_list; ! 196: ! 197: void ! 198: def_start(outfile, s1, s2, post) ! 199: FILE *outfile; ! 200: char *s1, *s2, *post; ! 201: { ! 202: defines *d; ! 203: int n, n1; ! 204: extern int in_define; ! 205: ! 206: n = n1 = strlen(s1); ! 207: if (s2) ! 208: n += strlen(s2); ! 209: d = (defines *)mem(sizeof(defines)+n, 1); ! 210: d->next = define_list; ! 211: define_list = d; ! 212: strcpy(d->defname, s1); ! 213: if (s2) ! 214: strcpy(d->defname + n1, s2); ! 215: in_define = 1; ! 216: nice_printf(outfile, "#define %s", d->defname); ! 217: if (post) ! 218: nice_printf(outfile, " %s", post); ! 219: } ! 220: ! 221: void ! 222: other_undefs(outfile) ! 223: FILE *outfile; ! 224: { ! 225: defines *d; ! 226: if (d = define_list) { ! 227: define_list = 0; ! 228: nice_printf(outfile, "\n"); ! 229: do ! 230: nice_printf(outfile, "#undef %s\n", d->defname); ! 231: while(d = d->next); ! 232: nice_printf(outfile, "\n"); ! 233: } ! 234: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.