232 lines
7.6 KiB
OpenEdge ABL
232 lines
7.6 KiB
OpenEdge ABL
71800 #include "rundecs.h"
|
|
71810 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
|
71820 (**)
|
|
71830 PROCEDURE GARBAGE(ANOBJECT: OBJECTP); EXTERN;
|
|
71840 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
|
71850 PROCEDURE CLPASC2(P1,P2: IPOINT; PROC: ASPROC); EXTERN;
|
|
71860 (**)
|
|
71870 (**)
|
|
71880 (*+01() (*$X4*) ()+01*)
|
|
71890 FUNCTION FUNC68(PB: ASNAKED; RF: OBJECTP): BOOLEAN; EXTERN;
|
|
71900 (**)
|
|
71910 (**)
|
|
71920 PROCEDURE NEWLINE(RF:OBJECTP); EXTERN;
|
|
71930 PROCEDURE NEWPAGE(RF:OBJECTP); EXTERN;
|
|
71940 (**)
|
|
71950 (**)
|
|
71960 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP);
|
|
71970 BEGIN WITH RF^ DO
|
|
71980 CASE SORT OF
|
|
71990 REFN: F:=PVALUE;
|
|
72000 REFSL1: F := INCPTR(ANCESTOR^.PVALUE, OFFSET-STRUCTCONST);
|
|
72010 UNDEF: ERRORR(RDEREF);
|
|
72020 NILL: ERRORR(RDEREFNIL)
|
|
72030 END (*CASE*)
|
|
72040 END;
|
|
72050 (**)
|
|
72060 (**)
|
|
72070 FUNCTION GETPROC(RN: OBJECTP): ASNAKED;
|
|
72080 VAR TEMP: NAKEGER;
|
|
72090 BEGIN
|
|
72100 (*+01() TEMP.ASNAK := 0; ()+01*)
|
|
72110 WITH RN^, TEMP.NAK DO
|
|
72120 IF SORT=ROUTINE THEN
|
|
72130 BEGIN
|
|
72140 STOWEDVAL := ASPTR(ENVCHAIN); POINTER := ASPTR(ORD(PROCBL));
|
|
72150 IF FTST THEN GARBAGE(RN);
|
|
72160 END
|
|
72170 ELSE IF SORT=PASCROUT THEN
|
|
72180 BEGIN
|
|
72190 (*-01() STOWEDVAL := NIL; ()-01*)
|
|
72200 PASCPARAMS := PPARAMS; PASCPROC := PPROCBL ;
|
|
72210 POINTER := ASPTR(ORD(PASCADDR));
|
|
72220 IF FTST THEN GARBAGE(RN);
|
|
72230 END
|
|
72240 ELSE ERRORR(RROUTIN);
|
|
72250 GETPROC := TEMP.ASNAK;
|
|
72260 END;
|
|
72270 (**)
|
|
72280 (**)
|
|
72290 PROCEDURE SETREADMOOD(PCOV:OBJECTP);
|
|
72300 BEGIN WITH PCOV^ DO
|
|
72310 IF NOT([READMOOD]<=STATUS) THEN
|
|
72320 BEGIN IF NOT([GETPOSS]<=POSSIBLES)
|
|
72330 THEN ERRORR(NOREAD)
|
|
72340 ELSE IF [OPENED,WRITEMOOD,BINMOOD,NOTSET]<=STATUS THEN
|
|
72350 ERRORR(NOALTER)
|
|
72360 ELSE BEGIN (* BOOK NOT INITIALISED *)
|
|
72370 STATUS:=STATUS+[READMOOD]-[WRITEMOOD];
|
|
72380 IF NOTRESET IN STATUS THEN
|
|
72390 CLPASC2(ORD(PCOV), ORD(BOOK), DORESET)
|
|
72400 END;
|
|
72410 IF PFE IN STATUS THEN STATUS := STATUS-[PFE]+[LFE]
|
|
72420 (*ONLY APPLIES TO ASSOCIATED FILES FOR NOW*)
|
|
72430 END (* WITH *)
|
|
72440 END;
|
|
72450 (**)
|
|
72460 (**)
|
|
72470 PROCEDURE SETWRITEMOOD(PCOV:OBJECTP);
|
|
72480 BEGIN
|
|
72490 WITH PCOV^ DO
|
|
72500 IF NOT([WRITEMOOD]<=STATUS) THEN
|
|
72510 BEGIN IF NOT([PUTPOSS]<=POSSIBLES)
|
|
72520 THEN ERRORR(NOWRITE)
|
|
72530 ELSE IF [OPENED,READMOOD,BINMOOD,NOTSET]<=STATUS THEN
|
|
72540 ERRORR(NOALTER)
|
|
72550 ELSE BEGIN STATUS:=STATUS+[WRITEMOOD]-[READMOOD,LFE];
|
|
72560 IF NOTRESET IN STATUS THEN
|
|
72570 CLPASC2(ORD(PCOV), ORD(BOOK), DORESET)
|
|
72580 END;
|
|
72590 IF POFCPOS>PAGEBOUND THEN STATUS := STATUS+[PFE];
|
|
72600 END (* WITH *)
|
|
72610 END;
|
|
72620 (**)
|
|
72630 (**)
|
|
72640 PROCEDURE SETCHARMOOD(PCOV:OBJECTP);
|
|
72650 BEGIN WITH PCOV^ DO
|
|
72660 IF NOT([CHARMOOD]<=STATUS) THEN
|
|
72670 IF [OPENED,BINMOOD,NOTSET]<=STATUS
|
|
72680 THEN ERRORR(NOSHIFT)
|
|
72690 ELSE STATUS:=STATUS+[CHARMOOD]-[BINMOOD]
|
|
72700 END;
|
|
72710 (**)
|
|
72720 (**)
|
|
72730 PROCEDURE SETBINMOOD(PCOV:OBJECTP);
|
|
72740 BEGIN WITH PCOV^ DO
|
|
72750 IF NOT([BINMOOD]<=STATUS) THEN
|
|
72760 IF NOT([BINPOSS]<=POSSIBLES)
|
|
72770 THEN ERRORR(NOBIN)
|
|
72780 ELSE IF [OPENED,CHARMOOD,NOTSET]<=STATUS
|
|
72790 THEN ERRORR(NOSHIFT)
|
|
72800 ELSE STATUS:=STATUS+[BINMOOD]-[CHARMOOD]
|
|
72810 END;
|
|
72820 (**)
|
|
72830 (**)
|
|
72840 (*******ENSURE ROUTINES*******)
|
|
72850 (**)
|
|
72860 (**)
|
|
72870 PROCEDURE ENSSTATE(RF:OBJECTP;VAR F:OBJECTP;READING:STATUSSET);
|
|
72880 BEGIN TESTF(RF,F);
|
|
72890 WITH F^ DO
|
|
72900 IF NOT (READING<=PCOVER^.STATUS) THEN
|
|
72910 IF [OPENED]<=PCOVER^.STATUS
|
|
72920 THEN BEGIN
|
|
72930 IF [READMOOD]<=READING
|
|
72940 THEN SETREADMOOD(PCOVER)
|
|
72950 ELSE SETWRITEMOOD(PCOVER);
|
|
72960 IF [CHARMOOD]<=READING
|
|
72970 THEN SETCHARMOOD(PCOVER)
|
|
72980 ELSE SETBINMOOD(PCOVER)
|
|
72990 END
|
|
73000 ELSE ERRORR(NOTOPEN)
|
|
73010 END;
|
|
73020 (**)
|
|
73030 (**)
|
|
73040 FUNCTION ENSLOGICALFILE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN;
|
|
73050 (*MOOD OK, LOG FILE GENERALLY NOT*)
|
|
73060 VAR OLD: STATUSSET; MENDED: BOOLEAN;
|
|
73070 COV: OBJECTP;
|
|
73080 BEGIN WITH F^ DO
|
|
73090 BEGIN
|
|
73100 COV := PCOVER; WITH COV^ DO
|
|
73110 BEGIN
|
|
73120 IF NOTINITIALIZED IN STATUS THEN
|
|
73130 BEGIN
|
|
73140 CLPASC2(ORD(COV), ORD(BOOK), DONEWLINE);
|
|
73150 LOFCPOS := LOFCPOS-1;
|
|
73160 END;
|
|
73170 OLD := STATUS;
|
|
73180 END;
|
|
73190 IF LFE IN OLD THEN
|
|
73200 BEGIN
|
|
73210 IF LOGICALFILEMENDED=UNDEFIN THEN MENDED := FALSE
|
|
73220 ELSE MENDED:=FUNC68(GETPROC(LOGICALFILEMENDED),RF);
|
|
73230 ENSSTATE(RF,F,OLD);
|
|
73240 IF MENDED THEN
|
|
73250 ENSLOGICALFILE:=ENSLOGICALFILE(RF,F)
|
|
73260 ELSE ENSLOGICALFILE := FALSE
|
|
73270 END
|
|
73280 ELSE ENSLOGICALFILE:=TRUE;
|
|
73290 END
|
|
73300 END;
|
|
73310 (**)
|
|
73320 (**)
|
|
73330 FUNCTION ENSPHYSICALFILE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN;
|
|
73340 (* MOOD OK, FILE GENERALLY NOT *)
|
|
73350 VAR OLD: STATUSSET; MENDED,LFOK: BOOLEAN;
|
|
73360 BEGIN WITH F^ DO
|
|
73370 IF [LFE]<=PCOVER^.STATUS
|
|
73380 THEN LFOK:=ENSLOGICALFILE(RF,F)
|
|
73390 ELSE LFOK:=TRUE;
|
|
73400 IF LFOK THEN WITH F^ DO
|
|
73410 BEGIN OLD:=PCOVER^.STATUS;
|
|
73420 IF [PFE]<=OLD THEN
|
|
73430 BEGIN
|
|
73440 IF PHYSICALFILEMENDED=UNDEFIN THEN MENDED := FALSE
|
|
73450 ELSE MENDED:=FUNC68(GETPROC(PHYSICALFILEMENDED),RF);
|
|
73460 ENSSTATE(RF,F,OLD);
|
|
73470 IF MENDED
|
|
73480 THEN ENSPHYSICALFILE:=ENSPHYSICALFILE(RF,F)
|
|
73490 ELSE ERRORR(NOPHYSICAL);
|
|
73500 END
|
|
73510 ELSE ENSPHYSICALFILE:=TRUE
|
|
73520 END
|
|
73530 ELSE ENSPHYSICALFILE:=FALSE;
|
|
73540 END;
|
|
73550 (**)
|
|
73560 (**)
|
|
73570 FUNCTION ENSPAGE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN;
|
|
73580 (* MOOD OK, PAGE GENERALLY NOT *)
|
|
73590 VAR OLD: STATUSSET; PFOK,MENDED: BOOLEAN;
|
|
73600 BEGIN WITH F^ DO
|
|
73610 IF([PFE]<=PCOVER^.STATUS) OR ([LFE]<=PCOVER^.STATUS)
|
|
73620 THEN PFOK:=ENSPHYSICALFILE(RF,F)
|
|
73630 ELSE PFOK:=TRUE;
|
|
73640 IF PFOK THEN WITH F^ DO
|
|
73650 BEGIN OLD:=PCOVER^.STATUS;
|
|
73660 IF [PAGEOVERFLOW]<=OLD THEN
|
|
73670 BEGIN
|
|
73680 IF PAGEMENDED=UNDEFIN THEN MENDED := FALSE
|
|
73690 ELSE MENDED:=FUNC68(GETPROC(PAGEMENDED),RF);
|
|
73700 ENSSTATE(RF,F,OLD);
|
|
73710 IF NOT MENDED THEN NEWPAGE(RF);
|
|
73720 ENSPAGE:=ENSPAGE(RF,F)
|
|
73730 END
|
|
73740 ELSE ENSPAGE:=TRUE
|
|
73750 END
|
|
73760 ELSE ENSPAGE:=FALSE;
|
|
73770 END;
|
|
73780 (**)
|
|
73790 (**)
|
|
73800 FUNCTION ENSLINE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN;
|
|
73810 (* MOOD OK, LINE GENERALLY NOT *)
|
|
73820 VAR PAGEOK,MENDED:BOOLEAN; OLD: STATUSSET;
|
|
73830 BEGIN WITH F^ DO
|
|
73840 IF [PAGEOVERFLOW]<=PCOVER^.STATUS
|
|
73850 THEN PAGEOK:=ENSPAGE(RF,F)
|
|
73860 ELSE PAGEOK:=TRUE;
|
|
73870 IF PAGEOK THEN WITH F^ DO
|
|
73880 BEGIN OLD:=PCOVER^.STATUS;
|
|
73890 IF [LINEOVERFLOW]<=OLD THEN
|
|
73900 BEGIN
|
|
73910 IF LINEMENDED=UNDEFIN THEN MENDED := FALSE
|
|
73920 ELSE MENDED:=FUNC68(GETPROC(LINEMENDED),RF);
|
|
73930 ENSSTATE(RF,F,OLD);
|
|
73940 IF NOT MENDED THEN NEWLINE(RF);
|
|
73950 ENSLINE:=ENSLINE(RF,F)
|
|
73960 END
|
|
73970 ELSE ENSLINE:=TRUE
|
|
73980 END
|
|
73990 ELSE ENSLINE:=FALSE;
|
|
74000 END;
|
|
74010 (**)
|
|
74020 (**)
|
|
74030 (*-02()
|
|
74040 BEGIN (*OF A68*)
|
|
74050 END; (*OF A68*)
|
|
74060 ()-02*)
|
|
74070 (*+01()
|
|
74080 BEGIN (*OF MAIN PROGRAM*)
|
|
74090 END (* OF EVERYTHING *).
|
|
74100 ()+01*)
|