48300 #include "rundecs.h"
48310     (*  COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER  *)
48320 (**)
48330 (**)
48340 PROCEDURE ERRORR(N :INTEGER); EXTERN;
48350 (**)
48360 (**)
48370 PROCEDURE SLCMN(STOWEDVAL: OBJECTP; INDEX, SLICDEX: INTEGER);
48380     BEGIN
48390     WITH STOWEDVAL^ DO CASE SORT OF
48400       MULT, REFSLN, REFR, RECR:
48410         WITH DESCVEC[SLICDEX] DO
48420           BEGIN
48430           IF INDEX
UI THEN ERRORR(RSL2ERROR);
48450           END;
48460       UNDEF: ERRORR(RSLICE);
48470       NILL: ERRORR(RSLICENIL);
48480       END
48490     END;
48500 (**)
48510 (**)
48520 (*-01() (*-05()
48530 FUNCTION SLICE1(PRIMARY: OBJECTP; INDEX: BOUNDSRANGE): ASNAKED;
48540 (*PSLICE1*)
48550   VAR TEMP: NAKEGER;
48560     BEGIN
48570     WITH TEMP DO WITH NAK DO
48580       BEGIN
48590         STOWEDVAL := PRIMARY;
48600         WITH PRIMARY^ DO WITH DESCVEC[0] DO
48610           IF (INDEXUI) THEN SLCMN(STOWEDVAL, INDEX, 0)
48620           ELSE POSITION := DI*INDEX-LBADJ;
48630         SLICE1 := ASNAK;
48640       END;
48650     END;
48660 (**)
48670 (**)
48680 FUNCTION SLICE2(INDEX1, INDEX2: BOUNDSRANGE): ASNAKED;
48690 (*PSLICE2*)
48700   VAR TEMP: NAKEGER;
48710       OFFS: INTEGER;
48720     BEGIN
48730     WITH TEMP DO WITH NAK DO
48740       BEGIN
48750 (*+11() ASNAK := 0; ()+11*)
48760       STOWEDVAL := ASPTR(GETSTKTOP(SZADDR, 0));
48770       WITH STOWEDVAL^ DO
48780         BEGIN
48790         WITH DESCVEC[0] DO
48800           IF (INDEX2UI) THEN SLCMN(STOWEDVAL, INDEX2, 0)
48810           ELSE OFFS := -LBADJ+DI*INDEX2;
48820         WITH DESCVEC[1] DO
48830           IF (INDEX1UI) THEN SLCMN(STOWEDVAL, INDEX1, 1)
48840           ELSE POSITION := OFFS+DI*INDEX1
48850         END;
48860         SLICE2 := ASNAK;
48870         END;
48880     END;
48890 ()-05*) ()-01*)
48900 (**)
48910 (**)
48920 (*-02() BEGIN END ; ()-02*)
48930 (*+01()
48940 BEGIN (*OF MAIN PROGRAM*)
48950 END (*OF EVERYTHING*).
48960 ()+01*)