home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume4 / vms-vi-2 / part05 < prev    next >
Encoding:
Internet Message Format  |  1989-02-03  |  8.3 KB

  1. Path: xanth!mcnc!gatech!bloom-beacon!bu-cs!mirror!necntc!ncoast!allbery
  2. From: gregg@a.cs.okstate.edu (Gregg Wonderly)
  3. Newsgroups: comp.sources.misc
  4. Subject: v04i096: TPUVI for VMS part 5 of 17
  5. Message-ID: <8809212056.AA07716@uunet.UU.NET>
  6. Date: 26 Sep 88 01:50:14 GMT
  7. Sender: allbery@ncoast.UUCP
  8. Reply-To: gregg@a.cs.okstate.edu (Gregg Wonderly)
  9. Lines: 280
  10. Approved: allbery@ncoast.UUCP
  11.  
  12. Posting-number: Volume 4, Issue 96
  13. Submitted-by: "Gregg Wonderly" <gregg@a.cs.okstate.edu>
  14. Archive-name: vms-vi-2/Part05
  15.  
  16. $ show default
  17. $ if f$search("EXE.DIR;1") .eqs. "" then -
  18.      CREATE/LOG/DIRECTORY [.EXE]
  19. $ write sys$output "Creating [.EXE]VI.COM"
  20. $ create [.EXE]VI.COM
  21. $ DECK/DOLLARS="*$*$*EOD*$*$*"
  22. $!
  23. $!    VI.COM
  24. $!
  25. $!    Written by Gregg Wonderly  30-OCT-1986
  26. $!
  27. $!  A command file to run VI as a subprocess to the current DCL process.
  28. $!
  29. $!    Check to see if the process already exists
  30. $!
  31. $        VI = "EDIT/TPU"
  32. $!   OR VI = "VI" if you are using VI.EXE
  33. $!
  34. $        TT = F$GETDVI("SYS$COMMAND","DEVNAM") - "_" - "-" - ":"
  35. $        EDIT_NAME = "Edit_" + TT
  36. $        PRIV_LIST = F$SETPRV("NOGROUP,NOWORLD")
  37. $        PID = 0
  38. $!
  39. $    LOOP:
  40. $        MPID = F$PID(PID)
  41. $        PROC = F$GETJPI(MPID,"PRCNAM")
  42. $!
  43. $! If process is there, then go attach to it
  44. $!
  45. $        IF PROC .EQS. EDIT_NAME THEN GOTO ATTACH
  46. $        IF PID .NE. 0 THEN GOTO LOOP
  47. $!
  48. $! If we fall through, then no such process, so spawn the editor
  49. $!
  50. $    SPAWN:
  51. $        PRIV_LIST = F$SETPRV(PRIV_LIST)
  52. $        DEFINE/NOLOG SYS$INPUT SYS$COMMAND:
  53. $        T1 = F$EDIT(P2 + " " + P3 + " " + P4 + " " + P5 + " " -
  54.                     + P6 + " " + P7, "UPCASE,COLLAPSE")
  55. $        T1 = "''T1' ''P1'"
  56. $        DEFINE/JOB/NOLOG TPU$ATTACH_NAME "''f$getjpi("","prcnam")'"
  57. $        DEFINE/JOB/NOLOG TPU$SEARCH " "
  58. $        DEFINE/JOB/NOLOG TPU$LINE " "
  59. $        DEFINE/JOB/NOLOG TPU$OUTPUT " "
  60. $        DEFINE/JOB/NOLOG TPU$ARGS " "
  61. $        DEFINE/JOB/NOLOG TPU$NEWCMD " "
  62. $        IF ("''P8'" .EQS. "NOSPAWN") THEN GOTO NOSPAWN
  63. $            WRITE SYS$ERROR "[Spawning a new kept editor]"
  64. $            SPAWN/PROCESS="''EDIT_NAME'"/NOLOG VI 'T1'
  65. $            SAVED_MSG = F$ENVIRONMENT("MESSAGE")
  66. $            SET MESSAGE/NOFACILITY/NOIDENTIFICATION/NOSEVERITY/NOTEXT
  67. $            SET PROCESS/SUSPEND "''EDIT_NAME'"
  68. $            SET MESSAGE 'SAVED_MSG'
  69. $            WRITE SYS$ERROR "[Back from edit]"
  70. $            GOTO DONE
  71. $!
  72. $!  Startup the editor without spawning
  73. $!
  74. $    NOSPAWN:
  75. $        DEFINE/NOLOG/JOB TPU$NOSUBPROC 1
  76. $        VI 'T1'
  77. $        DEASSIGN/JOB TPU$NOSUBPROC
  78. $        GOTO DONE
  79. $!
  80. $! Come here if subprocess already exists.
  81. $!
  82. $    ATTACH:
  83. $!
  84. $!    For the attach, we allow some parameters to be passed to the editor,
  85. $!  other than the filename.  Specifically, a string to search for, or
  86. $!  a line number to go to.
  87. $!
  88. $        PRIV_LIST = F$SETPRV(PRIV_LIST)
  89. $        LINENO = " "
  90. $        SEARCH = " "
  91. $        OUTPUT = " "
  92. $        NEWCMD = " "
  93. $        LIST== F$EDIT ("''P1' ''P2' ''P3' ''P4' ''P5' ''P6' ''P7'", -
  94.                                                 "UPCASE,TRIM,COMPRESS")
  95. $         START = F$LOCATE ("/OUT", LIST)
  96. $         IF (START .EQ. F$LENGTH(LIST)) THEN GOTO NOOUT
  97. $            REMAIN = F$EXTRACT (START,255,LIST)
  98. $            END = F$LOCATE ("=", REMAIN)
  99. $            IF (END .NE. F$LENGTH (REMAIN)) THEN GOTO OUT_1
  100. $                WRITE SYS$ERROR F$MESSAGE(%X38150)
  101. $                WRITE SYS$ERROR " \OUTPUT\"
  102. $                EXIT
  103. $!
  104. $        OUT_1:
  105. $            OUTPUT=F$EXTRACT(END+1,F$LOCATE(" ",REMAIN)-END-1,REMAIN)
  106. $            LIST = F$EXTRACT (0,START,LIST) + -
  107.                     F$EXTRACT(END+2+F$LENGTH(OUTPUT),255,REMAIN)
  108. $!
  109. $    NOOUT:
  110. $        IF (F$EXTRACT(0,1,P1) .NES. "+") THEN GOTO NO_LINE
  111. $            IF (F$EXTRACT(1,1,P1) .NES. "/") .AND. -
  112.                     (F$EXTRACT(1,1,P1) .NES. "?") THEN GOTO NO_SEARCH
  113. $                SEARCH = F$EXTRACT (1,255,P1)
  114. $                P1=" "
  115. $                GOTO NO_ALTS
  116. $!
  117. $    NO_SEARCH:     
  118. $        IF (F$EXTRACT(1,1,P1) .NES. "$") THEN GOTO NO_CMD
  119. $            NEWCMD = F$EXTRACT (2,255,P1)
  120. $            P1=" "
  121. $            GOTO NO_ALTS
  122. $    NO_CMD:
  123. $        LINENO = F$EXTRACT (1,255,P1)
  124. $        p1=""
  125. $!
  126. $    NO_ALTS:
  127. $        LIST== F$EDIT ("''P2' ''P3' ''P4' ''P5' ''P6' ''P7'", -
  128.                                     "UPCASE,COMPRESS,TRIM")
  129. $    NO_LINE:
  130. $!
  131. $!  Parameters are passed through the JOB logical table.
  132. $!
  133. $        DEFINE/JOB/NOLOG TPU$SEARCH "''SEARCH'"
  134. $        DEFINE/JOB/NOLOG TPU$LINE "''LINENO'"
  135. $        DEFINE/JOB/NOLOG TPU$OUTPUT "''OUTPUT'"
  136. $        DEFINE/JOB/NOLOG TPU$ARGS " ''LIST'"
  137. $        DEFINE/JOB/NOLOG TPU$NEWCMD "''NEWCMD'"
  138. $        DEFINE/JOB/NOLOG TPU$ATTACH_NAME "''f$getjpi("","prcnam")'"
  139. $!
  140. $!  Restore all prior privileges.
  141. $!
  142. $        WRITE SYS$ERROR "[Attaching to editor]"
  143. $        DEFINE/NOLOG SYS$INPUT SYS$COMMAND:
  144. $        SET PROCESS/RESUME "''EDIT_NAME'"
  145. $        ATTACH "''EDIT_NAME'"
  146. $        WRITE SYS$ERROR "[Back from edit]"
  147. $        SAVED_MSG = F$ENVIRONMENT("MESSAGE")
  148. $        SET MESSAGE/NOFACILITY/NOIDENTIFICATION/NOSEVERITY/NOTEXT
  149. $        SET PROCESS/SUSPEND "''EDIT_NAME'"
  150. $        SET MESSAGE 'SAVED_MSG'
  151. $!
  152. $!  Exit the editor, deleting the journal files.
  153. $!
  154. $   DONE:
  155. $        DEASSIGN/JOB TPU$ATTACH_NAME
  156. $        DEASSIGN/JOB TPU$SEARCH
  157. $        DEASSIGN/JOB TPU$LINE
  158. $        DEASSIGN/JOB TPU$OUTPUT
  159. $        DEASSIGN/JOB TPU$ARGS
  160. $        DEASSIGN/JOB TPU$NEWCMD
  161. $        EXIT
  162. *$*$*EOD*$*$*
  163. $ if f$search("EXE.DIR;1") .eqs. "" then -
  164.      CREATE/LOG/DIRECTORY [.EXE]
  165. $ write sys$output "Creating [.EXE]VISETUP.COM"
  166. $ create [.EXE]VISETUP.COM
  167. $ DECK/DOLLARS="*$*$*EOD*$*$*"
  168. $ !
  169. $ !    VISETUP.COM  -  Set up to use the VI TPU interface.
  170. $ !
  171. $ !  Written by Gregg Wonderly JUN-30-1987
  172. $ !
  173. $ DEFINE/NOLOG/TRANS=CONCEAL     VI$ROOT    MATH0:[PUBLIC.VI.]
  174. $ DEFINE TPUSECINI                VI$ROOT:[EXE]VI.GBL
  175. $ DEFINE TPU$CALLUSER            VI$ROOT:[EXE]TPUSUBS.EXE
  176. $ DEFINE/NOLOG VISECINI            VI$ROOT:[EXE]VI.GBL
  177. $ DEFINE/NOLOG VI$CALLUSER        VI$ROOT:[EXE]TPUSUBS.EXE
  178. $ DEFINE/NOLOG MAIL$EDIT        VI$ROOT:[EXE]MAILEDIT.COM
  179. $!
  180. $! This symbol gets you a NON-SPAWNED VI
  181. $! Delete this if you are using VI.EXE and VI.CLD
  182. $!
  183. $ VI ==                            "EDIT/TPU"
  184. $! This symbol gets you a SPAWNED VI
  185. $ VIS ==                        "@VI$ROOT:[EXE]VI.COM"
  186. $!
  187. $! This gets you a readonly version of the file.
  188. $!
  189. $ IF F$TYPE (VI) .EQS. "" THEN VI="VI"
  190. $ VIEW == "''VI'/READONLY"
  191. $ SNU*FF == "@VI$ROOT:[EXE]SNUFFTPU.COM"
  192. $ EXIT
  193. *$*$*EOD*$*$*
  194. $ if f$search("EXE.DIR;1") .eqs. "" then -
  195.      CREATE/LOG/DIRECTORY [.EXE]
  196. $ write sys$output "Creating [.EXE]MAILEDIT.COM"
  197. $ create [.EXE]MAILEDIT.COM
  198. $ DECK/DOLLARS="*$*$*EOD*$*$*"
  199. $ !
  200. $ ! Command procedure to invoke an editor for MAIL.
  201. $ !
  202. $ ! Inputs:
  203. $ !
  204. $ !    P1 = Input file name.
  205. $ !    P2 = Output file name.
  206. $ !
  207. $ ! If MAIL$EDIT is undefined, MAIL will invoke callable EDT.
  208. $ ! If MAIL$EDITis defined to be a command procedure,
  209. $ ! MAIL will create a subprocess to edit the mail.
  210. $ !
  211. $ ! Note that this procedure is run in the context of a subprocess.
  212. $ ! LOGIN.COM is not executed.  However, all process logical names
  213. $ ! and DCL global symbols are copied.
  214. $ !
  215. $ ! The default directory is the same as the parent process
  216. $ !
  217. $    IF P1 .EQS. "" THEN GOTO NOINPUT
  218. $    @VI$ROOT:[EXE]VI 'P1' /OUTPUT='P2' "" "" "" "" "" "NOSPAWN"
  219. $    EXIT
  220. $ NOINPUT:
  221. $    @VI$ROOT:[EXE]VI 'P2' "" "" "" "" "" "" "NOSPAWN"
  222. $    EXIT
  223. *$*$*EOD*$*$*
  224. $ if f$search("EXE.DIR;1") .eqs. "" then -
  225.      CREATE/LOG/DIRECTORY [.EXE]
  226. $ write sys$output "Creating [.EXE]DO.COM"
  227. $ create [.EXE]DO.COM
  228. $ DECK/DOLLARS="*$*$*EOD*$*$*"
  229. $ v=f$verify(0)
  230. $!
  231. $!    DO.COM
  232. $!
  233. $!    Written by Gregg Wonderly 30-Oct-1986
  234. $!
  235. $! write sys$output "$ ''P1' ''P2' ''P3' ''P4' ''P5' ''P6' ''P7' ''P8'"
  236. $ write sys$output "$ ",P1," ",P2," ",P3," ",P4," ",P5," ",P6," ",P7," ",P8
  237. $ 'P1' 'P2' 'P3' 'P4' 'P5' 'P6' 'P7' 'P8'
  238. $ EXIT $status+('f$verify(v)'*0)
  239. *$*$*EOD*$*$*
  240. $ if f$search("EXE.DIR;1") .eqs. "" then -
  241.      CREATE/LOG/DIRECTORY [.EXE]
  242. $ write sys$output "Creating [.EXE]VI.CLD"
  243. $ create [.EXE]VI.CLD
  244. $ DECK/DOLLARS="*$*$*EOD*$*$*"
  245. !
  246. !  CLD for VI.  Derived from the CLD for the EDIT command
  247. !  This CLD redefines the default values for the parameters to EDIT/TPU so
  248. !  that VI is the default section file instead of EVE.
  249. !
  250. define verb vi
  251.    image VI$ROOT:[EXE]VI.EXE
  252.    parameter P1 , label=FILE_NAME , prompt="File"
  253.       value (list,type=$infile)
  254.    qualifier SECTION
  255.       default
  256.       value (default="VISECINI",type=$infile)
  257.    qualifier LISTING
  258.       value (type=$outfile)
  259.    qualifier OUTPUT
  260.       value (type=$outfile)
  261.    qualifier READ_ONLY
  262.    qualifier UPDATE
  263.       value (list)
  264.       placement=local
  265.    qualifier COMMAND
  266.       default
  267.       value (DEFAULT="VIINI",TYPE=$INFILE)
  268.    qualifier RECOVER
  269.    qualifier JOURNAL
  270.       default
  271.       value (type=$infile)
  272.    qualifier DISPLAY
  273.       default
  274.       value (list,type=$infile)
  275.    qualifier CREATE
  276.       default
  277.    qualifier TPU
  278.       default
  279. *$*$*EOD*$*$*
  280. $ if f$search("EXE.DIR;1") .eqs. "" then -
  281.      CREATE/LOG/DIRECTORY [.EXE]
  282. $ write sys$output "Creating [.EXE]DOSPAWN.COM"
  283. $ create [.EXE]DOSPAWN.COM
  284. $ DECK/DOLLARS="*$*$*EOD*$*$*"
  285. $ define/user sys$input sys$command
  286. $ 'p1'
  287. $ write sys$output " "
  288. $ READ/PROMPT="[Hit ENTER to continue]" sys$command line
  289. $ EXIT
  290. *$*$*EOD*$*$*
  291. $ exit
  292.