PROGRAM tstindex; { Programm for testing the external routines index0 and index1 } TYPE key_t = ARRAY[1..256] of CHAR; rec_t = ARRAY[1..2048] of CHAR; ctrl_rec = RECORD c_1 : ARRAY[1..4] of INTEGER; rec_size : INTEGER; c_2 : INTEGER; key_size : INTEGER; end; index_record = RECORD disk : CHAR; filename : ARRAY[1..8] of CHAR; return_code : INTEGER; res_1 : INTEGER; ctrl : ^ctrl_rec; reserved : ARRAY[1..196] of CHAR; END; VAR key : key_t; rec : rec_t; cmd : CHAR; ir : index_record; tem_d : ARRAY[1..2048] of CHAR; PROCEDURE INDEX0 ( command : CHAR; var key : key_t; var rec : rec_t; var ir : index_record ); extern; PROCEDURE INDEX1 ( command : CHAR; var key : key_t; var rec : rec_t; var ir : index_record ); extern; BEGIN (* tstindex *) ir := ' '; write('Disk: '); readln(ir.disk); write('File: '); readln(ir.filename); REPEAT write('cmd: '); readln(cmd); cmd := upcase(cmd); key := ' '; rec := ' '; IF (cmd in ['A', 'D', 'R', 'U']) THEN BEGIN write('key: '); readln(key); IF (cmd in ['A', 'U']) THEN BEGIN write('data: '); readln(tem_d); rec := copy(key, 1, ir.ctrl^.key_size) + copy(tem_d, 1, ir.ctrl^.rec_size - ir.ctrl^.key_size); END; END; (* justify or kompress must call INDEX1 *) IF (cmd in ['J', 'K']) THEN BEGIN rec := ' '; INDEX1(cmd, key, rec, ir); END ELSE INDEX0(cmd, key, rec, ir); IF (ir.return_code <> 0) THEN BEGIN writeln('Error:', ir.return_code); END; IF (cmd = 'Q') THEN writeln('query result: ',key[1]); IF (cmd in ['B', 'R', 'S']) THEN BEGIN writeln('key: ', copy(rec, 1, ir.ctrl^.key_size)); writeln('data: ', copy(rec, ir.ctrl^.key_size + 1, ir.ctrl^.rec_size - ir.ctrl^.key_size)); END; UNTIL (cmd = '?'); END. (* tstindex *)