SYSTEMROUTINESPEC ALLDIAGS(INTEGER PC) !* MODIFIED 24/01/78 08.30 !* !* EXTRINSICINTEGER ASSCOM EXTERNALLONGINTEGER ICL9CEAUXST !*E; %EXTERNALINTEGER ICL9CEFAC=0 !*NE %EXTERNALINTEGER ICL9CEFAC=4 !*NE %EXTERNALINTEGER ICL9CEDETOI !*NE %EXTERNALINTEGER ICL9CEDITOE !* !* OWNINTEGER OPSYS=0; ! 0 EMAS ! 1 VME/B ! 2 VME/K !* OWNINTEGERARRAY SSCOMREG(0 : 63) =240,0(63) !* !* !****** OPEH INTERFACE !* !*NE %EXTERNALROUTINESPEC ICL9HEDIAGOUT(%INTEGERNAME POSITION,%INTEGER D0,D1) !* !* !****** BBASE FUNCTIONS !* !*NE %SYSTEMROUTINESPEC DATE AND TIME(%STRINGNAME DATE, TIME) !*NE %SYSTEMINTEGERFNSPEC READ CPU TIME !*NE %SYSTEMINTEGERFNSPEC FASTFILEOP(%INTEGER ADA) !%SYSTEMINTEGERFNSPEC FILEOP(%INTEGER ACCESS DR ADDR,ACCESS TYPE, %C ! OPTYPE,BUFFAD,BUFFLEN,DISPLACEMENT) SYSTEMROUTINESPEC LOG(INTEGER MSG ADR,MSG LEN) SYSTEMROUTINESPEC STOPBASE !* !****** MAIN !* SYSTEMROUTINESPEC IOCP(INTEGER I,J) !* !****** FILE !* SYSTEMINTEGERMAPSPEC FDMAP(INTEGER I) SYSTEMINTEGERFNSPEC OPEN(INTEGER AFD, MODE) SYSTEMINTEGERFNSPEC CLOSE(INTEGER AFD) !*NE %SYSTEMINTEGERFNSPEC LOCATE CHANNEL(%INTEGER CHAN) SYSTEMINTEGERFNSPEC SET CONTENT LIMIT(STRING (15) S, C INTEGER NEW LIMIT) SYSTEMINTEGERFNSPEC INITCOMP(INTEGER COMP,MODE,NEWP) !%EXTERNALROUTINESPEC ICL9CEJINIT !* !****** DIAG !* SYSTEMROUTINESPEC ONTRAPACT(INTEGER MODE,CLASS,SUBCLASS, C OLDPC,OLDLNB) !*E; %SYSTEMROUTINESPEC EXPAND PRIMARY OUTPUT FILE(%RECORDNAME F) SYSTEMROUTINESPEC SSERR(INTEGER I) !*SJ; %SYSTEMROUTINESPEC ON OUTPUT LIMIT !* !* OWNINTEGER BASECPU !* !* OWNINTEGER INFD OWNINTEGER INREQFD OWNINTEGER LOG99SET OWNINTEGER OUTFD OWNINTEGER OUTREQFD !*NE %OWNINTEGER OUTPUT LIMIT=10000 OWNSTRING (31) OBJ FILE ENTRY !* !* INTEGERFNSPEC SELECTIO(INTEGER MODE, STREAM, INTEGERNAME MARGINS) !* 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) !* OWNRECORD TC(TCFMT) !* OWNINTEGERARRAY BASICFDS(0:111);! FOR STREAMS 99,101,102,108 !* !*NE %CONSTBYTEINTEGERARRAY ITOETAB(0 : 255) = %C !NE* 0, !NE* 1, 2, 3, 55, 45, !NE* 46, 47, 22, 5, 21, !NE* 11, 12, 13, 14, 15, !NE* 16, 17, 18, 19, 60, !NE* 61, 50, 38, 24, 25, !NE* 63, 39, 28, 29, 30, !NE* 31, 64, 79, 127, 123, !NE* 91, 108, 80, 125, 77, !NE* 93, 92, 78, 107, 96, !NE* 75, 97, 240, 241, 242, !NE* 243, 244, 245, 246, 247, !NE* 248, 249, 122, 94, 76, !NE* 126, 110, 111, 124, 193, !NE* 194, 195, 196, 197, 198, !NE* 199, 200, 201, 209, 210, !NE* 211, 212, 213, 214, 215, !NE* 216, 217, 226, 227, 228, !NE* 229, 230, 231, 232, 233, !NE* 74, 224, 90, 95, 109, !NE* 121, 129, 130, 131, 132, !NE* 133, 134, 135, 136, 137, !NE* 145, 146, 147, 148, 149, !NE* 150, 151, 152, 153, 162, !NE* 163, 164, 165, 166, 167, !NE* 168, 169, 192, 106, 208, !NE* 161, 7, 32, 33, 34, !NE* 35, 36, 37, 6, 23, !NE* 40, 41, 42, 43, 44, !NE* 9, 10, 27, 48, 49, !NE* 26, 51, 52, 53, 54, !NE* 8, 56, 57, 58, 59, !NE* 4, 20, 62, 225, 65, !NE* 66, 67, 68, 69, 70, !NE* 71, 72, 73, 81, 82, !NE* 83, 84, 85, 86, 87, !NE* 88, 89, 98, 99, 100, !NE* 101, 102, 103, 104, 105, !NE* 112, 113, 114, 115, 116, !NE* 117, 118, 119, 120, 128, !NE* 138, 139, 140, 141, 142, !NE* 143, 144, 154, 155, 156, !NE* 157, 158, 159, 160, 170, !NE* 171, 172, 173, 174, 175, !NE* 176, 177, 178, 179, 180, !NE* 181, 182, 183, 184, 185, !NE* 186, 187, 188, 189, 190, !NE* 191, 202, 203, 204, 205, !NE* 206, 207, 218, 219, 220, !NE* 221, 222, 223, 234, 235, !NE* 236, 237, 238, 239, 250, !NE* 251, 252, 253, 254, 255 !NE* !NE* %CONSTBYTEINTEGERARRAY ETOITAB(0 : 255) = %C !NE* 0, !NE* 1, 2, 3, 156, 9, !NE* 134, 127, 151, 141, 142, !NE* 11, 12, 13, 14, 15, !NE* 16, 17, 18, 19, 157, !NE* 10, 8, 135, 24, 25, !NE* 146, 143, 28, 29, 30, !NE* 31, 128, 129, 130, 131, !NE* 132, 133, 23, 27, 136, !NE* 137, 138, 139, 140, 5, !NE* 6, 7, 144, 145, 22, !NE* 147, 148, 149, 150, 4, !NE* 152, 153, 154, 155, 20, !NE* 21, 158, 26, 32, 160, !NE* 161, 162, 163, 164, 165, !NE* 166, 167, 168, 91, 46, !NE* 60, 40, 43, 33, 38, !NE* 169, 170, 171, 172, 173, !NE* 174, 175, 176, 177, 93, !NE* 36, 42, 41, 59, 94, !NE* 45, 47, 178, 179, 180, !NE* 181, 182, 183, 184, 185, !NE* 124, 44, 37, 95, 62, !NE* 63, 186, 187, 188, 189, !NE* 190, 191, 192, 193, 194, !NE* 96, 58, 35, 64, 39, !NE* 61, 34, 195, 97, 98, !NE* 99, 100, 101, 102, 103, !NE* 104, 105, 196, 197, 198, !NE* 199, 200, 201, 202, 106, !NE* 107, 108, 109, 110, 111, !NE* 112, 113, 114, 203, 204, !NE* 205, 206, 207, 208, 209, !NE* 126, 115, 116, 117, 118, !NE* 119, 120, 121, 122, 210, !NE* 211, 212, 213, 214, 215, !NE* 216, 217, 218, 219, 220, !NE* 221, 222, 223, 224, 225, !NE* 226, 227, 228, 229, 230, !NE* 231, 123, 65, 66, 67, !NE* 68, 69, 70, 71, 72, !NE* 73, 232, 233, 234, 235, !NE* 236, 237, 125, 74, 75, !NE* 76, 77, 78, 79, 80, !NE* 81, 82, 238, 239, 240, !NE* 241, 242, 243, 92, 159, !NE* 83, 84, 85, 86, 87, !NE* 88, 89, 90, 244, 245, !NE* 246, 247, 248, 249, 48, !NE* 49, 50, 51, 52, 53, !NE* 54, 55, 56, 57, 250, !NE* 251, 252, 253, 254, 255 !* !* !* SYSTEMROUTINE INITMAIN(INTEGER SYS,MODE) !* MODE = 0 INITIAL ENTRY !* 1 NEW PRIMARY OUTPUT FILE BEING OPENED !* 2 INITIALISATION COMPLETE, SET 'NO CURRENT STREAM' !* 3 INITIAL ENTRY FOR EXECUTE JOB INTEGER I IF MODE=2 THEN OUTFD=-1 AND RETURN OPSYS=SYS OUTFD=0 RETURN IF MODE=1 LOG99SET=0 BASECPU=0 !*NE ICL9CEDETOI=ADDR(ETOITAB(0)) !*NE ICL9CEDITOE=ADDR(ITOETAB(0)) CYCLE I=0,1,63 SSCOMREG(I)=0 REPEAT SSCOMREG(11)=INTEGER(ASSCOM+44) SSCOMREG(12)=INTEGER(ASSCOM+48) SSCOMREG(21)=ADDR(BASICFDS(0)) SSCOMREG(29)=ADDR(SSCOMREG(0)) SSCOMREG(49)=ADDR(TC_PAGE COUNT) SSCOMREG(57)=ADDR(OBJ FILE ENTRY) OBJ FILE ENTRY='' !*SJ; TC_OUTPUT LIMIT=10000 !*SJ; TC_PAGE SIZE=66 !*SJ; TC_TOTAL PRINT COUNT = 0 !*SJ; TC_USER PRINT COUNT = 0 !*SJ; TC_USER TRANSFER COUNT = 0 INFD=0;! WILL ENSURE %THAT INITIAL SELECT IS PERFORMED !*NE %IF MODE=3 %THEN ICL9CEFAC=4;! EXECUTE, ICL9CEFAC NOT SET END ;! INITMAIN !* !* !*NE %SYSTEMLONGREALFN CPUTIME !*NE %INTEGER I !*NE I = READ CPU TIME !*NE %IF BASECPU=0 %THEN BASECPU=I !*NE %RESULT = (I-BASECPU)*0.001 !*NE %END; ! CPUTIME !* !*NE %SYSTEMROUTINE DATIME(%STRINGNAME DATE,TIME) !*NE %STRING (10) D, T, U, V !*NE D='YYYY.MM.DD' !*NE T='HH:MM:SS' !*NE DATE AND TIME(D,T) !*NE TIME=T !*NE %IF D -> ('19').T.('/').U.('/').V %C !*NE %THEN D = V.'/'.U.'/'.T !*NE DATE=D !*NE %END;! DATIME !* !* !* ROUTINESPEC SIGNAL(INTEGER EP,P1,P2,INTEGERNAME F) !* SYSTEMINTEGERFN COMPILE(INTEGER COMP,MODE,NEWP) !* !****** CALL APPROPRIATE COMPILER !* LONGINTEGER DESC INTEGER I,SAVELNB *STSF_I SAVELNB=SSCOMREG(36) SSCOMREG(36)=I I=INITCOMP(COMP,MODE,NEWP) IF I>0 THEN RESULT =I DESC=LONGINTEGER(SSCOMREG(59)+(COMP-1)<<3) *STLN_TOS *ASF_4 *LD_DESC *RALN_5 *PUT_X'1FDC' ;! CALL @(DR) !* !**************** !* SSCOMREG(36)=SAVELNB SIGNAL(1,0,0,I);! POP UP CONTINGENCY I=SET CONTENT LIMIT('SS#WRK',0) RESULT =0 END ;! COMPILE !* SYSTEMROUTINE OUTPUT TRAP !*SJ; TC_OUTPUT LIMIT=TC_OUTPUT LIMIT-TC_PAGE SIZE !*SJ; TC_USER PRINT COUNT = TC_USER PRINT COUNT + TC_PAGE SIZE !*SJ; TC_PAGE COUNT=TC_PAGE SIZE !*E; %IF TC_OUTPUT LIMIT<0 %START !*NE !*SJ %IF TC_OUTPUT LIMIT<0 %AND ICL9CEFAC=0 %THENSTART !*SJ TC_OUTPUT LIMIT=200 !*E; TC_OUTPUT LIMIT=5000 ;! 200 NOT ENOUGH FOR DIAGNOSTICS! !*E; ALLDIAGS(0) %IF SSCOMREG(25)&1=1 !*SJ; IOCP(11,-1) !*SJ; ON OUTPUT LIMIT !*SJ; %FINISH END !* SYSTEMROUTINESPEC MOVE(INTEGER LENGTH, FROM, TO) !*NE %INTEGER I !*NE %RETURNIF LENGTH <= 0 !*NE I = X'18000000'!LENGTH !*NE *LSS_FROM !*NE *LUH_I !*NE *LDTB_I !*NE *LDA_TO !*NE *MV_%L=%DR !*NE %END; !OF MOVE !*NE !* !*NE %SYSTEMROUTINE FILL(%INTEGER LENGTH, FROM,FILLER) !*NE %INTEGER I !*NE %RETURNIF LENGTH <= 0 !*NE I = X'18000000'!LENGTH !*NE *LDTB_I !*NE *LDA_FROM !*NE *LB_FILLER !*NE *MVL_%L=%DR !*NE %END !*NE !* !*NE %SYSTEMROUTINE ETOI(%INTEGER AD, L) !*NE %INTEGER I, J, K !*NE I = ADDR(ETOITAB(0)) !*NE %RETURNIF L <= 0 !*NE J = X'18000100' !*NE K = X'18000000'!L !*NE *LSS_I !*NE *LUH_J !*NE *LDTB_K !*NE *LDA_AD !*NE *TTR_%L=%DR !*NE %END; ! ETOI !*NE !* !*NE %SYSTEMROUTINE ITOE(%INTEGER AD, L) !*NE %INTEGER I, J, K !*NE I = ADDR(ITOETAB(0)) !*NE %RETURNIF L <= 0 !*NE J = X'18000100' !*NE K = X'18000000'!L !*NE *LSS_I !*NE *LUH_J !*NE *LDTB_K !*NE *LDA_AD !*NE *TTR_%L=%DR !*NE %END; ! ITOE !*NE !* !* SYSTEMROUTINE SIM2(INTEGER EP, R1, R2, INTEGERNAME R3) OWNINTEGER EMNL = X'190A0000' INTEGER I,J,FIRST,ROUTE,PAGE COUNT INTEGER AFD RECORDNAME F(NRFDFMT) !*E; %INTEGER PIDR0,PIDR1,K,NEWSIZE,FSF OWNBYTEINTEGERARRAY LOGBUFF(0:119) SWITCH ENTRY(0 : 17) SWITCH IN(0:9),OUT(0:8) -> ENTRY(EP) !*************************************************************** ENTRY(0): ! READ A RECORD FROM CURR SELECTED I/P STREAM ! R1 = ADDR(BUFFER) (@ 160 BYTE BUFFER) ! R2 = MODE ! 0 FULL RECORD, EM FOR // ! 1 FULL RECORD ! 2 NEXT FULL RECORD ! ON EXIT R3<0 ERROR ! =0 160 CHARS(NO NL ! >0 LENGTH IF INFD=0 THEN SELECT INPUT(108);! DEFAULT INPUT F == RECORD(INFD) ROUTE=F_ACCESS ROUTE ->IN(ROUTE) !****** PRIMARY INPUT IN(1): !*NE !*SJ %IF SSCOMREG(56)=0 %THENSTART !*K I=FILEOP(ADDR(F_C0),F_MODE&15,1,F_AREC,80,0) !*NE !*B I=FASTFILEOP(ADDR(F_C0)) !*NE %IF I>0 %THENSTART !*E; EOF:%IF R1=-1 %THEN R3=-1 %ELSESTART ! NOTE EOF: SHIFTED UP ONE LINE FOR EMAS 2970 MOVE(2,ADDR(EMNL),R1) R3 = 2 !*E; %FINISH RETURN !*NE %FINISH !*NE !*SJ %FINISH !*NE I=F_AREC !*NE J=F_RECSIZE !*NE !*SJ SSCOMREG(56)=0 !*NE MOVE(J,I,R1) !*NE ETOI(R1,J) !*NE BYTEINTEGER(R1+J)=NL !*NE R3=J+1 !*K %IF ICL9CEFAC#0 %THEN ->KCHECK !*NE !*SJ %IF BYTEINTEGER(R1)#'/' %THEN %RETURN !*NE !*SJ %IF R2#0 %OR BYTEINTEGER(R1+1)#'/' %THEN %RETURN !*NE !*SJ SSCOMREG(56)=1 !*NE !*SJ ->EOF !*NE %RETURN !*NE !****** MAPPED PRIMARY INPUT !*NE IN(7): !*NE !****** MAPPED FILE !*NE IN(3): !*NE I=F_C2 !*NE %IF I>=F_C3 %THEN ->EOF !*NE MOVE(80,I,R1) !*NE !*NE ETOI(R1,80) !*NE BYTEINTEGER(R1+80)=NL !*NE %IF ROUTE=7 %AND R2=0 %THENSTART !*NE %IF BYTEINTEGER(R1)='/' %AND BYTEINTEGER(R1+1)='/' %THEN ->EOF !*NE %FINISH !*NE F_C2=I+80 !*NE R3=81 !*NE %RETURN !****** STANDARD FILE !*NE IN(4): !*K I=FILEOP(ADDR(F_C0),F_MODE&15,1,F_AREC,F_MAXREC,0) !*NE !*B I=FASTFILEOP(ADDR(F_C0)) !*NE %IF I>0 %THENSTART !*NE %IF I=153 %THEN ->EOF !*NE SSERR(I) !*NE %FINISH !*NE !*S J TC_USER TRANSFER COUNT = TC_USER TRANSFER COUNT + 1 !*NE I=F_RECSIZE !*NE %IF I>160 %THEN I=160 !*NE MOVE(I,F_AREC,R1) !*NE ETOI(R1,I) !*NE BYTEINTEGER(R1+I)=NL !*NE R3=I+1 !*NE KCHECK: !*K %IF OPSYS=2 %THENSTART !*K I=BYTEINTEGER(R1) !*K %IF I='*' %OR I='/' %THENSTART !*K %IF BYTEINTEGER(R1+1)=I %THENSTART !*K %IF BYTEINTEGER(R1+2)=I %AND BYTEINTEGER(R1+3)=I %THEN ->EOF !*K %FINISH !*K %FINISH !*K %FINISH !*NE %RETURN !****** EMAS PRIMARY INPUT IN(9): !****** EMAS MAPPED FILE IN(3): IN(8): !*E*; %IF INTEGER(F_C0+12)=4 %START ;! FORTRAN SQ FILE !*E; %IF F_C2>=F_C0+INTEGER(F_C0) %THEN ->EOF !*E*; K=((BYTEINTEGER(F_C2)<<8)!BYTEINTEGER(F_C2+1))-2 !*E; F_C2=F_C2+2 !*E; FSF=K !*E; %FINISHELSESTART !*E; FSF=0 !*E; PIDR0=F_RECORDS !*E; %IF PIDR0=0 %THEN %START IF ROUTE=3 THEN PIDR0=X'58000000'!(F_C3-F_C2) ELSEC PIDR0=X'58000000'!(INTEGER(F_C0)-INTEGER(F_C0+4)) FINISH !*E; !! !*E; PIDR1=F_C2 !*E; !! !*E; *LDTB_PIDR0 !*E; *LDA_PIDR1 !*E; *LB_10 ;! NL !*E; *PUT_X'A300' ;! SWNE !*E; *JCC_8,<EOF> ;!BIT 0 OF CC SET IF NOT FOUND !*E; *MODD_1 ;! GET PAST NL !*E; *STD_PIDR0 !*E; !! !*E; K=PIDR1-F_C2 ;! FIND OUT LINE LENGTH !*E; !! !*E; !! IMP EQUIVELANT !*E; ! %CYCLE K=F_C2,1,F_C0+INTEGER(F_C0) !*E; ! %IF BYTEINTEGER(K)=10 %THEN %EXIT !*E; ! %REPEAT !*E; ! K=K+1-F_C2 !*E; %FINISH !*E; %IF K>160 %THEN K=160 !*E; MOVE(K,F_C2,R1) %UNLESS R1=-1 !*E; %IF FSF#0 %THEN BYTEINTEGER(R1+K)=NL %AND K=K+1 !*E; R3=K !*E; %IF ROUTE=3 %OR ROUTE=9 %THENSTART;! CHECK FOR // !*E; %IF BYTEINTEGER(F_C2)='/' %THENSTART !*E; %IF R2=0 %AND BYTEINTEGER(F_C2+1)='/' %THEN ->EOF !*E; %FINISH !*E; %FINISH !*E; %IF FSF=0 %THEN F_C2=PIDR1 %ELSE F_C2=F_C2+FSF !*E; F_RECORDS=PIDR0 !*E; %RETURN !* !*************************************************************** ENTRY(1): ! WRITE A RECORD ! R1 = ADDR(BUFFER) ! R2 = LENGTH ! FIRST CHAR IS CONTROL CR,NL,NP IF OUTFD=-1 THENSTART OUTFD=0 SIM2(15,1,99,I) FINISH F == RECORD(OUTFD) FIRST=BYTEINTEGER(R1) IF OUTFD=0 OR F_DSNUM=100 THENSTART ;! DEFAULT TO LOG R1=R1+1 R2=R2-1 I=ADDR(LOGBUFF(0)) !*NE %IF R2>120 %THEN R2=120 IF R2<=0 THENSTART ;! AT LEAST 1 CHAR REQUIRED BYTEINTEGER(I)=' ' R2=1 FINISHELSESTART MOVE(R2,R1,I) FINISH !*NE %IF OPSYS#0 %THEN ITOE(I,R2) !*NE %IF LOG99SET=2 %THENSTART;! OPEH OUTPUT !*NE J=-1 !*NE ICL9HEDIAGOUT(J,X'18000000'!R2,I) !*NE %FINISHELSE %C LOG(I,R2) !*E; LOG(I,R2) R3=0 RETURN FINISH ->OUT(F_ACCESS ROUTE) !****** PRIMARY OUTPUT OUT(2): IF R2>133 THEN R2=133 !*E; F_RECSIZE=R2 !*NE I=F_AREC !*NE MOVE(R2,R1,I) !*NE ITOE(I,R2) !*NE ! %IF R2<133 %THEN FILL(133-R2,I+R2,X'40') !*NE F_RECSIZE=R2 !*K I=FILE OP(ADDR(F_C0),F_MODE&15,2,F_AREC,R2,0) !*NE !*B I=FASTFILEOP(ADDR(F_C0)) !*NE %IF I>0 %THENSTART !*E; %IF F_C2+R2>F_C3 %THEN EXPAND PRIMARY OUTPUT FILE(F) !*NE OUTFD=0 !*NE LOG99SET=1 !*NE IOCP(11,-1) !*NE PRINTSTRING(' !*NE ***FAILURE WHILE WRITING TO PRIMARY OUTPUT FILE - FILE FULL !*NE ') !*NE STOPBASE !*NE %FINISH !*E; MOVE(R2,R1,F_C2) !*E; F_C2=F_C2+R2 ;! INCREMENT CURRENT POINTER !*E; INTEGER(F_C0)=F_C2-F_C0 ;! PUT CURRENT SIZE IN FILE HEADER !*E; F_AREC=F_C2 !*NE !*SJ %IF ICL9CEFAC=0 %THENSTART;! JOBBER MODE !*SJ; PAGE COUNT=TC_PAGE COUNT !*SJ; %IF FIRST=12 %THEN PAGE COUNT=0 !*SJ; PAGE COUNT=PAGE COUNT-1 !*SJ; %IF PAGECOUNT<0 %THEN OUTPUT TRAP %ELSESTART !*SJ; TC_PAGE COUNT=PAGE COUNT !*SJ; %FINISH !*NE !*SJ %FINISH RETURN !****** MAPPED FILE OUT(3): OUT(7): SSERR(183);! INVALID I/O OPERATION !****** STANDARD FILE OUT(4): UNLESS BYTEINTEGER(R1)=12 THENSTART ;! EXCEPT NEWPAGE R1=R1+1 R2=R2-1 FINISH OUT(8): IF R2<=0 THENSTART BYTEINTEGER(R1)=' ' R2=1 FINISH !*NE %IF R2>F_MAXREC %THEN R2=F_MAXREC !*NE I=F_AREC !*NE MOVE(R2,R1,I) !*NE ITOE(I,R2) !*NE !*SJ TC_USER TRANSFER COUNT = TC_USER TRANSFER COUNT + 1 F_RECSIZE=R2 !*K I=FILEOP(ADDR(F_C0),F_MODE&15,2,I,R2,0) !*NE !*B I=FASTFILEOP(ADDR(F_C0)) !*NE %IF I#0 %THEN SSERR(I) !*E; %IF F_C2+R2>F_C3 %THEN SSERR(I) !*E; MOVE(R2,R1,F_C2) !*E; F_C2=F_C2+R2 !*E; INTEGER(F_C0)=F_C2-F_C0 !*E; F_AREC=F_C2 RETURN !* !************************************************************** ENTRY(14): ! SELECTOUTPUT(COMREG(23)) R1=1 R2=SSCOMREG(23) RETURN IF R2=0 SSCOMREG(23)=0;! TO FORCE FULL ACTION !* !************************************************************* ENTRY(15): ! SELECT INPUT-OUTPUT STREAM IF R2=100 THENSTART OUTFD=0 SSCOMREG(23)=0 R3=X'184' RETURN FINISH I=SELECTIO(R1,R2,R3) IF I>0 THENSTART !*E; R3 = -1 ;! PASS BACK ERROR !*NE %UNLESS R2=99 %AND I=152 %AND ICL9CEFAC#0 %THEN SSERR(I) FINISH RETURN !***************************************************************** ENTRY(16): ! SET MARGINS IF R1 = 0 THEN F == RECORD(INREQFD) C ELSE F == RECORD(OUTREQFD) F_LM = (R2>>8)&X'FF' F_RM = R2&X'FF' RETURN !***************************************************************** ENTRY(17): ! CLOSE STREAM ! R1 = STREAM IF R1 = SSCOMREG(22) OR R1 = SSCOMREG(23) THEN SSERR(29);! STREAM IN USE AFD = FDMAP(R1) IF AFD = 0 THEN SSERR(24);! STREAM NOT DEFINED I=CLOSE(AFD) IF I>0 THEN SSERR(I) R3 = 0 RETURN END ; ! SIM2 !***** ***** INTEGERFN SELECTIO(INTEGER MODE, STREAM, INTEGERNAME MARGINS) !**** *** ! STREAM=STREAM NUMBER TO BE SELECTED ! MODE=0 FOR READ,1 FOR WRITE !**** *** RECORDNAME F(NRFDFMT) INTEGER I, AFD INTEGER REQST, REQFD ! %IF STREAM = 0 %THEN STREAM = 90+MODE;! MAP 0 TO 90 OR 91 FOR TTY UNLESS 0<STREAM<=109 THEN RESULT =24 REQST = STREAM REQFD = 0 IF MODE=1 AND LOG99SET=1 AND STREAM=99 THENSTART MARGINS=X'184';! MARGINS OUTFD=0 RESULT =0 FINISH START: IF STREAM = SSCOMREG(22+MODE) THENSTART IF REQFD = 0 THENSTART IF MODE = 0 THEN REQFD = INFD C ELSE REQFD = OUTFD FINISH -> MARGINS FINISH LOOK: AFD = FDMAP(STREAM) IF AFD = 0 THENSTART IF STREAM=107 THENSTART !*E; STREAM=99 !*E; ->LOOK !*NE %IF ICL9CEFAC=0 %THEN STREAM=99 %AND ->LOOK;! JOBBER OUTFD=0;! SELECT 100 SSCOMREG(23)=0 MARGINS=X'184' RESULT =0 FINISH IF STREAM=104 AND MODE=0 THEN INFD=0 AND ->M1AND132 !*NE %IF ICL9CEFAC>0 %THENSTART !*NE I=LOCATE CHANNEL(STREAM) !*NE %IF I=0 %THEN ->LOOK !*NE %FINISH IF 1<=STREAM<=2 THEN STREAM=100-STREAM AND -> LOOK IF STREAM=98 THEN STREAM=108 AND ->LOOK IF STREAM=89 THEN STREAM=99 AND ->LOOK RESULT =24;! STREAM NOT DEFINED FINISH ! NOT DEFINED F == RECORD(AFD) IF REQFD = 0 THEN REQFD = AFD IF F_ACCESS ROUTE = 6 THENSTART STREAM = F_ASVAR ! %IF STREAM = 0 %THEN STREAM = 90+MODE -> START FINISH IF F_FLAGS&3+MODE=2 THEN RESULT =29;! STREAM IN ALTERNATE USE IF F_STATUS<3 THENSTART IF MODE=0 THENSTART ;! INPUT F_VALID ACTION=X'21';! READ,CLOSE UNLESS F_MODE=0 THEN F_MODE=2;! OPEN FOR FORWARD READ FINISHELSESTART ;! OUTPUT F_VALID ACTION=X'22';! WRITE,CLOSE IF STREAM=99 THEN F_MODE=6 ELSE F_MODE=11;! OPEN FOR READ,WRITE FINISH I=OPEN(AFD,MODE+1) IF I > 0 THENSTART IF STREAM = 99 OR STREAM=108 THENSTART OUTFD=0 !E*; SELECT OUTPUT(100) !E*; SSERR(I) !*; STOPBASE ! SSABORT(1) FINISH RESULT =I FINISH FINISH !*E; %IF MODE=1 %AND INTEGER(F_C0+12)=4 %THENC INTEGER(F_C0+12)=3 IF MODE = 0 THEN INFD = AFD ELSE OUTFD = AFD F_FLAGS = F_FLAGS!(1<<MODE) MARGINS: IF MODE = 0 THEN INREQFD = REQFD C ELSE OUTREQFD = REQFD SSCOMREG(22+MODE) = REQST F == RECORD(REQFD) ! MARGINS = (F_LM<<8)!F_RM M1AND132:MARGINS=X'184' RESULT =0 END ; ! SELECTIO !* SYSTEMINTEGERMAP COMREG(INTEGER I) RESULT = ADDR(SSCOMREG(I)) END ; !OF COMREG !* SYSTEMROUTINE LOG99 OUTFD=0 LOG99SET=1 END ;! LOG99 !* OWNINTEGER SAVE OUTFD !* SYSTEMROUTINE OPEH99(INTEGER MODE) !* MODE = 0 REVERT TO PREVIOUS STATE !* 1 DEFAULT TO DIAGOUT IF MODE#0 THENSTART SAVE OUTFD=OUTFD OUTFD=0 LOG99SET=2 FINISHELSESTART OUTFD=SAVE OUTFD LOG99SET=0 FINISH !* END ;! OPEH99 !* CONSTINTEGER MAXSIGLEVEL=2 !* RECORDFORMAT SIGDATAFMT(INTEGER PC, LNB, CLASS, SUBCLASS, C INTEGERARRAY A(0 : 17)) !* SYSTEMROUTINE SIGNAL(INTEGER EP, P1, P2, INTEGERNAME F) !*********************************************************************** !* EP = 0 STACK RECOVERY INFO * !* P1 = PC * !* P2 = LNB !* 1 UNSTACK RECOVERY INFORMATION * !* P1 = 0 ONE LEVEL * !* 1 ALL LEVELS * !* 2 SIGNAL ERROR OF CLASS P1 AND SUBCLASS P2 AT CURRENT LEVEL * !* 3 DITTO AT OUTER LEVEL * !* 4 REPEAT LATEST CONTINGENCY AT CURRENT LEVEL * !* 5 RETURN TO USER MODE WITH NOMINATED ENVIRONMENT * !* 6 SET INTEGER AT P1 TO CURRENT NUMBER OF LEVELS * !*********************************************************************** RECORDNAME D(SIGDATAFMT) INTEGER I,SIGLEVEL SWITCH SW(-1 : 6) F = 0 SIGLEVEL=SSCOMREG(34) -> SW(EP) !* SW(0): !*NE %UNLESS ICL9CEFAC=0 %THENSTART !*NE %IF INTEGER(P2+4)>>28#X'E' %THEN I=INTEGER(P2) %ELSE I=P2 !*NE COMREG(36)=I !*NE %FINISH SW(-1): ! CALL FROM NDIAG ! %IF EP=0 %THENSTART ! %IF ICL9CEAUXST=0 %THEN ->INIT ! I=INTEGER(P2+4)>>24 ! %IF I#X'E1' %THENSTART;! NOT A CODE DESCRIPTOR ! %IF I=X'E3' %THENSTART;! WAS OUTWARD CALL FROM SYS !INIT: ICL9CEJINIT ! SIGLEVEL=0 ! COMREG(36)=P2 ! ICL9CEFAC=4 ! %FINISHELSESTART ! I=INTEGER(INTEGER(P2)+4)>>24 ! %IF I=X'E3' %THEN ->INIT ! %FINISH ! %FINISH ! %FINISH IF SIGLEVEL>=MAXSIGLEVEL THEN F=1 AND RETURN SIGLEVEL =SIGLEVEL+1 !TEMP TO STOP NDIAG IFNOT INITED !*E; %RETURN %IF SSCOMREG(33)=0 D == RECORD(SSCOMREG(33)+88*SIGLEVEL) D_PC = P1 D_LNB = P2 OUT: SSCOMREG(34)=SIGLEVEL INTEGER(SSCOMREG(33)+4)=0;! ENSURE FALLBACK TRAP EFFECTIVE RETURN !* SW(1): IF SIGLEVEL <= 0 THEN F = 1 ANDRETURN IF P1 = 0 THEN SIGLEVEL = SIGLEVEL-1 C ELSE SIGLEVEL = 0 -> OUT !* SW(2): !* SW(3): *PUT_X'5D98'; ! STLN (TOS) *PUT_X'6398'; ! LSS (TOS) **=I ONTRAPACT(EP,P1,P2,INTEGER(I+8),INTEGER(I)) !* SW(4): ONTRAPACT(4,P1,P2,0,0) !* SW(5): MONITOR ;STOP !* SW(6): INTEGER(P1) = SIGLEVEL END ; ! SIGNAL !* !* !* !*NE %EXTERNALINTEGERFNSPEC ICL9HENOMDESC(%LONGINTEGER NAME DESC, %C INTEGER P0,P1,P2,P3) !* !*NE %SYSTEMINTEGERFN NOMDESC(%LONGINTEGER NAME DESC,%INTEGER P0,P1,P2,P3) !*NE %RESULT=ICL9HENOMDESC(NAME DESC,X'B0000002',P1,0,0) !*NE %END;! NOMDESC !* !* !%OWNLONGINTEGERARRAY AREADESC(0:47) !%OWNINTEGERARRAY AREAADDR(1:16) !%CONSTINTEGER NUMAREASENV = 21, %C ! NUMFILESENV = 7, %C ! NUMFILESFAC = 6 !%SYSTEMINTEGERFNSPEC READ LOAD DETAILS(%INTEGER AREAADDR, ADDRDESC, %C ! %INTEGERNAME LEN) !%ROUTINESPEC CHECKAREAS(%INTEGER AD1,AD2,DESC1,DESC2) SYSTEMROUTINE GET AREA DESCS(INTEGER M1,M2,DM1,DM2, F1,F2,DF1,DF2, C D1,D2,DD1,DD2, O1,O2,DO1,DO2, C LP1,LP2,DLP1,DLP2, C FL1,FL2,DFL1,DFL2, AL1,AL2,DAL1,DAL2) !%LONGINTEGERARRAYFORMAT COMPSF(1:6) !%LONGINTEGERARRAYNAME COMPS !%INTEGER I,RC,INDEX,LEN,TRACE !%STRING(16)%FN HEXOF(%LONGINTEGER DEC) !%INTEGER I,DIGIT !%STRING(16) S !%CONSTSTRING(1)%ARRAY HT (0:15) = '0','1','2','3','4','5', ! '6','7','8','9','A','B','C','D','E','F' !S = "" !%CYCLE I = 1,1,16 !DIGIT = DEC&15 !S = HT(DIGIT).S !DEC=DEC>>4 !%REPEAT !%RESULT=S !%END !TRACE=COMREG(26)>>31 !COMPS == ARRAY(SSCOMREG(59),COMPSF) !%CYCLE I=1,1,6 ! %IF COMPS(I)#0 %C ! %THEN AREAADDR(I)=INTEGER((COMPS(I)&X'00000000FFFFFFFF')+4) %C ! %ELSE AREAADDR(I)=0 !%REPEAT !%IF TRACE#0 %THENSTART !%CYCLE I=1,1,6 ! WRITE(AREAADDR(I),10) ! NEWLINE !%REPEAT !%FINISH !%IF ICL9CEFAC=0 %THEN INDEX=4 %ELSE INDEX=ICL9CEFAC !RC=READ LOAD DETAILS(AREAADDR(INDEX),ADDR(AREADESC(NUMAREASENV)),LEN) !%IF TRACE#0 %THENSTART !WRITE(LEN,5); NEWLINE !%FINISH !%RETURN %IF RC > 0 !CHECK AREAS(1,NUMFILESFAC,NUMAREASENV,LEN) !!* !AREAADDR(7) = INTEGER(M2+4) !AREAADDR(8) = INTEGER(F2+4) !AREAADDR(9) = INTEGER(D2+4) !AREAADDR(10)= INTEGER(O2+4) !AREAADDR(11)= INTEGER(LP2+4) !AREAADDR(12)= INTEGER(FL2+4) !AREAADDR(13)= INTEGER(AL2+4) !%IF TRACE#0 %THENSTART !%CYCLE I=7,1,13 ! WRITE(AREAADDR(I),10) ! NEWLINE !%REPEAT !%FINISH !RC=READ LOAD DETAILS(AREAADDR(7),ADDR(AREADESC(0)),LEN) !%IF TRACE#0 %THENSTART !WRITE(LEN,5); NEWLINE !%FINISH !%RETURN %IF RC > 0 !CHECKAREAS(NUMFILESFAC+1,NUMFILESENV,0,LEN) !%IF TRACE#0 %THENSTART !%CYCLE I = 0,1,47 !PRINTSTRING(HEXOF(AREADESC(I))) !NEWLINE !%REPEAT !%CYCLE I=1,1,16 ! WRITE(AREAADDR(I),10) ! NEWLINE !%REPEAT !%FINISH END ; ! OF GET AREA DESCS !* !%ROUTINE CHECK AREAS(%INTEGER ADDR1,ADDR2,DESC1,DESC2) !%INTEGER I,J,FLAG,ADR,BOUND !%CYCLE I=ADDR1,1,ADDR1+ADDR2-1 ! %IF AREAADDR(I)#0 %THEN %START ! FLAG=0 ! %CYCLE J=DESC1,1,DESC1+DESC2 ! BOUND=INTEGER(ADDR(AREADESC(J)))&X'00FFFFFF' ! ADR=INTEGER(ADDR(AREADESC(J))+4) ! %IF ADR<=AREAADDR(I)<ADR+BOUND %THEN FLAG=1 %AND %EXIT ! %REPEAT ! %IF FLAG=1 %THEN AREAADDR(I)=ADDR(AREADESC(J)) %ELSE AREAADDR(I)=0 ! %FINISH !%REPEAT !%END ENDOFFILE