home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume1 / 8710 / vms-vi / 4 < prev    next >
Encoding:
Internet Message Format  |  1990-07-13  |  7.6 KB

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