|
|
1.1 ! root 1: #include "common.h" ! 2: #include "code.h" ! 3: #define BLOCKSIZE 10 ! 4: ! 5: Code *cdfreep = NULL; ! 6: ! 7: Code * ! 8: CodeGetBlock() ! 9: { ! 10: static int count = 0; ! 11: static Code *blockp = NULL; ! 12: Code *cp; ! 13: ! 14: if(cdfreep!=NULL) { ! 15: cp = cdfreep; ! 16: cdfreep = cdfreep->prev; ! 17: } else { ! 18: if(count==0) { ! 19: blockp = (Code *) malloc (BLOCKSIZE*sizeof(Code)); ! 20: count = BLOCKSIZE; ! 21: } ! 22: cp = blockp++; ! 23: count--; ! 24: } ! 25: cp->prev = NULL; ! 26: cp->firstFree = cp->segment; ! 27: return(cp); ! 28: } ! 29: ! 30: void ! 31: CodeFreeBlock(cd) ! 32: Code *cd; ! 33: { ! 34: if (cd!=NULL) { ! 35: cd->prev = cdfreep; ! 36: cdfreep = cd; ! 37: } ! 38: } ! 39: ! 40: Code * ! 41: CodeStoreChar(cd, c) ! 42: Code *cd; ! 43: char c; ! 44: { ! 45: if(cd->firstFree - cd->segment >= CSEGSIZE) { ! 46: Code *ncd = CodeGetBlock(); ! 47: ncd->prev = cd; ! 48: cd = ncd; ! 49: } ! 50: *cd->firstFree = c; ! 51: cd->firstFree++; ! 52: return(cd); ! 53: } ! 54: ! 55: Code * ! 56: CodeStoreString(cd, s) ! 57: Code *cd; ! 58: char *s; ! 59: { ! 60: while(*s!='\0') cd = CodeStoreChar(cd, *s++); ! 61: return(cd); ! 62: } ! 63: ! 64: Code * ! 65: CodeAppend(cd1, cd2) ! 66: Code *cd1, *cd2; ! 67: { ! 68: if(cd2==NULL) return(cd1); ! 69: cd2->prev = CodeAppend(cd1, cd2->prev); ! 70: return(cd2); ! 71: } ! 72: ! 73: void ! 74: CodeWrite(f, cd) ! 75: FILE *f; ! 76: Code *cd; ! 77: { ! 78: register char *cp; ! 79: ! 80: if (cd != NULL) ! 81: {CodeWrite(outfile, cd->prev); ! 82: for(cp=cd->segment; cp < cd->firstFree; cp++) ! 83: putc(*cp, f); ! 84: } ! 85: } ! 86: ! 87: Code * ! 88: CodeMarkLine(cd,lineno) ! 89: Code *cd; ! 90: int lineno; ! 91: { ! 92: char buf[100]; ! 93: sprintf(buf,"\n# line %d \"%s\"\n", lineno, inFileName); ! 94: return(CodeStoreString(cd,buf)); ! 95: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.