home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
b
/
vmstt.mar
< prev
next >
Wrap
Text File
|
2020-01-01
|
24KB
|
802 lines
; 0001 0 MODULE KERTT (IDENT = '2.0.004'
; 0002 0 ) =
; 0003 1 BEGIN
; 0004 1
; 0005 1 SWITCHES LANGUAGE (COMMON);
; 0006 1
; 0007 1 !<BLF/WIDTH:100>
; 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<R2> ;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<R2> ;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<R2> ;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<R2,R3> ;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