UNIVERSAL STRUCT -- STRUCTURED PROGRAMMING MACROS SUBTTL DEFINITIONS ;; VERSION 1(0)-2 ;; WRITTEN BY ROBERT P. NIX -- 11/21/78 ;; STRUCT -- A SET OF STRUCTURED PROGRAMMING MACROS FOR ;; THE DECSYSTEM-10 ASSEMBLER. ;; THE CALLS: ; %IF ; THEN ; -- CODE -- ; %ELSE ; -- CODE -- ; %ENDIF ; - OR - ; %IF ; THEN ; -- CODE -- ; %ENDIF ; %WHILE ; DO ; -- CODE -- ; %ENDWHILE ; %REPEAT ; -- CODE -- ; %UNTIL ; %CASE ; %WHEN ; DO ; -- CODE -- ; %WHEN ; DO ; -- CODE -- ; %ENDCASE ; %LOOP ; -- CODE -- ; %EXITIF ; -- CODE -- ; %ENDLOOP ;; IS DEFINED AS: ; <[CAI, SKIP OR OTHER SKIPPING COND],AFIELD,BFIELD,COND> ; <,AND,> ; <,OR,> ; > SUBTTL DEFINITIONS FOR MACROS NEEDED INTERNALLY TO SUBSYSTEM LALL DEFINE COND (UCOND,T,F,%T1,%F1) < ..CCNT== 0 IRP UCOND,< ..CCNT== ..CCNT+1 > IFE ..CCNT-4,< ACOND (UCOND,T,F) > IFE ..CCNT-2,< ..CC== 0 IRP UCOND,< ..CC== ..CC+1 IFE ..CC-2,< COND (UCOND,F,T) > > > IFE ..CCNT-3,< ..CC== 0 IRP UCOND,< ..CC== ..CC+1 IFE ..CC-1,< COND (UCOND,%T1,%F1) > IFE ..CC-2,< IFIDN ,< %F1: JRST F %T1: > IFIDN ,< %T1: JRST T %F1: > > IFE ..CC-3,< COND (UCOND,T,F) > > > > DEFINE ACOND (I,A,B,C,T,F) < I'C A,B JRST F JRST T > DEFINE BLDSYM (CONST,ARG) < CONST'ARG== . > DEFINE ORGSYM (CONST,ARG) < .ORG CONST'ARG > SUBTTL SUBTTL DEFINITIONS FOR %IF, %ELSE, %ENDIF DEFINE %IF (UCOND,%T,%F) < IFNDEF .ILVL,<.ILVL== 0> COND (,%T,%F) %F: JRST @.+1 BLDSYM (.IF,\.ILVL) BLOCK 1 %T: .ILVL== .ILVL+1 > DEFINE %ELSE (%ELS,%END) < IFNDEF .ILVL, .ILVL== .ILVL-1 IFL .ILVL, IFGE .ILVL,< JRST @'%END ORGSYM (.IF,\.ILVL) EXP %ELS .ORG BLDSYM (.IF,\.ILVL) %END: BLOCK 1 %ELS: .ILVL== .ILVL+1 > > DEFINE %ENDIF (%END) < IFNDEF .ILVL, .ILVL== .ILVL-1 IFL .ILVL, IFGE .ILVL,< %END: ORGSYM (.IF,\.ILVL) EXP %END .ORG > > SUBTTL DEFINITIONS FOR %WHILE, %ENDWHILE DEFINE %WHILE (UCOND,%T,%F) < IFNDEF .WLVL,<.WLVL== 0> BLDSYM (.WTO,\.WLVL) COND (,%T,%F) %F: JRST @.+1 BLDSYM (.WLV,\.WLVL) BLOCK 1 %T: .WLVL== .WLVL+1 > DEFINE %ENDWH (%BACK,%EN) < IFNDEF .WLVL, .WLVL== .WLVL-1 IFL .WLVL, IFGE .WLVL,< ORGSYM (.WTO,\.WLVL) %BACK== . .ORG JRST %BACK %EN== . ORGSYM (.WLV,\.WLVL) EXP %EN .ORG > > SUBTTL DEFINITIONS FOR %REPEAT, %UNTIL DEFINE %REPEA < IFNDEF .RLVL,<.RLVL== 0> BLDSYM (.RTO,\.RLVL) .RLVL== .RLVL+1 > DEFINE %UNTIL (UCOND,%T,%F,%TO) < IFNDEF .RLVL, .RLVL== .RLVL-1 IFL .RLVL, IFGE .RLVL,< COND (,%T,%F) ORGSYM (.RTO,\.RLVL) %TO== . .ORG %F: JRST %TO %T: > > SUBTTL DEFINITIONS FOR %CASE, %WHEN, %ENDCASE DEFINE %CASE (%CONT,%NXT) < IFNDEF .CLVL,<.CLVL== 0> JRST %CONT BLDSYM (.CBO,\.CLVL) BLOCK 1 BLDSYM (.CNX,\.CLVL) %NXT: BLOCK 1 %CONT: JRST @'%NXT .CLVL== .CLVL+1 > DEFINE %WHEN (UCOND,%T,%F,%BO,%NXT,%TOP) < IFNDEF .CLVL, .CLVL== .CLVL-1 IFL .CLVL, IFGE .CLVL,< ORGSYM (.CBO,\.CLVL) %BO== . .ORG JRST @'%BO %TOP== . ORGSYM (.CNX,\.CLVL) EXP %TOP .ORG COND (,%T,%F) %F: JRST @'%NXT BLDSYM (.CNX,\.CLVL) %NXT: BLOCK 1 %T: .CLVL== .CLVL+1 > > DEFINE %ENDCA (%BO) < IFNDEF .CLVL, .CLVL== .CLVL-1 IFL .CLVL, IFGE .CLVL,< %BO== . ORGSYM (.CBO,\.CLVL) EXP %BO .ORG ORGSYM (.CNX,\.CLVL) EXP %BO .ORG > > SUBTTL DEFINITIONS FOR %LOOP, %EXITIF, %ENDLOOP DEFINE %LOOP < IFNDEF .LLVL,<.LLVL== 0> BLDSYM (.LT,\.LLVL) .LLVL== .LLVL+1 > DEFINE %EXITI (UCOND,%T,%F,%OUT) < IFNDEF .LLVL, .LLVL== .LLVL-1 IFL .LLVL, IFGE .LLVL,< COND (,%T,%F) %T: JRST @'%OUT BLDSYM (.LB,\.LLVL) %OUT: BLOCK 1 %F: .LLVL== .LLVL+1 > > DEFINE %ENDLO (%TOP,%BO) < IFNDEF .LLVL, .LLVL== .LLVL-1 IFL .LLVL, IFGE .LLVL,< ORGSYM (.LT,\.LLVL) %TOP== . .ORG JRST %TOP %BO: ORGSYM (.LB,\.LLVL) EXP %BO .ORG > > SUBTTL END OF MODULE end