176 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
81000 #include "rundecs.h"
 | 
						|
81010     (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
 | 
						|
81020  (**)
 | 
						|
81030 PROCEDURE ACLOSE(EFET: FETROOMP); EXTERN;
 | 
						|
81040 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
 | 
						|
81050 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
 | 
						|
81060 FUNCTION SAFEACCESS(LOCATION: OBJECTP): UNDRESSP; EXTERN;
 | 
						|
81070 PROCEDURE PCINCR (STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT; INCREMENT: INTEGER); EXTERN ;
 | 
						|
81080 FUNCTION CRSTRING(LENGTH: OFFSETRANGE): OBJECTP; EXTERN ;
 | 
						|
81090 PROCEDURE SETWRITEMOOD(PCOV: OBJECTP); EXTERN;
 | 
						|
81100 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP); EXTERN;
 | 
						|
81110 (*+02()
 | 
						|
81120 PROCEDURE AOPN(FIL: FETROOMP); EXTERN;
 | 
						|
81130 PROCEDURE ACRE(FIL: FETROOMP); EXTERN;
 | 
						|
81140 ()+02*)
 | 
						|
81150 (**)
 | 
						|
81160 (*+01() (*$X6*) ()+01*)
 | 
						|
81170 PROCEDURE OPENCOVER(
 | 
						|
81180  PFET: FETROOMP; VAR PCOV: OBJECTP; LFN: LFNTYPE; PROCEDURE CH (*-01() ( COV: OBJECTP; L: LFNTYPE) ()-01*)
 | 
						|
81190  ); EXTERN;
 | 
						|
81200 (*+01() (*$X4*) ()+01*)
 | 
						|
81210 (**)
 | 
						|
81220 (**)
 | 
						|
81230 FUNCTION FUNC68(PB: ASNAKED; RF: OBJECTP): BOOLEAN; EXTERN;
 | 
						|
81240 (**)
 | 
						|
81250 (**)
 | 
						|
81260 (*+02()
 | 
						|
81270 PROCEDURE AOPEN (FIL:FETROOMP; DIRECTION:INTEGER; LFN:LFNTYPE; BUF:IPOINT);
 | 
						|
81280   VAR NAME: OBJECTP;
 | 
						|
81290     BEGIN
 | 
						|
81300     IF LFN<>NIL THEN (*NIL FOR STANDOUT/STANDIN, DON'T NEED TO OPEN*)
 | 
						|
81310       BEGIN
 | 
						|
81320       IF LFN^.STRLENGTH MOD CHARPERWORD = 0 THEN (*NULL CHAR AT END NEEDED*)
 | 
						|
81330         BEGIN NAME := CRSTRING(LFN^.STRLENGTH+1);
 | 
						|
81340         MOVELEFT(INCPTR(LFN, STRINGCONST), INCPTR(NAME, STRINGCONST), LFN^.STRLENGTH) END
 | 
						|
81350       ELSE NAME := LFN;
 | 
						|
81360       FPINC(NAME^);
 | 
						|
81370       FIL^.FNAME := INCPTR(NAME, STRINGCONST );
 | 
						|
81380       IF DIRECTION=FORWRITE THEN ACRE(FIL) ELSE AOPN(FIL);
 | 
						|
81390       END;
 | 
						|
81400     END;
 | 
						|
81410 ()+02*)
 | 
						|
81420 (*+05()
 | 
						|
81430 PROCEDURE AOPEN( VAR FIL: FYL; DISP:INTEGER; LFN:LFNTYPE; BUF:IPOINT );
 | 
						|
81440   PROCEDURE NAMEFILE(CHARVEC: VECCHARS; SU, SL: INTEGER; VAR FIL: ANYFILE); EXTERN;
 | 
						|
81450   BEGIN
 | 
						|
81460     IF LFN <> NIL THEN
 | 
						|
81470       WITH LFN^ DO NAMEFILE(CHARVEC, STRLENGTH, 1, FIL);
 | 
						|
81480     IF ODD( DISP DIV FORWRITE ) THEN REWRITE( FIL ) ELSE RESET( FIL )
 | 
						|
81490   END ;
 | 
						|
81500 ()+05*)
 | 
						|
81510 (**)
 | 
						|
81520 (**)
 | 
						|
81530 (*+01()
 | 
						|
81540 PROCEDURE SETLIMIT(VAR FYLE: FYL; LIMIT: INTEGER);
 | 
						|
81550     BEGIN LINELIMIT(FYLE, LIMIT) END;
 | 
						|
81560 ()+01*)
 | 
						|
81570 (**)
 | 
						|
81580 (**)
 | 
						|
81590 (*+01() (*$X6*) ()+01*)
 | 
						|
81600 FUNCTION OPEN(RF,IDF:OBJECTP;PROCEDURE CH (*-01() ( COV: OBJECTP; L: LFNTYPE) ()-01*) ): INTEGER;
 | 
						|
81610   VAR I,J,ERRNO: INTEGER;
 | 
						|
81620       LFN:LFNTYPE; PFET:FETROOMP;
 | 
						|
81630       F, PCOV: OBJECTP;
 | 
						|
81640     BEGIN
 | 
						|
81650     F := INCPTR(SAFEACCESS(RF), -STRUCTCONST);
 | 
						|
81660     PCINCR(INCPTR(F, STRUCTCONST), FILEBLOCK, -INCRF);
 | 
						|
81670     (* REMOVE SPACES FROM STRING *)
 | 
						|
81680 (*+01()
 | 
						|
81690     WITH IDF^ DO
 | 
						|
81700       BEGIN FOR I:=1 TO 10 DO
 | 
						|
81710          IF CHARVEC[I]=' '
 | 
						|
81720           THEN LFN[I]:=':' ELSE LFN[I]:=CHARVEC[I];
 | 
						|
81730           IF LFN[8]<>':' THEN
 | 
						|
81740             WRITELN('WARNING-FILE NAME MORE THAN 7 CHARS',LFN);
 | 
						|
81750       END;
 | 
						|
81760 ()+01*)
 | 
						|
81770 (*-01() LFN := IDF; ()-01*)
 | 
						|
81780     NEW(PFET);
 | 
						|
81790     OPENCOVER(PFET, PCOV, LFN, CH);
 | 
						|
81800     F^.PCOVER := PCOV;
 | 
						|
81810     WITH F^ DO
 | 
						|
81820       BEGIN
 | 
						|
81830       LOGICALFILEMENDED:=UNDEFIN;
 | 
						|
81840       PHYSICALFILEMENDED:=UNDEFIN;
 | 
						|
81850       PAGEMENDED:=UNDEFIN;
 | 
						|
81860       LINEMENDED:=UNDEFIN;
 | 
						|
81870       TERM:=[];
 | 
						|
81880       (*+01() TERM1:=[] ; ()+01*)
 | 
						|
81890       OPEN := ORD(NOT(OPENED IN PCOVER^.STATUS));
 | 
						|
81900       END;
 | 
						|
81910     IF FPTST(RF^) THEN GARBAGE(RF);
 | 
						|
81920     END;     (*OPEN*)
 | 
						|
81930 (**)
 | 
						|
81940 (**)
 | 
						|
81950 (*+01() (*$X6*) ()+01*)
 | 
						|
81960 FUNCTION ESTABLISH(
 | 
						|
81970   RF,IDF:OBJECTP;PROCEDURE CH (*-01() (COV: OBJECTP; L: LFNTYPE) ()-01*); MP,ML,MC:INTEGER
 | 
						|
81980                   ): INTEGER;
 | 
						|
81990   VAR F:OBJECTP;
 | 
						|
82000     BEGIN
 | 
						|
82010     IF (MP<1) OR (ML<1) OR (MC<1) THEN ERRORR(POSMIN);
 | 
						|
82020     ESTABLISH := OPEN(RF,IDF,CH);
 | 
						|
82030     TESTF(RF,F);
 | 
						|
82040     WITH F^.PCOVER^ DO
 | 
						|
82050       BEGIN
 | 
						|
82060         IF NOT([PUTPOSS]<=POSSIBLES) THEN ERRORR(NOWRITE);
 | 
						|
82070         IF NOT([ESTABPOSS]<=POSSIBLES) THEN ERRORR(NOESTAB);
 | 
						|
82080         IF [GETPOSS]<=POSSIBLES THEN
 | 
						|
82090           SETWRITEMOOD(F^.PCOVER);
 | 
						|
82100         CHARBOUND:=MC; LINEBOUND:=ML; PAGEBOUND:=MP;
 | 
						|
82110 (*+01() SETLIMIT(BOOK, ML*MP); ()+01*)
 | 
						|
82120       END
 | 
						|
82130     END;   (*ESTABLISH*)
 | 
						|
82140 (*+01() (*$X4*) ()+01*)
 | 
						|
82150 (**)
 | 
						|
82160 (**)
 | 
						|
82170 PROCEDURE CLOSE(RF:OBJECTP);
 | 
						|
82180   VAR F:OBJECTP;
 | 
						|
82190       PFET: FETROOMP;
 | 
						|
82200     BEGIN TESTF(RF,F);
 | 
						|
82210     WITH F^.PCOVER^ DO
 | 
						|
82220       BEGIN STATUS:=STATUS-[OPENED];
 | 
						|
82230       IF NOT ASSOC THEN
 | 
						|
82240         BEGIN
 | 
						|
82250         ACLOSE(BOOK);
 | 
						|
82260         IF NOT(STARTUP IN STATUS) THEN BEGIN PFET := BOOK; DISPOSE(PFET) END;
 | 
						|
82270         END;
 | 
						|
82280       END;
 | 
						|
82290     IF FPTST(RF^) THEN GARBAGE(RF);
 | 
						|
82300     END;  (*CLOSE*)
 | 
						|
82310 (**)
 | 
						|
82320 (**)
 | 
						|
82330 (*+24()
 | 
						|
82340 PROCEDURE PNTSTAT(COV:OBJECTP);
 | 
						|
82350     BEGIN WITH COV^ DO
 | 
						|
82360       BEGIN WRITE('STATUS-');
 | 
						|
82370       IF [OPENED]<=STATUS THEN WRITE('OPENED ');
 | 
						|
82380       IF [LINEOVERFLOW]<=STATUS THEN WRITE('LINEOFLO ');
 | 
						|
82390       IF [PAGEOVERFLOW]<=STATUS THEN WRITE('PAGEOFLO ');
 | 
						|
82400       IF [PFE]<=STATUS THEN WRITE('PFE ');
 | 
						|
82410       IF [LFE]<=STATUS THEN WRITE('LFE ');
 | 
						|
82420       IF [READMOOD]<=STATUS THEN WRITE('READMOOD ');
 | 
						|
82430       IF [WRITEMOOD]<=STATUS THEN WRITE('WRITEMOOD ');
 | 
						|
82440       IF [CHARMOOD]<=STATUS THEN WRITE('CHARMOOD ');
 | 
						|
82450       IF [BINMOOD]<=STATUS THEN WRITE('BINMOOD ');
 | 
						|
82460       IF [NOTSET]<=STATUS THEN WRITE('NOTSET ');
 | 
						|
82470       END;
 | 
						|
82480     WRITELN;
 | 
						|
82490     END;
 | 
						|
82500 (**)
 | 
						|
82510 (**)
 | 
						|
82520 PROCEDURE PNTPOSS(F:OBJECTP);
 | 
						|
82530     BEGIN WRITE('POSSIBLES - ');
 | 
						|
82540     WITH F^.PCOVER^ DO
 | 
						|
82550       BEGIN IF [RESETPOSS]<=POSSIBLES THEN WRITE('RESETPOSS ');
 | 
						|
82560       IF [SETPOSS]<=POSSIBLES THEN WRITE('SETPOSS ');
 | 
						|
82570       IF [GETPOSS]<=POSSIBLES THEN WRITE('GETPOSS ');
 | 
						|
82580       IF [PUTPOSS]<=POSSIBLES THEN WRITE('PUTPOSS ');
 | 
						|
82590       IF [BINPOSS]<=POSSIBLES THEN WRITE('BINPOSS ');
 | 
						|
82600       IF [ESTABPOSS]<=POSSIBLES THEN WRITE('ESTABPOSS ');
 | 
						|
82610       IF [ASSPOSS]<=POSSIBLES THEN WRITE('ASSPOSS');
 | 
						|
82620       END;
 | 
						|
82630     WRITELN;
 | 
						|
82640     END;
 | 
						|
82650 ()+24*)
 | 
						|
82660 (**)
 | 
						|
82670 (**)
 | 
						|
82680 (*-02()
 | 
						|
82690 BEGIN (*OF A68*)
 | 
						|
82700 END; (*OF A68*)
 | 
						|
82710 ()-02*)
 | 
						|
82720 (*+01()
 | 
						|
82730 BEGIN (*OF MAIN PROGRAM*)
 | 
						|
82740 END (* OF EVERYTHING *).
 | 
						|
82750 ()+01*)
 |