|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <aux.h> ! 3: # include <symbol.h> ! 4: # include <access.h> ! 5: # include <batch.h> ! 6: # include <sccs.h> ! 7: ! 8: SCCSID(@(#)rdwrbatch.c 8.2 2/23/85) ! 9: ! 10: /* ! 11: ** GETBATCH - retrieve data from the batch file and place in given ! 12: ** location ! 13: ** ! 14: ** ! 15: ** Parameters: ! 16: ** loc - address of place to put the data from the batch file ! 17: ** count - amount of data to get ! 18: ** ! 19: ** Return Codes: ! 20: ** 0 ! 21: ** ! 22: ** Side Effects: ! 23: ** loc is filled with data from batch file ! 24: ** ! 25: ** Trace Flags: ! 26: ** Z42.15 ! 27: ** ! 28: ** Called by: ! 29: ** modupdate ! 30: ** secupdate ! 31: ** update ! 32: ** btreeupdate ! 33: ** ! 34: */ ! 35: getbatch(loc, count) ! 36: char *loc; ! 37: int count; ! 38: { ! 39: register char *c; ! 40: register int cnt, size; ! 41: int i; ! 42: ! 43: cnt = count; ! 44: # ifdef xZTR1 ! 45: if (tTf(42, 15)) ! 46: printf("getbatch:%d (%d)\n", cnt, Batch_cnt); ! 47: # endif ! 48: c = loc; ! 49: ! 50: while (cnt) ! 51: { ! 52: /* see if there is anything in the buffer */ ! 53: if (Batch_cnt == BATCHSIZE) ! 54: if ((i = readbatch()) < cnt) ! 55: syserr("getbatch:can't read enough %d %d", i, cnt); ! 56: if (cnt <= BATCHSIZE - Batch_cnt) ! 57: size = cnt; ! 58: else ! 59: size = BATCHSIZE - Batch_cnt; ! 60: bmove(&Batchbuf.bbuf[Batch_cnt], c, size); ! 61: Batch_cnt += size; ! 62: cnt -= size; ! 63: c += size; ! 64: /* flush the buffer if full */ ! 65: if (Batch_cnt == BATCHSIZE) ! 66: batchflush(); /* re-write buffer if necessary */ ! 67: } ! 68: return (0); ! 69: } ! 70: ! 71: /* ! 72: ** PUTBATCH - put data in the batch file ! 73: ** ! 74: ** ! 75: ** Parameters: ! 76: ** cp - location of data to put in batch file ! 77: ** count - size of data ! 78: ** ! 79: ** Return Codes: ! 80: ** 0 ! 81: ** ! 82: ** Trace Flags: ! 83: ** Z42.2 ! 84: ** ! 85: ** Side Effects: ! 86: ** data is placed in batch file ! 87: ** ! 88: ** Called by: ! 89: ** update ! 90: ** ! 91: */ ! 92: ! 93: putbatch(cp, count) ! 94: char *cp; ! 95: int count; ! 96: { ! 97: register char *c; ! 98: register int size, cnt; ! 99: int i; ! 100: ! 101: cnt = count; ! 102: c = cp; ! 103: # ifdef xZTR1 ! 104: if (tTf(42, 2)) ! 105: printf("putbatch:%d\n", cnt); ! 106: # endif ! 107: ! 108: while (cnt) ! 109: { ! 110: Batch_dirty = TRUE; /* mark this buffer as dirty */ ! 111: if (cnt + Batch_cnt > BATCHSIZE) ! 112: size = BATCHSIZE - Batch_cnt; ! 113: else ! 114: size = cnt; ! 115: bmove(c, &Batchbuf.bbuf[Batch_cnt], size); ! 116: c += size; ! 117: Batch_cnt += size; ! 118: cnt -= size; ! 119: if (Batch_cnt == BATCHSIZE) ! 120: { ! 121: batchflush(); ! 122: /* is there is more to write, must read ahead first */ ! 123: if (cnt) ! 124: if ((i = readbatch()) < cnt) ! 125: syserr("putbatch:rd too small %d", i); ! 126: } ! 127: } ! 128: } ! 129: ! 130: /* ! 131: ** READBATCH - read the batch file ! 132: ** ! 133: ** Return Codes: ! 134: ** returns number of bytes read ! 135: ** ! 136: ** Trace Flags: ! 137: ** Z42.10 ! 138: ** ! 139: ** Called by: ! 140: ** update() ! 141: ** ! 142: */ ! 143: ! 144: readbatch() ! 145: { ! 146: ! 147: if ((Batch_lread = read(Batch_fp, &Batchbuf, BATCHSIZE+IDSIZE)) < 0) ! 148: syserr("readbatch:can't read %d %d", Batch_lread, Batch_fp); ! 149: Batch_cnt = 0; ! 150: # ifdef xZTR1 ! 151: if (tTf(42, 10)) ! 152: printf("read %d bytes from batch\n", Batch_lread); ! 153: # endif ! 154: /* check file-id */ ! 155: if (!sequal(Fileset, Batchbuf.file_id)) ! 156: syserr("readbatch:bad id '%s' '%.20s' %d", Fileset, Batchbuf.file_id, Batch_lread); ! 157: return (Batch_lread); ! 158: } ! 159: ! 160: /* ! 161: ** BATCHFLUSH - flush the batch file ! 162: ** ! 163: ** Return Codes: ! 164: ** 0 ! 165: ** ! 166: ** Trace Flags: ! 167: ** Z42.4, Z42.5 ! 168: ** ! 169: ** Side Effects: ! 170: ** Batch_dirty gets FALSE ! 171: ** ! 172: ** Called by: ! 173: ** update ! 174: ** getbatch ! 175: */ ! 176: ! 177: batchflush() ! 178: { ! 179: register int i; ! 180: if (Batch_cnt && Batch_dirty) ! 181: { ! 182: # ifdef xZTR1 ! 183: if (tTf(42, 5)) ! 184: printf("flush:backing up %d\n", Batch_lread); ! 185: # endif ! 186: if ((i = lseek(Batch_fp, (long) -Batch_lread, 1)) < 0) ! 187: syserr("batchflush:can't seek %d", Batch_lread); ! 188: # ifdef xZTR1 ! 189: if (tTf(42, 4)) ! 190: printf("flushing %d\n", Batch_cnt + IDSIZE); ! 191: # endif ! 192: if ((i = write(Batch_fp, &Batchbuf, Batch_cnt + IDSIZE)) != Batch_cnt + IDSIZE) ! 193: syserr("batchflush:can't write %d", i); ! 194: Batch_dirty = FALSE; ! 195: } ! 196: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.