home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
old
/
misc
/
pdp10
/
k10tt.mac
< prev
next >
Wrap
Text File
|
2020-01-01
|
18KB
|
735 lines
; 0001 0 MODULE KERTT (IDENT = '2.0.003'
; 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
; 0051 1 %SBTTL 'Library files'
; 0052 1 !
; 0053 1 ! INCLUDE FILES:
; 0054 1 !
; 0055 1 !
; 0056 1 ! KERMIT common definitions
; 0057 1 !
; 0058 1
; 0059 1 REQUIRE 'KERCOM';
; 0266 1
; 0267 1 %SBTTL 'Symbol definitions'
; 0268 1 !
; 0269 1 ! EQUATED SYMBOLS:
; 0270 1 !
; 0271 1
; 0272 1 LITERAL
; 0273 1 TEXT%BFR%LENGTH = 256; ! Length of the text buffer
; 0274 1
; 0275 1 %SBTTL 'Storage'
; 0276 1 !
; 0277 1 ! OWN STORAGE:
; 0278 1 !
; 0279 1 !
; 0280 1 ! TT%xxxxx routine storage
; 0281 1 !
; 0282 1
; 0283 1 OWN
; 0284 1 DUMP%ROUTINE, ! Address of routine to dump text
; 0285 1 TEXT%COUNT, ! Count of the characters
; 0286 1 TEXT%POINTER, ! Pointer to store characters
; 0287 1 TEXT%BUFFER : VECTOR [CH$ALLOCATION (TEXT%BFR%LENGTH)]; ! Buffer of characters
; 0288 1
; 0289 1 %SBTTL 'External storage'
; 0290 1
; 0291 1 !++
; 0292 1 ! The following is the various external storage locations that are
; 0293 1 ! referenced from this module.
; 0294 1 !--
; 0295 1
; 0296 1 !
; 0297 1 ! KERMSG storage
; 0298 1 !
; 0299 1
; 0300 1 EXTERNAL
; 0301 1 CONNECT%FLAG; ! Flag if communications line is TT:
; 0302 1
; 0303 1 !++
; 0304 1 ! The following is the only external routine used by this module. This
; 0305 1 ! routine will cause the terminal buffer that we have been building to be
; 0306 1 ! output on the terminal
; 0307 1 !--
; 0308 1
; 0309 1 EXTERNAL ROUTINE
; 0310 1 TERM%DUMP : NOVALUE; ! Output the terminal buffer
; 0311 1
; 0312 1 %SBTTL 'Terminal routines -- TT%INIT - Initialize this module'
; 0313 1
; 0314 1 GLOBAL ROUTINE TT%INIT : NOVALUE =
; 0315 1
; 0316 1 !++
; 0317 1 ! FUNCTIONAL DESCRIPTION:
; 0318 1 !
; 0319 1 ! This routine will initialize the terminal processing module. It will
; 0320 1 ! initialize the various data locations in this module.
; 0321 1 !
; 0322 1 ! CALLING SEQUENCE:
; 0323 1 !
; 0324 1 ! TT%INIT();
; 0325 1 !
; 0326 1 ! INPUT PARAMETERS:
; 0327 1 !
; 0328 1 ! None.
; 0329 1 !
; 0330 1 ! IMPLICIT INPUTS:
; 0331 1 !
; 0332 1 ! None.
; 0333 1 !
; 0334 1 ! OUTPUT PARAMETERS:
; 0335 1 !
; 0336 1 ! None.
; 0337 1 !
; 0338 1 ! IMPLICIT OUTPUTS:
; 0339 1 !
; 0340 1 ! None.
; 0341 1 !
; 0342 1 ! COMPLETION CODES:
; 0343 1 !
; 0344 1 ! None.
; 0345 1 !
; 0346 1 ! SIDE EFFECTS:
; 0347 1 !
; 0348 1 ! None.
; 0349 1 !
; 0350 1 !--
; 0351 1
; 0352 2 BEGIN
; 0353 2 !
; 0354 2 ! Now initialize the various pointers
; 0355 2 !
; 0356 2 TEXT%COUNT = 0;
; 0357 2 TEXT%POINTER = CH$PTR (TEXT%BUFFER);
; 0358 2 DUMP%ROUTINE = TERM%DUMP; ! Initial output routine is to terminal
; 0359 1 END; ! End of TT%INIT
TITLE KERTT
TWOSEG
.REQUEST REL:B361LB.REL
RELOC 0
; DUMP%ROUTINE
U.1: BLOCK 1
; TEXT%COUNT
U.2: BLOCK 1
; TEXT%POINTER
U.3: BLOCK 1
; TEXT%BUFFER
U.4: BLOCK 64
EXTERN CONNECT%FLAG, TERM%DUMP
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==: 10
GC%CONNECT==: 11
GC%RENAME==: 12
GC%COPY==: 13
GC%WHO==: 14
GC%SEND%MSG==: 15
GC%STATUS==: 16
GC%COMMAND==: 17
GC%KERMIT==: 20
GC%JOURNAL==: 21
GC%VARIABLE==: 22
GC%PROGRAM==: 23
GC%MAX==: 23
DP%FULL==: 0
DP%HALF==: 1
CHK%1CHAR==: 61
CHK%2CHAR==: 62
CHK%CRC==: 63
MAX%MSG==: 1752
AC0= 0
AC1= 1
AC2= 2
AC3= 3
AC4= 4
AC5= 5
AC6= 6
AC7= 7
AC10= 10
AC11= 11
AC12= 12
AC13= 13
AC14= 14
FP= 15
AC16= 16
SP= 17
RELOC 400000
TT%INIT::
SETZM U.2 ; 0356
MOVE AC1,C.1 ; 0357
MOVEM AC1,U.3
MOVEI AC1,TERM%DUMP ; 0358
MOVEM AC1,U.1
POPJ SP, ; 0314
C.1: POINT 7,U.4-1,34
; Routine Size: 7 words
; 0360 1
; 0361 1 %SBTTL 'TT%SET%OUTPUT - Set output routine to use'
; 0362 1 GLOBAL ROUTINE TT%SET%OUTPUT (OUT%RTN) =
; 0363 1
; 0364 1 !++
; 0365 1 ! FUNCTIONAL DESCRIPTION:
; 0366 1 !
; 0367 1 ! This routine will set the output routine to use for the TT%xxx routines.
; 0368 1 !The argument is a routine address which will output a counted ASCIZ string.
; 0369 1 !It will return the address of the previous output routine.
; 0370 1 !
; 0371 1 ! CALLING SEQUENCE:
; 0372 1 !
; 0373 1 ! OLD%RTN = TT%SET%OUTPUT (OUT%RTN);
; 0374 1 !
; 0375 1 ! INPUT PARAMETERS:
; 0376 1 !
; 0377 1 ! OUT%RTN - Address of routine to output a counted ASCIZ string
; 0378 1 ! called as OUT%RTN (Address of string, length of string)
; 0379 1 !
; 0380 1 ! IMPLICIT INPUTS:
; 0381 1 !
; 0382 1 ! DUMP%ROUTINE - Previous output routine
; 0383 1 !
; 0384 1 ! OUPTUT PARAMETERS:
; 0385 1 !
; 0386 1 ! The value of the routine is the previous output routine address.
; 0387 1 !
; 0388 1 ! IMPLICIT OUTPUTS:
; 0389 1 !
; 0390 1 ! DUMP%ROUTINE - New output routine
; 0391 1 !
; 0392 1 ! COMPLETION CODES:
; 0393 1 !
; 0394 1 ! None.
; 0395 1 !
; 0396 1 ! SIDE EFFECTS:
; 0397 1 !
; 0398 1 ! None.
; 0399 1 !
; 0400 1 !--
; 0401 1
; 0402 2 BEGIN
; 0403 2 LOCAL
; 0404 2 OLD%RTN; ! Old routine address
; 0405 2
; 0406 2 OLD%RTN = .DUMP%ROUTINE; ! Remember the old address
; 0407 2 DUMP%ROUTINE = .OUT%RTN; ! Save the new
; 0408 2 RETURN .OLD%RTN; ! And return the old value
; 0409 1 END; ! End of TT%SET%OUTPUT
TT%SET%OUTPUT::
MOVE AC1,U.1 ; 0406
MOVE AC2,-1(SP) ; 0407
MOVEM AC2,U.1
POPJ SP, ; 0362
; Routine Size: 4 words
; 0410 1
; 0411 1 %SBTTL 'Terminal routines -- TT%OUTPUT - Output the buffer'
; 0412 1 GLOBAL ROUTINE TT%OUTPUT : NOVALUE =
; 0413 1
; 0414 1 !++
; 0415 1 ! FUNCTIONAL DESCRIPTION:
; 0416 1 !
; 0417 1 ! This routine will dump the text buffer on the output device.
; 0418 1 !
; 0419 1 ! CALLING SEQUENCE:
; 0420 1 !
; 0421 1 ! TT%OUTPUT();
; 0422 1 !
; 0423 1 ! INPUT PARAMETERS:
; 0424 1 !
; 0425 1 ! None.
; 0426 1 !
; 0427 1 ! IMPLICIT INPUTS:
; 0428 1 !
; 0429 1 ! None.
; 0430 1 !
; 0431 1 ! OUTPUT PARAMETERS:
; 0432 1 !
; 0433 1 ! None.
; 0434 1 !
; 0435 1 ! IMPLICIT OUTPUTS:
; 0436 1 !
; 0437 1 ! None.
; 0438 1 !
; 0439 1 ! COMPLETION CODES:
; 0440 1 !
; 0441 1 ! None.
; 0442 1 !
; 0443 1 ! SIDE EFFECTS:
; 0444 1 !
; 0445 1 ! None.
; 0446 1 !
; 0447 1 !--
; 0448 1
; 0449 2 BEGIN
; 0450 2
; 0451 2 LOCAL
; 0452 2 STATUS; ! Status returned by the library routine
; 0453 2
; 0454 2 !
; 0455 2 ! Output the text
; 0456 2 !
; 0457 2 CH$WCHAR%A (CHR%NUL, TEXT%POINTER);
; 0458 2 (.DUMP%ROUTINE) (TEXT%BUFFER, .TEXT%COUNT); ! Output the buffer to the correct place
; 0459 2 !
; 0460 2 ! Now reset the descriptor and the pointer to a virgin state
; 0461 2 !
; 0462 2 TEXT%COUNT = 0;
; 0463 2 TEXT%POINTER = CH$PTR (TEXT%BUFFER);
; 0464 2 !
; 0465 1 END; ! End of TT%OUTPUT
TT%OUTPUT::
SETZ AC1, ; 0457
IDPB AC1,U.3
MOVE AC1,U.1 ; 0458
PUSH SP,C.2
PUSH SP,U.2
PUSHJ SP,0(AC1)
SETZM U.2 ; 0462
MOVE AC1,C.1 ; 0463
MOVEM AC1,U.3
ADJSP SP,-2 ; 0449
POPJ SP, ; 0412
C.2: XWD 0,U.4
; Routine Size: 12 words
; 0466 1 %SBTTL 'Terminal routines -- TT%CHAR - Output a single character'
; 0467 1
; 0468 1 GLOBAL ROUTINE TT%CHAR (CHARACTER) : NOVALUE =
; 0469 1
; 0470 1 !++
; 0471 1 ! FUNCTIONAL DESCRIPTION:
; 0472 1 !
; 0473 1 ! This routine will store a character into the text buffer. It will
; 0474 1 ! cause the text to be output if the character is a line terminator.
; 0475 1 !
; 0476 1 ! CALLING SEQUENCE:
; 0477 1 !
; 0478 1 ! TT%CHAR(Character);
; 0479 1 !
; 0480 1 ! INPUT PARAMETERS:
; 0481 1 !
; 0482 1 ! Character - Character to store into the text buffer.
; 0483 1 !
; 0484 1 ! IMPLICIT INPUTS:
; 0485 1 !
; 0486 1 ! None.
; 0487 1 !
; 0488 1 ! OUTPUT PARAMETERS:
; 0489 1 !
; 0490 1 ! None.
; 0491 1 !
; 0492 1 ! IMPLICIT OUTPUTS:
; 0493 1 !
; 0494 1 ! None.
; 0495 1 !
; 0496 1 ! COMPLETION CODES:
; 0497 1 !
; 0498 1 ! None.
; 0499 1 !
; 0500 1 ! SIDE EFFECTS:
; 0501 1 !
; 0502 1 ! None.
; 0503 1 !
; 0504 1 !--
; 0505 1
; 0506 2 BEGIN
; 0507 2 !
; 0508 2 ! Increment the count of the characters
; 0509 2 !
; 0510 2 TEXT%COUNT = .TEXT%COUNT + 1;
; 0511 2 !
; 0512 2 ! And store the character
; 0513 2 !
; 0514 2 CH$WCHAR%A (.CHARACTER, TEXT%POINTER);
; 0515 2 !
; 0516 2 ! If this is a line feed then just output the text string
; 0517 2 !
; 0518 2
; 0519 2 IF .CHARACTER EQL CHR%LFD THEN TT%OUTPUT ();
; 0520 2 !
; 0521 2 ! Check to make sure we are not exceeding the limit of the buffer
; 0522 2 !
; 0523 2 IF .TEXT%COUNT EQL TEXT%BFR%LENGTH-1 THEN TT%OUTPUT ();
; 0524 2
; 0525 2
; 0526 2 !
; 0527 1 END; ! End of TT%CHAR
TT%CHAR::
AOS U.2 ; 0510
MOVE AC1,-1(SP) ; 0514
IDPB AC1,U.3
MOVEI AC1,12 ; 0519
CAMN AC1,-1(SP)
PUSHJ SP,TT%OUTPUT
MOVEI AC1,377 ; 0523
CAMN AC1,U.2
PUSHJ SP,TT%OUTPUT
POPJ SP, ; 0468
; Routine Size: 10 words
; 0528 1
; 0529 1 %SBTTL 'Terminal routines -- TT%TEXT - Output a text string'
; 0530 1
; 0531 1 GLOBAL ROUTINE TT%TEXT (ADDRESS) : NOVALUE =
; 0532 1
; 0533 1 !++
; 0534 1 ! FUNCTIONAL DESCRIPTION:
; 0535 1 !
; 0536 1 ! This routine will output text on the user's terminal. It will
; 0537 1 ! assume that it must check to determine if it can output the text
; 0538 1 ! or not.
; 0539 1 !
; 0540 1 ! CALLING SEQUENCE:
; 0541 1 !
; 0542 1 ! TT%TEXT(TEXT%ADDRESS);
; 0543 1 !
; 0544 1 ! INPUT PARAMETERS:
; 0545 1 !
; 0546 1 ! None.
; 0547 1 !
; 0548 1 ! IMPLICIT INPUTS:
; 0549 1 !
; 0550 1 ! None.
; 0551 1 !
; 0552 1 ! OUTPUT PARAMETERS:
; 0553 1 !
; 0554 1 ! None.
; 0555 1 !
; 0556 1 ! IMPLICIT OUTPUTS:
; 0557 1 !
; 0558 1 ! None.
; 0559 1 !
; 0560 1 ! COMPLETION CODES:
; 0561 1 !
; 0562 1 ! None.
; 0563 1 !
; 0564 1 ! SIDE EFFECTS:
; 0565 1 !
; 0566 1 ! None.
; 0567 1 !
; 0568 1 !--
; 0569 1
; 0570 2 BEGIN
; 0571 2
; 0572 2 LOCAL
; 0573 2 CHARACTER, ! Character being processed
; 0574 2 ARG%POINTER; ! Pointer to the argument's text
; 0575 2
; 0576 2 !
; 0577 2 ! Construct a pointer to the argument.
; 0578 2 !
; 0579 2 ARG%POINTER = CH$PTR (.ADDRESS);
; 0580 2 !
; 0581 2 ! Get the first character that was passed.
; 0582 2 !
; 0583 2 CHARACTER = CH$RCHAR%A (ARG%POINTER);
; 0584 2 !
; 0585 2 ! Loop reading characters and calling the output routine to process
; 0586 2 ! them
; 0587 2 !
; 0588 2
; 0589 2 WHILE .CHARACTER NEQ CHR%NUL DO
; 0590 3 BEGIN
; 0591 3 TT%CHAR (.CHARACTER);
; 0592 3 CHARACTER = CH$RCHAR%A (ARG%POINTER);
; 0593 2 END;
; 0594 2
; 0595 1 END; ! End of TT%TEXT
TT%TEXT::
PUSH SP,AC14 ; 0531
PUSH SP,AC16
MOVE AC1,-3(SP) ; 0579
MOVEI AC16,-1(AC1)
HRLI AC16,10700
ILDB AC14,AC16 ; 0583
L.1: JUMPE AC14,L.2 ; 0589
PUSH SP,AC14 ; 0591
PUSHJ SP,TT%CHAR
ILDB AC14,AC16 ; 0592
ADJSP SP,-1 ; 0590
JRST L.1 ; 0589
L.2: POP SP,AC16 ; 0531
POP SP,AC14
POPJ SP,
; Routine Size: 15 words
; 0596 1
; 0597 1 %SBTTL 'Terminal routines -- TT%NUMBER - Output a three digit number'
; 0598 1
; 0599 1 GLOBAL ROUTINE TT%NUMBER (NUMBER) : NOVALUE =
; 0600 1
; 0601 1 !++
; 0602 1 ! FUNCTIONAL DESCRIPTION:
; 0603 1 !
; 0604 1 ! This routine will store a three digit number into the text buffer.
; 0605 1 ! It will just return if the number is greater than 999.
; 0606 1 !
; 0607 1 ! CALLING SEQUENCE:
; 0608 1 !
; 0609 1 ! TT%NUMBER(Value);
; 0610 1 !
; 0611 1 ! INPUT PARAMETERS:
; 0612 1 !
; 0613 1 ! Value - Value to output.
; 0614 1 !
; 0615 1 ! IMPLICIT INPUTS:
; 0616 1 !
; 0617 1 ! None.
; 0618 1 !
; 0619 1 ! OUTPUT PARAMETERS:
; 0620 1 !
; 0621 1 ! None.
; 0622 1 !
; 0623 1 ! IMPLICIT OUTPUTS:
; 0624 1 !
; 0625 1 ! None.
; 0626 1 !
; 0627 1 ! COMPLETION CODES:
; 0628 1 !
; 0629 1 ! None.
; 0630 1 !
; 0631 1 ! SIDE EFFECTS:
; 0632 1 !
; 0633 1 ! None.
; 0634 1 !
; 0635 1 !--
; 0636 1
; 0637 2 BEGIN
; 0638 2 ROUTINE TT%NUM%WORKER (VALUE) : NOVALUE =
; 0639 3 BEGIN
; 0640 3
; 0641 3 IF .VALUE LEQ 9
; 0642 3 THEN
; 0643 3 TT%CHAR (.VALUE + %C'0')
; 0644 3 ELSE
; 0645 4 BEGIN
; 0646 4 TT%NUM%WORKER (.VALUE/10);
; 0647 4 TT%CHAR ((.VALUE MOD 10) + %C'0');
; 0648 3 END;
; 0649 3
; 0650 2 END;
; TT%NUM%WORKER
U.11: PUSH SP,AC16 ; 0638
MOVE AC16,-2(SP) ; 0641
CAILE AC16,11
JRST L.3
MOVE AC1,AC16 ; 0643
ADDI AC1,60
PUSH SP,AC1
PUSHJ SP,TT%CHAR
JRST L.4 ; 0641
L.3: MOVE AC1,AC16 ; 0646
IDIVI AC1,12
PUSH SP,AC1
PUSHJ SP,U.11
MOVE AC1,AC16 ; 0647
IDIVI AC1,12
ADDI AC2,60
PUSH SP,AC2
PUSHJ SP,TT%CHAR
ADJSP SP,-1 ; 0645
L.4: ADJSP SP,-1 ; 0639
POP SP,AC16 ; 0638
POPJ SP,
; Routine Size: 22 words
; 0651 2
; 0652 2 IF .NUMBER LSS 0
; 0653 2 THEN
; 0654 3 BEGIN
; 0655 3 TT%CHAR (%C'-');
; 0656 3 NUMBER = -.NUMBER;
; 0657 2 END;
; 0658 2
; 0659 2 TT%NUM%WORKER (.NUMBER);
; 0660 1 END; ! End of TT%NUMBER
TT%NUMBER::
SKIPL -1(SP) ; 0652
JRST L.5
PUSH SP,C.3 ; 0655
PUSHJ SP,TT%CHAR
MOVNS -2(SP) ; 0656
ADJSP SP,-1 ; 0654
L.5: PUSH SP,-1(SP) ; 0659
PUSHJ SP,U.11
ADJSP SP,-1 ; 0637
POPJ SP, ; 0599
C.3: EXP 55
; Routine Size: 11 words
; 0661 1
; 0662 1 %SBTTL 'Terminal routines -- TT%CRLF - Output a CRLF'
; 0663 1
; 0664 1 GLOBAL ROUTINE TT%CRLF : NOVALUE =
; 0665 1
; 0666 1 !++
; 0667 1 ! FUNCTIONAL DESCRIPTION:
; 0668 1 !
; 0669 1 ! This routine will cause the contents of the terminal buffer to be
; 0670 1 ! output to SYS$OUTPUT:.
; 0671 1 !
; 0672 1 ! CALLING SEQUENCE:
; 0673 1 !
; 0674 1 ! TT%CRLF();
; 0675 1 !
; 0676 1 ! INPUT PARAMETERS:
; 0677 1 !
; 0678 1 ! None.
; 0679 1 !
; 0680 1 ! IMPLICIT INPUTS:
; 0681 1 !
; 0682 1 ! None.
; 0683 1 !
; 0684 1 ! OUTPUT PARAMETERS:
; 0685 1 !
; 0686 1 ! None.
; 0687 1 !
; 0688 1 ! IMPLICIT OUTPUTS:
; 0689 1 !
; 0690 1 ! None.
; 0691 1 !
; 0692 1 ! COMPLETION CODES:
; 0693 1 !
; 0694 1 ! None.
; 0695 1 !
; 0696 1 ! SIDE EFFECTS:
; 0697 1 !
; 0698 1 ! None.
; 0699 1 !
; 0700 1 !--
; 0701 1
; 0702 2 BEGIN
; 0703 2 TT%CHAR (CHR%CRT);
; 0704 2 TT%CHAR (CHR%LFD);
; 0705 1 END; ! End of TT%CRLF
TT%CRLF::
PUSH SP,C.4 ; 0703
PUSHJ SP,TT%CHAR
PUSH SP,C.5 ; 0704
PUSHJ SP,TT%CHAR
ADJSP SP,-2 ; 0702
POPJ SP, ; 0664
C.4: EXP 15
C.5: EXP 12
; Routine Size: 8 words
; 0706 1
; 0707 1 %SBTTL 'End of KERTRM'
; 0708 1 END ! End of module
; 0709 1
; 0710 0 ELUDOM
; Low segment length: 55 words
; High segment length: 89 words
; Compilation Complete
END