; 0001 0 MODULE KERTT (IDENT = '2.0.004' ; 0002 0 ) = ; 0003 1 BEGIN ; 0004 1 ; 0005 1 SWITCHES LANGUAGE (COMMON); ; 0006 1 ; 0007 1 ! ; 0008 1 ; 0009 1 !++ ; 0010 1 ! FACILITY: ; 0011 1 ! ; 0012 1 ! KERMIT text processing ; 0013 1 ! ; 0014 1 ! ABSTRACT: ; 0015 1 ! ; 0016 1 ! This module contains all of the text processing required for ; 0017 1 ! KERMSG. ; 0018 1 ! ; 0019 1 ! ENVIRONMENT: ; 0020 1 ! ; 0021 1 ! TOPS-10, P/OS, VAX/VMS ; 0022 1 ! ; 0023 1 ! AUTHOR: Robert C. McQueen, CREATION DATE: 29-August-1983 ; 0024 1 !-- ; 0025 1 ; 0026 1 %SBTTL 'Table of Contents' ; 0027 1 ! ; 0028 1 ! TABLE OF CONTENTS: ; 0029 1 ! ; 0030 1 %SBTTL 'Revision History' ; 0031 1 ; 0032 1 !++ ; 0033 1 ! ; 0034 1 ! Create this module for PRO/Kermit 1.0, Kermit-10 2(100) and Kermit-32 1.2 ; 0035 1 ! ; 0036 1 ! 1.2.000 By: Robert C. McQueen On: 29-August-1983 ; 0037 1 ! Create this module. ; 0038 1 ! ; 0039 1 ! 1.2.001 By: Robert C. McQueen On: 9-Sept-1983 ; 0040 1 ! Make the string passed to TERM_DUMP a counted ASCIZ string, ; 0041 1 ! not a counted ASCII string. ; 0042 1 ! ; 0043 1 ! 1.2.002 By: Robert C. McQueen On: 16-September-1983 ; 0044 1 ! Make TT_OUTPUT a global routine, so we can force information ; 0045 1 ! output a various points in time. ; 0046 1 ! ; 0047 1 ! 2.0.003 Release for TOPS-10 KERMIT-10 version 2. ; 0048 1 ! Release for VAX/VMS KERMIT-32 version 2. ; 0049 1 ! ; 0050 1 ! 2.0.004 By: Nick Bush On: 22-December-1983 ; 0051 1 ! Add TT_HOLD to indicate that output should not be dumped ; 0052 1 ! when LF's are seen, only when buffer is full. ; 0053 1 !-- ; 0054 1 ; 0055 1 %SBTTL 'Library files' ; 0056 1 ! ; 0057 1 ! INCLUDE FILES: ; 0058 1 ! ; 0059 1 ! ; 0060 1 ! KERMIT common definitions ; 0061 1 ! ; 0062 1 ; 0063 1 REQUIRE 'KERCOM'; ; 0272 1 ; 0273 1 %SBTTL 'Symbol definitions' ; 0274 1 ! ; 0275 1 ! EQUATED SYMBOLS: ; 0276 1 ! ; 0277 1 ; 0278 1 LITERAL ; 0279 1 TEXT_BFR_LENGTH = 256; ! Length of the text buffer ; 0280 1 ; 0281 1 %SBTTL 'Storage' ; 0282 1 ! ; 0283 1 ! OWN STORAGE: ; 0284 1 ! ; 0285 1 ! ; 0286 1 ! TT_xxxxx routine storage ; 0287 1 ! ; 0288 1 ; 0289 1 OWN ; 0290 1 HOLD_FLAG, ! Output should be held even if CRLF seen ; 0291 1 DUMP_ROUTINE, ! Address of routine to dump text ; 0292 1 TEXT_COUNT, ! Count of the characters ; 0293 1 TEXT_POINTER, ! Pointer to store characters ; 0294 1 TEXT_BUFFER : VECTOR [CH$ALLOCATION (TEXT_BFR_LENGTH)]; ! Buffer of characters ; 0295 1 ; 0296 1 %SBTTL 'External storage' ; 0297 1 ; 0298 1 !++ ; 0299 1 ! The following is the various external storage locations that are ; 0300 1 ! referenced from this module. ; 0301 1 !-- ; 0302 1 ; 0303 1 ! ; 0304 1 ! KERMSG storage ; 0305 1 ! ; 0306 1 ; 0307 1 EXTERNAL ; 0308 1 CONNECT_FLAG; ! Flag if communications line is TT: ; 0309 1 ; 0310 1 !++ ; 0311 1 ! The following is the only external routine used by this module. This ; 0312 1 ! routine will cause the terminal buffer that we have been building to be ; 0313 1 ! output on the terminal ; 0314 1 !-- ; 0315 1 ; 0316 1 EXTERNAL ROUTINE ; 0317 1 TERM_DUMP : NOVALUE; ! Output the terminal buffer ; 0318 1 ; 0319 1 %SBTTL 'Terminal routines -- TT_INIT - Initialize this module' ; 0320 1 ; 0321 1 GLOBAL ROUTINE TT_INIT : NOVALUE = ; 0322 1 ; 0323 1 !++ ; 0324 1 ! FUNCTIONAL DESCRIPTION: ; 0325 1 ! ; 0326 1 ! This routine will initialize the terminal processing module. It will ; 0327 1 ! initialize the various data locations in this module. ; 0328 1 ! ; 0329 1 ! CALLING SEQUENCE: ; 0330 1 ! ; 0331 1 ! TT_INIT(); ; 0332 1 ! ; 0333 1 ! INPUT PARAMETERS: ; 0334 1 ! ; 0335 1 ! None. ; 0336 1 ! ; 0337 1 ! IMPLICIT INPUTS: ; 0338 1 ! ; 0339 1 ! None. ; 0340 1 ! ; 0341 1 ! OUTPUT PARAMETERS: ; 0342 1 ! ; 0343 1 ! None. ; 0344 1 ! ; 0345 1 ! IMPLICIT OUTPUTS: ; 0346 1 ! ; 0347 1 ! None. ; 0348 1 ! ; 0349 1 ! COMPLETION CODES: ; 0350 1 ! ; 0351 1 ! None. ; 0352 1 ! ; 0353 1 ! SIDE EFFECTS: ; 0354 1 ! ; 0355 1 ! None. ; 0356 1 ! ; 0357 1 !-- ; 0358 1 ; 0359 2 BEGIN ; 0360 2 ! ; 0361 2 ! Now initialize the various pointers ; 0362 2 ! ; 0363 2 TEXT_COUNT = 0; ; 0364 2 TEXT_POINTER = CH$PTR (TEXT_BUFFER); ; 0365 2 DUMP_ROUTINE = TERM_DUMP; ! Initial output routine is to terminal ; 0366 2 HOLD_FLAG = FALSE; ! Dump output on CRLF's ; 0367 1 END; ! End of TT_INIT .TITLE KERTT .IDENT \2.0.004\ .PSECT $OWN$,NOEXE,2 ;HOLD_FLAG U.1: .BLKB 4 ; 00000 ;DUMP_ROUTINE U.2: .BLKB 4 ; 00004 ;TEXT_COUNT U.3: .BLKB 4 ; 00008 ;TEXT_POINTER U.4: .BLKB 4 ; 0000C ;TEXT_BUFFER U.5: .BLKB 256 ; 00010 FNM_NORMAL== 1 FNM_FULL== 2 FNM_UNTRAN== 4 PR_MIN== 0 PR_NONE== 0 PR_MARK== 1 PR_EVEN== 2 PR_ODD== 3 PR_SPACE== 4 PR_MAX== 4 GC_MIN== 1 GC_EXIT== 1 GC_DIRECTORY== 2 GC_DISK_USAGE== 3 GC_DELETE== 4 GC_TYPE== 5 GC_HELP== 6 GC_LOGOUT== 7 GC_LGN== 8 GC_CONNECT== 9 GC_RENAME== 10 GC_COPY== 11 GC_WHO== 12 GC_SEND_MSG== 13 GC_STATUS== 14 GC_COMMAND== 15 GC_KERMIT== 16 GC_JOURNAL== 17 GC_VARIABLE== 18 GC_PROGRAM== 19 GC_MAX== 19 DP_FULL== 0 DP_HALF== 1 CHK_1CHAR== 49 CHK_2CHAR== 50 CHK_CRC== 51 MAX_MSG== 1002 .EXTRN CONNECT_FLAG, TERM_DUMP .PSECT $CODE$,NOWRT,2 .ENTRY TT_INIT, ^M ;TT_INIT, Save R2 0321 0004 00000 MOVAB W^U.3, R2 ;U.3, R2 52 0000' CF 9E 00002 CLRL (R2) ;TEXT_COUNT 0363 62 D4 00007 MOVAB 8(R2), 4(R2) ;TEXT_BUFFER, TEXT_POINTER 0364 04 A2 08 A2 9E 00009 MOVAB W^TERM_DUMP, -4(R2) ;TERM_DUMP, DUMP_ROUTINE 0365 FC A2 0000G CF 9E 0000E CLRL -8(R2) ;HOLD_FLAG 0366 F8 A2 D4 00014 RET ; 0367 04 00017 ; Routine Size: 24 bytes, Routine Base: $CODE$ + 0000 ; 0368 1 ; 0369 1 %SBTTL 'TT_SET_OUTPUT - Set output routine to use' ; 0370 1 ; 0371 1 GLOBAL ROUTINE TT_SET_OUTPUT (OUT_RTN) = ; 0372 1 ; 0373 1 !++ ; 0374 1 ! FUNCTIONAL DESCRIPTION: ; 0375 1 ! ; 0376 1 ! This routine will set the output routine to use for the TT_xxx routines. ; 0377 1 !The argument is a routine address which will output a counted ASCIZ string. ; 0378 1 !It will return the address of the previous output routine. ; 0379 1 ! ; 0380 1 ! CALLING SEQUENCE: ; 0381 1 ! ; 0382 1 ! OLD_RTN = TT_SET_OUTPUT (OUT_RTN); ; 0383 1 ! ; 0384 1 ! INPUT PARAMETERS: ; 0385 1 ! ; 0386 1 ! OUT_RTN - Address of routine to output a counted ASCIZ string ; 0387 1 ! called as OUT_RTN (Address of string, length of string) ; 0388 1 ! ; 0389 1 ! IMPLICIT INPUTS: ; 0390 1 ! ; 0391 1 ! DUMP_ROUTINE - Previous output routine ; 0392 1 ! ; 0393 1 ! OUPTUT PARAMETERS: ; 0394 1 ! ; 0395 1 ! The value of the routine is the previous output routine address. ; 0396 1 ! ; 0397 1 ! IMPLICIT OUTPUTS: ; 0398 1 ! ; 0399 1 ! DUMP_ROUTINE - New output routine ; 0400 1 ! ; 0401 1 ! COMPLETION CODES: ; 0402 1 ! ; 0403 1 ! None. ; 0404 1 ! ; 0405 1 ! SIDE EFFECTS: ; 0406 1 ! ; 0407 1 ! None. ; 0408 1 ! ; 0409 1 !-- ; 0410 1 ; 0411 2 BEGIN ; 0412 2 ; 0413 2 LOCAL ; 0414 2 OLD_RTN; ! Old routine address ; 0415 2 ; 0416 2 OLD_RTN = .DUMP_ROUTINE; ! Remember the old address ; 0417 2 DUMP_ROUTINE = .OUT_RTN; ! Save the new ; 0418 2 RETURN .OLD_RTN; ! And return the old value ; 0419 1 END; ! End of TT_SET_OUTPUT .ENTRY TT_SET_OUTPUT, ^M<> ;TT_SET_OUTPUT, Save nothing 0371 0000 00000 MOVL W^U.2, R0 ;U.2, OLD_RTN 0416 50 0000' CF D0 00002 MOVL 4(AP), W^U.2 ;OUT_RTN, U.2 0417 0000' CF 04 AC D0 00007 RET ; 0418 04 0000D ; Routine Size: 14 bytes, Routine Base: $CODE$ + 0018 ; 0420 1 ; 0421 1 %SBTTL 'TT_HOLD - Start holding text until TT_OUTPUT call' ; 0422 1 ; 0423 1 GLOBAL ROUTINE TT_HOLD (FLAG) : NOVALUE = ; 0424 1 ; 0425 1 !++ ; 0426 1 ! FUNCTIONAL DESCRIPTION: ; 0427 1 ! ; 0428 1 ! This routine is called to start buffering an amount of data ; 0429 1 ! which should not be output until TT_OUTPUT is called. It ; 0430 1 ! sets a flag to indicate that output should not be done on ; 0431 1 ! CRLF's. ; 0432 1 ! ; 0433 1 ! CALLING SEQUENCE: ; 0434 1 ! ; 0435 1 ! TT_HOLD (TRUE or FALSE); ; 0436 1 ! ; 0437 1 ! INPUT PARAMETERS: ; 0438 1 ! ; 0439 1 ! FLAG - True if output should be held past LF's. False if output ; 0440 1 ! should be dumped on each LF. ; 0441 1 ! ; 0442 1 ! IMPLICIT INPUTS: ; 0443 1 ! ; 0444 1 ! None. ; 0445 1 ! ; 0446 1 ! OUPTUT PARAMETERS: ; 0447 1 ! ; 0448 1 ! None. ; 0449 1 ! ; 0450 1 ! IMPLICIT OUTPUTS: ; 0451 1 ! ; 0452 1 ! HOLD_FLAG is set to true. ; 0453 1 ! ; 0454 1 ! COMPLETION CODES: ; 0455 1 ! ; 0456 1 ! None. ; 0457 1 ! ; 0458 1 ! SIDE EFFECTS: ; 0459 1 ! ; 0460 1 ! None. ; 0461 1 ! ; 0462 1 !-- ; 0463 1 ; 0464 2 BEGIN ; 0465 2 HOLD_FLAG = .FLAG; ; 0466 1 END; ! End of TT_HOLD .ENTRY TT_HOLD, ^M<> ;TT_HOLD, Save nothing 0423 0000 00000 MOVL 4(AP), W^U.1 ;FLAG, U.1 0465 0000' CF 04 AC D0 00002 RET ; 0466 04 00008 ; Routine Size: 9 bytes, Routine Base: $CODE$ + 0026 ; 0467 1 ; 0468 1 %SBTTL 'Terminal routines -- TT_OUTPUT - Output the buffer' ; 0469 1 ; 0470 1 GLOBAL ROUTINE TT_OUTPUT : NOVALUE = ; 0471 1 ; 0472 1 !++ ; 0473 1 ! FUNCTIONAL DESCRIPTION: ; 0474 1 ! ; 0475 1 ! This routine will dump the text buffer on the output device. ; 0476 1 ! ; 0477 1 ! CALLING SEQUENCE: ; 0478 1 ! ; 0479 1 ! TT_OUTPUT(); ; 0480 1 ! ; 0481 1 ! INPUT PARAMETERS: ; 0482 1 ! ; 0483 1 ! None. ; 0484 1 ! ; 0485 1 ! IMPLICIT INPUTS: ; 0486 1 ! ; 0487 1 ! None. ; 0488 1 ! ; 0489 1 ! OUTPUT PARAMETERS: ; 0490 1 ! ; 0491 1 ! None. ; 0492 1 ! ; 0493 1 ! IMPLICIT OUTPUTS: ; 0494 1 ! ; 0495 1 ! None. ; 0496 1 ! ; 0497 1 ! COMPLETION CODES: ; 0498 1 ! ; 0499 1 ! None. ; 0500 1 ! ; 0501 1 ! SIDE EFFECTS: ; 0502 1 ! ; 0503 1 ! None. ; 0504 1 ! ; 0505 1 !-- ; 0506 1 ; 0507 2 BEGIN ; 0508 2 ; 0509 2 LOCAL ; 0510 2 STATUS; ! Status returned by the library routine ; 0511 2 ; 0512 2 ! ; 0513 2 ! Output the text ; 0514 2 ! ; 0515 2 CH$WCHAR_A (CHR_NUL, TEXT_POINTER); ; 0516 2 (.DUMP_ROUTINE) (TEXT_BUFFER, .TEXT_COUNT); ! Output the buffer to the correct place ; 0517 2 ! ; 0518 2 ! Now reset the descriptor and the pointer to a virgin state ; 0519 2 ! ; 0520 2 TEXT_COUNT = 0; ; 0521 2 TEXT_POINTER = CH$PTR (TEXT_BUFFER); ; 0522 2 ! ; 0523 1 END; ! End of TT_OUTPUT .ENTRY TT_OUTPUT, ^M ;TT_OUTPUT, Save R2 0470 0004 00000 MOVAB W^U.4, R2 ;U.4, R2 52 0000' CF 9E 00002 CLRB @0(R2) ;@TEXT_POINTER 0515 00 B2 94 00007 INCL (R2) ;TEXT_POINTER 62 D6 0000A PUSHL -4(R2) ;TEXT_COUNT 0516 FC A2 DD 0000C PUSHAB 4(R2) ;TEXT_BUFFER 04 A2 9F 0000F CALLS #2, @-8(R2) ;#2, @DUMP_ROUTINE F8 B2 02 FB 00012 CLRL -4(R2) ;TEXT_COUNT 0520 FC A2 D4 00016 MOVAB 4(R2), (R2) ;TEXT_BUFFER, TEXT_POINTER 0521 62 04 A2 9E 00019 RET ; 0523 04 0001D ; Routine Size: 30 bytes, Routine Base: $CODE$ + 002F ; 0524 1 ; 0525 1 %SBTTL 'Terminal routines -- TT_CHAR - Output a single character' ; 0526 1 ; 0527 1 GLOBAL ROUTINE TT_CHAR (CHARACTER) : NOVALUE = ; 0528 1 ; 0529 1 !++ ; 0530 1 ! FUNCTIONAL DESCRIPTION: ; 0531 1 ! ; 0532 1 ! This routine will store a character into the text buffer. It will ; 0533 1 ! cause the text to be output if the character is a line terminator. ; 0534 1 ! ; 0535 1 ! CALLING SEQUENCE: ; 0536 1 ! ; 0537 1 ! TT_CHAR(Character); ; 0538 1 ! ; 0539 1 ! INPUT PARAMETERS: ; 0540 1 ! ; 0541 1 ! Character - Character to store into the text buffer. ; 0542 1 ! ; 0543 1 ! IMPLICIT INPUTS: ; 0544 1 ! ; 0545 1 ! None. ; 0546 1 ! ; 0547 1 ! OUTPUT PARAMETERS: ; 0548 1 ! ; 0549 1 ! None. ; 0550 1 ! ; 0551 1 ! IMPLICIT OUTPUTS: ; 0552 1 ! ; 0553 1 ! None. ; 0554 1 ! ; 0555 1 ! COMPLETION CODES: ; 0556 1 ! ; 0557 1 ! None. ; 0558 1 ! ; 0559 1 ! SIDE EFFECTS: ; 0560 1 ! ; 0561 1 ! None. ; 0562 1 ! ; 0563 1 !-- ; 0564 1 ; 0565 2 BEGIN ; 0566 2 ! ; 0567 2 ! Increment the count of the characters ; 0568 2 ! ; 0569 2 TEXT_COUNT = .TEXT_COUNT + 1; ; 0570 2 ! ; 0571 2 ! And store the character ; 0572 2 ! ; 0573 2 CH$WCHAR_A (.CHARACTER, TEXT_POINTER); ; 0574 2 ! ; 0575 2 ! If this is a line feed then just output the text string ; 0576 2 ! ; 0577 2 ; 0578 2 IF (.CHARACTER EQL CHR_LFD) AND NOT .HOLD_FLAG THEN TT_OUTPUT (); ; 0579 2 ; 0580 2 ! ; 0581 2 ! Check to make sure we are not exceeding the limit of the buffer ; 0582 2 ! ; 0583 2 ; 0584 2 IF .TEXT_COUNT EQL TEXT_BFR_LENGTH - 1 THEN TT_OUTPUT (); ; 0585 2 ; 0586 2 ! ; 0587 1 END; ! End of TT_CHAR .ENTRY TT_CHAR, ^M ;TT_CHAR, Save R2 0527 0004 00000 MOVAB W^U.3, R2 ;U.3, R2 52 0000' CF 9E 00002 INCL (R2) ;TEXT_COUNT 0569 62 D6 00007 MOVB 4(AP), @4(R2) ;CHARACTER, @TEXT_POINTER 0573 04 B2 04 AC 90 00009 INCL 4(R2) ;TEXT_POINTER 04 A2 D6 0000E CMPL 4(AP), #10 ;CHARACTER, #10 0578 0A 04 AC D1 00011 BNEQ 1$ ;1$ 08 12 00015 BLBS -8(R2), 1$ ;HOLD_FLAG, 1$ 04 F8 A2 E8 00017 CALLS #0, B^TT_OUTPUT ;#0, TT_OUTPUT C3 AF 00 FB 0001B 1$: CMPL (R2), #255 ;TEXT_COUNT, #255 0584 000000FF 8F 62 D1 0001F BNEQ 2$ ;2$ 04 12 00026 CALLS #0, B^TT_OUTPUT ;#0, TT_OUTPUT B6 AF 00 FB 00028 2$: RET ; 0587 04 0002C ; Routine Size: 45 bytes, Routine Base: $CODE$ + 004D ; 0588 1 ; 0589 1 %SBTTL 'Terminal routines -- TT_TEXT - Output a text string' ; 0590 1 ; 0591 1 GLOBAL ROUTINE TT_TEXT (ADDRESS) : NOVALUE = ; 0592 1 ; 0593 1 !++ ; 0594 1 ! FUNCTIONAL DESCRIPTION: ; 0595 1 ! ; 0596 1 ! This routine will output text on the user's terminal. It will ; 0597 1 ! assume that it must check to determine if it can output the text ; 0598 1 ! or not. ; 0599 1 ! ; 0600 1 ! CALLING SEQUENCE: ; 0601 1 ! ; 0602 1 ! TT_TEXT(TEXT_ADDRESS); ; 0603 1 ! ; 0604 1 ! INPUT PARAMETERS: ; 0605 1 ! ; 0606 1 ! None. ; 0607 1 ! ; 0608 1 ! IMPLICIT INPUTS: ; 0609 1 ! ; 0610 1 ! None. ; 0611 1 ! ; 0612 1 ! OUTPUT PARAMETERS: ; 0613 1 ! ; 0614 1 ! None. ; 0615 1 ! ; 0616 1 ! IMPLICIT OUTPUTS: ; 0617 1 ! ; 0618 1 ! None. ; 0619 1 ! ; 0620 1 ! COMPLETION CODES: ; 0621 1 ! ; 0622 1 ! None. ; 0623 1 ! ; 0624 1 ! SIDE EFFECTS: ; 0625 1 ! ; 0626 1 ! None. ; 0627 1 ! ; 0628 1 !-- ; 0629 1 ; 0630 2 BEGIN ; 0631 2 ; 0632 2 LOCAL ; 0633 2 CHARACTER, ! Character being processed ; 0634 2 ARG_POINTER; ! Pointer to the argument's text ; 0635 2 ; 0636 2 ! ; 0637 2 ! Construct a pointer to the argument. ; 0638 2 ! ; 0639 2 ARG_POINTER = CH$PTR (.ADDRESS); ; 0640 2 ! ; 0641 2 ! Get the first character that was passed. ; 0642 2 ! ; 0643 2 CHARACTER = CH$RCHAR_A (ARG_POINTER); ; 0644 2 ! ; 0645 2 ! Loop reading characters and calling the output routine to process ; 0646 2 ! them ; 0647 2 ! ; 0648 2 ; 0649 2 WHILE .CHARACTER NEQ CHR_NUL DO ; 0650 3 BEGIN ; 0651 3 TT_CHAR (.CHARACTER); ; 0652 3 CHARACTER = CH$RCHAR_A (ARG_POINTER); ; 0653 2 END; ; 0654 2 ; 0655 1 END; ! End of TT_TEXT .ENTRY TT_TEXT, ^M ;TT_TEXT, Save R2,R3 0591 000C 00000 MOVL 4(AP), R2 ;ADDRESS, ARG_POINTER 0639 52 04 AC D0 00002 1$: MOVZBL (R2)+, R3 ;(ARG_POINTER)+, CHARACTER 0643 53 82 9A 00006 BEQL 2$ ;2$ 0649 08 13 00009 PUSHL R3 ;CHARACTER 0651 53 DD 0000B CALLS #1, B^TT_CHAR ;#1, TT_CHAR C2 AF 01 FB 0000D BRB 1$ ;1$ 0652 F3 11 00011 2$: RET ; 0655 04 00013 ; Routine Size: 20 bytes, Routine Base: $CODE$ + 007A ; 0656 1 ; 0657 1 %SBTTL 'Terminal routines -- TT_NUMBER - Output a three digit number' ; 0658 1 ; 0659 1 GLOBAL ROUTINE TT_NUMBER (NUMBER) : NOVALUE = ; 0660 1 ; 0661 1 !++ ; 0662 1 ! FUNCTIONAL DESCRIPTION: ; 0663 1 ! ; 0664 1 ! This routine will store a three digit number into the text buffer. ; 0665 1 ! It will just return if the number is greater than 999. ; 0666 1 ! ; 0667 1 ! CALLING SEQUENCE: ; 0668 1 ! ; 0669 1 ! TT_NUMBER(Value); ; 0670 1 ! ; 0671 1 ! INPUT PARAMETERS: ; 0672 1 ! ; 0673 1 ! Value - Value to output. ; 0674 1 ! ; 0675 1 ! IMPLICIT INPUTS: ; 0676 1 ! ; 0677 1 ! None. ; 0678 1 ! ; 0679 1 ! OUTPUT PARAMETERS: ; 0680 1 ! ; 0681 1 ! None. ; 0682 1 ! ; 0683 1 ! IMPLICIT OUTPUTS: ; 0684 1 ! ; 0685 1 ! None. ; 0686 1 ! ; 0687 1 ! COMPLETION CODES: ; 0688 1 ! ; 0689 1 ! None. ; 0690 1 ! ; 0691 1 ! SIDE EFFECTS: ; 0692 1 ! ; 0693 1 ! None. ; 0694 1 ! ; 0695 1 !-- ; 0696 1 ; 0697 2 BEGIN ; 0698 2 ROUTINE TT_NUM_WORKER (VALUE) : NOVALUE = ; 0699 3 BEGIN ; 0700 3 ; 0701 3 IF .VALUE LEQ 9 ; 0702 3 THEN ; 0703 3 TT_CHAR (.VALUE + %C'0') ; 0704 3 ELSE ; 0705 4 BEGIN ; 0706 4 TT_NUM_WORKER (.VALUE/10); ; 0707 4 TT_CHAR ((.VALUE MOD 10) + %C'0'); ; 0708 3 END; ; 0709 3 ; 0710 2 END; ;TT_NUM_WORKER U.13: .WORD ^M<> ;Save nothing 0698 0000 00000 CMPL 4(AP), #9 ;VALUE, #9 0701 09 04 AC D1 00002 BGTR 1$ ;1$ 07 14 00006 ADDL3 #48, 4(AP), -(SP) ;#48, VALUE, -(SP) 0703 04 AC 30 C1 00008 ; 7E 0000C BRB 2$ ;2$ 17 11 0000D 1$: DIVL3 #10, 4(AP), -(SP) ;#10, VALUE, -(SP) 0706 04 AC 0A C7 0000F ; 7E 00013 CALLS #1, B^U.13 ;#1, U.13 E8 AF 01 FB 00014 EMUL #1, 4(AP), #0, -(SP) ;#1, VALUE, #0, -(SP) 0707 04 AC 01 7A 00018 ; 7E 00 0001C EDIV #10, (SP)+, R0, R0 ;#10, (SP)+, R0, R0 8E 0A 7B 0001E ; 50 50 00021 PUSHAB 48(R0) ;48(R0) 30 A0 9F 00023 2$: CALLS #1, B^TT_CHAR ;#1, TT_CHAR 95 AF 01 FB 00026 RET ; 0710 04 0002A ; Routine Size: 43 bytes, Routine Base: $CODE$ + 008E ; 0711 2 ; 0712 2 IF .NUMBER LSS 0 ; 0713 2 THEN ; 0714 3 BEGIN ; 0715 3 TT_CHAR (%C'-'); ; 0716 3 NUMBER = -.NUMBER; ; 0717 2 END; ; 0718 2 ; 0719 2 TT_NUM_WORKER (.NUMBER); ; 0720 1 END; ! End of TT_NUMBER .ENTRY TT_NUMBER, ^M<> ;TT_NUMBER, Save nothing 0659 0000 00000 TSTL 4(AP) ;NUMBER 0712 04 AC D5 00002 BGEQ 1$ ;1$ 0B 18 00005 PUSHL #45 ;#45 0715 2D DD 00007 CALLS #1, B^TT_CHAR ;#1, TT_CHAR 87 AF 01 FB 00009 MNEGL 4(AP), 4(AP) ;NUMBER, NUMBER 0716 04 AC 04 AC CE 0000D 1$: PUSHL 4(AP) ;NUMBER 0719 04 AC DD 00012 CALLS #1, B^U.13 ;#1, U.13 BC AF 01 FB 00015 RET ; 0720 04 00019 ; Routine Size: 26 bytes, Routine Base: $CODE$ + 00B9 ; 0721 1 ; 0722 1 %SBTTL 'Terminal routines -- TT_CRLF - Output a CRLF' ; 0723 1 ; 0724 1 GLOBAL ROUTINE TT_CRLF : NOVALUE = ; 0725 1 ; 0726 1 !++ ; 0727 1 ! FUNCTIONAL DESCRIPTION: ; 0728 1 ! ; 0729 1 ! This routine will cause the contents of the terminal buffer to be ; 0730 1 ! output to SYS$OUTPUT:. ; 0731 1 ! ; 0732 1 ! CALLING SEQUENCE: ; 0733 1 ! ; 0734 1 ! TT_CRLF(); ; 0735 1 ! ; 0736 1 ! INPUT PARAMETERS: ; 0737 1 ! ; 0738 1 ! None. ; 0739 1 ! ; 0740 1 ! IMPLICIT INPUTS: ; 0741 1 ! ; 0742 1 ! None. ; 0743 1 ! ; 0744 1 ! OUTPUT PARAMETERS: ; 0745 1 ! ; 0746 1 ! None. ; 0747 1 ! ; 0748 1 ! IMPLICIT OUTPUTS: ; 0749 1 ! ; 0750 1 ! None. ; 0751 1 ! ; 0752 1 ! COMPLETION CODES: ; 0753 1 ! ; 0754 1 ! None. ; 0755 1 ! ; 0756 1 ! SIDE EFFECTS: ; 0757 1 ! ; 0758 1 ! None. ; 0759 1 ! ; 0760 1 !-- ; 0761 1 ; 0762 2 BEGIN ; 0763 2 TT_CHAR (CHR_CRT); ; 0764 2 TT_CHAR (CHR_LFD); ; 0765 1 END; ! End of TT_CRLF .ENTRY TT_CRLF, ^M<> ;TT_CRLF, Save nothing 0724 0000 00000 PUSHL #13 ;#13 0763 0D DD 00002 CALLS #1, W^TT_CHAR ;#1, TT_CHAR FF71 CF 01 FB 00004 PUSHL #10 ;#10 0764 0A DD 00009 CALLS #1, W^TT_CHAR ;#1, TT_CHAR FF6A CF 01 FB 0000B RET ; 0765 04 00010 ; Routine Size: 17 bytes, Routine Base: $CODE$ + 00D3 ; 0766 1 ; 0767 1 %SBTTL 'End of KERTRM' ; 0768 1 END ! End of module ; 0769 1 ; 0770 0 ELUDOM ; PSECT SUMMARY ; ; Name Bytes Attributes ; ; $OWN$ 272 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2) ; $CODE$ 228 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2) ; . ABS . 0 NOVEC,NOWRT,NORD ,NOEXE,NOSHR, LCL, ABS, CON,NOPIC,ALIGN(0) ; COMMAND QUALIFIERS ; BLI/LIS/MAC=(ASSEM,UNIQ)/SOUR:NOHEAD VMSTT ; Compilation Complete .END