home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / dec20 / k20cmd.mac < prev    next >
Text File  |  2020-01-01  |  8KB  |  259 lines

  1. ;39 <MACRO-LIBRARY>CMD.MAC.3 10-Jun-81 23:40:41, Edit by Bill S. and JD
  2. ;39 fix dprompt for extended addressing, change jrstf to jrst in repars
  3. ; UPD ID= 324, SNARK:<4.1.UTILITIES>CMD.MAC.4,  12-Mar-80 14:06:39 by OSMAN
  4. ;tco 4.1.1094 - display bad command if not from a terminal
  5. ; UPD ID= 245, SNARK:<4.1.UTILITIES>CMD.MAC.3,   5-Feb-80 10:39:19 by OSMAN
  6. ;IN DPROMP, DO CALLRET INSTEAD OF CALL AND RET
  7. ;<4.1.UTILITIES>CMD.MAC.2, 12-Nov-79 10:15:39, EDIT BY OSMAN
  8. ;TCO 4.1.1014 - Make REPARS external
  9. ;<4.UTILITIES>CMD.MAC.7,  3-Apr-79 13:53:15, EDIT BY OSMAN
  10. ;Make CMDERR global
  11. ;<4.UTILITIES>CMD.MAC.5,  2-Apr-79 14:59:11, EDIT BY OSMAN
  12. ;GIVE STACK OVERFLOW ERROR IF TOO MUCH USER STACK TO SAVE DURING PROMPT SETUP
  13. ;<4.UTILITIES>CMD.MAC.4, 10-Mar-79 13:43:33, EDIT BY KONEN
  14. ;UPDATE COPYRIGHT FOR RELEASE 4
  15. ;<4.UTILITIES>CMD.MAC.3, 14-Feb-79 10:44:19, EDIT BY OSMAN
  16. ;ADD CJFNLN
  17. ;<4.UTILITIES>CMD.MAC.2,  7-Jan-79 08:05:13, EDIT BY R.ACE
  18. ;Make CONFRM and NOISE preserve caller's T1-T4
  19. ;<4.UTILITIES>CMD.MAC.1, 27-Jul-78 10:08:39, EDIT BY OSMAN
  20. ;SET UP .CMIOJ IN CMDINI INSTEAD OF DPROMP
  21.  
  22. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
  23. ;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
  24. ;
  25. ;COPYRIGHT (C) 1976,1977,1978,1979 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
  26.  
  27. IFNDEF REL,<REL==0>        ;DEFAULT IS UNIVERSAL
  28.  
  29. IFE REL,<
  30.     UNIVERSAL CMD
  31.     EXTERNAL RFIELD,CMDINI,CFIELD,CMDERR,CMDER1,DPROMPT,RFLDE,NOIRTN,CFMRTN,REPARS
  32. >
  33. IFN REL,<
  34.     TITLE CMD
  35. >
  36.     SEARCH MONSYM,MACSYM
  37.     SALL
  38.  
  39.  
  40. ;AC DEFINITIONS
  41.  
  42. A=1        ;A-D ARE TEMPORARY
  43. B=2
  44. C=3
  45. D=4
  46.  
  47. P1=10        ;P1-P4 ARE SUPPOSEDLY PRESERVED THROUGH SUBROUTINE CALLS
  48. P2=11
  49. P3=12
  50. P4=13
  51.  
  52. CX=16        ;USED BY SUPPORT CODE
  53. P=17        ;STACK POINTER
  54. SUBTTL MACRO DEFINITIONS
  55.  
  56. ;MACRO TO PROMPT FOR COMMAND
  57.  
  58. DEFINE PROMPT (MESSAGE) <
  59.     HRROI A,[ASCIZ MESSAGE]
  60.     CALL DPROMPT
  61. >
  62.  
  63. ;MACRO TO PRINT GUIDEWORDS
  64.  
  65. DEFINE NOISE (SHT) <
  66.     HRROI CX,[ASCIZ\SHT\]
  67.     CALL NOIRTN
  68. >
  69.  
  70. ;MACRO TO REQUIRE CONFIRMATION
  71.  
  72. DEFINE CONFRM <
  73.     CALL CFMRTN
  74. >
  75.  
  76. ;MACRO TO MAKE TABLE ENTRY
  77.  
  78. DEFINE T (WORD,ADDRES) <
  79. IFB <ADDRES>,<    [ASCIZ /WORD/],,.'WORD>
  80. IFNB <ADDRES>,<    [ASCIZ /WORD/],,ADDRES>
  81. >
  82.  
  83. ;MACRO TO GENERATE COMND JSYS STORAGE
  84.  
  85. DEFINE CMDSTG <
  86. CMDBLN==:<^D80*6>/5+1        ;ROOM FOR SIX LINE COMMAND
  87. CMDBUF::BLOCK CMDBLN
  88. CMDACS::BLOCK 20        ;SAVED AC'S FROM BEGINNING OF COMMAND LINE
  89. ATMBLN==:CMDBLN
  90. ATMBUF::BLOCK ATMBLN        ;HOLDS LAST PARSED FIELD
  91. SBK::    BLOCK 20        ;COMND JSYS STATE BLOCK
  92. CJFNLN==:20
  93. CJFNBK::BLOCK CJFNLN        ;GTJFN BLOCK FOR COMND JSYS
  94. REPARA::0            ;REPARSE ADDRESS FOR COMND
  95. CMDFRM::0            ;MARKS BOTTOM OF STACK
  96. CMDPLN==:200            ;AMOUNT OF STACK WE CAN SAVE
  97. CMDPDL::BLOCK CMDPLN        ;ROOM TO SAVE PDL
  98.    >
  99. SUBTTL SUPPORT ROUTINES FOR CMD
  100.  
  101. IFN REL,<
  102.  
  103. ;SYMBOLS WHICH USER PROGRAM MUST DEFINE.  HE MAY CONVENIENTLY DO
  104. ;SO, HOWEVER, WITH CMDSTG MACRO DEFINED ABOVE.
  105.  
  106. EXTERNAL CMDBUF,CMDBLN        ;USER'S COMMAND BUFFER AND LENGTH
  107. EXTERNAL CMDACS            ;BLOCK TO STORE AC'S WHEN COMMAND STARTS
  108. EXTERNAL CMDPDL,CMDPLN        ;PLACE TO SAVE STACK WHEN COMMAND STARTS
  109. EXTERNAL SBK            ;STATE BLOCK
  110. EXTERNAL CJFNBK,CJFNLN        ;JFN BLOCK
  111. EXTERNAL ATMBUF,ATMBLN        ;ATOM BUFFER AND LENGTH
  112. EXTERNAL REPARA            ;HOLDS REPARSE ADDRESS
  113. EXTERNAL CMDFRM            ;HOLDS BOTTOM OF STACK
  114.  
  115. ;GET HERE ON COMND JSYS ERROR.  LET USER TRY AGAIN.
  116.  
  117. MESLN==30
  118. CMDERR::    STKVAR <<ERMES,MESLN>>
  119.     HRROI A,ERMES        ;POINT TO MESSAGE AREA
  120.     MOVE B,[.FHSLF,,-1]    ;OURSELF, MOST RECENT ERROR
  121.     MOVSI C,-MESLN*5    ;MAXIMUM STRING WE'VE ROOM FOR
  122.     ERSTR            ;GET ERROR STRING
  123.      JFCL
  124.      JFCL            ;UNEXPECTED ERRORS
  125.     HRROI A,ERMES        ;POINT AT STRING
  126.     ESOUT            ;PRINT IT IN STANDARD MANNER
  127.     HLRZ A,.CMIOJ+SBK    ;SEE WHERE COMMAND CAME FROM
  128.     DVCHR            ;GET DEVICE TYPE
  129.     LOAD A,DV%TYP,B        ;SEE IF INPUT FROM A TERMINAL
  130.     CAIE A,.DVTTY        ;IS IT?
  131.     JRST [    LDB A,[350700,,.CMBFP+SBK]    ;SEE IF ANY STRING TO TYPE
  132.         JUMPE A,.+1    ;IF NOT, NO DASH
  133.         TMSG < - >
  134.         MOVE A,.CMBFP+SBK    ;NO, SO DISPLAY ROTTEN COMMAND
  135.         PSOUT
  136.         JRST .+1]
  137.     ;...
  138.  
  139. ;COME HERE TO LET USER FIX HIS ERROR (BY TYPING ^H) OR ISSUE ANOTHER
  140. ;COMMAND
  141. ;PRINT ERROR MESSAGE BEFORE TRANSFERRING HERE
  142.  
  143.     ;...
  144. CMDER1::SOS REPARA        ;MODIFY REPARSE ADDRESS SO REPROMPT HAPPENS
  145.     JRST REPARS
  146.  
  147. ;PLACE TO TRANSFER IF USER EDITS PREVIOUSLY PARSED FIELDS
  148.  
  149. REPARS::    MOVE P,CMDACS+P        ;FIRST RESTORE P SO WE KNOW HOW MUCH STACK TO RESTORE
  150.     HRLI A,CMDPDL        ;RESTORE STACK FROM SAVED STACK
  151.     HRR A,CMDFRM        ;COPY TO BOTTOM OF STACK
  152.     BLT A,(P)        ;RESTORE THE STACK
  153.     MOVSI 16,CMDACS        ;MAKE BLT POINTER
  154.     BLT 16,16        ;RESTORE REST OF AC'S
  155.     JRST @REPARA        ;TRANSFER BACK TO JUST AFTER .CMINI CALL
  156.                 ;39 jrstf doesn't work in non-zero sections
  157.  
  158. ;ROUTINE TO PROMPT FOR NEW COMMAND OR NEW PROMPT LINE OF COMMAND.
  159. ;CALL THIS ROUTINE WITH POINTER TO PROMPT IN A, OR 0 IF NO PROMPT.
  160.  
  161. DPROMP::CAIN A,0        ;ANY PROMPT?
  162.     HRROI A,[0]        ;NO, POINT TO A NULL STRING
  163.     MOVEM A,SBK+.CMRTY    ;SAVE POINTER TO PROMPT
  164.     POP P,REPARA        ;REMEMBER REPARSE ADDRESS
  165.     DMOVEM 0,CMDACS+0    ;SAVE AC'S
  166.     MOVE 1,[2,,CMDACS+2]
  167.     BLT 1,CMDACS+17
  168.     HRL A,CMDFRM        ;SAVE FROM BOTTOM OF STACK
  169.     HRRI A,CMDPDL        ;MOVE DATA TO COMND PDL AREA
  170.     HRRZ B,P        ;SEE WHERE TOP OF STACK IS NOW
  171.     SUB B,CMDFRM        ;CALCULATE NUMBER OF WORDS
  172.     MOVE C,[IOWD CMDPLN,CMDPDL]    ;GET STACK POINTER TO BEGINNING OF SAVED STACK
  173.     ADJSP C,(B)        ;GENERATE ERROR IF TOO MUCH STACK TO SAVE
  174.     hrli b,0        ; 39 fix for extended addressing - stay in sec
  175.     BLT A,CMDPDL(B)        ;SAVE THE STACK
  176.     PUSH P,REPARA        ;MAKE STACK LIKE IT WAS
  177.     MOVEI A,[FLDDB. .CMINI]    ;TYPE PROMPT
  178.     CALLRET RFIELD        ;TYPE PROMPT AND RETURN TO CALLER
  179.  
  180. ;READ A FIELD ROUTINE.  GIVE IT ADDRESS OF FUNCTION BLOCK IN A.
  181. ;JRSTS TO CMDERR IF ERROR.  A, B, AND C WILL HAVE
  182. ;RESULT OF COMND JSYS IN THEM.
  183.  
  184. RFIELD::CALL RFLDE        ;READ FIELD, SKIP IF SUCCESS
  185.      JRST CMDERR        ;FAILED, GO PROCESS ERROR
  186.     RET            ;SUCCESS
  187.  
  188. ;ROUTINE TO READ A FIELD AND SKIP IFF SUCCESSFUL.  A, B, AND C WILL HAVE
  189. ;RESULT OF COMND JSYS IN THEM UPON RETURN.
  190.  
  191. RFLDE::    MOVE B,A        ;PUT FUNCTION BLOCK POINTER IN B
  192.     MOVEI A,SBK        ;POINTER TO STATE BLOCK IN A
  193.     COMND            ;READ FIELD OF COMND
  194.      ERJMP R        ;ERROR IN COMND JSYS
  195.     TXNE A,CM%NOP        ;DID COMMAND PARSE CORRECTLY?
  196.     RET            ;NO, SINGLE RETURN
  197.     RETSKP            ;YES, SKIP RETURN
  198.  
  199. ;READ A FIELD AND REQUIRE CARRIAGE RETURN AFTER IT FOR CONFIRMATION
  200.  
  201. CFIELD::CALL RFIELD        ;READ THE FIELD
  202.     CONFRM            ;GET CONFIRMATION
  203.     RET            ;RETURN TO CALLER
  204.  
  205. ;COMND JSYS INITIALIZATION ROUTINE.  CALL ONLY ONCE AT BEGINNING OF
  206. ;PROGRAM.
  207. ;ALWAYS CALL THIS ROUTINE AT A LESS-THAN-OR-EQUALLY NESTED LOCATION
  208. ;WITHIN THE PROGRAM IN COMPARISON WITH ANY SUBSEQUENT CALL TO THE COMND
  209. ;JSYS EXECUTION ROUTINES
  210.  
  211. CMDINI::MOVEI A,REPARS        ;REPARSE ADDRESS
  212.     MOVEM A,SBK+.CMFLG
  213.     HRLI A,100        ;SOURCE OF COMMAND
  214.     HRRI A,101        ;REGULAR PRIMARY OUTPUT
  215.     MOVEM A,SBK+.CMIOJ
  216.     HRROI A,CMDBUF        ;POINTER TO COMMAND BUFFER
  217.     MOVEM A,SBK+.CMBFP
  218.     MOVEM A,SBK+.CMPTR    ;POINTER TO NEXT FIELD
  219.     MOVEI A,CMDBLN*5    ;ROOM FOR TYPIN
  220.     MOVEM A,SBK+.CMCNT
  221.     SETZM SBK+.CMINC    ;NO UNPARSED CHARACTERS YET
  222.     HRROI A,ATMBUF        ;POINTER TO ATOM BUFFER
  223.     MOVEM A,SBK+.CMABP
  224.     MOVEI A,ATMBLN*5
  225.     MOVEM A,SBK+.CMABC    ;ROOM IN ATOM BUFFER
  226.     MOVEI A,CJFNBK        ;POINTER TO JFN BLOCK
  227.     MOVEM A,SBK+.CMGJB
  228.     MOVEM P,CMDFRM        ;REMEMBER BEGINNING OF STACK
  229.     RET
  230.  
  231. ;ROUTINE TO GET CONFIRMATION
  232.  
  233. CFMRTN::PUSH P,A        ;PRESERVE CALLER'S AC'S
  234.     PUSH P,B
  235.     PUSH P,C
  236.     MOVEI A,[FLDDB. .CMCFM]
  237.     CALL RFIELD        ;PARSE CONFIRMATION
  238. XPARX:    POP P,C
  239.     POP P,B
  240.     POP P,A
  241.     RET
  242.  
  243. ;ROUTINE TO PARSE GUIDE WORD TEXT
  244. ;CX/ STRING POINTER TO TEXT
  245.  
  246. NOIRTN::PUSH P,A        ;SAVE AC'S
  247.     PUSH P,B
  248.     PUSH P,C
  249.     PUSH P,[FLD(.CMNOI,CM%FNC)] ;.CMFNP WORD OF FDB
  250.     PUSH P,CX        ;.CMDAT WORD OF FDB
  251.     MOVEI A,-1(P)        ;GET ADDR OF FDB IN STACK
  252.     CALL RFIELD
  253.     ADJSP P,-2        ;DELETE FDB FROM STACK
  254.     JRST XPARX        ;RESTORE A,B,C AND RETURN
  255.  
  256.    >    ;END OF IFN REL
  257.  
  258. END
  259.