89300 #include "rundecs.h" 89310 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *) 89320 (**) 89330 PROCEDURE TESTCC(TARGET:OBJECTP); EXTERN; 89340 (**) 89350 (**) 89360 PROCEDURE ASSWRSTR(COV,PUTSTRING:OBJECTP;LB,UB:INTEGER; VAR FYLE :FYL); 89370 VAR PTR: UNDRESSP; 89380 I,CP,OFS,WIDTH:INTEGER; 89390 BEGIN WITH COV^ DO 89400 BEGIN 89410 CP:=CPOSELS; 89420 OFS:=OFFSETDI; 89430 IF FPTWO(ASSREF^.ANCESTOR^) THEN 89440 TESTCC(ASSREF); 89450 PTR := INCPTR(ASSREF^.ANCESTOR^.PVALUE, CP); 89460 IF LB<0 THEN 89470 BEGIN PTR^.FIRSTWORD:=UB; CP:=CP+OFS; WIDTH:=1 END 89480 ELSE BEGIN WIDTH:=UB-LB+1; 89490 WITH PUTSTRING^ DO 89500 FOR I := LB TO UB DO 89510 BEGIN PTR^.FIRSTWORD:=ORD(CHARVEC[I]); 89520 PTR := INCPTR(PTR, OFS); 89530 CP:=CP+OFS 89540 END; 89550 END; 89560 COFCPOS:=COFCPOS+WIDTH; 89570 CPOSELS:=CP; 89580 IF COFCPOS>CHARBOUND THEN 89590 STATUS:=STATUS+[LINEOVERFLOW]; 89600 END; 89610 END; 89620 (**) 89630 (**) 89640 PROCEDURE ASSRDSTR( 89650 PCOV: OBJECTP; VAR CHARS: GETBUFTYPE; T (*+01(), T1()+01*): TERMSET; VAR I: INTEGER; VAR FYLE: FYL 89660 ); 89670 VAR PTR: UNDRESSP; 89680 CH: CHAR; 89690 (*LINEOK*) 89700 BEGIN 89710 WITH PCOV^ DO 89720 BEGIN 89730 PTR := INCPTR(ASSREF^.ANCESTOR^.PVALUE, CPOSELS); 89740 IF I<0 THEN 89750 BEGIN I := PTR^.FIRSTWORD; CPOSELS := CPOSELS+OFFSETDI; COFCPOS := COFCPOS+1 END 89760 ELSE 89770 BEGIN 89780 CH := CHR(PTR^.FIRSTWORD); 89790 WHILE (COFCPOS<=CHARBOUND) AND NOT(CH IN T) 89800 (*+01() AND ((ORD(CH)<=59) OR NOT(CHR(ORD(CH)-59) IN T1)) ()+01*) DO 89810 BEGIN 89820 CHARS[I] := CH; I := I+1; 89830 CPOSELS := CPOSELS+OFFSETDI; 89840 PTR := INCPTR(PTR, OFFSETDI); 89850 CH := CHR(PTR^.FIRSTWORD); 89860 COFCPOS := COFCPOS+1; 89870 END 89880 END; 89890 IF COFCPOS>CHARBOUND THEN 89900 STATUS := STATUS+[LINEOVERFLOW]; 89910 END 89920 END; 89930 (**) 89940 (**) 89950 PROCEDURE ASSNEWLINE(COV: OBJECTP; VAR FYLE: FYL); 89960 BEGIN WITH COV^ DO 89970 BEGIN 89980 LOFCPOS := 2; COFCPOS := 1; 89990 STATUS := STATUS+[PAGEOVERFLOW,LINEOVERFLOW]; 90000 END 90010 END; 90020 (**) 90030 (**) 90040 PROCEDURE ASSNEWPAGE(COV: OBJECTP; VAR FYLE: FYL); 90050 BEGIN WITH COV^ DO 90060 BEGIN 90070 POFCPOS := 2; LOFCPOS := 1; COFCPOS := 1; 90080 IF READMOOD IN STATUS THEN STATUS := STATUS+[LFE,PAGEOVERFLOW,LINEOVERFLOW] 90090 ELSE STATUS := STATUS+[PFE,PAGEOVERFLOW,LINEOVERFLOW]; 90100 END 90110 END; 90120 (**) 90130 (**) 90140 PROCEDURE ASSRESET(COV: OBJECTP; VAR FYLE: FYL); 90150 BEGIN WITH COV^.ASSREF^ DO 90160 COV^.CPOSELS := DESCVEC[0].DI-LBADJ; 90170 END; 90180 (**) 90190 (**) 90200 PROCEDURE ASSSET(COV: OBJECTP; P, L, C: INTEGER; VAR FYLE: FYL); 90210 BEGIN WITH COV^ DO 90220 BEGIN 90230 COFCPOS := C; LOFCPOS := L; POFCPOS := P; 90240 STATUS := STATUS-[LFE,PFE,PAGEOVERFLOW,LINEOVERFLOW]; 90250 IF POFCPOS>PAGEBOUND THEN ASSNEWPAGE(COV, FYLE) 90260 ELSE IF LOFCPOS>LINEBOUND THEN ASSNEWLINE(COV, FYLE) 90270 ELSE IF COFCPOS>CHARBOUND THEN STATUS := STATUS+[LINEOVERFLOW] 90280 ELSE WITH ASSREF^ DO 90290 COV^.CPOSELS := C*DESCVEC[0].DI-LBADJ; 90300 END 90310 END; 90320 (**) 90330 (**) 90340 (*-02() 90350 BEGIN (*OF A68*) 90360 END; (*OF A68*) 90370 ()-02*) 90380 (*+01() 90390 BEGIN (*OF MAIN PROGRAM*) 90400 END (*OF EVERYTHING*). 90410 ()+01*)