Work Flow Language (WFL) Programming Reference Manual WFL

86001047-506_Work_Flow_Language_Programming_Reference_7.0_Nov2001 86001047-506_Work_Flow_Language_Programming_Reference_7.0_Nov2001

86001047-506_Work_Flow_Language_Programming_Reference_7.0_Nov2001 86001047-506_Work_Flow_Language_Programming_Reference_7.0_Nov2001

WFL WFL

User Manual: WFL

Open the PDF directly: View PDF PDF.
Page Count: 468

DownloadWork Flow Language (WFL) Programming Reference Manual WFL
Open PDF In BrowserView PDF
Unisys e-@ction
ClearPath Enterprise
Servers
Work Flow Language (WFL)
Programming Reference Manual

ClearPath MCP Release 7.0
November 2001

Printed in USA
8600 1047–506

.

Unisys e-@ction
ClearPath Enterprise
Servers
Work Flow Language (WFL)
Programming Reference Manual

UNISYS

û 2001 Unisys Corporation.
All rights reserved.

ClearPath MCP Release 7.0
November 2001

Printed in USA
8600 1047–506

NO WARRANTIES OF ANY NATURE ARE EXTENDED BY THIS DOCUMENT. Any product or related information
described herein is only furnished pursuant and subject to the terms and conditions of a duly executed agreement to
purchase or lease equipment or to license software. The only warranties made by Unisys, if any, with respect to the
products described in this document are set forth in such agreement. Unisys cannot accept any financial or other
responsibility that may be the result of your use of the information in this document or software material, including
direct, special, or consequential damages.
You should be very careful to ensure that the use of this information and/or software material complies with the laws,
rules, and regulations of the jurisdictions with respect to which it is used.
This document is not a contract and does not create any representations or warranties by Unisys. All applicable
representations, warranties and covenants are contained only in the applicable agreement signed by the parties.
The information contained herein is subject to change without notice. Revisions may be issued to advise of such
changes and/or additions.
Notice to Government End Users: This is commercial computer software or hardware documentation developed at
private expense. Use, reproduction, or disclosure by the Government is subject to the terms of Unisys standard
commercial license for the products, and where applicable, the restricted/limited rights provisions of the contract data
rights clauses.
Correspondence regarding this publication can be e-mailed to doc@unisys.com.

Unisys, ClearPath, and e-@ction are registered trademarks of Unisys Corporation in the United States and other
countries. All other brands and products referenced in this document are acknowledged to be the trademarks or
registered trademarks of their respective holders.

Unisys e-@ction
ClearPath Enterprise
Servers

Unisys e-@ction
ClearPath
Enterprise
Servers

Work Flow Language (WFL)

Work Flow
Language (WFL)

Programming Reference
Manual

Programming
Reference
Manual

ClearPath MCP Release
7.0

ClearPath MCP
Release 7.0

8600 1047–506

8600 1047–506

Bend here, peel upwards and apply to spine.

.

Contents
Section 1.

WFL Capabilities ................................................................1–1
About This Manual ................................................................................ 1–1
Overview of WFL .................................................................................. 1–2
Task Initiation ........................................................................................ 1–3
Other Task Initiation Statements ......................................... 1–3
Task Specifications .............................................................. 1–5
Data Specifications .............................................................. 1–6
Flow of Control Statements................................................. 1–7
Processing Data ................................................................... 1–7
Subroutine Control .............................................................................. 1–10
Task Control ........................................................................................ 1–13
File Handling ........................................................................................ 1–16
File Management ................................................................................ 1–18
Communication ................................................................................... 1–20
Job Format .......................................................................................... 1–22

Section 2.

Job Initiation .....................................................................2–1
Overview ............................................................................................... 2–1
Sources for Job Initiation....................................................................... 2–2
START and WFL Commands from CANDE
Sessions .......................................................................... 2–2
START Statements from Running WFL Jobs ...................... 2–5
Operator Display Terminals (ODTs) ..................................... 2–6
Menu-Assisted Resource Control (MARC) .......................... 2–7
Distributed Systems Services.............................................. 2–7
User Programs in Other Languages .................................... 2–9
Magnetic Tapes ................................................................. 2–10
Job Continuation after a Task Fails ..................................................... 2–11
Job Restart after a Halt/Load............................................................... 2–12
ON RESTART Statement ................................................... 2–15
Dummy Files ...................................................................... 2–15

Section 3.

Job Structure.....................................................................3–1
Overview ............................................................................................... 3–1
Job Syntax ............................................................................................. 3–1
Job Structure ....................................................................... 3–1

8600 1047–506

iii

Contents

Job Contents ....................................................................... 3–2
Job Format........................................................................... 3–2
AT Hostname....................................................................... 3–3
Job Title................................................................................................. 3–4
Job Parameter List ................................................................................ 3–5
Job Disposition...................................................................................... 3–8
Job Attribute List................................................................................... 3–9
Resource-Limiting Attributes............................................. 3–10
CLASS Specification ........................................................................... 3–12
FETCH Specification ........................................................................... 3–13
STARTTIME Specification ................................................................... 3–14
Declaration List ................................................................................... 3–16
Statement List..................................................................................... 3–17
WFL Job Example ............................................................................... 3–19
Section 4.

Declarations...................................................................... 4–1
Overview............................................................................................... 4–1
Declaration Syntax ................................................................................ 4–1
Scope of Declarations.......................................................... 4–2
Variable Initialization............................................................. 4–2
Constant Identifiers............................................................................... 4–3
Boolean Variables.................................................................................. 4–4
Integer Variables ................................................................................... 4–5
Real Variables........................................................................................ 4–6
String Variables ..................................................................................... 4–7
File Variables ......................................................................................... 4–8
Task Variables ....................................................................................... 4–9
Subroutines ......................................................................................... 4–10
Subroutine Parameters ...................................................... 4–11
Global Data Specifications .................................................................. 4–13

Section 5.

Task Initiation ................................................................... 5–1
Overview............................................................................................... 5–1
Task Initiation Statements .................................................................... 5–1
Task Equation........................................................................................ 5–3
Task Attributes ...................................................................................... 5–4
Task Attribute Assignment ................................................................... 5–8
Complex Task Attribute Assignments ................................................ 5–11
ACCESSCODE Assignment............................................... 5–12
CORE Assignment............................................................. 5–13
CURRENTDIRECTORY Assignment.................................. 5–14
FAMILY Assignment ......................................................... 5–15
OPTION Assignment ......................................................... 5–17
PRINTDEFAULTS Assignment .......................................... 5–19
RESOURCE Assignment ................................................... 5–21
SUPPRESSWARNING Assignment ................................... 5–22
USERCODE Assignment ................................................... 5–23
Using Task Variables ........................................................................... 5–24
Assigning Task Attributes .................................................. 5–25

iv

8600 1047–506

Contents

Reusing Task Variables ...................................................... 5–27
Interrogating Task Attributes ............................................. 5–29
Interrogating Task Status .................................................................... 5–30
File Attribute Inquiry ............................................................................ 5–31
Interrogating Complex Task Attributes ............................................... 5–31
MYJOB and MYSELF Predeclared Task Variables .............................. 5–32
File Equations ...................................................................................... 5–33
Causing the Task to Use a Different Input or Output
File ................................................................................. 5–34
Changing the Attributes of Files Used by the Task ........... 5–35
Causing the Task to Read from a Data Specification......... 5–35
How the Task Can Override WFL File Equations............... 5–35
Resolving Repeated File Equations to the Same File ........ 5–36
Global File Assignment........................................................................ 5–37
Using Remote Files ............................................................................. 5–38
File Attribute Assignment.................................................................... 5–39
Device Kind Assignment ..................................................................... 5–40
Serial Number Assignment ................................................................. 5–41
Using File Attributes............................................................................ 5–42
Assigning File Attributes .................................................... 5–44
Interrogating File Attributes ............................................... 5–45
Nonresident Files ............................................................... 5–46
Library Equation................................................................................... 5–48
Overriding WFL Library Equations ..................................... 5–48
Resolving Repeated Library Equations to the Same
Library ............................................................................ 5–49
Database Equation .............................................................................. 5–50
Local Data Specifications .................................................................... 5–51
Section 6.

Statements ........................................................................6–1
Overview ............................................................................................... 6–1
WFL Statement Groupings.................................................................... 6–2
ABORT Statement................................................................................. 6–5
ACCESS Statement............................................................................... 6–6
ADD Statement ..................................................................................... 6–7
ALTER Statement.................................................................................. 6–8
Archive Subsystem ............................................................................. 6–17
ARCHIVE Backup Statement ............................................. 6–19
ARCHIVE Statement Options ............................................ 6–22
ARCHIVE Disk Volume....................................................... 6–23
ARCHIVE Disk Volume Attribute List................................. 6–24
ARCHIVE Tape Volume...................................................... 6–25
ARCHIVE Tape Volume Attribute List ................................ 6–26
ARCHIVE CD Volume......................................................... 6–34
ARCHIVE CD Volume Attribute List................................... 6–35
ARCHIVE Task Equation List.............................................. 6–37
ARCHIVE MERGE Statement ............................................ 6–38
ARCHIVE PURGE Statement ............................................. 6–39
ARCHIVE RELEASE Statement ......................................... 6–40
ARCHIVE RESTORE Statement......................................... 6–41

8600 1047–506

v

Contents

ARCHIVE ROLLOUT Statement ........................................ 6–43
Assignment Statements ..................................................................... 6–46
BIND Statement.................................................................................. 6–48
CASE Statement ................................................................................. 6–49
CATALOG Statement.......................................................................... 6–50
CHANGE Statement ........................................................................... 6–52
COMPILE or BIND Statement ............................................................ 6–54
Naming the Object Code File ............................................ 6–55
Choosing a Compiler ......................................................... 6–55
Binding............................................................................... 6–56
Object Code File Disposition ............................................. 6–56
Task Variables .................................................................... 6–57
Compiler Task Equation List .............................................. 6–58
File, Library, and Database Equations and Task
Attributes....................................................................... 6–59
Local Data Specifications................................................... 6–60
Compound Statement......................................................................... 6–62
COPY or ADD Statement .................................................................... 6–63
Copying Files ..................................................................... 6–65
Library Maintenance .......................................................... 6–66
COPY Options.................................................................... 6–68
COPY Request................................................................... 6–74
Copying Files from Tape or CD-ROM ................................ 6–95
COPY and ADD Statement Examples ............................. 6–105
COPY File Transfer Services............................................ 6–109
CREATE LIBMAINTDIR Statement................................................... 6–121
CRUNCH Statement ......................................................................... 6–124
DISPLAY Statement.......................................................................... 6–125
DO Statement ................................................................................... 6–126
GO Statement ................................................................................... 6–127
IF Statement ..................................................................................... 6–128
INITIALIZE Statement ....................................................................... 6–130
INSTRUCTION Statement................................................................. 6–131
LOCK Statement ............................................................................... 6–132
LOG Statement ................................................................................. 6–133
MKDIR Statement............................................................................. 6–134
MODIFY Statement .......................................................................... 6–135
MOVE Statement.............................................................................. 6–137
Null Statement .................................................................................. 6–140
ON Statement ................................................................................... 6–142
OPEN Statement............................................................................... 6–145
PASSWORD Statement .................................................................... 6–146
PB Statement.................................................................................... 6–147
PRINT Statement .............................................................................. 6–148
Printing Portions of a File................................................. 6–151
PROCESS Statement ........................................................................ 6–153
PTD Statement.................................................................................. 6–155
PURGE Statement ............................................................................ 6–156
RELEASE Statement......................................................................... 6–157
REMOVE Statement ......................................................................... 6–158
REPLACE Statement ........................................................................ 6–160
RERUN Statement ............................................................................ 6–161

vi

8600 1047–506

Contents

RESTORE Statement ........................................................................ 6–162
Library Maintenance ........................................................ 6–164
RESTORE Statement Options ......................................... 6–165
RESTORE Tape and CD-ROM Attributes......................... 6–166
RETURN Statement .......................................................................... 6–169
REWIND Statement .......................................................................... 6–170
RUN Statement ................................................................................. 6–171
SECURITY Statement........................................................................ 6–177
START Statement.............................................................................. 6–181
STOP Statement ............................................................................... 6–185
Subroutine Invocation Statement...................................................... 6–186
UNWRAP Statement......................................................................... 6–189
USER Statement ............................................................................... 6–192
VOLUME Statement ......................................................................... 6–193
Tape Volume Security ...................................................... 6–199
VOLUME ADD Statement with Tape Security
Subsystem................................................................... 6–200
WAIT Statement................................................................................ 6–204
WHILE Statement ............................................................................. 6–207
WRAP Statement .............................................................................. 6–208
Section 7.

Expressions........................................................................7–1
Overview ............................................................................................... 7–1
Boolean Expressions ............................................................................. 7–2
Boolean Primary................................................................... 7–3
Integer Expressions............................................................................... 7–9
Integer Primary .................................................................. 7–10
Real Expressions ................................................................................. 7–13
Real Primary ....................................................................... 7–14
String Expressions............................................................................... 7–17
String Primary .................................................................... 7–18
Mnemonic Primaries ........................................................................... 7–28
Constant Expressions.......................................................................... 7–29
Boolean Constant Expression ............................................ 7–30
Integer Constant Expression.............................................. 7–31
Real Constant Expression .................................................. 7–32
String Constant Expression................................................ 7–33

Section 8.

Basic Constructs................................................................8–1
Overview ............................................................................................... 8–1
Invalid and Valid Characters................................................................... 8–2
Valid Character Elements..................................................... 8–2
Identifiers............................................................................................... 8–3
Constants .............................................................................................. 8–4
Names ................................................................................................... 8–6
File Names, Titles, and Directories ....................................................... 8–8
Using String Primaries......................................................................... 8–13
Restrictions on the Use of String Primaries....................... 8–13
Passing Parameters to a Task............................................ 8–14

8600 1047–506

vii

Contents

Copying Multiple Files ....................................................... 8–15
Section 9.

WFL Control Options......................................................... 9–1
Overview............................................................................................... 9–1
ERRORLIMIT Option............................................................................. 9–2
INCLUDE Option ................................................................................... 9–3
LIST Option ........................................................................................... 9–5
NEWSEGMENT Option......................................................................... 9–6

Appendix A. Sample WFL Jobs .............................................................. A–1
Overview............................................................................................... A–1
Compiling a Program............................................................................. A–2
Initiating Other Jobs.............................................................................. A–6
Updating Files ....................................................................................... A–7
Appendix B. Reserved Words, Predefined Words, and Keywords .......... B–1
Overview............................................................................................... B–1
Reserved Words ................................................................................... B–2
Predefined Words ................................................................................. B–2
Keywords .............................................................................................. B–4
Appendix C. Understanding Railroad Diagrams .................................... C–1
Railroad Diagram Concepts................................................................... C–1
Paths.................................................................................... C–1
Constants and Variables ...................................................... C–2
Constraints........................................................................... C–3
Following the Paths of a Railroad Diagram ........................................... C–6
Railroad Diagram Examples with Sample Input.................................... C–7
Appendix D. Related Product Information............................................. D–1

Index

viii

.............................................................................................. 1

8600 1047–506

Tables
5–1.
5–2.
5–3.
5–4.

Task Attribute Groupings.................................................................................... 5–4
Expressions for Task Attribute Inquiry ............................................................. 5–29
File Attribute Types .......................................................................................... 5–42
Expressions for File Attribute Inquiry ............................................................... 5–45

C–1.

Elements of a Railroad Diagram .........................................................................C–2

8600 1047–506

ix

Tables

x

8600 1047–506

Section 1
WFL Capabilities
Work Flow Language (WFL) is used for constructing jobs that compile or run programs.
WFL includes variables, expressions, and flow-of-control statements that offer the
programmer a wide range of capabilities with regard to task control.

About This Manual
This manual is a complete language reference for WFL users, whether they are
beginning users just learning WFL, or experienced users who need to check on the
details of a particular construct.

Purpose and Scope
Although this manual sometimes mentions specific task attributes or file attributes, it
does not describe these attributes in great detail. For detailed information regarding task
attributes, refer to the Task Attributes Programming Reference Manual. For detailed
information about file attributes, refer to the File Attributes Programming Reference
Manual.
This manual also mentions some specific system commands that are entered at an
operator display terminal (ODT). For detailed information about these commands, refer to
the System Commands Operations Reference Manual.

Audience and Prerequisites
The audience for this manual consists of programmers and operators who need to write
jobs that initiate and control tasks.
The user is assumed to have had prior experience with programming in a blockstructured language (for example, ALGOL, COBOL, RPG, or some other block-structured
language). However, there is no single programming language the user needs to know to
understand this manual. Additionally, the user is assumed to be familiar with ClearPath
MCP systems, at least to the extent of knowing how to create and edit files by using
CANDE or the Editor.
If you are not familiar with ClearPath MCP systems, you should first read the MCP/AS
System Administration Guide and the MCP/AS System Operations Guide. If you are not
familiar with the concepts of process initiation and process control, you should first read
the Task Attributes Programming Reference Manual. If you prefer to learn by example,
consider reading WFL Made Simple.

8600 1047–506

1–1

Overview of WFL

How to Use This Manual
This manual is intended primarily for reference, although a new user can learn a great
deal about WFL by reading the first five sections. Section 6, “Statements,” begins with a
functional grouping of the various WFL statements, and then presents descriptions of
the statements in alphabetical order for quick reference.
Railroad diagrams are used to illustrate WFL syntax. If you are not familiar with this type
of syntax notation, you should read Appendix C, “Understanding Railroad Diagrams.”
Some WFL constructs share a common syntax. In certain instances, these constructs
share the same railroad diagram. For example:


ÚêÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÄÄÁÄ/2\ÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ The syntax for many WFL constructs is rather complex. To show an appropriate level of detail, most railroad diagrams use basic constructs that are explained elsewhere in the manual. You can quickly locate the more detailed syntax for these subordinate constructs using the index. Overview of WFL WFL is used for constructing jobs that compile or run programs. WFL is a true programming language with its own compiler that either produces an object code file used in running a job or executes a job interpretively. A WFL job is always recompiled each time it is run. WFL can initiate programs that are written in any of the languages accepted on A Series systems. It is a high-level language with flow-of-control structures and subroutines analogous to those found in ALGOL. However, WFL includes features related to task control that would be difficult or impossible to duplicate in any of the other available languages. One advantage to initiating tasks through WFL instead of through CANDE or some other means is that a WFL job is automatically restarted if it is interrupted by a halt/load. This capability is discussed under “Job Restart after a Halt/Load” in Section 2. WFL accepts jobs from a large variety of sources. With a few exceptions, identical jobs can be presented to WFL from all of the available sources. Section 2, “Job Initiation,” describes the different sources from which WFL will accept jobs. WFL supports the MultiLingual System (MLS). All error or warning messages given by the WFL compiler can be translated into another language with the Message Translation Utility. For more information, refer to the MLS Guide and the MSGTRANS Operations Guide. 1–2 8600 1047–506 Task Initiation WFL and the MCP must be the same release level to function properly. If the release levels are not the same, WFL waits on an AX condition before freezing. It is possible to proceed with a mismatched WFL by entering AX OK, but unexpected results might occur. To declare a WFLSupport library that is the same release level as the MCP, use the System Library (SL) command. To terminate the waiting WFLSupport library, enter AX DS or use the Unlock (LP-) command and the Discontinue (DS) command. The following pages outline the various capabilities of WFL and present example WFL jobs. While most of the WFL statements will be mentioned here, you should refer to Section 6, “Statements,” for a more complete description of a particular statement. Task Initiation The two basic capabilities of WFL are compiling and running programs. The two WFL statements that correspond to these capabilities are called: • COMPILE • RUN Other Task Initiation Statements The other WFL statements that initiate tasks include: • COPY and ADD for copying files • BIND for invoking the Binder • PB for running the SYSTEM/BACKUP utility • PTD for initiating peripheral testing routines • LOG for running the LOGANALYZER utility • START for initiating other WFL jobs from the current job Tasks initiated by any of these statements are executed serially; that is, the job waits for the task to complete before continuing on to the next statement. However, any task can be made to run asynchronously by preceding the task initiation statement with the word PROCESS. Asynchronous tasks run in parallel with the job. The START statement normally causes the job to be compiled synchronously and executed asynchronously. A PROCESS START causes both the compile and execution to occur asynchronously with the job. An asynchronous task can also be initiated by a subroutine invocation statement that occurs within a PROCESS statement. A subroutine invocation statement normally does not initiate a task. 8600 1047–506 1–3 Task Initiation Example The following example shows a simple form of the COMPILE and RUN statements: ?BEGIN JOB RUNPROG; COMPILE (JONES)OBJECT/ALGOL/TEST WITH ALGOL LIBRARY; COMPILER FILE CARD(TITLE=ALGOL/TEST ON MYPACK); RUN (JONES)OBJECT/ALGOL/TEST; ?END JOB. The COMPILE statement in this example specifies that the object code file titled (JONES)OBJECT/ALGOL/TEST is to be saved. (Other variations in the COMPILE statement can be used to specify whether the object code file is to be run immediately, saved and run immediately, or whether the source file is to be compiled for syntax only.) The line beginning COMPILER FILE CARD is a file equation that tells the ALGOL compiler the name of the source file to use as input. The RUN statement causes the program to execute. The file title specified in the RUN statement must be the title of the object code file (not the source file) of the program. 1–4 8600 1047–506 Task Initiation Task Specifications The following types of specifications can be included in a task initiation statement: • Task attribute assignments • Library equations • File equations • Database equations • Local data specifications Many task attributes with very diverse functions are available through WFL. Some of them can be used to access information about the task execution, such as accumulated processor and I/O time. Other functions alter the way the program is run, such as specifying the priority to be assigned to a task or the usercode a task is to run under. The task attributes available through WFL are listed under “Task Attributes” in Section 5. For a more detailed description, refer to the task attribute descriptions in the Task Attributes Reference Manual. File equations can be used to modify attributes of the files used by a program, or can cause the program to use different files than it normally would have. For example, file equations can cause the program to read input from a different source than is specified in the program, and write output to a different destination than is specified in the program. This feature of WFL eliminates the need for many time-consuming alterations and recompilations of existing programs. For more information, see “File Equations” and “Task Equation” in Section 5 for further information. Individual file attributes are described in the File Attributes Reference Manual. Examples In the following example, the task attribute PRIORITY specifies the priority to be assigned to the task: ?BEGIN JOB COMP/DATA; RUN (RAJA)OBJECT/COMP/DATA; % Run the desired program with PRIORITY=50; % a priority of 50 ?END JOB. The following example uses a file equation: ?BEGIN JOB WFLTEST; RUN (WALLY)OBJECT/ALGOL/TEST; FILE TERMIN(TITLE=WFLIN,KIND=DISK); % % % % ?END JOB. 8600 1047–506 Causes the program to read from the disk file WFLIN, instead of the file TERMIN 1–5 Task Initiation Data Specifications Data specifications supply input to a program that expects input from a card reader file during execution; that is, a file declared in the program as being of kind READER. A data specification can also be used in place of any input file the program reads by file-equating the title of the input file to the title of the data specification in the WFL job, and by declaring the type of input file to READER. Two kinds of data specifications are available: • Local data specifications • Global data specifications A global data specification can be declared at the start of a job, and can be used by more than one task. Example The following example illustrates a job that uses a global data specification: ?BEGIN JOB INTREF; DATA INPUT % Begin global data specification 7 11 ? % End global data specification RUN (WENDY)OBJECT/INT/REF; FILE TERMIN(TITLE=INPUT,KIND=READER); % Causes the program to % read from the global % data specification INPUT % instead of the file % TERMIN. ?END JOB. 1–6 8600 1047–506 Task Initiation Flow of Control Statements The WFL jobs in the examples presented thus far have been set up to execute statements in sequential order. However, WFL also enables you to execute statements conditionally or repeatedly by using flow-of-control statements. The flow-of-control statements include: • IF • DO • WHILE • CASE • GO The IF statement executes a certain statement only if the value of a particular Boolean expression is TRUE. The DO statement and the WHILE statement are both used to cause repeated execution of a statement or set of statements. Both statements evaluate a Boolean expression before each repetition is initiated, to decide whether to do it again. The DO statement differs from the WHILE statement in that it checks the Boolean expression at the end of the loop instead of at the start; the statements included in the loop are therefore guaranteed to execute at least once. The CASE statement chooses one of several possible alternative actions, depending on the value of the variable or case expression that follows the word CASE. Whenever the syntax of a flow-of-control statement calls for a statement to be included, that statement can be another flow-of-control statement. Therefore, flow-of-control statements can be nested to form complex flow-of-control structures. Processing Data The use of conditional statements implies that the job is going to be processing some data that can vary at run time. The following kinds of data can vary at run time: • WFL jobs that are stored on disk and initiated by a START statement can have parameter values passed to them. • During the course of a WFL job, the job can inspect the values of task attributes associated with tasks that were initiated in the job. Certain task attributes record task history. The WFL job can then make decisions about what to do next based on the history of the task that was initiated. • The job can also inspect the values of file attributes or test whether a file with a given title is resident, and then make decisions accordingly. • The job can include ACCEPT functions that will prompt you to supply input at run time and will cause the job to wait for your reply. 8600 1047–506 1–7 Task Initiation Examples The following WFL job illustrates a use of the IF statement: ?BEGIN JOB WFLTEST; TASK COMPOK; DISPLAY "COMPILING NOW"; COMPILE (SFL)OBJECT/SORT/PROC WITH ALGOL [COMPOK] LIBRARY; COMPILER FILE CARD(TITLE=SORT/PROC ON MYPACK); IF COMPOK IS COMPILEDOK THEN BEGIN DISPLAY "COMPILED SUCCESSFULLY"; DISPLAY "RUNNING SORT/PROC"; RUN (SFL)OBJECT/SORT/PROC; END ELSE DISPLAY "COMPILE NOT SUCCESSFUL --- WILL NOT RUN"; ?END JOB. This example first compiles a program, then inspects a task variable named COMPOK to see whether the compile was successful. If the compile was successful, the Boolean expression COMPOK IS COMPILEDOK evaluates to TRUE. In this case, the program that was compiled will be run. If the compile was not successful, then no attempt is made to run the program. The DISPLAY statements in this example display messages at the ODT (and also at the CANDE terminal where the job was initiated). The following example illustrates one use of the CASE statement: ?BEGIN JOB WFLTEST(STRING COMPTYPE); CASE COMPTYPE OF BEGIN ("SYNTAX"): COMPILE (MAINT)OBJECT/ORD WITH COBOL74 SYNTAX; COMPILER FILE CARD(TITLE=ORD,KIND=DISK); ("GO"): COMPILE (MAINT)OBJECT/ORD WITH COBOL74 GO; COMPILER FILE CARD(TITLE=ORD,KIND=DISK); ("LIBRARY"): COMPILE (MAINT)OBJECT/ORD WITH COBOL74 LIBRARY; COMPILER FILE CARD(TITLE=ORD,KIND=DISK); ("LIBRARY-GO"): COMPILE (MAINT)OBJECT/ORD WITH COBOL74 LIBRARY GO ; COMPILER FILE CARD(TITLE=ORD,KIND=DISK); ELSE: DISPLAY "INCORRECT COMPILE TYPE ENTERED"; END; ?END JOB. In this example, a WFL job has been constructed that enables a user to compile a particular file in any of four possible ways according to the string parameter specified in the START statement. The following table lists four START statements, each with a different string parameter specified and the results of each statement. 1–8 8600 1047–506 Task Initiation Statement Result START WFLTEST(“SYNTAX”) Compiles the file ORD to check for syntax errors, but does not save the object code file. START WFLTEST(“GO”) Compiles and runs the file ORD, but does not save the object code file. START WFLTEST(“LIBRARY”) Compiles the file ORD, and saves the object code file as (MAINT)OBJECT/ORD. START WFLTEST(“LIBRARY-GO”) Compiles the file ORD and runs the object code file. The object code file is saved as (MAINT)OBJECT/ORD. The following is an example of the DO statement: ?BEGIN JOB WFLTEST(INTEGER REPS); INTEGER INTREPS := 0; DO BEGIN RUN (WALLY)OBJECT/STOCK/PLAN; INTREPS := INTREPS + 1; END UNTIL INTREPS = REPS; ?END JOB. This job runs the program (WALLY)OBJECT/STOCK/PLAN the number of times specified in the parameter of the START statement that initiated this job. For instance, START WFLTEST(7) runs the program (WALLY)OBJECT/STOCK/PLAN seven times. 8600 1047–506 1–9 Subroutine Control Subroutine Control A WFL job can include any number of subroutines, and each subroutine can contain further subroutine declarations within itself. In addition, a subroutine can contain statements invoking itself, or other subroutines in the WFL job. (The rules concerning which subroutines can be invoked from a given subroutine are discussed under “Scope of Declarations” in Section 4.) WFL enables an identifier to be associated with a statement or group of statements. This can be accomplished by using the subroutine declaration. Once a subroutine has been declared, it can be invoked in the WFL job by using the identifier associated with it. The subroutine is a convenient shorthand for referring to a piece of code that the WFL job is going to invoke repeatedly. Examples The WFL subroutines can be invoked with parameters that pass values to the subroutines. Consider the following example: ?BEGIN JOB WFLCHART(REAL VALUE1, REAL VALUE2, REAL VALUE3); SUBROUTINE RUNCHART(REAL RVAL VALUE); % Beginning of subroutine BEGIN % declaration RUN (PORT)CHART/COL/NAV(RVAL); END RUNCHART; % End of subroutine % declaration % WFL job statements follow DISPLAY "RUNNING WITH FIRST VALUE SUPPLIED"; RUNCHART(VALUE1); DISPLAY "RUNNING WITH SECOND VALUE SUPPLIED"; RUNCHART(VALUE2); DISPLAY "RUNNING WITH THIRD VALUE SUPPLIED"; RUNCHART(VALUE3); ?END JOB. This job is initiated with a START statement that has three real numbers specified as parameters. The job then calls on the subroutine RUNCHART three times, each time supplying a different parameter value to the subroutine. This method saves code repetition when a lengthy subroutine is called. 1–10 8600 1047–506 Subroutine Control The following example is a subroutine that invokes itself: ?BEGIN JOB WFLINV(INTEGER VALUE1, INTEGER VALUE2); SUBROUTINE DISPLAYONE; DISPLAY "IT WORKED ALL RIGHT"; SUBROUTINE RUNINV(INTEGER IVAL1); BEGIN RUN (PARTS)OBJECT/OLD/INV(IVAL1); STATION=MYSELF(SOURCESTATION); DISPLAYONE; IVAL1 := IVAL1 + 1; IF IVAL1 LEQ VALUE2 THEN RUNINV(IVAL1); END; RUNINV(VALUE1); DISPLAYONE; ?END JOB. This job accepts two integer values as parameters. The job uses the first job parameter as a parameter in the RUN statement for the program OBJECT/OLD/INV. This program is run several times, with an increase in the value of the parameter each time, until the parameter equals the value of the second parameter that was supplied to the job. This example shows several kinds of subroutine invocations that are available. The outer block of the WFL job calls on the subroutines RUNINV and DISPLAYONE. The subroutine RUNINV also calls on the subroutine DISPLAYONE, which was previously defined. Further, the subroutine RUNINV calls on itself, so that it will continue repeating as long as the expression in the IF statement evaluates to TRUE. 8600 1047–506 1–11 Subroutine Control The following example illustrates the use of the RETURN statement as a means of exiting a subroutine early: ?BEGIN JOB WFLTEST(INTEGER VALUE1); TASK T; SUBROUTINE RUNTEST(INTEGER IVAL1); BEGIN RUN (WALLY)OBJECT/TEST(IVAL1) [T]; IF T ISNT COMPLETEDOK THEN RETURN; IVAL1 := IVAL1 + 1; IF IVAL1 LEQ 7 THEN RUNTEST(IVAL1); END; RUNTEST(VALUE1); ?END JOB. This example runs the program (WALLY)OBJECT/TEST repeatedly. However, if the task variable T indicates the program did not run successfully, the RETURN statement is invoked to cause the subroutine to be exited. The remaining statements in the subroutine will then be bypassed, and control will pass back to the parent of the subroutine (in this case, the outer block of the WFL job). 1–12 8600 1047–506 Task Control Task Control Several WFL statements are available to control the execution of a task. These statements determine • When a task is run • When a task is terminated • How a task responds to error conditions • What usercode a task runs under These statements are referred to broadly as task control statements. Task Control Statements Task control statements include the following: • ABORT • STOP • WAIT • ON • USER The ABORT and STOP statements are available for terminating a job or task prematurely. The difference between the two statements is that the ABORT statement displays messages indicating that the job or task was terminated abnormally, while the STOP statement indicates a normal termination. Generally these statements are used as part of an IF statement or CASE statement, so that the job or task is terminated only if the specified conditions are met. The WAIT statement suspends job execution until some specified condition is met. The uses of the WAIT statement include the following: • To cause the job to wait for an asynchronous task to complete, or to wait until the asynchronous task achieves a specified state • To cause the job to wait until a file becomes resident • To cause the job to wait for an OK message from the user 8600 1047–506 1–13 Task Control Examples This example illustrates a use of the ABORT statement: ?BEGIN JOB WFLTEST; TASK COMPOK; COMPILE (WALLY)OBJECT/MENU/PLAN WITH PASCAL [COMPOK] LIBRARY; COMPILER FILE CARD(TITLE=MENU/PLAN ON MUNCHPACK); IF COMPOK IS COMPILEDOK THEN RUN (WALLY)OBJECT/MENU/PLAN ELSE ABORT "UNSUCCESSFUL COMPILE"; ?END JOB. This job first attempts to compile the source file MENU/PLAN. If the compile was successful, the job will run the object code file that was the result of the compilation. If the compile was not successful, the job is terminated abnormally by the ABORT statement and the message “UNSUCCESSFUL COMPILE” is displayed. The following example illustrates a use of the WAIT statement: ?BEGIN JOB WFLTEST; TASK TEST1, TEST2; PROCESS RUN (WALLY)OBJECT/SORTIT [TEST1]; PROCESS RUN (WALLY)OBJECT/SORT2 [TEST2]; DO WAIT UNTIL TEST1 IS COMPLETED AND TEST2 IS COMPLETED; RUN (WALLY)OBJECT/COLLATE; ?END JOB. In this example, two asynchronous tasks are started by PROCESS statements. A DO-UNTIL loop follows, instructing the job to wait until both asynchronous tasks are completed before continuing. The USER statement provides another form of task control. This statement changes the usercode the WFL job is running under to the specified usercode. The tasks initiated by the WFL job will then inherit the new usercode, and its associated privileges. 1–14 8600 1047–506 Task Control The following is an example of the USER statement in a job: ?BEGIN JOB RECEIVABLE; RUN OBJECT/INTEREST; USER=SCROOGE/CALC; RUN OBJECT/PENALTIES; RUN (CRATCHIT)OBJECT/CREDIT; ?END JOB. In this example, the first RUN statement runs the program OBJECT/INTEREST under the job’s original usercode, which was determined at the time of job initiation. The USER statement then changes the job’s usercode to usercode SCROOGE, which has CALC as its password. The remaining two programs that the job initiates are then run under usercode SCROOGE, even though the object code file for the last one resides under usercode CRATCHIT. The usercode of the job can also be set by specifying the USERCODE task attribute as a job attribute, and the usercode for an individual task can be set by specifying the USERCODE for that task. 8600 1047–506 1–15 File Handling File Handling Although a WFL job cannot read from or write to files itself, it provides considerable control over the files that programs initiated through WFL can read from or write to. The main tool that provides this control is file equation, which is discussed under “Task Initiation” earlier in this section. In addition, there are several statements available in WFL that provide even more flexibility in file handling. File Handling Statements Files can be opened in WFL by using the OPEN statement. The file specified in this statement is opened with the I/O capabilities specified in the NEWFILE attribute, FILEUSE attribute, or other attributes of the file. If the NEWFILE attribute or the FILEUSE attribute is not assigned, an attempt is made to open the specified file for both input and output. Refer to the File Attributes Reference Manual for more information about file attributes. The following table lists five statements that close files in different ways. Statement Result CRUNCH Closes a file and returns the unused portion of the last row of the file to the system. Once a file is crunched, it takes up less space, but can no longer be expanded. This statement is used for disk files only. LOCK Closes the file and, except for disk or pack files, saves the unit the file resides on so that it is inaccessible to the system. PURGE Removes a file and frees the area it was occupying for reuse. RELEASE Closes and releases a file. REWIND Closes a file and rewinds it. For a magnetic tape file, this means that the tape is rewound. For a disk file, the record pointer is reset to the first record of the file. A WFL job can interrogate the attributes of a file. To do this, the file must first be declared in the job with certain minimal attributes specified. In addition, the file must be opened. 1–16 8600 1047–506 File Handling Examples The following job examines a file to determine whether it is a COBOL74 or COBOL85 file, and chooses the corresponding compiler: ?BEGIN JOB COBOLCOMP(STRING SYMBOL); FILE SYMBOLF; STRING COMPNAME; SYMBOLF (TITLE=#SYMBOL,KIND=DISK,NEWFILE=FALSE, DEPENDENTSPECS=TRUE); OPEN (SYMBOLF); IF SYMBOLF (FILEKIND) = "COBOL74SYMBOL" THEN COMPNAME := "COBOL74" ELSE COMPNAME := "COBOL85"; COMPILE OBJECT/#SYMBOL WITH #COMPNAME LIBRARY GO; COMPILER FILE CARD (TITLE=#SYMBOL,KIND=DISK); ?END JOB. The following subroutine uses the file opening and closing capabilities of WFL to create dummy files (empty files that can be used to indicate that some particular event has occurred in the job). Because subroutines cannot contain file declarations, file F is declared globally. SUBROUTINE MAKE(STRING FILENAME); BEGIN F (TITLE = #FILENAME, KIND = DISK, NEWFILE = TRUE); OPEN (F); LOCK (F); END MAKE; Refer to “Job Restart after a Halt/Load” in Section 2 for an example of why you might want to use a job to create dummy files. 8600 1047–506 1–17 File Management File Management WFL provides several statements for managing files. These include the following: • COPY statement • ADD statement • CHANGE statement • REMOVE statement • SECURITY statement File Management Statements The COPY statement copies files on disk or tape. The new copy of a file can be created with a different usercode or file name, and the file can be copied to other disk or tape units using library maintenance or to other hosts using distributed systems services (DSS). The ADD statement also copies files. However, the ADD statement will not copy a file if a file with the same title already resides at the destination. Also, the destination specified must be a disk. The ADD statement is useful for adding a directory of files to a disk where some of the files are already resident and are to be preserved. The CHANGE statement changes the names of files on a disk. The REMOVE statement removes files from disk. The SECURITY statement changes the security specifications of files on a disk. The various security settings affect whether the file can be read or changed by tasks running under other usercodes. 1–18 8600 1047–506 File Management Examples The following example copies a file from a disk to a tape, specifying a different usercode and file name for the new copy: COPY (ID)FILEA AS (JONES)NEWF FROM ORDS (DISK) TO SAVEA (TAPE); The following example copies a directory of files to a disk on another host: ADD (ID)F/= FROM ORDS (DISK) TO SAVEA (DISK, HOSTNAME=MLM); The following example changes the name of a directory of files residing on a pack named STORPACK: CHANGE COMPJOBS/= ON STORPACK TO QCOMPS/=; The following example removes files from two different packs: REMOVE MAXERRS FROM PARTS, BADERRS FROM STORPACK; The following example changes the security of a file to PUBLIC (thus enabling any user free access to the file): SECURITY NOVA/DATA/NINER PUBLIC; 8600 1047–506 1–19 Communication Communication WFL includes several statements that help inform you about what a job is doing. These statements include the following: • DISPLAY statement • ACCEPT function • INSTRUCTION statement • FETCH specification In addition, these statements enable input to modify the activity of a job. Communication Statements The DISPLAY statement can be used to display a message at a specific point during job execution. The DISPLAY message appears at the ODT, in the job log, and at the CANDE or MARC station that initiated the job (if it was initiated through CANDE or MARC). The ACCEPT function will ask you to supply input to the job while it is running. The ACCEPT function will display the specified message and will wait for you to return a value by way of the AX (Accept) system command. The INSTRUCTION statement stores information about the job in a form that you can display at any time during job execution by using the IB (Instruction Block) system command. The FETCH specification stores a message that you can display by using a PF (Print Fetch) system command, and suspends initiation of the job until the message has been displayed. The FETCH specification is intended to be used for informing you about what resources are required by the job. 1–20 8600 1047–506 Communication Examples The following example includes DISPLAY statements: ?BEGIN JOB WFLTEST(STRING DAY); DISPLAY "CALL WILLIS AT EX. 3574 IF RUN-TIME ERRORS OCCUR"; RUN (ODDCOM)OBJECT/COPY/FACTORS(DAY); DISPLAY "GET INPUT FROM ARCH. TAPE 143 IF FILE REQUIRED"; RUN (ODDCOM)OBJECT/FT/VERIFY(DAY); ?END JOB. This example runs two programs that are each preceded by a display message informing the user what to do if certain conditions occur. The following example shows a use of the ACCEPT function: ?BEGIN JOB; STRING FN, PK; FN := ACCEPT("ENTER NAME OF FILE DESIRED"); PK := ACCEPT("ENTER NAME OF PACK DESIRED"); RUN (OPR)DAILY/UPDATE; FILE IN (TITLE = #FN ON #PK); ?END JOB. In this example, the values submitted by you are used in a file equation for a RUN statement. The job could have been written to receive the same values from you by way of a start parameter list. However, in that case you would have to know in advance what parameters to supply. The ACCEPT function, on the other hand, displays a message informing you what type of information to enter next. 8600 1047–506 1–21 Job Format Job Format The following features are available to increase the readability of a WFL code: • Free formatting • Comments • Subroutine ending identifiers Free formatting enables WFL constructs to be entered in any column of a line and continue over any number of lines. You can use varying amounts of indentation to indicate the nesting of constructs. However, the invalid character must appear in the first column. A percent sign (%) can appear in any column of a line, and will cause the WFL compiler to ignore the remainder of the line, which can be used for comments. The identifier that identifies a subroutine can be repeated after the END statement for that subroutine. In cases where subroutines are nested, this feature helps eliminate confusion about which subroutine is being ended. Example The following example illustrates the use of a nested subroutine ending identifier: SUBROUTINE SUBOUTER; BEGIN SUBROUTINE SUBNESTED; BEGIN . . END SUBNESTED; . . END SUBOUTER; 1–22 % Beginning of outer subroutine % Beginning of nested subroutine % End of nested subroutine % End of outer subroutine 8600 1047–506 Section 2 Job Initiation Overview A program written in WFL is referred to as a job. During execution, a job normally executes as a task with its own object code file. However, certain statements can be executed interpretively. This means that no object code file is produced by the WFL compiler; the statement is executed directly by the WFL compiler. The statements ALTER, CHANGE, PRINT, REMOVE, RERUN, SECURITY, and START are executed interpretively in the following situations: • When one of the above statements is the only statement appearing after the CANDE WFL command • When one of the above statements (except the PRINT statement) is entered individually at an ODT, rather than as part of a job • When a job originating from a user program by way of an array consists only of one of the above statements These situations are described in detail in “START and WFL Commands from CANDE Sessions,” “Operator Display Terminals (ODTs),” and “User Programs in Other Languages” later in this section. A WFL job can initiate other tasks. Examples of tasks are compilations and executions of user programs. The job task controls the execution of the tasks it initiates. 8600 1047–506 2–1 Sources for Job Initiation Sources for Job Initiation The following pages describe how to initiate WFL jobs from each of the possible sources, and discuss limitations specific to each source. START and WFL Commands from CANDE Sessions To run WFL jobs from a CANDE session, use the WFL command or the START command. WFL Command The WFL command causes CANDE to pass any following text to the WFL compiler. This enables a user to type WFL, followed by a WFL statement or even a job, and transmit the entire job at once. The WFL job can extend over any number of lines. The phrases BEGIN JOB and END JOB can be omitted from a job entered after the WFL command in CANDE. Refer to Section 3, “Job Structure,” for the formal syntax of a job. Note: Jobs submitted through the CANDE WFL statement cannot include a CLASS, FETCH, or STARTTIME specification. In addition, the job cannot contain data specifications, or the INCLUDE control option. Any WFL control options must be followed by a semicolon (;) to separate them from the rest of the job. When WFL jobs are initiated from a CANDE session in this way, any messages generated by the job are displayed at the terminal where the job originated, as well as at the ODT. The terminal also queues CANDE commands entered while the WFL job was running and executes them after the job is completed. CANDE control commands the exception to this rule; they are executed immediately. The statements CHANGE, PRINT, REMOVE, RERUN, SECURITY, and START are executed interpretively if one of them is the only statement following the CANDE WFL command. This means that no object code file is produced by the WFL compiler in these cases; the statement is executed directly by the WFL compiler. 2–2 8600 1047–506 Sources for Job Initiation Storing Jobs in Disk Files WFL jobs can also be saved in files on disk. To do this, you should first use the CANDE MAKE command to create a file of type JOB. You can then enter the complete job into the file, either in CANDE, the Editor, or some other text entry utility. For further details, refer to the CANDE Operations Reference Manual and the Editor Operations Guide. The question mark (?) preceding the BEGIN JOB and END JOB constructs in column 1 can cause strange results in some text entry utilities. In these cases, it might be necessary to enter the question mark in column 2, and shift the line to the left later. More than one job can be stored in a single disk file. The jobs will be compiled and executed in the order that they appear in the file. Note: If a file contains more than one job, none of the jobs can include a job parameter list. START Command A WFL job saved in a file can be initiated using the CANDE START command, followed by the name of the file, and any parameters being passed to the WFL job. Refer to the CANDE Operations Reference Manual for the detailed syntax of this command. The START command passes the contents of the file directly to the WFL compiler for processing. The contents of the file must be a complete WFL job, including the BEGIN JOB and END JOB constructs. The job can include data specifications, unlike WFL jobs submitted through the CANDE WFL command. Any messages from the job are displayed at the originating terminal as well as at the ODT. However, the terminal remains free to accept any CANDE commands that are entered and responds immediately, even if they are not control commands. 8600 1047–506 2–3 Sources for Job Initiation Other CANDE Commands The following CANDE commands directly invoke WFL statements that have the same names: • ADD • COPY • PRINT • START Therefore, it is not necessary to precede these commands with WFL. Several other CANDE commands have the same names as WFL statements, but do not invoke WFL, and in some cases have different syntax or functions than their WFL counterparts. These statements include: • ACCESS • PASSWORD • BIND • REMOVE • CHANGE • RUN • COMPILE • SECURITY • DO • STOP • LOG To invoke these WFL statements in CANDE, you must precede the statements with the CANDE WFL command, or include them in a job file and initiate the job with a START command. Note: WFL jobs originated from CANDE sessions inherit the usercode of the CANDE session unless a USERCODE job attribute specification is included in the job. The job inherits the family specification associated with the usercode it is running under unless a FAMILY job attribute specification is included in the job. 2–4 8600 1047–506 Sources for Job Initiation START Statements from Running WFL Jobs Running WFL jobs can initiate other WFL jobs through the WFL START statement, which is described in detail in Section 6, “Statements.” The WFL START statement has the same effect as the CANDE START statement. Only jobs stored on disk can be initiated by the START statement. Such a job can include any of the WFL constructs defined in this manual. Once the job has been started, it has no further connection with its parent job. Discontinuing the parent job does not affect the job that was started from it, and termination of the started job also does not affect the parent job. Any messages generated by the started job are directed to the same source as messages from the parent job. For example, if the parent job is initiated from CANDE, then messages from both the parent job and the job started by the parent job would appear at the originating terminal. Note: The started job inherits the usercode and family assigned to the parent job unless the started job includes USERCODE or FAMILY job attribute specifications. 8600 1047–506 2–5 Sources for Job Initiation Operator Display Terminals (ODTs) Initiate WFL jobs from an ODT using one of the following methods: • Use the START statement to initiate a job stored in a disk file. • Type the complete job at the ODT and transmit the job. When a complete job is entered at the ODT, it should begin with the BEGIN JOB construct. It is not necessary to append the END JOB construct to the job, since WFL will add this automatically. Note: A complete job entered at an ODT cannot include data specifications. Any WFL control option must be followed by a semicolon (;) to separate it from the rest of the job. A number of WFL statements are recognized by the CONTROLLER and are passed to WFL automatically, even if they are not preceded by a BEGIN JOB heading. These statements include the following: • ABORT • BIND • PASSWORD • SECURITY • ACCESS • CATALOG • PROCESS • START • ADD • CHANGE • PTD • USER • ALTER • COMPILE • REMOVE • VOLUME • ARCHIVE • COPY • RERUN • BEGIN • DISPLAY • RUN A WFL job initiated at an ODT runs without a usercode unless the job that includes a USERCODE job attribute specification is run from an ODT with TERM USER specified, or the HU system command has an associated usercode. The HU system command designates a usercode for certain distributed systems services Host Services requests if they come from an ODT that has no terminal usercode assigned to it. The TERM USER system command controls the format of all displays on the ODT, and associates the usercode with certain requests initiated at the ODT where the command is entered. See the System Commands Reference Manual for more details on these commands. Note: The job, and any tasks initiated by the job, will therefore be unable to access files residing under usercodes unless their security is PUBLIC. In addition, if the job is running without a usercode, and no FAMILY specification is included in the job, the FAMILY will default to DISK = DISK ONLY. The statements ALTER, CHANGE, REMOVE, RERUN, SECURITY, and START are executed interpretively if entered individually at an ODT (rather than as part of a job). When this occurs, no object code file is produced by the WFL compiler; the statements are executed directly by the WFL compiler and do not enter a job queue. Thus, no queue attributes, such as FAMILY, are inherited by the job or the statement. These particular statements are treated as privileged if entered in this way, and can be used to affect files residing under usercodes. 2–6 8600 1047–506 Sources for Job Initiation Menu-Assisted Resource Control (MARC) WFL jobs can be initiated through MARC from the action line of a screen that includes “COmnd” as one of the screen action hints displayed on line 3, or from the command input screen, which provides an entry field 15 lines long. Any WFL statements or a complete WFL job can be initiated from MARC by entering the word WFL before the statements. The BEGIN JOB and END JOB constructs can be omitted. However, jobs submitted in this way cannot include data specifications or a STARTTIME specification. Note: If WFL control options are included, they must be followed by a semicolon (;). If any job parameters are included, the job can be compiled for syntax only. Three WFL statements are recognized by MARC and passed to WFL even if they are not preceded by WFL. Each statement has the same syntax when it is used in a WFL job. These statements include: • START • COPY • ADD Jobs initiated through the START statement can include all of the WFL constructs defined in this manual. Initiating a WFL job with any of the above statements causes MARC to enter tasking mode and display the task status screen. Refer to the MARC Operations Guide for information about how to display and control task progress from tasking mode. Distributed Systems Services WFL jobs can be constructed to take advantage of distributed systems services between systems in several ways. For more information about how to use distributed systems services, refer to the Distributed Systems Services Operations Guide and the TCP/IP Distributed Systems Services Operations Guide. If a terminal is attached to CANDE, then the names of available BNA hosts can be displayed using the CANDE ?HN command. The terminal can be transferred to another of the listed BNA hosts by entering the command: CONNECT TO When the connection is complete, you can log on under a usercode recognized by the remote host. While the terminal is connected to the remote host, any commands you enter are directed to the remote host and executed there. The CANDE WFL and START commands can thus be used to run jobs on the remote host. The connection is terminated when you end the session with a BYE command. 8600 1047–506 2–7 Sources for Job Initiation Even if a terminal is not connected to a remote host, a job initiated at that terminal can be directed to run at a remote host by beginning the job with the AT . Note: A job including AT cannot contain a job parameter list or any BINARY data specifications. Also, the construct before the END JOB construct is required. Any messages generated by the job are still routed back to the original terminal, but are preceded by the name of the system the job is running on. Examples The following is an example of a job with an AT specification. This job is stored in a file on the user’s own system. However, when the job is initiated, it will run on the system named LA15D. The job will also look on LA15D for the object code files of the tasks that it runs. ?AT LA15D BEGIN JOB RUNNIT; RUN (WALLY)OBJECT/MAKEIT ON SHIPPK; RUN (ODCON)SNOBOL/REPL ON ORDSPK; ?END JOB. Tasks can be made to run on different systems than the parent job by specifying the HOSTNAME attribute after the task initiation statement. The object code files for the tasks are also searched for on the system specified by the HOSTNAME attribute. Messages generated by the tasks are still routed back to the original terminal, but are preceded by the name of the system the job is running on. ?BEGIN JOB RUNNIT; RUN (WALLY)OBJECT/MAKEIT ON SHIPPK; HOSTNAME=SF15B; RUN (ODCON)SNOBOL/REPL ON ORDSPK; HOSTNAME=SD9A; ?END JOB. This job runs on the user’s own system. However, it initiates tasks that run on systems SF15B and SD9A, respectively. The job looks for the object code files for those tasks on the systems that the tasks are run on. Files can be copied between HMP NX or A Series hosts, BNA hosts, and hosts connected to a TCP/IP network by using the WFL COPY statement, which can reference sources or destinations on remote hosts. For example: ?BEGIN JOB COPYDATA; COPY *SYSTEM/CRUNCHER AS (WALLY)CRUNCHER/TUESDAY FROM ODDPACK (KIND=DISK,HOSTNAME=SF15B) TO MODPACK (KIND=DISK,HOSTNAME=LA15D); ?END JOB. 2–8 8600 1047–506 Sources for Job Initiation This example copies a file from the system named SF15B to the system named LA15D. The two hosts are BNA hosts and the file is transferred using Host Services file transfer which is part of the distributed systems services. User Programs in Other Languages WFL jobs can be initiated from user programs written in any of several different programming languages through the use of certain statements. The following table lists the different programming languages and the statements of each that initiate WFL jobs from user programs. Language Language Statement Reference Document ALGOL ZIP statement ALGOL Programming Reference Manual, Volume 1: Basic Implementation COBOL74 CALL SYSTEM WFL statement COBOL ANSI-74 Programming Reference Manual, Volume 1: Basic Implementation COBOL85 CALL SYSTEM WFL statement COBOL ANSI-85 Programming Reference Manual, Volume 1: Basic Implementation DCALGOL CONTROLCARD function DCALGOL Programming Reference Manual RPG ZIP operation code Report Program Generator (RPG) Programming Reference Manual, Volume 1: Basic Implementation Input submitted from such programs can be in array form or in file form. Note: If the job submitted is from a data array contained in the program, the job cannot contain any data specifications, and any WFL control options included in the job must be followed by a semicolon (;). If the job is stored in a file external to the program, it can include any WFL construct defined in this manual. However, if the job contains a job parameter list, it can only be initiated by a START statement, which can be submitted in array form. Jobs initiated from user programs inherit the usercode and associated privileges of the initiating program. Jobs originating from a user program by way of an array, and that consist of a single CHANGE, PRINT, REMOVE, RERUN, SECURITY, or START statement, are executed interpretively. That is, an object code file is not generated, and the statement is executed directly by the WFL compiler. These statements are not considered privileged unless the user program is privileged. 8600 1047–506 2–9 Sources for Job Initiation Magnetic Tapes The preferred method for initiating jobs stored in files on tape is to first copy the files onto disk and then start them. The files can be copied using the WFL COPY statement, either from CANDE or as part of another WFL job. Once the files are on disk, they are started using the CANDE START command, a START statement in another WFL job, or the MARC START command. If a site is attempting to conserve disk space, the job file can be removed from disk after each use and recopied from the tape whenever it is needed. The job can even include a REMOVE statement that would remove its own job file from disk after each use. 2–10 8600 1047–506 Job Continuation after a Task Fails Job Continuation after a Task Fails A WFL job can be written to take special action in the event that a task terminates abnormally. The following features are available: • The ON TASKFAULT statement can be used to direct the job to execute a particular statement or set of statements whenever a task of the job fails. Refer to the explanation of the ON statement in Section 6, “Statements,” for details. • The STATUS, HISTORYCAUSE, and HISTORYTYPE attributes of a task can be interrogated after a task terminates. An IF statement or CASE statement can be used to cause different actions to be taken according to the values of these attributes. Refer to “Interrogating Task Status” in Section 5 for details on STATUS. HISTORYCAUSE and HISTORYTYPE are both mnemonic task attributes. Refer to “Interrogating Complex Task Attributes” in Section 5. Task attributes are also discussed in the Task Attributes Reference Manual. • The task state expression can be used to determine whether a task terminated normally. An IF statement or CASE statement can be used to cause different actions to be taken according to the value of this expression. Refer to “Boolean Expressions” in Section 7 for details. The abnormal termination of a task does not affect the job; the job continues to execute and proceeds to the statement following the one that initiated the task. 8600 1047–506 2–11 Job Restart after a Halt/Load Job Restart after a Halt/Load WFL jobs interrupted by a halt/load are automatically restarted after the halt/load. Execution of the job begins where it left off before the halt/load; if a task was in progress, the task is restarted. Keep the following considerations in mind when writing a WFL job to ensure that it will restart properly after a halt/load. As a WFL job is executing, information about the job is saved off so the job can be restarted in the event of a halt/load. The process of saving off the job information is called job rollout. When a job rollout is done, the values of integer, real, Boolean, and string variables are saved so that these values can be restored to the correct values when the job is restarted. If a system halt/load occurs while a job is running, the job will be restarted by the MCP at the most recent successful job rollout. In general, a job rollout is attempted before each task is run. This way, only the task that was executing when the halt/load occurred will have to be restarted. However, there are some restrictions on when a successful job rollout can be accomplished. If any asynchronous tasks are active when a job rollout is attempted, the job rollout cannot be completed and will be skipped. If a job rollout has to be skipped, the job can still be restarted after a halt/load; however, the previous successful job rollout will be retained as the current restart point. In the following example, if a halt/load occurs when OBJECT/PROG2 is running, the job will be restarted at “job rollout point #2”. Thus, the job will be restarted just prior to the initiation of OBJECT/PROG2. ?BEGIN JOB RESTART/EXAMPLE/1; % job rollout point #1 RUN OBJECT/PROG1; % job rollout point #2 RUN OBJECT/PROG2; % Executing OBJECT/PROG2 when halt/load occurs ?END JOB. For the asynchronous task case, consider the following example: ?BEGIN JOB RESTART/EXAMPLE/2; % job rollout point #1 PROCESS RUN OBJECT/PROG1; % Note: OBJECT/PROG1 is PROCESSED % job rollout point #2 RUN OBJECT/PROG2; % Both OBJECT/PROG1 and OBJECT/PROG2 % are active when halt/load occurs ?END JOB. In this example, the job rollout that is attempted at “job rollout point #2” will not be successful (because the task OBJECT/PROG1 is active). “Job rollout point #1” will still be the current restart point. If a halt/load occurs during the execution of OBJECT/PROG2, the job will be restarted at “job rollout point #1”. 2–12 8600 1047–506 Job Restart after a Halt/Load A job rollout is attempted before each of the following statements: • ALTER • ARCHIVE • Asynchronous subroutine invocation • CHANGE • COMPILE • COPY • LOG • MODIFY • OPEN • PRINT • PTD • REMOVE • RUN • START • WAIT If one of the following statements contains an ACCEPT function, a job rollout is attempted before the statement: • CASE • Assignment statement • DO • File attribute statement • IF • Task attribute statement • WHILE A job rollout is also attempted after the WAIT statement. The WAIT statement is the only statement where a job rollout is executed both before and after the statement. This occurs because the WAIT statement is often used to synchronize processed tasks, and attempting the job rollout both before and after the WAIT statement helps to ensure that a successful job rollout is completed. 8600 1047–506 2–13 Job Restart after a Halt/Load When waiting for a long task to be completed before initiating a halt/load, it is important to consider that the job rollout is executed by the WFL job after the task is completed. Waiting for the task to go to “End of Task” is not sufficient to ensure that the job rollout is completed. For example: ?BEGIN JOB RESTART/EXAMPLE/3; % job rollout point #1 PROCESS RUN OBJECT/PROG1; % job rollout point #2 (not successful because of active task) WAIT(OK); % job rollout point #3 . . . ?END JOB. If the intention is to wait until OBJECT/PROG1 is completed before halt loading (so PROG1 will not have to be restarted), it is important to allow “job rollout point #3” to be executed. The job would restart at “job rollout point #1”, which obviously would not be the desired result. The following example illustrates how to avoid the potential problem by enabling the job rollout to be successfully completed before the possible halt/load: ?BEGIN JOB RESTART/EXAMPLE/4; TASK T1,T2; PROCESS RUN OBJECT/PROG1 [T1] PROCESS RUN OBJECT/PROG2 [T2] WAIT (T1 IS COMPLETED); WAIT (T2 IS COMPLETED) %%% A successful job rollout will be executed here %%% WAIT ("Okay to halt/load now", 60); . . . ?END JOB. However, the contents of most file or task variables are not saved across a halt/load. They will have the following values: • Most of the attributes of file variables are returned to what they were immediately after the original file declaration. • Most of the attributes of task variables are set to their system default values. This has the same effect as reinitializing the task variable with the INITIALIZE statement. Any task attribute assignments that occurred prior to the halt/load are not restored, including any that were included in the task variable declaration. The values of constant identifiers that appear in the job parameter list are saved across a halt/load. 2–14 8600 1047–506 Job Restart after a Halt/Load ON RESTART Statement The ON RESTART form of the ON statement can be used to specify actions to be taken if job execution is interrupted by a halt/load. Any statement or group of statements can be specified in the ON RESTART statement. The following kinds of actions might be desirable: • File and task variables can be reassigned the correct values. • Job execution can be restarted at a particular point in the job, by using a GO statement. If a halt/load occurs in the middle of a job, job execution restarts at the most recent successful job rollout. If during the halt/load process the JOBDESC file is removed, jobs with STARTTIME specifications are also removed. Therefore, no jobs are restarted. For details, refer to the ??RJ (Remove JOBDESC File) primitive command in the System Commands Reference Manual. The ON RESTART statement is processed after a halt/load only if a successful job rollout occurred after the ON RESTART statement. Some jobs include statements that interrogate a task variable to find out whether a task completed successfully or abnormally. However, the value of the task variable is not retained across a halt/load. An alternative method for storing information about whether a task completed successfully is to declare a Boolean variable in the job expressly for this purpose, and assign a value of TRUE or FALSE to the variable after the task completes. The value of the Boolean variable is saved across a halt/load, so it can always be interrogated later. A useful technique for keeping track of exactly how far job execution had progressed before a halt/load occurred is to declare an integer variable and increment the value of that variable at several stages during the job. The ON RESTART statement can include statements that inspect the value of this integer variable and cause different actions to occur according to the value stored. Dummy Files Another method for storing information about job execution is to have the job create dummy files at specified points during the job execution, or whenever certain conditions are met. The job can then use the file residence inquiry to establish whether such files have been created, and make decisions based on their presence or absence. Refer to “File Handling” in Section 1 for an example of a subroutine that can be used to create dummy files. The file residence inquiry is described under “Interrogating File Attributes” in Section 5. For more detailed information about restarting WFL jobs after a halt/load, see the Task Management Programming Guide. 8600 1047–506 2–15 Job Restart after a Halt/Load 2–16 8600 1047–506 Section 3 Job Structure Overview This section describes the overall structure of a WFL job, and discusses the job attributes and specifications that can be included at the beginning of a job. Job Syntax The following syntax represents a complete WFL job: ÄÄÂÄÄÄÄÄÂÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄ BEGIN ÄÄ JOB ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄë ÀÄÄÙ ÀÄ AT ÄÄÄÙ ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄ ; ÄÄÄÄÄë ÀÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÀÄÄÙ ÀÄÄÙ ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄë ÀÄÄÙ ÀÄÄÙ ÄÄÂÄÄÄÄÄÂÄ END ÄÄ JOB ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÀÄÄÙ Job Structure A job is composed of three parts: • Job heading • Job body • End of job Job Heading The job header initializes the job by means of the following elements: • construct (optional) • Job parameter list (optional) • Hostname constant (optional) • Job disposition (optional) • BEGIN JOB expression (required) • Job attribute list (optional) • Job title (optional) 8600 1047–506 3–1 Job Syntax Job Body The job body contains the operational part of the job and consists of • Declaration list (optional) • Statement list End of Job The end of job terminates the operation of the job and contains the following elements: • construct (optional) • END JOB expression Job Contents The contents of WFL jobs are extremely flexible. The only two elements that appear in all WFL jobs are the BEGIN JOB and END JOB constructs. The WFL compiler adds these statements around single WFL statements that are entered through CANDE or at the ODT. The other elements are optional. Job Format The formatting of WFL jobs is also flexible. WFL constructs can begin in any column of a line, can continue over one line onto the next, and can include varying amounts of space between words. Also, multiple statements can appear on a line, as long as they are separated by semicolons (;). The only restriction is that the construct must appear in the first column. The construct before the BEGIN JOB construct is optional and has no effect on the job. The construct before the END JOB construct is optional normally, but is required if an AT hostname constant specification is included in the job. Refer to “Invalid and Valid Characters” in Section 8 for information about the construct. Comments can be entered into the job by preceding them with a percent sign (%). Any input following the percent character on a line is ignored by the WFL compiler. However, input that precedes the percent sign on a line is treated as part of the job. WFL control options can be included anywhere in the job, as long as they appear on a line with a dollar sign ($) in the first or second column. These options are discussed in Section 9, “WFL Control Options.” Note: A WFL job must be entered in all uppercase letters. Only comments or strings can contain lowercase letters. 3–2 8600 1047–506 Job Syntax AT Hostname The AT hostname constant specification causes a job initiated on one system to be compiled and run on another system. The WFL compiler at the receiving host system compiles the job; the sending host does not analyze the contents of the job, except for the END JOB construct. If the END JOB construct is missing, an “UNEXPECTED END OF FILE” error message is issued. The hostname specified must be an available host in a BNA or Open Systems Interconnection (OSI) network. If the host specified is not available, the job compilation is aborted and the error message “UNKNOWN HOST SPECIFIED” is displayed. The CANDE ?HN command or the HOSTNAME (Host Name) system command can be used before the job is started to determine what BNA hosts are available. The CANDE ?AT local host NW OSIGATEWAY command or the NW OSIGATEWAY system command can be used to determine what OSI hosts are available. A null character within a quoted string causes the transferred job to be incorrectly terminated, which causes erroneous syntax errors at the receiving host. This incorrect termination occurs because the sending host does not analyze the contents of the job; the sending host transfers data to the receiving host only until a null character is reached. Using the START FOR SYNTAX statement is not allowed for jobs that include an AT hostname constant specification. Doing so generates the following syntax error: START FOR SYNTAX IS ONLY VALID FOR LOCAL HOST Example The following job will run at the system named SF6B: ?AT SF6B BEGIN JOB ADDIT; . . . ?END JOB. 8600 1047–506 3–3 Job Title Job Title ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ Explanation The job title specifies the name of the job. The job name appears in the • BOJ and EOJ messages displayed by the job • Active entry display at the ODT • Job summary generated by a job • System log The job title must be included if there is a job parameter list or job disposition in the job; otherwise, the job title is optional. Though the syntax for a job title is the same as that for a file title constant, the job title does not have to be the name of any file. There is no connection between the job title of a job and the title of the file it is stored in. For the syntax of a file title constant, see “File Names, Titles, and Directories” in Section 8. The job name can also be assigned by including the NAME attribute in the job attribute list for the job. Note that the NAME attribute overrides the job name in the . If neither a job title nor a NAME job attribute is included in the job, the WFL compiler assigns a name to the job. Examples The following are examples of job headings that include valid job titles: ?BEGIN ?BEGIN ?BEGIN ?BEGIN 3–4 JOB JOB JOB JOB RUNPROG; DATA/SURVEYOR; (WALLY)MENU/PLAN; (LAO)OLD/DOC ON FORMSPK; 8600 1047–506 Job Parameter List Job Parameter List ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ , ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÄÄ ( ÄÁÄÂÄÄÂÄÁÄ ) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÃÄÄ´ ÃÄÄÄÄÄ´ ÀÄÄÄÙ ÄÄ BOOLEAN ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄë ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄ´ ÀÄ OPTIONAL ÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÀÄ DEFAULT ÄÄ = ÄÄÄÙ ÄÄ INTEGER ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄë ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄ´ ÀÄ OPTIONAL ÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÀÄ DEFAULT ÄÄ = ÄÄÄÙ ÄÄ REAL ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄë ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ´ ÀÄ OPTIONAL ÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÀÄ DEFAULT ÄÄ = ÄÄÄÙ ÄÄ STRING ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄë ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ´ ÀÄ OPTIONAL ÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÀÄ DEFAULT ÄÄ = ÄÄÄÙ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ 8600 1047–506 3–5 Job Parameter List Explanation A job parameter list declares constant identifiers and assigns them the values supplied in the START statement that initiated the job. The constant identifiers retain their original values throughout the job. They can be one of the following types: • BOOLEAN • INTEGER • REAL • STRING These constant identifiers can be used in a WFL job in most of the places a constant or an expression of the appropriate type is permitted. (For example, a Boolean constant identifier can be used wherever a Boolean constant, Boolean constant expression, or Boolean expression is permitted.) The keyword OPTIONAL indicates that an actual parameter does not need to be passed for that job parameter. If an actual parameter is not passed, the default values are assigned as follows: Type Default Value Boolean FALSE Integer 0 Real 0 String "" (two double quotation marks) Default values can also be specified with the DEFAULT clause following the keyword OPTIONAL. The specified default value is ignored if an actual parameter is provided. A job parameter list can only be used in WFL jobs that are stored on disk and initiated through a CANDE, MARC, or WFL START statement. If a job initiated from another source includes a job parameter list, then it must be compiled for syntax only (see the description of the SYNTAX job disposition later in this section). A job that includes an AT hostname constant specification cannot have a job parameter list, unless all the job parameters are optional. When more than one job is stored in a disk file, none of the jobs can contain job parameter lists. 3–6 8600 1047–506 Job Parameter List Example Consider the statement START (WALLY)RUNPROG(23.8, 7), which initiates the following job: ?BEGIN JOB RUNPROG (REAL VAL1, REAL VAL2); REAL INVAL; INVAL := VAL2 * VAL2; RUN OBJECT/WALLY/COUNTER(VAL1); RUN OBJECT/WALLY/COUNTER(INVAL); ?END JOB. This job runs the program OBJECT/WALLY/COUNTER twice, first with a parameter value of 23.8, and then with a parameter value of 49 (because INVAL was assigned the square of the VAL2 parameter). 8600 1047–506 3–7 Job Disposition Job Disposition ÄÄÂÄÄÄÄÄÄÄÂÄ SYNTAX ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÀÄ FOR ÄÙ Explanation The SYNTAX job disposition compiles a job for syntax checking only. When the job is initiated, the WFL compiler simply compiles it and displays a list of any syntax errors in the job. This job disposition is beneficial when you only need to debug a job. Example The following is an example of a job heading that includes a SYNTAX job disposition: ?BEGIN JOB GEO/ANLYS FOR SYNTAX; 3–8 8600 1047–506 Job Attribute List Job Attribute List ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÄÄÁÄÂÄÄÂÄ ; ÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÃÄÄÄÄÄÄÄÄ´ ÃÄÄÄÄÄÄÄÄ´ ÀÄÄÄÄÙ Explanation The job attribute list assigns task attributes and job specifications to the job. The CLASS specification, FETCH specification, and STARTTIME specification can only be applied to a job and are described under their own headings later in this section. The syntax for task attribute assignment is described in Section 5, “Task Initiation,” later in this manual. The types and the meanings of the task attributes recognized by the WFL compiler are described in the Task Attributes Reference Manual. Attributes not assigned to values in the job attribute list are assigned values by the system on the following basis: • Certain attributes inherit values associated with the usercode the job is originated from, such as the CLASS, CHARGECODE, FAMILY, CONVENTION, PRIORITY, and USERCODE attributes. These values are stored in USERDATA locator nodes in the USERDATAFILE. For information about the USERDATAFILE, refer to the Security Administration Guide. • Other attributes can inherit values associated with the class (or queue) of the job. A class can have default values and/or maximum values specified for the PRIORITY, MAXPROCTIME, MAXIOTIME, or ELAPSEDLIMIT attributes. A job is discontinued if the job attribute list specifies greater resource limits than those associated with the class of the job. • Attributes assume their default values if they are not included in the job attribute list and do not receive values from the usercode or class of the job. The attributes that limit resource usage default to their maximum possible values. Task attributes can also be assigned to specific tasks initiated by a job. Refer to the Section 5, “Task Initiation,” for a description of how to assign task attributes to specific tasks. Task attributes associated with a job can be changed or interrogated later in the job by using the MYJOB predeclared task variable. Note: A string primary cannot be used in job-related task attribute assignments unless you use the MYJOB or MYSELF predeclared task variable syntax. Refer to “MYJOB and MYSELF Predeclared Task Variables” in Section 5 for details. 8600 1047–506 3–9 Job Attribute List Resource-Limiting Attributes Resource-limiting attributes affect the total resources available to a job and all its tasks when such attributes are included in the job attribute list. Resource-limiting attributes include the following: • ELAPSEDLIMIT • MAXIOTIME • MAXLINES • MAXPROCTIME • MAXWAIT • PRINTLIMIT • PUNCHLIMIT While these attributes can also be set for specific tasks, the accumulated resource usage of the job and all its tasks cannot exceed the values set for these attributes for the job. Some of the job attribute values are inherited by the tasks initiated by a job. The inheritance status of each attribute is listed in the Task Attributes Reference Manual. The HOSTNAME task attribute has no effect when it is used in a job attribute list, but an AT hostname constant specification can be used instead. Refer to “AT Hostname” earlier in this section for details. If a particular task attribute is assigned values more than once in a job attribute list, the last assignment overrides the previous ones. The job attribute list is terminated by the appearance of any construct that is not a job attribute assignment. USER is accepted as a synonym for the USERCODE task attribute when it is entered as part of a job attribute list. If the USER statement is the first statement of a job, it is interpreted as part of the job attribute list rather than as an executable statement. The specified USERCODE is validated during the compilation as a new usercode logging on for the duration of the job execution. Note: Changing the usercode of the job causes the job to run under the new usercode with job attributes specified in the USERDATAFILE. If the usercode of the job is changed, job messages will stop appearing at the originating terminal even though the job continues to execute normally. File equations cannot be included in the job attribute list. A statement beginning with FILE is interpreted as a file declaration and terminates the job attribute list. 3–10 8600 1047–506 Job Attribute List Example The following example job includes a number of common job attribute assignments: ?BEGIN JOB COMPJOB; CLASS = 3; USERCODE = JOHN/JUAN; CHARGECODE = SHIPPING; MAXPROCTIME = 60; PRIORITY = 80; RUN (WALLY)POSTAGE/SUMMARY ON SHIPPK; ?END JOB. 8600 1047–506 3–11 CLASS Specification CLASS Specification ÄÄÂÄ CLASS ÄÂÄ = ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÀÄ QUEUE ÄÙ Explanation The CLASS specification assigns the number of the queue desired for the job. (QUEUE is a synonym of CLASS.) For more information on managing WFL jobs in queues, refer to the System Administration Guide. Examples The following job extracts include CLASS specifications: ?BEGIN JOB COMP; CLASS = 5; ?BEGIN JOB CLASSVAL(INTEGER CL); CLASS = CL; 3–12 8600 1047–506 FETCH Specification FETCH Specification ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄ , ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÄÄ FETCH ÄÄ = ÄÁÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ Explanation The FETCH specification provides operators with information about the job. One or more strings can be included in the FETCH specification. Initiation of a job is suspended if it includes a FETCH specification; the job appears in the waiting entries list at the ODT with a “REQUIRES FETCH” message. The FETCH messages can be displayed using the PF (Print Fetch) system command. The job can be reactivated using the CANDE OK command or the OK system command. If the system option 19 (NOFETCH) is set, the FETCH attribute does not suspend job initiation. However, it is still possible to use the PF system command to display the fetch message associated with a job. System options are set or displayed using the OP (Options) system command. Example ?BEGIN JOB UPDATE; FETCH = "THIS JOB NEEDS THREE TAPE DRIVES"; RUN NIGHTLY/UPDATE; ?END JOB. 8600 1047–506 3–13 STARTTIME Specification STARTTIME Specification ÄÄ STARTTIME ÄÄ = ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÄÄÂÄ
ÄÄ / ÄÂÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ÀÄÄ´ ³ ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ÃÄÁÄ/5*\ÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ÀÄÁÄ/7*\ÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÄÄÁÄ /2\ ÄÄ ÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÄÄÁÄ /2\ ÄÄ ÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÄÄÁÄ /4*\ ÄÄ ÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ Explanation The STARTTIME specification delays job initiation until the specified start time. The time construct specifies the time of day on a 24-hour clock. The time and time interval constructs are of the form HH: MM, where HH specifies the hour (or number of hours) and MM specifies the minute (or number of minutes). HH must be less than 24, and MM must be less than 60. The minute values must be 2-digit numbers. If a time interval is specified, that time interval is added to the current time. The day, hour, and month values can either be a 1-digit or a 2-digit number. 3–14 8600 1047–506 STARTTIME Specification The date construct can be input either in the Gregorian format: mm/dd/yy or mm/dd/yyyy, or the Julian format: yyddd or yyyyddd. If a 5-digit is used as the STARTTIME value, the first two digits signify the year and the last three digits signify the day of the year. If a 7-digit is used, the first four digits signify the year (including the century) and the last three digits signify the day of the year. For example, if you input either 94293 or 1994293, they will both equal day 293 of 1994. If a day interval is specified, that number of days is added to the current date. If the time is specified without a date or day interval, the current date is used. The FS (Force Schedule) system command can be used to cause job initiation to proceed immediately, without waiting for the specified start time. For a description of the FS command, refer to the System Commands Reference Manual. Examples The following job begins execution after 10:00 p.m. on March 20, 1990: ?BEGIN JOB EXAMPLE1; STARTTIME = 22:00 ON 03/20/90; . . . ?END JOB. The following job begins execution a minimum of 1 hour and 30 minutes after entering the system: ?BEGIN JOB EXAMPLE2; STARTTIME = +1:30; . . . ?END JOB. The following job is executed on host BLUE and begins execution after 11:00 a.m. according to the system clock on host BLUE: ?AT BLUE BEGIN JOB; STARTTIME = 11:00; . . . ?END JOB. 8600 1047–506 3–15 Declaration List Declaration List ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÄÄÁÄÄÄ ; ÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ Explanation Declarations define constants, variables, subroutines, and global data specifications. Declarations of variables can also include initial value assignments. The following types of variables are available in WFL: BOOLEAN, INTEGER, REAL, STRING, FILE, and TASK. For details about the declarations available in WFL, refer to Section 4, “Declarations.” All declarations for the job must precede all statements in the job, and the declarations in a subroutine must precede all the statements in that subroutine. More than one declaration can appear on a line, as long as each declaration is followed by a semicolon (;). Example The following job segment illustrates the use of declarations: CONSTANT DEBUG = FALSE; BOOLEAN TFVAL, SUBTVALU; FILE FILE1(TITLE=(ODCOM)FIXIT ON PACK); INTEGER INTVAL := 43; REAL RLVAL := 19.67, RLVAL2 := 16.8; STRING STRNGVL := "Test Run"; TASK DOUBAT (PRIORITY=75,INFILE(TITLE=(WALLY)DATA/SAVER)); DATA INPUT/PREP 43 69 128 ? % End of data SUBROUTINE PROVIT; BEGIN RUN (RAJA)DATA/PREP(TFVAL,INTVAL,STRNGVL,RLVAL); FILE INPUT (TITLE=INPUT/PREP,KIND=READER); END PROVIT; 3–16 8600 1047–506 Statement List Statement List ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÄÄÁÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ÚêÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ÀÄÁÄ