v04i096: TPUVI for VMS part 5 of 17

Gregg Wonderly gregg at a.cs.okstate.edu
Mon Sep 26 11:50:14 AEST 1988


Posting-number: Volume 4, Issue 96
Submitted-by: "Gregg Wonderly" <gregg at a.cs.okstate.edu>
Archive-name: vms-vi-2/Part05

$ show default
$ if f$search("EXE.DIR;1") .eqs. "" then -
     CREATE/LOG/DIRECTORY [.EXE]
$ write sys$output "Creating [.EXE]VI.COM"
$ create [.EXE]VI.COM
$ DECK/DOLLARS="*$*$*EOD*$*$*"
$!
$!	VI.COM
$!
$!	Written by Gregg Wonderly  30-OCT-1986
$!
$!  A command file to run VI as a subprocess to the current DCL process.
$!
$!	Check to see if the process already exists
$!
$		VI = "EDIT/TPU"
$!   OR VI = "VI" if you are using VI.EXE
$!
$		TT = F$GETDVI("SYS$COMMAND","DEVNAM") - "_" - "-" - ":"
$		EDIT_NAME = "Edit_" + TT
$		PRIV_LIST = F$SETPRV("NOGROUP,NOWORLD")
$		PID = 0
$!
$	LOOP:
$		MPID = F$PID(PID)
$		PROC = F$GETJPI(MPID,"PRCNAM")
$!
$! If process is there, then go attach to it
$!
$		IF PROC .EQS. EDIT_NAME THEN GOTO ATTACH
$		IF PID .NE. 0 THEN GOTO LOOP
$!
$! If we fall through, then no such process, so spawn the editor
$!
$	SPAWN:
$		PRIV_LIST = F$SETPRV(PRIV_LIST)
$		DEFINE/NOLOG SYS$INPUT SYS$COMMAND:
$		T1 = F$EDIT(P2 + " " + P3 + " " + P4 + " " + P5 + " " -
                    + P6 + " " + P7, "UPCASE,COLLAPSE")
$		T1 = "''T1' ''P1'"
$		DEFINE/JOB/NOLOG TPU$ATTACH_NAME "''f$getjpi("","prcnam")'"
$		DEFINE/JOB/NOLOG TPU$SEARCH " "
$		DEFINE/JOB/NOLOG TPU$LINE " "
$		DEFINE/JOB/NOLOG TPU$OUTPUT " "
$		DEFINE/JOB/NOLOG TPU$ARGS " "
$		DEFINE/JOB/NOLOG TPU$NEWCMD " "
$		IF ("''P8'" .EQS. "NOSPAWN") THEN GOTO NOSPAWN
$			WRITE SYS$ERROR "[Spawning a new kept editor]"
$			SPAWN/PROCESS="''EDIT_NAME'"/NOLOG VI 'T1'
$			SAVED_MSG = F$ENVIRONMENT("MESSAGE")
$			SET MESSAGE/NOFACILITY/NOIDENTIFICATION/NOSEVERITY/NOTEXT
$			SET PROCESS/SUSPEND "''EDIT_NAME'"
$			SET MESSAGE 'SAVED_MSG'
$			WRITE SYS$ERROR "[Back from edit]"
$			GOTO DONE
$!
$!  Startup the editor without spawning
$!
$	NOSPAWN:
$		DEFINE/NOLOG/JOB TPU$NOSUBPROC 1
$		VI 'T1'
$		DEASSIGN/JOB TPU$NOSUBPROC
$		GOTO DONE
$!
$! Come here if subprocess already exists.
$!
$	ATTACH:
$!
$!	For the attach, we allow some parameters to be passed to the editor,
$!  other than the filename.  Specifically, a string to search for, or
$!  a line number to go to.
$!
$		PRIV_LIST = F$SETPRV(PRIV_LIST)
$		LINENO = " "
$		SEARCH = " "
$		OUTPUT = " "
$		NEWCMD = " "
$		LIST== F$EDIT ("''P1' ''P2' ''P3' ''P4' ''P5' ''P6' ''P7'", -
												"UPCASE,TRIM,COMPRESS")
$ 		START = F$LOCATE ("/OUT", LIST)
$ 		IF (START .EQ. F$LENGTH(LIST)) THEN GOTO NOOUT
$			REMAIN = F$EXTRACT (START,255,LIST)
$			END = F$LOCATE ("=", REMAIN)
$			IF (END .NE. F$LENGTH (REMAIN)) THEN GOTO OUT_1
$				WRITE SYS$ERROR F$MESSAGE(%X38150)
$				WRITE SYS$ERROR " \OUTPUT\"
$				EXIT
$!
$		OUT_1:
$			OUTPUT=F$EXTRACT(END+1,F$LOCATE(" ",REMAIN)-END-1,REMAIN)
$			LIST = F$EXTRACT (0,START,LIST) + -
					F$EXTRACT(END+2+F$LENGTH(OUTPUT),255,REMAIN)
$!
$	NOOUT:
$		IF (F$EXTRACT(0,1,P1) .NES. "+") THEN GOTO NO_LINE
$			IF (F$EXTRACT(1,1,P1) .NES. "/") .AND. -
					(F$EXTRACT(1,1,P1) .NES. "?") THEN GOTO NO_SEARCH
$				SEARCH = F$EXTRACT (1,255,P1)
$				P1=" "
$				GOTO NO_ALTS
$!
$	NO_SEARCH:     
$		IF (F$EXTRACT(1,1,P1) .NES. "$") THEN GOTO NO_CMD
$			NEWCMD = F$EXTRACT (2,255,P1)
$			P1=" "
$			GOTO NO_ALTS
$	NO_CMD:
$		LINENO = F$EXTRACT (1,255,P1)
$		p1=""
$!
$	NO_ALTS:
$		LIST== F$EDIT ("''P2' ''P3' ''P4' ''P5' ''P6' ''P7'", -
									"UPCASE,COMPRESS,TRIM")
$	NO_LINE:
$!
$!  Parameters are passed through the JOB logical table.
$!
$		DEFINE/JOB/NOLOG TPU$SEARCH "''SEARCH'"
$		DEFINE/JOB/NOLOG TPU$LINE "''LINENO'"
$		DEFINE/JOB/NOLOG TPU$OUTPUT "''OUTPUT'"
$		DEFINE/JOB/NOLOG TPU$ARGS " ''LIST'"
$		DEFINE/JOB/NOLOG TPU$NEWCMD "''NEWCMD'"
$		DEFINE/JOB/NOLOG TPU$ATTACH_NAME "''f$getjpi("","prcnam")'"
$!
$!  Restore all prior privileges.
$!
$		WRITE SYS$ERROR "[Attaching to editor]"
$		DEFINE/NOLOG SYS$INPUT SYS$COMMAND:
$		SET PROCESS/RESUME "''EDIT_NAME'"
$		ATTACH "''EDIT_NAME'"
$		WRITE SYS$ERROR "[Back from edit]"
$		SAVED_MSG = F$ENVIRONMENT("MESSAGE")
$		SET MESSAGE/NOFACILITY/NOIDENTIFICATION/NOSEVERITY/NOTEXT
$		SET PROCESS/SUSPEND "''EDIT_NAME'"
$		SET MESSAGE 'SAVED_MSG'
$!
$!  Exit the editor, deleting the journal files.
$!
$   DONE:
$		DEASSIGN/JOB TPU$ATTACH_NAME
$		DEASSIGN/JOB TPU$SEARCH
$		DEASSIGN/JOB TPU$LINE
$		DEASSIGN/JOB TPU$OUTPUT
$		DEASSIGN/JOB TPU$ARGS
$		DEASSIGN/JOB TPU$NEWCMD
$		EXIT
*$*$*EOD*$*$*
$ if f$search("EXE.DIR;1") .eqs. "" then -
     CREATE/LOG/DIRECTORY [.EXE]
$ write sys$output "Creating [.EXE]VISETUP.COM"
$ create [.EXE]VISETUP.COM
$ DECK/DOLLARS="*$*$*EOD*$*$*"
$ !
$ !	VISETUP.COM  -  Set up to use the VI TPU interface.
$ !
$ !  Written by Gregg Wonderly JUN-30-1987
$ !
$ DEFINE/NOLOG/TRANS=CONCEAL 	VI$ROOT	MATH0:[PUBLIC.VI.]
$ DEFINE TPUSECINI				VI$ROOT:[EXE]VI.GBL
$ DEFINE TPU$CALLUSER			VI$ROOT:[EXE]TPUSUBS.EXE
$ DEFINE/NOLOG VISECINI			VI$ROOT:[EXE]VI.GBL
$ DEFINE/NOLOG VI$CALLUSER		VI$ROOT:[EXE]TPUSUBS.EXE
$ DEFINE/NOLOG MAIL$EDIT		VI$ROOT:[EXE]MAILEDIT.COM
$!
$! This symbol gets you a NON-SPAWNED VI
$! Delete this if you are using VI.EXE and VI.CLD
$!
$ VI ==							"EDIT/TPU"
$! This symbol gets you a SPAWNED VI
$ VIS ==						"@VI$ROOT:[EXE]VI.COM"
$!
$! This gets you a readonly version of the file.
$!
$ IF F$TYPE (VI) .EQS. "" THEN VI="VI"
$ VIEW == "''VI'/READONLY"
$ SNU*FF == "@VI$ROOT:[EXE]SNUFFTPU.COM"
$ EXIT
*$*$*EOD*$*$*
$ if f$search("EXE.DIR;1") .eqs. "" then -
     CREATE/LOG/DIRECTORY [.EXE]
$ write sys$output "Creating [.EXE]MAILEDIT.COM"
$ create [.EXE]MAILEDIT.COM
$ DECK/DOLLARS="*$*$*EOD*$*$*"
$ !
$ ! Command procedure to invoke an editor for MAIL.
$ !
$ ! Inputs:
$ !
$ !	P1 = Input file name.
$ !	P2 = Output file name.
$ !
$ ! If MAIL$EDIT is undefined, MAIL will invoke callable EDT.
$ ! If MAIL$EDITis defined to be a command procedure,
$ ! MAIL will create a subprocess to edit the mail.
$ !
$ ! Note that this procedure is run in the context of a subprocess.
$ ! LOGIN.COM is not executed.  However, all process logical names
$ ! and DCL global symbols are copied.
$ !
$ ! The default directory is the same as the parent process
$ !
$	IF P1 .EQS. "" THEN GOTO NOINPUT
$	@VI$ROOT:[EXE]VI 'P1' /OUTPUT='P2' "" "" "" "" "" "NOSPAWN"
$	EXIT
$ NOINPUT:
$	@VI$ROOT:[EXE]VI 'P2' "" "" "" "" "" "" "NOSPAWN"
$	EXIT
*$*$*EOD*$*$*
$ if f$search("EXE.DIR;1") .eqs. "" then -
     CREATE/LOG/DIRECTORY [.EXE]
$ write sys$output "Creating [.EXE]DO.COM"
$ create [.EXE]DO.COM
$ DECK/DOLLARS="*$*$*EOD*$*$*"
$ v=f$verify(0)
$!
$!	DO.COM
$!
$!	Written by Gregg Wonderly 30-Oct-1986
$!
$! write sys$output "$ ''P1' ''P2' ''P3' ''P4' ''P5' ''P6' ''P7' ''P8'"
$ write sys$output "$ ",P1," ",P2," ",P3," ",P4," ",P5," ",P6," ",P7," ",P8
$ 'P1' 'P2' 'P3' 'P4' 'P5' 'P6' 'P7' 'P8'
$ EXIT $status+('f$verify(v)'*0)
*$*$*EOD*$*$*
$ if f$search("EXE.DIR;1") .eqs. "" then -
     CREATE/LOG/DIRECTORY [.EXE]
$ write sys$output "Creating [.EXE]VI.CLD"
$ create [.EXE]VI.CLD
$ DECK/DOLLARS="*$*$*EOD*$*$*"
!
!  CLD for VI.  Derived from the CLD for the EDIT command
!  This CLD redefines the default values for the parameters to EDIT/TPU so
!  that VI is the default section file instead of EVE.
!
define verb vi
   image VI$ROOT:[EXE]VI.EXE
   parameter P1 , label=FILE_NAME , prompt="File"
      value (list,type=$infile)
   qualifier SECTION
      default
      value (default="VISECINI",type=$infile)
   qualifier LISTING
      value (type=$outfile)
   qualifier OUTPUT
      value (type=$outfile)
   qualifier READ_ONLY
   qualifier UPDATE
      value (list)
      placement=local
   qualifier COMMAND
      default
      value (DEFAULT="VIINI",TYPE=$INFILE)
   qualifier RECOVER
   qualifier JOURNAL
      default
      value (type=$infile)
   qualifier DISPLAY
      default
      value (list,type=$infile)
   qualifier CREATE
      default
   qualifier TPU
      default
*$*$*EOD*$*$*
$ if f$search("EXE.DIR;1") .eqs. "" then -
     CREATE/LOG/DIRECTORY [.EXE]
$ write sys$output "Creating [.EXE]DOSPAWN.COM"
$ create [.EXE]DOSPAWN.COM
$ DECK/DOLLARS="*$*$*EOD*$*$*"
$ define/user sys$input sys$command
$ 'p1'
$ write sys$output " "
$ READ/PROMPT="[Hit ENTER to continue]" sys$command line
$ EXIT
*$*$*EOD*$*$*
$ exit



More information about the Comp.sources.misc mailing list