.LIST TTM .NLIST BIN .TITLE TEST OF STRUCTURED MACROS .SBTTL INITIALIZATION .IDENT /V01/ .MCALL EXIT$S,RQST$S,QIOW$S ; ; TEST OF THE STRUCTURED MACRO PACKAGE ; ; FIRST MAKE THE MACROS KNOWN .MCALL STRUCT ALL=0 ;DEFINE EVERYTHING STRUCT .PSECT DATA .SBTTL VARIABLES AND DATA USED FOR TESTING HEAD VARS X: .WORD 1 Y: .WORD 2 Z: .WORD 2 A: .WORD 177777 B: .WORD 177776 Q: .WORD 0 .PAGE HEAD DATA STR1: .ASCIZ /MY NAME IS/ STR2: .ASCIZ /MY NAME WAS/ NULL1: .ASCIZ // NULL2: .ASCIZ // STR3: .ASCIZ /ABC/ STR4: .ASCIZ /ABC/ STR5: .ASCIZ /ABF/ STR6: .ASCIZ /QCD/ STR7: .ASCIZ /IOC/ STR8: .ASCIZ /AFG/ .EVEN DATA: .WORD 0 ARG: .WORD 0 VAR: .WORD 0 VALID: .WORD ST8 COUNT: .WORD 0 TEN: .WORD 10 MONE: .WORD -1. OUT: .BLKW 40. TBL1: .WORD 0 .WORD 1 .WORD 2 .WORD 10 .WORD 34 .WORD -1 .WORD -10 TBL1SZ=.-TBL1 TBL1ESZ=2. MON: .WORD DAY: .WORD MONTHS: 0.,1. 31.,2. 59.,3. 90.,4. 120.,5. 151.,6. 181.,7. 212.,8. 243.,9. 273.,10. 304.,11. 334.,12. .PAGE .PSECT STRTST STRTST: .IF DF,TEST .NLIST .IFF .SBTTL NOTE NOTE .IFF .SBTTL ASSERT PROOF=1 ASSERT X GT Y ASSERT Y EQ X ASSERT Y GT X ASSERB A GT B ASSERB A+1 NE B+1 .IFF .SBTTL CHECK CHECK #177777 CHECK PC, .PAGE .IFF .SBTTL IF,ELSE, AND ALL CONDITIONS .MACRO TIF ARG1,ARG2,COND IF ARG1 COND ARG2 NOTE ELSE NOTE END .ENDM TIF X,Y,LT TIF X,Y,LE TIF Y,X,GT TIF Y,X,GE TIF Y,Z,EQ TIF X,Y,NE TIF A,B,HI TIF A,B,HIS TIF B,A,LO TIF B,A,LOS TIF Q,,EQ TIF Q,,GE TIF X,,GT TIF A,,LE TIF A,,LT TIF A,,MI TIF A,,NE TIF X,,PL TIF #1,Y,SETOFF TIF #2,Y,SETON CLC TIF ,,CC SEC TIF ,,CS CLV TIF ,,VC SEV TIF ,,VS .PAGE .IFF .SBTTL IF IF X LT Y NOTE END .IFF .SBTTL IFB IFB A+1 EQ B+1 NOTE END IFB A+1 EQ B+1 NOTE ELSE NOTE END .IFF .SBTTL IFC IFC #STR1 EQ #STR2 #5 NOTE END IFC #STR1 NE #STR2 NOTE END IFC #NULL1 EQ #NULL2 NOTE <2 NULL STRS OK> END IFC #NULL1 LT #STR1 NOTE <1 NULL 2 NOT OK> END IFC #STR1 GE #NULL1 NOTE <2 NULL 1 NOT OK> END IFC #STR3 EQ #STR4 NOTE <2 EQ LEN STRS EQ OK> END IFC #STR5 LT #STR6 NOTE <2 EQ LEN STRS LT OK> END IFC #STR7 GT #STR8 NOTE <2 EQ LEN STRS GT OK> END IFC #STR1 LT #STR2 NOTE <2 NE LEN STR LT OK> END IFC #STR2 GT #STR1 NOTE <2 NE LEN STR GT OK> END .PAGE .IFF .SBTTL AND/OR IF X NE Y AND X LT Z NOTE IF X EQ Y OR Y EQ Z NOTE END END .IFF .SBTTL ANDB/ORB IF A EQ B ORB A EQ B ORB A+1 EQ B+1 NOTE END IF Y EQ Z ANDB #377 SETON B+1 NOTE END .PAGE .IFF .SBTTL EXBND/EXBNDB EXBND #0 A #100 NOTE END EXBNDB #0 B #1000 NOTE END .IFF .SBTTL INBND/INBNDB INBND #-10 A #-1 NOTE END INBNDB #-1 Y+1 #1 NOTE END .PAGE .IFF .SBTTL REPEAT/CASE CLR R0 REPEAT CASE R0, ST1: NOTE END ST2: NOTE END ST3: NOTE END END INC R0 UNTIL R0 GT #3 .IFF .SBTTL FOR/CASEB FOR DATA #400 #1400 #400 CASEB DATA+1, ST4: NOTE END ST5: NOTE END ST6: NOTE END END END .PAGE .IFF .SBTTL UNTILB MOV #400,DATA REPEAT ADD #400,DATA UNTILB DATA+1 GT #3 CHECK DATA, .IFF .SBTTL WHILE/WHILEB MOV #-2,R0 WHILE R0 LE NOTE <3 WHILE OKS> INC R0 END MOV #400,DATA WHILEB DATA+1 LE #3 NOTE <3 WHILEB OKS> ADD #400,DATA END .PAGE .IFF .SBTTL SUBROUTINE TESTS .IFF .SBTTL CALL/RETURN/PROC .PSECT SUBS .PAGE PROC TXT, TST R0 BEQ TXT1 NOTE RETURN TXT1: NOTE END .PAGE .PSECT STRTST CLR R0 CALL TXT INC R0 CALL TXT .PAGE .IFF .SBTTL TEXT/NUMARG/GETARG/PUTARG .PSECT SUBS .PAGE TEXT SUBR, NUMARG DATA CHECK DATA, CASE DATA, SUBR1: GETARG @1,ARG INC ARG PUTARG @1,ARG QUIT END SUBR2: GETARG @1,ARG INC ARG PUTARG @1,ARG QUIT 2 END SUBR3: QUIT @3 END END END .PAGE .PSECT STRTST CLR VAR CLR DATA INVOKE SUBR, CHECK VAR, INVOKE SUBR, NOTE ST7: CHECK VAR, INVOKE SUBR,<,,VALID> NOTE ST8: NOTE .PAGE .IFF .SBTTL SAVE/RETURN SAVE SAVE DATA,VAR .IRP XYZ, CHECK XYZ, .ENDM UNSAVE DATA,VAR UNSAVE .IRP XYZ, CHECK XYZ, .ENDM .PAGE .IFF .SBTTL INDEX FOR COUNT #1 #3 INDEX COUNT R0 CHECK R0 END .IFF .SBTTL MOVC/MOVW MOVB #' ,OUT MOVC #OUT #OUT+1 #79. MOVC #STR2 #OUT QIOW$S #IO.WVB,#5,#1,,,,<#OUT,#11.> MOV #" ,OUT MOVW #OUT #OUT+2 #40. MOVW #STR1 #OUT QIOW$S #IO.WVB,#5,#1,,,,<#OUT,#10.> .IFF .SBTTL SWAP/SWAPB MOV #1,DATA MOV #2,ARG MOV #400,VAR CHECK DATA CHECK ARG CHECK VAR SWAP DATA,ARG CHECK DATA CHECK ARG SWAPB DATA,VAR CHECK DATA CHECK VAR .PAGE .IFF .SBTTL FIND FIND #TEN,#TBL1,#TBL1SZ,#TBL1ESZ IFFND EQ NOTE IFNFND NOTE END FIND #MONE,#TBL1,#TBL1SZ,#TBL1ESZ IFFND LT NOTE END CLR R1 FIND ,#TBL1,#TBL1SZ,#TBL1ESZ GETKY R0 ADD (R0),R1 IFFND END CHECK R1, FIND ,#TBL1,#TBL1SZ,#TBL1ESZ GETKY R0 IF (R0) GT 2(R0) AND (R0) GT 4(R0) CLC ELSE SEC END IFFND CC NOTE END FOR R2,#0,#360.,#20. FIND ,#MONTHS,#48.,#4. GETKY R1 INBND (R1),R2,4(R1) SEC ELSE CLC END IFFND CS GETKY R1 MOV 2(R1),MON MOV R2,R0 SUB (R1),R0 MOV R0,DAY END CHECK MON CHECK DAY END .IFF .SBTTL LAST NOTE NOTE <-- END OF STRUCTURED MACRO TESTS --> .ENDC .PAGE .SBTTL EXIT CODE ; ; EXIT THE TASK ; RQST$S #MCR EXIT$S ; MCR: .RAD50 /...MCR/ ; ENDCHK .END STRTST