This section contains information necessary to communicate with the various operating system services provided by the Entire System Server. The examples included show the use of the Entire System Server in heterogeneous environments running operating systems such as z/OS, z/VSE, BS2000. The examples consist of Natural programs that reference Entire System Server views, and show the resulting output.
An example program for every available view is contained in an online tutorial delivered with the Entire System Server (see Section Online Tutorial for more information).
This document covers the following topics:
Entire System Server views can be accessed from any Natural program
using the Natural statement PROCESS or FIND
. Which statement you
will use depends on the type of view accessed, the access mode required, and
the number of records selected.
The PROCESS
statement is intended for use only for
views related to performing an activity.
The FIND
statement can be used to retrieve
information, which may consist of a set of records.
The PROCESS
statement is used to request a function
(for example, allocate, update, or delete system data, issue operator
commands,) using the appropriate operating system service.
PROCESS view-name USING field-name=value GIVING field-name
PROCESS FILE-ALLOCATE USING DSNAME = 'USER.123', VOLSER = 'SAG001', NODE = 151 GIVING ERROR-CODE
Using the view FILE-ALLOCATE
, a dataset named
USER.123
is allocated on a volume with the serial number
SAG001
, on the machine identified by the Entire System Server node
ID 151
, and a code is returned.
The FIND
statement can be used to display data from
views that require specification of fields. Selectable fields are indicated in
the view descriptions by a D
in the Descriptor
column
(see View
Descriptions).
FIND ... view-name WITH ... search criteria
Data is selected based on the specified search criteria (see next subsection).
FIND ACTIVE-JOBS WITH NODE = 151
AND JOB-NAME = COMPLETE
....
END-FIND
Using the ACTIVE-JOBS
view, the job named
COMPLETE
on the machine identified by the Entire System Server
node ID 151
is selected for display.
When FIND
is used to access the Entire System
Server, search criteria can be used to specify values for alphanumeric fields.
Two search criteria are available:
* Acts as placeholder for one or more characters in the position;
_ Acts as placeholder for one character.
The following examples demonstrate the use of these search criteria:
FIND VTOC WITH VOLSER = 'V3380A' AND DSNAME = 'L99*LOAD*'
All datasets on volume V3380A whose names start with L99
followed by anything, followed by LOAD
, followed by anything, are
selected; for example:
L99COM.LOAD.NPR
L99.SAG.LOAD.DOCS
L99NPROC.LOAD
FIND VTOC WITH VOLSER = 'V3380A' AND DSNAME = '*SOURCE'
All datasets on volume V3380A
whose names end with
SOURCE
are selected; for example:
A1234.SOURCE
SAG.PP.SOURCE
AB.MYSOURCE
FIND ACTIVE-JOBS WITH JOB-NAME = 'L_ _AB*'
All jobs whose first characters are L
, followed by
any 2 characters, followed by AB
, followed by anything are
selected; for example:
L12ABJOB
LAAABX
LXXAB2YC
FIND
NATPROC-USERS WITH USER-ID = '_ _ _ _ _'
All users of the Entire System Server whose identifiers contain exactly 5 characters are selected.
The FIND
statement does not create an ISN list as
in the case of Adabas. Therefore, all functions related to ISN lists are not
supported; for example, RETAIN
,
*NUMBER
.
As Entire System Server does not support ISN lists as it is
done in Adabas, the meaning of the field *NUMBER
is different.
There are in general 3 possibilites:
*NUMBER = 0
means for Natural: fall in NO
RECORDS FOUND
clause and Entire System Server did not find any record
which fulfilled the search criteria.
*NUMBER = 1
means for Natural one record found.
It will be returned for views with one wanted action such as
FILE-ATTRIBUTES
, CATALOG-UPDATE
.
*NUMBER = large
value
: there are different large values for different
views such as CATALOG
, READ-FILE
and
READ-SPOOL
If you have more than one computer at your installation, you may have more than one Entire System Server node installed (ask your system programmer). Note that the node ID identifies each Entire System Server node uniquely.
It is possible to direct a Entire System Server request from a
Natural program to a specific node. To do this, specify
NODE=nnn
in the appropriate
FIND
statement; for example:
FIND VTOC WITH VOLSER='DISK01' AND NODE=151
This statement is executed in Node 151. If the NODE
field is not specified, the default node is used (DBID specified in the DDM).
An alternative method is to use the NODE-NAME
field
when referencing Entire System Server nodes on other machines.
NODE-NAME
is a character field and allows programs to be written
without regard to a specific node number. If a particular machine needs to have
its node changed, the only update that is required is to the mapping module
ESYNODTB
(see also Entire System Server
Installation and
Customization documentation). No Natural programs need to
be changed and restowed.
An example of NODE-NAME
is
FIND VTOC WITH VOLSER='SMS236' AND NODE-NAME = 'PROD'
If both NODE
and NODE-NAME
are specified,
the NODE
specification takes precedence.
A Natural program can even access multiple nodes. For example,
using the COPY-FILE
view, you can copy a file from one node to
another.
Most of the views provided by ESY obtain data from the Operating System and return these data to the Natural program. Those views belong to the group of retrieval views. Another group of views allows you to modify Operating System objects in a certain way. These views belong to the group of update views.
All multi-record views with an Adabas file number greater than or
equal to 200 belong to update views. These views require a special programming
technique. A number of other update views support a single record request only
(for example, CATALOG-UPDATE
, VTOC-UPDATE
) and do not
need special programming considerations.
The field FUNCTION
is provided in all update views.
It should contain blanks while creating the object, and the value
CLOSE
if the object has been properly created. If no
CLOSE
has been requested, the object is still in open state and
not completely built.
We recommend using the Natural statement PROCESS
to
request update view services.
PROCESS update_view USING NODE = #NODE , FUNCTION = #FUNCTION ...
If more than one PROCESS
statement is implemented in
a Natural program and the requests are related to one session only, for
example, to create a single dataset, the PROCESS
statements must
be indicated as belonging together.
A typical example is the PROCESS WRITE-FILE USING
FUNCTION=' '
in one subroutine to create several records and
PROCESS WRITE-FILE USING FUNCTION='CLOSE'
in a different
subroutine. The field IDENTIFIER
must be used and filled with the
same 8-byte character string to indicate a session dealing with the same
dataset in different locations of a Natural program.
Another issue is implementing nested loops requesting update view
services. A separate IDENTIFIER
must be used in every loop level
to make the calls linked to several sessions if for example
WRITE-FILE
is used in different loop levels. If no
IDENTIFIER
is provided, unpredictable results might occur in
nested loops.
If records have to be written to a dataset, the view
WRITE-FILE
must be used to do it. The field RECORD
is
defined as an alphanumeric field with a maximum length of 253 bytes only.
Datasets probably contain records larger than 253 bytes. Therefore, the pieces
of such records have to be delivered in segments.
Setting fields SEGMENT-NUMBER
and
SEGMENT-LENGTH
allows you to create records longer than 253 bytes.
Assuming a record length of 500 bytes, two view calls are needed.
SEGMENT-NUMBER=1
, SEGMENT-LENGTH=250
,
RECORD
bytes 1-250 filled with data, create the first part of the
record, SEGMENT-NUMBER=2
, SEGMENT-LENGTH=250
,
RECORD
bytes 1-250 the second part of the record.
Smaller segments could also be used (for example, 5 segments each 100 bytes long) but this would increase the number of calls and reduce the performance.
The following sample program reads an LMS element on one node and
copies the data to another LMS element on another node. It deals with segments
returned by the view READ-FILE
. If an error occurs, the copying is
stopped immediately.
DEFINE DATA LOCAL 1 READ-FILE VIEW OF READ-FILE 2 ERROR-CODE 2 ERROR-TEXT 2 SYSTEM-CODE 2 SYSTEM-MESSAGE-CODE 2 DSNAME 2 ELEMENT 2 ELEMENT-TYPE 2 ELEMENT-VERSION 2 RECORD 2 RECORD-LENGTH 2 RECORD-NUMBER 2 SEGMENT-LENGTH 2 SEGMENT-NUMBER 2 END-OF-FILE 2 PRODUCT 2 KEY 1 WRITE-FILE VIEW OF WRITE-FILE 2 ERROR-CODE 2 ERROR-TEXT 2 SYSTEM-CODE 2 SYSTEM-MESSAGE-CODE 2 DSNAME 2 ELEMENT 2 ELEMENT-TYPE 2 ELEMENT-VERSION 2 RECORD 2 RECORD-LENGTH 2 RECORD-NUMBER 2 SEGMENT-LENGTH 2 SEGMENT-NUMBER 2 PRODUCT 2 DISP 2 KEY 2 FUNCTION * 1 #I-DSNAME (A54) INIT <'$NPR.NPRvrs.DEV'> 1 #I-ELEMENT (A64) INIT <'XCOMMAIN'> 1 #I-ELEMENT-TYPE (A8) INIT <'P'> 1 #I-NODE (N3) INIT <113> 1 #I-PRODUCT (A1) INIT <'M'> * 1 #O-DISP (A3) INIT <'NEW'> 1 #O-DSNAME (A54) INIT <'$PRD.NPRvrs.DEV'> 1 #O-FUNCTION (A8) INIT <' '> 1 #O-ELEMENT (A64) INIT <'XCOMMAIN'> 1 #O-NODE (N3) INIT <114> 1 #O-PRODUCT (A1) INIT <'M'> * 1 #CLOSE-NEEDED (L) INIT <FALSE> * END-DEFINE * * Main loop reading the segments of the input file to * write the data to output on the target node. * FIND READ-FILE WITH NODE = #I-NODE AND DSNAME = #I-DSNAME AND ELEMENT = #I-ELEMENT AND ELEMENT-TYPE = #I-ELEMENT-TYPE AND PRODUCT = #I-PRODUCT * IF READ-FILE.ERROR-CODE NE 0 WRITE READ-FILE.ERROR-CODE READ-FILE.ERROR-TEXT READ-FILE.SYSTEM-CODE READ-FILE.SYSTEM-MESSAGE-CODE IF #CLOSE-NEEDED EQ FALSE ESCAPE ROUTINE END-IF END-IF * IF READ-FILE.END-OF-FILE EQ 'YES' OR READ-FILE.ERROR-CODE NE 0 ASSIGN #O-FUNCTION = 'CLOSE' END-IF * PROCESS WRITE-FILE USING NODE = #O-NODE , DSNAME = #O-DSNAME , DISP = #O-DISP , FUNCTION = #O-FUNCTION , PRODUCT = #O-PRODUCT , ELEMENT = #O-ELEMENT , ELEMENT-TYPE = READ-FILE.ELEMENT-TYPE , ELEMENT-VERSION = READ-FILE.ELEMENT-VERSION , RECORD = READ-FILE.RECORD , RECORD-LENGTH = READ-FILE.RECORD-LENGTH , RECORD-NUMBER = READ-FILE.RECORD-NUMBER , SEGMENT-LENGTH = READ-FILE.SEGMENT-LENGTH , SEGMENT-NUMBER = READ-FILE.SEGMENT-NUMBER , KEY = READ-FILE.KEY * IF WRITE-FILE.ERROR-CODE NE 0 WRITE WRITE-FILE.ERROR-CODE WRITE-FILE.ERROR-TEXT WRITE-FILE.SYSTEM-CODE WRITE-FILE.SYSTEM-MESSAGE-CODE ESCAPE ROUTINE END-IF * IF READ-FILE.ERROR-CODE NE 0 ESCAPE ROUTINE END-IF * ASSIGN #CLOSE-NEEDED = TRUE * END-FIND * END
Example programs and their results are shown below for each of the functional areas of Entire System Server. The programs are taken from the Entire System Server online tutorial. A full list of field names for the various operating systems is contained in the view descriptions; see View Descriptions.
Note:
Programs whose names start with M
are taken from an
z/OS environment, those beginning with D
from a z/VSE environment,
and those beginning with B
from BS2000.
Program MCOPYFI
uses the COPY-FILE
view
to copy files from one node to another within a computer network:
* Program MCOPYFI * View COPY-FILE * * Function Copy files from node to node * * ---------------------------------------------------------------------- * DEFINE DATA GLOBAL USING TUTO LOCAL USING COPYFI-L END-DEFINE * REPEAT INPUT (AD=MI'_' ZP=OFF) // ##TITLE (AD=OI IP = OFF) // ' from' (I) // ' Dataset...:' COPY-FILE.FROM-DSNAME / ' Member....:' COPY-FILE.FROM-MEMBER / ' Volser....:' COPY-FILE.FROM-VOLSER / ' Node......:' COPY-FILE.FROM-NODE // ' to' (I) // ' Dataset...:' COPY-FILE.TO-DSNAME / ' Member....:' COPY-FILE.TO-MEMBER / ' Volser....:' COPY-FILE.TO-VOLSER / ' Node......:' COPY-FILE.TO-NODE PROCESS COPY-FILE USING FROM-DSNAME = COPY-FILE.FROM-DSNAME , FROM-MEMBER = COPY-FILE.FROM-MEMBER , FROM-VOLSER = COPY-FILE.FROM-VOLSER , FROM-NODE = COPY-FILE.FROM-NODE , TO-DSNAME = COPY-FILE.TO-DSNAME , TO-MEMBER = COPY-FILE.TO-MEMBER , TO-VOLSER = COPY-FILE.TO-VOLSER , TO-NODE = COPY-FILE.TO-NODE , NODE = ##NODE REINPUT ERROR-TEXT * END-REPEAT END
This program prompts you for specification of the source and destination names, and notifies you of the successful copy function with a message:
ESY5000 COPY COMPLETED SUCCESSFULLY
Program MNETOPR
executes certain operator commands
and displays system response:
* Program MNETOPR * View NET-OPER * * Function Execute NET operator commands and display response * * ---------------------------------------------------------------------- * DEFINE DATA GLOBAL USING TUTO LOCAL USING NETOP-L END-DEFINE * REPEAT INPUT (AD=MI'_') // ##TITLE (AD=OI IP=OFF) // 'Command:' / ' ' NET-OPER.COMMAND (AL=79) // 'Purge previous messages ?' NET-OPER.PURGE-PREVIOUS '(y/n)' *FIND
NET-OPER WITH COMMAND = NET-OPER.COMMAND AND NODE = ##NODE AND PURGE-PREVIOUS = NET-OPER.PURGE-PREVIOUS * IF ERROR-CODE > 0 ASSIGN ##MSG-NR = 1000 ASSIGN ##MSG-TXT1 = ERROR-TEXT STOP END-IF * IF LINE-STATUS NE 'YES' NEWPAGE END-IF * WRITE NOTITLE TIME-STAMP LINE (AL=70) * END-FIND
END-REPEAT END
Example output from the program MNETOPR
using input
D NET,LINES
:
09:02:12 D NET,LINES 09:01:38 IST097I DISPLAY ACCEPTED 09:01:38 IST350I VTAM DISPLAY - DOMAIN TYPE= LINES 09:01:38 IST354I PU T4/5 MAJOR NODE = ISTPUS 09:01:38 IST170I LINES: 09:01:38 IST080I 050-L ACTIV----I 052-L ACTIV----I 09:01:38 IST231I CA MAJOR NODE = FCHAN 09:01:38 IST170I LINES: 09:01:38 IST232I FACAL , ACTIV----E, CUA = 930 09:01:38 IST354I PU T4/5 MAJOR NODE = NCPF00 09:01:38 IST170I LINES: 09:01:38 IST080I NATL1 RESET-N--- SIML1 RESET-N--- BRUL1 RESET-N--- 09:01:38 IST080I BERL1 RESET-N--- HANL1 RESET-N--- AMSL1 RESET-N--- 09:01:38 IST080I MUEL2 RESET-N--- STUL2 RESET-N--- STUL3 RESET-N--- 09:01:38 IST080I DEML1 RESET-N--- HAML2 RESET-N--- NIKL1 RESET-N--- 09:01:38 IST080I NIKL3 RESET-N--- NIKL4 RESET-N--- HAML1 RESET-N--- 09:01:38 IST080I STUL1 RESET-N--- WIEL1 RESET-N--- DEML2 RESET-N--- 09:01:38 IST080I LNKRESL ACTIV----E 09:01:38 IST354I PU T4/5 MAJOR NODE = NCPE01 09:01:38 IST170I LINES: 09:01:38 IST080I VXEL1 RESET-N--- NIKL5 RESET-N--- NIKL6 RESET-N--- 09:01:38 IST080I NETL1 RESET-N--- NUEL1 RESET-N--- FRIL1 RESET-N--- 09:01:38 IST080I FRIL2 RESET-N--- FRIL3 RESET-N--- FRIL4 RESET-N---
Program MCONSOL
displays the operator console:
* Program MCONSOL * View CONSOLE * * Function Operator Console * * ---------------------------------------------------------------------- * DEFINE DATA GLOBAL USING TUTO LOCAL USING CONSOLEL END-DEFINE * SET KEY PF12 NAMED 'Node' * REPEAT RESET #LINE (*) RESET #CV-LINE (*)FIND
CONSOLE WITH NODE = ##NODE AND FUNCTION = 'DISPLAY' PERFORM CHECK-ERROR ASSIGN #LINE (20) = TEXT ASSIGN #LINE (1:19) = #LINE(2:20) END-FIND
*FIND
CONSOLE WITH NODE = ##NODE AND FUNCTION = 'DIS-WTOR' PERFORM CHECK-ERROR ASSIGN #I = *COUNTER ASSIGN #LINE (#I) = TEXT ASSIGN #CV-LINE (#I) = (AD=I) END-FIND
* RESET #LINE (20) #CV-LINE (20) FOR #I 1 19 FOR #J = #I 20 IF #LINE (#I) = ' ' ASSIGN #LINE (#I:19) = #LINE (#I+1:20) ASSIGN #CV-LINE (#I:19) = #CV-LINE (#I+1:20) RESET #LINE (20) #CV-LINE (20) ELSE ESCAPE BOTTOM END-IF END-FOR END-FOR * PERFORM SCREEN-IO * END-REPEAT * DEFINE SUBROUTINE SCREEN-IO INPUT WITH TEXT *##MSG-NR,##MSG-TXT1, ##MSG-TXT2 USING MAP 'CONSOLE&' RESET ##MSG-NR ##MSG-TXT1 ##MSG-TXT2 IF #COMMAND-LINE NE ' ' ASSIGN #FUNCTION = 'OP-CMD' PERFORM ISSUE-OPERATOR-COMMAND RESET #COMMAND-LINE END-IF IF *PF-KEY = 'PF12' CALLNAT 'TUTODB' ##NODE ##MSG ##TUTO END-IF END-SUBROUTINE * DEFINE SUBROUTINE ISSUE-OPERATOR-COMMAND PROCESS CONSOLE USING NODE = ##NODE , FUNCTION = #FUNCTION , TEXT = #COMMAND-LINE GIVING ERROR-CODE ERROR-TEXT PERFORM CHECK-ERROR END-SUBROUTINE * DEFINE SUBROUTINE CHECK-ERROR IF CONSOLE.ERROR-CODE > 0 ASSIGN ##MSG-TXT1 = CONSOLE.ERROR-TEXT ASSIGN ##MSG-NR = 1000 END-IF END-SUBROUTINE * END
Output from the program MCONSOL
:
----------------------------- Operator-Console --------------------- Node 148 - STC 2141 NET0120 - VTAM LINK LNKA TO NODE ANODE STAT=ACTIVE - STC 2141 NET0120 - VTAM LINK LNKVM TO NODE UNKNOWN STAT=OPEN - STC 2141 NET0120 - VTAM LINK LNKKOP TO NODE UNKNOWN STAT=OPEN - JOB 2344 IEF404I IMSGEN05 - ENDED - TIME=10.22.44 - JOB 2345 IEF403I IMSGEN06 - STARTED - TIME=10.22.45 STC 2112 F FNETWK,CONN LNKU --> UQ K CMD FROM HRO - STC 2141 NET0137 - LINK LNKU CONNECT INITIATED - STC 2141 NET0137 - LINK LNKR CONNECT INITIATED STC 2124 IST663I CDINIT REQUEST TO EHOST FAILED, SENSE=08010000 IST664I REAL OLU=SAGNET.FNETWK ALIAS DLU=SAGNET.UNETWK IST889I SID = CB6722CE854CF71C IST314I END STC 2124 IST663I CDINIT REQUEST TO EGAT FAILED, SENSE=08010000 IST664I REAL OLU=SAGNET.FNETWK ALIAS DLU=SAGNET.RNETWK IST889I SID = CB6722CE854CF71E IST314I END STC 2112 P NPR123 --> UQ K CMD FROM WKK STC 2112 IEE341I NPR123 NOT ACTIVE 00- STC 2231 === INACTIVE USER HAL HAS BEEN PURGED ===
Program MRSPOOL
displays information for a specified
job:
* Program MRSPOOL * View READ-SPOOL * * Function Read SYSOUT records from JES * * ---------------------------------------------------------------------- * DEFINE DATA GLOBAL USING TUTO LOCAL USING RSPOOL-L LOCAL 1 #JOBN (N5) 1 #JOB (A8) 1 #TYPE (A2) 1 #DS (N3) 1 #STRING (A50) 1 #SEL (A1/1:6) 1 #CODE (A2/1:6) CONST (1) <'SI'> (2) <'JL'> (3) <'SM'> (4) <'SO'> (5) <'CC'> (6) <'AL'> 1 #I (I1) END-DEFINE * REPEAT INPUT WITH TEXT *##MSG-NR, ##MSG-TXT1, ##MSG-TXT2 USING MAP 'MRSPOOL&' RESET ##MSG * IF #STRING = ' ' ASSIGN #STRING = '*' END-IF * IF SELECTION NOT UNIQUE #SEL (*) REINPUT *1011 ELSE FOR #I = 1 TO 6 IF #SEL (#I) NE ' ' ASSIGN #TYPE = #CODE (#I) END-IF END-FOR END-IF * FIND READ-SPOOL WITH JOB-NAME = #JOB AND JOB-NUMBER = #JOBN AND TYPE = #TYPE AND DATA-SET = #DS AND NODE = ##NODE AND RECORD = #STRING IF ERROR-CODE > 0 REINPUT ERROR-TEXT END-IF DISPLAY NOTITLE NOHDR RECORD (AL=79) END-FIND END-REPEAT * END
Output from the program MRSPOOL
:
The program displays the following output with all datasets specified in the prompt:
1 J E S 2 J O B L O G -- S Y S T E M D A E F -- N --------- JOB 5812 IEF097I OPPLG181 - USER ACF2BAT ASSIGNED 14.03.58 JOB 5812 $HASP373 OPPLG181 STARTED - INIT 22 - CLASS W - SYS DAEF 14.03.58 JOB 5812 IEF403I OPPLG181 - STARTED - TIME=14.03.58 14.03.58 JOB 5812 *IEF233A M 803,P18111,,OPPLG181,RES518,DB181.PLOG07 14.10.51 JOB 5812 - --TIMINGS 14.10.51 JOB 5812 -JOBNAME STEPNAME PROCSTEP RC EXCP CONN TCB S 14.10.51 JOB 5812 -OPPLG181 PLG181 RES518 00 7122 22575 .03 . 14.10.54 JOB 5812 §DRM007 WARNING - DRM DATABASE IS ACTIVE 14.11.03 JOB 5812 +ADAN02 00008 NUCLEUS-RUN WITHOUT PROTECTION-LOG 14.11.03 JOB 5812 +ADAN03 00008 ADABAS COMING UP 14.11.03 JOB 5812 +ADAN01 00008 A D A B A S IS ACTIVE 14.11.03 JOB 5812 +ADAN01 00008 MODE = SINGLE I S O L A T E D 14.11.05 JOB 5812 §DRM200 SDR PLG181 updated successfully. 14.11.05 JOB 5812 +DRM201 Tsn P18111 14.11.05 JOB 5812 +DRM202 Seq 1 Label 7 File 7 Used 53 Writes 0 14.11.05 JOB 5812 +ADAL01 00008 93.02.05 14:11:04 CLOG NOT ACTIVE 14.11.11 JOB 5812 -OPPLG181 DRMUPD 00 320 1034 .00 . 14.11.11 JOB 5812 IEF234E K 803,P18111,PVT,OPPLG181 14.11.11 JOB 5812 IEF404I OPPLG181 - ENDED - TIME=14.11.11 14.11.11 JOB 5812 -OPPLG181 ENDED. NAME- TOTAL TCB CPU T 14.11.11 JOB 5812 $HASP395 OPPLG181 ENDED 0------ JES2 JOB STATISTICS ------
Program BSW
allows the user to specify certain items
in job switch handling:
* BS2000 Job-switches maintenance * DEFINE DATA GLOBAL USING TUTO LOCAL USING BSW----L LOCAL 01 #DISPLAY (32) 02 MARK (A1) 02 SWITCH (N2) 02 REDEFINE SWITCH 03 SWITCH-A (A2) 02 STATUS (A3) * 01 #OPERATION (A6) 01 #LIST-OF-SWITCHES (A64) 01 #SWITCH-TYPE (A7) 01 #FUNCTION (A8) 01 #USERID (A8) * 01 #I (P2) END-DEFINE ASSIGN #USERID = *INIT-USER FOR #I = 1 TO 32 COMPUTE SWITCH (#I) = #I - 1 END-FOR * REPEAT PERFORM SCREEN-IO FIND JOB-SWITCHES WITH NODE = ##NODE AND OPTION = #OPERATION AND SWITCH-NUMBERS = #LIST-OF-SWITCHES AND SWITCH-TYPE = #SWITCH-TYPE AND FUNCTION = #FUNCTION AND USERID = #USERID IF ERROR-CODE NE 0 OR SYSTEM-CODE NE 0 INCLUDE BERR---C END-IF END-FIND END-REPEAT * * ------------------------------ SCREEN-IO ---------------------------- * DEFINE SUBROUTINE SCREEN-IO IF ##MSG-NR = 0 FOR #I = 1 TO 32 DECIDE ON FIRST JOB-SWITCHES.SW-VALUES (#I) VALUE 'Y' ASSIGN #DISPLAY.STATUS (#I) = 'on' VALUE 'N' ASSIGN #DISPLAY.STATUS (#I) = 'off' VALUE ' ' RESET #DISPLAY.STATUS (#I) NONE ASSIGN #DISPLAY.STATUS (#I) = '???' END-DECIDE END-FOR END-IF INPUT WITH TEXT *##MSG-NR, ##MSG-TXT1, ##MSG-TXT2 USING MAP 'BSW----&' RESET ##MSG #LIST-OF-SWITCHES FOR #I = 1 TO 32 IF MARK (#I) = 'X' COMPRESS #LIST-OF-SWITCHES SWITCH-A (#I) INTO #LIST-OF-SWITCHES LEAVING NO SPACE END-IF RESET MARK (#I) END-FOR END-SUBROUTINE END
Output from the program BSW
:
BS2000 Job switches Function ....................... READ___ (READ/WRITE/ATTRIB) Operation ...................... _____ (INVERT/ON/OFF) Switch-Type .................... USER___ (USER/PROCESS) BS2000-UserID .............. NPR____ Switch Status Switch Status Switch Status Switch Status _ ______ ______ _ ______ ______ _ ______ ______ _ ______ ______ _ 0 off _ 1 off _ 2 off _ 3 on _ 4 off _ 5 off _ 6 off _ 7 off _ 8 off _ 9 off _ 10 off _ 11 off _ 12 off _ 13 off _ 14 off _ 15 off _ 16 off _ 17 off _ 18 off _ 19 off _ 20 off _ 21 off _ 22 off _ 23 off _ 24 off _ 25 off _ 26 off _ 27 off _ 28 off _ 29 off _ 30 off _ 31 off Please mark specific Switch(es) with 'X' Enter-PF1--PF2--PF3--PF4--PF5--PF6--PF7--PF8--PF9--PF10--PF11--PF12--Exit
Program DVTOC
lists catalog entries for a specific
volume:
* List VTOC of a specific volume
*
DEFINE DATA
GLOBAL USING TUTO
LOCAL USING DVTOCL
END-DEFINE
*
ASSIGN VTOC.EXTENT-TYPE = '*'
*
INPUT (AD=MIT)
##TITLE (AD=OI IP=OFF)
// 'List Vtoc of..:' VTOC.VOLSER
/ 'Extent type...:' VTOC.EXTENT-TYPE 3X '(*/USED/FREE)'
*
IF NOT VTOC.EXTENT-TYPE = 'USED' OR = 'FREE' OR = '*'
REINPUT *1027 MARK *VTOC.EXTENT-TYPE
END-IF
*
WRITE TITLE ##TITLE (AD=I) /
'Vtoc.....' (I) VTOC.VOLSER (AD=I) /
*
FIND
VTOC WITH VOLSER = VTOC.VOLSER
AND EXTENT-TYPE = VTOC.EXTENT-TYPE
AND NODE = ##NODE
*
IF ERROR-CODE > 0
REINPUT ERROR-TEXT
END-IF
*
END-ALL
SORT BY DSNAME USING TOTAL-TRACKS-ALLOCATED DSORG EXTENTS CREATION-DATE
*
DISPLAY 'Name' DSNAME (AL=30 IS=ON)
'Tracks' TOTAL-TRACKS-ALLOCATED
'Dsorg' DSORG
'Extent' EXTENTS (EM=H(12))
'Created' CREATION-DATE
END-SORT
*
END
Output from the program DVTOC
for the volume
SYSWK1
:
MORE List VTOC of a specific volume Vtoc..... SYSWK1 Name Tracks Dsorg Extent Created ------------------------------ -------- ----- ------------------------ -------- ** VTOC EXTENT ** 15 UN 013D0000013D000E00010000 ******** CICS.SYSTEM.LOG.A.TFS 45 SD 01BF000001C1000E00030000 29/06/90 CICS.SYSTEM.LOG.B.TFS 45 SD 01C2000001C4000E00030000 29/06/90 COM441.VSE.HISTORY 30 UN 000100000002000E00020000 20/03/91 DOS.LABEL.FILE.FF0000203081.AR 45 UN 024A0000024C000E00030000 16/06/89 ICCF.LIBRARY 1785 DA 013E000001B4000E00770000 04/12/87 INFO.ANALYSIS.DUMP.MGNT.FILE 10 SD 02480000024800090000000A 05/06/90 INFO.ANALYSIS.EXT.RTNS.FILE 5 SD 0248000A0248000E00000005 04/12/87 RMADA.DB001.DATAR1 855 DA 00030000003B000E00390000 20/10/89 VSE.DUMP.LIBRARY 600 SD 00D4000000FB000E00280000 04/12/87 VSE.HARDCOPY.FILE 30 UN 023E0000023F000E00020000 04/12/87 VSE.HARDCOPY.FILE.JW 30 UN 024D0000024E000E00020000 15/08/89 VSE.HARDCOPY.FILE.SHR2 30 UN 01B5000001B6000E00020000 04/11/88 VSE.HARDCOPY.FILE.TFS 30 UN 01BA000001BB000E00020000 09/11/88 VSE.POWER.ACCOUNT.FILE 60 DA 02390000023C000E00040000 11/11/88 VSE.POWER.DATA.FILE 1740 DA 01C500000238000E00740000 18/11/88 VSE.RECORDER.FILE 45 UN 024000000242000E00030000 04/12/87