|
|
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 7.1 2/5/81) ! 9: ! 10: getbatch(loc, count) ! 11: char *loc; ! 12: int count; ! 13: { ! 14: register char *c; ! 15: register int cnt, size; ! 16: int i; ! 17: ! 18: cnt = count; ! 19: # ifdef xZTR1 ! 20: if (tTf(42, 15)) ! 21: printf("getbatch:%d (%d)\n", cnt, Batch_cnt); ! 22: # endif ! 23: c = loc; ! 24: ! 25: while (cnt) ! 26: { ! 27: /* see if there is anything in the buffer */ ! 28: if (Batch_cnt == BATCHSIZE) ! 29: if ((i = readbatch()) < cnt) ! 30: syserr("getbatch:can't read enough %d %d", i, cnt); ! 31: if (cnt <= BATCHSIZE - Batch_cnt) ! 32: size = cnt; ! 33: else ! 34: size = BATCHSIZE - Batch_cnt; ! 35: bmove(&Batchbuf.bbuf[Batch_cnt], c, size); ! 36: Batch_cnt += size; ! 37: cnt -= size; ! 38: c += size; ! 39: /* flush the buffer if full */ ! 40: if (Batch_cnt == BATCHSIZE) ! 41: batchflush(); /* re-write buffer if necessary */ ! 42: } ! 43: return (0); ! 44: } ! 45: /* ! 46: ** PUTBATCH ! 47: */ ! 48: ! 49: putbatch(cp, count) ! 50: char *cp; ! 51: int count; ! 52: { ! 53: register char *c; ! 54: register int size, cnt; ! 55: int i; ! 56: ! 57: cnt = count; ! 58: c = cp; ! 59: # ifdef xZTR1 ! 60: if (tTf(42, 2)) ! 61: printf("putbatch:%d\n", cnt); ! 62: # endif ! 63: ! 64: while (cnt) ! 65: { ! 66: Batch_dirty = TRUE; /* mark this buffer as dirty */ ! 67: if (cnt + Batch_cnt > BATCHSIZE) ! 68: size = BATCHSIZE - Batch_cnt; ! 69: else ! 70: size = cnt; ! 71: bmove(c, &Batchbuf.bbuf[Batch_cnt], size); ! 72: c += size; ! 73: Batch_cnt += size; ! 74: cnt -= size; ! 75: if (Batch_cnt == BATCHSIZE) ! 76: { ! 77: batchflush(); ! 78: /* is there is more to write, must read ahead first */ ! 79: if (cnt) ! 80: if ((i = readbatch()) < cnt) ! 81: syserr("putbatch:rd too small %d", i); ! 82: } ! 83: } ! 84: } ! 85: /* ! 86: ** READBATCH ! 87: */ ! 88: ! 89: readbatch() ! 90: { ! 91: ! 92: if ((Batch_lread = read(Batch_fp, &Batchbuf, BATCHSIZE+IDSIZE)) < 0) ! 93: syserr("readbatch:can't read %d %d", Batch_lread, Batch_fp); ! 94: Batch_cnt = 0; ! 95: # ifdef xZTR1 ! 96: if (tTf(42, 10)) ! 97: printf("read %d bytes from batch\n", Batch_lread); ! 98: # endif ! 99: /* check file-id */ ! 100: if (!sequal(Fileset, Batchbuf.file_id)) ! 101: syserr("readbatch:bad id '%s' '%.20s' %d", Fileset, Batchbuf.file_id, Batch_lread); ! 102: return (Batch_lread); ! 103: } ! 104: /* ! 105: ** BATCHFLUSH ! 106: */ ! 107: ! 108: batchflush() ! 109: { ! 110: register int i; ! 111: if (Batch_cnt && Batch_dirty) ! 112: { ! 113: # ifdef xZTR1 ! 114: if (tTf(42, 5)) ! 115: printf("flush:backing up %d\n", Batch_lread); ! 116: # endif ! 117: if ((i = lseek(Batch_fp, (long) -Batch_lread, 1)) < 0) ! 118: syserr("batchflush:can't seek %d", Batch_lread); ! 119: # ifdef xZTR1 ! 120: if (tTf(42, 4)) ! 121: printf("flushing %d\n", Batch_cnt + IDSIZE); ! 122: # endif ! 123: if ((i = write(Batch_fp, &Batchbuf, Batch_cnt + IDSIZE)) != Batch_cnt + IDSIZE) ! 124: syserr("batchflush:can't write %d", i); ! 125: Batch_dirty = FALSE; ! 126: } ! 127: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.