!* !*E; %EXTERNALLONGLONGREAL ICL9LDLIBPROC !*NE %EXTRINSICINTEGER ICL9CEDOBEGIN EXTRINSICLONGINTEGER ICL9CEAUXST !*NE %EXTRINSICINTEGER ICL9CEFAC EXTERNALINTEGER ICL9CEFDMAP EXTERNALINTEGER ICL9CETC EXTERNALINTEGER ICL9CEMAINLNB !*NE %EXTERNALINTEGER OPEHMODE=0;! SET TO 1 IF OPEH INITIALISED !*NE !*B %EXTRINSICINTEGER ICL9CEAVOLS !* !* !*E; %CONSTINTEGER OPSYS = 0 !*B %CONSTINTEGER OPSYS = 1 !*K %CONSTINTEGER OPSYS = 2 !* !* !*NE %OWNINTEGER INITIALISED=0;! SET TO 1 AFTER BASIC INITIALISATION !* !* !*NE %OWNINTEGER ROUTE=1 !*NE %OWNINTEGER REPORT=1 !*NE %OWNINTEGER DEPTH=8 !*NE %OWNINTEGER DIAGNOSTICS=4 !*NE %OWNINTEGER ARRAYSIZE !*E; %EXTRINSICINTEGER BATCH OPTIONS !*NE %OWNINTEGER BATCH OPTIONS !*NE %OWNINTEGER BATCH NOPTIONS !*NE %OWNINTEGER FACILITY !*NE %OWNINTEGER OPEHINHIB=0 OWNINTEGER MONCPU OWNINTEGER LAST MODE=0;! 1 COMPILE 2 RUN !* !* OWNINTEGER RUNFLAG !*NE %OWNSTRING(64) CINPUT='' !NE %OWNSTRING(64) OMFNAME='' !*E; %OWNSTRING(64) OMFNAME="SS#TMPOB" !*NE %OWNSTRING(64) COPTIONS='' !*NE%OWNSTRING(64) CRUN='' !*NE %OWNSTRING(64) CSAVELIST="" !*NE %OWNSTRING(64) CLIBNAME='' !* !*NE %OWNSTRING(35) VERSION !* !* OWNLONGINTEGERARRAY COMPS(1:6)=0(6) !* !* !* !****** BBASE FUNCTIONS !* !*NE %SYSTEMINTEGERFNSPEC LOAD MODULE(%STRING(64) MODULE, %C !*NE %LONGINTEGERNAME ENTRY) SYSTEMINTEGERFNSPEC OPEN FILE( C INTEGER CURRENCY, ACCESS TYPE, ABUFF,LBUFF,ARECSIZE, C AD REC CCY) SYSTEMINTEGERFNSPEC CLOSE FILE(INTEGER ROUTECCY,AD REC CCY) !*NE %SYSTEMINTEGERFNSPEC SET SQ MODE(%INTEGER AD REC CCY,ACCESS TYPE,MODE) !*NE %SYSTEMINTEGERFNSPEC POSITION SQ FILE(%INTEGER ADR,POS) SYSTEMINTEGERFNSPEC DEFINE FILE(INTEGER TYPE, P, C STRING (32) IDEN, C INTEGERNAME CURRENCY, FILE ORG, DEVCLASS, RECTYPE, FE, C MINREC, MAXREC) !*NE %SYSTEMINTEGERFNSPEC READ FILE DESCRIPTION(%INTEGER CCY, %C !*NE %INTEGERNAME ORG,CLASS,TYPE,MIN,MAX) !*NE %SYSTEMINTEGERFNSPEC READ JS VAR(%STRING(31) NAME, %C !*NE %INTEGER OPTION,RADDR) SYSTEMROUTINESPEC STOPBASE !*NE %SYSTEMINTEGERFNSPEC INIT BASE(%INTEGER MODE,%STRING(63) S) SYSTEMINTEGERFNSPEC READ CPU TIME !*B %SYSTEMINTEGERFNSPEC PRIME CONTINGENCY(%ROUTINE CONTPROC) !*NE %SYSTEMROUTINESPEC SET R LEVEL(%INTEGER LEVEL) !*NE %SYSTEMROUTINESPEC READ ERROR DATA(%STRINGNAME S,%INTEGERNAME N) !*B %SYSTEMINTEGERFNSPEC JSEND !* !****** OPEH PROCEDURES !* !*NE %EXTERNALROUTINESPEC ICL9HEPROLOG(%INTEGER N) !%SYSTEMINTEGERFNSPEC NOMTIDYPROC(%ROUTINE PROC) !*NE %SYSTEMINTEGERFNSPEC NOMDESC(%INTEGER D0,D1,%ROUTINE PROC) !*NE %EXTERNALROUTINESPEC ICL9CERRPROCL !*NE %EXTERNALROUTINESPEC ICL9CERRPROCR !*NE %EXTERNALROUTINESPEC ICL9HERRMESSG !*NE %EXTERNALROUTINESPEC ICL9HERRMESSL !%EXTERNALROUTINESPEC ICL9CETIDYUP !*NE %EXTERNALINTEGERFNSPEC ICL9HEAET(%INTEGER OLD0,OLD1,NEW0,NEW1, %C !*NE IGNORE,CATCH,EMESS,ROUTE,REPORT,COUNT,DEPTH, %C !*NE DIAGNOSTICS,ARRAYSIZE,CONTINUE,AREAS,OVERRIDE,DUMP) !*NE %EXTERNALROUTINESPEC ICL9HERESET !*NE %EXTERNALINTEGERFNSPEC ICLCTM JSWRITE(%INTEGER N0,N1,I0,I1,S0,S1,B0,B1) !*NE %EXTERNALROUTINESPEC ICLCTM LOG MESSAGE(%INTEGER JTYPE,MTYPE,DR0,DR1) !*NE %EXTERNALROUTINESPEC ICLCTM SEND MESSAGE(%INTEGER DR0,DR1) !*E; %SYSTEMROUTINESPEC LOG(%INTEGER MSG ADDR, MSG LENGTH) !* !****** MAIN !* !*E; %SYSTEMROUTINESPEC SSMESSA(%INTEGER F, %STRING(17) M) !*NE %SYSTEMROUTINESPEC LOG99 SYSTEMROUTINESPEC PHEX(INTEGER N) SYSTEMINTEGERMAPSPEC COMREG(INTEGER I) !*NE %SYSTEMROUTINESPEC MOVE(%INTEGER L, FROM, TO) SYSTEMROUTINESPEC FILL(INTEGER L,FROM,FILLER) !*NE %SYSTEMROUTINESPEC ETOI(%INTEGER ADDR,LEN) !*NE %SYSTEMROUTINESPEC ITOE(%INTEGER ADDR,LEN) !*NE %SYSTEMROUTINESPEC DATIME(%STRINGNAME DATE,TIME) SYSTEMROUTINESPEC INITMAIN(INTEGER OPSYS,MODE) SYSTEMROUTINESPEC IOCP(INTEGER I,J) !*NE %SYSTEMINTEGERFNSPEC RUNCOMP(%INTEGER FACILITY,OPSYS, %C !*NE %LONGINTEGERNAME ENTRYDR,%STRINGNAME TEXT) SYSTEMROUTINESPEC GET AREA DESCS(ROUTINE MAIN,FILE,DIAG,OMF,LPUT, C FLIB,ALIB) !* !****** AREA !* !*NE %ROUTINESPEC INITAREAS !*NE %ROUTINESPEC OUTFILE(%STRING(31) S,%INTEGER LEN,MAXLEN,USE, %C !*NE %INTEGERNAME CONAD,FLAG) !*E; %SYSTEMROUTINESPEC OUTFILE(%STRING(31) S, %INTEGER LEN, %C MAXLEN,USE, INTEGERNAME CONAD,FLAG) !* !****** JBR !* SYSTEMROUTINESPEC INIT JBR SYSTEMINTEGERFNSPEC GET ROUTE(INTEGER AFD) !*E; %SYSTEMROUTINESPEC JBR CLI(%INTEGERNAME I) !*NE %INTEGERFNSPEC JBR CALL(%INTEGER ENTRY,%INTEGERNAME PARAM) !* !****** DIAG !* !*E; %SYSTEMROUTINESPEC SSERR(%INTEGER N) SYSTEMROUTINESPEC ICL MATHS ERROR ROUTINE(INTEGER ADDRESS OF 5 BYTES) !*K %SYSTEMROUTINESPEC ONTRAP(%INTEGER SUBCLASS,CLASS) !*NE %SYSTEMROUTINESPEC ONTRAPB(%INTEGER EVENT,SUBCLASS,CLASS) !%SYSTEMSTRINGFNSPEC RELEASE !* SYSTEMROUTINESPEC LPUT SYSTEMROUTINESPEC FIO1 SYSTEMROUTINESPEC GETSQ SYSTEMROUTINESPEC ONTRAPACT !*NE %SYSTEMROUTINESPEC NROBJ ROUTINESPEC STOP !* RECORDFORMAT NRFDFMT(INTEGER LINK,DSNUM, C BYTEINTEGER STATUS, ACCESS ROUTE, VALID ACTION, CUR STATE, C BYTEINTEGER MODEOFUSE, MODE, FILE ORG, DEV CLASS, C BYTEINTEGER REC TYPE, FLAGS, LM, RM, C INTEGER ASVAR, AREC, RECSIZE, MINREC, MAXREC, MAXSIZE,ROUTECCY, C INTEGER C0, C1, C2, C3, TRANSFERS, C INTEGER DARECNUM,LASTREC,RECORDS, C STRING (31) IDEN) !* !%RECORDFORMAT TCFMT(%INTEGER PAGE COUNT,USER TRANSFER COUNT, %C ! USER PRINT COUNT,TOTAL PRINT COUNT, %C ! OUTPUT LIMIT,PAGE SIZE) !* OWNINTEGERARRAY SSFDMAP(0:109) !* INTEGERFNSPEC PARM(STRING (63) S) INTEGERFNSPEC NEW DESC(INTEGER DSNUM,TYPE,ACCESS ROUTE, C MODE,IDENTYPE,STRING (31) IDEN,INTEGERNAME AFD) INTEGERFNSPEC RESETFDS EXTERNALINTEGERFNSPEC LOAD COMPILER(INTEGER C TYPE,STRING (31) ENTRY, INTEGERNAME AENTRY) !*NE %INTEGERFNSPEC RESET BUFFERS !* !*********************************************************************** !* * !* INITIALISATION * !* * !*********************************************************************** !* !*NE %CONSTSTRING(13) PROCL=E'ICL9CERRPROCL' !*NE %CONSTSTRING(13) PROCR=E'ICL9CERRPROCR' !*NE %CONSTSTRING(13) MESSG=E'ICL9HERRMESSG' !*NE %CONSTSTRING(13) MESSL=E'ICL9HERRMESSL' !* !* SSLEVEL NOW IN COMREG(1) !%OWNINTEGER SSLEVEL; !-1 ABORTING ! 0 INITIALISING ! 1 COMMAND PROCESSOR ! 2 TRUSTED FACILITY(E.G. COMPILER) ! 3 USER PROGRAM !* EXTERNALINTEGER ICL9CEJSTATE; ! 0 NO CURRENT USER JOB ! 1 PROCESSING USER JOB ! 2 JOB ABORTING(E.G. REQUEST FOR UNAVAIL. RESOURCE ! 3 TIME EXCEEDED ! 4 OUTPUT EXCEEDED ! 5 USER PROG DIAGS FAILURE ! 6 SOFTWARE DETECTED ERROR(SUBSYS IN CONTROL) ! 7 I/0 ERROR ON PRIMARY OUTPUT STREAM ! 8 HARDWARE DETECTED ERROR WHILE IN SUBSYS ! 9 SUBSYSTEM LOGICAL ERROR !10 ABORTING! !* !* !*NE %OWNINTEGER MSGLEVEL = 1 OWNINTEGER L99=0 !* !* OWNINTEGER STARTCPU !*NE %OWNINTEGER ENDCPU !* OWNINTEGERARRAY SIGDATA(-3 : 65) = M'SIGD',M'ATA ',0(67) ! 3*88 BYTE RECORDS !* !* !****** FILE !* !*NE %ROUTINESPEC CONNECT(%STRING (15) S, %C !*NE %INTEGER ACCESS, MAXBYTES, USE, %RECORDNAME R, %C !*NE %INTEGERNAME FLAG) !*NE %ROUTINESPEC TIDY AREAS(%INTEGER N) !* !* ROUTINE LOG MESS(INTEGER TYPE,STRING (63) TEXT) !*NE %INTEGER I,J !*NE %IF TEXT='' %THEN %RETURN !*NE I=LENGTH(TEXT) !*NE J=ADDR(TEXT)+1 !*NE ITOE(J,I) !*NE %IF TYPE=4 %THENSTART !*NE ICLCTM SEND MESSAGE(X'18000000'!I,J) !*NE %FINISHELSESTART !*NE ICLCTM LOG MESSAGE(TYPE,0,X'18000000'!I,J) !*NE %FINISH !*E; LOG(ADDR(TEXT),LENGTH(TEXT)) END ;! LOG MESS !* ROUTINE INITFILE(ROUTINE ICL MATHS ERROR ROUTINE) INTEGER I, J,K,L LONGLONGREAL RRRR CONSTBYTEINTEGERARRAY P(0:19)= C 108,1,X'D', 0, 99,2,X'2', 0, 101,6,X'D',108, 102,6,X'2', 99, 100,3,2,0 !*NE %CONSTSTRING(16)%ARRAY KEY(0:2)= %C !*NE 'ICL9CEDEFOPTIONS', !*NE 'ICL9CEMOPTIONS', !*NE 'OPTIONS' !*NE %STRING(255) OPTIONS STRING (63) S *LSQ_(LNB +5) *ST_RRRR !*NE OPEHMODE=0 !*NE OPEHINHIB=0 MONCPU=0 ICL9CEMAINLNB=0 !*NE ICL9CEFAC=FACILITY ICL9CEFDMAP=ADDR(SSFDMAP(0)) !*NE SET R LEVEL(0) !*NE %IF FACILITY=4 %THEN I=3 %ELSE I=0 !*E; I=0;! SPECIAL ACTION FOR EXEC. INITMAIN(OPSYS,I) ICL9CEJSTATE=0 COMREG(33)=ADDR(SIGDATA(0)) SIGDATA(1)=-1;! WILL GIVE DIAGS AFTER ICL9CEJINIT ! %IF FACILITY=4 %THEN %C ! VERSION='' ! VERSION='EDINBURGH SOFTWARE ENVIRONMENT B40' ! PRINTSTRING(VERSION) ! NEWLINE !*NE %IF FACILITY=0 %THEN %C !*NE LOGMESS(4,VERSION) !* !****** PREPARE BASE AND CONTINGENCY TRAPS !* S='' !*NE I=INITBASE(FACILITY,CSAVELIST) !*NE SET R LEVEL(0) COMREG(25)=2;! MINIMUM DIAGS AS DEFAULT L99=0 IOCP(11,-2);! INITIALISE OUTPUT !* !*B I=PRIME CONTINGENCY(ONTRAPB) !*K I=PRIME CONTINGENCY(ONTRAP) !* !****** INITIALISE AREAS,OPTIONS,FILE DESCRIPTORS !* !*NE INITAREAS I=RESET FDS ICL9CETC=COMREG(49);! TRANSFER COUNT RECORD COMREG(60)=RUNFLAG !*NE BATCH OPTIONS=X'81400001';! STACK LIMIT DEFINED,EBCDIC,QUOTES !*NE COMREG(26)=X'80800000' COMREG(27)=BATCH OPTIONS ! %UNLESS ICL9CEFAC=4 %THENSTART !*B; K=0 !*B; L=1 !* !*K L=2 !*K K=2 !*NE %CYCLE J=K,1,L !*NE I=READ JS VAR(KEY(J),2,ADDR(OPTIONS)) !*NE %IF I=0 %THEN I=PARM(OPTIONS) !*NE BATCH OPTIONS=COMREG(27) !*NE BATCH NOPTIONS=COMREG(26) !*NE %REPEAT !*NE %IF ICL9CEFAC=0 %THEN OPTIONS='' %ELSE OPTIONS=COPTIONS !*NE I=PARM(OPTIONS) !*NE BATCH NOPTIONS=COMREG(26) !*NE BATCH OPTIONS=COMREG(27);! SETS USER OPTIONS (STAND-ALONE) ! %FINISH !* !* IF MONCPU#0 THEN STARTCPU=READ CPU TIME I=ADDR(SSFDMAP(0)) FILL(440,I,0) ICL9CEFDMAP=I COMREG(17) = I !* I=COMREG(21);! ADDR(BASICFDS(0)) FILL(448,I,0) !* ! SSFDMAP(108)=I ! SSFDMAP(101)=I+112 ! SSFDMAP(102)=I+224 ! SSFDMAP(99)=I+336 ! J=NEW DESC(108,1,1,X'D',0,'',I) ! J=NEW DESC(99,1,2,2,0,'',I) ! J=NEW DESC(101,1,6,X'D',108,'',I) ! J=NEW DESC(102,1,6,2,99,'',I) !* !*NE %CYCLE J=0,4,12 !*E; %CYCLE J=0,4,16 SSFDMAP(P(J))=I I=I+112 K=NEW DESC(P(J),1,P(J+1),P(J+2),P(J+3),'',L) REPEAT !* !* COMREG(52)=ADDR(OMFNAME) !*NE COMREG(58)=ADDR(CLIBNAME) COMREG(59)=ADDR(COMPS(1)) !* !****** PREPARE AUXILIARY %IF STACK FOR IMP/ALGOL !* OUTFILE('SS#AUXST',X'40000',0,0,I,J) !*E; %IF J#0 %THEN SSERR(J) COMREG(37) = I; ! ADDRESS OF AUX STACK J=ADDR(ICL9CEAUXST) INTEGER(J)=X'28040000' INTEGER(J+4)=I COMREG(41)=J;! FOR USE BY LOAD FILLING SZAUXST REFS INTEGER(I) = I+16 INTEGER(I+8) = I+X'40000' !* !* !****** INITIALISE JOBBER !* !*NE !*SJ %IF FACILITY=0 %THENSTART;! INIT JOBBER !*NE !*SJ COMREG(58)=ADDR(VERSION) !*SJ; COMREG(60)=ADDR(RRRR) !*NE !*SJ J=OPSYS !*E; I=ADDR(ICL9LDLIBPROC) !*E; LONGINTEGER(I)=LONGINTEGER(COMREG(60)) !*E; LONGINTEGER(I+8)=0 !*E; INIT JBR !*NE !*SJ I=JBR CALL(0,J) !*NE !*SJ %FINISH IF L99=0 THEN INITMAIN(OPSYS,2);! SET 'NO CURRENT STREAM' !*NE !*B %UNLESS FACILITY = 4 %THEN %START !*E; GET AREA DESCS(INITMAIN,STOP,ONTRAPACT,LPUT,LPUT,FIO1,GETSQ) !*NE !*B GET AREA DESCS(INITMAIN,STOP,ONTRAPACT,NROBJ,LPUT,FIO1,GETSQ) !*NE !*B %FINISH END ;! INITFILE !* !*NE %ROUTINE OPEH DEFAULTS(%INTEGER MODE);! MODE#0 SET ERROR TABLE !*NE %CONSTSTRING(14) ID=E'ICL9HEJSERRTAB' !*NE %INTEGERARRAY VAL(0:11) !*NE %INTEGER I,J !*NE %IF OPEHINHIB=0 %THENSTART !*NE ! I=NOMTIDYPROC(ICL9CETIDYUP) !*NE I=NOMDESC(X'1800000D',ADDR(PROCL)+1,ICL9CERRPROCL) !*NE I=NOMDESC(X'1800000D',ADDR(PROCR)+1,ICL9CERRPROCR) !*NE I=NOMDESC(X'1800000D',ADDR(MESSG)+1,ICL9HERRMESSG) !*NE I=NOMDESC(X'1800000D',ADDR(MESSL)+1,ICL9HERRMESSL) !*NE !* !*NE %IF MODE#0 %THEN %C !*NE J=ICL9HEAET(-1,-1,X'30000006',ADDR(VAL(0)), %C !*NE 0,-1,-1,-1,-1,-1,DEPTH,DIAGNOSTICS,ARRAYSIZE, %C !*NE -1,-1,-1,-1) !*NE %IF J>0 %THENSTART !*NE -> NOMESS !*NE SELECTOUTPUT(100) !*NE PRINTSTRING('ICL9HEAET RESPONSE =') !*NE WRITE(J,1) !*NE NEWLINE !*NE %FINISHELSESTART !*NE I=ICLCTM JSWRITE(X'1800000E',ADDR(ID)+1,-1,-1, %C !*NE X'18000030',ADDR(VAL(0)),-1,-1) !*NE %FINISH !*NE NOMESS: ->L1 !*NE ICL9HERESET !*NE L1: ICL9HEPROLOG(0) !*NE OPEHMODE=1 !*NE %FINISH !*NE %END;! OPEH DEFAULTS EXTERNALROUTINE ICL9CEJINIT INTEGER I *STLN_I !*NE FACILITY=4 !*NE ICL9CEAVOLS=1 INITFILE(ICL MATHS ERROR ROUTINE) !*NE OPEH DEFAULTS(0) COMREG(36)=INTEGER(I);! LNB VALUE TO STOP DIAGNOSTICS !*E; %IF COMREG(36)&4=0 %THEN COMREG(36)=COMREG(36)!1 END ;! ICL9CEJINIT !* !* !* !*NE %ROUTINE END TEXT(%STRING(31) TEXT) !*NE %INTEGER I !*NE %IF COMREG(23)=99 %THEN I=0 %ELSE I=-1 !*NE IOCP(11,-1);! TO LOSE ANY TEXT LEFT IN BUFFER !*NE LOG MESS(4,TEXT) !*NE %IF MONCPU=1 %THENSTART !*NE ENDCPU=READ CPU TIME !*NE SELECT OUTPUT(100) !*NE PRINTSTRING(' CPU USED:') !*NE PRINT((ENDCPU-STARTCPU)/1000.0,3,2) !*NE PRINTSTRING(' SECS') !*NE NEWLINE !*NE %FINISH !*NE %END;! ENDTEXT !*NE !* SYSTEMROUTINE TIDY EXIT !*NE %INTEGER I !*NE I=CLOSE FILE(COMREG(54),0) !*NE I=CLOSE FILE(0,COMREG(55));! DESELECT PRINT FILE !*NE TIDY AREAS(0) STOP BASE END ;! TIDY EXIT !* ROUTINE MAIN !*NE %STRING(31) TEXT,NAME LONGINTEGER ENTRYDR INTEGER I SWITCH S(0:10) *STLN_I ICL9CEMAINLNB=I COMREG(36)=I COMREG(48)=X'E000';! STACK LIMIT !*NE TEXT='' ->S(ICL9CEJSTATE) !* !****** INITIAL ENTRY S(0): COMREG(24)=X'81000000';! TO AVOID SPURIOUS MESSAGE IF FIRST COMP. FAILS IF MONCPU=1 THEN START CPU = READ CPU TIME COMREG(1)=1 CALL BCI: !*NE %IF FACILITY=0 %THENSTART;! JOBBER SELECTOUTPUT(99) !*E; JBRCLI(ICL9CEJSTATE) !*NE I=JBR CALL(1,ICL9CEJSTATE);! == JBRCLI(ICL9CEJSTATE) !*NE TEXT='BATCH COMPLETED' !*NE %FINISHELSESTART;! SOLO MODE !*NE %IF ICL9CEJSTATE#0 %THEN STOPBASE !*NE ICL9CEJSTATE=1 !*NE %IF FACILITY#4 %THENSTART !*NE I=RUNCOMP(FACILITY,OPSYS,ENTRYDR,NAME) !*NE %IF I=0 %THENSTART;! ENTER COMPILED PROGRAM !*NE LOG MESS(4,'PROGRAM '.NAME.' ENTERED') !*NE TEXT='RUN COMPLETED' !*NE !*NE OPEH DEFAULTS(1) !*NE SELECTOUTPUT(99) !*NE LAST MODE=2 !*NE *LD_ENTRYDR !*NE *STLN_%TOS !*NE *ASF_4 !*NE *RALN_5 !*NE *CALL_(%DR) !*NE ! SELECTOUTPUT(99) !*NE ! NEWPAGE !*NE ! NEWLINE !*NE %FINISH !*NE %FINISH !*NE %FINISH !*NE I=CLOSE FILE(COMREG(54),0) !*NE I=CLOSE FILE(0,COMREG(55));! DESELECT PRINT FILE !*NE ENDTEXT(TEXT) !*E; IOCP(11,-1) !*E; LOGMESS(4,"BATCH COMPLETE") EXIT: !*NE TIDY AREAS(0) STOP BASE !* !****** FAILURE IN USER JOB S(1): !* !****** JOB ABORTING S(2): !* !****** TIME EXCEEDED/OP TERMINATION S(3): !* !****** OUTPUT EXCEEDED S(4): ->CALL BCI !* !****** USER PROG DIAGS FAILURE S(5): !* !****** SOFTWARE DETECTED ERROR S(6): !ICL9CEJSTATE=1 ->CALL BCI !* !****** IO ERROR ON PRIMARY OUTPUT STREAM S(7): ->EXIT !* !****** HARDWARE DETECTED ERROR IN SUBSYSTEM S(8): !* !****** SUBSYSTEM LOGICAL ERROR S(9): COMREG(25)=0 ICL9CEJSTATE=10 ->EXIT !* !****** ABORT (FAILURE WHILE DIAGNOSING SUBSYSTEM ERROR) S(10): ->EXIT END ;! MAIN !* !* ROUTINE CONTROL(INTEGER FAC) !*NE FACILITY=FAC !*NE !*B ICL9CEDOBEGIN = 1 INITFILE(ICL MATHS ERROR ROUTINE) ICL9CEJSTATE=0 LOOP: MAIN ->LOOP END ;! CONTROL !* SYSTEMROUTINE STOP INTEGER I,J !*NE %IF FACILITY=4 %THEN TIDY EXIT I=COMREG(36) *STLN_J UNLESS J>>18 = I>>18 THENSTART STOPBASE FINISH *LLN_I *EXIT_-64 END ;! STOP !* !* EXTERNALINTEGERFN ICL9CESUBS(INTEGER ENTRY) CONTROL(ENTRY) STOPBASE END ;! ICL9CESUBS !*NE !* !*NE %SYSTEMINTEGERFN JBR CALL(%INTEGER ENTRY,%INTEGERNAME PARAM) !*NE %LONGINTEGER DESC !*NE DESC=COMPS(4) !*NE *STLN_%TOS !*NE *ASF_4 !*NE *LSS_ENTRY !*NE *SLSD_PARAM !*NE *ST_%TOS !*NE *LD_DESC !*NE *RALN_8 !*NE *CALL_(%DR) !*NE *EXIT_-64 !*NE %RESULT=0 !*NE %END;! JBR CALL !* !* SYSTEMINTEGERMAP FDMAP(INTEGER I) RESULT =ADDR(SSFDMAP(I)) END ;! FDMAP !* !* !*********************************************************************** !* * !* AREA MANAGEMENT * !* * !*********************************************************************** !* !*K %EXTERNALINTEGERFNSPEC DELETE AREA(%INTEGER DR0,DR1) !* !****** BASE FUNCTIONS !* !*NE %SYSTEMINTEGERFNSPEC NEWAREA(%STRING(15) NAME,%INTEGER AREA SIZE, %C !*NE MAXSIZE,AMODE,%INTEGERNAME AREADR0,AREADR1) !*NE %SYSTEMINTEGERFNSPEC CHANGE AREA PROPERTIES( %C !*NE %INTEGER AREA DR0,AREA DR1,REL RACR,REL WACR,EXEC, %C !*NE AMODE,SIZE,CONTENT) !*NE !* !*NE !* !*NE %CONSTINTEGER VFMAX = 16 !*NE %CONSTINTEGER VFSIZE = 44 !*NE !* !*NE %OWNINTEGER VFHEAD, FREEFHEAD !*NE %OWNINTEGERARRAY VFDESCRIPTORS(0 : 175); ! 16 VIRTUAL FILES !*NE !* !*NE %RECORDFORMAT VFDESC(%STRING (15) S, %C !*NE %INTEGER CONAD, CURL, MAXL, LINK,MODE,DESC0,DESC1) !*NE !* !*NE %RECORDFORMAT RF(%INTEGER CONAD, FILESIZE,DATASTART,DATAEND) !*NE !* !*NE !* !*NE %ROUTINE INITAREAS !*NE %INTEGER I, J !*NE %RECORDNAME VF(VFDESC) !*NE VFHEAD = 0 !*NE J = ADDR(VFDESCRIPTORS(0)) !*NE FILL(VFMAX*VFSIZE,J,0) !*NE FREEFHEAD = J !*NE COMREG(31) = J; ! FOR DIAGNOSTICS !*NE %CYCLE I = 0,1,VFMAX-2 !*NE VF == RECORD(J) !*NE J = J+VFSIZE !*NE VF_LINK = J !*NE %REPEAT !*NE %END; ! INITK !* !* !*NE %SYSTEMROUTINE TIDY AREAS(%INTEGER N) !*NE %INTEGER I,J !*NE %RECORDNAME VF(VFDESC) !*K ICL9CEAUXST=0 !*K I=VFHEAD !*K %WHILE I#0 %CYCLE !*K VF==RECORD(I) !*K J=DELETE AREA(VF_DESC0,VF_DESC1) !*K I=VF_LINK !*K %REPEAT !*B;! I=JS END !*NE %END;! TIDY AREAS !* !* !*NE %SYSTEMROUTINE CHANGE USE(%STRING(15) S,%INTEGER NEW USE, %C !*NE %INTEGERNAME FLAG) !*NE !* NEW USE = 0 READ/WRITE !*NE !* 1 EXECUTE/READ !*NE %RECORDNAME VF(VFDESC) !*NE %INTEGER I,J !*NE %UNLESS 0<=NEW USE<=1 %THEN FLAG=1 %AND %RETURN !*NE I=VFHEAD !*NE %WHILE I#0 %CYCLE !*NE VF==RECORD(I) !*NE %IF VF_S=S %THENSTART !*NE %UNLESS VF_MODE=NEW USE %THENSTART !*NE %IF NEW USE=0 %THEN J=1 %ELSE J=0 !*NE FLAG=CHANGE AREA PROPERTIES(VF_DESC0,VF_DESC1, %C !*NE 1,J,NEWUSE,2,-1,-1) !*NE %RETURN %IF FLAG>0 !*NE VF_MODE=NEW USE !*NE %FINISH !*NE FLAG=0 !*NE %RETURN !*NE %FINISH !*NE I=VF_LINK !*NE %REPEAT !*NE FLAG=3;! FILE DOES NOT EXIST !*NE %END;! CHANGE USE !*NE !* !*NE %SYSTEMINTEGERFN SET CONTENT LIMIT(%STRING(15) S,%INTEGER NEW LIMIT) !*NE %RECORDNAME VF(VFDESC) !*NE %INTEGER I !*NE I=VFHEAD !*NE %WHILE I#0 %CYCLE !*NE VF==RECORD(I) !*NE %IF VF_S=S %THENSTART !*NE %RESULT=CHANGE AREA PROPERTIES(VF_DESC0,VF_DESC1, %C !*NE -1,-1,-1,-1,-1,NEW LIMIT) !*NE %FINISH !*NE I=VF_LINK !*NE %REPEAT !*NE %RESULT=3;! FILE DOES NOT EXIST !*NE %END;! SET CONTENT LIMIT !*NE !* !*NE %SYSTEMROUTINE REMOVE AREA(%STRINGNAME S) !*NE %INTEGER I !*NE I=SET CONTENT LIMIT(S,0) !*NE %END;! REMOVE AREA !*NE !* !*NE %SYSTEMINTEGERFN CHFSIZE(%STRING(15) S,%INTEGER CHANGE, %C !*NE %INTEGERNAME NEWSIZE,FLAG) !*NE %RECORDNAME VF(VFDESC) !*NE %INTEGER I !*NE I=VFHEAD !*NE %WHILE I#0 %CYCLE !*NE VF==RECORD(I) !*NE %IF VF_S=S %THENSTART !*NE NEWSIZE=VF_MAXL !*NE FLAG=0 !*NE %RESULT=0 !*NE %FINISH !*NE I=VF_LINK !*NE %REPEAT !*NE FLAG=1 !*NE %RESULT=1 !*NE %END;! CHFSIZE !*NE !* !*NE %SYSTEMROUTINE OUTFILE(%STRING (15) S, %C !*NE %INTEGER LENGTH, MAXBYTES, USE, %INTEGERNAME CONAD,FLAG) !*NE %INTEGER I, J, D0,D1 !*NE %STRING(15) T,U,V !*NE %RECORDNAME VF(VFDESC) !*NE %IF MAXBYTES < LENGTH %THEN MAXBYTES = LENGTH !*NE I = VFHEAD !*NE J = ADDR(VFHEAD) !*NE %WHILE I # 0 %CYCLE !*NE VF == RECORD(I) !*NE %IF S = VF_S %THENSTART !*NE %IF MAXBYTES <= VF_MAXL %THENSTART !*NE CONAD = VF_CONAD !*NE ! I=SET CONTENT LIMIT(S,0) !*NE -> OUT !*NE %FINISHELSESTART !*NE FLAG=1 !*NE %RETURN !*NE %FINISH !*NE %FINISH !*NE J = ADDR(VF_LINK) !*NE I = VF_LINK !*NE %REPEAT !*NE !* CREATE A NEW AREA !*NE %UNLESS 0 < MAXBYTES <= X'80000' %THEN FLAG=17 %AND %RETURN !*NE ! INVALID FILE SIZE !*NE MAXBYTES = (MAXBYTES+1023)&X'FFC00'; ! ROUND TO PAGE BOUNDARY !*NE %IF S->T.("#").U %THEN V=T."Z".U %ELSE V=S !*NE I=NEWAREA(V,MAXBYTES,MAXBYTES,2,D0,D1) !*NE %IF I # 0 %THEN FLAG=-1 %AND %RETURN !*NE I = FREEFHEAD !*NE J = ADDR(FREEFHEAD) !*NE %WHILE I # 0 %CYCLE !*NE VF == RECORD(I) !*NE %IF VF_CONAD = 0 %THENSTART !*NE VF_S = S !*NE VF_MAXL = MAXBYTES !*NE VF_CONAD = D1 !*NE VF_DESC0=D0 !*NE VF_DESC1=D1 !*NE VF_MODE=0 !*NE INTEGER(J) = VF_LINK !*NE VF_LINK = VFHEAD !*NE VFHEAD = I !*NE -> OUT !*NE %FINISH !*NE J = ADDR(VF_LINK) !*NE I = VF_LINK !*NE %REPEAT !*NE FLAG = 5 ; ! TOO MANY ENTRIES !*NE %RETURN !*NE !* !*NE OUT: VF_CURL = LENGTH !*NE CONAD = VF_CONAD !*NE %IF VF_MODE#0 %THENSTART !*NE CHANGE USE(VF_S,0,FLAG) !*NE %IF FLAG>0 %THEN %RETURN !*NE %FINISH !*NE COMREG(30) = VFHEAD !*NE COMREG(32) = FREEFHEAD !*NE FLAG=0 !*NE %IF USE=-1 %THEN %RETURN;! AVOID WRITING TO AREA AT THIS STAGE !*NE I=CONAD !*NE INTEGER(CONAD)=16 !*NE INTEGER(CONAD+4)=16 !*NE INTEGER(CONAD+8)=LENGTH !*NE INTEGER(CONAD+12)=0 !*NE %RETURN !*NE %END;! INITAREA !*NE !* !*NE !* !*NE %SYSTEMROUTINE CONNECT(%STRING(15) S,%INTEGER ACCESS, %C !*NE MAXBYTES,USE,%RECORDNAME R,%INTEGERNAME FLAG) !*NE %RECORDNAME VF(VFDESC) !*NE %RECORDSPEC R(RF) !*NE %INTEGER I !*NE !* !*NE I = VFHEAD !*NE %WHILE I # 0 %CYCLE !*NE VF == RECORD(I) !*NE %IF VF_S = S %THENSTART !*NE R_CONAD = VF_CONAD !*NE R_FILESIZE = VF_CURL !*NE FLAG=0 !*NE %RETURN !*NE %FINISH !*NE I = VF_LINK !*NE %REPEAT !*NE FLAG = 3; ! FILE DOES NOT EXIST !*NE %RETURN !*NE %END;! CONNECT AREA !* !* !* !* !*********************************************************************** !* * !* OPTION PROCESSING * !* * !*********************************************************************** !* CONSTSTRING (9)ARRAY PARMS(0:29)= C 'QUOTES','NOLIST','NODIAG','STACK', 'NOCHECK','NOARRAY','NOTRACE','SMAP', 'NORUN','INHIBIOF','ZERO','XREF', 'LABELS','LET','CODE','ATTR', 'OPT','INHIBOPEH','####','FREE', '####','####','EBCDIC','NOLINE', '####','MAXKEYS','I8','L8', 'R8','MISMATCH' !* CONSTSTRING (10)ARRAY ALTPARMS(0:29)= C 'PERCENT','LIST','DIAG','NOSTACK', 'CHECK','ARRAY','TRACE','####', 'RUN','####','####','NOXREF', 'NOLABELS','NOLET','NOCODE','NOATTR', '####','####','####','FIXED', '####','####','ISO','LINE', '####','MINKEYS','I4','L4', 'R4','NOMISMATCH' !* !*NE %CONSTSTRING(9)%ARRAY NPARMS(0:13)= %C !*NE 'OMFMAP','FIXUPS','MAXKEYS','NOCASCADE', !*NE 'LIBRARY','CASCADE','MAP','TEST1', !*NE 'TEST2','TEST3','TEST4','LOCAL','SPARSE', !*NE 'MONCPU' !* ROUTINESPEC PRINT OPTIONS(INTEGER COMP) !* SYSTEMINTEGERFN PARM(STRING (63) S) STRING (63) T INTEGER I, J, K, FLAG, NOPT !*NE %SWITCH NSW(5:13) FLAG = 0 I = BATCH OPTIONS !*NE NOPT=BATCH NOPTIONS IF S="?" THENSTART PRINT OPTIONS(0) RESULT =0 FINISH L1: IF S = '' THEN START COMREG(27) = I !*NE COMREG(26)=NOPT RESULT =0 FINISH UNLESS S -> T.(",").S THEN START UNLESS S->T.("&").S THENSTART T = S S = '' FINISH FINISH CYCLE J = 0,1,29 IF PARMS(J) = T THEN START !*NE %IF J=17 %THEN OPEHINHIB=1 %AND ->L1 I = I!(1<<J) -> L1 FINISH IF ALTPARMS(J)=T THENSTART K=(-1)!!(1<<J) I=I&K ->L1 FINISH REPEAT !*NE %CYCLE J=0,1,13 !*NE %IF NPARMS(J)=T %THENSTART !*NE %IF J<=4 %THENSTART !*NE NOPT=NOPT!(1<<J) !*NE ->L1 !*NE %FINISHELSE ->NSW(J) !*NE %FINISH !*NE %REPEAT PRINTSTRING('***INVALID OPTION '.T.' IGNORED ') ->L1 !*NE NSW(5): NOPT=NOPT&X'FFFFFFF7';! NOCASCADE !*NE ->L1 !*NE NSW(6): I=I!X'8000';! MAP !*NE ->L1 !*NE L3: !*NE NSW(7): K=3;! TEXT1 !*NE L2: SET R LEVEL(K) !*NE ->L1 !*NE NSW(9): LOG99;! TEST3 !*NE L99=1 !*NE ->L3 !*NE NSW(8): K=4;! TEST2 !*NE ->L2 !*NE NSW(10): !*NE OPEHINHIB=1;! TEST4 !*NE COMREG(25)=0 !*NE ->L1 !*NE NSW(11): NOPT=NOPT!X'15800000';! LOCAL !*NE ->L1 !*NE NSW(12): NOPT=NOPT!X'AA800000';! SPARSE !*NE ->L1 !*NE NSW(13): MONCPU=1 !*NE ->L1 END ; !OF PARM !* ROUTINE PRINT OPTIONS(INTEGER COMP) INTEGER I,J,K,L,M CONSTBYTEINTEGERARRAY INDEX(0:17)= C 1, 4, 5,23, 2,16, 6,12,15,11,14, 0,22,28,26,27, 9,29 CONSTBYTEINTEGERARRAY MASK(0:17)= C 7,14, 7, 7, 7,21, 1, 4, 4, 4,20, 3, 8, 4, 4, 4,20, 4 ROUTINESPEC P(STRING (15) S) PRINTSTRING(' COMPILATION OPTIONS: ') J=COMREG(27) K=0 CYCLE I=0,1,17 M=MASK(I) IF COMP=2 THEN M=M>>2 L=INDEX(I) IF J&(1<<L)=0 THENSTART UNLESS J&X'10000'#0 AND (4<=L<=6 OR L=23) START IF M&2#0 OR (COMP=0 AND M&16=0) THEN P(ALTPARMS(L)) FINISH FINISHELSESTART IF M&1#0 OR (COMP=0 AND M&16=0) THEN P(PARMS(L)) FINISH REPEAT !*NE J=COMREG(26) !*NE %CYCLE J=0,1,4 !*NE %IF J&(1<<I)#0 %THEN P(NPARMS(I)) !*NE %REPEAT IF K=0 THEN PRINTSTRING('DEFAULTS') NEWLINES(2) RETURN !* ROUTINE P(STRING (15) S) IF K#0 THEN PRINTSYMBOL(',') PRINTSTRING(S) K=K+1 END ;! P END ;! PRINT OPTIONS !* SYSTEMINTEGERFN SETPARS(INTEGER COUNT, C STRING (255) PARSTRING, STRINGARRAYNAME PAR, KEY) !* PROCESSES THE TOTAL PARAMETER STRING PARSTRING TO EXTRACT COUNT !* PARAMETERS, WHICH MAY BE POSITIONAL AS IDENTIFIER BY KEYWORDS STRING (255) CURPAR, CURKEY, TEST INTEGER I CYCLE I=1,1,COUNT PAR(I)='' REPEAT I=0 WHILE PARSTRING#'' CYCLE UNLESS PARSTRING->CURPAR.(",").PARSTRING C THEN CURPAR=PARSTRING AND PARSTRING='' IF LENGTH(CURPAR)>63 THEN LENGTH(CURPAR)=63 IF CURPAR->CURKEY.("=").CURPAR THEN START CYCLE I=1,1,COUNT IF CURKEY=KEY(I) THEN START FOUND: PAR(I)=CURPAR ->NEXTPAR FINISH REPEAT IF LENGTH(CURKEY)=3 THEN START ; ! MATCH ON FIRST 3 CHARS ALLOWED CYCLE I=1,1,COUNT TEST=KEY(I) IF LENGTH(TEST)>3 THEN START LENGTH(TEST)=3 IF CURKEY=TEST THEN ->FOUND FINISH REPEAT FINISH RESULT =214; ! INVALID KEYWORD FINISH ELSE START IF I=COUNT THEN RESULT =215; ! TOO MANY PARAMS I=I+1 PAR(I)=CURPAR FINISH NEXTPAR: REPEAT RESULT =0 END ; ! SETPARS !* !%SYSTEMROUTINE SOLOPARS(%STRING(255) S) !%CONSTSTRING(8)%ARRAY KEY(1:10)= %C ! 'INPUT','OMF','OPTIONS','RUN','SAVELIST','IN','OM','OP','RU','SA' !%STRING(63)%ARRAY PAR(1:10) !%STRING(63) LIB !%INTEGER I !*K I=SETPARS(10,S,PAR,KEY) !*K %CYCLE I=1,1,5 !*K %IF PAR(I)='' %AND PAR(I+5)#'' %THENSTART !*K PAR(I)=PAR(I+5) !*K %FINISH !*K %REPEAT !*K CINPUT=PAR(1) !*K OMFNAME=PAR(2) !*K %UNLESS OMFNAME->CLIBNAME.('.').OMFNAME %THEN CLIBNAME='' !*K COPTIONS=PAR(3) !*K S=PAR(4) !*K %IF S='NO' %OR S='N' %THEN I=0 %ELSE I=1 !*K RUNFLAG=I !*K CSAVELIST=PAR(5) !%END;! SOLOPARS !* !* !*NE %SYSTEMROUTINE BSOLOPARS(%LONGINTEGER %C !*NE INPUT,OMF,RUN,OPTIONS,SAVELIST,PROUTE,PREPORT, %C !*NE %INTEGER PDEPTH,DIAGS,ARRAY,%LONGINTEGER AVOLS) !*NE %LONGINTEGERARRAY A(0:6) !*NE %STRING(63) S,LIB !*NE %SWITCH V(0:6) !*NE %INTEGER I,J,LEN,ADDRS !*NE !*B A(0)=INPUT !*NE !*B A(1)=OMF !*NE !*B A(2)=RUN !*NE !*B A(3)=OPTIONS !*NE !*B A(4)=SAVELIST !*NE !*B A(5)=PROUTE !*NE !*B A(6)=PREPORT !*NE !*B %CYCLE I=0,1,4 !*NE !*B LEN = (A(I)<<8)>>40 !*NE !*B ADDRS = A(I)&X'00000000FFFFFFFF' !*NE !*B J=ADDR(S)+1 !*NE !*B MOVE(LEN,ADDRS,J) !*NE !*B ETOI(J,LEN) !*NE !*B LENGTH(S)=LEN !*NE !*B ->V(I) !*NE REP: !*NE !*B %REPEAT !*NE !*B ICL9CEAVOLS = (AVOLS<<8)>>40 !*NE !*B DEPTH = PDEPTH !*NE !*B DIAGNOSTICS = DIAGS !*NE !*B ARRAYSIZE = ARRAY !*NE !*B %RETURN !*NE !*B !* !*NE V(0): !*NE !*B CINPUT=S !*NE !*B ->REP !*NE !*B !* !*NE V(1): !*NE !*B OMFNAME='' !*NE !*B %IF S='' %THENSTART;! NO LIBRARY SPECIFIED !*NE !*B CLIBNAME='' !*NE !*B %FINISHELSESTART !*NE !*B %IF S->CLIBNAME.('.').OMFNAME %THENSTART !*NE !*B %CYCLE !*NE !*B %EXIT %UNLESS OMFNAME->LIB.('.').OMFNAME !*NE !*B CLIBNAME=CLIBNAME.'.'.LIB !*NE !*B %REPEAT !*NE !*B %FINISHELSE CLIBNAME=S !*NE !*B %FINISH !*NE !*B ->REP !*NE !*B !* !*NE V(2): !*NE !*B CRUN=S !*NE !*B %IF S='NO' %OR S='N' %THEN RUNFLAG=0 %ELSE RUNFLAG=1 !*NE !*B ->REP !*NE !*B !* !*NE V(3): !*NE !*B COPTIONS=S !*NE !*B ->REP !*NE !*B !* !*NE V(4): !*NE !*B CSAVELIST=S !*NE !*B ->REP !*NE V(5): !*NE !*B %IF S = "NO" %OR S = "N" %THEN ROUTE = 0 %ELSE ROUTE = 1 !*NE !*B -> REP !*NE V(6): !*NE !*B %IF S = "NO" %OR S = "N" %THEN REPORT = 0 %ELSE REPORT = 1 !*NE !*B -> REP !*NE %END ! OF BSOLOPARS !* !* !*********************************************************************** !* * !* COMPILATION INITIALISATION * !* * !*********************************************************************** !* !* !*NE %INTEGERFN SET INPUT(%STRING(63) IDEN) !*NE %INTEGER I,AFD,FILEORG,DEVCLASS,RECTYPE,FE !*NE %RECORDNAME F(NRFDFMT) !*NE I=NEWDESC(101,1,4,1,0,IDEN,AFD) !*NE F==RECORD(AFD) !*NE I=DEFINE FILE(0,1,IDEN,F_ROUTECCY,FILEORG,DEVCLASS, %C !*NE RECTYPE,FE,F_MINREC,F_MAXREC) !*NE %IF I>0 %THEN %RESULT=I !*NE F_STATUS=1 !*NE F_MODE=2;! READ FORWARDS ONLY !*NE F_DEVCLASS=DEVCLASS !*NE %IF DEVCLASS=9 %THEN F_MODE=0;! CONTROL STREAM !*NE F_FILEORG=FILEORG !*NE F_RECTYPE=RECTYPE !*NE F_RECSIZE=F_MAXREC !*NE COMREG(54)=F_ROUTECCY !*NE %RESULT=0 !*NE %END;! SET INPUT !* INTEGERFNSPEC GET SLOW ROUTE (INTEGER AFD) !* SYSTEMINTEGERFN INITCOMP(INTEGER COMP,MODE,NEWP) OWNLONGINTEGER ALIGN !*NE %INTEGER AFD INTEGER I,F,MAX INTEGER J !*NE %STRING(10) D,T ! 4 - ALGOL ! 5 - FORTRAN ! 6 - IMP CONSTSTRING (14) ARRAY CN(4:6)= C "ICL9CEZALGOL","ICL9CEZFORTRAN","ICL9CEZIMP" COMREG(24)=COMREG(27) !*NE %IF OPSYS=2 %THEN MAX=X'40000' %ELSE MAX=X'80000';! 1 SEG ON K !*E; MAX=X'80000' IF COMP=0 THEN ->SET;! JOBBER INITIALISATION !*NE %IF FACILITY#0 %THENSTART !*NE %IF CSAVELIST#'' %THENSTART !*NE SELECT OUTPUT(100) !*NE I=NEW DESC(99,1,2,13,0,CSAVELIST,AFD) !*NE I = GET SLOW ROUTE(AFD) !*NE %IF I # 0 %THEN %START !*NE PRINTSTRING(' !*NE ***FAILED TO OPEN LISTING FILE - WORK FILE SELECTED !*NE ') !*NE I = NEW DESC(99,1,2,X'2',0,'',AFD) !*NE %FINISH !*NE %FINISH !*NE SELECTOUTPUT(99) !*NE %IF LAST MODE=2 %THEN NEWPAGE !*NE !*K %IF CINPUT='' %THEN CINPUT='*INPUT' !*NE I=SET INPUT(CINPUT) !*NE %IF I>0 %THEN %RESULT=I !*NE PRINTSTRING(' !*NE SOURCE FILE: '.CINPUT) !*NE SPACES(77-LENGTH(CINPUT)) !*NE MODE=1 !*NE DATIME(D,T) !*NE PRINTSTRING('COMPILED '.D.' '.T.' !*NE ') !*NE %FINISH IF NEWP#0 THEN NEWPAGE IF MODE#0 THENSTART ;! USER FILE SPECIFIED SELECT INPUT(101) FINISHELSE SELECTINPUT(108) !*E; PRINT OPTIONS(COMP-3) LAST MODE=1 !* SET: COMREG(40)=-1 ;! DISABLE COMPILER DIAGNOSTIC OUTPUT OUTFILE('SS#WRK',MAX,0,0,I,F) IF F=0 THEN COMREG(14)=I ELSE RESULT =F OUTFILE('SS#TMPOB',MAX,0,0,I,F) IF COMP>0 START IF COMPS(COMP)=0 START F=LOADCOMPILER(COMP,CN(COMP),J) INTEGER(ADDR(COMPS(COMP)))=X'B1000000' INTEGER(ADDR(COMPS(COMP))+4)=J FINISH FINISH IF F=0 THEN COMREG(15)=I ELSE RESULT =F RESULT =0 END ;! INITCOMP !* !* !*********************************************************************** !* * !* FILE DESCRIPTORS * !* * !*********************************************************************** !* !* CONSTINTEGER FDSPACE=2048 CONSTINTEGER FDSIZE=112 OWNINTEGER FDBASE OWNINTEGER FDFREE OWNINTEGER FDMAX !* !* !* SYSTEMINTEGERFN RESET FDS !*E; %INTEGER I INTEGER F !*NE OUTFILE('SS#FDS', FDSPACE, FDSPACE, -1, FDBASE, F) !*E; OUTFILE("SS#FDS",FDSPACE,0,0,FDBASE,F) IF F=0 START !*E; %CYCLE I=0,4,28 !*E; INTEGER(FDBASE+I)=0 !*E; %REPEAT FDFREE=FDBASE FDMAX=FDBASE+FDSPACE FINISHELSE FDBASE=0 !*E; %IF F#0 %THEN SSMESSA(F,"SS #FDS") !*NE %IF F<=0 %THEN F=RESET BUFFERS RESULT =F END ; ! RESET FDS SYSTEMINTEGERFN NEW DESC(INTEGER DSNUM, TYPE, ACCESS ROUTE, C MODE,IDENTYPE, STRING (31)IDEN, INTEGERNAME AFD) INTEGER I RECORDNAME F(NRFDFMT) UNLESS 0<DSNUM<=109 THENRESULT =164 !INVALID DATA SET NUMBER I=FDMAP(DSNUM) IF I#0 THENSTART F==RECORD(I) UNLESS F_STATUS<2 OR DSNUM=99 THENRESULT =1001 !LOGICAL ERROR-FILE NOT CLOSED FINISHELSESTART IF FDBASE=0 THEN I=RESET FDS ! DESCRIPTOR AREA NOT INITIALISED IF I#0 THENRESULT =1002; ! FAILED TO INITIALISE I=FDFREE UNLESS FDFREE+FDSIZE<=FDMAX THENRESULT =165 ! TOO MANY FILES DEFINED FDMAP(DSNUM)=FDFREE FDFREE=I+FDSIZE F==RECORD(I) F_LINK=COMREG(19) COMREG(19)=I FINISH FILL(76, I+4, 0) AFD=I F_DSNUM=DSNUM F_VALID ACTION=MODE F_MODE OF USE=TYPE F_ACCESS ROUTE=ACCESS ROUTE IF ACCESS ROUTE=6 THEN F_ASVAR=IDENTYPE;! MAPPED FILE F_MODE=11 F_IDEN=IDEN F_LM=1 F_RM=132 ! %IF ACCESS ROUTE=2 %THEN F_RM=132 %ELSE F_RM=80 F_ROUTECCY=I;! ADDRESS OF FD(USED IN EMAS INTERFACE) RESULT =0 END ; !NEW DESC !* !* !*********************************************************************** !* * !* BUFFER ALLOCATION * !* * !*********************************************************************** !* !* !*NE %CONSTINTEGER BUFFER SPACE=X'10000' !*NE %OWNINTEGER BUFFER BASE !*NE %OWNINTEGER BUFFER FREE !*NE %OWNINTEGER BUFFER MAX !*NE %OWNINTEGER BUFFER LIST !* !*NE %INTEGERFN RESET BUFFERS !*NE %INTEGER F !*NE %IF OPSYS=0 %THEN %RESULT=0;! NOT NECESSARY ON EMAS !*NE OUTFILE('SS#BUFF', BUFFER SPACE, BUFFER SPACE, -1, BUFFER BASE, F) !*NE %IF F=0 %THENSTART !*NE BUFFER FREE=BUFFER BASE !*NE BUFFER MAX=BUFFER BASE+BUFFER SPACE !*NE BUFFER LIST=0 !*NE %FINISHELSE BUFFER BASE=0 !*NE %RESULT =F !*NE %END ; !RESET BUFFERS !*NE !* !*NE !*NE !*NE %INTEGERFN GIVE BUFFER(%INTEGER LENGTH, %INTEGERNAME ADDRESS) !*NE %INTEGER F !*NE %IF OPSYS=0 %THEN %RESULT=0;! NOT NECESSARY ON EMAS !*NE %IF BUFFER BASE=0 %THENSTART !*NE F=RESET BUFFERS !*NE %IF F#0 %THENRESULT =1003 !*NE %FINISH !*NE %IF LENGTH+BUFFER FREE>BUFFER MAX %THENRESULT =1004 !*NE ! EXTEND LATER !*NE ADDRESS=BUFFER FREE !*NE BUFFER FREE=BUFFER FREE+(LENGTH+7)&X'FFFFFFF8' !*NE %RESULT =0 !*NE %END ; ! GIVE BUFFER !* !* !*********************************************************************** !* * !* OPEN/CLOSE FILES * !* * !*********************************************************************** !* !* INTEGERFN GET SLOW ROUTE(INTEGER AFD) RECORDNAME F(NRFDFMT) INTEGER I, J, K, FILEORG, DEVCLASS, RECTYPE, FE, MINREC, MAXREC F==RECORD(AFD) IF F_ACCESS ROUTE=1 THEN START J=1 K=1; ! READ ACCESS ONLY FINISH ELSE START K=2; ! READ/WRITE ACCESS IF F_ACCESS ROUTE=2 THEN J=2 ELSE J=0 FINISH F_ROUTECCY=AFD I=DEFINE FILE(J,K,F_IDEN,F_ROUTECCY,FILEORG,DEVCLASS, C RECTYPE,FE,MINREC,MAXREC) IF I>0 THEN RESULT =I F_STATUS=1 F_DEV CLASS=DEVCLASS IF RECTYPE = 1 THEN START ;! FIXED LENGTH RECS IF F_MODE = 11 OR F_MODE = 9 OR F_MODE = 6 OR F_MODE = 2 C THEN F_MODE = F_MODE - 1 FINISH IF F_DEVCLASS=9 THEN F_MODE=0; ! CONTROL STREAM F_FILEORG=FILEORG F_REC TYPE=RECTYPE ! PROCESS FORMAT EFFECTORS F_MINREC=MINREC F_MAXREC=MAXREC F_RECSIZE=MAXREC RESULT =0 END ; ! GET SLOW ROUTE !* SYSTEMINTEGERFN OPEN(INTEGER AFD, MODE) !* !* MODE = 1 INPUT !* 2 OUTPUT !* RECORDNAME F(NRFDFMT) !*NE %OWNBYTEINTEGERARRAY BUFF(0 : 132) !*NE %OWNBYTEINTEGERARRAY CBUFF(0:80) !*NE %STRING(63) SS INTEGER I,J,K !*E; %SWITCH A(0:9) !*NE %SWITCH A(0:6) F==RECORD(AFD) I=F_ACCESS ROUTE UNLESS 0<=I<=4 OR 8<=I<=9 THEN RESULT =1008 ->A(I) !* !****** LOG OUTPUT !A(0): ->OPENED !* !****** PRIMARY INPUT A(1): I=GET SLOW ROUTE(AFD) IF I>0 THEN RESULT =I !*NE F_AREC=ADDR(CBUFF(0)) F_MINREC=80 F_MAXREC=80 F_RECSIZE=80 ->OPENIT !* !****** PRIMARY OUTPUT A(0): A(2): I=GET SLOW ROUTE(AFD) IF I>0 THENSTART WFERR: SELECT OUTPUT(100) !*NE READ ERROR DATA(SS,I) PRINTSTRING(' ***FAILURE TO OPEN LISTING FILE(REPLY =') WRITE(I,1) !*NE PRINTSTRING(' FROM '.SS.")") !*NE %IF FACILITY#0 %THENSTART !*NE PRINTSTRING(' - JOURNAL SELECTED') !*NE NEWLINE !*NE LOG99 !*NE %RESULT=0 !*NE %FINISHELSESTART NEWLINE STOPBASE !*^E %FINISH FINISH !*NE F_AREC=ADDR(BUFF(0)) F_MINREC=1 F_MAXREC=133 ->OPENIT !* !****** MAPPED FILE A(3): IF MODE=2 THEN RESULT =171;! INVALID OPERATION A(8):A(9): F_C2=F_C1;! RESET CUR POINTER TO START ->OPENED IF I=3 !*NE !* !****** CONVENTIONAL FILE A(4): UNLESS F_STATUS>0 THENSTART !*E; I=GET ROUTE(AFD) !*NE I=JBR CALL(2,AFD);! ==GET ROUTE(AFD) IF I>0 THEN RESULT =I FINISH IF F_MODE=13 AND F_RECTYPE#1 THEN RESULT =179;! RECORDS ! MUST BE FIXED LENGTH FOR D.A. !*NE I=GIVE BUFFER(F_MAXREC,F_AREC) !*NE %IF I#0 %THEN %RESULT=I OPENIT: F_RECSIZE=F_MAXREC ! %IF F_DEVCLASS=9 %OR F_RECTYPE=1 %OR F_MODE=2 %THENSTART;! ALIEN DATA OR FIXED J=F_AREC K=F_MAXREC ! %FINISHELSESTART ! J=0 ! K=0 ! %FINISH !*B; %IF F_DEVCLASS = 9 %THEN %START !*B; %IF MODE = 2 %THEN F_MODE = 4 !*B; %FINISH I=OPEN FILE(F_ROUTECCY,F_MODE,J,K,ADDR(F_RECSIZE), C ADDR(F_C0)) IF I>0 THENSTART IF F_ACCESS ROUTE=2 THEN ->WFERR RESULT =I FINISH IF I = -1 THEN START F_VALID ACTION = F_VALID ACTION & X'ED' IF F_MODE < 12 THEN F_MODE = F_MODE - 2 C ELSE F_MODE = F_MODE - 1 FINISH ! %IF F_ACCESS ROUTE=2 %THENSTART ! I=POSITION SQ FILE(ADDR(F_C0),1);! AT END OF FILE !*K COMREG(55)=ADDR(F_C0) ! %FINISHELSESTART !*NE %UNLESS F_MODE=6 %THEN I=SET SQ MODE(ADDR(F_C0),F_MODE,MODE) ! %FINISH !*E; %IF 1<=F_ACCESS ROUTE<=2 %OR F_ACCESS ROUTE=9 %START !*E; F_AREC=F_C1 !*E; %FINISHELSE %START !*E; F_AREC=F_C1+2 !*E; %FINISH !*E; F_RECORDS=0 !*E; F_LASTREC=0 IF F_ACCESS ROUTE=1 THEN COMREG(54)=F_ROUTE CCY !* OPENED: F_STATUS=3 F_CUR STATE=1 RESULT =0 END ; !OF OPEN !* SYSTEMINTEGERFN CLOSE(INTEGER AFD) RECORDNAME F(NRFDFMT) INTEGER I SWITCH A(0:9) F==RECORD(AFD) I=F_ACCESS ROUTE UNLESS 0<=I<=4 OR 8<=I<=9 THEN RESULT =1008 F_FLAGS=F_FLAGS&X'FC';! CLEAR STREAM MARKERS F_MODEOFUSE= 0;! SQ/DA MARKER IF F_STATUS#3 THEN F_STATUS=0 AND RESULT =0 ->A(I) !* !****** LOG A(0): !* !****** PRIMARY INPUT A(1): !* !****** PRIMARY OUTPUT A(2): !****** CONVENTIONAL FILE A(4): IF F_STATUS<=1 THEN RESULT =0 A(8): A(9): F_STATUS=1 F_CURSTATE = 0 RESULT =CLOSE FILE(F_ROUTECCY,ADDR(F_C0)) !* !****** MAPPED FILE A(3): F_STATUS=0 RESULT =0 !* ! A(8):A(9): F_STATUS=1 !F_CURSTATE=0 ! %RESULT=0 END ; ! CLOSE !* !*NE %SYSTEMINTEGERFN LOCATE CHANNEL(%INTEGER CHAN) !*NE %RECORDNAME F(NRFDFMT) !*NE %STRING(15) S,ROOT !*NE %BYTEINTEGERARRAY T(0:2) !*NE %INTEGER I,J,AFD,DSNUM !*NE %INTEGER FILEORG,DEVCLASS,RECTYPE !*NE %LONGINTEGER KK !*NE !*B ROOT='ICL9CE' !* !*K ROOT='UNIT' !*NE %UNLESS 1<=CHAN<=99 %THEN %RESULT=164 !*NE DSNUM=CHAN !*NE %IF CHAN>9 %THENSTART !*NE I=CHAN//10 !*NE CHAN=CHAN-10*I !*NE T(2)=CHAN+'0' !*NE CHAN=I !*NE T(0)=2 !*NE %FINISHELSE T(0)=1 !*NE T(1)=CHAN+'0' !*NE S=ROOT.STRING(ADDR(T(0))) !*NE I=READ JS VAR(S,1,ADDR(KK)) !*NE %IF I#0 %THEN %RESULT=151 !*NE I=NEWDESC(DSNUM,1,4,X'3F',1,'',AFD) !*NE %IF I#0 %THEN %RESULT=I !*NE F==RECORD(AFD) !*NE J=KK !*NE F_ROUTECCY=J !*NE I=READ FILE DESCRIPTION(J,FILEORG,DEVCLASS,RECTYPE, %C !*NE F_MINREC,F_MAXREC) !*NE %IF I>0 %THEN %RESULT=I !*NE F_STATUS=1 !*NE F_FILEORG=FILEORG !*NE F_DEVCLASS=DEVCLASS !*NE %IF RECTYPE = 1 %THEN %START; ! FIXED LENGTH RESC !*NE %IF F_MODE=11 %OR F_MODE=9 %OR F_MODE=6 %OR F_MODE=2 %C !*NE %THEN F_MODE = F_MODE - 1 !*NE %FINISH !*NE %IF DEVCLASS=9 %THEN F_MODE=0 !*NE F_RECTYPE=RECTYPE !*NE F_RECSIZE=F_MAXREC !*NE %RESULT=0 !*NE %END;! LOCATE CHANNEL !* !* !* !* !******************************************************************** !* !* ICL9CEEXEC !* !******************************************************************** !* !*NE %EXTERNALROUTINE ICL9CEEXEC(%LONGINTEGER PROCEDURE,PROUTE,PREPORT, %C !*NE %INTEGER PDEPTH,PDIAGS,PARRAY, %C !*NE %LONGINTEGER AVOLS) !*NE %LONGINTEGERARRAY A(0:2) !*NE %INTEGER I,J,LEN,ADDRS !*NE %STRING(32) MODULE !*NE %STRING(63) S !*NE %SWITCH V(0:2) !*NE %LONGINTEGER ENTRYDR !*NE !*B A(0)=PROCEDURE !*NE !*B A(1)=PROUTE !*NE !*B A(2)=PREPORT !*NE !*B %CYCLE I=0,1,2 !*NE !*B LEN=(A(I)<<8)>>40 !*NE !*B ADDRS=A(I)&X'00000000FFFFFFFF' !*NE !*B J=ADDR(S)+1 !*NE !*B MOVE(LEN,ADDRS,J) !*NE !*B ETOI(J,LEN) !*NE !*B LENGTH(S)=LEN !*NE !*B -> V(I) !*NE REP: !*NE !*B %REPEAT !*NE !*B ICL9CEAVOLS =(AVOLS<<8)>>40 !*NE !*B DEPTH=PDEPTH !*NE !*B DIAGNOSTICS=PDIAGS !*NE !*B ARRAYSIZE=PARRAY !*NE !*B ->ENTER !*NE V(0): !*NE !*B MODULE = S !*NE !*B -> REP !*NE V(1): !*NE !*B %IF S = "NO" %OR S = "N" %THEN ROUTE = 0 %ELSE ROUTE = 1 !*NE !*B -> REP !*NE V(2): !*NE !*B %IF S = "NO" %OR S = "N" %THEN REPORT = 0 %ELSE REPORT = 1 !*NE !*B -> REP !*NE ENTER: !*NE !*B FACILITY = 4 !*NE !*B ICL9CEDOBEGIN = 1 !*NE !*B INITFILE(ICL MATHS ERROR ROUTINE); ! INITIALISE SUBSYSTEM !*NE !*B I = LOAD MODULE(MODULE,ENTRYDR) !*NE !*B %IF I > 0 %THEN %START !*NE !*B SELECTOUTPUT(100) !*NE !*B PRINTSTRING('LOAD FAILED') !*NE !*B WRITE(I,10) !*NE !*B NEWLINE !*NE !*B ->ABORT !*NE !*B %FINISH !*NE !*B OPEH DEFAULTS(1);! ALSO CALLS ICL9HEPROLOG !*NE LAST MODE=2 !*NE !*B *LD_ENTRYDR !*NE !*B *STLN_%TOS !*NE !*B *ASF_4 !*NE !*B *RALN_5 !*NE !*B *CALL_(%DR) !*NE !*B END TEXT('RUN COMPLETED') !*NE ABORT: !*NE !*B TIDYEXIT !*NE !*B %END; ! OF ICL9CEEXEC ENDOFFILE