VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 TABLE OF CONTENTS 2- 50 LOCAL EQUATES 4- 132 STATUS BIT DEFINITIONS 5- 158 LOCAL AND GLOBAL STORAGE AREA 6- 211 FILE DESCRIPTOR BLOCKS 7- 265 VTM - MAIN LINE CODE 8- 525 CHKLIN - CHECK THE LINE NUMBER 9- 550 MAKE THE ASCII LINE NUMBER 9- 572 MAKNUM - MAKE AN ASCII DECIMAL NUMBER 10- 594 MAKCOL - MAKE THE ASCII COLUMN NUMBER 11- 658 WRTEND - WRITE THE ENDING MESSAGE 12- 694 MAKPRL - MAKE THE PROMPT LINE 13- 719 CLOFIL - CLOSE THE OUTPUT FILE (IF OPEN) 14- 756 COMMON EXIT ROUTINES VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 1 1 .TITLE VTM - VT100 MESSAGE FORMATTER 2 .IDENT /04.11/ 3 .ENABL LC 4 ;+ 5 ; 6 ; Free software BY 7 ; Project Software & Development, Inc. 8 ; 9 ; This software is furnished for free and may be used and copied as 10 ; desired. This software or any other copies thereof may be provided or 11 ; otherwise made available to any other person. No title to and 12 ; ownership of the software is hereby transferred or allowed. 13 ; 14 ; The information in this software is subject to change without notice 15 ; and should not be construed as a commitment by PROJECT SOFTWARE 16 ; AND DEVELOPMENT, INC. 17 ; 18 ; PROJECT SOFTWARE assumes no responsibility for the use or reliability 19 ; of this software on any equipment whatsoever. 20 ; 21 ; Project Software & Development, Inc. 22 ; 14 Story St. 23 ; Cambridge, Ma. 02138 24 ; 617-661-1444 25 ; 26 ; 27 ; Title: VTM.MAC 28 ; Author: Robin Miller 29 ; Date: June 10, 1982 30 ; 31 ; Description: 32 ; 33 ; This program is format a message for a VT100 terminal. Various 34 ; options are available (documented in VTPARS.MAC). The default is to 35 ; clear the screen and and write the message in double height characters 36 ; centered in the middle of the screen. 37 ; 38 ; 39 ; Modification History: 40 ; 41 ;- 42 .ENABL AMA 43 .NLIST BEX 44 45 .MCALL ALUN$S, DIR$, EXIT$S, EXST$S, GLUN$, GMCR$, GTSK$, QIOW$ 46 .MCALL GCMLB$, GCML$ 47 .MCALL CLOSE$, FINIT$, NMBLK$ 48 .MCALL FSRSZ$, FDBDF$, FDAT$A, FDOP$A, FDRC$A, FDBF$A VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 2 LOCAL EQUATES 50 .SBTTL LOCAL EQUATES 51 52 ; Local equates: 53 54 000012 LF = 10. ; ASCII FOR LINE FEED 55 000015 CR = 13. ; ASCII FOR CARRIAGE RETURN 56 000033 ESC = 27. ; ASCII FOR ESCAPE 57 58 000014 DEFLIN = 12. ; DEFAULT FIRST LINE 59 000001 TOPLIN = 1 ; DEFAULT TOP LINE 60 000027 BOTLIN = 23. ; DEFAULT BOTTOM LINE 61 000030 PRMLIN = 24. ; DEFAULT PROMPT LINE 62 000001 LFMARG = 1 ; DEFAULT LEFT MARGIN 63 000120 RTMARG = 80. ; DEFAULT RIGHT MARGIN 64 65 000002 DEPTH = 2 ; DEPTH OF COMMAND FILES 66 000400 CMDSIZ = 256. ; SIZE OF COMMAND LINE BUFFER 67 000400 INSIZE = 256. ; SIZE OF INPUT BUFFER 68 000144 FILSIZ = 100. ; SIZE OF FILE NAME BUFFER 69 70 000001 TILUN == 1 ; TERMINAL INPUT LUN 71 000001 TIEFN == 1 ; TERMINAL INPUT EFN 72 000002 TOLUN == 2 ; TERMINAL OUTPUT LUN 73 000002 TOEFN == 2 ; TERMINAL OUTPUT EFN 74 000003 ERRLUN == 3 ; ERROR MESSAGE LUN 75 000003 ERREFN == 3 ; ERROR MESSAGE EFN 76 000120 ERRSIZ == 80. ; SIZE OF ERROR MESSAGES 77 000004 OUTLUN == 4 ; OUTPUT FILE LUN 78 000004 OUTEFN == 4 ; OUTPUT FILE EFN 79 001000 OUTSIZ = 512. ; SIZE OF OUTPUT BUFFER 80 000005 TTYLUN == 5 ; ADDITIONAL TTY LUN 81 000005 TTYEFN == 5 ; AND THE EVENT FLAG VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 3 LOCAL EQUATES 83 84 ; Macro to generate error message. 85 86 .MACRO ERRMSG LABEL,MSG 87 .NCHR $$$, 88 .PSECT $ERMSG,RO,D,REL,CON 89 LABEL: .ASCII "MSG" 90 .EVEN 91 .PSECT 92 MOV #LABEL,R1 93 MOV #$$$,R2 94 CALL OUTMSG 95 .ENDM 96 97 ; Macro to move a constant or a single character. 98 99 .MACRO MOVCHR CHAR 100 .NCHR $$$,^/CHAR/ 101 .IF EQ $$$-1 102 MOVB #''CHAR,@BUFPTR 103 .IFF 104 MOVB #CHAR,@BUFPTR 105 .ENDC 106 INC BUFPTR 107 .ENDM 108 109 ; Macro to move a message to the buffer pointer. 110 111 .MACRO MOVMSG LABEL 112 MOV #LABEL,R0 113 CALL MOVEC 114 .ENDM VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 4 LOCAL EQUATES 116 117 ; Various buffers. 118 119 000000 .PSECT $$ZZZZ,RW,D,REL,CON ; FORCE BUFFERS TO END OF TASK 120 121 000000 001404' BUFPTR::.WORD INBUF ; POINTER TO MESSAGE BUFFER 122 000002 002124' FILPTR::.WORD FILNAM ; POINTER TO FILENAME STORAGE 123 000004 MSGBUF::.BLKB OUTSIZ ; MESSAGE OUTPUT BUFFER 124 001004 CMDBUF::.BLKB CMDSIZ ; COMMAND FILE INPUT BUFFER 125 001404 INBUF:: .BLKB INSIZE ; PARSED INPUT BUFFER 126 002004 ERRBUF::.BLKB ERRSIZ ; ERROR MESSAGE BUFFER 127 002124 FILNAM::.BLKB FILSIZ ; STORAGE FOR ASCII FILE NAME 128 ; LARGE FOR VAX/VMS FILE NAMES 129 130 000000 .PSECT ; RETURN TO ORIGINAL PSECT 131 132 .SBTTL STATUS BIT DEFINITIONS 133 134 ; Status bit definitions: 135 136 000001 B.CLR == 1 ; CLEAR SCREEN OPTION (DEFAULT) 137 000002 B.CENT == 2 ; CENTER MESSAGE ON THE SCREEN 138 000004 B.WIDE == 4 ; WIDE / NARROW SCREEN 0 = NARROW 139 000010 B.ATTR == 10 ; NEED TO REMOVE ATTRIBUTES 140 000020 B.DBLH == 20 ; DOUBLE HEIGHT CHARACTERS 141 000040 B.DBLW == 40 ; DOUBLE WIDTH CHARACTERS 142 000100 B.FILE == 100 ; OUTPUT TO FILE INSTEAD OF TTY 143 000200 B.ITTY == 200 ; INPUT IS FROM THE TERMINAL 144 000400 B.ICNT == 400 ; ITERATION COUNT SPECIFIED 145 001000 B.COL == 1000 ; COLUMN NUMBER SPECIFIED 146 002000 B.RJUS == 2000 ; RIGHT JUSTIFY MESSAGE 147 004000 B.LJUS == 4000 ; LEFT JUSTIFY MESSAGE 148 010000 B.DOIT == 10000 ; DO CURSER POSITIONING 149 020000 B.CTRC == 20000 ; CONTROL/C WAS TYPED 150 040000 B.EXIT == 40000 ; SHOW WE ARE EXITING 151 100000 B.ERRS == 100000 ; ERROR SEEN SOMEWHERE 152 153 ; Second status bit definitions: 154 155 000001 B.REL == 1 ; RELATIVE LINE NUMBER 156 000002 B.DIR == 2 ; DIRECTION +/- = 0/1 VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 5 LOCAL AND GLOBAL STORAGE AREA 158 .SBTTL LOCAL AND GLOBAL STORAGE AREA 159 160 ; Local and global storage area. 161 162 000000 000023 STATUS::.WORD B.CLR!B.CENT!B.DBLH ; STATUS WORD FOR OPTIONS 163 ; SET THE DEFAULT FLAGS 164 ; = CLEAR / CENTER / DOUBLE HEIGHT 165 000002 000000 STAT1:: .WORD 0 ; SECOND STATUS WORD 166 000004 000000 COLUMN::.WORD 0 ; USER SPECIFIED COLUMN # 167 000006 000000 ESCCNT::.WORD 0 ; # OF VT100 CHARACTERS MOVED 168 000010 000000 ICOUNT::.WORD 0 ; ITERATION COUNT -1 = INFINITE 169 000012 000000 COUNT:: .WORD 0 ; CHARACTER COUNT TO CENTER 170 ; MESSAGE IN MIDDLE OF SCREEN 171 000014 000014 LINE:: .WORD DEFLIN ; STARTING LINE NUMBER 172 000016 000000 RELNUM::.WORD 0 ; RELATIVE LINE COUNT 173 000020 000030 PRLINE::.WORD PRMLIN ; PROMPT LINE NUMBER 174 000022 000001 TPLINE::.WORD TOPLIN ; TOP LINE NUMBER 175 000024 000027 BTLINE::.WORD BOTLIN ; BOTTOM LINE NUMBER 176 000026 000001 LMARGN::.WORD LFMARG ; LEFT MARGIN 177 000030 000120 RMARGN::.WORD RTMARG ; RIGHT MARGIN 178 000032 000000 REGTOP::.WORD 0 ; TOP LINE OF SCROLL REGION 179 000034 000000 REGBOT::.WORD 0 ; BOTTOM LINE OF SCROLL REGION 180 000036 000000 DELAYT::.WORD 0 ; AMOUNT OF TIME TO DELAY 181 000040 000000 TTYNAM::.WORD 0 ; OUTPUT TERMINAL NAME 182 000042 000000 TTYNUM::.WORD 0 ; OUTPUT TERMINAL NUMBER 183 000044 000000 BEOPT:: .WORD 0 ; POINTER TO BEGINNING OF 184 ; LAST OPTION FOR ERRORS 185 186 ; Get Command Line control block. 187 188 000046 GCLBLK::GCMLB$ DEPTH,VTM,CMDBUF,TILUN,,CMDSIZ 189 190 000354 000000 TIUNIT: .WORD 0 ; UNIT NUMBER OF TI0: 191 192 000356 GETTSK: GTSK$ TSKBUF ; GET TASK PARAMETERS 193 000362 TSKBUF: .BLKW 16. ; AND THE BUFFER 194 195 000422 000000 MRKFLG::.WORD 0 ; MARK TIME ACTIVE -1 = TRUE 196 000424 000000 VAXFLG::.WORD 0 ; RUNNING ON VAX/VMS -1 = TRUE 197 198 000426 ATTACH: QIOW$ IO.ATA,TOLUN,TOEFN,,TIOSB,,<,,CTRLC> 199 200 000456 000000C FUNC:: .WORD IO.WBT!TF.WAL ; FUNCTION FOR RSX-11M 201 000460 TIOSB:: .BLKW 2 ; TERMINAL I/O STATUS BLOCK 202 000464 000000 BUFADR::.WORD 0 ; OUTPUT BUFFER ADDRESS 203 000466 000000 BYTCNT::.WORD 0 ; OUTPUT BUFFER BYTE COUNT 204 000470 000000 LUN:: .WORD 0 ; CURRENT LUN FOR QIOW$ 205 000472 000000 EFN:: .WORD 0 ; AND THE EFN 206 207 000474 GETLUN::GLUN$ TILUN,LUNBUF ; GET LUN INFORMATION 208 000502 LUNBUF::.BLKW 6 ; AND THE BUFFER 209 000504' TTUNIT == LUNBUF+G.LUNU ; POINTER TO UNIT NUMBER VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 6 FILE DESCRIPTOR BLOCKS 211 .SBTTL FILE DESCRIPTOR BLOCKS 212 ;+ 213 ; 214 ; There is a FDB used for each LUN so VTM will operate properly 215 ; on VAX/VMS. Normally I'd assign TI0: to input, output, and 216 ; the error LUNs. But this prevents VTM from running in BATCH 217 ; and command procedures on VAX/VMS. 218 ; 219 ;- 220 221 000516 FSRSZ$ 4 ; FILE STORAGE FOR 4 OPEN FILES 222 223 000516 TIFDB:: 224 000516 FDBDF$ ; FDB FOR TERMINAL INPUT 225 000656 FDAT$A R.VAR,FD.CR,,, ; VARIABLE LENGTH RECORDS 226 000656 FDRC$A ,CMDBUF,CMDSIZ ; LOCATE MODE / MAX SIZE 227 000656 FDOP$A TILUN,,DEFNB,FO.RD ; OPEN FOR READ 228 000656 FDBF$A TIEFN,CMDSIZ,, ; INIT BLOCK BUFFER SECTION 229 230 000656 TOFDB:: 231 000656 FDBDF$ ; FDB FOR TERMINAL OUTPUT 232 001016 FDAT$A R.VAR,,,, ; VARIABLE LENGTH RECORDS 233 001016 FDRC$A ,MSGBUF,OUTSIZ ; LOCATE MODE / MAX SIZE 234 001016 FDOP$A TOLUN,,OUTNB,FO.WRT ; OPEN FOR WRITE 235 001016 FDBF$A TOEFN,OUTSIZ,, ; INIT BLOCK BUFFER SECTION 236 237 001016 ERRFDB:: 238 001016 FDBDF$ ; FDB FOR ERROR MESSAGES 239 001156 FDAT$A R.VAR,FD.CR,,, ; VARIABLE LENGTH RECORDS 240 001156 FDRC$A ,ERRBUF,ERRSIZ ; LOCATE MODE / MAX SIZE 241 001156 FDOP$A ERRLUN,,ERRNB,FO.WRT ; OPEN FOR WRITE 242 001156 FDBF$A ERREFN,OUTSIZ,, ; INIT BLOCK BUFFER SECTION 243 244 001156 OUTFDB:: 245 001156 FDBDF$ ; FDB FOR OUTPUT FILE 246 001316 FDAT$A R.VAR,,,, ; VARIABLE LENGTH RECORDS 247 001316 FDRC$A ,MSGBUF,OUTSIZ ; LOCATE MODE / MAX SIZE 248 001316 FDOP$A OUTLUN,,DEFNB,FO.WRT!FA.NSP ; OPEN FOR WRITE 249 001316 FDBF$A OUTEFN,OUTSIZ,, ; INIT BLOCK BUFFER SECTION 250 251 ; Default file name blocks. 252 253 001316 OUTNB: NMBLK$ VTM,OUT,,SY,0 ; TERMINAL OUTPUT 254 001354 ERRNB: NMBLK$ VTM,ERR,,SY,0 ; ERROR MESSAGES 255 001412 DEFNB: NMBLK$ VTM,DAT,,SY,0 ; OUTPUT FILE NAME BLOCK 256 257 ; Terminal output devices: 258 259 001450 124 111 060 TISTR: .ASCIZ "TI0:" ; TI0: FOR RSX-11M 260 001455 123 131 123 SYSIN: .ASCIZ "SYS$INPUT:" ; INPUT FOR VAX/VMS 261 001470 123 131 123 SYSOUT: .ASCIZ "SYS$OUTPUT:" ; OUTPUT FOR VAX/VMS 262 001504 123 131 123 SYSERR: .ASCIZ "SYS$ERROR:" ; ERRORS FOR VAX/VMS 263 .EVEN VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 7 VTM - MAIN LINE CODE 265 .SBTTL VTM - MAIN LINE CODE 266 ;+ 267 ; 268 ; VTM - Main line code. 269 ; 270 ; This program is used to format a message for a VT100 terminal. 271 ; 272 ;- 273 .ENABL LSB 274 275 001520 013700 000000G VTM:: MOV @#.FSRPT,R0 ; GET POINTER TO FSR 276 001524 005760 000000G TST A.DFUI(R0) ; HAS .FINIT BEEN DONE (DDT) 277 001530 001002 BNE 10$ ; IF NE, YES (DO ONLY ONCE) 278 001532 FINIT$ ; DO THE FINIT 279 280 001536 10$: DIR$ #GETLUN ; GET LUN INFORMATION 281 001544 004737 000000G CALL CHKDIR ; CHECK/REPORT DIRECTIVE ERROR 282 001550 113737 000476' 000354' MOVB GETLUN+G.LUNU,TIUNIT ; SAVE THE TERMINAL UNIT # 283 001556 DIR$ #GETTSK ; GET TASK PARAMETERS 284 001564 004737 000000G CALL CHKDIR ; CHECK/REPORT DIRECTIVE ERROR 285 001570 005037 000424' CLR VAXFLG ; PRESUME NOT ON VAX/VMS 286 001574 122737 000005 000416' CMPB #5,TSKBUF+G.TSSY ; ARE WE ON VAX/VMS ? 287 001602 001014 BNE 20$ ; IF NE, NO 288 001604 012737 177777 000424' MOV #-1,VAXFLG ; YES, SET THE FLAG TRUE 289 001612 012737 000000G 000456' MOV #IO.WAL,FUNC ; FUNCTION CODE FOR VAX/VMS 290 001620 005337 000024' DEC BTLINE ; ADJUST BOTTOM LINE 291 001624 005337 000020' DEC PRLINE ; ADJUST PROMPT LINE 292 001630 005337 000000G DEC BLINB ; ADJUST BOTTOM BOX LINE 293 294 ; Open the input, output, and error LUNS. For RSX-11M, these 295 ; should be asssigned at TKB time to TI:. That way they can 296 ; be reassigned using the REAssign MCR command to a disk. 297 ; For VAX/VMS, SYS$INPUT, SYS$OUTPUT, and SYS$ERROR are used. 298 ; These can be reassigned using the ASSIGN/USER file SYS$xxxxx. 299 300 ; Do SYS$ERROR first incase we get errors on the others. 301 302 001634 012700 001016' 20$: MOV #ERRFDB,R0 ; ERROR MESSAGE FDB 303 001640 012701 001450' MOV #TISTR,R1 ; USE TI0: ON RSX-11M 304 001644 005737 000424' TST VAXFLG ; ARE WE ON VAX/VMS ? 305 001650 001402 BEQ 25$ ; IF EQ, NO 306 001652 012701 001504' MOV #SYSERR,R1 ; YES, WRITE TO SYS$ERROR 307 001656 004737 000000G 25$: CALL OPENW ; OPEN THE LUN FOR WRITE 308 001662 103460 BCS 100$ ; IF CS, ERROR 309 310 ; Now do the input LUN (SYS$INPUT). 311 312 001664 012700 000516' MOV #TIFDB,R0 ; TERMINAL INPUT FDB 313 001670 012701 001450' MOV #TISTR,R1 ; USE TI0: ON RSX-11M 314 001674 005737 000424' TST VAXFLG ; ARE WE ON VAX/VMS ? 315 001700 001402 BEQ 30$ ; IF EQ, NO 316 001702 012701 001455' MOV #SYSIN,R1 ; YES, READ FROM SYS$INPUT 317 001706 004737 000000G 30$: CALL OPENR ; OPEN THE LUN FOR READ 318 001712 103444 BCS 100$ ; IF CS, ERROR 319 001714 CLOSE$ ; NOW CLOSE IT SO GCML$ 320 ; CAN READ IT 321 VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 7-1 VTM - MAIN LINE CODE 322 ; Open the output LUN (SYS$OUTPUT). 323 324 001720 012700 000656' MOV #TOFDB,R0 ; TERMINAL OUTPUT FDB 325 001724 012701 001450' MOV #TISTR,R1 ; USE TI0: ON RSX-11M 326 001730 005737 000424' TST VAXFLG ; ARE WE ON VAX/VMS ? 327 001734 001402 BEQ 40$ ; IF EQ, NO 328 001736 012701 001470' MOV #SYSOUT,R1 ; YES, WRITE TO SYS$OUTPUT 329 001742 004737 000000G 40$: CALL OPENW ; OPEN THE LUN FOR WRITE 330 001746 103426 BCS 100$ ; IF CS, ERROR 331 332 001750 132760 000000G 000017 BITB #FD.TTY,F.RCTL(R0) ; IS OUTPUT TO A TERMINAL ? 333 001756 001407 BEQ 50$ ; IF EQ, NO 334 001760 CLOSE$ ; YES, CLOSE THE FILE 335 001764 DIR$ #ATTACH ; ATTACH WITH CTRL/C AST 336 001772 004737 000000G CALL CHKDIR ; CHECK/REPORT DIRECTIVE ERROR 337 338 001776 012700 000046' 50$: MOV #GCLBLK,R0 ; ADDRESS OF CONTROL BLOCK 339 002002 152760 000030 000141 BISB #GE.CON!GE.LC,G.MODE(R0) ; SET FOR CONTINUATION 340 ; LINES AND LOWERCASE INPUT 341 002010 016001 000046 MOV F.DFNB(R0),R1 ; ADDRESS OF FILE NAME BLOCK 342 002014 012761 106255 000014 MOV #^RVTM,N.FTYP(R1) ; DEFAULT EXTENSION TO .VTM 343 002022 000406 BR GETCMD ; AND CONTINUE ... 344 345 ; We've had an error openning the input or output LUNs. 346 347 002024 016000 000052 100$: MOV F.ERR(R0),R0 ; COPY THE ERROR CODE 348 002030 004737 000000G CALL WRTERR ; TRY TO WRITE THE ERROR 349 002034 000137 003536' JMP EXISEV ; EXIT WITH SEVERE ERROR 350 351 .DSABL LSB 352 353 ; Get the command line and check for errors. 354 355 .ENABL LSB 356 357 002040 012700 000046' GETCMD::MOV #GCLBLK,R0 ; ADDRESS OF CONTROL BLOCK 358 002044 GCML$ ; GET A COMMAND LINE 359 002054 103052 BCC GOTCMD ; IF CC, GOT A COMMAND 360 361 002056 122760 177766 000140 CMPB #GE.EOF,G.ERR(R0) ; END OF FILE DETECTED ? 362 002064 001002 BNE 10$ ; IF NE, NO 363 002066 000137 003424' JMP EXIT ; YES, EXIT 364 365 ; For the errors GE.IOR & GE.OPR, F.ERR in the FDB has the error code. 366 367 002072 122760 177777 000140 10$: CMPB #GE.IOR,G.ERR(R0) ; I/O ERROR DETECTED ? 368 002100 001424 BEQ 20$ ; IF EQ, YES 369 002102 122760 177776 000140 CMPB #GE.OPR,G.ERR(R0) ; FILE OPEN ERROR ? 370 002110 001420 BEQ 20$ ; IF EQ, YES 371 002112 122760 177775 000140 CMPB #GE.BIF,G.ERR(R0) ; SYNTAX ERROR ? 372 002120 001421 BEQ 30$ ; IF EQ, YES 373 002122 122760 177774 000140 CMPB #GE.MDE,G.ERR(R0) ; MAX @ DEPTH EXCEEDED ? 374 002130 001010 BNE 20$ ; IF NE, NO (TRY FCS ERROR) 375 002132 ERRMSG TOOMNY,<%VTM-F-TOOMANY, maximum @ file depth exceeded.> 376 002146 000137 003424' JMP EXIT ; CONSIDER THIS FATAL 377 378 ; Report an error message. VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 7-2 VTM - MAIN LINE CODE 379 380 002152 016000 000052 20$: MOV F.ERR(R0),R0 ; COPY THE ERROR CODE 381 002156 004737 000000G CALL WRTERR ; WRITE THE ERROR MESSAGE 382 002162 000726 BR GETCMD ; AND GET THE NEXT COMMAND 383 384 002164 30$: ERRMSG SYNERR,<%VTM-W-SYNERR, syntax error.> 385 002200 000717 BR GETCMD ; GET THE NEXT COMMAND 386 387 .DSABL LSB 388 389 ; Got a command line. 390 391 002202 012700 000046' GOTCMD::MOV #GCLBLK,R0 ; ADDRESS OF CONTROL BLOCK 392 002206 016003 000146 MOV G.CMLD(R0),R3 ; COPY THE BYTE COUNT 393 ; BEQ GETCMD ; IF EQ, NOTHING INPUT 394 002212 052737 000200 000000' BIS #B.ITTY,STATUS ; PRESUME INPUT FROM TTY 395 002220 132760 000000G 000017 BITB #FD.TTY,F.RCTL(R0) ; INPUT FROM THE TERMINAL ? 396 002226 001003 BNE 10$ ; IF NE, YES 397 002230 042737 000200 000000' BIC #B.ITTY,STATUS ; NO, MUST BE FROM FILE 398 002236 016004 000150 10$: MOV G.CMLD+2(R0),R4 ; INPUT BUFFER ADDRESS 399 002242 005703 TST R3 ; IS THERE A BYTE COUNT ? 400 002244 003002 BGT 15$ ; IF EQ, YES (CONTINUE) 401 002246 000137 002720' JMP NOMSG ; NO MESSAGE TO OUTPUT 402 002252 010400 15$: MOV R4,R0 ; COPY THE BUFFER ADDRESS 403 002254 060300 ADD R3,R0 ; POINT TO END OF LINE 404 002256 105010 CLRB (R0) ; NOW, TERMINATE WITH NULL 405 002260 004737 000000G CALL CVTOPT ; CONVERT OPTIONS TO UPPERCASE 406 407 ; 408 ; Use TPARS to parse the command line. 409 ; 410 ; Inputs: 411 ; R1 = bit 0 in the low byte controls processing of blanks/tabs: 412 ; if 0, ignore blanks, if 1 then pass blanks and tabs. 413 ; the high byte contains the number of characters that 414 ; keywords are alloewed to be abbreviated (0 = exact). 415 ; R3 = the input string byte count, 416 ; R4 = the input buffer address. 417 ; 418 ; Outputs: 419 ; R3 = zero on success or 420 ; remaining byte count on syntax error. 421 ; R4 = end of input string or 422 ; updated buffer address on syntax error. 423 ; 424 425 002264 042737 001000 000000' BIC #B.COL,STATUS ; MUST SPECIFY COLUMN NUMBER 426 002272 042737 010000 000000' BIC #B.DOIT,STATUS ; SOME COMMANDS FORCE CURSERING 427 002300 042737 006000 000000' BIC #B.LJUS!B.RJUS,STATUS ; THESE ARE ALSO ONE SHOTS 428 002306 012737 001404' 000000' MOV #INBUF,BUFPTR ; INITIALIZE THE BUFFER POINTER 429 002314 005037 000012' CLR COUNT ; CHARACTER COUNT FOR CENTERING 430 002320 012701 000401 MOV #<<400*1>+1>,R1 ; PASS BLANKS, MATCH 1 CHARACTER 431 002324 012702 000000G MOV #KEYWRD,R2 ; ADDRESS OF KEYWORD TABLE 432 002330 012705 000000G MOV #START,R5 ; STARTING TRANSITION ADDRESS 433 002334 004737 000000G CALL .TPARS ; NOW DO THE PARSE 434 002340 032737 020000 000000' BIT #B.CTRC,STATUS ; WAS CTRL/C TYPED ? 435 002346 001402 BEQ 17$ ; IF EQ, NO VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 7-3 VTM - MAIN LINE CODE 436 002350 000137 003424' JMP EXIT ; YES, EXIT NOW 437 002354 103012 17$: BCC 30$ ; IF CC, SUCCESS (.TPARS) 438 002356 013704 000044' MOV BEOPT,R4 ; POINTER TO LAST OPTION 439 440 ; On syntax errors, output the remaining characters. 441 442 002362 112477 000000' 20$: MOVB (R4)+,@BUFPTR ; COPY THE REST OF THE LINE 443 002366 001405 BEQ 30$ ; IF EQ, FINISHED 444 002370 005237 000000' INC BUFPTR ; POINT TO NEXT LOCATION 445 002374 005237 000012' INC COUNT ; COUNT THIS CHARACTER 446 002400 000770 BR 20$ ; LOOP UNTIL DONE 447 448 002402 032737 000010 000000' 30$: BIT #B.ATTR,STATUS ; ARE ATTRIBUTES STILL ON ? 449 002410 001402 BEQ 40$ ; IF EQ, NO 450 002412 004737 000000G CALL ATTOFF ; YES, TURN THEM OFF 451 452 002416 105077 000000' 40$: CLRB @BUFPTR ; TERMINATE THE INPUT BUFFER 453 454 ; See if we should clear the screen. 455 456 002422 012737 000004' 000000' MOV #MSGBUF,BUFPTR ; STORE USER MESSAGE HERE 457 002430 105077 000000' CLRB @BUFPTR ; INITIALIZE THE FIRST BYTE 458 002434 032737 000001 000000' BIT #B.CLR,STATUS ; SHOULD WE CLEAR THE SCREEN ? 459 002442 001402 BEQ 50$ ; IF EQ, NO 460 002444 004737 000000G CALL CLRSCR ; MOVE IN SCLEAR SCREEN 461 462 ; If there is no message to write, check the input buffer. 463 464 002450 005737 000012' 50$: TST COUNT ; USER SPECIFY A MESSAGE ? 465 002454 003011 BGT 60$ ; IF GT, YES (CONTINUE) 466 002456 032737 010000 000000' BIT #B.DOIT,STATUS ; DO CURSER POSITIONING ? 467 002464 001005 BNE 60$ ; IF NE, YES 468 002466 MOVMSG INBUF ; COPY THE INPUT BUFFER 469 002476 000462 BR 120$ ; AND CONTINUE ... 470 471 ; Form the first half of the message. 472 473 002500 013701 000014' 60$: MOV LINE,R1 ; COPY THE STARTING LINE # 474 002504 004737 002764' CALL MAKLIN ; MAKE THE ASCII LINE # 475 002510 004737 003060' CALL MAKCOL ; MAKE THE ASCII COLUMN # 476 002514 032737 000040 000000' BIT #B.DBLW,STATUS ; DOUBLE WIDTH MESSAGE ? 477 002522 001403 BEQ 70$ ; IF EQ, NO 478 002524 004737 000000G CALL DWIDTH ; MOVE THE DOUBLE WIDTH 479 002530 000406 BR 80$ ; AND CONTINUE ... 480 481 002532 032737 000020 000000' 70$: BIT #B.DBLH,STATUS ; DOUBLE HEIGHT MESSAGE ? 482 002540 001402 BEQ 80$ ; IF EQ, NO 483 002542 004737 000000G CALL DHTOP ; MOVE IN THE TOP HALF 484 485 002546 80$: MOVMSG ; COPY THE MESSAGE 486 487 ; Form the second half of the message. 488 489 002556 032737 000020 000000' BIT #B.DBLH,STATUS ; DOUBLE HEIGHT MESSAGE ? 490 002564 001423 BEQ 100$ ; IF EQ, NO (SINGLE LINE) 491 002566 005737 000000G TST FENTRY ; OUTPUTTING TO A FILE ? 492 002572 001402 BEQ 90$ ; IF EQ, NO (APPEND MORE) VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 7-4 VTM - MAIN LINE CODE 493 002574 004737 000000G CALL WRTMSG ; YES, WRITE FIRST HALF 494 ; SO RECORD ISN'T TOO BIG 495 002600 005237 000014' 90$: INC LINE ; POINT TO THE NEXT LINE # 496 002604 013701 000014' MOV LINE,R1 ; NOW COPY IT FOR MAKLIN 497 002610 004737 002764' CALL MAKLIN ; MAKE THE ASCII LINE # 498 002614 004737 003060' CALL MAKCOL ; MAKE THE ASCII COLUMN # 499 002620 004737 000000G CALL DHBOT ; MOVE THE BOTTOM HALF 500 002624 MOVMSG ; COPY THE MESSAGE AGAIN 501 502 002634 005237 000014' 100$: INC LINE ; POINT TO THE NEXT LINE # 503 002640 004737 002730' CALL CHKLIN ; CHECK RANGE OF LINE # 504 505 002644 105737 000004' 120$: TSTB MSGBUF ; IS THERE ANYTHING TO OUTPUT ? 506 002650 001423 BEQ NOMSG ; IF EQ, NO (GET NEXT COMMAND) 507 002652 004737 000000G CALL WRTMSG ; WRITE THE CURRENT BUFFER 508 002656 032737 000400 000000' BIT #B.ICNT,STATUS ; ITERATION COUNT SPECIFIED ? 509 002664 001415 BEQ NOMSG ; IF EQ, NO (CONTINUE...) 510 002666 022737 177777 000010' CMP #-1,ICOUNT ; LOOP INFINITLY ? 511 002674 001407 BEQ 130$ ; IF EQ, YES 512 002676 005337 000010' DEC ICOUNT ; ARE WE FINISHED ? 513 002702 001004 BNE 130$ ; IF NE, MORE TO GO 514 002704 042737 000400 000000' BIC #B.ICNT,STATUS ; NO MORE ITERATION COUNT 515 002712 000402 BR NOMSG ; AND CONTINUE ... 516 517 002714 000137 002202' 130$: JMP GOTCMD ; NOPE, USE SAME COMMAND 518 519 ; If input is from the terminal, write the ending sequence 520 ; to position to and clear the prompt line. 521 522 002720 004737 003224' NOMSG: CALL WRTEND ; WRITE THE ENDING MESSAGE 523 002724 000137 002040' JMP GETCMD ; GET THE NEXT COMMAND VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 8 CHKLIN - CHECK THE LINE NUMBER 525 .SBTTL CHKLIN - CHECK THE LINE NUMBER 526 ;+ 527 ; 528 ; CHKLIN - Check the line number to ensure its not too large. 529 ; 530 ; If the current line number is too large, we'll use the top line number. 531 ; 532 ; Inputs: 533 ; LINE = the current line number. 534 ; 535 ; Outputs: 536 ; All registers are preserved. 537 ; 538 ;- 539 002730 013746 000024' CHKLIN::MOV BTLINE,-(SP) ; COPY THE BOTTOM LINE 540 002734 032737 000020 000000' BIT #B.DBLH,STATUS ; DOUBLE HEIGHT OUTPUT ? 541 002742 001401 BEQ 10$ ; IF EQ, NO 542 002744 005316 DEC (SP) ; YES, ADJUST BY ONE 543 544 002746 023726 000014' 10$: CMP LINE,(SP)+ ; ARE WE PAST THE BOTTOM ? 545 002752 003403 BLE 20$ ; IF LE, NO 546 002754 013737 000022' 000014' MOV TPLINE,LINE ; YES, BACK TO THE TOP LINE 547 548 002762 000207 20$: RETURN VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 9 MAKE THE ASCII LINE NUMBER 550 .SBTTL MAKE THE ASCII LINE NUMBER 551 ;+ 552 ; 553 ; MAKLIN - Makes the ASCII line number for VT100 escape sequence. 554 ; 555 ; Inputs: 556 ; BUFPTR = pointer to the output buffer. 557 ; R1 = the binary line number. 558 ; 559 ; Outputs: 560 ; BUFPTR = updated buffer pointer. 561 ; 562 ; All registers are preserved. 563 ; 564 ;- 565 002764 004237 000000G MAKLIN::JSR R2,$SAVVR ; SAVE R0 - R2 566 002770 MOVCHR ; MOVE IN THE 567 003002 MOVCHR <[> ; ESCAPE SEQUENCE 568 003014 004737 003034' CALL MAKNUM ; MAKE AN ASCII LINE # 569 003020 MOVCHR <;> ; PREPARE FOR COLUMN # 570 003032 000207 RETURN 571 572 .SBTTL MAKNUM - MAKE AN ASCII DECIMAL NUMBER 573 ;+ 574 ; 575 ; MAKNUM - Make an ASCII decimal number. 576 ; 577 ; Inputs: 578 ; BUFPTR = pointer to the output buffer. 579 ; R1 = the binary number. 580 ; 581 ; Outputs: 582 ; BUFPTR = updated buffer pointer. 583 ; 584 ; All registers are preserved. 585 ; 586 ;- 587 003034 004237 000000G MAKNUM::JSR R2,$SAVVR ; SAVE REGISTERS R0 - R2 588 003040 013700 000000' MOV BUFPTR,R0 ; COPY THE BUFFER POINTER 589 003044 005002 CLR R2 ; SET FOR ZERO SUPPRESSION 590 003046 004737 000000G CALL $CBDMG ; CONVERT TO DECIMAL ASCII 591 003052 010037 000000' MOV R0,BUFPTR ; SAVE THE NEW BUFFER ADDRESS 592 003056 000207 RETURN VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 10 MAKCOL - MAKE THE ASCII COLUMN NUMBER 594 .SBTTL MAKCOL - MAKE THE ASCII COLUMN NUMBER 595 ;+ 596 ; 597 ; MAKCOL - Makes the ASCII column number for VT100 escape sequence. 598 ; 599 ; Inputs: 600 ; BUFPTR = the output buffer address. 601 ; COUNT = contains the message byte count. 602 ; 603 ; Outputs: 604 ; BUFPTR = updated output buffer address. 605 ; 606 ; All registers are preserved. 607 ; 608 ;- 609 003060 004237 000000G MAKCOL::JSR R2,$SAVVR ; SAVE REGISTERS R0 - R2 610 003064 032737 001000 000000' BIT #B.COL,STATUS ; WAS COLUMN # SPECIFIED ? 611 003072 001405 BEQ 10$ ; IF EQ, NO 612 003074 013701 000004' MOV COLUMN,R1 ; YES, COPY IT 613 003100 004737 000000G CALL ADJCOL ; ADJUST COLUMN BY WIDTH 614 003104 000433 BR 50$ ; AND CONTINUE ... 615 616 ; Check for left justification. 617 618 003106 032737 004000 000000' 10$: BIT #B.LJUS,STATUS ; WANT TO LEFT JUSTIFY ? 619 003114 001403 BEQ 30$ ; IF EQ, NO 620 003116 013701 000026' 20$: MOV LMARGN,R1 ; YES, USE LEFT MARGIN 621 003122 000424 BR 50$ ; AND CONVERT IT 622 623 ; See if message should be centered. 624 625 003124 013701 000030' 30$: MOV RMARGN,R1 ; COPY THE RIGHT MARGIN 626 003130 004737 000000G CALL ADJCOL ; ADJUST COLUMN BY WIDTH 627 003134 013702 000012' MOV COUNT,R2 ; COPY THE COUNT 628 003140 020201 CMP R2,R1 ; IS LINE TOO WIDE ? 629 003142 003401 BLE 40$ ; IF LE, NO 630 003144 010102 MOV R1,R2 ; YES, TRUNCATE IT 631 632 003146 160201 40$: SUB R2,R1 ; CALCULATE COLUMN # 633 634 ; Check for right justification. 635 636 003150 032737 002000 000000' BIT #B.RJUS,STATUS ; RIGHT JUSTIFY MESSAGE ? 637 003156 001005 BNE 45$ ; IF NE, YES (NO DIVIDE) 638 639 ; Center the message. 640 641 003160 032737 000002 000000' BIT #B.CENT,STATUS ; CENTER THE MESSAGE ? 642 003166 001753 BEQ 20$ ; IF EQ, NO (LEFT MARGIN) 643 003170 006201 ASR R1 ; DIVIDE BY 2 644 645 003172 005201 45$: INC R1 ; ADJUST COLUMN BY 1 646 647 003174 004737 003034' 50$: CALL MAKNUM ; MAKE THE ASCII LINE # 648 003200 MOVCHR ; END OF CURSER ADDRESSING 649 650 ; If clear screen disabled, clear line where curser is. VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 10-1 MAKCOL - MAKE THE ASCII COLUMN NUMBER 651 652 003212 032737 000001 000000' BIT #B.CLR,STATUS ; CLEAR SCREEN ENABLED ? 653 003220 001000 BNE 60$ ; IF NE, YES 654 ; CALL CLIN ; NO, CLEAR THE LINE 655 656 003222 000207 60$: RETURN VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 11 WRTEND - WRITE THE ENDING MESSAGE 658 .SBTTL WRTEND - WRITE THE ENDING MESSAGE 659 ;+ 660 ; 661 ; WRTEND - Write the ending message to the terminal. 662 ; 663 ; This routine is used to position to the prompt line and clear the 664 ; prompt line if input is from the terminal. If the input is from 665 ; a command file, the prompt line is not written until we hit EOF. 666 ; 667 ; Inputs: 668 ; None 669 ; 670 ; Outputs: 671 ; BUFPTR = the updated buffer pointer. 672 ; R0 and R1 are destroyed. 673 ; 674 ;- 675 003224 032737 040000 000000' WRTEND::BIT #B.EXIT,STATUS ; ARE WE NOW EXITING ? 676 003232 001004 BNE 5$ ; IF NE, YES (DO PROMPT) 677 003234 032737 000200 000000' BIT #B.ITTY,STATUS ; INPUT COMING FROM TTY ? 678 003242 001415 BEQ 30$ ; IF EQ, NO (SKIP ERASE) 679 680 003244 004737 003300' 5$: CALL MAKPRL ; MAKE THE PROMPT LINE 681 003250 004737 000000G CALL CLIN ; NO, ERASE THE LINE THEN 682 683 ; On RSX-11M, back the cursor up one line since the MCR prompt 684 ; is preceded by a line feed. 685 686 003254 005737 000424' 10$: TST VAXFLG ; ARE WE RUNNING ON VAX/VMS ? 687 003260 001002 BNE 20$ ; IF NE, YES (CONTINUE ...) 688 003262 004737 000000G CALL CUP ; NO, BACK THE CURSOR UP 689 690 003266 004737 000000G 20$: CALL SETBUF ; SET BUFFER AND BYTE COUNT 691 003272 004737 000000G CALL WRTTTY ; WRITE IT TO THE TERMINAL 692 003276 000207 30$: RETURN VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 12 MAKPRL - MAKE THE PROMPT LINE 694 .SBTTL MAKPRL - MAKE THE PROMPT LINE 695 ;+ 696 ; 697 ; MAKPRL - Make the prompt line. 698 ; 699 ; This routine is used to position to the prompt line. 700 ; 701 ; Inputs: 702 ; None 703 ; 704 ; Outputs: 705 ; BUFPTR = the updated buffer pointer. 706 ; R0 and R1 are destroyed. 707 ; 708 ;- 709 003300 012737 000004' 000000' MAKPRL::MOV #MSGBUF,BUFPTR ; SET THE BUFFER POINTER 710 003306 032737 000001 000002' BIT #B.REL,STAT1 ; SPECIFY A RELATIVE LINE ? 711 003314 001402 BEQ 10$ ; IF EQ, NO 712 003316 004737 000000G CALL MAKRPL ; YES, GO MAKE IT 713 003322 013701 000020' 10$: MOV PRLINE,R1 ; COPY THE PROMPT LINE # 714 003326 004737 002764' CALL MAKLIN ; MAKE THE ASCII LINE # 715 003332 MOVCHR <1> ; MOVE IN COLUMN ONE 716 003344 MOVCHR ; AND THE LAST PART 717 003356 000207 RETURN VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 13 CLOFIL - CLOSE THE OUTPUT FILE (IF OPEN) 719 .SBTTL CLOFIL - CLOSE THE OUTPUT FILE (IF OPEN) 720 ;+ 721 ; 722 ; CLOFIL - Close the output file (if open). 723 ; 724 ; Inputs: 725 ; None 726 ; 727 ; Outputs: 728 ; Register R0 is destroyed. 729 ; 730 ;- 731 003360 005737 001246' CLOFIL::TST OUTFDB+F.BDB ; IS THERE A FILE OPEN ? 732 003364 001416 BEQ 10$ ; IF EQ, NO (RETURN) 733 003366 012700 001156' MOV #OUTFDB,R0 ; ADDRESS OF OUTPUT FDB 734 003372 004737 000000G CALL .TRNCL ; YES, TRUNCATE AND CLOSE 735 003376 042737 000100 000000' BIC #B.FILE,STATUS ; SHOW OUTPUT FILE CLOSED 736 003404 005037 000000G CLR FENTRY ; DISABLE OUTPUT TO FILE 737 003410 012737 002124' 000002' MOV #FILNAM,FILPTR ; RESET THE FILE NAME POINTER 738 003416 105077 000002' CLRB @FILPTR ; MAKE IT A NULL STRING 739 003422 000207 10$: RETURN 740 741 ; Do cleanup and exit. 742 743 003424 052737 040000 000000' EXIT:: BIS #B.EXIT,STATUS ; SHOW WE ARE EXITING 744 003432 004737 003300' CALL MAKPRL ; MAKE THE PROMPT LINE 745 003436 004737 000000G CALL WRTMSG ; WRITE IT EVERYWHERE 746 003442 004737 003360' CALL CLOFIL ; CLOSE THE FILE (IF OPEN) 747 003446 004737 003224' CALL WRTEND ; WRITE THE ENDING MESSAGE 748 003452 CLOSE$ #TOFDB ; CLOSE THE TERMINAL OUTPUT 749 003462 CLOSE$ #ERRFDB ; CLOSE THE ERROR MESSAGE 750 003472 032737 020000 000000' BIT #B.CTRC,STATUS ; WAS CTRL/C TYPED TO ABORT ? 751 003500 001010 BNE EXIWAR ; IF NE, YES (EXIT W/WARNING) 752 003502 032737 100000 000000' BIT #B.ERRS,STATUS ; WAS AN ERROR SEEN SOMEWHERE ? 753 003510 001007 BNE EXIERR ; YES, EXIT WITH ERROR 754 003512 000400 BR EXISUC ; NOPE, EXIT WITH SUCCESS VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 14 COMMON EXIT ROUTINES 756 .SBTTL COMMON EXIT ROUTINES 757 ; 758 ; Common exit routines: 759 ; 760 761 003514 012700 000001 EXISUC::MOV #EX$SUC,R0 ; SET SUCCESS STATUS 762 003520 000410 BR EXST ; AND EXIT WITH STATUS 763 764 003522 012700 000000 EXIWAR::MOV #EX$WAR,R0 ; SET WARNING STATUS 765 003526 000405 BR EXST ; AND EXIT WITH STATUS 766 767 003530 012700 000002 EXIERR::MOV #EX$ERR,R0 ; SET ERROR STATUS 768 003534 000402 BR EXST ; AND EXIT WITH STATUS 769 770 003536 012700 000004 EXISEV::MOV #EX$SEV,R0 ; SET SEVERE STATUS 771 772 ; Exit with status in R0. 773 774 003542 EXST:: EXST$S R0 ; EXIT WITH STATUS 775 003552 EXIT$S ; IN CASE EXST$S FAILS 776 777 001520' .END VTM VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 14-1 SYMBOL TABLE ADJCOL= ****** GX ESCCNT 000006RG F.RACC= 000016 G.TSTN= 000000 RELNUM 000016RG ATTACH 000426R EXIERR 003530RG F.RATT= 000001 G.TSTS= 000032 RMARGN 000030RG ATTOFF= ****** GX EXISEV 003536RG F.RCNM= 000034 G.TSVA= 000026 RTMARG= 000120 A.DFUI= ****** GX EXISUC 003514RG F.RCTL= 000017 G.TSVL= 000030 RX$IAS= 000003 BEOPT 000044RG EXIT 003424RG F.RSIZ= 000002 ICOUNT 000010RG RX$11D= 000000 BLINB = ****** GX EXIWAR 003522RG F.RTYP= 000000 INBUF 001404RG 002 RX$11M= 000001 BOTLIN= 000027 EXST 003542RG F.SEQN= 000100 INSIZE= 000400 RX$11S= 000002 BTLINE 000024RG EX$ERR= 000002 F.SPDV= 000072 IO.ATA= ****** GX R.VAR = ****** GX BUFADR 000464RG EX$SEV= 000004 F.SPUN= 000074 IO.WAL= ****** GX SETBUF= ****** GX BUFPTR 000000RG 002 EX$SUC= 000001 F.STBK= 000036 IO.WBT= ****** GX START = ****** GX BYTCNT 000466RG EX$WAR= 000000 F.UNIT= 000136 KEYWRD= ****** GX STATUS 000000RG B.ATTR= 000010 G FA.NSP= ****** GX F.URBD= 000020 LF = 000012 STAT1 000002RG B.CENT= 000002 G FD.CCL= ****** GX F.VBN = 000064 LFMARG= 000001 SYNERR 000056R 004 B.CLR = 000001 G FD.CR = ****** GX F.VBSZ= 000060 LINE 000014RG SYSERR 001504R B.COL = 001000 G FD.REC= ****** GX GCLBLK 000046RG LMARGN 000026RG SYSIN 001455R B.CTRC= 020000 G FD.TTY= ****** GX GETCMD 002040RG LUN 000470RG SYSOUT 001470R B.DBLH= 000020 G FENTRY= ****** GX GETLUN 000474RG LUNBUF 000502RG S.ANM1= 000014 B.DBLW= 000040 G FILNAM 002124RG 002 GETTSK 000356R MAKCOL 003060RG S.ANM2= 000005 B.DIR = 000002 G FILPTR 000002RG 002 GE.BIF= 177775 MAKLIN 002764RG S.BFHD= 000020 B.DOIT= 010000 G FILSIZ= 000144 GE.CLO= 000004 MAKNUM 003034RG S.FATT= 000016 B.ERRS= 100000 G FO.RD = ****** GX GE.COM= 000001 MAKPRL 003300RG S.FDB = 000140 B.EXIT= 040000 G FO.WRT= ****** GX GE.CON= 000020 MAKRPL= ****** GX S.FNAM= 000006 B.FILE= 000100 G FUNC 000456RG GE.EOF= 177766 MOVEC = ****** GX S.FNB = 000036 B.ICNT= 000400 G F.ACTL= 000076 GE.IND= 000002 MRKFLG 000422RG S.FNBW= 000017 B.ITTY= 000200 G F.ALOC= 000040 GE.IOR= 177777 MSGBUF 000004RG 002 S.FNTY= 000004 B.LJUS= 004000 G F.BBFS= 000062 GE.LC = 000010 NOMSG 002720R S.FTYP= 000002 B.REL = 000001 G F.BDB = 000070 GE.MDE= 177774 N.ANM1= 000002 S.NFEN= 000020 B.RJUS= 002000 G F.BGBC= 000057 GE.OPR= 177776 N.ANM2= 000024 TF.WAL= ****** GX B.WIDE= 000004 G F.BKDN= 000026 GE.RBG= 177730 N.DID = 000024 TIEFN = 000001 G CHKDIR= ****** GX F.BKDS= 000020 GE.SIZ= 000040 N.DVNM= 000032 TIFDB 000516RG CHKLIN 002730RG F.BKEF= 000050 GOTCMD 002202RG N.FID = 000000 TILUN = 000001 G CLIN = ****** GX F.BKP1= 000051 G.CMLD= 000146 N.FNAM= 000006 TIOSB 000460RG CLOFIL 003360RG F.BKST= 000024 G.DPRM= 000160 N.FTYP= 000014 TISTR 001450R CLRSCR= ****** GX F.BKVB= 000064 G.ERR = 000140 N.FVER= 000016 TIUNIT 000354R CMDBUF 001004RG 002 F.CHR = 000075 G.ISIZ= 000020 N.NEXT= 000022 TOEFN = 000002 G CMDSIZ= 000400 F.CNTG= 000034 G.LPDL= 000060 N.STAT= 000020 TOFDB 000656RG COLUMN 000004RG F.DFNB= 000046 G.LUBA= 000004 N.UNIT= 000034 TOLUN = 000002 G COUNT 000012RG F.DSPT= 000044 G.LUBL= 000006 OPENR = ****** GX TOOMNY 000000R 004 CR = 000015 F.DVNM= 000134 G.LUCW= 000004 OPENW = ****** GX TOPLIN= 000001 CTRLC = ****** GX F.EFBK= 000010 G.LUFB= 000003 OUTEFN= 000004 G TPLINE 000022RG CUP = ****** GX F.EFN = 000050 G.LULU= 000002 OUTFDB 001156RG TSKBUF 000362R CVTOPT= ****** GX F.EOBB= 000032 G.LUNA= 000000 OUTLUN= 000004 G TTUNIT= 000504RG DEFLIN= 000014 F.ERR = 000052 G.LUNU= 000002 OUTMSG= ****** GX TTYEFN= 000005 G DEFNB 001412R F.FACC= 000043 G.MODE= 000141 OUTNB 001316R TTYLUN= 000005 G DELAYT 000036RG F.FFBY= 000014 G.PSDS= 000142 OUTSIZ= 001000 TTYNAM 000040RG DEPTH = 000002 F.FNAM= 000110 G.SIZE= 000224 PAR$$$= 000027 TTYNUM 000042RG DHBOT = ****** GX F.FNB = 000102 G.TSBA= 000002 PRLINE 000020RG VAXFLG 000424RG DHTOP = ****** GX F.FTYP= 000116 G.TSDU= 000036 PRMLIN= 000030 VTM 001520RG DWIDTH= ****** GX F.FVER= 000120 G.TSFW= 000024 Q.IOAE= 000012 WRTEND 003224RG EFN 000472RG F.HIBK= 000004 G.TSGC= 000017 Q.IOEF= 000006 WRTERR= ****** GX ERRBUF 002004RG 002 F.LUN = 000042 G.TSMT= 000022 Q.IOFN= 000002 WRTMSG= ****** GX ERREFN= 000003 G F.MBCT= 000054 G.TSNL= 000020 Q.IOLU= 000004 WRTTTY= ****** GX ERRFDB 001016RG F.MBC1= 000055 G.TSPC= 000016 Q.IOPL= 000014 $CBDMG= ****** GX ERRLUN= 000003 G F.MBFG= 000056 G.TSPN= 000004 Q.IOPR= 000007 $SAVVR= ****** GX ERRNB 001354R F.NRBD= 000024 G.TSPR= 000014 Q.IOSB= 000010 $$$ = 000001 ERRSIZ= 000120 G F.NREC= 000030 G.TSRN= 000010 REGBOT 000034RG $$$ARG= 000003 ESC = 000033 F.OVBS= 000030 G.TSSY= 000034 REGTOP 000032RG $$$OST= 000005 VTM - VT100 MESSAGE FORMATTER MACRO M1200 29-SEP-82 18:26 PAGE 14-2 SYMBOL TABLE .CLOSE= ****** G .FSRPT= ****** GX .TPARS= ****** GX ...PC1= 001156R ...PC3= 001156R .FINIT= ****** G .GCML1= ****** G .TRNCL= ****** GX ...PC2= 001446R ...TPC= 000020 .FSRCB= ****** G . ABS. 000000 000 003560 001 $$ZZZZ 002270 002 $$FSR1 004100 003 $ERMSG 000112 004 ERRORS DETECTED: 0 VIRTUAL MEMORY USED: 11982 WORDS ( 47 PAGES) DYNAMIC MEMORY: 13370 WORDS ( 51 PAGES) ELAPSED TIME: 00:01:05 VTM,VTM/-SP=VTM