The names ORVYL and WYLBUR are often used interchangeably, but:
ORVYL is a timesharing monitor that supports a file system, command language, program execution and debugging, and provides supervisor services.
WYLBUR is a text editor, word processor, job submission and retrieval, and e-mail program designed to work in conjunction with ORVYL or with IBM's OS/360, SVS, and MVS operating systems. and
MILTEN is terminal control software used by both ORVYL and WYLBUR for start/stop terminals.
WYLBUR is not a full standalone operating system in the mold of Dartmouth Time Sharing System or Unix. Instead it runs on top of an IBM batch operating system. It takes the form of an editor with a Remote Job Entry system and thus has much the same relationship to the IBM operating systems as Emacs does to Unix. For these reasons WYLBUR is often thought of as a text editor rather than a time-sharing system. However, whereas Unix does not need Emacs to provide text editing services, IBM's operating systems originally needed WYLBUR. Later innovations such as IBM's Time Sharing Option made WYLBUR less relevant for IBM users and gradually replaced it. This article will use the full upper case spelling for commands and keywords. All references to characters and string assume an EBCDIC code page.
Use
ORVYL and WYLBUR were used at the Stanford Linear Accelerator Center, the European Organization for Nuclear Research, the U.S. National Institutes of Health, and many other sites. Retired from most sites in the late 1990s owing to concerns about Y2K issues, they remained in use at NIH until December 2009. ORVYL and WYLBUR are still available as open source from Stanford. There are also proprietary versions such as SuperWYlbur. ORVYL and WYLBUR were much admired as shown by this excerpt from a 2004 article titled "Computing at CERN: the mainframe era":
Advantages and disadvantages
ORVYL and WYLBUR first became available in 1967–68, before TSS/360, TSO, or any other official time-sharing solution from IBM. This was roughly the same time that third-party time-sharing systems such as MTS became available and the under the radar development effort of CP-67 at IBM's own Cambridge Scientific Center took place. WYLBUR had the additional advantage that it could be used in conjunction with IBM's mainstream operating system, OS/360. WYLBUR is a single-address-space system, unlike TSO. This conserved memory in the days when memory was precious. So even when TSO was available, organizations seeking to minimize memory use would often keep some or even a majority of their users on WYLBUR rather than letting them use the TSO interactive environment. WYLBUR provides compressed Partitioned Data Sets to save disk space. In MVS source code is typically stored as a sequence of card images. If a line contained only one or just a few characters, 80 characters were still used to store that line. Even when data, e.g., source code, are stored as variable blocked, space could be wasted on strings of embedded blanks. WYLBUR implements stream-oriented storage of text in PDSs, so that a one character line might only take 16 characters rather than 80 to store. WYLBUR, or an external program run via JCL was used to convert files to and from the WYLBUR EDIT format. Although TSO allows a user to do more than a locked-down WYLBUR system did, it is possible to write WYLBUR Exec scripts that execute batch jobs to perform functions that ordinarily would have required a TSO account, filling a batch job skeleton out with parameters, submitting the batch job, retrieving the output and displaying it on the screen. WYLBUR has some security advantages over TSO, and some disadvantages. Advantages include:
Being able to write rules to restrict user access to datasets other than those owned by them and stored under their prefix. This is analogous to a user's home directory on UNIX, and looks something like WYL.AV99.HCO, where AV99 is roughly analogous to the "group" and HCO the "user" within the group.
Being fairer about resource use. WYLBUR doesn't implement commands such as TSO's alloc which can intentionally or unintentionally prevent others' access to data files for an extended period of time or use tremendous amounts of memory or CPU time. In this way, it minimizes the impact of any single user on all other users.
Commands to set certain status parameters or "spy" on the commands being executed by other users were restricted to administrative users and could not be executed by regular users.
Disadvantages related to security included:
WYLBUR is a single-address-space system. That means that if a user can figure out how to access raw bytes in the address space, they can potentially access information they do not own. For example, there once existed a program written by two college students in the WYLBUR Exec scripting language which could dig the password of the most recently logged on user out of WYLBUR's memory.
Because the WYLBUR process runs under the system account assigned to WYLBUR, one is completely dependent on its enforcement of dataset access protections according to the rules set up in WYLBUR. Enforcement of the access rules could be completely disabled by an administrative user, for system maintenance purposes, who might not remember to re-enable them.
WYLBUR implements disk quotas, with an interesting twist: any system user could give away all or part of their quota to other users. This functionality could be combined with typical course-related student accounts that went away at the end of every semester, and computer-savvy student staff who had non-expiring accounts with low disk quotas, in a manner not always anticipated by university staff.
In systems running the ACF2 security package, a user with accounts in both TSO and WYLBUR that are tied to the same account name could reset the contents of their WYLBUR account's security record interactively from within TSO. This could be used to turn a regular WYLBUR user into an administrative WYLBUR user, increase its disk quota, etc.
At least through the 1960s, the WYLBUR security rules were not enforced for batch jobs running on the same system. So, utilities such as IEHLIST and IEBGENER could be used to discover, read, and modify files belonging to other WYLBUR users unless you password protected those files, which was operationally awkward.
Data Management
Wylbur had a special edit format for Wylbur data sets, which are compressed and have a line number and revision flag for each line. In addition Wylbur supports standard FB and VB datasets. A Wylbur user normally specifies a default volume, which may be the special word CATLG. requesting a search of the catalogue for an existing dataset and requesting that a new dataset be cataloged. Wylbur has the ability to convert line numbers between edit and IBM data sets, either as scaled integers or with an explicit decimal point.
Editing
Wylbur provides a line editor that works with temporary data sets, similar to buffers in other editors. At any point in time one of the temporary data sets is designated as default. Wylbur maintains a current line pointer for each temporary data set. The user may specify an explicit working data set on a command; if he omits it, then the default temporary data set is used as the working data set. The unit of operation is a set of lines and individual lines are identified with a line number in the range 0.0 to 99999.999; leading zeros in the integer part and trailing zeros in the fractional part may be omitted. The user can specify a line number in any of the following ways
CURRENT: the current line for the working data set
LAST: last line in the working data set
END: a target for copies, following the last line in the working data set
relative: line+ordinal or line -ordinal.
macro variable containing a line
Wylbur libraries have a nonstandard format, however it allows the user to export to native OS files with integer sequence numbers and to import native OS files with integer sequence and rescale the line number by a factor of 1000. A range can be specified as a combination of
An explicit range, e.g.,
A pattern, e.g.,
A pattern with a column range, e.g.,
An ordinal, e.g.,
An ordinal relative to a match, e.g.,
A sequence of lines following a match, e.g.,
A Boolean operation, e.g.,
A specification in parentheses prefixed by SET, e.g.,
A pattern is similar to a regular expression, but the syntax is closer to that of SNOBOL than to that of Unix or Perl, there is no backtracking and only the NIH Wylbur has capture of subpatterns. A pattern may be:
'string'
"string"
pattern pattern
patern*digits
pattern*digits/digits
ABOVE 'string'
pattern AND pattern
ANY
BACKSPACE
BELOW 'string'
BLANK
BLANKS
BOL
BOS
BULLET
DASH
DIGIT
DIGITS
ECB
Equal, comma, blank
ECBS
Equals, commas, blanks
EMPTY
EOL
EOS
HEX hexdigits
LBRACKET
LETTER
LOWER
NOT pattern
pattern OR pattern
PARAGRAPH
PUNCTUATION
RBRACKET
SECTION
SPACE
SPACES
SOME 'string'
pattern THRU pattern
UNPRINTABLE
UPLOW 'string'
UPPER
Sample commands CHANGE 73/80 TO X10+10 IN EVERY 3RD LINE OF 'ABC' 1/3 in 1.5-2/3.7+2 COPY 'BAL' 10/15 TO EMD CHANGE 73/80 TO IN EVERY 3RD LINE START 2 OF 'BAL' 10/15 CHANGE TO SUBSTRING 2/4
The specification of base+increment means that the replacement text on the first line is base and is incremented on subsequent lines, so that X10+10 replaces the matched text on the first line with X10, on the second line with X20 and on the third line with X30. The specification of SUBSTRING 2/4 means columns 2-4 of the matched string; note that this is less flexible than captures.
Enhanced versions
Various organizations developed enhanced versions of Wylbur. These included
National Institutes of Health
Online Business Systems which was acquired by ACS.
SuperWylbur has several enhancements over the original Wylbur. The most important are
Supporting 3270, 3767 and NTO terminals via VTAM; as with other proprietary Wylbur versions, SuperWylbur does not use MILTEN for VTAM terminals.
An enhanced macro facility.
Supporting user-written full-screen panels
SuperWylbur macro Facility
The macro processor adds commands, constants, functions and expressions to Wylbur. Even when the command syntax does not include parameters defined to be expressions, the user can use the forms % and %% to force evaluation. If the expression is a function with no argument or a variable then the parentheses may be omitted, e.g., %.TIME instead of %. A doubled % requests that the valued be quoted.
SuperWylbur constants
SuperWylbur has two types of constants:
Numeric constants
* digits'exponent]
* #hexdigits
string constants
* 'characters'
* "characters"'''
SuperWylbur operators
SuperWylbur operators whose names contain only special characters need not be separated by spaces. Operators whose names contain a period and letters must be separated by spaces. SuperWylbur has the following types of operators:
The name of a macro function begins with a period. If there are arguments, a colon separates them from the name. A semicolon separates successive arguments. SuperWylbur provides the following types of macro functions: arithmetic functions
.ABS
.ACOS
.ASIN
.ATAN
.CEILING
.COS
.COSH
.COTAN
.DEG
.E
.ERF
.ERFC
.EXP
.FLOOR
.FRACTION
.GAMMA
.LGAMMA
.LOG
.LOG10
.PI
.RAD
.ROUND
.SIN
.SINH
.SQRT
.TAN
.TANH
.TRUNCATE
accounting functions:
.CHARGE
.CONNTIME
.CPUTIME
.MEMACT
.MEMCPU
.MEMORY
.MEMTIME
.PAGES
.PAGESECS
.PAGING
.TERMIO
date and time conversion: s parameters default to current date or time
.DATE
.DATE4
.DAYS
.DAYS
.FULLDATE
.JDATE
.JDATE4
.TIME
.TIME100
.TIME24
.TIMEMIC
environmental queries; most of these return values from SET commands:
.ACCOUNT
.ALARM
.AUTOLOG
.BACK
.BATCH
.BIN
.CASE
.CONFIRM
.CONT
.CPU
.DSFORMAT
.EDIT
.EXTDS
.FSASIZE
.LENGTH
.LNDP
.LOGONID
.MAILDSN
.MAILVOL
.NOTIFY
.PORT
.PREFIX
.PRIV
.PROJECT
.PROMEM
.PUBPREFIX
.PUBVOL
.RECDSN
.RECVOL
.ROOM
.RSASIZE
.SCRSIZE
.SSASIZE
.SWCOUNT
.SWSYSPRE
.SYSMDSN
.SYSMVOL
.SYSNAME
.T3270
.TABS
.TALK
.TERMINAL
.TERSE
.TIMEOUT
.USER
.VERSION
.VOLUME
.WIDTH
full screen functions:
.CURSORPOSN
.CURSORVAR
.EDIT
.EDITLINE
.ENTRYKEY
.SCRNUPDT
.VARUPDATE
JES functions:
.FETCHLIN
.LASTJOB
macro functions:
.ARG
.CARG
.CMDCOUNT
.CMDLIMIT
.CMDMAX
.DSEXIST
.DSNAME
.INITIAL
.LASTJOB
.LATTN
.LERR
.MRETURN
.NATIVE
.XLATTN
.XLERR
string functions:
.BYTE
.CHAR
.COLUMNS
.DASH
.EXTEND
.FINDEX
.HEX
.HEXSTR
.INDEX
.LOWER
.PAD
.QUOTE
.REVERSE
.ROMAN
.STRHEX
.STRING
.STRLEN
.SUBSTRING
.TRANSLATE
.TRIM
.UPPER
.VERIFY
working file functions; s arguments default to current default working data set
.CURRENT
.END
.FIRST
.LAST
.LENGTH
.LINE
.LINENO
.MACRO
.MAXTEMPS
.NUMTEMPS
.SIZE
.TEMPORARY
.TEMPSLEFT
.TEMPUPD
.TEXT
Complete list of macro functions:
.ABS:n
Absolute value
.ACCOUNT
Account number from logon id
.ACOS:x
Arc cosine x
.ALARM
1 if beep on next terminal write
.ARG
Arguments passed to macro
.ASIN:x
Arc sine x
.ATAN:x
Arc tangent x
.AUTOLOG
Value of SET AUTOLOG; used for recovery from previous session
.BACK
SET option: BACK or NOBACK
.BATCH:s
Value of SET BATCH option s
.BINValue from SET ROOM
.BYTE:Convert byte i of s to integer
.CARG
Arguments passed to a user defined command defined with SET COMMAND
.CASE
Value from SET CASE: UPPER or UPLOW
.CEILING:n
Truncate up
.CHAR:i
Convert i to a single EBCDIC character
.CHARGE
Current session charge in dollars and cents
.CMCOUNT
Macro commands with no terminal I/O
.CMDCOUNT
Macro commands with no terminal I/O
.CMDLIMIT
Value from SET CMDLIMIT; maximum macro commend without terminal I/O
.CMDMAX
Maximum allowed in SET CMDLIMIT
.CMLIMIT
Value from SET CMDLIMIT; maximum macro commend without terminal I/O
.COLUMNS:s;i1
Substring of s from column i1 to column i2
.CONFIRM
1 if SET CONFIRM
.CONNTIMEConnect tinme in seconds to 2 decimal places
.CONTContinuation character
.COS:xCosine x
.COSH:
xHyperbolic cosine x
.COTAN:x
Cotangent x
.CPU
CPU id from SMF
.CPUTIME
CPU time in seconds to 2 decimal places
.CURRENT
Current line number of working data set s; -1 if it does not exist, -2 if it is empty
.CURPOSN
Cursor position at last interrupt in form row+col/1000; -1 if not 3270
.CURSORVAR
Variable name for field containing cursor at last interrupt