101 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
61500 #include "rundecs.h"
 | 
						|
61510     (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
 | 
						|
61520 (**)
 | 
						|
61530 (**)
 | 
						|
61540 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
 | 
						|
61550 FUNCTION CRSTRING(LENGTH: OFFSETRANGE): OBJECTP; EXTERN;
 | 
						|
61560 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
 | 
						|
61570 (**)
 | 
						|
61580 (**)
 | 
						|
61590 FUNCTION MULCI(CH: CHAR; N: INTEGER): OBJECTP;
 | 
						|
61600 (*PMULCI*)
 | 
						|
61610   VAR POINT: OBJECTP;
 | 
						|
61620       I: INTEGER;
 | 
						|
61630     BEGIN
 | 
						|
61640     POINT := CRSTRING(N);
 | 
						|
61650     WITH POINT^ DO
 | 
						|
61660       FOR I := 1 TO N DO
 | 
						|
61670         CHARVEC[I] := CH;
 | 
						|
61680     MULCI := POINT;
 | 
						|
61690     END;
 | 
						|
61700 (**)
 | 
						|
61710 (**)
 | 
						|
61720 FUNCTION MULSI(S: OBJECTP; N: INTEGER): OBJECTP;
 | 
						|
61730 (*PMULCI-1*)
 | 
						|
61740   VAR POINT: OBJECTP;
 | 
						|
61750       I, J: INTEGER;
 | 
						|
61760       C: CHAR;
 | 
						|
61770     BEGIN
 | 
						|
61780     WITH S^ DO
 | 
						|
61790       BEGIN
 | 
						|
61800       POINT := CRSTRING(STRLENGTH*N);
 | 
						|
61810       FOR I := 0 TO N-1 DO
 | 
						|
61820         FOR J := 1 TO STRLENGTH DO
 | 
						|
61830           BEGIN C := CHARVEC[J]; POINT^.CHARVEC[I*STRLENGTH+J] := C END
 | 
						|
61840       END;
 | 
						|
61850     IF FPTST(S^) THEN GARBAGE(S);
 | 
						|
61860     MULSI := POINT;
 | 
						|
61870     END;
 | 
						|
61880 (**)
 | 
						|
61890 (**)
 | 
						|
61900 FUNCTION MULIC(N: INTEGER; CH: CHAR): OBJECTP;
 | 
						|
61910 (*PMULIC*)
 | 
						|
61920   VAR POINT :OBJECTP;
 | 
						|
61930       I :INTEGER;
 | 
						|
61940     BEGIN
 | 
						|
61950     POINT := CRSTRING(N);
 | 
						|
61960     WITH POINT^ DO
 | 
						|
61970       FOR I := 1 TO N DO
 | 
						|
61980         CHARVEC[I] := CH;
 | 
						|
61990     MULIC := POINT;
 | 
						|
62000     END;
 | 
						|
62010 (**)
 | 
						|
62020 (**)
 | 
						|
62030 FUNCTION MULIS(N: INTEGER; S: OBJECTP): OBJECTP;
 | 
						|
62040 (*PMULIC-1*)
 | 
						|
62050   VAR POINT: OBJECTP;
 | 
						|
62060       I, J: INTEGER;
 | 
						|
62070       C: CHAR;
 | 
						|
62080     BEGIN
 | 
						|
62090     WITH S^ DO
 | 
						|
62100       BEGIN
 | 
						|
62110       POINT := CRSTRING(STRLENGTH*N);
 | 
						|
62120       FOR I := 0 TO N-1 DO
 | 
						|
62130         FOR J := 1 TO STRLENGTH DO
 | 
						|
62140           BEGIN C := CHARVEC[J]; POINT^.CHARVEC[I*STRLENGTH+J] := C END
 | 
						|
62150       END;
 | 
						|
62160     IF FPTST(S^) THEN GARBAGE(S);
 | 
						|
62170     MULIS := POINT;
 | 
						|
62180     END;
 | 
						|
62190 (**)
 | 
						|
62200 (**)
 | 
						|
62210 FUNCTION MULABSI(LEFT: OBJECTP; N: INTEGER): OBJECTP;
 | 
						|
62220 (*PTIMESABS*)
 | 
						|
62230   VAR PIL: OBJECTP;
 | 
						|
62240     BEGIN
 | 
						|
62250     WITH LEFT^ DO
 | 
						|
62260       CASE SORT OF
 | 
						|
62270         REFN:
 | 
						|
62280           BEGIN
 | 
						|
62290           WITH PVALUE^ DO FDEC;
 | 
						|
62300           PVALUE := MULSI(PVALUE, N);
 | 
						|
62310           WITH PVALUE^ DO FINC
 | 
						|
62320           END;
 | 
						|
62330         CREF:
 | 
						|
62340           BEGIN PIL := IPTR^.FIRSTPTR;
 | 
						|
62350           WITH PIL^ DO FDEC;
 | 
						|
62360           PIL := MULSI(PIL, N); IPTR^.FIRSTPTR := PIL;
 | 
						|
62370           WITH PIL^ DO FINC
 | 
						|
62380           END;
 | 
						|
62390         UNDEF: ERRORR(RASSIG);
 | 
						|
62400         NILL: ERRORR(RASSIGNIL);
 | 
						|
62410       END;
 | 
						|
62420     MULABSI := LEFT;
 | 
						|
62430     END;
 | 
						|
62440 (**)
 | 
						|
62450 (**)
 | 
						|
62460 (*-02() BEGIN END ; ()-02*)
 | 
						|
62470 (*+01()
 | 
						|
62480 BEGIN (*OF MAIN PROGRAM*)
 | 
						|
62490 END (*OF EVERYTHING*).
 | 
						|
62500 ()+01*)
 |