! foplist1 ! 07/11/86 - insert include files ! ftnoplist5 ! 14/09/86 - allow to function if opt2 only ! ftnoplist4 ! 06/08/86 - correct mask for intrinsic fns ! ftnoplist3 ! 05/07/86 - generate for CVT if also assignment (complex) ! 20/02/86 - comment out code at SW(LE) & SW(JIF) IN FORMLINE ! 13/12/85 - copied from oplistb48 ! - new SW(GLALIT) at SW(STKLIT) in GEN (from oplistp46) ! - new include files incorporated ! 22/10/84 - coorection to OUTPUTTEXT for continuation lines in OPT4 ! 15/10/84 - define external routine RESET OPLIST ! 09/10/84 - change OUTPUTLINE to print global line number LINES ! 18/09/84 - insert switch for STFNID in GEN and delete array QUAL ! 24/07/84 set OPSYS 0 ! 23/07/84 amend SW(CGT) in FORMLINE to print private labels ! 10/07/84 new version of targetpnx_fptos ! 05/07/84 insert switch SW(INTRIN) in FORMLINE ! 03/07/84 make FPTOS a string function & put in an include file ! set up string REG1 in targ_target & substitute for "reg-1" ! remove OPVALS for LOADB & STOREB ! define INTRINFNS to output new INTRIN fns ! 21/03/84 amend arrays SW, RTOL, ENDS, OPVALS. Delete ST & SZTY & REG ! 19/03/84 add in ADICT on calls to FPTOS ! 08/03/84 change INTEGER mapping increments to W1 etc. ! 28/02/84 FPTOS inserted ! 01/10/1/83 copied from ERCS06.REL90_OPLISTB36 !* %CONSTINTEGER OPSYS=0 ! =0 (Emas ISO) ! =1 (VME EBCDIC) !* %INCLUDE "ftn_ht" !* {%INCLUDE "ftn_consts1"} !* modified 10/10/85 !* !* %if HOST = PERQPNX %thenstart !* %constinteger WSCALE = 1;! scale word address to byte address %constinteger BSCALE = 1;! scaling factor for words to architectural units %constinteger CSCALE = 1;! byte offset to architectural unit offset %constinteger DSCALE = 1;! dict pointer scaling in RES records !* %constinteger W1 = 2 ;! 1 word in architectural units %constinteger W2 = 4 ;! 2 words in architectural units %constinteger W3 = 6 ;! 3 words in architectural units %constinteger W4 = 8 ;! 4 words in architectural units !* %constinteger TRIADLENGTH = 6 ;! size of an individual triad %constinteger BLRECSIZE = 22 ;! size of a block table entry in architectural units %constinteger LOOPRECSIZE = 8 ;! size of a loop table entry %constinteger PROPRECSIZE = 6 ;! size of a propagation table entry %constinteger CLOOPSZ = 6 ;! size of cloop table entry %constinteger FRSIZE = 4 ;! size of freelist created by PUSHFREE %constinteger TESZ = 10 %constinteger DTSZ = 10 %constinteger ARTICSZ = 2 %constinteger CTSIZE = 1 ;! used in OP3 %constinteger EXTNSIZE = 2 ;! used in OP3 !* !* following used in strength reduction !* %constinteger RDSZ = 4 %constinteger RUSESZ = 6 %constinteger RTESTSZ = 2 %constinteger RDEFSZ = 8 %constinteger USESZ = 16 %constinteger SRUSESZ = 1 %constinteger SRSCALE = 1;! SR==RECORD(ABLOCKS + SRPTR<>1 %finish I=0 %while ISW(I) SW(0): %IF LINESET&LABELSET#0 %OR TEXTSET=1 %THEN %START %IF TEXTSET=0 %THENRETURN SW(1): SW(2): %IF LINESET=1 %THENSTART %IF OPT=4 %THENSTART LINES=LINES+1 ITOS(LINES) %IF LENGTH(INTSTR)>=6 %THEN CURRMARK=INTSTR %ELSESTART %CYCLE J=1,1,6-LENGTH(INTSTR) CURRMARK=" ".CURRMARK %REPEAT CURRMARK=CURRMARK.INTSTR %FINISH PRINTSTRING(CURRMARK." ") %FINISH PRINTSTRING(CURRLINE) %FINISHELSEIF OPT=4 %THEN PRINTSTRING(S14) %ELSE PRINTSTRING(S6) %IF LABELSET=1 %THEN PRINTSTRING(CURRLABEL) %ELSE PRINTSTRING(S8) PRINTSTRING(" ") %IF TEXTSET=1 %THEN OUTPUTTEXT %ELSE PRINTSTRING(INDENTS.CON.NL) %FINISH RESET3: CURRLINE="" CURRMARK="" LINESET=0 RESET2: CURRLABEL="" LABELSET=0 RESET1: CURRTEXT="" TEXTSET=0 TEXTPTR=0 %END !* !* !* !* SPLIT OUTPUT !* %ROUTINE SPLITOUTPUT(%STRING(255) S) %INTEGER LENS,LENC,I,ADR,LOOP,LENE LENC=LENGTH(CURRTEXT) ! EFFECTIVE LENGTH TAKING INDENTATION INTO ACCOUNT LENE=100-LENGTH(INDENTS) LENS=LENGTH(S) %IF LENC+LENS>LENE %THEN %START TEXTARRAY(TEXTPTR)=INDENTS.CURRTEXT TEXTPTR=TEXTPTR+1 %IF LENS>LENE %THEN ->LONGCHAR %ELSE CURRTEXT=S %FINISHELSE CURRTEXT=CURRTEXT.S %RETURN ! IF STRING FOR ONE ITEM > (LENE-INDENTATION) CHARS START IN NEW ARRAY ITEM LONGCHAR: LOOP=LENS//LENE ADR=1 %CYCLE I=0,1,LOOP-1 COPY(LENE,ADDR(S),ADR,ADDR(TEXTARRAY(TEXTPTR)),1) LENGTH(TEXTARRAY(TEXTPTR))=LENE TEXTARRAY(TEXTPTR)=INDENTS.TEXTARRAY(TEXTPTR) TEXTPTR=TEXTPTR+1 ADR=ADR+LENE %REPEAT I=LENS-LOOP*LENE %IF I#0 %THENSTART COPY(I,ADDR(S),ADR,ADDR(CURRTEXT),1) LENGTH(CURRTEXT)=I %FINISHELSE CURRTEXT="" %END !* !* *! !* PSTRING *! !* *! %ROUTINE PSTRING(%INTEGER TAB,%STRING(255) S) %INTEGER LEN,I,J %SWITCH SW(0:8) ->SW(TAB) SW(3): !Print textin S SPLIT OUTPUT(S) TEXTSET=1 %RETURN SW(8): %IF LABELSET=1 %THEN OUTPUTLINE(1) %IF LENGTH(S)>=8 %THEN CURRLABEL=S %AND ->MISS %CYCLE I=1,1,8-LENGTH(S) CURRLABEL=" ".CURRLABEL %REPEAT CURRLABEL=CURRLABEL.S MISS: LABELSET=1 %RETURN SW(6): %IF LINESET=1 %THEN OUTPUTLINE(1) %IF LENGTH(S)>=6 %THEN CURRLINE=S %AND -> MISS1 %CYCLE I=1,1,6-LENGTH(S) CURRLINE=" ".CURRLINE %REPEAT CURRLINE=CURRLINE.S MISS1: LINESET=1 %RETURN SW(*): %RETURN %END !* !* MAXBRK !* %ROUTINE MAXBRK %WHILE MINMAX>0 %CYCLE PSTRING(3,")") MINMAX=MINMAX-1 %REPEAT %END !* *! !* ITOS *! !* *! %ROUTINE ITOS(%INTEGER N) %CONSTINTEGERARRAY TENS(0:9)=%C 1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000 %STRING(11) RES %INTEGER M,R,I,STARTED,J %IF N=0 %THEN INTSTR="0" %ANDRETURN; %IF N<0 %THEN N=-N %AND RES="-" %ELSE RES="" STARTED=0 %CYCLE I=9,-1,0 R=TENS(I) %IF N>=R %OR STARTED#0 %START STARTED=1 M=N//R RES=RES.TOSTRING(M+'0') N=N-M*R %FINISH %REPEAT INTSTR=RES %END !* LIST TRIAD !* %CONSTBYTEINTEGERARRAY HEX(0 : 15) = %C '0','1','2','3','4','5','6', '7','8','9','A','B','C','D','E','F' %ROUTINE PRHEX(%INTEGER J) %INTEGER K %CYCLE K = 28,-4,0 PRINT SYMBOL(HEX((J>>K)&15)) %REPEAT %END %ROUTINE DUMP(%INTEGER AD,LEN) %INTEGER I SPACES(38) %CYCLE I=1,1,3 SPACES(2) PRHEX(INTEGER(AD)) AD=AD+W1 %REPEAT NEWLINE %END;! DUMP !* %EXTERNALROUTINE OPTSOURCE(%INTEGER DICT0,NAMES0,ATRIADS, DESTEMPHEAD,ADOPTDATA,ADJ) ! ! Routine to convert triads back to source text %INTEGER I,J,VAL,LINENO,TYPE,LABEL,START,FINISH,K %INTEGER OP,BRACK %STRING(32) QL,QR,MODE,NO,SPARE %STRING(255) INITC,NAM,S %STRING(255) COMMENT %RECORD(TRIADF) %ARRAYNAME TRIADS %OWNRECORD(TRIADF) %ARRAYFORMAT TRFMT(0:20000) %RECORD(DTRECF) %NAME DT %RECORD (OPTDFMT) %NAME OPTD ADICT=DICT0 ANAMES=NAMES0 TRIADS==ARRAY(ATRIADS,TRFMT) %if Adoptdata#0 %thenstart OPTD==RECORD(ADOPTDATA) BLSIZE=OPTD_BLSIZE ABLOCKS=OPTD_ABLOCKS OPT=OPTD_OPT %finish !* !* !* !* Entry sequence for each line to be processed serially !* %ROUTINESPEC FORMLINE(%INTEGER TYPE,LINE,BR) !* %ROUTINE GET DESCTEMP(%INTEGER OPD) %RECORD (DTRECF) %NAME DT %RECORD (PRECF) %NAME SCAL DT==RECORD(ADICT+OPD< CONT %ELSE -> SET %FINISH PSTRING(3,"(") BRACK=BRACK+1 %FINISH CONT: %IF LAST=STMT %THEN J=8 %ELSE J=3 %IF RTOL(LAST)&32#0 %THEN PSTRING(3,OPVALS(LAST)) %IF INDEX&TEXTMASK#0 %THENSTART CURR=TRIADS(OPD)_OP %IF RTOL(CURR)&8 #0 %THEN PSTRING(3,OPVALS(CURR)) %AND BR=1 %IF TRIADS(OPD)_USE>1 %AND ENDS(CURR)#1 %AND CURR#REPL %THENSTART PSTRING(3,"TA-") ITOS(OPD) PSTRING(3,INTSTR) %IF BR=1 %THEN PSTRING(3,")") %AND BR=0 %RETURN %FINISH %IF LAST=NEG %THEN PSTRING(3,"(") %AND BR=1 %FINISH %IF RTOL(LAST)&8#0 %AND TRIADS(LINE)_USE>1 %AND INTRIN0=0 %THENC PSTRING(3,OPVALS(LAST)) %AND BR=1 SET: COPYBR=BR %IF INDEX=LIT %OR INDEX=NEGLIT %THEN ITOS(OPD) -> SW(INDEX) SW(NULL): !NULL NULL %RETURN SW(LIT): !LITERAL LIT %IF RTOL(LAST)&4#0 %THEN CURR=LAST %AND OPD=LINE %AND -> MOO J=TRIADS(LINE)_RES2_MODE %IF J>=LOG1 %AND J<=LOG8 %THEN J=OPD %AND ->LOG PSTRING(3,INTSTR) %RETURN SW(NEGLIT): PSTRING(3,"-") PSTRING(3,INTSTR) %RETURN SW(CNSTID): !CONST RECORD IN DICT CNSTID CNST==RECORD(OPD< T(CNST_MODE) T(INT2): J=HALFINTEGER(ADR+ADICT) -> INT T(INT4): J=INTEGER(ADR+ADICT) -> INT T(INT8): J=INTEGER(ADR+ADICT+W1) INT: ITOS(J) PSTRING(3,INTSTR) %RETURN T(REAL4): J=3 ->PRINTFP T(REAL8): J=4 -> PRINTFP T(REAL16): J=5 PRINTFP: FPSTR=FPTOS(ADR+ADICT,J) PSTRING(3,FPSTR) %RETURN T(CMPLX8): J=3 K=W1 -> PRCMPLX T(CMPLX16): J=4 K=W2 -> PRCMPLX T(CMPLX32): J=5 K=W4 PRCMPLX: PSTRING(3,"(") FPSTR=FPTOS(ADR+ADICT,J) PSTRING(3,FPSTR) PSTRING(3,",") FPSTR=FPTOS(ADR+ADICT+K,J) PSTRING(3,FPSTR) PSTRING(3,")") %RETURN T(LOG4): J=INTEGER(ADR+ADICT) -> LOG T(LOG8): J=INTEGER(ADR+ADICT+W1) LOG: %IF J=0 %THEN PSTRING(3,LOG(0)) %ELSE PSTRING(3,LOG(1)) %RETURN T(CHARMODE): T(HOLMODE): LEN=INTEGER(ADR+ADICT) %IF LEN>32 %THEN LEN=32 COPY(LEN,ADR+ADICT,4,ADDR(S),1) LENGTH(S)=LEN !* ! %INCLUDE "targ_text1" ! ************************************************************************* ! include code for EBCDIC/ISO conversion if required ! ************************************************************************* !* PSTRING(3,"'") PSTRING(3,S) PSTRING(3,"'") %RETURN SW(SRTEMP): !Strength reducing temporary ITOS(OPD) S="" COPYSTR="sr".INTSTR ->SOUT SW(ARREL): ! ARRAY ELEMENT TRIAD SW(CHAREL): ! CHAR SUBSTRING TRIAD SW(TRIAD): !TRIAD TRIAD %IF RTOL(CURR)&4#0 %THENSTART ;! SPECIAL FN (MATHS) MOO: %IF CURR=IFUN %THENSTART PROC==RECORD(ADICT+TRIADS(OPD)_OPD1<>24)) %FINISHELSEIF CURR=MOO %THEN PSTRING(3,MOOFNS(TRIADS(OPD)_OPD1&7)) %C %ELSE PSTRING(3,INTRINFNS(TRIADS(OPD)_OPD1&15)) FORMLINE(CURR,OPD,BR) -> BR %FINISH ! PROCESS OPD2 FIRST IF RTOL(I)=1 I=0 %IF RTOL(CURR)&64#0 %AND RTOL(LAST)&64#0 %THENSTART !FORCE BRACKETS %IF ORDER(LAST)>ORDER(CURR) %ORC (ORDER(LAST)=2 %AND ORDER(CURR)=2) %THEN PSTRING(3,"(") %AND I=1 %FINISH %IF RTOL(CURR)&1#0 %THENC GEN(TRIADS(OPD)_QOPD2,TRIADS(OPD)_OPD2,OPD) %ELSEC GEN(TRIADS(OPD)_QOPD1,TRIADS(OPD)_OPD1,OPD) FORMLINE(TRIADS(OPD)_OP,OPD,BR) %IF I=1 %THEN PSTRING(3,")") %AND I=0 BR: %IF BRACK>0 %THEN PSTRING(3,")") %AND BRACK=BRACK-1 %RETURN SW(LSCALID): !LOCAL SCALAR LSCALID SW(OSCALID): !OWN SCALAR OSCALID SW(CSCALID): !COMMON SCALAR CSCALID SW(PSCALID): !PARAMETER SCALAR PSCALID SW(ASCALID): SW(ARRID): !ARRAY ID ARRID SCAL==RECORD(OPD< SKIP SW(TMPID): !TEMP SCALAR TMPID S="TI-" SKIP: TMP==RECORD(OPD<SOUT SW(DESTEMP):! DESCRIPTOR TEMPORARY DESTEMP %IF COPYFLAG=1 %THEN S = "@" %else S="" GET DESCTEMP(OPD) COPYSTR=DESCSTR ->SOUT SW(BREG):!Reg-1 Reg-1 COPYSTR=REG1 S="" SOUT: PSTRING(3,S) PSTRING(3,COPYSTR) %RETURN SW(STKLIT): SW(GLALIT): %IF ADJ#0 %THENSTART ADR=ADJ NEXT: NO=INTEGER(ADR+ADICT)>>16 %IF OPD=NO %THENSTART ITOS(INTEGER(ADR+ADICT+W2)>>16) S="TM-".INTSTR.".." SCAL==RECORD(ADICT+(INTEGER(ADR+ADICT+W2)&X'0000FFFF')< NEXT %FINISH ITOS(OPD) PSTRING(3,"sl") PSTRING(3,INTSTR) %RETURN SW(*): PRINTSTRING("INVALID OP TYPE TO TRIAD") NEWLINE %RETURN %END !* !* FORM LINE !* %ROUTINE FORMLINE(%INTEGER TYPE,LINE,BR) %INTEGER INDEX,I,NO,LABEL,LINENO,OPTYPE,SPTR,LINK,DICT %INTEGER DEPTH %STRING(255) S %SWITCH SW(0:116) %STRING(10) S10 %STRING(18) S18 %RECORD(BLRECF) %NAME BLK %RECORD (SRECF) %NAME SS %RECORD (LABRECF) %NAME LAB %RECORD (PRECF) %NAME PP %RECORD (PLABF) %NAME PLAB S10=" " S18=S10." " -> SW(TYPE) SW(EXP3): NOLHS=1 ->SW(BOP) SW(GE): SW(GT): SW(LT): SW(NE): SW(EQ): SW(LE): ! OLD JIF CODE ! -> SW(BOP) ! %IF JIFTYPE=1 %THEN TYPE=SWCOND(TYPE-21) %AND JIFTYPE=0 SW(BOP): SW(ADD): SW(SUB): SW(MULT): SW(DMULT): SW(DIV): SW(EQUIV): SW(NEQ): SW(CHAR): PSTRING(3,OPVALS(TYPE)) GET: SW(NOT): %IF TYPE=CVT %THEN I=1 %ELSE I=0 %IF TYPE=NOT %AND TRIADS(LINE)_QOPD2=NULL %THEN I=1 %ELSEC GEN(TRIADS(LINE)_QOPD2,TRIADS(LINE)_OPD2,LINE) NOLHS=0 %IF I=1 %THEN PSTRING(3,")") %WHILE BRACK>0 %CYCLE PSTRING(3,")") BRACK=BRACK-1 %REPEAT %RETURN SW(DINIT): PSTRING(3,"@") SW(ASH): SW(CVT): SW(ASMT): SW(INIT): GEN(TRIADS(LINE)_QOPD1,TRIADS(LINE)_OPD1,LINE) -> SW(BOP) SW(ASGN): PSTRING(3,OPVALS(TYPE)) GEN(TRIADS(LINE)_QOPD2,TRIADS(LINE)_OPD2,LINE) PSTRING(3," TO ") GEN(TRIADS(LINE)_QOPD1,TRIADS(LINE)_OPD1,LINE) %RETURN SW(LOADB): PSTRING(3,REG1." = ") GEN(TRIADS(LINE)_QOPD2,TRIADS(LINE)_OPD2,LINE) %RETURN SW(STOREB): GEN(TRIADS(LINE)_QOPD1,TRIADS(LINE)_OPD1,LINE) PSTRING(3," = ".REG1) %RETURN SW(NEG): %IF BR=1 %THEN PSTRING(3,")") %AND BR=0 ->REP SW(SUBSTR): STRINGSET=1 ->SW(BOP) SW(CONCAT): SW(CHHEAD): GEN(TRIADS(LINE)_QOPD1,TRIADS(LINE)_OPD1,LINE) %RETURN SW(RET): PSTRING(3,"RETURN") %IF TRIADS(LINE)_QOPD2=0 %THEN %RETURN %ELSE -> GET %RETURN SW(EXP): -> SW(BOP) SW(DARG): SW(ARG): SW(IARG): %IF TRIADS(LINE)_QOPD2=0 %THEN %RETURN %ELSE PSTRING(3,",") LINE=TRIADS(LINE)_OPD2 GEN(TRIADS(LINE)_QOPD1,TRIADS(LINE)_OPD1,LINE) -> SW(ARG) SW(SUBR): PSTRING(3,"CALL ") GEN(TRIADS(LINE)_QOPD1,TRIADS(LINE)_OPD1,LINE) -> SW(FUN) SW(NINT): SW(ANINT): SW(CMPLX): SW(CONJG): SW(IMAG): SW(REALL): SW(SIGN): SW(MOD): SW(ABS): SW(AINT): SW(LEN): SW(DIM): SW(CHIND): SW(ICHAR): SW(TOCHAR): INTRIN0=1 %IF TRIADS(LINE)_QOPD1#NULL %THEN PSTRING(3,",") GEN(TRIADS(LINE)_QOPD2,TRIADS(LINE)_OPD2,LINE) INTRIN0=0 %IF BR=1 %THEN PSTRING(3,")") %AND BR=0 %RETURN SW(MIN): SW(MAX): PSTRING(3,",") MINMAX=MINMAX+1 GEN(TRIADS(LINE)_QOPD2,TRIADS(LINE)_OPD2,LINE) %IF TRIADS(LINE)_QOPD2#TRIAD %THENSTART MAXBRK %FINISH %RETURN SW(DEFARR): SW(FUN): SW(ARGARR): SW(IFUN): SW(ARR): SW(ARR1): SW(MOO): SW(INTRIN): PSTRING(3,"(") GEN(TRIADS(LINE)_QOPD2,TRIADS(LINE)_OPD2,LINE) SW(BRK): PSTRING(3,")") %RETURN SW(STMT): %if Adoptdata#0 %thenstart %IF LINE#NEXTTRNO %THEN -> CONT BLK==RECORD(ABLOCKS+NEXTBLK*BLSIZE) %IF BLK_DEPTH <7 %THEN DEPTH=BLK_DEPTH*3 %ELSE DEPTH=18 NEXTBLK=BLK_CHAIN ! TO OBTAIN FIRST TRIAD NO IN NEXT BLOCK BLK==RECORD(ABLOCKS+NEXTBLK*BLSIZE) NEXTTRNO=BLK_TEXT COPY(DEPTH,ADDR(S18),1,ADDR(INDENTS),1) LENGTH(INDENTS)=DEPTH %finish CONT: %IF TRIADS(LINE)_VAL2&X'7F' = 0 %THENSTART !PLABID PLAB==RECORD(ADICT+TRIADS(LINE)_OPD2<>4)&3 %IF I=1 %THEN PSTRING(3,FNTYPE(PP_TYPE&X'F')) PSTRING(3,ROUTS(I)) PSTRING(3,STRING(ANAMES+PP_IDEN)) LINK=PP_LINK2 %IF I=0 %OR LINK=0 %THEN -> OUT %ELSE PSTRING(3,"(") %UNTIL LINK=0 %CYCLE DICT=INTEGER(ADICT+LINK) LINK=INTEGER(ADICT+LINK+W1) PP==RECORD(ADICT+DICT) PSTRING(3,STRING(ANAMES+PP_IDEN)) %IF LINK#0 %THEN PSTRING(3,",") %ELSE PSTRING(3,")") %REPEAT OUT: OUTPUTLINE(0) %RETURN %FINISH %FINISH LINENO=TRIADS(LINE)_VAL1 %IF LINENO#0 %THEN ITOS(LINENO) %AND PSTRING(6,INTSTR) TYPE=TRIADS(LINE)_VAL2&X'F' %IF TYPE=0 %OR TYPE=1 %THEN %START GEN(TRIADS(LINE)_QOPD2,TRIADS(LINE)_OPD2,LINE) %FINISH %RETURN SW(EOT): SW(STOP): SW(PAUSE): PSTRING(3,OPVALS(TYPE)) %RETURN %IF TYPE=EOT I=TRIADS(LINE)_RES1_H0 %IF TRIADS(LINE)_RES1_FORM#0 %THEN %START I=I<255 %THEN J=255 COPY(J,ADICT,I+4,ADDR(S),1) LENGTH(S)=J ! %INCLUDE "targ_text1" ! **************************************************************************** ! include code for EBCDIC/ISO conversion if required ! **************************************************************************** PSTRING(3,"'") PSTRING(3,S) PSTRING(3,"'") %FINISH %FINISHELSESTART ITOS(I) %AND PSTRING(3,INTSTR) %UNLESS I=0 %FINISH %RETURN SW(INCR): SW(DECR): SW(PINCR): COPYFLAG=1 COPYSTR="" GEN(TRIADS(LINE)_QOPD1,TRIADS(LINE)_OPD1,LINE) PSTRING(3," = ") PSTRING(3,COPYSTR) PSTRING(3,OPVALS(TYPE)) COPYSTR="" GEN(TRIADS(LINE)_QOPD2,TRIADS(LINE)_OPD2,LINE) COPYFLAG=0 %RETURN SW(JIF): ! ->MISSJIF ! JIFTYPE=1 MISSJIF: OPTYPE=TRIADS(LINE)_QOPD1 S=".NOT.(" ->JMP %IF OPTYPE&TEXTMASK=0 %THEN S=".NOT. " %AND JIFTYPE=0 %AND ->JMP SW(JIT): SW(JINP): SW(JINN): SW(JINZ): SW(JIN): SW(JIP): SW(JIZ): S="" JMP: PSTRING(3,"IF (") PSTRING(3,S) GEN(TRIADS(LINE)_QOPD1,TRIADS(LINE)_OPD1,LINE) PSTRING(3,OPVALS(TYPE)) PSTRING(3,") GOTO ") GEN(TRIADS(LINE)_QOPD2,TRIADS(LINE)_OPD2,LINE) %RETURN SW(RRSUB): SW(RRDIV): SW(CGT): PSTRING(3,OPVALS(TYPE)) SPTR=TRIADS(LINE)_OPD2< GETITEM SW(NOOP): SW(ITS): SW(PA): SW(SUBS): SW(REF): SW(IODO): SW(AND): SW(OR): SW(STOD1): SW(STOD2): SW(EOD1): SW(EOD2): SW(REPL): SW(STRTSF): SW(CALLSF): SW(ENDSF): %RETURN SW(*): PRINTSTRING(" Not allowed for yet") WRITE(TYPE,6) NEWLINE REP: %RETURN %END !* !* !* !* NEXTBLK=1 NEXTTRNO=1 SAVE NEXT=1 spare="" J=0 COMMENT=" COMMENT INITIALISATION PERFORMED BY LOADER: COMMENT " %IF DESTEMPHEAD#0 %THENSTART I=DESTEMPHEAD %WHILE I#0 %CYCLE DT==RECORD(ADICT+I<1 AND NOT A HEAD THEN CREATE A TA TEMPORARY %IF TRIADS(I)_USE >1 %AND ENDS(OP)#1 %AND OP#REPL %THENSTART ITOS(I) PSTRING(3,"TA-") PSTRING(3,INTSTR) PSTRING(3," = ") GEN(TRIADS(I)_QOPD1,TRIADS(I)_OPD1,I) FORMLINE(OP,I,COPYBR) %UNLESS OP=MOO MAXBRK OUTPUTLINE(0) %FINISH %if ends(op)=1 %or (Op=CVT %and Triads(I)_Qopd1#0) %thenstart FORMLINE(OP,I,COPYBR) MAXBRK OUTPUTLINE(0) %UNLESS OP=STMT ->OUTER %finish OUTER: %REPEAT OUTPUTLINE(2) %UNLESS OP=EOT NEWLINE %END %endoffile