|
|
1.1 ! root 1: /* Copyright Bell Telephone Laboratories Whippany, N.J. ! 2: ! 3: * ///////////////////////////////////// ! 4: * ///////////////////////////////////// ! 5: * ///////////// bfiles.c ////////////// ! 6: * /// J. P. Hawkins WH X4610 8C-001 /// ! 7: * ///// Fri Aug 24 17:18:03 1979 ////// ! 8: * ///////////////////////////////////// ! 9: * ///////////////////////////////////// ! 10: ! 11: * ! 12: * File Access Preparation Routines ! 13: */ ! 14: /* "@(#) bfiles.c: V 1.4 9/9/81" */ ! 15: #include "bas.h" ! 16: extern moreflag[]; ! 17: ! 18: struct FILTBL filtbl[] = { ! 19: {'\0', 2}, /* File Designator # 1 */ ! 20: {'\0', 4}, /* File Designator # 2 */ ! 21: {'\0', 6}, /* File Designator # 3 */ ! 22: {'\0', 8}, /* File Designator # 4 */ ! 23: {'\0', 10}, /* File Designator # 5 */ ! 24: {'\0', 12}, /* File Designator # 6 */ ! 25: {'\0', 14}, /* File Designator # 7 */ ! 26: {'\0', 16}, /* File Designator # 8 */ ! 27: {'e', -1} /* END MARKER */ ! 28: }; ! 29: ! 30: /* ! 31: * ////// OPENO ////// ! 32: * ! 33: * Open file for output. ! 34: */ ! 35: openo() ! 36: { ! 37: setfile(1,'w'); ! 38: } ! 39: ! 40: /* ! 41: * ////// OPENI ////// ! 42: * ! 43: * Open file for input. ! 44: */ ! 45: openi() ! 46: { ! 47: setfile(0,'r'); ! 48: } ! 49: ! 50: /* ! 51: * ////// APPEND ////// ! 52: * ! 53: * Open file for append or create if non-existant. ! 54: */ ! 55: append() ! 56: { ! 57: setfile(2,'w'); ! 58: } ! 59: /* ! 60: * ! 61: * //// OPEN FILES for READ, WRITE or APPEND //// ! 62: * ! 63: * write is mode 1 ! 64: * ! 65: * ! 66: */ ! 67: setfile(modnum,modchar) ! 68: int modnum; ! 69: char modchar; ! 70: { ! 71: int size; /* field size */ ! 72: char field[20]; ! 73: int save; ! 74: char *ptr; ! 75: #ifdef STRINGS ! 76: char *savptr; ! 77: #endif ! 78: int i; ! 79: int madeit; ! 80: ptr = expr; ! 81: ! 82: i = 0; ! 83: while(filtbl[i].mode != 'e') ! 84: { ! 85: madeit = 0; /* flag fact that no file was open */ ! 86: save = (int)ptr; ! 87: if(scanfld(&ptr,field,',') == 0) ! 88: break; ! 89: #ifdef STRINGS ! 90: savptr = field; ! 91: if(class(&savptr,scratch) >= STCLASS) ! 92: { ! 93: evals(field,field); /* expand expr */ ! 94: } ! 95: #endif ! 96: size = strlen(field); ! 97: if(filtbl[i].mode == '\0') /* if this slot not used */ ! 98: { ! 99: if(size > 14) ! 100: { ! 101: error(inst.thing.linno, 34); /* filename too long */ ! 102: return(-1); ! 103: } ! 104: if((filtbl[i].fildes = copen(field, modnum)) < 0) ! 105: { ! 106: error(inst.thing.linno, 2); /* open error */ ! 107: return(-1); ! 108: } ! 109: filtbl[i].mode = modchar; /* set mode for write */ ! 110: madeit = 1; /* flag the fact an entry was made */ ! 111: moreflag[i] = 0; ! 112: } ! 113: else ! 114: { ! 115: ptr = (char *)save; /* back up input string pointer */ ! 116: } ! 117: i++; ! 118: } ! 119: if(!madeit && (filtbl[i].mode == 'e')) ! 120: { ! 121: error(inst.thing.linno, 35); /* FILE DES. USED UP */ ! 122: return(-1); ! 123: } ! 124: return(0); ! 125: } ! 126: /* ! 127: * ! 128: * ////// FILE CLOSE ////// ! 129: * ! 130: * format: closef _des ! 131: */ ! 132: _closef() ! 133: { ! 134: int fd; ! 135: if((expr[0] == '_') && (expr[1] >= '0' && expr[1] <= '4')) ! 136: { ! 137: fd = expr[1] - '1'; ! 138: close(filtbl[fd].fildes); ! 139: moreflag[fd] = 0; /* init more flag for this desc. */ ! 140: filtbl[fd].mode = '\0'; /* mark it available */ ! 141: } ! 142: else ! 143: { ! 144: error(inst.thing.linno, 32); ! 145: return(-1); ! 146: } ! 147: return(0); ! 148: } ! 149: ! 150: /* ! 151: * ////// CLOSEALL ////// ! 152: * ! 153: * Close ALL open files. ! 154: */ ! 155: clall() ! 156: { ! 157: int i; ! 158: ! 159: for(i=0; filtbl[i].mode != 'e'; i++) /* scan file table */ ! 160: { ! 161: if(filtbl[i].mode != '\0') /* if this entry has ! 162: an open file */ ! 163: { ! 164: filtbl[i].mode = '\0'; /* mark this slot unused */ ! 165: close(filtbl[i].fildes); /* close this file */ ! 166: moreflag[i] = 0; /* init moreflag */ ! 167: } ! 168: } ! 169: return(0); ! 170: } ! 171: /* ! 172: * ! 173: * ////// SCANFLD ////// ! 174: * ! 175: * scan for fields delimited by dlm ! 176: */ ! 177: scanfld(ptr,field,dlm) ! 178: char **ptr; ! 179: char field[]; ! 180: char dlm; ! 181: { ! 182: int i; ! 183: ! 184: for(i=0; (**ptr != dlm) && (**ptr != '\0'); ) ! 185: { ! 186: field[i++] = *(*ptr)++; ! 187: } ! 188: field[i] = '\0'; /* null term */ ! 189: if(**ptr == dlm) *(*ptr)++; /* bump past comma */ ! 190: return(i); ! 191: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.