home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / d / k10tt.mac < prev    next >
Text File  |  2020-01-01  |  18KB  |  743 lines

  1. ;   0001  0    MODULE KERTT (IDENT = '2.0.003'
  2. ;   0002  0            ) =
  3. ;   0003  1    BEGIN
  4. ;   0004  1    
  5. ;   0005  1    SWITCHES LANGUAGE (COMMON);
  6. ;   0006  1    
  7. ;   0007  1    !<BLF/WIDTH:100>
  8. ;   0008  1    
  9. ;   0009  1    !++
  10. ;   0010  1    ! FACILITY:
  11. ;   0011  1    !
  12. ;   0012  1    !    KERMIT text processing
  13. ;   0013  1    !
  14. ;   0014  1    ! ABSTRACT:
  15. ;   0015  1    !
  16. ;   0016  1    !    This module contains all of the text processing required for
  17. ;   0017  1    !    KERMSG.
  18. ;   0018  1    !
  19. ;   0019  1    ! ENVIRONMENT:
  20. ;   0020  1    !
  21. ;   0021  1    !    TOPS-10, P/OS, VAX/VMS
  22. ;   0022  1    !
  23. ;   0023  1    ! AUTHOR: Robert C. McQueen, CREATION DATE: 29-August-1983
  24. ;   0024  1    !--
  25. ;   0025  1    
  26. ;   0026  1    %SBTTL 'Table of Contents'
  27. ;   0027  1    !
  28. ;   0028  1    ! TABLE OF CONTENTS:
  29. ;   0029  1    !
  30. ;   0030  1    %SBTTL 'Revision History'
  31. ;   0031  1    
  32. ;   0032  1    !++
  33. ;   0033  1    !
  34. ;   0034  1    ! Create this module for PRO/Kermit 1.0, Kermit-10 2(100) and Kermit-32 1.2
  35. ;   0035  1    !
  36. ;   0036  1    ! 1.2.000    By: Robert C. McQueen            On: 29-August-1983
  37. ;   0037  1    !        Create this module.
  38. ;   0038  1    !
  39. ;   0039  1    ! 1.2.001    By: Robert C. McQueen        On: 9-Sept-1983
  40. ;   0040  1    !        Make the string passed to TERM%DUMP a counted ASCIZ string,
  41. ;   0041  1    !        not a counted ASCII string.
  42. ;   0042  1    !
  43. ;   0043  1    ! 1.2.002    By: Robert C. McQueen        On: 16-September-1983
  44. ;   0044  1    !        Make TT%OUTPUT a global routine, so we can force information
  45. ;   0045  1    !        output a various points in time.
  46. ;   0046  1    !
  47. ;   0047  1    ! 2.0.003    Release for TOPS-10 KERMIT-10 version 2.
  48. ;   0048  1    !        Release for VAX/VMS KERMIT-32 version 2.
  49. ;   0049  1    !--
  50. ;   0050  1    
  51. ;   0051  1    %SBTTL 'Library files'
  52. ;   0052  1    !
  53. ;   0053  1    ! INCLUDE FILES:
  54. ;   0054  1    !
  55. ;   0055  1    !
  56. ;   0056  1    ! KERMIT common definitions
  57. ;   0057  1    !
  58. ;   0058  1    
  59. ;   0059  1    REQUIRE 'KERCOM';
  60. ;   0264  1    
  61. ;   0265  1    %SBTTL 'Symbol definitions'
  62. ;   0266  1    !
  63. ;   0267  1    ! EQUATED SYMBOLS:
  64. ;   0268  1    !
  65. ;   0269  1    
  66. ;   0270  1    LITERAL
  67. ;   0271  1        TEXT%BFR%LENGTH = 256;            ! Length of the text buffer
  68. ;   0272  1    
  69. ;   0273  1    %SBTTL 'Storage'
  70. ;   0274  1    !
  71. ;   0275  1    ! OWN STORAGE:
  72. ;   0276  1    !
  73. ;   0277  1    !
  74. ;   0278  1    ! TT%xxxxx routine storage
  75. ;   0279  1    !
  76. ;   0280  1    
  77. ;   0281  1    OWN
  78. ;   0282  1        DUMP%ROUTINE,                ! Address of routine to dump text
  79. ;   0283  1        TEXT%COUNT,                    ! Count of the characters
  80. ;   0284  1        TEXT%POINTER,                ! Pointer to store characters
  81. ;   0285  1        TEXT%BUFFER : VECTOR [CH$ALLOCATION (TEXT%BFR%LENGTH)];    ! Buffer of characters
  82. ;   0286  1    
  83. ;   0287  1    %SBTTL 'External storage'
  84. ;   0288  1    
  85. ;   0289  1    !++
  86. ;   0290  1    ! The following is the various external storage locations that are
  87. ;   0291  1    ! referenced from this module.
  88. ;   0292  1    !--
  89. ;   0293  1    
  90. ;   0294  1    !
  91. ;   0295  1    ! KERMSG storage
  92. ;   0296  1    !
  93. ;   0297  1    
  94. ;   0298  1    EXTERNAL
  95. ;   0299  1        CONNECT%FLAG;                ! Flag if communications line is TT:
  96. ;   0300  1    
  97. ;   0301  1    !++
  98. ;   0302  1    ! The following is the only external routine used by this module.  This
  99. ;   0303  1    ! routine will cause the terminal buffer that we have been building to be
  100. ;   0304  1    ! output on the terminal
  101. ;   0305  1    !--
  102. ;   0306  1    
  103. ;   0307  1    EXTERNAL ROUTINE
  104. ;   0308  1        TERM%DUMP : NOVALUE;            ! Output the terminal buffer
  105. ;   0309  1    
  106. ;   0310  1    %SBTTL 'Terminal routines -- TT%INIT - Initialize this module'
  107. ;   0311  1    
  108. ;   0312  1    GLOBAL ROUTINE TT%INIT : NOVALUE =
  109. ;   0313  1    
  110. ;   0314  1    !++
  111. ;   0315  1    ! FUNCTIONAL DESCRIPTION:
  112. ;   0316  1    !
  113. ;   0317  1    !    This routine will initialize the terminal processing module.  It will
  114. ;   0318  1    !    initialize the various data locations in this module.
  115. ;   0319  1    !
  116. ;   0320  1    ! CALLING SEQUENCE:
  117. ;   0321  1    !
  118. ;   0322  1    !    TT%INIT();
  119. ;   0323  1    !
  120. ;   0324  1    ! INPUT PARAMETERS:
  121. ;   0325  1    !
  122. ;   0326  1    !    None.
  123. ;   0327  1    !
  124. ;   0328  1    ! IMPLICIT INPUTS:
  125. ;   0329  1    !
  126. ;   0330  1    !    None.
  127. ;   0331  1    !
  128. ;   0332  1    ! OUTPUT PARAMETERS:
  129. ;   0333  1    !
  130. ;   0334  1    !    None.
  131. ;   0335  1    !
  132. ;   0336  1    ! IMPLICIT OUTPUTS:
  133. ;   0337  1    !
  134. ;   0338  1    !    None.
  135. ;   0339  1    !
  136. ;   0340  1    ! COMPLETION CODES:
  137. ;   0341  1    !
  138. ;   0342  1    !    None.
  139. ;   0343  1    !
  140. ;   0344  1    ! SIDE EFFECTS:
  141. ;   0345  1    !
  142. ;   0346  1    !    None.
  143. ;   0347  1    !
  144. ;   0348  1    !--
  145. ;   0349  1    
  146. ;   0350  2        BEGIN
  147. ;   0351  2    !
  148. ;   0352  2    ! Now initialize the various pointers
  149. ;   0353  2    !
  150. ;   0354  2        TEXT%COUNT = 0;
  151. ;   0355  2        TEXT%POINTER = CH$PTR (TEXT%BUFFER);
  152. ;   0356  2        DUMP%ROUTINE = TERM%DUMP;            ! Initial output routine is to terminal
  153. ;   0357  1        END;                    ! End of TT%INIT
  154.  
  155.  
  156.     TITLE    KERTT
  157.     TWOSEG
  158.  
  159.  
  160.     .REQUEST  SYS:B361LB.REL
  161.  
  162.  
  163.     RELOC    0
  164. ; DUMP%ROUTINE
  165. U.1:    BLOCK    1
  166. ; TEXT%COUNT
  167. U.2:    BLOCK    1
  168. ; TEXT%POINTER
  169. U.3:    BLOCK    1
  170. ; TEXT%BUFFER
  171. U.4:    BLOCK    64
  172.  
  173.  
  174.     EXTERN    CONNECT%FLAG, TERM%DUMP
  175.  
  176.  
  177. FNM%NORMAL==:        1
  178. FNM%FULL==:        2
  179. FNM%UNTRAN==:        4
  180. PR%MIN==:        0
  181. PR%NONE==:        0
  182. PR%MARK==:        1
  183. PR%EVEN==:        2
  184. PR%ODD==:        3
  185. PR%SPACE==:        4
  186. PR%MAX==:        4
  187. GC%MIN==:        1
  188. GC%EXIT==:        1
  189. GC%DIRECTORY==:     2
  190. GC%DISK%USAGE==:    3
  191. GC%DELETE==:        4
  192. GC%TYPE==:        5
  193. GC%HELP==:        6
  194. GC%LOGOUT==:        7
  195. GC%LGN==:        10
  196. GC%CONNECT==:        11
  197. GC%RENAME==:        12
  198. GC%COPY==:        13
  199. GC%WHO==:        14
  200. GC%SEND%MSG==:        15
  201. GC%STATUS==:        16
  202. GC%COMMAND==:        17
  203. GC%KERMIT==:        20
  204. GC%JOURNAL==:        21
  205. GC%VARIABLE==:        22
  206. GC%PROGRAM==:        23
  207. GC%MAX==:        23
  208. DP%FULL==:        0
  209. DP%HALF==:        1
  210. CHK%1CHAR==:        61
  211. CHK%2CHAR==:        62
  212. CHK%CRC==:        63
  213. MAX%MSG==:        1752
  214.  
  215.  
  216. AC0=    0
  217. AC1=    1
  218. AC2=    2
  219. AC3=    3
  220. AC4=    4
  221. AC5=    5
  222. AC6=    6
  223. AC7=    7
  224. AC10=    10
  225. AC11=    11
  226. AC12=    12
  227. AC13=    13
  228. AC14=    14
  229. FP=    15
  230. AC16=    16
  231. SP=    17
  232.  
  233.  
  234.     RELOC    400000
  235. TT%INIT::
  236.     SETZM    U.2                ;                                        0354
  237.     MOVE    AC1,C.1                ;                                        0355
  238.     MOVEM    AC1,U.3
  239.     MOVEI    AC1,TERM%DUMP            ;                                        0356
  240.     MOVEM    AC1,U.1
  241.     POPJ    SP,                ;                                        0312
  242. C.1:    POINT    7,U.4-1,34
  243.  
  244. ; Routine Size:  7 words
  245.  
  246.  
  247. ;   0358  1    
  248. ;   0359  1        %SBTTL    'TT%SET%OUTPUT - Set output routine to use'
  249. ;   0360  1    GLOBAL ROUTINE TT%SET%OUTPUT (OUT%RTN) =
  250. ;   0361  1    
  251. ;   0362  1    !++
  252. ;   0363  1    ! FUNCTIONAL DESCRIPTION:
  253. ;   0364  1    !
  254. ;   0365  1    ! This routine will set the output routine to use for the TT%xxx routines.
  255. ;   0366  1    !The argument is a routine address which will output a counted ASCIZ string.
  256. ;   0367  1    !It will return the address of the previous output routine.
  257. ;   0368  1    !
  258. ;   0369  1    ! CALLING SEQUENCE:
  259. ;   0370  1    !
  260. ;   0371  1    !    OLD%RTN = TT%SET%OUTPUT (OUT%RTN);
  261. ;   0372  1    !
  262. ;   0373  1    ! INPUT PARAMETERS:
  263. ;   0374  1    !
  264. ;   0375  1    !    OUT%RTN - Address of routine to output a counted ASCIZ string
  265. ;   0376  1    !        called as OUT%RTN (Address of string, length of string)
  266. ;   0377  1    !
  267. ;   0378  1    ! IMPLICIT INPUTS:
  268. ;   0379  1    !
  269. ;   0380  1    !    DUMP%ROUTINE - Previous output routine
  270. ;   0381  1    !
  271. ;   0382  1    ! OUPTUT PARAMETERS:
  272. ;   0383  1    !
  273. ;   0384  1    !    The value of the routine is the previous output routine address.
  274. ;   0385  1    !
  275. ;   0386  1    ! IMPLICIT OUTPUTS:
  276. ;   0387  1    !
  277. ;   0388  1    !    DUMP%ROUTINE - New output routine
  278. ;   0389  1    !
  279. ;   0390  1    ! COMPLETION CODES:
  280. ;   0391  1    !
  281. ;   0392  1    !    None.
  282. ;   0393  1    !
  283. ;   0394  1    ! SIDE EFFECTS:
  284. ;   0395  1    !
  285. ;   0396  1    !    None.
  286. ;   0397  1    !
  287. ;   0398  1    !--
  288. ;   0399  1    
  289. ;   0400  2    BEGIN
  290. ;   0401  2    LOCAL
  291. ;   0402  2        OLD%RTN;            ! Old routine address
  292. ;   0403  2    
  293. ;   0404  2    OLD%RTN = .DUMP%ROUTINE;    ! Remember the old address
  294. ;   0405  2    DUMP%ROUTINE = .OUT%RTN;    ! Save the new
  295. ;   0406  2    RETURN .OLD%RTN;        ! And return the old value
  296. ;   0407  1    END;                ! End of TT%SET%OUTPUT
  297.  
  298.  
  299. TT%SET%OUTPUT::
  300.     MOVE    AC1,U.1                ;                                        0404
  301.     MOVE    AC2,-1(SP)            ;                                        0405
  302.     MOVEM    AC2,U.1
  303.     POPJ    SP,                ;                                        0360
  304.  
  305. ; Routine Size:  4 words
  306.  
  307.  
  308. ;   0408  1    
  309. ;   0409  1    %SBTTL 'Terminal routines -- TT%OUTPUT - Output the buffer'
  310. ;   0410  1    GLOBAL ROUTINE TT%OUTPUT : NOVALUE =
  311. ;   0411  1    
  312. ;   0412  1    !++
  313. ;   0413  1    ! FUNCTIONAL DESCRIPTION:
  314. ;   0414  1    !
  315. ;   0415  1    !    This routine will dump the text buffer on the output device.
  316. ;   0416  1    !
  317. ;   0417  1    ! CALLING SEQUENCE:
  318. ;   0418  1    !
  319. ;   0419  1    !    TT%OUTPUT();
  320. ;   0420  1    !
  321. ;   0421  1    ! INPUT PARAMETERS:
  322. ;   0422  1    !
  323. ;   0423  1    !    None.
  324. ;   0424  1    !
  325. ;   0425  1    ! IMPLICIT INPUTS:
  326. ;   0426  1    !
  327. ;   0427  1    !    None.
  328. ;   0428  1    !
  329. ;   0429  1    ! OUTPUT PARAMETERS:
  330. ;   0430  1    !
  331. ;   0431  1    !    None.
  332. ;   0432  1    !
  333. ;   0433  1    ! IMPLICIT OUTPUTS:
  334. ;   0434  1    !
  335. ;   0435  1    !    None.
  336. ;   0436  1    !
  337. ;   0437  1    ! COMPLETION CODES:
  338. ;   0438  1    !
  339. ;   0439  1    !    None.
  340. ;   0440  1    !
  341. ;   0441  1    ! SIDE EFFECTS:
  342. ;   0442  1    !
  343. ;   0443  1    !    None.
  344. ;   0444  1    !
  345. ;   0445  1    !--
  346. ;   0446  1    
  347. ;   0447  2        BEGIN
  348. ;   0448  2    
  349. ;   0449  2        LOCAL
  350. ;   0450  2        STATUS;                    ! Status returned by the library routine
  351. ;   0451  2    
  352. ;   0452  2    !
  353. ;   0453  2    ! Output the text
  354. ;   0454  2    !
  355. ;   0455  2        CH$WCHAR%A (CHR%NUL, TEXT%POINTER);
  356. ;   0456  2        (.DUMP%ROUTINE) (TEXT%BUFFER, .TEXT%COUNT); ! Output the buffer to the correct place
  357. ;   0457  2    !
  358. ;   0458  2    ! Now reset the descriptor and the pointer to a virgin state
  359. ;   0459  2    !
  360. ;   0460  2        TEXT%COUNT = 0;
  361. ;   0461  2        TEXT%POINTER = CH$PTR (TEXT%BUFFER);
  362. ;   0462  2    !
  363. ;   0463  1        END;                    ! End of TT%OUTPUT
  364.  
  365.  
  366. TT%OUTPUT::
  367.     SETZ    AC1,                ;                                        0455
  368.     IDPB    AC1,U.3
  369.     MOVE    AC1,U.1                ;                                        0456
  370.     PUSH    SP,C.2
  371.     PUSH    SP,U.2
  372.     PUSHJ    SP,0(AC1)
  373.     SETZM    U.2                ;                                        0460
  374.     MOVE    AC1,C.1                ;                                        0461
  375.     MOVEM    AC1,U.3
  376.     ADJSP    SP,-2                ;                                        0447
  377.     POPJ    SP,                ;                                        0410
  378. C.2:    XWD    0,U.4
  379.  
  380. ; Routine Size:  12 words
  381.  
  382.  
  383. ;   0464  1    %SBTTL 'Terminal routines -- TT%CHAR - Output a single character'
  384. ;   0465  1    
  385. ;   0466  1    GLOBAL ROUTINE TT%CHAR (CHARACTER) : NOVALUE =
  386. ;   0467  1    
  387. ;   0468  1    !++
  388. ;   0469  1    ! FUNCTIONAL DESCRIPTION:
  389. ;   0470  1    !
  390. ;   0471  1    !    This routine will store a character into the text buffer.  It will
  391. ;   0472  1    !    cause the text to be output if the character is a line terminator.
  392. ;   0473  1    !
  393. ;   0474  1    ! CALLING SEQUENCE:
  394. ;   0475  1    !
  395. ;   0476  1    !    TT%CHAR(Character);
  396. ;   0477  1    !
  397. ;   0478  1    ! INPUT PARAMETERS:
  398. ;   0479  1    !
  399. ;   0480  1    !    Character - Character to store into the text buffer.
  400. ;   0481  1    !
  401. ;   0482  1    ! IMPLICIT INPUTS:
  402. ;   0483  1    !
  403. ;   0484  1    !    None.
  404. ;   0485  1    !
  405. ;   0486  1    ! OUTPUT PARAMETERS:
  406. ;   0487  1    !
  407. ;   0488  1    !    None.
  408. ;   0489  1    !
  409. ;   0490  1    ! IMPLICIT OUTPUTS:
  410. ;   0491  1    !
  411. ;   0492  1    !    None.
  412. ;   0493  1    !
  413. ;   0494  1    ! COMPLETION CODES:
  414. ;   0495  1    !
  415. ;   0496  1    !    None.
  416. ;   0497  1    !
  417. ;   0498  1    ! SIDE EFFECTS:
  418. ;   0499  1    !
  419. ;   0500  1    !    None.
  420. ;   0501  1    !
  421. ;   0502  1    !--
  422. ;   0503  1    
  423. ;   0504  2        BEGIN
  424. ;   0505  2    !
  425. ;   0506  2    ! Increment the count of the characters
  426. ;   0507  2    !
  427. ;   0508  2        TEXT%COUNT = .TEXT%COUNT + 1;
  428. ;   0509  2    !
  429. ;   0510  2    ! And store the character
  430. ;   0511  2    !
  431. ;   0512  2        CH$WCHAR%A (.CHARACTER, TEXT%POINTER);
  432. ;   0513  2    !
  433. ;   0514  2    ! If this is a line feed then just output the text string
  434. ;   0515  2    !
  435. ;   0516  2    
  436. ;   0517  2        IF .CHARACTER EQL CHR%LFD THEN TT%OUTPUT ();
  437. ;   0518  2    !
  438. ;   0519  2    ! Check to make sure we are not exceeding the limit of the buffer
  439. ;   0520  2    !
  440. ;   0521  2        IF .TEXT%COUNT EQL TEXT%BFR%LENGTH-1 THEN TT%OUTPUT ();
  441. ;   0522  2    
  442. ;   0523  2    
  443. ;   0524  2    !
  444. ;   0525  1        END;                    ! End of TT%CHAR
  445.  
  446.  
  447. TT%CHAR::
  448.     AOS    U.2                ;                                        0508
  449.     MOVE    AC1,-1(SP)            ;                                        0512
  450.     IDPB    AC1,U.3
  451.     MOVEI    AC1,12                ;                                        0517
  452.     CAMN    AC1,-1(SP)
  453.     PUSHJ    SP,TT%OUTPUT
  454.     MOVEI    AC1,377                ;                                        0521
  455.     CAMN    AC1,U.2
  456.     PUSHJ    SP,TT%OUTPUT
  457.     POPJ    SP,                ;                                        0466
  458.  
  459. ; Routine Size:  10 words
  460.  
  461.  
  462. ;   0526  1    
  463. ;   0527  1    %SBTTL 'Terminal routines -- TT%TEXT - Output a text string'
  464. ;   0528  1    
  465. ;   0529  1    GLOBAL ROUTINE TT%TEXT (ADDRESS) : NOVALUE =
  466. ;   0530  1    
  467. ;   0531  1    !++
  468. ;   0532  1    ! FUNCTIONAL DESCRIPTION:
  469. ;   0533  1    !
  470. ;   0534  1    !    This routine will output text on the user's terminal.  It will
  471. ;   0535  1    !    assume that it must check to determine if it can output the text
  472. ;   0536  1    !    or not.
  473. ;   0537  1    !
  474. ;   0538  1    ! CALLING SEQUENCE:
  475. ;   0539  1    !
  476. ;   0540  1    !    TT%TEXT(TEXT%ADDRESS);
  477. ;   0541  1    !
  478. ;   0542  1    ! INPUT PARAMETERS:
  479. ;   0543  1    !
  480. ;   0544  1    !    None.
  481. ;   0545  1    !
  482. ;   0546  1    ! IMPLICIT INPUTS:
  483. ;   0547  1    !
  484. ;   0548  1    !    None.
  485. ;   0549  1    !
  486. ;   0550  1    ! OUTPUT PARAMETERS:
  487. ;   0551  1    !
  488. ;   0552  1    !    None.
  489. ;   0553  1    !
  490. ;   0554  1    ! IMPLICIT OUTPUTS:
  491. ;   0555  1    !
  492. ;   0556  1    !    None.
  493. ;   0557  1    !
  494. ;   0558  1    ! COMPLETION CODES:
  495. ;   0559  1    !
  496. ;   0560  1    !    None.
  497. ;   0561  1    !
  498. ;   0562  1    ! SIDE EFFECTS:
  499. ;   0563  1    !
  500. ;   0564  1    !    None.
  501. ;   0565  1    !
  502. ;   0566  1    !--
  503. ;   0567  1    
  504. ;   0568  2        BEGIN
  505. ;   0569  2    
  506. ;   0570  2        LOCAL
  507. ;   0571  2        CHARACTER,                ! Character being processed
  508. ;   0572  2        ARG%POINTER;                ! Pointer to the argument's text
  509. ;   0573  2    
  510. ;   0574  2    !
  511. ;   0575  2    ! Construct a pointer to the argument.
  512. ;   0576  2    !
  513. ;   0577  2        ARG%POINTER = CH$PTR (.ADDRESS);
  514. ;   0578  2    !
  515. ;   0579  2    ! Get the first character that was passed.
  516. ;   0580  2    !
  517. ;   0581  2        CHARACTER = CH$RCHAR%A (ARG%POINTER);
  518. ;   0582  2    !
  519. ;   0583  2    ! Loop reading characters and calling the output routine to process
  520. ;   0584  2    ! them
  521. ;   0585  2    !
  522. ;   0586  2    
  523. ;   0587  2        WHILE .CHARACTER NEQ CHR%NUL DO
  524. ;   0588  3        BEGIN
  525. ;   0589  3        TT%CHAR (.CHARACTER);
  526. ;   0590  3        CHARACTER = CH$RCHAR%A (ARG%POINTER);
  527. ;   0591  2        END;
  528. ;   0592  2    
  529. ;   0593  1        END;                    ! End of TT%TEXT
  530.  
  531.  
  532. TT%TEXT::
  533.     PUSH    SP,AC14                ;                                        0529
  534.     PUSH    SP,AC16
  535.     MOVE    AC1,-3(SP)            ;                                        0577
  536.     MOVEI    AC16,-1(AC1)
  537.     HRLI    AC16,10700
  538.     ILDB    AC14,AC16            ;                                        0581
  539. L.1:    JUMPE    AC14,L.2            ;                                        0587
  540.     PUSH    SP,AC14                ;                                        0589
  541.     PUSHJ    SP,TT%CHAR
  542.     ILDB    AC14,AC16            ;                                        0590
  543.     ADJSP    SP,-1                ;                                        0588
  544.     JRST    L.1                ;                                        0587
  545. L.2:    POP    SP,AC16                ;                                        0529
  546.     POP    SP,AC14
  547.     POPJ    SP,
  548.  
  549. ; Routine Size:  15 words
  550.  
  551.  
  552. ;   0594  1    
  553. ;   0595  1    %SBTTL 'Terminal routines -- TT%NUMBER - Output a three digit number'
  554. ;   0596  1    
  555. ;   0597  1    GLOBAL ROUTINE TT%NUMBER (NUMBER) : NOVALUE =
  556. ;   0598  1    
  557. ;   0599  1    !++
  558. ;   0600  1    ! FUNCTIONAL DESCRIPTION:
  559. ;   0601  1    !
  560. ;   0602  1    !    This routine will store a three digit number into the text buffer.
  561. ;   0603  1    !    It will just return if the number is greater than 999.
  562. ;   0604  1    !
  563. ;   0605  1    ! CALLING SEQUENCE:
  564. ;   0606  1    !
  565. ;   0607  1    !    TT%NUMBER(Value);
  566. ;   0608  1    !
  567. ;   0609  1    ! INPUT PARAMETERS:
  568. ;   0610  1    !
  569. ;   0611  1    !    Value - Value to output.
  570. ;   0612  1    !
  571. ;   0613  1    ! IMPLICIT INPUTS:
  572. ;   0614  1    !
  573. ;   0615  1    !    None.
  574. ;   0616  1    !
  575. ;   0617  1    ! OUTPUT PARAMETERS:
  576. ;   0618  1    !
  577. ;   0619  1    !    None.
  578. ;   0620  1    !
  579. ;   0621  1    ! IMPLICIT OUTPUTS:
  580. ;   0622  1    !
  581. ;   0623  1    !    None.
  582. ;   0624  1    !
  583. ;   0625  1    ! COMPLETION CODES:
  584. ;   0626  1    !
  585. ;   0627  1    !    None.
  586. ;   0628  1    !
  587. ;   0629  1    ! SIDE EFFECTS:
  588. ;   0630  1    !
  589. ;   0631  1    !    None.
  590. ;   0632  1    !
  591. ;   0633  1    !--
  592. ;   0634  1    
  593. ;   0635  2        BEGIN
  594. ;   0636  2        ROUTINE TT%NUM%WORKER (VALUE) : NOVALUE =
  595. ;   0637  3        BEGIN
  596. ;   0638  3    
  597. ;   0639  3        IF .VALUE LEQ 9
  598. ;   0640  3        THEN
  599. ;   0641  3            TT%CHAR (.VALUE + %C'0')
  600. ;   0642  3        ELSE
  601. ;   0643  4            BEGIN
  602. ;   0644  4            TT%NUM%WORKER (.VALUE/10);
  603. ;   0645  4            TT%CHAR ((.VALUE MOD 10) + %C'0');
  604. ;   0646  3            END;
  605. ;   0647  3    
  606. ;   0648  2        END;
  607.  
  608.  
  609. ; TT%NUM%WORKER
  610. U.11:    PUSH    SP,AC16                ;                                        0636
  611.     MOVE    AC16,-2(SP)            ;                                        0639
  612.     CAILE    AC16,11
  613.     JRST    L.3
  614.     MOVE    AC1,AC16            ;                                        0641
  615.     ADDI    AC1,60
  616.     PUSH    SP,AC1
  617.     PUSHJ    SP,TT%CHAR
  618.     JRST    L.4                ;                                        0639
  619. L.3:    MOVE    AC1,AC16            ;                                        0644
  620.     IDIVI    AC1,12
  621.     PUSH    SP,AC1
  622.     PUSHJ    SP,U.11
  623.     MOVE    AC1,AC16            ;                                        0645
  624.     IDIVI    AC1,12
  625.     ADDI    AC2,60
  626.     PUSH    SP,AC2
  627.     PUSHJ    SP,TT%CHAR
  628.     ADJSP    SP,-1                ;                                        0643
  629. L.4:    ADJSP    SP,-1                ;                                        0637
  630.     POP    SP,AC16                ;                                        0636
  631.     POPJ    SP,
  632.  
  633. ; Routine Size:  22 words
  634.  
  635.  
  636. ;   0649  2    
  637. ;   0650  2        IF .NUMBER LSS 0
  638. ;   0651  2        THEN
  639. ;   0652  3        BEGIN
  640. ;   0653  3        TT%CHAR (%C'-');
  641. ;   0654  3        NUMBER = -.NUMBER;
  642. ;   0655  2        END;
  643. ;   0656  2    
  644. ;   0657  2        TT%NUM%WORKER (.NUMBER);
  645. ;   0658  1        END;                    ! End of TT%NUMBER
  646.  
  647.  
  648. TT%NUMBER::
  649.     SKIPL    -1(SP)                ;                                        0650
  650.     JRST    L.5
  651.     PUSH    SP,C.3                ;                                        0653
  652.     PUSHJ    SP,TT%CHAR
  653.     MOVNS    -2(SP)                ;                                        0654
  654.     ADJSP    SP,-1                ;                                        0652
  655. L.5:    PUSH    SP,-1(SP)            ;                                        0657
  656.     PUSHJ    SP,U.11
  657.     ADJSP    SP,-1                ;                                        0635
  658.     POPJ    SP,                ;                                        0597
  659. C.3:    EXP    55
  660.  
  661. ; Routine Size:  11 words
  662.  
  663.  
  664. ;   0659  1    
  665. ;   0660  1    %SBTTL 'Terminal routines -- TT%CRLF - Output a CRLF'
  666. ;   0661  1    
  667. ;   0662  1    GLOBAL ROUTINE TT%CRLF : NOVALUE =
  668. ;   0663  1    
  669. ;   0664  1    !++
  670. ;   0665  1    ! FUNCTIONAL DESCRIPTION:
  671. ;   0666  1    !
  672. ;   0667  1    !    This routine will cause the contents of the terminal buffer to be
  673. ;   0668  1    !    output to SYS$OUTPUT:.
  674. ;   0669  1    !
  675. ;   0670  1    ! CALLING SEQUENCE:
  676. ;   0671  1    !
  677. ;   0672  1    !    TT%CRLF();
  678. ;   0673  1    !
  679. ;   0674  1    ! INPUT PARAMETERS:
  680. ;   0675  1    !
  681. ;   0676  1    !    None.
  682. ;   0677  1    !
  683. ;   0678  1    ! IMPLICIT INPUTS:
  684. ;   0679  1    !
  685. ;   0680  1    !    None.
  686. ;   0681  1    !
  687. ;   0682  1    ! OUTPUT PARAMETERS:
  688. ;   0683  1    !
  689. ;   0684  1    !    None.
  690. ;   0685  1    !
  691. ;   0686  1    ! IMPLICIT OUTPUTS:
  692. ;   0687  1    !
  693. ;   0688  1    !    None.
  694. ;   0689  1    !
  695. ;   0690  1    ! COMPLETION CODES:
  696. ;   0691  1    !
  697. ;   0692  1    !    None.
  698. ;   0693  1    !
  699. ;   0694  1    ! SIDE EFFECTS:
  700. ;   0695  1    !
  701. ;   0696  1    !    None.
  702. ;   0697  1    !
  703. ;   0698  1    !--
  704. ;   0699  1    
  705. ;   0700  2        BEGIN
  706. ;   0701  2        TT%CHAR (CHR%CRT);
  707. ;   0702  2        TT%CHAR (CHR%LFD);
  708. ;   0703  1        END;                    ! End of TT%CRLF
  709.  
  710.  
  711. TT%CRLF::
  712.     PUSH    SP,C.4                ;                                        0701
  713.     PUSHJ    SP,TT%CHAR
  714.     PUSH    SP,C.5                ;                                        0702
  715.     PUSHJ    SP,TT%CHAR
  716.     ADJSP    SP,-2                ;                                        0700
  717.     POPJ    SP,                ;                                        0662
  718. C.4:    EXP    15
  719. C.5:    EXP    12
  720.  
  721. ; Routine Size:  8 words
  722.  
  723.  
  724. ;   0704  1    
  725. ;   0705  1    %SBTTL 'End of KERTRM'
  726. ;   0706  1    END                        ! End of module
  727. ;   0707  1    
  728. ;   0708  0    ELUDOM
  729.  
  730.  
  731.  
  732.  
  733. ; Low  segment length:      55 words
  734. ; High segment length:      89 words
  735.  
  736.  
  737.  
  738.  
  739.  
  740. ; Compilation Complete
  741.  
  742.     END