!* MODIFIED 20/02/78 09.00 !* EXTRINSICINTEGER ICL9CEFDMAP !*NE %EXTRINSICINTEGER ICL9CEFAC EXTRINSICINTEGER ICL9CETC !* CONSTINTEGER INDEFAULT=5 CONSTINTEGER OUTDEFAULT=6 !* !* !****** BBASE FUNCTIONS !* !*E; %SYSTEMROUTINESPEC EXPAND PRIMARY OUTPUT FILE(%RECORDNAME F) !*NE %SYSTEMINTEGERFNSPEC SET SQ MODE(%INTEGER AD REC CCY,ACCESS TYPE,MODE) SYSTEMINTEGERFNSPEC POSITION SQ FILE(INTEGER ACCESS DR ADDR, C POSITION) !%SYSTEMINTEGERFNSPEC FILEOP(%INTEGER ACCESS DR ADDR,ACCESS TYPE, %C ! OPTYPE,BUFFAD,BUFFLEN,DISPLACEMENT) !*NE %SYSTEMINTEGERFNSPEC DA FILE OP(%INTEGER ADA,ACC,OPTYPE,DISP) !*NE %SYSTEMINTEGERFNSPEC FAST FILE OP(%INTEGER ADA) !* !****** MAIN !* !*NE %SYSTEMINTEGERMAPSPEC COMREG(%INTEGER I) SYSTEMROUTINESPEC MOVE(INTEGER L, FROM, TO) SYSTEMROUTINESPEC OUTPUT TRAP SYSTEMROUTINESPEC SIGNAL(INTEGER I,J,K,INTEGERNAME F) !* !****** FILE !* SYSTEMINTEGERFNSPEC OPEN(INTEGER AFD,MODE) SYSTEMINTEGERFNSPEC CLOSE(INTEGER AFD) !*NE %SYSTEMINTEGERFNSPEC LOCATE CHANNEL(%INTEGER CHAN) !*NE %SYSTEMINTEGERFNSPEC JBR CALL(%INTEGER ENTRY,%INTEGERNAME PARAM) !* !****** DIAG !* SYSTEMROUTINESPEC SSERR(INTEGER N) SYSTEMROUTINESPEC NDIAG(INTEGER PCOUNT,LNB,FAULT,INF) SYSTEMROUTINESPEC FAUX1(INTEGER EP,P1,P2) !* !* !*E; %SYSTEMINTEGERFNSPEC GET ROUTE(%INTEGER AFD) !* 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) !* !* OWNINTEGER CURRENT FD !* SYSTEMINTEGERFN NEWFILEOP(INTEGER DSNUM,ACTION,TYPE,INTEGERNAME AFD) INTEGERFNSPEC SPECIAL ACTION CONSTBYTEINTEGERARRAY SIMPLE VALID ACTION (0:7)= C 0,X'73',X'7D',X'7E',X'70',X'7C',0,0 RECORDNAME F(NRFDFMT) INTEGER I,J,K !* UNLESS 0 < DSNUM < 100 THEN RESULT = 164;! INVALID DATA SET NUMBER !*E; LOOK: I=INTEGER(ICL9CEFDMAP+DSNUM<<2) IF I=0 THENSTART !*NE %IF ICL9CEFAC>0 %THENSTART !*NE I=LOCATE CHANNEL(DSNUM) !*NE %IF I=0 %THEN ->LOOK !*NE %UNLESS I=151 %THEN %RESULT=I !*NE %FINISH IF DSNUM=IN DEFAULT THENSTART I=INTEGER(ICL9CEFDMAP+108<<2) FINISHELSESTART IF DSNUM=OUT DEFAULT THENSTART I=INTEGER(ICL9CEFDMAP+99<<2) SELECTOUTPUT(99) FINISHELSESTART RESULT = 151 ;!DATA SET NOT DEFINED FINISH FINISH !*NE %IF ICL9CEFAC=4 %THEN INTEGER(ICL9CEFDMAP+DSNUM<<2)=I;! TO AVOID ! REPEATED CALLS ON LOCATE CHANNEL FINISH F==RECORD(I) !*E; %IF F_MODEOFUSE=0 %START ;! TABLES IGNORANT !*E; F_MODEOFUSE=TYPE !*E; %IF TYPE=1 %THEN INTEGER(F_C0+24)=0 %AND INTEGER(F_C0+12)=3 ;! SET UP AS CHAR !*E; %FINISH AFD=I CURRENT FD=I !* J=F_CUR STATE UNLESS 0 <=J <=7 THEN RESULT = 1008;! CORRUPT DESCRIPTOR IF F_ACCESS ROUTE=6 THEN DSNUM=F_ASVAR AND ->LOOK IF ACTION & F_VALID ACTION = 0 THENSTART ;! INVALID I/O OP IF ACTION=2 THEN RESULT =162;! NO WRITE PERMISSION RESULT =171 FINISH IF ACTION & SIMPLE VALID ACTION(J)=0 THENSTART ;! INVALID OR DETAILED PROCESSING K=SPECIAL ACTION IF K > 0 THEN RESULT = K IF K < 0 THEN RESULT = 0 FINISH !* IF ACTION=1 THENSTART ;! READ F_CUR STATE=2 RESULT =0 FINISH !* IF ACTION=2 THENSTART ;!WRITE F_CURSTATE=3 RESULT =0 FINISH !* IF ACTION=4 THENSTART ;!REWIND J=4 K=0 IF F_ACCESS ROUTE=3 THENSTART ;! MAPPED F_C2=F_C1 !*E; F_RECORDS=0 I=0 ->SET STATE FINISH POS: IF F_CURSTATE = 1 THEN I = 0 AND -> SET STATE !*NE %IF F_CURSTATE = 3 %OR F_CURSTATE = 6 %THEN %START !*NE ! IF LAST ACTION WAS WRITE OR ENDFILE SET TO READ AT END OF FILE !*NE I = SET SQ MODE(ADDR(F_C0),F_MODE,3) !*NE %FINISH I = POSITION SQ FILE (ADDR(F_C0),K) !*NE %IF I=153 %THEN I=0;! IGNORE PSEUDO-NODE WARNING !*NE %IF I > 0 %THEN %RESULT = I SET STATE: F_CUR STATE=J !*NE %IF I>0 %AND I#153 %THEN %RESULT=I %ELSE %RESULT=0 !*E; %RESULT=I FINISH !* IF ACTION=8 THENSTART ;! BACKSPACE J=5 K=-1 I=0 ->POS FINISH !* IF ACTION=16 THENSTART ;!ENDFILE !*E; %RESULT=0 %IF F_CURSTATE=6 ;! LAST ACTION ENDFILE !*E; I=POSITION SQ FILE(ADDR(F_C0),1) !*NE %IF F_CUR STATE # 3 %THENSTART ;! CLEAR SUBSEQUENT RECORDS UNLESS IN WRITE MODE !*NE I=SET SQMODE(ADDR(F_C0),F_MODE,2) !*NE %IF I<0 %THEN I=0 !*NE %FINISHELSE I=0 F_CUR STATE=6 RESULT =I FINISH !* IF ACTION=32 THENSTART ;! CLOSE I=CLOSE(AFD) IF I>0 THEN RESULT =I F_CURSTATE=0 RESULT =0 FINISH !* IF ACTION=64 THENSTART ;! FIND RESULT =0 FINISH !* RESULT = 1013;! INVALID ACTION REQUESTED !* INTEGERFN SPECIAL ACTION INTEGER I,J SWITCH S(0:7) ->S(F_CUR STATE) !* !****** CLOSED S(0): IF ACTION=2 AND F_MODE<12 THEN J=2 ELSE J=1;! SQ WRITE ELSE SQ READ OR DA I=OPEN(CURRENT FD,J) !*E; %IF F_MODEOFUSE=6 %AND %C INTEGER(F_C0+12)=3 THEN F_MODEOFUSE=1 IF I<=0 THEN F_CUR STATE=1 AND RESULT =0 RESULT =I !* !****** AFTER OPEN S(1): RESULT =-1;! NO ACTION REQUIRED FOR REWIND/BACKSPACE !* !****** AFTER READ S(2): IF F_MODE<12 THENSTART ;! SQ !*NE I=SET SQMODE(ADDR(F_C0),F_MODE,2);! TO ALLOW WRITE AFTER READ !*E; %RESULT=0 !*NE %RESULT=I FINISHELSE RESULT =0 !* !****** AFTER WRITE S(3): IF F_MODE<12 THENSTART RESULT =156;!READ AFTER WRITE ERROR FINISHELSE RESULT =0 !* !****** AFTER REWIND S(4): IF ACTION=4 OR ACTION=8 THEN RESULT =-1 !* !****** AFTER BACKSPACE S(5): !*NE %IF 1<=ACTION<=2 %THENRESULT=SETSQMODE(ADDR(F_C0),F_MODE,ACTION) RESULT =0 !* !****** AFTER ENDFILE S(6): IF ACTION=1 THEN RESULT =156;!READ AFTER WRITE IF ACTION=2 THEN RESULT =157;!WRITE AFTER END FILE IF ACTION=4 THEN RESULT =0;!NORMAL REWIND PROCESSING IF ACTION=8 THENSTART ;! AFTER BACKSPACE F_CUR STATE=3 ;! IN WRITE MODE AFTER LAST RECORD RESULT =-1 FINISH IF ACTION=16 THEN RESULT =-1 ;! IGNORE MULTIPLE ENDFILE RESULT =1013;! INVALID ACTION !* !****** AFTER END OF FILE DETECTED ON READ S(7): IF ACTION=1 THEN RESULT =153;!REPEAT END OF FILE CONDITION IF ACTION=2 THEN ->S(2);!TO SET WRITE MODE IF ACTION=16 THEN RESULT =-1;!ENDFILE ALREADY RESULT =0 END ;! SPECIAL ACTION !* END ;!NEW FILE OP !* CONSTINTEGER FIXED=1, VARIABLE=2 !* SYSTEMINTEGERFN INREC RECORDNAME F(NRFDFMT) RECORDNAME TC(TCFMT) !*E; %BYTEINTEGER L1 !*NE %INTEGER I,FAC,K,A INTEGER J !*E; %SWITCH MOF(0:7) !*E; %LONGINTEGER ALIGN2 !*E; %INTEGER PIDR0,PIDR1 !*E; %INTEGER L,DATAEND F==RECORD(CURRENT FD) IF F_CURSTATE=7 THEN RESULT =153;! INPUT ENDED !*NE FAC=ICL9CEFAC !*NE %IF FAC=0 %THENSTART;! JOBBER !*NE K=F_ACCESS ROUTE !*NE !*SJ %IF K&3=3 %THENSTART;! MAPPED FILE !*NE !*SJ %IF F_C2>=F_C3 %THENSTART;! END OF FILE CONDITION !*NE !*SJ F_CURSTATE=7 !*NE !*SJ %RESULT=153 !*NE !*SJ %FINISH !*NE !*SJ A=F_C2 !*NE !*SJ F_AREC=A !*NE !*SJ %IF K=7 %THENSTART;! CHECK FOR EOF IN PRIMARY INPUT !*NE !*SJ %IF BYTEINTEGER(A)=X'61' %THENSTART !*NE !*SJ %IF BYTEINTEGER(A+1)=X'61' %THEN %RESULT=153 !*NE !*SJ %FINISH !*NE !*SJ %FINISH !*NE !*SJ F_C2=A+80 !*NE !*SJ F_RECSIZE=80 !*NE !*SJ %RESULT=0 !*NE !*SJ %FINISH !*SJ; TC==RECORD(ICL9CETC) !*NE !*SJ %UNLESS F_ACCESS ROUTE=1 %THENSTART IF F_MODE<12 THEN J=0 ELSE J=F_DARECNUM !*K I=FILEOP(ADDR(F_C0),F_MODE,1,F_AREC,F_MAXREC,J-1) !*NE !*B %IF F_MODE&15<12 %THEN I=FASTFILEOP(ADDR(F_C0)) %ELSE %C !*NE I=DA FILE OP(ADDR(F_C0),F_MODE&15,1,J-1) !*NE %IF I<=0 %THENSTART !*E; %UNLESS F_ACCESS ROUTE = 1 %OR F_ACCESS ROUTE = 9 %THENC TC_USER TRANSFER COUNT = TC_USER TRANSFER COUNT+1 IF F_ACCESS ROUTE=3 THEN ->MOF(1) ELSEC DATAEND=F_C0+INTEGER(F_C0) !*E; -> MOF(F_MODE OF USE) !*E; !! !*E; MOF(1): !*E; !*E; ! STREAM !*E; F_AREC=F_C2 !*E; PIDR0=F_RECORDS !*E; %IF PIDR0=0 %THEN %START IF F_ACCESS ROUTE=3 THEN PIDR0=X'58000000'!(F_C3-F_C2) ELSEC PIDR0=X'58000000'!(INTEGER(F_C0)-INTEGER(F_C0+4)) FINISH !*E; PIDR1=F_C2 !*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; L=PIDR1-F_C2 ;! FIND OUT LINE LENGTH !*E; %IF F_ACCESS ROUTE=9 %OR F_ACCESS ROUTE=3 %START ;! CHECK FOR // !*E; %IF BYTEINTEGER(F_C2)='/' %START !*E; %IF BYTEINTEGER(F_C2+1)='/' %THEN %RESULT=153 !*E; %FINISH !*E; %FINISH !*E; F_C2=F_C2+L !*E; L=L-1 ;! FORTRAN DOES NOT SEE NL UNLESS F_ACCESS ROUTE=3 START !*E; %IF L > F_MAXREC %THEN L = F_MAXREC FINISH !*E; F_RECORDS=PIDR0 !*E; F_RECSIZE=L !*E; %RESULT=0 !*E; !! !*E; MOF(2): !*E; !*E; ! SEQUENTIAL !*E; MOF(6): !*E; !*E; !FORTRAN IF F_RECTYPE=VARIABLE START !*E; %IF F_LASTREC=0 %START ;! AT START OF FILE !*E; F_LASTREC=1 !*E; %FINISH %ELSE %START !*E; F_LASTREC=F_C2 !*E; F_RECSIZE=(BYTEINTEGER(F_C2)<<8)!BYTEINTEGER(F_C2+1) !*E; F_C2=F_C2+F_RECSIZE !*E; %FINISH IF F_C2>=DATAEND THEN ->EOF IF F_RECSIZE<=0 THEN RESULT =172 F_AREC=F_C2+2 !*E; F_RECSIZE=((BYTEINTEGER(F_C2)<<8)!BYTEINTEGER(F_C2+1))-2 FINISHELSESTART ;! FIXED F_C2=F_C2+F_RECSIZE F_AREC=F_C2 FINISH !*E; F_RECORDS=F_RECORDS+1 !*E; %RESULT=0 !*E; !! !*E; MOF(0): !*E; MOF(4): !*E; !*E; MOF(5): !*E; !*E; ! UNNASSIGNED !*E; !! !*E; %RESULT=182 !*E; MOF(3): !*E; !*E; !*E; MOF(7): !*E; !*E; %RESULT=181 IF J#0 THENSTART J=J+1 F_DARECNUM=J IF F_FLAGS&4=0 THEN INTEGER(F_ASVAR)=J C ELSE MOVE(2,ADDR(J)+2,F_ASVAR) FINISH !*NE %IF FAC=0 %THENSTART !*NE !*SJ %IF F_ACCESS ROUTE=1 %THENSTART;! CHECK FOR END OF FILE !*NE !*SJ %IF BYTEINTEGER(F_AREC)=X'61' %THENSTART;! LOOK FOR / !*NE !*SJ %IF BYTEINTEGER(F_AREC+1)=X'61' %THENSTART;! AND AGAIN !*NE !*SJ COMREG(56)=1 !*NE !*SJ %RESULT=153 !*NE !*SJ %FINISH !*NE !*SJ %FINISH !*NE !*SJ %FINISH !*NE %FINISH !* !*K K=F_AREC !*K J=BYTEINTEGER(K) !*K %IF J=X'5C' %OR J=X'61' %THENSTART;! * OR / !*K %IF BYTEINTEGER(K+1)=J %THENSTART !*K %IF BYTEINTEGER(K+2)=J %THENSTART !*K %IF BYTEINTEGER(K+3)=J%THEN I=153 !*K %FINISH !*K %FINISH !*K %FINISH !*NE %FINISHELSESTART !*NE %IF I=153 %THEN F_CURSTATE=7 !*NE %FINISH ! %RESULT=I !*E; EOF: F_CURSTATE=7 !*E; %RESULT=153 END ;! INREC !* SYSTEMINTEGERFN OUTREC(INTEGER LEN) RECORDNAME F(NRFDFMT) RECORDNAME TC(TCFMT) !*E; %INTEGER TRECSIZE,SPACE INTEGER I,J,PAGE COUNT,FAC !*NE FAC=ICL9CEFAC !NE !*SJ %IF FAC=0 %THENC TC==RECORD(ICL9CETC) !E*; TC==RECORD(ICL9CETC) F==RECORD(CURRENT FD) IF F_VALID ACTION&2=0 THEN RESULT =162;! NO WRITE PERM IF F_MODE<12 THEN J=0 ELSE J=F_DARECNUM IF F_ACCESS ROUTE=2 THENSTART ;! DEFAULT PRINTER !*E; PAGE COUNT=TC_PAGE COUNT !*SJ %IF FAC=0 %THEN PAGE COUNT=TC_PAGE COUNT I=BYTEINTEGER(F_AREC) !*E; %IF I='1' %START !*NE %IF I=X'F1' %THENSTART BYTEINTEGER(F_AREC)=X'0C';! NEWPAGE !*SJ; PAGE COUNT=0 ->PRINT FINISH !*E; %IF I='0' %START !*NE %IF I=X'F0' %THENSTART;! '0' ;! TWO NEWLINES !*NE BYTEINTEGER(F_AREC)=X'15' !*E; BYTEINTEGER(F_AREC)=NL !*NE F_RECSIZE=1 !*E; F_RECSIZE=2 !*K I=FILEOP(ADDR(F_C0),F_MODE,2,F_AREC,1,0) !*NE !*B I=FASTFILEOP(ADDR(F_C0)) !*NE %IF I>0 %THEN %RESULT=I !*E; %CYCLE I=LEN,-1,0 !*E; BYTEINTEGER(F_AREC+I+1)=BYTEINTEGER(F_AREC+I) !*E; %REPEAT !*E; BYTEINTEGER(F_AREC+1)=NL !E*; BYTEINTEGER(F_AREC)=NL !*E; F_C2=F_C2+2 !*E; INTEGER(F_C0)=F_C2-F_C0 !*SJ; PAGE COUNT=PAGE COUNT-1 ->PRINT FINISH !*E; %IF I='+' %THEN BYTEINTEGER(F_AREC)=X'D' %AND ->PRINT !*NE %IF I=X'4E' %THEN BYTEINTEGER(F_AREC)=X'0D' %AND ->PRINT !*NE BYTEINTEGER(F_AREC)=X'15';! NEWLINE FOR ALL OTHERS !*E; BYTEINTEGER(F_AREC)=NL PRINT: !*NE !*SJ %IF FAC=0 %THENSTART;! JOBBER MODE !*SJ PAGE COUNT = PAGE COUNT - 1 !*SJ; %IF PAGE COUNT<0 %THEN OUTPUT TRAP %ELSESTART !*SJ; TC_PAGE COUNT=PAGE COUNT !*SJ; %FINISH !*NE !*SJ %FINISH !*SJ; ->CALL OP FINISH !*SJ; %IF FAC=0 %THEN %C TC_USER TRANSFER COUNT = TC_USER TRANSFER COUNT + 1 CALL OP: !*NE !%IF LEN<132 %THEN FILL(132-LEN,F_AREC+LEN,X'40') F_RECSIZE=LEN !*K I=FILEOP(ADDR(F_C0),F_MODE,2,F_AREC,LEN,J-1) !*NE !*B %IF F_MODE < 12 %THEN I=FASTFILEOP(ADDR(F_C0)) %ELSE %C !*NE I = DA FILE OP(ADDR(F_C0),F_MODE,2,J-1) !*NE %IF J#0 %AND I<=0 %THENSTART !*NE J=J+1 !*NE %IF F_FLAGS&4=0 %THEN INTEGER(F_ASVAR)=J %C !*NE %ELSE MOVE(2,ADDR(J)+2,F_ASVAR) !*NE %FINISH !E - WATCH OUT FOR FORTRAN PRIMARY OUTPUT - TREAT AS STREAM !*E; %IF F_MODE OF USE>1 %AND F_ACCESS ROUTE # 2 %START ;! NOT STREAM IF F_RECTYPE=VARIABLE START !*E; TRECSIZE=LEN+2 !*E; MOVE(2,ADDR(TRECSIZE)+2,F_C2) !*E; F_LASTREC=F_C2 !*E; F_C2=F_C2+TRECSIZE !*E; F_AREC=F_C2+2 FINISHELSESTART ;! FIXED F_C2=F_C2+LEN F_AREC=F_C2 FINISH !*E; F_RECORDS=F_RECORDS+1 IF F_RECORDS>INTEGER(F_C0+28) THEN INTEGER(F_C0+28)=F_RECORDS !*E; ! !*E; ! IF NEAR END OF FILE LET FIO KNOW BY REDUCING MAXREC !*E; ! NOTE: IF FIO HAS INSUFFICIENT ROOM IT WILL GIVE !*E; ! RECORD TOO SMALL. !*E; SPACE=F_C3-F_AREC+1 !*E; %IF SPACE<F_MAXREC %THEN F_MAXREC=SPACE !*E; %FINISHELSESTART !*E; F_C2 = F_C2+LEN !*E; %IF F_C2+F_MAXREC>F_C3 %THEN %START !*E; EXPAND PRIMARY OUTPUT FILE(F) !*E; %FINISH F_AREC=F_C2 !*E; %FINISH !*E; INTEGER(F_C0) =F_C2-F_C0 !*E; I = 0 RESULT =I END ;! OUTREC !* !* SYSTEMINTEGERFN FORTRANDF(INTEGER DSNUM,NUMBLOCKS,BLKSIZE,ASVARDESCAD) INTEGER I RECORDNAME F(NRFDFMT) UNLESS 0<DSNUM<100 THEN RESULT =164;! INVALID DSNUM !*NE LOOK: I=INTEGER(ICL9CEFDMAP+DSNUM<<2) IF I=0 THENSTART ;! FILE NOT DEFINED? !*NE %IF ICL9CEFAC#0 %THENSTART !*NE I=LOCATE CHANNEL(DSNUM) !*NE %IF I=0 %THEN ->LOOK %ELSE %RESULT=I !*NE %FINISH RESULT =151;! NOT DEFINED FINISH F==RECORD(I) F_ASVAR=INTEGER(ASVARDESCAD+4) F_MAXSIZE=NUMBLOCKS !*E; F_VALIDACTION=X'63' !*E F_VALIDACTION=X'43';! FIND,WRITE,READ F_MODEOFUSE=2 F_MODE=13 IF INTEGER(ASVARDESCAD)>>24=X'58' THEN F_FLAGS=F_FLAGS!4 C ELSE F_FLAGS=F_FLAGS&X'FB' RESULT =0 END ;! FORTRANDF !* SYSTEMROUTINE FAUX(INTEGER EP, P1, P2) OWNINTEGER INITSTATE;! 0 AFTER FAUX(0,...) 1 AFTER FAUX1(0,...) INTEGER I,J, F !*E; %SWITCH E(0:8) !*NE %SWITCH E(0:9) UNLESS 0<=EP<=8 THEN RETURN ->E(EP) !* !****** PRIME CONTINGENCY !*NE E(9): E(0): SIGNAL(0,P1,P2,F) INITSTATE=0 RETURN !* !****** HARDWARE DETECTED FAULT E(1): I=INTEGER(P2+16); ! PC J=INTEGER(P2+72); ! FAILING INST IF I>>18 = J>>18 THEN I=J NDIAG(I,INTEGER(P2+8),10,INTEGER(P2)) EXIT: SSERR(0) !* !****** SOFTWARE DETECTED FAULT E(2): *STLN_I IF P1=1 THEN P1=11; ! UNASSIGNED IF P1=2 THEN P1=6; ! ARRAY BOUND IF P1=3 THEN P1=36;! WRONG NO OF PARAMS NDIAG(0,INTEGER(I),P1,P2) ->EXIT !* !****** PAUSE E(3): !* !****** STOP E(4): CALLFAUX1: FAUX1(EP,P1,P2) RETURN !* !****** TRACE1 !* P1>0 LABEL !* P1=-1 RETURN E(5): !* !****** TRACE2 !* ENTRY TO FN/SUBR E(6): IF INITSTATE=0 THENSTART FAUX1(0,0,0) INITSTATE=1 FINISH ->CALLFAUX1 !* E(7): ! FORTRAN I/O ERROR E(8): ! FORTRAN FORMAT ERROR *STLN_I J=INTEGER(INTEGER(I)+8)-4; ! PC OF USER PROGRAM IF P1=-1 THEN I=INTEGER(INTEGER(I)); ! LNB OF USER PROGRAM NDIAG(J,I,-1,0) RETURN END ; ! FAUX !* !* !* SYSTEMROUTINE OPENSQ(INTEGER CHAN) RECORDNAME SQFD(NRFDFMT) INTEGER AFD, I SSERR(164) UNLESS 1<=CHAN<=99; ! INVALID DATA SET NUMBER !*NE LOOK: AFD=INTEGER(ICL9CEFDMAP+CHAN<<2);! GET ADDRESS OF FILE DESCRIPTOR IF AFD=0 START !*NE %IF ICL9CEFAC=4 %START; ! STAND-ALONE !*NE I=LOCATE CHANNEL(CHAN) !*NE %IF I=0 %THEN ->LOOK !*NE %FINISHELSE I=151 SSERR(I) FINISH SQFD==RECORD(AFD) SSERR(176) UNLESS SQFD_STATUS<2 ! FILE ALREADY OPEN IF SQFD_STATUS = 0 THEN START !*E; I=GET ROUTE(AFD) !*NE I=JBR CALL(2,AFD);! ==GET ROUTE(AFD) IF I # 0 THEN SSERR(I) FINISH SQFD_STATUS=2; ! SET OPEN !*NE %RETURN END ; ! OF OPENSQ ! !* SYSTEMROUTINE CLOSESQ (INTEGER CHAN) INTEGER FLAG, AFD SSERR(164) UNLESS 1 <= CHAN <= 99; ! INVALID DATA SET NUMBER FLAG = NEW FILE OP (CHAN, 32, 2, AFD) SSERR(FLAG) UNLESS FLAG <= 0; ! FILE NOT OPEN !*NE %RETURN END ; ! OF CLOSESQ !* SYSTEMROUTINE OPENDA(INTEGER CHAN) RECORDNAME DAFD(NRFDFMT) INTEGER AFD, I SSERR(164) UNLESS 1<=CHAN<=99; ! INVALID FILE NUMBER !*NE LOOK: AFD=INTEGER(ICL9CEFDMAP+CHAN<<2) IF AFD=0 START !*NE %IF ICL9CEFAC=4 %START; ! STAND-ALONE !*NE I=LOCATE CHANNEL(CHAN) !*NE %IF I=0 %THEN ->LOOK !*NE %FINISHELSE I=151 SSERR(I) FINISH DAFD==RECORD(AFD) SSERR(176) UNLESS DAFD_STATUS<2 IF DAFD_STATUS = 0 THEN START !*E; I=GET ROUTE(AFD) !*NE I=JBR CALL(2,AFD);! ==GET ROUTE(AFD) IF I # 0 THEN SSERR(I) FINISH DAFD_STATUS=2 DAFD_MODE=13;! FOR CORRECT I/O OPERATIONS END ! !* SYSTEMROUTINE CLOSEDA (INTEGER CHAN) INTEGER FLAG, AFD SSERR(164) UNLESS 1 <= CHAN <= 99; ! INVALID DATA SET NUMBER FLAG = NEW FILE OP (CHAN, 32, 2, AFD) SSERR(FLAG) UNLESS FLAG <= 0; ! FILE NOT OPEN !*NE %RETURN END ; ! OF CLOSE DA !* !* !E %EXTERNALINTEGERFN ICL9CEINDEX(%INTEGER L0,A0,L1,A1) !E %INTEGER I,J,K !E L0=L0&255 !E L1=L1&255 !E %IF L0<L1 %THEN %RESULT=0 !E %IF L0=0 %OR L1=0 %THEN %RESULT=0 !E J=BYTEINTEGER(A0) !E %CYCLE I=0,1,L1-1 !E %IF J=BYTEINTEGER(A1+I) %THENSTART !E %IF L1-I<L0 %THEN %RESULT=0 !E %CYCLE K=0,1,L0-1 !E %IF BYTEINTEGER(A0+K)#BYTEINTEGER(A1+I+K) %THEN ->LOOP !E %REPEAT !E %RESULT=I+1 !E %FINISH !E LOOP: %REPEAT !E %RESULT=0 !E %END;! ICL9CEINDEX !* ENDOFFILE