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