MSGGEN - MESSAGE TRAP ROUTINE MACRO M1110 15-MAR-78 16:33 PAGE 1 1 .TITLE MSGGEN - MESSAGE TRAP ROUTINE 2 .IDENT /02.00/ 3 .LIST MEB 4 000000 .PSECT MSGGEN 5 ; 6 ; AUTHOR: H. L. COLEMAN 7 ; MILLIKEN AND COMPANY 8 ; P. O. BOX 1926 9 ; MAIL STOP M-103 10 ; SPARTANBURG, S. C. 29304 11 ; (803)573-2556 12 ; 13 ; DATE: 23-JAN-78 14 ; 15 ; VERSION: 02.00 16 ; 17 ; MODIFIED: 18 ; 19 ; FUNCTION: THIS ROUTINE IS CALLED TO CONSTRUCT A MESSAGE FROM 20 ; SEVERAL NON CONTIGUOUS PIECES, PRINT THE MESSAGE ON 21 ; THE TERMINAL SPECIFIED, AND OPTIONALLY READ A RESPONSE 22 ; FROM THAT TERMINAL. THE FORMAT OF THE MESSAGE IS: 23 ; 24 ; PREFIX < !WARNING!SERIOUS! FATAL !>TEXT [RESPONSE] 25 ; 26 ; EACH MESSAGE IS PRECEEDED BY A CARRIAGE RETURN LINE 27 ; FEED, AND THE MESSAGE (OR RESPONSE) IS FOLLOWED BY 28 ; A CARRIAGE RETURN LINE FEED. THE TERMINAL IS ATTACHED 29 ; BEFORE THE MESSAGE IS WRITTEN AND DETACHED AFTER THE 30 ; RETURNING TO THE USER IF IT WAS NOT ATTACHED PRIOR TO 31 ; ENTRY. IF A REPLY IS REQUESTED, THE READ AFTER PROMPT 32 ; I/O FUNCTION IS USED. 33 ; 34 ; TWO MACROS ARE PROVIDED TO INTERFACE WITH THIS ROUTINE. 35 ; THE FIRST IS USED TO INITILIZE THIS ROUTINE OR TO CHANGE 36 ; THE INITILIZATION PARAMETERS. THE FORMAT OF THIS MACRO 37 ; IS: 38 ; 39 ; MINIT$S LUN,EFN 40 ; 41 ; EXPANSION: 42 ; 43 ; MOV LUN,$TMLUN ;SET LUN 44 ; MOV EFN,$TMEFN ;SET EFN 45 ; 46 ; WHERE: 47 ; 48 ; LUN IS THE LOGICAL UNIT NUMBER WHICH IS ASSIGNED TO 49 ; TO THE TERMINAL DEVICE ON WHICH MESSAGES ARE TO 50 ; APPEAR. 51 ; 52 ; DEFAULT: 5 53 ; 54 ; 55 ; EFN IS AN EVENT FLAG NUMBER WHICH MAY BE USED BY THIS 56 ; ROUTINE. 57 ; MSGGEN - MESSAGE TRAP ROUTINE MACRO M1110 15-MAR-78 16:33 PAGE 1-1 58 ; DEFAULT: 24. 59 ; 60 ; IF THE DEFAULTS FOR LUN AND EFN ARE ACCEPTABLE, THE 61 ; MINIT$ MACRO DOES NOT HAVE TO BE ISSUED. 62 ; 63 ; 64 ; THE SECOND MACRO IS USED TO ISSUE THE TRAP INSTRUCTION 65 ; AND GENERATE THE APPROPRIATE PARAMETER LIST. 66 ; THE FORMAT OF THIS MACRO IS: 67 ; 68 ; MSGN$S [PFX],[SEV],[MSG],[REP],[LEN],[ERR] 69 ; 70 ; EXPANSION: 71 ; 72 ; JSR R5,$MSGEN ;GO TO MESSAGE GEN ROUTINE 73 ; .WORD PFX ;A(MESSAGE PREFIX) 74 ; .WORD SEV ;SEVERITY CODE 75 ; .WORD MSG ;A(MESSAGE TEXT) 76 ; .WORD REP ;A(REPLY AREA) 77 ; .WORD LEN ;REPLY LENGTH 78 ; BCC .+N ;BRANCH IF NO ERRORS 79 ; CALL ERR ;CALL USER ERROR ROUTINE 80 ; 81 ; WHERE: 82 ; 83 ; PFX IS THE ADDRESS OF THE MESSAGE PREFIX. THE FORMAT 84 ; OF THE MESSAGE PREFIX IS: 85 ; 86 ; .BYTE LEN ;LENGTH OF MESSAGE 87 ; .ASCII /MESSAGE TEXT/ 88 ; 89 ; SEV IS THE SEVERITY LEVEL OF THIS MESSAGE. SEV MUST BE 90 ; IN THE RANGE 0-3. THE VARIOUS SEVERITY LEVELS AND THEIR 91 ; MEANINGS ARE: 92 ; 93 ; 0 - NO SEVERITY TEXT APPEARS IN MESSAGE. 94 ; 1 - "WARNING", APPEARS IN MESSAGE. 95 ; 2 - "SERIOUS" APPEARS IN MESSAGE 96 ; 3 - "FATAL" APPEARS IN MESSAGE. 97 ; 98 ; MSG IS THE ADDRESS OF THE MESSAGE TEXT PROPER. THE 99 ; FORMAT OF THE MESSAGE TEXT IS IDENTICAL TO THE MESSAGE 100 ; PREFIX. 101 ; 102 ; REP IS THE ADDRESS OF THE REPLY BUFFER. IF REP IS 103 ; SPECIFIED, THEN LEN MUST BE SPECIFIED, AND BE GREATER 104 ; THAN ZERO. REP MUST BE ONE BYTE LONGER THAN LEN TO ALLOW 105 ; FOR THE TERMINATOR (BINARY ZERO). 106 ; 107 ; LEN IS THE REPLY LENGTH. 108 ; 109 ; 110 ; ERR IS THE ADDRESS OF THE ROUTINE TO BE GIVEN CONTROL 111 ; IF ANY ERROR (RETURN WITH CS) IS DETECTED. IF NOT 112 ; SPECIFIED, RETURN IS IN LINE. 113 ; MSGGEN - MESSAGE TRAP ROUTINE MACRO M1110 15-MAR-78 16:33 PAGE 2 115 .MCALL WSIG$S,QIOW$S,QIO$S 116 000000 000005 $TMLUN::.WORD 5 ;LUN 117 000000' LUN=$TMLUN 118 000002 000030 $TMEFN::.WORD 24. ;EVENT FLAG 119 000002' EFN=$TMEFN 120 000004 000000 000000 $TIOSB::.WORD 0,0 ;IOSB FOR TERMINAL I/O 121 000010 000000 ATTFLG: .WORD 0 ;ATTACH FLAG 122 000012 015 012 BUF: .ASCII <15><12> ;MESSAGE BUFFER 123 000014 BUF1: .BLKW 66. 124 000220 127 101 122 WARN: .ASCII /WARNING / 000223 116 111 116 000226 107 040 125 000230 123 105 122 .ASCII /SERIOUS / 000233 111 117 125 000236 123 040 126 000240 052 106 101 .ASCII /*FATAL* / 000243 124 101 114 000246 052 040 MSGGEN - MESSAGE TRAP ROUTINE MACRO M1110 15-MAR-78 16:33 PAGE 3 128 ; 129 ; MSGGEN ROUTINE 130 ; 131 ; FUNCTION: GENERATE AND PRINT THE MESSAGE, AND OPTIONALLY READ A 132 ; RESPONSE. 133 ; 134 ; INPUT: 135 ; 136 ; R5+ 0 = A(PREFIX) 137 ; R5+ 2 = SEVERITY CODE 138 ; R5+ 4 = MESSAGE TEXT 139 ; R5+ 6 = A(REPLY BUFFER) 140 ; R5+10 = REPLY LENGTH 141 ; 142 ; OUTPUT: 143 ; 144 ; MESSAGE IS PRINTED, AND REPLY READ IF REQUESTED. 145 ; 146 ; IF CC, NO ERRORS DETECTED, $TIOSB CONTAINS STATUS OF IO.WLB 147 ; OR IO.RPR. 148 ; 149 ; IF CS, ERROR DETECTED, $DSW OR $TIOSB CONTAINS ERROR STATUS. 150 000250 005046 $MSGEN::CLR -(SP) ;CLEAR ERROR INDICATOR 151 000252 010046 MOV R0,-(SP) ;SAVE REGISTERS 152 000254 010146 MOV R1,-(SP) 153 000256 010246 MOV R2,-(SP) 154 000260 010346 MOV R3,-(SP) 155 000262 010446 MOV R4,-(SP) 156 000264 012700 000014' MOV #BUF1,R0 ;R0 = A(MESSAGE BUFFER) 157 000270 012501 MOV (R5)+,R1 ;R1 = A(MESSAGE PREFIX) 158 000272 001405 BEQ 1200$ ;IF EQ, NO PREFIX 159 000274 112102 MOVB (R1)+,R2 ;R2 = PREFIX LENGTH 160 000276 112120 1100$: MOVB (R1)+,(R0)+ ;MOVE PREFIX 161 000300 077202 SOB R2,1100$ ;LOOP UNTIL DONE 162 000302 112720 000040 MOVB #' ,(R0)+ ;INSERT BLANK 163 000306 012501 1200$: MOV (R5)+,R1 ;R1 = SEVERITY LEVEL 164 000310 001414 BEQ 1400$ ;IF EQ, LEVEL ZERO - NOTHING TO DO 165 000312 005301 DEC R1 ;MINUS ONE 166 000314 006301 ASL R1 ;TIMES 2 167 000316 006301 ASL R1 ;TIMES 4 168 000320 006301 ASL R1 ;TIMES 8 169 000322 062701 000220' ADD #WARN,R1 ;R1 = A(SEVERITY TEXT) 170 000326 012702 000007 MOV #7,R2 ;R2 = COUNT 171 000332 112120 1300$: MOVB (R1)+,(R0)+ ;MOVE SEVERITY TEXT 172 000334 077202 SOB R2,1300$ ;LOOP UNTIL DONE 173 000336 112720 000040 MOVB #' ,(R0)+ ;INSERT BLANK 174 000342 012501 1400$: MOV (R5)+,R1 ;R1 = A(MESSAGE TEXT) 175 000344 001403 BEQ 1600$ ;IF EQ, NO TEXT 176 000346 112102 MOVB (R1)+,R2 ;R2 = LENGTH 177 000350 112120 1500$: MOVB (R1)+,(R0)+ ;COPY MESSAGE TEXT 178 000352 077202 SOB R2,1500$ ;LOOP UNTIL DONE 179 000354 012501 1600$: MOV (R5)+,R1 ;R1 = A(REPLY BUFFER) 180 000356 012502 MOV (R5)+,R2 ;R2 = REPLY LENGTH 181 000360 162700 000012' SUB #BUF,R0 ;R0 = MESSAGE LENGTH 182 000364 QIOW$S #IO.ATT,LUN,EFN,,#$TIOSB ;ATTACH TERMINAL 000364 005046 CLR -(SP) 000366 005046 CLR -(SP) MSGGEN - MESSAGE TRAP ROUTINE MACRO M1110 15-MAR-78 16:33 PAGE 3-1 000370 005046 CLR -(SP) 000372 005046 CLR -(SP) 000374 005046 CLR -(SP) 000376 005046 CLR -(SP) 000400 005046 CLR -(SP) 000402 012746 000004' MOV #$TIOSB,-(SP) 000406 005046 CLR -(SP) 000410 116716 177366 MOVB EFN,(SP) 000414 016746 177360 MOV LUN,-(SP) 000420 012746 000000G MOV #IO.ATT,-(SP) 000424 012746 MOV (PC)+,-(SP) 000426 003 014 .BYTE 3,12. 000430 104377 EMT ^O<377> 183 000432 005067 177352 CLR ATTFLG ;CLEAR FLAG 184 000436 122767 000000G 177340 CMPB #IE.DAA,$TIOSB ;DEVICE ALREADY ATTACHED? 185 000444 001402 BEQ 1700$ ;IF EQ, YES - DON'T DETACH WHEN THROUGH 186 000446 005367 177336 DEC ATTFLG ;SET FLAG 187 000452 005701 1700$: TST R1 ;REPLY REQUESTED? 188 000454 001041 BNE 2000$ ;IF NE, YES - GO DO IT 189 000456 QIOW$S #IO.WVB,LUN,EFN,,#$TIOSB,,<#BUF,R0> ;SEND MSG. 000456 005046 CLR -(SP) 000460 005046 CLR -(SP) 000462 005046 CLR -(SP) 000464 005046 CLR -(SP) 000466 010046 MOV R0,-(SP) 000470 012746 000012' MOV #BUF,-(SP) 000474 005046 CLR -(SP) 000476 012746 000004' MOV #$TIOSB,-(SP) 000502 005046 CLR -(SP) 000504 116716 177272 MOVB EFN,(SP) 000510 016746 177264 MOV LUN,-(SP) 000514 012746 000000G MOV #IO.WVB,-(SP) 000520 012746 MOV (PC)+,-(SP) 000522 003 014 .BYTE 3,12. 000524 104377 EMT ^O<377> 190 000526 103041 1800$: BCC 2100$ ;IF CC, NO DIRECTIVE ERROR 191 000530 022767 000000G 000000G CMP #IE.UPN,$DSW ;INSUFFICIENT DYNAMIC MEMORY? 192 000536 001404 BEQ 1900$ ;IE EQ, YES - TRY AGAIN 193 000540 052766 000001 000012 BIS #1,10.(SP) ;SET CARRY IN RETURN PS 194 000546 000474 BR 2300$ ;EXIT 195 000550 1900$: WSIG$S ;REST A SECOND 000550 012746 MOV (PC)+,-(SP) 000552 061 001 .BYTE 49.,1 000554 104377 EMT ^O<377> 196 000556 000735 BR 1700$ ;TRY AGAIN 197 000560 2000$: QIOW$S #IO.RPR,LUN,EFN,,#$TIOSB,, ;SEND MSG. 000560 005046 CLR -(SP) 000562 010046 MOV R0,-(SP) 000564 012746 000012' MOV #BUF,-(SP) 000570 005046 CLR -(SP) 000572 010246 MOV R2,-(SP) 000574 010146 MOV R1,-(SP) 000576 005046 CLR -(SP) 000600 012746 000004' MOV #$TIOSB,-(SP) 000604 005046 CLR -(SP) 000606 116716 177170 MOVB EFN,(SP) 000612 016746 177162 MOV LUN,-(SP) MSGGEN - MESSAGE TRAP ROUTINE MACRO M1110 15-MAR-78 16:33 PAGE 3-2 000616 012746 000000G MOV #IO.RPR,-(SP) 000622 012746 MOV (PC)+,-(SP) 000624 003 014 .BYTE 3,12. 000626 104377 EMT ^O<377> 198 000630 000736 BR 1800$ ;GO CHECK STATUS 199 000632 105767 177146 2100$: TSTB $TIOSB ;SUCESSFULL? 200 000636 100007 BPL 2200$ ;IF PL, YES - LEAVE CARRY CLEAR 201 000640 122767 000000G 177136 CMPB #IE.EOF,$TIOSB ;CTRL/Z ENTERED? 202 000646 001403 BEQ 2200$ ;IF EQ, YES - CONSIDER SUCESSFULL 203 000650 052766 000001 000012 BIS #1,10.(SP) ;SET CARRY IN RETURN PS 204 000656 2200$: QIO$S #IO.WVB,LUN,,,,,<#BUF,#2> ;SEND CR/LF 000656 005046 CLR -(SP) 000660 005046 CLR -(SP) 000662 005046 CLR -(SP) 000664 005046 CLR -(SP) 000666 012746 000002 MOV #2,-(SP) 000672 012746 000012' MOV #BUF,-(SP) 000676 005046 CLR -(SP) 000700 005046 CLR -(SP) 000702 005046 CLR -(SP) 000704 016746 177070 MOV LUN,-(SP) 000710 012746 000000G MOV #IO.WVB,-(SP) 000714 012746 MOV (PC)+,-(SP) 000716 001 014 .BYTE 1,12. 000720 104377 EMT ^O<377> 205 000722 005701 TST R1 ;REPLY REQUESTED? 206 000724 001405 BEQ 2300$ ;IF EQ, NO 207 000726 066701 177054 ADD $TIOSB+2,R1 ;R1 = A(OF TERMINATOR) 208 000732 105011 CLRB (R1) ;INSERT TERMINATOR 209 000734 005267 177046 INC $TIOSB+2 ;ACCOUNT FOR TERMINATOR IN LENGTH 210 000740 2300$: QIOW$S #IO.DET,LUN,EFN ;DETACH TERMINAL 000740 005046 CLR -(SP) 000742 005046 CLR -(SP) 000744 005046 CLR -(SP) 000746 005046 CLR -(SP) 000750 005046 CLR -(SP) 000752 005046 CLR -(SP) 000754 005046 CLR -(SP) 000756 005046 CLR -(SP) 000760 005046 CLR -(SP) 000762 116716 177014 MOVB EFN,(SP) 000766 016746 177006 MOV LUN,-(SP) 000772 012746 000000G MOV #IO.DET,-(SP) 000776 012746 MOV (PC)+,-(SP) 001000 003 014 .BYTE 3,12. 001002 104377 EMT ^O<377> 211 001004 012604 MOV (SP)+,R4 212 001006 012603 MOV (SP)+,R3 213 001010 012602 MOV (SP)+,R2 214 001012 012601 MOV (SP)+,R1 215 001014 012600 MOV (SP)+,R0 216 001016 006026 ROR (SP)+ ;SET CARRY IF ERROR OCCURED 217 001020 000205 RTS R5 ;RETURN TO USER 218 000001 .END MSGGEN - MESSAGE TRAP ROUTINE MACRO M1110 15-MAR-78 16:33 PAGE 3-3 SYMBOL TABLE ATTFLG 000010R 002 IE.DAA= ****** GX IO.DET= ****** GX WARN 000220R 002 $TMEFN 000002RG 002 BUF 000012R 002 IE.EOF= ****** GX IO.RPR= ****** GX $DSW = ****** GX $TMLUN 000000RG 002 BUF1 000014R 002 IE.UPN= ****** GX IO.WVB= ****** GX $MSGEN 000250RG 002 $$$ARG= 000002 EFN = 000002R 002 IO.ATT= ****** GX LUN = 000000R 002 $TIOSB 000004RG 002 . ABS. 000000 000 000000 001 MSGGEN 001022 002 ERRORS DETECTED: 0 VIRTUAL MEMORY USED: 1183 WORDS ( 5 PAGES) DYNAMIC MEMORY: 2668 WORDS ( 10 PAGES) ELAPSED TIME: 00:00:11 MSGGEN,[202,34]MSGGEN/CR/-SP=[202,1]MSGGEN MSGGEN CREATED BY MACRO ON 15-MAR-78 AT 16:33 PAGE 1 SYMBOL CROSS REFERENCE CREF V01 SYMBOL VALUE REFERENCES ATTFLG 000010 R #2-121 *3-183 *3-186 BUF 000012 R #2-122 3-181 3-189 3-197 3-204 BUF1 000014 R #2-123 3-156 EFN = 000002 R #2-119 3-182 3-189 3-197 3-210 IE.DAA = ****** GX 3-184 IE.EOF = ****** GX 3-201 IE.UPN = ****** GX 3-191 IO.ATT = ****** GX 3-182 IO.DET = ****** GX 3-210 IO.RPR = ****** GX 3-197 IO.WVB = ****** GX 3-189 3-204 LUN = 000000 R #2-117 3-182 3-189 3-197 3-204 3-210 WARN 000220 R #2-124 3-169 $DSW = ****** GX 3-191 $MSGEN 000250 RG #3-150 $TIOSB 000004 RG #2-120 3-182 3-184 3-189 3-197 3-199 3-201 3-207 *3-209 $TMEFN 000002 RG #2-118 2-119 $TMLUN 000000 RG #2-116 2-117 $$$ARG = 000002 #3-182 3-182 3-182 #3-182 3-182 3-182 3-182 3-182 3-182 3-182 3-182 3-182 3-182 3-182 #3-182 3-182 3-182 3-182 3-182 3-182 3-182 3-182 3-182 3-182 3-182 #3-189 3-189 #3-189 3-189 #3-189 3-189 3-189 #3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 #3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 #3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 3-189 #3-197 3-197 #3-197 3-197 #3-197 3-197 #3-197 3-197 #3-197 3-197 #3-197 3-197 3-197 #3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 #3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 #3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 3-197 #3-204 3-204 #3-204 3-204 #3-204 3-204 3-204 #3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 #3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 #3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 3-204 #3-210 3-210 3-210 #3-210 3-210 3-210 3-210 3-210 3-210 3-210 3-210 3-210 3-210 3-210 #3-210 3-210 3-210 3-210 3-210 3-210 3-210 3-210 3-210 3-210 3-210 MSGGEN CREATED BY MACRO ON 15-MAR-78 AT 16:33 PAGE 2 MACRO CROSS REFERENCE CREF V01 MACRO NAME REFERENCES DIR$ #3-182 3-182 #3-189 3-189 #3-195 3-195 #3-197 3-197 #3-204 3-204 #3-210 3-210 MOV$ #3-182 #3-182 #3-182 #3-182 #3-182 #3-182 #3-189 #3-189 #3-189 #3-189 #3-189 #3-189 #3-189 #3-189 #3-189 #3-197 #3-197 #3-197 #3-197 #3-197 #3-197 #3-197 #3-197 #3-197 #3-197 #3-197 #3-197 #3-204 #3-204 #3-204 #3-204 #3-204 #3-204 #3-204 #3-204 #3-204 #3-210 #3-210 #3-210 #3-210 #3-210 #3-210 MVB$ #3-182 #3-182 #3-189 #3-189 #3-197 #3-197 #3-204 #3-204 #3-210 #3-210 QDPB$S #3-182 3-182 #3-189 3-189 #3-197 3-197 #3-204 3-204 #3-210 3-210 QIOW$S #2-115 3-182 3-189 3-197 3-210 QIO$S #2-115 #3-204 RVP$ #3-182 #3-182 #3-182 #3-189 #3-189 #3-189 #3-189 #3-197 #3-197 #3-197 #3-197 #3-204 #3-204 #3-204 #3-204 #3-210 #3-210 #3-210 WSIG$S #2-115 #3-195