ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 TABLE OF CONTENTS 4- 666 MOVEC - MOVE CHARACTER STRING ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 1 1 .TITLE ACTION - TPARS ACTION ROUTINES 2 .IDENT /03.10/ 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: ACTION.MAC 28 ; Author: Robin Miller 29 ; Date: June 17, 1982 30 ; 31 ; Description: 32 ; 33 ; Table parse action routines for VTM program. 34 ; 35 ; 36 ; Modification History: 37 ; 38 ;- 39 .ENABL AMA 40 .NLIST BEX 41 42 .MCALL ALUN$S, DIR$, GTIM$ ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 2 44 45 ; Local equates: 46 47 000007 BELL = 7 ; ASCII FOR BELL 48 000033 ESC = 27. ; ASCII FOR ESCAPE 49 000040 SPACE = 32. ; ASCII FOR SPACE 50 51 ; Local storage: 52 53 000000 GTIM: GTIM$ TIMBUF ; GET THE TIME 54 000004 TIMBUF: .BLKW 8. ; AND SOTRE IT HERE 55 56 ; Macro to generate a VT100 escape sequence. 57 58 .MACRO VTMSG LABEL,MSG 59 .PSECT $VTMSG,RO,D,REL,CON 60 LABEL: .ASCIZ "MSG" 61 .PSECT 62 MOV #LABEL,R0 63 CALL MOVEC 64 .ENDM 65 66 ; Macro to write a VT100 escape sequence immediatly. 67 68 .MACRO VTWRT LABEL,MSG 69 .PSECT $VTMSG,RO,D,REL,CON 70 .NCHR $$$,^/MSG/ 71 LABEL: .ASCII "MSG" 72 .PSECT 73 MOV #LABEL,R1 74 MOV #<$$$+1>,R2 75 CALL WRITIT 76 .ENDM 77 78 .MACRO MOVCHR CHAR 79 .NCHR $$$,^/CHAR/ 80 .IF EQ $$$-1 81 MOVB #''CHAR,@BUFPTR 82 .IFF 83 MOVB #CHAR,@BUFPTR 84 .ENDC 85 INC BUFPTR 86 .ENDM ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3 88 89 ; Action routines for TPARS. 90 ; Registers R0, R1, and R2 may be used by the action routines. 91 ; All other registers must be preserved. 92 93 ;********************************************************************** 94 95 ; Put VT100 in ANSI mode. 96 97 000024 ANSI:: VTWRT ANSIM,^/ ; SET VT52 MODE 103 000052 000207 RETURN 104 105 ;********************************************************************** 106 107 ; Application keypad mode. 108 109 000054 APPKEY::VTMSG APPKM,<=> ; APPLICATION KEYPAD MODE 110 000064 000207 RETURN 111 112 ; Numeric (normal) keypad mode. 113 114 000066 NUMKEY::VTMSG NUMKM,^/>/ ; NUMERIC KEYPAD MODE 115 000076 000207 RETURN 116 117 ;********************************************************************** 118 119 ; Turn all attributes off. 120 121 000100 042737 000000G 000000G ATTOFF::BIC #B.ATTR,STATUS ; SHOW ATTRIBUTES ARE OFF 122 000106 VTMSG NOATTR,<[0m> ; TURN OFF ALL ATTRIBUTES 123 000116 000207 RETURN 124 125 ; Turn on all attributes except for underscore. 126 127 000120 ALLATT:: 128 000120 VTMSG ALLMSG,<[1;5;7m> ; BOLD / BLINK / REVERSE 129 000130 000207 RETURN 130 131 ; Turn on blink attribute. 132 133 000132 BLINK:: VTMSG BLINKM,<[5m> ; TURN BLINK ATTRIBUTE ON 134 000142 000207 RETURN 135 136 ; Turn on bold attribute. 137 138 000144 BOLD:: VTMSG BOLDM,<[1m> ; TURN BOLD ATTRIBUTE ON 139 000154 000207 RETURN 140 141 ; Turn on reverse video attribute. 142 143 000156 REVERSE:: 144 000156 VTMSG REVMSG,<[7m> ; TURN REVERSE VIDEO ON ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3-1 145 000166 000207 RETURN 146 147 ; Turn on underscore attribute. 148 149 000170 UNDER:: VTMSG UNDERM,<[4m> ; TURN UNDERSCORE ON 150 000200 000207 RETURN 151 152 ;********************************************************************** 153 154 ; Move in a bell. 155 156 000202 MBELL:: MOVCHR ; MOVE A BELL TO THE BUFFER 157 000214 000207 RETURN 158 159 ;********************************************************************** 160 161 ; Set black (normal) screen. 162 163 000216 BLACK:: VTMSG BLACKM,<[?5l> ; SET BLACK (NORMAL) SCREEN 164 000226 000207 RETURN 165 166 ; Set a white (reverse) screen. 167 168 000230 WHITE:: VTMSG WHITEM,<[?5h> ; SET WHITE (REVERSE) SCREEN 169 000240 000207 RETURN 170 171 ;********************************************************************** 172 173 ; Clear the entire screen. 174 175 000242 CLRSCR::VTMSG HOMEM,<[H> ; HOME POSITION 176 000252 VTMSG CLEARM,<[J> ; CLEAR THE SCREEN 177 000262 000436 BR CRET 178 179 ; Clear to end of line. 180 181 000264 CEOL:: VTMSG CEOLM,<[0K> ; ERASE TO END OF LINE 182 000274 000431 BR CRET 183 184 ; Clear to beginning of line. 185 186 000276 CBOL:: VTMSG CBOLM,<[1K> ; ERASE TO BEGINNING OF LINE 187 000306 000424 BR CRET 188 189 ; Clear the entire line. 190 191 000310 CLIN:: VTMSG CLINM,<[2K> ; ERASE LINE INCLUSIVE 192 000320 000417 BR CRET 193 194 ; Clear to end of the screen. 195 196 000322 CEOS:: VTMSG CEOSM,<[0J> ; ERASE TO END OF SCREEN 197 000332 000412 BR CRET 198 199 ; Clear to the beginning of the screen. 200 201 000334 CBOS:: VTMSG CBOSM,<[1J> ; ERASE TO BEGINNING OF SCREEN ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3-2 202 000344 000405 BR CRET 203 204 ; Clear the entire screen, cursor does not move. 205 206 000346 CSCR:: VTMSG CSCRM,<[2J> ; ERASE THE ENTIRE SCREEN 207 000356 000400 BR CRET 208 209 ; Common return for clear screen. 210 211 000360 042737 000000G 000000G CRET: BIC #B.CLR,STATUS ; SHOW SCREEN CLEARED 212 000366 000207 RETURN 213 214 ;********************************************************************** 215 216 ; Cursor movement commands. 217 218 000370 CUP:: VTMSG CUPM,<[A> ; CURSOR UP 219 000400 000207 RETURN 220 221 000402 CDOWN:: VTMSG CDOWNC,<[B> ; CURSOR DOWN 222 000412 000207 RETURN 223 224 000414 CRIGHT::VTMSG CRIGHM,<[C> ; CURSOR RIGHT 225 000424 000207 RETURN 226 227 000426 CLEFT:: VTMSG CLEFTM,<[D> ; CURSOR LEFT 228 000436 000207 RETURN 229 230 ;********************************************************************** 231 232 ; Double height top and bottom halfs. 233 234 000440 DHTOP:: VTMSG DHTOPM,<#3> ; DOUBLE HEIGHT TOP HALF 235 000450 000207 RETURN 236 237 000452 DHBOT:: VTMSG DHBOTM,<#4> ; DOUBLE HEIGHT BOTTOM HALF 238 000462 000207 RETURN 239 240 ; Double width single height line. 241 242 000464 DWIDTH::VTMSG DWMSG,<#6> ; DOUBLE WIDTH SINGLE HEIGHT 243 000474 000207 RETURN 244 245 ; Set for single width single height line. 246 247 000476 042737 000000C 000000G SWIDTH::BIC #B.DBLH!B.DBLW,STATUS ; SHOW DOUBLE WIDTH OFF 248 000504 VTMSG SWMSG,<#5> ; SINGLE WIDTH SINGLE HEIGHT 249 000514 000207 RETURN 250 251 ;********************************************************************** 252 253 ; Tell TPARS to ignore blanks during parse. 254 ; This is used to ignore blanks in the options. 255 256 000516 105037 000000G IBLANK::CLRB .PFLAG ; IGNORE BLANKS 257 000522 010437 000000G MOV R4,BEOPT ; SAVE POINTER TO OPTION 258 000526 000207 RETURN ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3-3 259 260 ; Action routine to tell TPARS to pass blanks. 261 ; This is used to pass blanks in the message. 262 263 000530 112737 000001 000000G PBLANK::MOVB #1,.PFLAG ; PASS BLANKS 264 000536 000207 RETURN 265 266 ;********************************************************************** 267 268 ; Change character sets. 269 270 000540 SGRAPH::VTMSG SGRAPM,<(0> ; SPECIAL GRAPHICS 271 000550 000207 RETURN 272 273 000552 UKSET:: VTMSG UKSETM,<(A> ; UNITED KINGDOM SET 274 000562 000207 RETURN 275 276 000564 USSET:: VTMSG USSETM,<(B> ; USASCII CHARACTER SET 277 000574 000207 RETURN 278 279 000576 ACSET:: VTMSG ACSETM,<(1> ; ALTERNATE CHARACTER SET 280 000606 000207 RETURN 281 282 000610 AGSET:: VTMSG AGSETM,<(2> ; ALTERNATE GRAPHICS SET 283 000620 000207 RETURN 284 285 ;********************************************************************** 286 287 ; Home position on screen. 288 289 000622 012737 000001 000000G HOME:: MOV #1,LINE ; SET FOR LINE 1 290 000630 012737 000001 000000G MOV #1,COLUMN ; COLUMN 1 291 000636 000207 RETURN 292 293 ;********************************************************************** 294 295 ; Forward index. 296 297 000640 INDEX:: VTMSG INDEXM, ; FORWARD INDEX 298 299 ; Reverse index. 300 301 000650 RINDEX::VTMSG RINDXM, ; REVERSE INDEX 302 000660 000207 RETURN 303 304 ;********************************************************************** 305 306 ; Set jump scroll mode. 307 308 000662 JUMP:: VTMSG JUMPM,<[?4l> ; JUMP SCROLL MODE 309 000672 000207 RETURN 310 311 ; Set smooth scrol mode. 312 313 000674 SMOOTH::VTMSG SMOTHM,<[?4h> ; SMOOTH SCROLL MODE 314 000704 000207 RETURN 315 ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3-4 316 ;********************************************************************** 317 318 ; Turn on/off LEDS on the keyboard. 319 320 000706 LEDS:: VTMSG LEDSM,<[1;2;3;4q> ; ALL LEDS ON 321 000716 000207 RETURN 322 323 000720 LED1:: VTMSG LED1M,<[1q> ; LED #1 ON 324 000730 000207 RETURN 325 326 000732 LED2:: VTMSG LED2M,<[2q> ; LED #2 ON 327 000742 000207 RETURN 328 329 000744 LED3:: VTMSG LED3M,<[3q> ; LED #3 ON 330 000754 000207 RETURN 331 332 000756 LED4:: VTMSG LED4M,<[4q> ; LED #4 ON 333 000766 000207 RETURN 334 335 000770 LED0:: VTMSG LED0M,<[0q> ; TURN OFF ALL LEDS 336 001000 000207 RETURN 337 338 ;********************************************************************** 339 340 ; Set screen to 80 column mode. 341 342 001002 042737 000000C 000000G NARROW::BIC #B.CLR!B.WIDE,STATUS ; SET APPROPRIATE STATUS 343 001010 012737 000120 000000G MOV #80.,RMARGN ; SET RIGHT MARGIN TO 80. 344 001016 VTWRT NARSCR,<[?3l> ; SET 80 COLUMN MODE 345 001032 000207 RETURN 346 347 ; Set the screen to 132 column mode. 348 349 001034 042737 000000G 000000G WIDE:: BIC #B.CLR,STATUS ; SCREEN WILL BE CLEARED 350 001042 012737 000204 000000G MOV #132.,RMARGN ; SET RIGHT MARGIN TO 132. 351 001050 VTWRT WIDSCR,<[?3h> ; SET 132 COLUMN MODE 352 001064 000207 RETURN 353 354 ;********************************************************************** 355 356 ; Disable the clear screen option. 357 358 001066 042737 000000G 000000G NOCLR:: BIC #B.CLR,STATUS ; DON'T CLEAR THE SCREEN 359 001074 000207 RETURN 360 361 ; Disable centering of the message. 362 363 001076 042737 000000G 000000G NOCENT::BIC #B.CENT,STATUS ; DON'T CENTER THE MESSAGE 364 001104 000207 RETURN 365 366 ; Disable double height double width message. 367 368 001106 042737 000000G 000000G NODH:: BIC #B.DBLH,STATUS ; DISABLE DOUBLE HEIGHT 369 001114 000207 RETURN 370 371 ; Disable single height double width message. 372 ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3-5 373 001116 042737 000000G 000000G NODW:: BIC #B.DBLW,STATUS ; DISABLE DOUBLE WIDTH 374 001124 000207 RETURN 375 376 ; Disable the scrolling region. 377 378 001126 NOREG:: VTMSG NOREGM,<[r> ; DISABLE SCROLL REGION 379 001136 000207 RETURN 380 381 ; Enable output to local terminal. 382 383 001140 005237 000000G TTYON:: INC TENTRY ; ENABLE LOCAL TERMINAL 384 001144 000207 RETURN 385 386 ; Disable output to local terminal. 387 388 001146 005037 000000G NOTTY:: CLR TENTRY ; DISABLE OUTPUT TO TERMINAL 389 001152 000207 RETURN 390 391 ;********************************************************************** 392 393 ; Open the specified output file. 394 395 001154 105077 000000G OFILE:: CLRB @FILPTR ; TERMINATE THE FILE NAME 396 001160 012700 000000G MOV #OUTFDB,R0 ; ADDRESS OF THE OUTPUT FDB 397 001164 012701 000000G MOV #FILNAM,R1 ; ADDRESS OF THE FILE NAME 398 001170 004737 000000G CALL OPENW ; OPEN THE FILE FOR WRITE 399 001174 103006 BCC 10$ ; IF CC, SUCCESS 400 001176 016000 000000G MOV F.ERR(R0),R0 ; COPY THE ERROR CODE 401 001202 004737 000000G CALL WRTERR ; AND WRITE THE ERROR 402 001206 000137 002062' JMP FAIL ; RETURN FAILURE 403 001212 052737 000000G 000000G 10$: BIS #B.FILE,STATUS ; SHOW OUTPUT TO FILE 404 001220 005237 000000G INC FENTRY ; ENABLE OUTPUT TO FILE 405 001224 000207 RETURN 406 407 ; Save character for output file name. 408 409 001226 032737 000000G 000000G SFILE:: BIT #B.FILE,STATUS ; OUTPUT FILE ALREADY OPEN ? 410 001234 001414 BEQ 10$ ; IF EQ, NO 411 001236 013746 000000G MOV BUFPTR,-(SP) ; SAVE CURRENT BUFFER POINTER 412 001242 004737 000000G CALL MAKPRL ; MAKE THE PROMPT LINE 413 001246 004737 000000G CALL SETBUF ; SET BUFFER AND BYTE COUNT 414 001252 004737 000000G CALL WRTFIL ; WRITE IT TO THE FILE 415 001256 004737 000000G CALL CLOFIL ; NOW CLOSE IT 416 001262 012637 000000G MOV (SP)+,BUFPTR ; RESTORE THE BUFFER POINTER 417 001266 113777 000000G 000000G 10$: MOVB .PCHAR,@FILPTR ; SAVE CHARACTER FOR FILE NAME 418 001274 005237 000000G INC FILPTR ; POINT TO NEXT LOCATION 419 001300 000207 RETURN 420 421 ;********************************************************************** 422 423 ; Get the scroll region. 424 425 001302 013700 000000G REGT:: MOV .PNUMB,R0 ; COPY THE LINE NUMBER 426 001306 120027 000030 CMPB R0,#24. ; IS IT A VALID LINE 427 001312 002402 BLT 10$ ; IF LT, YES 428 001314 000137 002062' JMP FAIL ; NOPE, RETURN FAILURE 429 001320 010037 000000G 10$: MOV R0,REGTOP ; SAVE THE TOP LINE # ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3-6 430 001324 000207 RETURN 431 432 001326 013700 000000G REGB:: MOV .PNUMB,R0 ; COPY THE LINE NUMBER 433 001332 120037 000000G CMPB R0,REGTOP ; LARGER THAN TOP LINE ? 434 001336 003423 BLE 10$ ; IF LE, NO (TOO SMALL) 435 001340 120027 000030 CMPB R0,#24. ; IS IT A VALID LINE ? 436 001344 003020 BGT 10$ ; IF GT, NO (TOO BIG) 437 001346 010037 000000G MOV R0,REGBOT ; SAVE THE BOTTOM LINE # 438 001352 013701 000000G MOV REGTOP,R1 ; COPY THE TOP LINE # 439 001356 004737 000000G CALL MAKLIN ; MAKLIN DOES "$[n;" 440 001362 013701 000000G MOV REGBOT,R1 ; COPY THE BOTTOM LINE # 441 001366 004737 000000G CALL MAKNUM ; MAKE THE ASCII LINE # 442 001372 MOVCHR ; LAST PART OF SCROLL REGION 443 001404 000207 RETURN 444 001406 000137 002062' 10$: JMP FAIL ; RETURN FAILURE 445 446 ;********************************************************************** 447 448 ; Save delay count and do the delay. 449 450 001412 013700 000000G SDELAY::MOV .PNUMB,R0 ; COPY THE DELAY COUNT 451 001416 010037 000000G MOV R0,DELAYT ; SAVE THE DELAY TIME 452 001422 004737 000000G CALL DELAY ; NOW DO THE DELAY 453 001426 000207 RETURN 454 455 ;********************************************************************** 456 457 ; Do VT100 power-up reset. 458 459 001430 042737 000000G 000000G VRESET::BIC #B.CLR,STATUS ; SCREEN WILL BE CLEARED 460 001436 VTWRT RESETM, ; DO VT100 POWER-UP RESET 461 001452 012700 000002 MOV #2,R0 ; NOW DELAY 2 SECONDS 462 001456 004737 000000G CALL DELAY ; AND GO DO IT 463 001462 000207 RETURN 464 465 ; Do confidence test, fill screen with "Es". 466 467 001464 042737 000000G 000000G TEST:: BIC #B.CLR,STATUS ; DON'T CLEAR THE SCREEN 468 001472 VTWRT TESTM,<#8> ; TEST, FILL SCREEN WITH "Es". 469 001506 000207 RETURN 470 471 ;********************************************************************** 472 473 ; Save cursor position and attributes. 474 475 001510 SAVEC:: VTMSG SAVECM,<7> ; SAVE CURSOR AND ATTRIBUTES 476 001520 000207 RETURN 477 478 001522 RESTC:: VTMSG RESTCM,<8> ; RESTORE CURSER AND ATTRIBUTES 479 001532 000207 RETURN 480 481 ;********************************************************************** 482 483 ; Save character to be written in the message. 484 485 001534 005237 000000G SCHAR:: INC COUNT ; COUNT THIS BYTE 486 001540 113777 000000G 000000G MOVB .PCHAR,@BUFPTR ; MOVE IT TO THE BUFFER ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3-7 487 001546 005237 000000G INC BUFPTR ; POINT TO THE NEXT LOCATION 488 001552 000137 000530' JMP PBLANK ; AND SET TO PASS BLANKS 489 490 ; Save the starting column number. 491 492 001556 013700 000000G SCOL:: MOV .PNUMB,R0 ; SAVE STARTING COLUMN # 493 001562 020037 000000G CMP R0,RMARGN ; IS THE COLUMN IN RANGE ? 494 001566 003135 BGT FAIL ; IF GT, NO (ERROR) 495 001570 010037 000000G MOV R0,COLUMN ; SAVE STARTING COLUMN # 496 001574 000207 RETURN 497 498 ; Skip several lines. 499 500 001576 063737 000000G 000000G SKIP:: ADD .PNUMB,LINE ; ADD IN COUNT TO SKIP 501 001604 004737 000000G CALL CHKLIN ; CHECK RANGE OF LINE # 502 001610 000207 RETURN 503 504 ; Save the iteration count. 505 506 001612 032737 000000G 000000G SITER:: BIT #B.ICNT,STATUS ; ALREADY HAVE ITERATION COUNT ? 507 001620 001006 BNE 10$ ; IF NE, YES (SAVE ONLY ONCE) 508 001622 052737 000000G 000000G BIS #B.ICNT,STATUS ; SHOW WE HAVE ITERATION COUNT 509 001630 013737 000000G 000000G MOV .PNUMB,ICOUNT ; SAVE THE ITERATION COUNT 510 001636 000207 10$: RETURN 511 512 ; Save the starting line number. 513 514 001640 013737 000000G 000000G SLINE:: MOV .PNUMB,LINE ; SAVE THE STARTING LINE # 515 001646 004737 000000G CALL CHKLIN ; CHECK RANGE OF LINE # 516 001652 000207 RETURN 517 518 ; Save the number prompt line number. 519 520 001654 013700 000000G PLINE:: MOV .PNUMB,R0 ; COPY THE LINE NUMBER 521 001660 032737 000000G 000000G BIT #B.REL,STAT1 ; RELATIVE LINE NUMBER ? 522 001666 001403 BEQ 10$ ; IF EQ, NO 523 001670 010037 000000G MOV R0,RELNUM ; SAVE THE RELATIVE COUNT 524 001674 000405 BR 20$ ; USE COMMON RETURN 525 001676 020027 000030 10$: CMP R0,#24. ; IS THE LINE WITHIN RANGE ? 526 001702 101067 BHI FAIL ; IF HI, NO (RETURN FAILURE) 527 001704 010037 000000G MOV R0,PRLINE ; SAVE THE NEW LINE NUMBER 528 001710 000207 20$: RETURN 529 530 ; Make a relative prompt line number. By the time this 531 ; routine is called, the LINE number must be updated. 532 533 001712 004237 000000G MAKRPL::JSR R2,$SAVVR ; SAVE R0 - R2 534 001716 013701 000000G MOV LINE,R1 ; COPY THE CURRENT LINE # 535 001722 013700 000000G MOV RELNUM,R0 ; COPY THE RELATIVE COUNT 536 001726 001405 BEQ 20$ ; IF EQ, DON'T ADJUST 537 001730 032737 000000G 000000G BIT #B.DIR,STAT1 ; IS THE DIRECTION POSITIVE ? 538 001736 001401 BEQ 20$ ; IF EQ, YES 539 001740 005400 NEG R0 ; NOPE, MAKE IT NEGATIVE 540 001742 060001 20$: ADD R0,R1 ; ADJUST THE PROMPT LINE 541 001744 010100 MOV R1,R0 ; COPY TO USE COMMON CODE 542 001746 100002 BPL 30$ ; IF PL, POSSIBLE GOOD LINE 543 001750 013700 000000G MOV TPLINE,R0 ; IF MI, START AT TOP LINE ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3-8 544 001754 020027 000030 30$: CMP R0,#24. ; IS THE LINE WITHIN RANGE ? 545 001760 101402 BLOS 40$ ; IF LOS, YES 546 001762 013700 000000G MOV BTLINE,R0 ; NO, SET TO THE BOTTOM LINE 547 001766 010037 000000G 40$: MOV R0,PRLINE ; SAVE THE NEW LINE NUMBER 548 001772 000207 RETURN 549 550 ; Set direction for relative line number. 551 552 001774 042737 000000G 000000G PPLIN:: BIC #B.DIR,STAT1 ; SET POSITIVE DIRECTION 553 002002 000207 RETURN 554 555 002004 052737 000000G 000000G NPLIN:: BIS #B.DIR,STAT1 ; SET NEGATIVE DIRECTION 556 002012 000207 RETURN 557 558 ; Save the top line number. 559 560 002014 013700 000000G TLINE:: MOV .PNUMB,R0 ; COPY THE LINE NUMBER 561 002020 020037 000000G CMP R0,BTLINE ; SMALLER THAN BOTTOM LINE ? 562 002024 002016 BGE FAIL ; IF GE, NO (ERROR) 563 002026 010037 000000G MOV R0,TPLINE ; YES, SAVE IT 564 002032 000207 RETURN 565 566 ; Save the bottom line number. 567 568 002034 013700 000000G BLINE:: MOV .PNUMB,R0 ; COPY THE LINE NUMBER 569 002040 020037 000000G CMP R0,TPLINE ; LARGER THAN TOP LINE ? 570 002044 003406 BLE FAIL ; IF LE, NO (ERROR) 571 002046 020027 000030 CMP R0,#24. ; IS IT TOO LARGE ? 572 002052 003003 BGT FAIL ; IF GT, YES (ERROR) 573 002054 010037 000000G MOV R0,BTLINE ; SAVE NEW BOTTOM LINE 574 002060 000207 RETURN 575 576 ; Bad line number encountered. 577 578 002062 062716 000002 FAIL: ADD #2,(SP) ; RETURN FAILURE ON 579 002066 000207 RETURN ; BAD LINE NUMBER 580 581 ;********************************************************************** 582 583 ; Save the left margin. 584 585 002070 013700 000000G SLMARG::MOV .PNUMB,R0 ; COPY THE LEFT MARGIN 586 002074 020027 000204 CMP R0,#132. ; IS MARGIN IN RANGE ? 587 002100 002370 BGE FAIL ; IF GE, NO 588 002102 010037 000000G MOV R0,LMARGN ; YES, SAVE IT 589 002106 000207 RETURN 590 591 ; Save the right margin. 592 593 002110 013700 000000G SRMARG::MOV .PNUMB,R0 ; COPY THE RIGHT MARGIN 594 002114 020027 000204 CMP R0,#132. ; IS MARGIN IN RANGE ? 595 002120 003360 BGT FAIL ; IF GT, NO 596 002122 010037 000000G MOV R0,RMARGN ; YES, SAVE IT 597 002126 000207 RETURN 598 599 ;********************************************************************** 600 ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3-9 601 ; Save the first character of the terminal name. 602 603 002130 005037 000000G STTY1:: CLR TTYNUM ; INITIALIZE UNIT NUMBER 604 002134 113737 000000G 000000G MOVB .PCHAR,TTYNAM ; SAVE THE FIRST CHARACTER 605 002142 000207 RETURN 606 607 ; Save the second character of the terminal name. 608 609 002144 113737 000000G 000001G STTY2:: MOVB .PCHAR,TTYNAM+1 ; SAVE THE SECOND CHARACTER 610 002152 000207 RETURN 611 612 ; Calculate controller for VAX/VMS. 613 614 002154 113701 000000G STTYC:: MOVB .PCHAR,R1 ; GET THE CONTROLLER LETTER 615 002160 042701 177740 BIC #^C37,R1 ; ISOLATE LOW ORDER BITS 616 002164 005301 DEC R1 ; BIAS THE CONTROLLER # 617 002166 001404 BEQ 10$ ; CONT. A (101) BECOMES 0 618 002170 070127 000020 MUL #16.,R1 ; CALCULATE THE UNIT NUMBER 619 002174 010137 000000G MOV R1,TTYNUM ; STORE CONTROLLER # 620 002200 000207 10$: RETURN 621 622 ; Save the terminal unit number. 623 624 002202 063737 000000G 000000G STTYN:: ADD .PNUMB,TTYNUM ; SAVE THE TTY UNIT NUMBER 625 002210 000207 RETURN 626 627 ; Assign LUN to output terminal. 628 629 002212 005237 000000G TTYA:: INC AENTRY ; ENABLE THIS ENTRY 630 002216 ALUN$S #TTYLUN,TTYNAM,TTYNUM ; ASSIGN LUN TO TERMINAL 631 002240 004737 000000G CALL CHKDIR ; CHECK/REPORT ERRORS 632 002244 103004 BCC 10$ ; IF CC, SUCCESS 633 002246 005037 000000G CLR AENTRY ; DISABLE THIS ENTRY 634 002252 000137 002062' JMP FAIL ; AND RETURN FAILURE 635 002256 000207 10$: RETURN 636 637 ;********************************************************************** 638 639 ; Put the date in the output buffer. 640 641 002260 DATE:: DIR$ #GTIM ; GET THE TIME 642 002266 004737 000000G CALL CHKDIR ; CHECK/REPORT ERRORS 643 002272 103002 BCC 10$ ; IF CC, SUCCESSFUL 644 002274 000137 002062' JMP FAIL ; ELSE, RETURN FAILURE 645 002300 013700 000000G 10$: MOV BUFPTR,R0 ; COPY THE BUFFER POINTER 646 002304 012701 000004' MOV #TIMBUF+G.TIYR,R1 ; POINT TO THE DATE 647 002310 004737 000000G CALL $DAT ; CONVERT THE DATE 648 002314 010037 000000G MOV R0,BUFPTR ; SAVE UPDATED BUFFER POINTER 649 002320 062737 000011 000000G ADD #9.,COUNT ; AND COUNT FOR CENTERING 650 002326 000207 RETURN 651 652 ; Put the time in the output buffer. 653 654 002330 TIME:: DIR$ #GTIM ; GET THE TIME 655 002336 004737 000000G CALL CHKDIR ; CHECK/REPORT ERRORS 656 002342 103002 BCC 10$ ; IF CC, SUCCESSFUL 657 002344 000137 002062' JMP FAIL ; ELSE, RETURN FAILURE ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 3-10 658 002350 013700 000000G 10$: MOV BUFPTR,R0 ; COPY THE BUFFER POINTER 659 002354 012701 000012' MOV #TIMBUF+G.TIHR,R1 ; ADDRESS OF BINARY TIME 660 002360 012702 000003 MOV #3,R2 ; FORMAT = HH:MM:SS 661 002364 004737 000000G CALL $TIM ; CONVERT THE TIME 662 002370 010037 000000G MOV R0,BUFPTR ; SAVE UPDATED BUFFER POINTER 663 002374 062737 000010 000000G ADD #8.,COUNT ; AND COUNT FOR CENTERING 664 002402 000207 RETURN ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 4 MOVEC - MOVE CHARACTER STRING 666 .SBTTL MOVEC - MOVE CHARACTER STRING 667 ;+ 668 ; 669 ; MOVEC - Routine to move an ASCIZ string. 670 ; 671 ; Inputs: 672 ; R0 = address of the ASCIZ message. 673 ; BUFPTR = address of the output buffer address. 674 ; 675 ; Outputs: 676 ; BUFPTR is updated to next available byte. 677 ; 678 ;- 679 002404 112077 000000G MOVEC:: MOVB (R0)+,@BUFPTR ; COPY THE NEXT BYTE 680 002410 001403 BEQ 10$ ; IF EQ, ALL DONE 681 002412 005237 000000G INC BUFPTR ; UPDATE THE POINTER 682 002416 000772 BR MOVEC ; AND MOVE THE NEXT 683 002420 000207 10$: RETURN 684 685 000001 .END ACTION - TPARS ACTION ROUTINES MACRO M1200 29-SEP-82 18:44 PAGE 4-1 SYMBOL TABLE ACSET 000576RG CEOSM 000123R 002 G.TISC= 000012 NUMKM 000013R 002 STTYN 002202RG ACSETM 000216R 002 CHKDIR= ****** GX G.TIYR= 000000 OFILE 001154RG STTY1 002130RG AENTRY= ****** GX CHKLIN= ****** GX HOME 000622RG OPENW = ****** GX STTY2 002144RG AGSET 000610RG CLEARM 000100R 002 HOMEM 000074R 002 OUTFDB= ****** GX SWIDTH 000476RG AGSETM 000222R 002 CLEFT 000426RG IBLANK 000516RG PBLANK 000530RG SWMSG 000176R 002 ALLATT 000120RG CLEFTM 000156R 002 ICOUNT= ****** GX PLINE 001654RG TENTRY= ****** GX ALLMSG 000023R 002 CLIN 000310RG INDEX 000640RG PPLIN 001774RG TEST 001464RG ANSI 000024RG CLINM 000116R 002 INDEXM 000226R 002 PRLINE= ****** GX TESTM 000334R 002 ANSIM 000000R 002 CLOFIL= ****** GX JUMP 000662RG REGB 001326RG TIMBUF 000004R APPKEY 000054RG CLRSCR 000242RG JUMPM 000234R 002 REGBOT= ****** GX TIME 002330RG APPKM 000010R 002 COLUMN= ****** GX LEDS 000706RG REGT 001302RG TLINE 002014RG ATTOFF 000100RG COUNT = ****** GX LEDSM 000250R 002 REGTOP= ****** GX TPLINE= ****** GX BELL = 000007 CRET 000360R LED0 000770RG RELNUM= ****** GX TTYA 002212RG BEOPT = ****** GX CRIGHM 000152R 002 LED0M 000307R 002 RESETM 000332R 002 TTYLUN= ****** GX BLACK 000216RG CRIGHT 000414RG LED1 000720RG RESTC 001522RG TTYNAM= ****** GX BLACKM 000060R 002 CSCR 000346RG LED1M 000263R 002 RESTCM 000342R 002 TTYNUM= ****** GX BLINE 002034RG CSCRM 000135R 002 LED2 000732RG REVERS 000156RG TTYON 001140RG BLINK 000132RG CUP 000370RG LED2M 000270R 002 REVMSG 000046R 002 UKSET 000552RG BLINKM 000034R 002 CUPM 000142R 002 LED3 000744RG RINDEX 000650RG UKSETM 000206R 002 BOLD 000144RG DATE 002260RG LED3M 000275R 002 RINDXM 000231R 002 UNDER 000170RG BOLDM 000041R 002 DELAY = ****** GX LED4 000756RG RMARGN= ****** GX UNDERM 000053R 002 BTLINE= ****** GX DELAYT= ****** GX LED4M 000302R 002 SAVEC 001510RG USSET 000564RG BUFPTR= ****** GX DHBOT 000452RG LINE = ****** GX SAVECM 000337R 002 USSETM 000212R 002 B.ATTR= ****** GX DHBOTM 000166R 002 LMARGN= ****** GX SCHAR 001534RG VRESET 001430RG B.CENT= ****** GX DHTOP 000440RG MAKLIN= ****** GX SCOL 001556RG VT52 000042RG B.CLR = ****** GX DHTOPM 000162R 002 MAKNUM= ****** GX SDELAY 001412RG VT52M 000002R 002 B.DBLH= ****** GX DWIDTH 000464RG MAKPRL= ****** GX SETBUF= ****** GX WHITE 000230RG B.DBLW= ****** GX DWMSG 000172R 002 MAKRPL 001712RG SFILE 001226RG WHITEM 000066R 002 B.DIR = ****** GX ESC = 000033 MBELL 000202RG SGRAPH 000540RG WIDE 001034RG B.FILE= ****** GX FAIL 002062R MOVEC 002404RG SGRAPM 000202R 002 WIDSCR 000321R 002 B.ICNT= ****** GX FENTRY= ****** GX NARROW 001002RG SITER 001612RG WRITIT= ****** GX B.REL = ****** GX FILNAM= ****** GX NARSCR 000314R 002 SKIP 001576RG WRTERR= ****** GX B.WIDE= ****** GX FILPTR= ****** GX NOATTR 000016R 002 SLINE 001640RG WRTFIL= ****** GX CBOL 000276RG F.ERR = ****** GX NOCENT 001076RG SLMARG 002070RG $DAT = ****** GX CBOLM 000111R 002 GTIM 000000R NOCLR 001066RG SMOOTH 000674RG $SAVVR= ****** GX CBOS 000334RG G.TIBA= 000002 NODH 001106RG SMOTHM 000242R 002 $TIM = ****** GX CBOSM 000130R 002 G.TICP= 000016 NODW 001116RG SPACE = 000040 $$$ = 000002 CDOWN 000402RG G.TICT= 000014 NOREG 001126RG SRMARG 002110RG $$$OST= 000020 CDOWNC 000146R 002 G.TIDA= 000004 NOREGM 000326R 002 STATUS= ****** GX .PCHAR= ****** GX CEOL 000264RG G.TIHR= 000006 NOTTY 001146RG STAT1 = ****** GX .PFLAG= ****** GX CEOLM 000104R 002 G.TIMI= 000010 NPLIN 002004RG STTYC 002154RG .PNUMB= ****** GX CEOS 000322RG G.TIMO= 000002 NUMKEY 000066RG . ABS. 000000 000 002422 001 $VTMSG 000345 002 ERRORS DETECTED: 0 VIRTUAL MEMORY USED: 8757 WORDS ( 35 PAGES) DYNAMIC MEMORY: 10202 WORDS ( 39 PAGES) ELAPSED TIME: 00:00:33 ACTION,ACTION/-SP=ACTION