Trailing-Edge
-
PDP-10 Archives
-
decuslib20-03
-
decus/20-0078/util/specif.sim
There is 1 other file named specif.sim in the archive. Click here to see a list.
BEGIN
EXTERNAL REF (Infile) PROCEDURE findinfile;
EXTERNAL REF (Directfile) PROCEDURE finddirectfile;
EXTERNAL REF (Outfile) PROCEDURE findoutfile;
EXTERNAL TEXT PROCEDURE front,scanto,getitem;
EXTERNAL INTEGER PROCEDURE maxint,search,splita,hash,arrlgd;
EXTERNAL PROCEDURE split,arrtxt;
EXTERNAL BOOLEAN PROCEDURE puttext;
EXTERNAL TEXT PROCEDURE conc,upcase,frontstrip,rest,checkextension;
EXTERNAL CHARACTER PROCEDURE fetchar,findtrigger;
EXTERNAL LONG REAL PROCEDURE scanreal;
EXTERNAL INTEGER PROCEDURE checkreal,checkint,scanint,ilog;
EXTERNAL BOOLEAN PROCEDURE menu;
EXTERNAL CLASS safeio,simdbm;
simdbm("","","",0,TRUE) BEGIN
INTEGER k,n; TEXT t; TEXT ARRAY ta[1:4];
REF (record) r1; REF (rspec) rs;
REF (rspec) PROCEDURE makerecordspec(rname,fnames,ftypes,rkey,
rsize,nfields);
VALUE rname,fnames,ftypes,rkey; TEXT rname,fnames,ftypes,rkey;
INTEGER rsize,nfields;
! ------------------------------------------------------
! creates a new record type specification dynamically
! and allocates corresponding space within data base file.
! parameters:
! RNAME name of record type
! FNAMES field names separated with commas
! FTYPES types of fields, coded
! RKEY name of key field
! RSIZE size of area to be allocated
1 NFIELDS number of fields within the record
! ------------------------------------------------------------;
BEGIN
INTEGER k,n,keypos; INTEGER ARRAY ia[1:nfields+1];
TEXT ARRAY ta[1:nfields+1],rta[1:8];
REF (rspec) rs;
PROCEDURE splitt(t); TEXT t;
BEGIN
k:=splita(t,komma,ta,nfields); IF k < nfields THEN
BEGIN outline("ILLEGAL ARG TO MAKERECORDSPEC!"); GOTO fin; END;
END SPLITT;
splitt(ftypes);
FOR k:=1 STEP 1 UNTIL nfields DO ia(k):=scanint(ta(k));
splitt(fnames);
keypos:=loctext(rkey,ta);
rta(1):-rname; rta(2):-rkey; rta(3):-intput(oflowtop);
rta(4):-intput(rsize); rta(5):-intput(keypos);
rta(6):-intput(nfields);
rta(7):-fnames; rta(8):-ftypes;
rs:-NEW rspec(spec__spec,rta,rname,rkey,oflowtop,
rsize,keypos,nfields,ta,ia);
oflowtop:=oflowtop+rsize;
rs.store;
rs.prototype:-NEW record(rs,ta);
makerecordspec:-rs;
fin:
END MAKERECORDSPEC;
! ------------ START OF MAIN ----------------;
! example of the use of makerecordspec and of the
! records specified through it;
request("Data base file: ","",textinput(t,TRUE),"",nohelp);
request("Image size: ","68",intinput(n,TRUE),"",nohelp);
openbase(t,n);
! ------ create new record type RNEW --------;
rs:-makerecordspec("RNEW","X,Y,Z","3,1,3","X",20,3);
! ------ store ten records of type RNEW --------;
IF rs =/= NONE THEN
BEGIN
FOR k:=1 STEP 1 UNTIL 10 DO
BEGIN
ta(1):-intput(100+k); ta(2):-intput(100-k); ta(3):-intput(k);
r1:-NEW record(rs,ta); r1.store;
END;
END;
eof:
END;
END;