70000 #include "rundecs.h" 70010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *) 70020 (**) 70030 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ; 70040 PROCEDURE ERRORR(N :INTEGER); EXTERN ; 70050 FUNCTION SAFEACCESS(LOCATION: OBJECTP): UNDRESSP; EXTERN; 70060 PROCEDURE PCINCR (STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT; INCREMENT: INTEGER); EXTERN ; 70070 (**) 70080 (**) 70090 (*+01() (*$X6*) ()+01*) 70100 FUNCTION PROC( PROCEDURE P (*-01() ( COV: OBJECTP ; EFET: FETROOMP ) ()-01*) ): ASPROC ; EXTERN ; 70110 (*-01() 70120 FUNCTION PROC1( 70130 PROCEDURE P( COV: OBJECTP ; CHARS: GETBUFTYPE ; TERM: TERMSET ; I: INTEGER ; EFET: FETROOMP ) 70140 ): ASPROC ; EXTERN ; 70150 FUNCTION PROC2( PROCEDURE P( COV, STRNG: OBJECTP ; LB, UB: INTEGER ; EFET: FETROOMP ) ): ASPROC ; EXTERN ; 70160 FUNCTION PROC3( PROCEDURE P( COV: OBJECTP ; P, L, C: INTEGER ; EFET: FETROOMP ) ): ASPROC ; EXTERN ; 70170 FUNCTION PROCH( PROCEDURE P( COV: OBJECTP ; L: LFNTYPE ) ): ASPROC ; EXTERN ; 70180 ()-01*) 70190 PROCEDURE ASSWRSTR(COV, PUTSTRING: OBJECTP; LB, UB: INTEGER; EFET: FETROOMP); EXTERN; 70200 PROCEDURE ASSRDSTR(COV:OBJECTP; CHARS:GETBUFTYPE; TERM(*+01(),TERM1()+01*): TERMSET; I: INTEGER; EFET: FETROOMP); 70210 EXTERN; 70220 PROCEDURE ASSNEWLINE(COV: OBJECTP; EFET: FETROOMP); EXTERN; 70230 PROCEDURE ASSNEWPAGE(COV: OBJECTP; EFET: FETROOMP); EXTERN; 70240 PROCEDURE ASSRESET(COV: OBJECTP; EFET: FETROOMP); EXTERN; 70250 PROCEDURE ASSSET(COV: OBJECTP; P, L, C: INTEGER; EFET: FETROOMP); EXTERN; 70260 (**) 70270 (**) 70280 FUNCTION ASSOCIATE(RF,CHARFILE:OBJECTP): INTEGER; 70290 VAR CB,OFF,CPS:INTEGER; 70300 F,PCOV:OBJECTP; 70310 BEGIN 70320 F := INCPTR(SAFEACCESS(RF), -STRUCTCONST); 70330 PCINCR(INCPTR(F, STRUCTCONST),FILEBLOCK,-INCRF); 70340 ENEW(PCOV, COVERSIZE); 70350 (*-02() PCOV^.FIRSTWORD := SORTSHIFT * ORD(COVER) + INCRF; ()-02*) 70360 (*+02() PCOV^.PCOUNT:=1; PCOV^.SORT:=COVER; ()+02*) 70370 F^.PCOVER:=PCOV; 70380 WITH CHARFILE^ DO 70390 WITH DESCVEC[0] DO 70400 BEGIN CPS:=DI-LBADJ; 70410 CB:=UI; 70420 OFF:=DI; 70430 IF LI<>1 THEN ERRORR(WRONGMULT); 70440 END; 70450 WITH PCOV^ DO 70460 BEGIN COFCPOS:=1; LOFCPOS:=1; POFCPOS:=1; 70470 CHARBOUND:=CB; LINEBOUND:=1; PAGEBOUND:=1; 70480 STATUS:=[OPENED,CHARMOOD]; 70490 POSSIBLES:=[GETPOSS,PUTPOSS,RESETPOSS,SETPOSS,ASSPOSS]; 70500 DOPUTS := PROC(*-01()2()-01*)(ASSWRSTR); 70510 DOGETS := PROC(*-01()1()-01*)(ASSRDSTR); 70520 DONEWLINE := PROC(ASSNEWLINE); 70530 DONEWPAGE := PROC(ASSNEWPAGE); 70540 DORESET := PROC(ASSRESET); 70550 DOSET := PROC(*-01()3()-01*)(ASSSET); 70560 ASSOC := TRUE; 70570 ASSREF:=CHARFILE; 70580 CPOSELS:=CPS; 70590 OFFSETDI:=OFF; 70600 FPINC(CHARFILE^); 70610 OSCOPE := CHARFILE^.OSCOPE; 70620 END; 70630 WITH F^ DO 70640 BEGIN 70650 IF RF^.OSCOPE