MODULE FTS_parse
!++
! FTS_Parse.CLD
!
!	Copyright (C) 1991	TGV Inc.
!
! Description:
!
!	DCL-type interface to the FTS.
!
! Written By:
!
!	May 1991	Bruce R. Miller		TGV Inc.
!
! Copyright (c) 1991 Bruce R. Miller
! All rights reserved.
!
!	Redistribution and use in source and binary forms are permitted
!	provided that the above copyright notice and this paragraph are
!	duplicated in all such forms and that any documentation,
!	advertising materials, and other materials related to such
!	distribution and use acknowledge that the software was developed
!	by Bruce R. Miller.
!	THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR
!	IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
!	WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
!
! Modifications:
!
! Note:
!	If we get rid of all the keywords in WATCH and UNWATCH, we can
!	save over 8k on the image size (16 blocks).
!--



DEFINE VERB ALONONPAGED
!++
! Description:
!
!	Calls EXE$ALONONPAGED
!
! Syntax:
!
!	FTS> ALONONPAGED [/size=n]
!--
	ROUTINE FTS_ALONONPAGED
	QUALIFIER Size,LABEL=Size,VALUE(REQUIRED)



DEFINE VERB CRASH
!++
! Description:
!
!	Cause VMS to crash
!
! Syntax:
!
!	FTS> CRASH [/PID=pid]
!--
	ROUTINE FTS_CRASH
	QUALIFIER PID,LABEL=PID,VALUE(REQUIRED)



DEFINE VERB CRETVA
!++
! Description:
!
!	Map a virtual address range
!
! Syntax:
!
!	FTS> CRETVA startva endva
!--
	ROUTINE FTS_CRETVA
	PARAMETER P1,LABEL=startva,VALUE(REQUIRED)
	PARAMETER P2,LABEL=endva,VALUE(REQUIRED)
	QUALIFIER ACCESS,LABEL=ACCESS,VALUE(REQUIRED)
	QUALIFIER PROTECTION,LABEL=PROTECTION,VALUE(REQUIRED)
!	QUALIFIER PID,LABEL=PID,VALUE(REQUIRED)



DEFINE VERB DEANONPAGED
!++
! Description:
!
!	Calls EXE$DEANONPAGED
!
! Syntax:
!
!	FTS> DEANONPAGED S0addr [/size=n]
!--
	ROUTINE FTS_DEANONPAGED
	PARAMETER P1,LABEL=addr,VALUE(REQUIRED)
	QUALIFIER Size,LABEL=Size,VALUE(REQUIRED)



DEFINE VERB DEPOSIT
!++
! Description:
!
!	Deposit a value at the specified memory location
!
! Syntax:
!
!	FTS> DEPOSIT location value
!--
	ROUTINE FTS_Deposit
	PARAMETER P1,LABEL=location,VALUE(REQUIRED)
	PARAMETER P2,LABEL=value,VALUE(REQUIRED)
	QUALIFIER SIZE,LABEL=SIZE,VALUE(REQUIRED)
	QUALIFIER PID,LABEL=PID,VALUE(REQUIRED)



DEFINE VERB DFWM
!++
! Description:
!
!	Maximize the process priviledges
!
! Syntax:
!
!	FTS> DFWM
!
! Notes:
!	Now that I think about it, it's probably a bad idea to include this...
!--
    ROUTINE FTS_DFWM
    NOPARAMETERS



DEFINE VERB DIR SYNONYM CD
!++
! Description:
!
!	User thinks he's at the $ prompt
!
! Syntax:
!
!	FTS> DIR
!--
    ROUTINE FTS_Directory
    NOPARAMETERS



DEFINE VERB EXAMINE SYNONYM EX
!++
! Description:
!
!	Examine the specified memory location
!
! Syntax:
!
!	FTS> EXAMINE location
!--
	ROUTINE FTS_Examine
	PARAMETER P1,LABEL=location,VALUE(REQUIRED)
	QUALIFIER SIZE,LABEL=SIZE,VALUE(REQUIRED)
	QUALIFIER PID,LABEL=PID,VALUE(REQUIRED)



DEFINE VERB Exit SYNONYM Quit
!++
! Description:
!
!	Leave the FTS utility.
!
! Syntax:
!
!	FTS> EXIT
!--
    ROUTINE Exit_FTS
    NOPARAMETERS



DEFINE VERB FORCEX
!++
! Description:
!
!	Forces exit of a given process.
!
! Syntax:
!
!	FTS> FORCEX [pid] [/rcode=x]
!--
	ROUTINE FTS_ForceX
	PARAMETER P1,LABEL=pid,VALUE(REQUIRED)
	QUALIFIER RCODE,LABEL=RCode,VALUE(REQUIRED)



DEFINE VERB HALT
!++
! Description:
!
!	Execute a HALT instruction in KRNL mode
!
! Syntax:
!
!	FTS> HALT
!--
	ROUTINE FTS_HALT



DEFINE VERB Hello
!++
! Description:
!
!	I dunno...
!
! Syntax:
!
!	FTS> HELLO <WHO>
!--
  ROUTINE FTS_Hello
  PARAMETER P1, LABEL = Who



DEFINE VERB Help
!++
! Description:
!
!	Obtain help by looking up info in FTS help library.
!
! Syntax:
!
!	FTS> HELP [Help_Line]
!--
  ROUTINE FTS_Help
  PARAMETER P1, LABEL = Help_Line, VALUE (TYPE = $Rest_of_Line)




DEFINE VERB LOAD
!++
! Description:
!
!	Load a module (make it P1 resident)
!
! Syntax:
!
!	FTS> LOAD [module]
!--
  PARAMETER P1, LABEL = Module, Prompt="Module",
                 VALUE (REQUIRED, TYPE = FTS_Loadable_Modules)

    DEFINE TYPE FTS_Loadable_Modules
    KEYWORD JASMON SYNTAX = LOAD_JASMON
    KEYWORD XDT   SYNTAX = LOAD_XDT


DEFINE SYNTAX LOAD_JASMON
!++
! Description:
!
!	Load the JASMON code into P1 space
!--
  PARAMETER P1, Label=Option, VALUE(Required)
  QUALIFIER OUTPUT, Label=Output, VALUE(Required)
  ROUTINE FTS_LOAD_JASMON

DEFINE SYNTAX LOAD_XDT
!++
! Description:
!
!	Install XDelta and invoke it
!--
  PARAMETER P1, Label=Option, VALUE(Required)
  QUALIFIER OUTPUT, Label=Output, VALUE(Required)
  ROUTINE FTS_LOAD_XDT



DEFINE VERB NOOP
!++
! Description:
!
!	Do nothing.
!
! Syntax:
!
!	FTS> NOOP
!--
  ROUTINE FTS_NOOP
  NOPARAMETERS



!DEFINE VERB READ
!++
! Description:
!
!	Read in a file full of FTS commands and execute them.
!
! Syntax:
!
!	FTS> READ <file>
!--
!  ROUTINE FTS_READ
!  PARAMETER P1, Label=FILE, VALUE(TYPE=$FILE,REQUIRED)
!  QUALIFIER LOG,LABEL=Log



DEFINE VERB Set
!++
! Description:
!
!	Set something
!
! Syntax:
!
!	FTS> SET [what]
!--
  PARAMETER P1, LABEL = Option, Prompt="What",
                 VALUE (REQUIRED, TYPE = Set_Options)

    DEFINE TYPE Set_Options
    KEYWORD PAGE SYNTAX = Set_Page

DEFINE SYNTAX Set_Page
!++
! Description:
!
!	Modify memory page
!
! Syntax:
!	FTS> SET PAGE addr [size] /PROTECTION=prot {[/PID] [/REFCOUNT]}
!--
  PARAMETER P1, Label=Option, VALUE(Required)
  PARAMETER P3, Label=Addr, VALUE(Required)
  PARAMETER P4, Label=Size, VALUE(TYPE=$NUMBER)
  QUALIFIER PROTECTION,LABEL=Protection,VALUE(REQUIRED)
  ROUTINE FTS_Set_Page



DEFINE VERB SHOW
!++
! Description:
!
!	Display information about the system
!
! Syntax:
!
!	FTS> SHOW [what]
!--
  PARAMETER P1, LABEL = Option, Prompt="What",
                 VALUE (REQUIRED, TYPE = Show_Options)

    DEFINE TYPE Show_Options
    KEYWORD DEFAULT SYNTAX = Show_Default
    KEYWORD ERROR SYNTAX = Show_Error
    KEYWORD ETHER SYNTAX = Show_Ether
    KEYWORD PAGE SYNTAX = Show_Page


DEFINE SYNTAX Show_Default
!++
! Description:
!
!	Display the default directory string for the given process
!--
  ROUTINE FTS_Show_Default
  PARAMETER P1, Label=Option, VALUE(Required)
  PARAMETER P3, Label=PID

DEFINE SYNTAX Show_Error
!++
! Description:
!
!	Evaluate an error condition
!--
  ROUTINE FTS_Show_Error
  PARAMETER P1, Label=Option, VALUE(Required)
  PARAMETER P3, Label=RCode, VALUE(Required)


DEFINE SYNTAX Show_ETHER
!++
! Description:
!
!	Display information about the system's EtherNet cards
!
! Syntax:
!
!	FTS> SHOW ETHER
!--
  ROUTINE FTS_Show_Ether
  PARAMETER P1, Label=Option, VALUE(Required)

DEFINE SYNTAX Show_PAGE
!++
! Description:
!
!	Display information about a virtual page
!
! Syntax:
!
!	FTS> SHOW PAGE
!--
  ROUTINE FTS_Show_Page
  PARAMETER P1, Label=Option, VALUE(Required)
  PARAMETER P3, Label=Addr, VALUE(Required)



DEFINE VERB Spawn
!++
! Description:
!
!	Spawn a CLI process.
!
! Syntax:
!
!	FTS> SPAWN
!--
  ROUTINE FTS_Spawn
  PARAMETER P1, LABEL = Command_Line, VALUE (TYPE = $Rest_of_Line)



DEFINE VERB UNLOAD
!++
! Description:
!
!	Deactivate and remove and a module.
!
! Syntax:
!
!	FTS> UNLOAD [module]
!--
  PARAMETER P1, LABEL = Module, Prompt="Module",
                 VALUE (REQUIRED, TYPE = FTS_Unloadable_Modules)

    DEFINE TYPE FTS_Unloadable_Modules
    KEYWORD JASMON SYNTAX = UNLOAD_JASMON


DEFINE SYNTAX UNLOAD_JASMON
!++
! Description:
!
!	Unload the JASMON code from P1 space
!--
  PARAMETER P1, Label=Option, VALUE(Required)
  ROUTINE FTS_UNLOAD_JASMON



DEFINE VERB UNWASTE
!++
! Description:
!
!	Tries to get a process out of the RWAST state
!
! Syntax:
!
!	FTS> UNWASTE pid
!--
	ROUTINE FTS_UnWaste
	PARAMETER P1,LABEL=pid,VALUE(REQUIRED)



DEFINE VERB UNWATCH
!++
! Description:
!
!	Stop monitoring something
!
! Syntax:
!
!	FTS> UNWATCH [service]
!--
  PARAMETER P1, LABEL = Option, Prompt="Command",
                 VALUE (REQUIRED, TYPE = Unwatch_Options)

    DEFINE TYPE Unwatch_Options
    KEYWORD RMS SYNTAX = UNWATCH_RMS
    KEYWORD SS SYNTAX = UNWATCH_SS



DEFINE SYNTAX UNWATCH_RMS
!++
! Description:
!
!	Un-Monitor RMS
!
! Syntax:
!
!	FTS> UNWATCH RMS [service]
!--
    ROUTINE FTS_UNWATCH_RMS
    PARAMETER P1, Label=Option, VALUE(Required)
    PARAMETER P2, Label=Service, Prompt="Service",
			VALUE(Required,TYPE=UNWATCH_RMS_Options)

    DEFINE TYPE UNWATCH_RMS_Options
    KEYWORD CLOSE
    KEYWORD CONNECT
    KEYWORD CREATE
    KEYWORD DELETE
    KEYWORD FLUSH
    KEYWORD GET
    KEYWORD OPEN
    KEYWORD PUT


DEFINE SYNTAX UNWATCH_SS
!++
! Description:
!
!	Stop monitoring a system service
!
! Syntax:
!
!	FTS> UNWATCH SS [service]
!--
    ROUTINE FTS_UNWATCH_SS
    PARAMETER P1, Label=Option, VALUE(Required)
    PARAMETER P2, Label=Service, Prompt="Service",
			VALUE(Required,TYPE=UNWATCH_SS_Options)

    DEFINE TYPE UNWATCH_SS_Options
    KEYWORD ASSIGN
    KEYWORD CANCEL
    KEYWORD CANEXH
    KEYWORD CANTIM
    KEYWORD CANWAK
    KEYWORD CHKPRO
    KEYWORD CRETVA
    KEYWORD DASSGN
    KEYWORD DEQ
    KEYWORD ENQ
    KEYWORD ENQW
    KEYWORD GETLKI
    KEYWORD GETLKIW
    KEYWORD LOOKUP_LICENSE
    KEYWORD LKWSET
    KEYWORD GRANT_LICENSE
    KEYWORD QIO
    KEYWORD QIOW
    KEYWORD RELEASE_LICENSE
    KEYWORD SETIME
    KEYWORD SETPRT
    KEYWORD TRNLNM



DEFINE VERB Version
!++
! 
! Description:
!
!	Display information about this FTS version.
!
! Syntax:
!
!	FTS> VERSION
!--
  ROUTINE FTS_Version
  NOPARAMETERS



DEFINE VERB WAKE
!++
! Description:
!
!	Wakes up a given process.
!
! Syntax:
!
!	FTS> WAKE [pid]
!--
	ROUTINE FTS_Wake
	PARAMETER P1,LABEL=pid,VALUE(REQUIRED)



DEFINE VERB WATCH
!++
! Description:
!
!	Monitor something
!
! Syntax:
!
!	FTS> WATCH [service]
!--
    PARAMETER P1, LABEL = Option, Prompt="Command",
		VALUE (REQUIRED, TYPE = Watch_Options)

    DEFINE TYPE Watch_Options
    KEYWORD DEVICE SYNTAX = WATCH_DEVICE
    KEYWORD RMS SYNTAX = WATCH_RMS
    KEYWORD SS SYNTAX = WATCH_SS



DEFINE SYNTAX WATCH_DEVICE
!++
! Description:
!
!	Monitor device activity
!
! Syntax:
!
!	FTS> WATCH DEVICE [service]
!--
    ROUTINE FTS_WATCH_DEVICE
    PARAMETER P1, Label=Option, VALUE(Required)
    PARAMETER P2, Label=DEVICE, Prompt="device", VALUE(Required)
    QUALIFIER FDT,LABEL=FDT
    QUALIFIER ALTSTART,LABEL=ALTSTART
    QUALIFIER CANCEL,LABEL=CANCEL
    QUALIFIER STARTIO,LABEL=STARTIO
    QUALIFIER IOPOST,LABEL=IOPOST


DEFINE SYNTAX WATCH_RMS
!++
! Description:
!
!	Monitor RMS
!
! Syntax:
!
!	FTS> WATCH RMS [service]
!--
    ROUTINE FTS_WATCH_RMS
    PARAMETER P1, Label=Option, VALUE(Required)
    PARAMETER P2, Label=Service, Prompt="Service",
			VALUE(Required,TYPE=WATCH_RMS_Options)

    DEFINE TYPE WATCH_RMS_Options
    KEYWORD CLOSE
    KEYWORD CONNECT
    KEYWORD CREATE
    KEYWORD DELETE
    KEYWORD FLUSH
    KEYWORD GET
    KEYWORD OPEN
    KEYWORD PUT


DEFINE SYNTAX WATCH_SS
!++
! Description:
!
!	Monitor a system service
!
! Syntax:
!
!	FTS> WATCH SS [service]
!--
    ROUTINE FTS_WATCH_SS
    PARAMETER P1, Label=Option, VALUE(Required)
    PARAMETER P2, Label=Service, Prompt="Service",
			VALUE(Required,TYPE=WATCH_SS_Options)

    DEFINE TYPE WATCH_SS_Options
    KEYWORD ASSIGN
    KEYWORD CANCEL
    KEYWORD CANEXH
    KEYWORD CANTIM
    KEYWORD CANWAK
    KEYWORD CHKPRO
    KEYWORD CRETVA
    KEYWORD DASSGN
    KEYWORD DEQ
    KEYWORD ENQ
    KEYWORD ENQW
    KEYWORD GETLKI
    KEYWORD GETLKIW
    KEYWORD GRANT_LICENSE
    KEYWORD LKWSET
    KEYWORD LOOKUP_LICENSE
    KEYWORD QIO     SYNTAX = WATCH_SS_QIO
    KEYWORD QIOW    SYNTAX = WATCH_SS_QIOW
    KEYWORD RELEASE_LICENSE
    KEYWORD SETIME
    KEYWORD SETPRT
    KEYWORD SETPRV
    KEYWORD TRNLNM

DEFINE SYNTAX WATCH_SS_QIO
  ROUTINE FTS_WATCH_SS_QIO
  PARAMETER P1, Label=Option, VALUE(Required)
  PARAMETER P2, Label=Service, VALUE(Required)
  PARAMETER P3, Label=Device, VALUE(Required)
  QUALIFIER STYLE, LABEL=STYLE, VALUE(REQUIRED,TYPE=QIO_STYLES)

DEFINE SYNTAX WATCH_SS_QIOW
  ROUTINE FTS_WATCH_SS_QIO
  PARAMETER P1, Label=Option, VALUE(Required)
  PARAMETER P2, Label=Service, VALUE(Required)
  PARAMETER P3, Label=Device, VALUE(Required)
  QUALIFIER STYLE, LABEL=STYLE, VALUE(REQUIRED,TYPE=QIO_STYLES)

DEFINE TYPE QIO_STYLES
    KEYWORD NULL
    KEYWORD DEFAULT
    KEYWORD TGV
    KEYWORD UCX
    KEYWORD PSI



DEFINE VERB XYZZY
!++
! Description:
!
!	???
!
! Syntax:
!
!	FTS> XYZZY
!--
  ROUTINE FTS_XYZZY
  NOPARAMETERS
