#-h- isamsym 111 asc 17-oct-80 13:33:49 define(DEFAULT_WIDTH,25) define(DEFAULT_DIF,1) define(DEFAULT_JUSTFY,LEFT) define(LEFT,0) define(RIGHT,1) #-h- cisam 211 asc 17-oct-80 13:33:49 common / cisam / dif, width, justfy integer dif # number of records between isam'ed records integer width # width of key field in index integer justfy # type of justification desired on key; init = LEFT #-h- isam.r 2247 asc 17-oct-80 13:33:50 #-h- main 652 asc 17-oct-80 09:02:03 include isamsym subroutine main integer oldadr(2), addr(2), n, status, i, junk integer getlin, getwrd, doline character oldwrd(MAXLINE), buf(MAXLINE), word(MAXLINE) include cisam call getcmd # crack command line oldwrd(1) = EOS oldadr(1) = 0 oldadr(2) = 0 n = 0 repeat { call markl(STDIN, addr) status = getlin(buf, STDIN) if (status != EOF) { n = n + 1 i = 1 junk = getwrd(buf, i, word) if (doline(n) == YES) call outlin(word, addr) call scopy(word, 1, oldwrd, 1) oldadr(1) = addr(1) oldadr(2) = addr(2) } } until (status == EOF) if (doline(n) == NO) call outlin(oldwrd, oldadr) return end #-h- doline 159 asc 17-oct-80 08:48:29 integer function doline(n) integer n include cisam if (dif == 1) return(YES) else if (mod(n, dif) == 1) return(YES) else return(NO) end #-h- outlin 428 asc 17-oct-80 08:48:30 subroutine outlin(word, addr) character word(ARB) integer addr(2), j integer length include cisam if (justfy == RIGHT) for (j=length(word) + 1; j <= width; j=j+1) call putc(BLANK) call putlin(word, STDOUT) if (justfy == LEFT) for (j=length(word) + 1; j <= width; j=j+1) call putc(BLANK) call putc(BLANK) call putdec(addr(1), 1) call putc(BLANK) call putdec(addr(2), 1) call putc(NEWLINE) return end #-h- getcmd 812 asc 17-oct-80 09:13:59 subroutine getcmd character arg(FILENAMESIZE) integer getarg, equal, ctoi integer i, j include cisam string quest "?" dif = DEFAULT_DIF width = DEFAULT_WIDTH justfy = DEFAULT_JUSTFY for (i=1; getarg(i, arg, FILENAMESIZE) != EOF; i=i+1) { call fold(arg) if (equal(arg,quest) == YES) call error("usage: isam [-d] [-w] [-j].") if (arg(1) == MINUS) switch (arg(2)) { case LETD: { j = 3 dif = ctoi(arg, j) if (dif <= 0) dif = DEFAULT_DIF } case LETW: { j = 3 width = ctoi(arg, j) if (width <= 0) width = DEFAULT_WIDTH } case LETJ: { if (arg(3) == LETL) justfy = LEFT else if (arg(3) == LETR) justfy = RIGHT } default: call badarg(arg) } else call badarg(arg) } return end