JAM Configuration and
Utilities Guide
 
                                    Contents
 
 
 
1  Summary of Configuration Utilities  . . . . . . . . . . . . . . . . . . . . 1
 
 
2  Features and Options Common Among Utilities
. . . . . . . . . . . . . . . . 1
2.1  Input and Output Files  . . . . . . . . . . . . . . . . . . . . . .
. . . 2
2.2  File Names and Extensions . . . . . . . . .
. . . . . . . . . . . . . . . 2
2.3  Configuring File Extensions and Rules . . .
. . . . . . . . . . . . . . . 3
2.4  Ordering of Options and Other Arguments . .
. . . . . . . . . . . . . . . 4
2.5  Notation 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
 
 
3  bin2c . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 4
 
 
4  bin2hex . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 5
 
 
5  dd2asc 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.1  Creating an ASCII File from a Data
Dictionary . . . . . . . . . . . . . . 7
5.2  ASCII File Formatting Rules . . . . . . . .
. . . . . . . . . . . . . . . 8
5.3  Field Attribute Keywords  . . . . . . . . . . . . . . . . . . . . . .
. . 9
5.3.1  Display Attributes  . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.3.2  Character Edits . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 9
5.3.3  Field Edits . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 9
5.3.4  Field Attachments . . . . . . . . . . . . .
. . . . . . . . . . . . .  10
5.3.5  Miscellaneous Edits . . . . . . . . . . . .
. . . . . . . . . . . . .  10
5.3.6  Size 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  10
5.3.7  Data Type . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .  11
5.3.8  Scope . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .  11
 
 
6  dd2r4 . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .  12
 
 
7  dd2struct . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .  13
 
 
8  ddmerge . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .  15
 
 
9  f2struct 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  17
 
 
10  f2dd . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .  19
 
 
11  f2r4 . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .  21
 
 
12  formlib 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  23
 
 
13  jamcheck . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .  26
 
 
14  jammap . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .  28
 
15  Key translation file . . . . . . . . . . . .
. . . . . . . . . . . . . .  29
15.1  Key Translation File Format  . . . . . . . . . . . . . . . . . . . .
.  30
15.2  Key Mnemonics and Logical Values . . . . . .
. . . . . . . . . . . . .  31
15.3  ASCII Character Mnemonics  . . . . . . . . . . . . . . . . . . . . .
.  31
 
 
16  key2bin 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  32
 
 
17  lstdd 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  34
 
 
18  lstform 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  35
 
 
19  Message file . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .  38
19.1  Modifying and Adding Messages  . . . . . . . . . . . . . . . . . . . .  39
19.2  Embedding Attributes and Key Names in
Messages . . . . . . . . . . . .  40
 
 
20  modkey . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .  41
20.1  Introduction . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .  42
20.1.1  Key Translation  . . . . . . . . . . . . . . . . . . . . . . . . . .  42
20.2  Executing the Utility  . . . . . . . . . . . . . . . . . . . . . .
. .  42
20.3  Control Keys and Data Keys . . . . . . . . .
. . . . . . . . . . . . .  43
20.4  Welcome Screen . . . . . . . . . . . . . . .
. . . . . . . . . . . . .  44
20.5  Main Menu 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  44
20.6  Exiting the Utility  . . . . . . . . . . . . . . . . . . . . . .
. . .  45
20.7  Help Screen 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .  45
20.8  Defining Cursor Control and Editing Keys . .
. . . . . . . . . . . . .  46
20.8.1  Assigning a Key to a Function  . . . . . . . . . . . . . . . . . . .  46
20.8.2  Assigning a Sequence of Keys to a Function .
. . . . . . . . . . . .  47
20.9  Defining Function Keys . . . . . . . . . . .
. . . . . . . . . . . . .  48
20.10  Defining Shifted Function Keys  . . . . . . . . . . . . . . . . . . .  48
20.11  Defining Application Function Keys  . . . . . . . . . . . . . . . . .  49
20.12  Defining Miscellaneous Keys . . . . . . . .
. . . . . . . . . . . . .  49
20.12.1  Entering the Logical Value  . . . . . . . . . . . . . . . . . . . .  51
20.12.2  Logical Value Display and Entry Modes . . .
. . . . . . . . . . . .  51
20.12.3  Returning to the Main Menu  . . . . . . . . . . . . . . . . . . . .  52
20.13  Test Keyboard Translation File  . . . . . . . . . . . . . . . . . . .  52
 
 
21  msg2bin 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  53
 
 
22  Setup file . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .  54
22.1  The Two Setup Files  . . . . . . . . . . . . . . . . . . . . . .
. . .  55
22.2  Input File Line Format . . . . . . . . . . .
. . . . . . . . . . . . .  55
22.3  Setup Variables  . . . . . . . . . . . . . . . . . . . . . . . . . . .  56
22.3.1  Configuration File Setups  . . . . . . . . . . . . . . . . . . . .
.  56
22.3.2  Setups for Library Routines  . . . . . . . . . . . . . . . . . . . .  56
22.3.3  Setups for Default File Extensions . . . . .
. . . . . . . . . . . .  58
 
 
23  term2vid . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .  59
 
 
24  txt2form . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .  60
 
 
25  var2bin 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  61
 
 
26  vid2bin 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  62
27  Video file . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .  64
27.1  Introduction to Video Configuration  . . . . . . . . . . . . . . . . .  65
27.1.1  How to Use this Manual . . . . . . . . . . .
. . . . . . . . . . . .  65
27.1.2  Why Video Files Exist  . . . . . . . . . . . . . . . . . . . . . .
.  65
27.1.3  Text File Format . . . . . . . . . . . . . .
. . . . . . . . . . . .  66
27.1.4  Minimal Set of Capabilities  . . . . . . . . . . . . . . . . . . . .  66
27.1.5  A Sample Video File  . . . . . . . . . . . . . . . . . . . . . .
. .  67
27.1.6  An MS-DOS Video File . . . . . . . . . . . .
. . . . . . . . . . . .  67
27.2  Video File Format  . . . . . . . . . . . . . . . . . . . . . . . . . .  68
27.2.1  General Information  . . . . . . . . . . . . . . . . . . . . . .
. .  68
27.2.2  Keyword Summary  . . . . . . . . . . . . . . . . . . . . . . . . . .  69
27.3  Parameterized Character Sequences  . . . . . . . . . . . . . . . . . .  70
27.3.1  Summary of Percent Commands  . . . . . . . . . . . . . . . . . . . .  71
27.3.2  Automatic Parameter Sequencing . . . . . . .
. . . . . . . . . . . .  72
27.3.3  Stack Manipulation and Arithmetic Commands .
. . . . . . . . . . . .  72
27.3.4  Parameter Sequencing Commands  . . . . . . . . . . . . . . . . . . .  73
27.3.5  Output Commands  . . . . . . . . . . . . . . . . . . . . . . . . . .  73
27.3.6  Parameter Changing Commands  . . . . . . . . . . . . . . . . . . . .  73
27.3.7  Control Flow Commands  . . . . . . . . . . . . . . . . . . . . . .
.  74
27.3.8  The List Command . . . . . . . . . . . . . .
. . . . . . . . . . . .  75
27.3.9  Padding 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  75
27.4  Constructing a Video File, Entry by
Entry  . . . . . . . . . . . . . .  76
27.4.1  Basic Capabilities . . . . . . . . . . . . .
. . . . . . . . . . . .  76
27.4.2  Screen Erasure . . . . . . . . . . . . . . .
. . . . . . . . . . . .  77
27.4.3  Cursor Position  . . . . . . . . . . . . . . . . . . . . . . . . . .  78
27.4.4  Cursor Appearance  . . . . . . . . . . . . . . . . . . . . . . . . .  79
27.4.5  Display Attributes . . . . . . . . . . . . .
. . . . . . . . . . . .  79
27.4.5.1  Attribute Types  . . . . . . . . . . . . . . . . . . . . . . . . .  80
27.4.5.2  Specifying Latch Attributes  . . . . . . . . . . . . . . . . . . .  81
27.4.5.3  Specifying Area Attributes . . . . . . . . .
. . . . . . . . . . .  83
27.4.5.4  Color 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  84
27.4.6  Message Line . . . . . . . . . . . . . . . .
. . . . . . . . . . . .  85
27.4.7  Function Key Labels  . . . . . . . . . . . . . . . . . . . . . .
. .  86
27.4.8  Graphics and Foreign Character Support . . .
. . . . . . . . . . . .  86
27.4.9  Graphics Characters  . . . . . . . . . . . . . . . . . . . . . .
. .  87
27.4.10  Borders . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .  88
27.4.11  Shifting Field Indicators and Bell  . . . . . . . . . . . . . . . .  89
27.4.12  jxform Status Text  . . . . . . . . . . . . . . . . . . . . . . . .  90
27.4.13  Cursor Position Display . . . . . . . . . .
. . . . . . . . . . . .  90
 
Appendix
A  Error Messages . . . . . . . . . . .
. . . . . . . . . . . . . . .92
 
 
28  Run-time Messages  . . . . . . . . . . . . . . . . . . . . . . . . . . .  92
 
 
29  Screen and Data Dictionary Editor Messages .
. . . . . . . . . . . . . .  98
 
 
30  Utility Messages . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 104
 
 
 
1
Summary of Configuration Utilities
 
This
manual describes a number of utility programs that fall under the rubric of
configuring
JAM itself or applications that use it. One group is for creating
and
modifying files that tell JAM how to run on particular computers and
terminals;
another group of programs enables you to list, reformat, and
otherwise
manipulate screens and data dictionaries.
 
                             Hardware
Configuration
 
   modkey         A specialized full-screen editor for inspecting, creating,
                  and modifying key translation
files.
   Key file       Not actually a utility; this section describes how to
                  format key translation files
by hand.
   key2bin        Converts key translation files to binary format.
   Video file     Not actually a utility; this section describes how to
                  create video configuration
files for terminals and
                  displays.
   vid2bin        Converts video files to binary format.
   term2vid       On UNIX and related systems, creates a primitive video file
                  from a terminfo or termcap
entry.
 
                             Software
Configuration
 
   Message file   Not a utility; this section describes how to prepare files
                  of messages for use with the
msg2bin utility and the JAM
                  library.
   msg2bin        Converts message text files to binary format.
   Setup file     Not actually a utility; this section describes the setup or
                  environment variables
supported by JAM, and tells how to
                  prepare setup files.
   var2bin        Converts setup variable files to binary format.
   f2r4           Converts Release 3 screen files to Release 4
format.  dd2r4
                  Converts Release 3 data
dictionaries to Release 4 format.
   bin2c
                  Converts binary files to and
from C source code, so that
                  they may be made
memory-resident.
   bin2hex        Converts binary files to and from an ASCII format for
                  exchange with other
computers.
   formlib        Collects screen files in a single library file, to simplify
                  the management of large
numbers of screens.
   lstform        Creates a listing telling everything about a screen.  lstdd
                  Creates a listing telling everything about a data
                  dictionary.
   txt2form       Creates a read-only screen from a text file, for quick
                  construction of help screens
and such.
 
                                Data Organization
 
   f2struct       Creates a data structure from a screen file in the
                  programming language of your
choice.
   dd2struct      Creates a data structure from records in a data dictionary
                  file, in the programming
language of your choice.
   f2dd           Creates a data dictionary structure from a screen file.
   jammap         Analyzes the links between screens in a directory and
                  creates a report.
   dd2asc         Converts data dictionaries to and from a text format, so
                  that they may be
hand-edited.
   ddmerge        Combines binary data dictionaries.
   jamcheck       Brings screen fields into conformity with their data
                  dictionary definitions, and
reports discrepancies.
 
2
Features and Options Common Among Utilities
 
The
following section describes command-line options and file-handling
procedures
shared by most or all of the JAM configuration utilities. When a
utility
deviates from this standard, as a few do, the section describing that
utility
will make it clear.
 
Command-line
options are identified by a leading hyphen. You can always obtain a
usage
summary from any JAM utility by invoking it with the -h option, for
instance
 
     formlib -h
 
The
utility in question will print a brief description of its command line
parameters,
including the input files and all command options. Utilities that
can
process multiple input files will also support a -v option. It causes them
to
print the name of each input file as it is processed.
 
2.1  Input and Output Files
 
With a
few exceptions, utilities accept multiple input files. Some then combine
information
from the inputs to create a listing; others perform some
transformation
on each input individually. No utility will ever overwrite an
input
file with an identically named output file; if your command calls for such
an
action, an error message will be the only result. Most utilities will also
refuse
to overwrite an existing output file; you may force the overwrite with
the -f
option.
 
Utilities
that create a listing, such as lstform, support a -o option, which
directs
the output to a named file. For example:
 
     lstform -omylist *.frm
 
lists
all the screens in the current directory, and places the listing in a file
named
mylist. A special form of this option, -o-, sends the program's output to
the
standard output file rather than to a disk file.
 
Utilities
that generate one output file for each input will, by default, give
output
files the same name as the corresponding input, but with a different
extension.
Each utility has a different default extension (see the next section
for a
table); in addition, each one supports a -e option that enables you to
specify
the output file extension. For example:
 
     form2r4 -enew mytop.mnu myscreen.win
 
converts
the Release 3 screens mytop.mnu and myscreen.win to Release 4 format,
and
puts the new screens in mytop.new and myscreen.new. The form -e- makes the
output
file extension null.
 
Certain
utilities that normally generate multiple output files also support the
-o
option; it causes them to place all the output in the file named in the
option.
For instance,
 
     f2struct -oscreenrecs.h screen1.jam
screen2.jam
 
generates
C data structures for screen1 and screen2, and places them both in
screenrecs.h.
Without the -o option, it would have created two output files,
screen1.h
and screen2.h.
 
By
default, if an input filename contains a path component, a utility will strip
it off
in generating the output filename; this usually means that output files
will be
placed in your default directory. You may supply a -p option to have the
path
left on, that is, to create the output file in the same directory as the
input.
2.2  File Names and Extensions
 
JAM
runs on several different operating systems, which deal in rather different
ways
with file naming. We must therefore define a few terms for use in the
following
sections:
 
   full name      Everything you and the operating system need to know in
                  order to identify a file
uniquely.
   name           The only truly arbitrary part of the full name,
identifying
                  anything at all. May not be
omitted.
   path           A prefix to the name that tells where (on what device,
                  directory, or user ID) a
file resides. If omitted, defaults
                  to a location known to the
operating system, such as a
                  working directory.
   extension      A prefix or suffix to
the name that tells what sort of
                  information is in the file.
May be omitted.
 
JAM
does not attempt to understand or alter paths; it just uses them as you
supply
them. It knows about a class of path separator characters, and assumes
that
the path ends at the rightmost such character in the full name.
 
JAM,
like many other software systems, uses extensions to identify the contents
of a
file. (Where proper identification is crucial, it puts "magic
numbers" in
the
files themselves.) We have tried to make our conventions flexible:
extensions
are not required, but are supplied by default, and the default can
always
be overridden. There are three distinct operations involving file
extensions:
 
  1. 
Finding and modifying files. jxform and the JAM run-time system assume
      that screen files have a common
extension, such as jam. They will add
      that extension to any filename that does
not already contain one before
      attempting to open it. This rule does
not operate if extensions are
      ignored.
  2. 
Creating new files. Utilities other than jxform transform files of one
      type to another, and must name the
output file differently from the
      input. They do it by replacing the input
file's extension, or adding
      one if there was none. This rule
operates even if extensions are
      ignored, in which case the new extension
is always added.
  3. 
Creating data structures. The utilities f2struct, dd2struct, and bin2c
      create data structures from screen
files. They name the structures by
      removing the path and extension from the
input filename. If extensions
      are ignored, only the path is removed.
 
2.3  Configuring File Extensions and Rules
 
There
are three parameters that control how JAM uses file extensions:
 
  1.  A
flag telling whether JAM should recognize and replace extensions, or
      ignore them.
  2. 
Another flag telling whether the extension should go at the beginning
      or the end of the filename.
  3. 
The character that separates the extension from the name (zero means no
      separator).
 
The
default values for these parameters are recognize, end, and period
respectively.
You may alter them using the SMUSEEXT setup variable; but be aware
that
people working on the same project should use the same rules, or confusion
is
likely to result.
 
Here is
a list of the default extensions used by utility programs.
 
          Utility        Extension
 
          bin2c          language-dependent bin2hex
                         none dd2asc
                         dic dd2r4
                         no change dd2struct
                         language-dependent
ddmerge
                         dic f2dd
                         dic f2r4
                         no change f2struct
                         language-dependent
formlib
                         none jamcheck
                         prv (backup) jammap
                         map key2bin
                         bin lstdd
                         lst lstform
                         lst modkey
                         keys msg2bin
                         bin term2vid
                         vid txt2form
                         none var2bin
                         bin vid2bin
                         bin
 
 
2.4  Ordering of Options and Other Arguments
 
Most
utilities take as arguments an output file, a list of input files, and some
options.
If present, the output file precedes the input file list. Options may
be
placed anywhere after the utility name; they may be supplied separately (each
with
its own hyphen), or together (all following a single hyphen); the two
commands
 
     lstform -fti myscreen
     lstform -f -t -i myscreen
 
are
equivalent. Option letters may be either upper- or lower-case. On certain
systems
such as VMS and MS-DOS, where the prevalent "switch character" is /
rather
than - , both are supported.
 
2.5  Notation
 
The
rest of this chapter describes each configuration utility individually.
There
are also a few sections that tell how to prepare input files for some of
the
utilities. Each section contains the following information:
 
   .
      The name and purpose of the utility.
   .
      A synopsis of its usage, that is, what
you type on the command line to
      run it. Here, literal input appears in
boldface, and parameters that
      you supply appear in normal type.
Optional parameters are enclosed in
      square brackets []. An ellipsis ...
indicates that the previous
      parameter may be repeated. Command
options are simply listed after a
      hyphen, as -abcdefg; you may select any
combination of them.
   .
      A complete description of the utility's
inputs, outputs, and
      processing.
   .
      Where applicable, a list of error
conditions that may prevent the
      utility from doing what you tell it.
 
NAME
 
     bin2c - convert any binary file to C
source code
 
SYNOPSIS
 
     bin2c [-flv] textfile binfile [binfile
...]
 
DESCRIPTION
 
This
program reads binary files created by other JAM utilities, and turns each
one
into C code for a character array initialized to the contents of the file.
Such
arrays may then be compiled, linked with your application, and used as
memory-resident
files. This utility combines the arrays from all the input files
in a
single output file; each array is given a name corresponding to the name of
the
input file, with the path and extension stripped off.
 
Files
that can be made memory-resident include the following types:
 
  1. 
screens (created by jxform)
  2. 
key translation files (key2bin)
  3. 
setup variable files (var2bin)
  4. 
video configuration files (vid2bin)
  5. 
message files (msg2bin)
 
The
command options are interpreted as follows:
 
   -f   
Overwrite an existing output file.
   -l   
Force the array names derived from the input file names to
         lower-case characters.
   -v   
Print the name of each input file on the terminal as it is
         processed.
 
ERROR
CONDITIONS
 
Insufficient
memory available. Cause: The utility could not allocate enough
                                      memory
for its needs. Corrective action:
                                      None.
 
File
"%s" already exists; use '-f' to overwrite. Cause: You have specified
an
                                      output
file that already exists.
                                     
Corrective action: Use the -f flag to
                                     
overwrite the file, or use another name.
 
Cannot
open "%s" for writing. Cause: An output file could not be created,
due to
                                      lack of
permission or perhaps disk space.
                                     
Corrective action: Correct the file system
                                      problem and retry the
operation.
 
Cannot
open "%s" for reading. Cause: An input file was missing or
unreadable.
                                     
Corrective action: Check the spelling,
                                      presence, and permissions of the
file in
                                     
question.
 
Error
reading file "%s" Cause: The utility incurred an I/O error while
                                     
processing the file named in the message.
                                     
Corrective action: Retry the operation.
 
Error
writing file "%s" Cause: The utility incurred an I/O error while
                                     
processing the file named in the message.
                                      Corrective action: Retry the operation.
 
NAME
 
     bin2hex - convert binary to and from hex
ASCII, for transport
 
SYNOPSIS
 
     bin2hex -cx [-flv] hexfile binary [binary
...]
 
DESCRIPTION
 
The
bin2hex utility translates binary files of any description to and from a
hexadecimal
ASCII representation. It is useful for transmitting files between
computers.
The utility is very straightforward; no translation of any sort is
attempted.
 
Either
the -c or the -x switch is required; the others are optional. Here is a
summary:
 
   -c   
Create a text file from one or more binary files; the text file's
         name is the first file argument, and
the rest are binaries.
   -f   
Overwrite any existing output files.
   -l   
Force the filename arguments to lower case.
   -v   
Print the name of each binary on the terminal as it is processed.
   -x   
Extract all the binary files contained in an ASCII source. Selective
         extraction is not supported.
 
ERROR
CONDITIONS
 
Error
reading %s Error writing %s Cause: The utility incurred an I/O error while
processing
an input or output file. This message will usually be accompanied by
a more
specific, system-dependent message. Corrective action: Correct the
system-dependent
problem, if possible, and retry the operation.
 
%s
already exists %s already exists, it is skipped Cause: The command you have
issued
would overwrite an existing output file. Corrective action: If you are
sure
you want to destroy the old file, reissue the command with the -f option.
 
NAME
 
     dd2asc - convert a data dictionary
between text and binary format
 
SYNOPSIS
 
     dd2asc -ab [-f] textfile [binfile]
 
DESCRIPTION
 
This
utility converts a data dictionary, binfile, to or from a human-readable
format
in textfile, according to the command options:
 
   -a   
Convert binary to ASCII.
   -b   
Convert ASCII to binary.
   -f   
Overwrite an existing output file.
 
One of
-a or -b must be present. If binfile is missing, it defaults to data.dic.
 
5.1  Creating an ASCII File from a Data
Dictionary
 
Running
dd2asc with the -a option creates a complete, human-readable listing of
the
contents of your data dictionary. Here is an example. Assume that the data
dictionary
that you have created with jxform is called data.dic and contains the
following:
 
  1. 
Built-in default values designating a simple (non-array) field with a
      length of 10, no character edits, a
scope of 2, and display attributes
      of underlined, highlighted and white.
  2. 
fld1, a shifting and scrolling vertical array with the following
      attributes: length = 8, elements = 3,
distance = 2, max shifting length
      = 20, increment = 1, scrolling items =
10, page size = 3, and both the
      circular and isolate options. A help
screen is attached to it, named
      help3.jam. It has a status line text of
this is a shifting and
      scrolling array. In addition, you have
added a comment to it in the
      data dictionary.
  3. 
fld2, with a length of 15, a scope of 3, and display attributes of
      reverse video, underlined, highlighted
and blue. The character edit is
      numeric. The field edits are
right-justified and data-required. It has
      a currency format in which you have
chosen all 7 options, including a
      fill character of '*' and 2 automatic
decimal places. It also has a
      data type of double, with a precision of
2.
  4. 
fld3, with a length of 10, a scope of 5, and display attributes of
      highlighted and white. It has a time
format of hh:mm p.m., based on a
      12-hour clock, and gets the time from
the operating system. It is also
      protected from everything except
clearing.
  5. 
fld4, with a length of 2 and a regular expression, [A-Z][0-9], as a
      character edit.
  6. 
fld5, with a length of 3 and a character edit of digits only. You have
      specified acceptable data entry ranges
of 100-500 and 800-999.
  7.  A
comment in the data dictionary, which is not attached to either a
      field or a record.
  8.  A
record, with the name outst and a data dictionary comment, and
      consisting of 3 fields: name, with a
data type of char string; telnum,
      with a data type of omit from struct;
and amount, with a data type of
      float and a precision of 2.
 
To
create an ASCII listing in a new file called asc, the command is as follows:
 
     dd2asc asc -a data.dic
 
Here is
a listing of the output file asc:
 
D:
     SCOPE=2 UNFILTERED LENGTH=10 ARRAY-SIZE=1
     WHITE UNDERLINE HILIGHT
F:fld1   this is a comment
     SCOPE=2 UNFILTERED LENGTH=8 ARRAY-SIZE=3
VERT-DISTANCE=2
     MAX-LENGTH=20 SHIFT-INCR=1 MAX-ITEM=10
PAGE-SIZE=3 CIRCULAR ISOLATE
     WHITE UNDERLINE HILIGHT
     TEXT= this is a shifting and scrolling
array
     HELPSCR= help3.jam
F:fld2
     SCOPE=3 NUMERIC LENGTH=15 ARRAY-SIZE=1
     BLUE REVERSE UNDERLINE HILIGHT
     RIGHT-JUSTIFIED REQUIRED
     CURR-FORMAT= FLOAT-SIGN, FILL-CHAR= *,
RIGHT-JUST, COMMAS, DEC-PLACES=2\
     CLEAR-IF-ZERO, APPLY-IF-EMPTY
     FTYPE=DOUBLE:2
F:fld3
     SCOPE=5 UNFILTERED LENGTH=10 ARRAY-SIZE=1
     WHITE HILIGHT
     PROTECTED FROM DATA-ENTRY TABBING-INTO
VALIDATION
     12-HOUR TIMEFLD= hh:mm p.m.
F:fld4
     SCOPE=2 CHAR-MASK LENGTH=2 ARRAY-SIZE=1
     WHITE UNDERLINE HILIGHT
     REG-EXP (CHAR)= [A-Z][0-9]
F:fld5
     SCOPE=2 DIGITS-ONLY LENGTH=3 ARRAY-SIZE=1
     WHITE UNDERLINE HILIGHT
     RANGE 1 = from 100 to 500
     RANGE 2 = from 800 to 999
# a
comment not associated with any field
R:outst   comment on record
     FIELDS= name(CHAR-STR), telnum(OMIT),
amount(FLOAT:2)
 
For
purposes of inspection, the listing above is pretty self-explanatory.
However,
you can also create a text file yourself and use the -b option to turn
it into
a data dictionary. To do that, you will need the rules explained in the
next
section.
 
5.2  ASCII File Formatting Rules
 
There
are four types of entries in the ASCII file, corresponding to the kinds of
information
in a data dictionary. They are default field attributes; fields;
records;
and stand-alone comments. If present, the default entry must be the
first
entry in the file. Fields, records and unattached comments may appear
after
that in any order you like.
 
In
general, white space is ignored, including empty lines. Blanks do, however,
serve
to separate field and record names from their comments, and to separate
one
keyword from another. If an entry is too long to fit on one line, place a
backslash
\ at the very end to indicate that it continues onto the next line.
 
The
default field attributes entry begins with D: in the first two columns of
the
first line; the rest of that line must be blank. The default attributes
themselves
appear on subsequent lines, and consist of keywords draw from the
list
presented in the following section.
 
Each
field entry must be introduced by F: in the first two columns, followed by
the
name of the field; an optional comment may follow. The field's attributes
must
appear on subsequent lines, and are designated by keywords. The following
section
contains a complete list of the keywords.
 
Each
record entry must be introduced by R: in the first two columns, followed by
the
name of the record; an optional comment may follow. The next line begins
with
FIELDS=, followed by the names of the fields, separated by commas. Each
field
name may be followed by the keyword for its data type, enclosed in
parentheses.
 
Each
unattached comment entry must be introduced by a # in the first column,
followed
by the comment on the same line.
 
5.3  Field Attribute Keywords
 
There
are two types of keywords for field attributes: flags and values. A flag
keyword
stands by itself and needs no other information, like the HILIGHT
display
attribute. It may appear on the same line as other primary keywords. A
value
keyword must be accompanied by more information; it is followed by an
equals
sign, then more keywords or strings. Value keywords must appear alone on
a line,
accompanied only by the information attached to them.
 
Dd2asc
usually reads only the first few characters of each keyword, so you can
truncate
keywords if you wish. However, the utility itself always generates the
full
names, and we recommend that you do so as well, for better documentation.
 
The
following is a list of all keywords, presented in the order in which you
would
encounter the attributes in jxform. When the right-hand side of a value
keyword
consists of more keywords, they are listed in upper-case; lower-case
words
indicate an arbitrary string with the indicated meaning. For explanations
of the
semantics of each field attribute, refer to the Author's Guide.
 
5.3.1  Display Attributes
 
All of
these are flag keywords.
 
     BLACK BLUE GREEN CYAN RED MAGENTA      NON-DISPLAY REVERSE BLINKING
     YELLOW WHITE                           UNDERLINE HILIGHT DIM
 
5.3.2  Character Edits
 
All of
these are flag keywords.
 
     UNFILTERED DIGITS-ONLY YES-NO
     LETTERS-ONLY NUMERIC ALPHANUMERIC
     CHAR-MASK
 
Note:
Choose CHAR-MASK if you have a regular expression. The value keyword
REG-EXP(CHAR)
= expression must follow, on a separate line.
 
5.3.3  Field Edits
 
Flag
keywords:
 
     RIGHT-JUSTIFIED REQUIRED               UPPER-CASE LOWER-CASE MUST-FILL
     RETURN-ENTRY MENU-FIELD CLR-INPUT      NO-AUTOTAB WORD-WRAP
 
If you
choose RETURN-ENTRY or MENU-FIELD, you may include the value keyword
RETCODE
= integer-value on a separate line. Menu fields may also have a SUBMENU
value
keyword.
 
Value
keywords:
 
     PROTECTED FROM DATA-ENTRY TABBING-INTO
CLEARING VALIDATION
     REG-EXP (FIELD)= regular-expression
     SUBMENU= menu-screen-name
 
If the
field is protected from everything, use PROTECTED alone. If it is only
partially
protected, use PROTECTED FROM followed by any or all of the four
values
listed.
5.3.4  Field Attachments
 
All of
these are value keywords.
 
     NEXTFLD= field-designation
     NEXTFLD= primary-field-designation OR
alternate-field-designation
 
     HELPSCR= help-screen-name
     HARDHELP= automatic-help-screen-name
 
     ITEMSCR= item-selection-screen-name
     HARDITEM =
automatic-item-selection-screen-name
 
     TBL-LOOKUP= screen-name
 
     TEXT=field-status-string
 
     MEMO1= string
     MEMO2= string
     ...
     MEMO9= string
 
5.3.5  Miscellaneous Edits
 
All of
these are value keywords.
 
     FE-CPROG= field-entry-function-name
     VAL-CPROG= field-exit-function-name
 
     DATEFLD= date-format-string
     USRDATE= date-format-string
 
     12-HOUR TIMEFLD= date-format-string
     24-HOUR TIMEFLD= date-format-string
     12-HOUR USRTIME= date-format-string
     24-HOUR USRTIME= date-format-string
 
     CALC= expression
     CALC= expression; expression; expression;
...
 
     CKDIGIT= sum MIN-DIGITS= count
 
     RANGE 1= FROM value TO value
     RANGE 2= FROM value TO value
     ...
     RANGE 9= FROM value TO value
 
     JPLTEXT=jpl-program
 
     CURR-FORMAT=
 
     (Any or all of the following value
keywords may follow CURR-FORMAT)
 
          FLOAT-SIGN
          FILL-CHAR= character
          RIGHT-JUST
          COMMAS
          DEC-PLACES= count
          CLEAR-IF-ZERO
          APPLY-IF-EMPTY
 
5.3.6  Size
 
Most of
these are value keywords, but all may appear on the same line as other
keywords.
 
     LENGTH= onscreen-length
     ARRAY-SIZE= number-of-onscreen-elements
     VERT-DISTANCE= offset
     HORIZ-DISTANCE= offset
     MAX-LENGTH= shifting-length
     SHIFT-INCR= count
     MAX-ITEM= number-of-occurrences
     PAGE-SIZE= number
     CIRCULAR
     ISOLATE
 
5.3.7  Data Type
 
One
value keyword, FTYPE, which may take on any one of the following values:
 
     OMIT CHAR-STR INT UNSIGNED SHORT
     LONG FLOAT:precision
     DOUBLE:precision
 
If you
choose FLOAT or DOUBLE, you may follow it with an optional colon and
number,
designating the precision.
 
5.3.8  Scope
 
A value
keyword, but it may appear on the same line as other keywords. Must be
followed
by a number from 1 to 9.
 
     SCOPE= number
 
ERROR
CONDITIONS
 
ASCII
file syntax errors do not stop the creation of a data dictionary. The
errors
and anything following them on the same line are skipped; however, all
valid
entries preceding them on the same line, and all entries on lines without
errors,
are incorporated into the data dictionary.
 
Can't
read %s. Cause: An input file was missing or unreadable. Corrective
                      action: Check the
spelling, presence, and permissions of
                      the file in question.
 
Can't
open %s. Cause: An output file could not be created, due to lack of
                      permission or perhaps
disk space. Corrective action:
                      Correct the file system
problem and retry the operation.
 
%s is
not a valid data dictionary. Cause: The file you have named in the data
                      dictionary parameter
does not have the correct magic
                      number. Corrective
action: Check the file you named with
                      the data dictionary
editor.
 
Error
writing %s. Cause: The utility incurred an I/O error while processing the
                      file named in the
message. Corrective action: Retry the
                      operation.
 
%s
already exists. Cause: You have specified an existing output file. Corrective
                      action: Use the -f
option to overwrite the file, or use a
                      different name.
 
Bad
data in %s. Cause: A binary input file is corrupt. Corrective action: Make
                      sure the file is of the
correct type.
There
are also numerous messages regarding syntax errors in an ASCII input file,
                      which are intended to be
self-explanatory.
 
NAME
 
     dd2r4 - convert Release 3 data
dictionaries to Release 4 format
 
SYNOPSIS
 
     dd2r4 [-fpx] [-eextension] [-odictionary]
[dictionary ...]
 
DESCRIPTION
 
This
utility reads in JAM Release 3 data dictionaries, converts them to Release
4
format, and writes them out with the same names. It is strongly recommended
that
you place your Release 4 data dictionaries in a different directory from
the
Release 3 originals.
 
The
command options are interpreted as follows:
 
   -f   
Overwrite an existing output file. Use caution; if you use this
         option in a directory containing
Release 3 data dictionaries, they
         will be overwritten by the Release 4
versions.
   -p   
Create the output file in the same directory as the input file. Use
         of this option is not recommended.
   -e   
Create the output file with the given extension.
   -o   
Create a named output data dictionary from a single input data
         dictionary.
   -x   
Delete the extension from the Release 3 data dictionary name.
 
In
general, the Release 4 data dictionary is a superset of the Release 3 type.
The
only change made by this conversion involves the scope, which in Release 4
is a
number between one and nine. Release 3 scopes are mapped as follows:
 
          Release 3 Scope     Release 4 Scope
 
          Constant            1 Global
                              1 Transaction
                              2 Local
                              3
 
 
ERROR
CONDITIONS
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                                  for its needs. Corrective action: None.
 
File %s
already exists. Use `-f' to overwrite or '-e' to append an extension to
                                  the output
file. Cause: You have specified an
                                  existing
output file. Corrective action: Use
                                  the -f
option to overwrite the file, or use a
                                  different
name.
 
%s is a
Release 4 file. Cause: You have attempted to upgrade a data dictionary
                                  that is
already in Release 4 format.
                                  Corrective
action: Relax.
 
Error
writing %s. Cause: The utility incurred an I/O error while processing the
                                  file named
in the message. Corrective action:
                                  Retry the
operation.
 
NAME
 
     dd2struct - convert data dictionary
records to programming language
                 data structures
 
SYNOPSIS
 
     dd2struct [-fp] [-ooutfile] [-glanguage]
          [dictionary] [record-name ...]
 
DESCRIPTION
 
This
utility reads in a data dictionary, and creates programming language data
structures
corresponding to some or all of the records defined in that data
dictionary.
If there are no record-name arguments, all records in the dictionary
will be
used; otherwise, only the selected records will be used.
 
The
command options are interpreted as follows:
 
   -f   
Directs the utility to overwrite an existing output file.
   -p   
Creates the output files in the same directory as the data
         dictionary.
   -o   
Places all the structures in a single output file, whose name is
         supplied with the option.
   -g   
Creates the structures in the programming language whose name
         follows the option letter. The
language name must belong to a table
         compiled into the utility; see below.
 
The
output files will each contain one structure corresponding to a record in
the
data dictionary, and named after the record. Fields of the structures will
have
the same names as the corresponding fields of the records. The types of the
structure
fields are derived from the input field data type and character edits,
according
to the following rules.
 
  1. 
If a field has one of the following data type edits, it is used.
                   C data type    mnemonic
                omit from struct
                               FT_OMIT
                integer        FT_INT
                unsigned integer
                               FT_UNSIGNED
                short integer  FT_SHORT
                long integer   FT_LONG
                floating point FT_FLOAT
                long floating  FT_DOUBLE
                character string
                               FT_CHAR
  2. 
If a field has no data type edit but has a digits-only or numeric
      character edit, its type is unsigned int
or double respectively.
  3. 
All other fields are of type character string.
 
 
If a
field has multiple occurrences, the corresponding structure member will be
declared
as an array.
 
ERROR
CONDITIONS
 
Language
%s undefined. Cause: The language you have given with the -g option has
                              not been defined
in the utility's tables.
                              Corrective action: Check the spelling of
the
                              option, or
define the language ito the utility.
 
%s
already exists. Cause: You have specified an existing output file. Corrective
                              action: Use the -f option to overwrite the file,
                              or use a
different name.
 
%s has
an invalid file format. Cause: An input file is not of the expected type.
                              Corrective
action: Check the spelling and type of
                              the offending
file.
 
'%s'
has no data to convert. Cause: An input file is empty, or does not have the
                              names you
specified. Corrective action: Check the
                              names.
 
Not
enough memory to process '%s'. Unable to allocate memory. Cause: The utility
                              could not
allocate enough memory for its needs.
                              Corrective
action: None.
 
NAME
 
     ddmerge - combine binary data dictionaries
 
SYNOPSIS
 
     ddmerge [-f] destination source [source
...]
 
DESCRIPTION
 
This
utility combines several binary data dictionaries into one. Using it, you
can
build up a data dictionary from simpler components in a modular fashion.
 
The
program reads in destination, if it exists. The -f option causes the program
to
write source over an existing destination file. If a source entry's name and
characteristics
duplicate an entry already in the destination, it is ignored. If
the
name matches a destination entry but the characteristics differ, the source
entry
is discarded and a warning message is issued.
 
Since
the merging is done in memory, there is a machine-dependent limit on the
total
size of the destination data dictionary.
 
ERROR
CONDITIONS
 
%s
already exists. Cause: You have specified an existing output file. Corrective
                          action: Use the -f
option to overwrite the file, or
                          use a different name.
 
No
output written. Warning: merge incomplete. 
Last input included = %s. Cause:
                          Due to another error
condition, no output or only
                          partial output was
produced. Corrective action:
                          Correct the other error.
 
Can't
read %s. Cause: An input file was missing or unreadable. Corrective
                          action: Check the
spelling, presence, and permissions
                          of the file in
question.
 
%s is
not a valid data dictionary. Cause: An input file did not have the correct
                          magic number.
Corrective action: Check the spelling
                          and type of the
input file.
 
Bad
data in %s. Cause: An input file was corrupted. Corrective action: Try to
                          repair the file.
 
Insufficient
memory. Cause: The utility could not allocate enough memory for its
                          needs. Corrective
action: None.
 
Default
in %s differed from saved default. Default in %s had different edits
                          from saved default.
Cause: Warning only. The default
                          sections of input
data dictionaries were different;
                          the earliest will be
retained. Corrective action:
                          None.
 
Too
many entries for LDB. Too many entries for data dictionary. Cause: The
                          output dictionary
size has reached the maximum.
                          Corrective action: Try
to shrink or eliminate some
                          input dictionaries.
 
Dropped
record "%s" in %s -- same name as earlier Field. Dropped field
"%s" in
                          %s -- same name as
earlier Record. Cause: Warning
                          only. There were duplicate items in two or more
                          dictionaries.
Corrective action: None.
 
Record
"%s" in %s differed from saved record. Record "%s" in %s
had different
                          data types from
saved record. Field "%s" in %s
                          differed from saved
field. Field "%s" in %s had
                          different edits from
saved field. Field "%s" in %s has
                          different %s. Field
"%s" in %s had different edits
                          from saved field.
Cause: Warning only. An entry in the
                          named data
dictionary has but different attributes
                          from a similarly
named entry in an earlier input file;
                          the earlier one has been retained. Corrective action:
                          None.
 
NAME
 
     f2struct - create program data structures
from screens
 
SYNOPSIS
 
     f2struct [-fp] [-ooutfile] [-glanguage]
screen
          [screen ...]
 
DESCRIPTION
 
This
program creates program source files containing data structure definitions
matching
the input files. The output file will contain a single structure
bearing
the name of the screen.
 
The
language in which the structures are created, and the extension attached to
output
file names, are both selected by the -g option. The name of the desired
language
follows the g, and must be in a table compiled into the utility. This
option
may be placed between file names in the command line to enable files to
be
created in different languages. Indeed, the same input file can be named
twice
to create, say, both C and Pascal structures:
 
     f2struct -gc address.jam -gpascal
address.jam
 
You can
modify the conversions or write code to handle more languages, as
described
in the utility source code; see below. The other command options are
interpreted
as follows:
 
   -f   
Directs the utility to overwrite an existing output file.
   -p   
Directs the utility to create each output file in the same directory
         as the corresponding input file.
   -o   
Causes all output to be placed in outfile.
 
When a
screen name is given to a structure, the screen file's extention is
stripped
off. Each field of the structure will be named after a field of the
screen.
If a screen field has no name fldm is used, where m is the field number.
The
types of the structure fields are derived from the input field data type and
character
edits, according to the following rules.
 
  1. 
If a field has one of the following data type edits, it is used.
                   C data type    mnemonic
                omit from struct
                               FT_OMIT
                integer        FT_INT
                unsigned integer
                               FT_UNSIGNED
                short integer  FT_SHORT
                long integer   FT_LONG
                floating point FT_FLOAT
                long floating  FT_DOUBLE
                character string
                               FT_CHAR
  2. 
If a field has no data type edit but has a digits-only or numeric
      character edit, its type is unsigned int
or double respectively.
  3. 
All other fields are of type character string.
 
 
Omit
from struct is a special type that prevents the field from being included
in any
structure.
 
If a
field has multiple occurrences, the corresponding structure member will be
declared
as an array.
 
ERROR
CONDITIONS
 
Language
%s undefined. Cause: The language you have given with the -g option has
                              not been defined
in the utility's tables.
                              Corrective
action: Check the spelling of the
                              option, or
define the language ito the utility.
 
%s already
exists. Cause: You have specified an existing output file. Corrective
                              action: Use the
-f option to overwrite the file,
                              or use a
different name.
 
%s has
an invalid file format. Cause: An input file is not of the expected type.
                              Corrective
action: Check the spelling and type of
                              the offending
file.
 
'%s'
has no data to convert. Cause: An input file is empty, or does not have the
                              names you
specified. Corrective action: Check the
                              names.
 
Not
enough memory to process '%s'. Unable to allocate memory. Cause: The utility
                              could not
allocate enough memory for its needs.
                              Corrective
action: None.
 
At
least one form name is required. Cause: You have not given any screen files
                              as input.
Corrective action: Supply one or more
                              screen file names.
 
 
 
)
 
NAME
 
     f2dd - create or update a data dictionary
from screen files
 
SYNOPSIS
 
     f2dd [-v] dictionary screen [screen ...]
 
DESCRIPTION
 
This
utility reads in the named data dictionary, if it already exists. It then
updates
the data in memory from the screen files, and writes out the resulting
data
dictionary. The -v option causes it to print out the name of each screen as
it is
processed.
 
Screen
names must be entered with their extensions, if they have any, but wild
cards
may be used (if interpreted by the operating system), as in
 
     f2dd newdata.dic *.jam
 
If a
screen has no named fields other than JAM control fields (which are
ignored)
the utility just displays a message. Otherwise, it creates a tentative
record
named after the screen (stripped of its extensions, if any), containing
all the
named fields, plus tentative data dictionary entries for each named
field.
Then it searches the data dictionary in memory for a record and fields
with
names matching the tentative new ones.
 
If it
finds no match for a record or field, the utility adds it to the data
dictionary
in memory. If a match is found, the tentative record or field is
ignored;
and if the record contents or field characteristics are different from
the
tentative ones, a message is posted.
 
ERROR
CONDITIONS
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                                  for its
needs. Corrective action: None.
 
%s is
not a valid data dictionary. Bad data in %s. Cause: An input file did not
                                  have the
correct magic number, or is
                                  corrupted.
Corrective action: Make sure the
                                  input file is of the correct type.
 
Too
many entries for data dictionary. Too many data dictionary entries. Too many
                                  entries for
LDB. Cause: The output file has
                                  reached the
maximum possible size. Corrective
                                  action:
Specify fewer inputs, or remove
                                  unnecessary
fields from them.
 
Can't
read form %s. Bad data in form %s. %s is not a form. Cause: An input file
                                  was missing,
unreadable, or not the right
                                  kind.
Corrective action: Check the spelling,
                                  presence,
and permissions of the file in
                                  question.
 
Form %s
has no fields. Form %s has no named fields. Cause: Warning only. The
                                  screen will
make no contribution to the
                                  output.
Corrective action: None.
 
Can't create
record "%s" -- same name as data dictionary Field. Can't add field
                                 
"%s" in %s -- same name as data dictionary
                                  Record.
Cause: A screen or field has a name
                                  that conflicts with something
already in the
                                  data
dictionary. Corrective action: Rename one
                                  of the
items.
Record
"%s" in %s differs from data dictionary record. Field "%s"
in %s differs
                                  from data
dictionary field. Field "%s" in %s
                                  has
different edits from data dictionary
                                  field.
Cause: Warning only. A screen or screen
                                  field differs from a similarly named
item
                                  already in
the data dictionary. The latter
                                  will be
retained. Corrective action: Rename
                                  one of the items.
 
Can't
write %s. Can't write destination file. Cause: An output file could not be
                                  created, due
to lack of permission or perhaps
                                  disk space.
Corrective action: Correct the
                                  file system
problem and retry the operation.
 
NAME
 
     f2r4 - convert Release 3 screens to
Release 4 format
 
SYNOPSIS
 
     f2r4 [-ja1udvxfp] [-eext] screen [screen
...]
 
DESCRIPTION
 
F2r4
converts Release 3 screens to Release 4 format. It gives each new screen
the
same name as the old one. It is strongly recommended that you run this
utility
in a different directory from where your original Release 3 forms
reside.
 
There
are a few nontrivial changes involved in this conversion. One is that JAM
control
fields may be converted to control strings that do not occupy space on
the
screen. Another is that jam_first fields, and jam_pf1 fields on read-only
screens,
have been replaced by screen entry functions and AUTO control strings,
respectively.
The following options are provided to control the conversion of
JAM
control fields to control strings:
 
   -j   
Do not convert control fields to control strings.
   -a   
Do not convert jam_pf1 fields to AUTO control strings.
   -1   
Do not convert the jam_first attached function to a screen entry
         function. This is a one, not an ell.
   -u   
Convert all unprotected fields to menu fields. This is useful for
         Release 3 item selection screens; in
Release 4, item selection
         fields must have the MENU bit set.
   -d   
Do not delete jam_d_dflt and jam_f_dflt fields from the screen.
         These fields were used in earlier
releases of JAM to denote default
         field and display characteristics.
   -v   
Print the name of each screen as it is processed.
   -x   
Delete the input extension.
   -f   
Overwrite existing output files. Use cautiously: if you do this in
         the directory where your Release 3
screens reside, the Release 4
         screens will be created successfully
but your original screens will
         disappear.
   -e   
Followed by a character string, makes that string the extension for
         output files.
   -p   
Create each output file in the same directory as the corresponding
         input file. This option is not
recommended.
 
For
further information regarding control strings see the Author's Guide.
 
ERROR
CONDITIONS
 
%s is
not a release 3 form Cause: An input file is not of the correct type (this
                                 
isdetermined by a sort of magic number
                                  check.)
Corrective action: Make sure you
                                  haven't
already convertedthe file, and that
                                  it is a
screen in the first place.
 
Unable
to allocate memory. Cause: The utility couldn't get enough memory for its
                                  needs.
Corrective action: None.
 
File %s
already exists. Use '-f' to overwrite or '-e' to append an extension to
                                  the output
file. Cause: The output file you
                                  have named
already exists. Corrective action:
                                  Be cautious
in your use of -f. JYACC
                                 
suggeststhat you create the Release 4 screens
                                  in an empty
directory, notin the directory
                                  where the
Release 3 screens reside.
 
)
 
NAME
 
     formlib - screen librarian
 
SYNOPSIS
 
     formlib -crdxt [-flv] library [screen
...]
 
DESCRIPTION
 
Formlib
is a screen librarian. It creates libraries of screens that have been
created
with the JAM authoring utility. The representation of the screen in the
library
is the original binary version. This utility enables one to store many
screens
in a single file and not clutter a directory with many small screen
files.
 
Exactly
one of the unbracketed command options must be given; it controls the
action
of the utility, as follows.
 
   -c   
Create a new library, placing in it all the screens named.
   -r   
Add the screens to the named library, replacing any that are already
         there.
   -d   
Delete the screens named from the library.
   -x   
extract the screens from the named library, placing them in the
         current directory. If no screens are
named, everything in the
         library will be extracted.
   -t   
List the current contents of the library.
 
There
is also a -l option which may be used in conjunction with any of the
options
listed above, and will force the list of screen names to lower case; a
-f
option that will cause an existing library to be overwritten; and a -v option
that
will cause the utility to print the name of each screen as it is processed.
 
To
create a new library, use the -c option. For example:
 
     formlib forms -c form1 form2
 
This
creates a new file called forms containing the same binary  representations
of form1
and form2 as are in their respective files.
 
To see
what screens are catalogued in the library file, the -t option is used.
For
example, on the above file forms:
 
     formlib forms -t
 
would
list:
 
     FORMLIB--Librarian for forms created by
JYACC FORMAKER.
     Copyright (C) 1988 JYACC, Inc.
 
     LIBRARY 'forms' contains:
     form1
     form2
 
If you
wish to add a new screen to the library, or replace one  already in the
library
with a new version, use the -r option. 
For example, to add the screen
form3
to the library forms:
 
     formlib forms -r form3
 
Now if
you list the contents of forms using the -t option, you get:
 
     FORMLIB--Librarian for forms created by
JYACC FORMAKER.
     Copyright (C) 1988 JYACC, Inc.
 
     LIBRARY 'forms' contains:
     form1
     form2
     form3
 
If you
need to obtain one or more of the forms for use by an  application or for
modification
by the JAM utility, you can extract it from the library file with
the -x
option. For example:
 
     formlib forms -x form2
 
will
create a file called form2 whose contents are the binary  representation of
that
form just as it was created with jxform.
 
If a
form is no longer needed and you wish to delete it from the library, the -d
option is
used. For example:
 
     formlib forms -d form1
 
would
delete form1 from the library file forms. Now if you list the contents of
forms
using the -t option, you get:
 
     FORMLIB--Librarian for forms created by
JYACC FORMAKER.
     Copyright (C) 1988 JYACC, Inc.
 
     LIBRARY 'forms' contains:
     form2
     form3
 
ERROR
CONDITIONS
 
Library
`%s' already exists; use `-f' to overwrite. Cause: You have specified an
                                                           existing
output file.
                                                          
Corrective action:
                                                           Use the
-f option to
                                                          
overwrite the file,
                                                           or use a
different
                                                           name.
 
Cannot
open `%s'. Cause: An input file was missing or unreadable. Corrective
                                                           action: Check the
                                                          
spelling, presence,
                                                           and
permissions of
                                                           the file
in question.
 
Unable
to allocate memory. Insufficient memory available. Cause: The utility
                                                           could
not allocate
                                                           enough
memory for its
                                                           needs.
Corrective
                                                           action:
None.
 
File
`%s' is not a library. Cause: The named file is not a form library
                                                           (incorrect magic
                                                           number).
Corrective
                                                           action:
Check the
                                                           spelling and
                                                          
existence of your
                                                           library.
 
`%s'
not in library. No forms in library. Cause: A screen you have named is not
                                                           in the
library.
                                                          
Corrective action:
                                                           List the
library to
                                                           see what's in it,
                                                           then
retry the
                                                          
operation.
 
Temporary
file `%s' not removed. Cause: The intermediate output file was not
                                                           removed,
probably
                                                           because
of an error
                                                           renaming
it to the
                                                           real
output file.
                                                          
Corrective action:
                                                           Check
the permissions
                                                           and
condition of the
                                                           files,
then retry the
                                                          
operation.
 
NAME
 
     jamcheck - check screens against a data
dictionary
 
SYNOPSIS
 
     jamcheck [-acdfgilmopqstvxz]
[-eextension]
          dictionary screen [screen ...]
 
DESCRIPTION
 
This
utility reads a data dictionary into memory, then compares each screen
against
it and reports all the discrepancies it finds. It makes two sorts of
comparisons:
 
   .
      Entire screens are checked against data
dictionary records with the
      same names (screen file extensions are
discarded), to see if they
      contain the same named fields.
   .
      Screen fields are checked against data
dictionary entries with the same
      names. Command options control which of
the many field characteristics
      are checked.
 
This
utility can also change the screen fields to being them into conformity
with
the data dictionary. It will not change any field characteristics except
those
it has been told to check by a command option, and the old screens will be
saved
with a different file extension. Here is a list of the command options:
 
   -a   
Check field display attributes.
   -c   
Change screen field characteristics to the values in the data
         dictionary. Will affect only those
characteristics selected by other
         options. The old screens will be
saved with an extension of prv.
   -d   
Check field data filters (character edits).
   -e   
Changes the default extension applied to screen files to the string
         following the option letter.
   -f   
Allow screen backup files to overwrite existing backups.
   -g   
Check field characteristics not mentioned in other options.
   -i   
Request confirmation before making each change to a screen field.
         This option generates lots and lots
of prompts, -c must also have
         been specified.
   -l   
Check field formatting edits, such as date, time, and currency
         format.
   -m   
Check all field characteristics.
   -p   
Place the backup screens in the same directory as the originals,
         rather than the current directory.
   -q    Check field protection.
   -r   
Check attached operations, such as field entry and exit functions.
   -s   
Check field length and number of occurrences.
   -t   
Check field status text.
   -v   
List screen names as they are processed.
   -x   
Extend onscreen length and/or array size of field. By default, a
         screen field is made larger by making
it shifting or scrolling.
   -z   
Check field help and item selection edits.
 
If no
options are given, the utility checks data filters, field format commands,
and
field size, as though the options were -lsd.
 
If you
tell jamcheck to expand fields onscreen with -x and the screen cannot
accommodate
a larger field, the field will be made shifting or scrolling; fields
will
always be extended, offscreen if necessary. Fields can always be made
smaller.
 
Screens
without named fields are listed, but otherwise ignored. Screen and field
names
without corresponding data dictionary entries are also ignored.
 
ERROR
CONDITIONS
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                                  for its
needs. Corrective action: None.
 
Can't
read %s. Cause: An input file was missing or unreadable. Corrective
                                  action:
Check the spelling, presence, and
                                  permissions
of the file in question.
 
%s is
not a valid data dictionary. Bad data in %s. Cause: An input file was of
                                  the wrong
kind, or has been corrupted.
                                  Corrective
action: Check the type of the
                                  indicated
file.
 
File %s
already exists; use '-f' to overwrite. Cause: You have specified an
                                  existing
output file. Corrective action: Use
                                  the -f
option to overwrite the file, or use a
                                  different
name.
 
Field
"%s" in %s has same name as data dictionary Record. Cause: Warning
only.
                                  The indicated field will not be
compared.
                                  Corrective
action: None.
 
There
are also many informational messages, which are meant to be
                                 
self-explanatory.
 
 
)
 
NAME
 
     jammap - list relations among JAM screens
 
SYNOPSIS
 
     jammap [-v] [-eextension] [-omapfile]
topscreen
 
DESCRIPTION
 
Jammap
reports on the status of the screens in a JAM directory and the
relationships
among them. It should be run in a directory containing related JAM
screens,
and you must give it the name of the top-level screen. It scans the
directory
and creates several reports, described below. By default, they are
placed
in a file with the name of the top-level screen and an extension of .map.
The
command options are interpreted as follows:
 
   -v   
List input screens and processing steps to the terminal as they
         occur.
   -e   
Give the map file the extension that follows the option letter.
   -o   
Place the output listing in the file whose name follows the option
         letter.
 
The
listing produced by jammap contains six sections; there is currently no way
to
suppress or select any particular section. They are as follows:
 
  1. 
The Linkage Report shows the contents of each JAM control field for
      each screen in the directory. The
screens are listed in alphabetical
      order. The top-level screen as well as
forms and windows referenced by
      display-form or display-window control
strings are included in this
      report. Control strings that reference a
screen not in the list will be
      flagged.
  2. 
The Links Missing Report lists the names of screens that are referenced
      by control links, but are not found in
the current directory.
  3. 
The System Call Report lists programs and commands included in JAM
      control strings beginning with an
exclamation point.
  4. 
The Invoked Function Report provides an alphabetic listing of functions
      called from JAM control strings
beginning with a caret.
  5. 
The List of Parameter Windows contains names of all the parameter
      windows included in JAM control strings
via the percent sign ("%")
      option.
  6. 
Finally, the utility will print a List of All Screens Checked during
      its run.
 
ERROR
CONDITIONS
 
Exactly
1 form name is required. Cause: The argument to this utility is the
                                       
top-level screen of a JAM application;
                                        you
have supplied extra parameters.
                                       
Corrective action: Retry the command,
                                       
without the excess.
 
Unable
to allocate memory. Insufficient memory for lists, form  Cause: The
                                        utility could not allocate
enough memory
                                        for
its needs. Corrective action: None.
 
Can't
find top level form Cause: The input file was missing or unreadable.
                                        Corrective action: Check the spelling,
                                       
presence, and permissions of the file in
                                       
question.
 
NAME
 
     Key file - keyboard translation table
source
 
DESCRIPTION
 
JAM
uses a key translation table to map keys you type into a
keyboard-independent
set of codes, thus relieving applications of the need to
know
about different terminals. This section tells how to format a text file
containing
a key translation table.
 
You can
also construct a key translation table using the modkey utility, an
interactive
program which is documented elsewhere in this chapter. Modkey is
recommended
if you are defining a key translation file from scratch, or if you
are new
to JAM. After creating a key file, either by hand or with modkey, you
will
need to translate it to binary with the key2bin utility (documented
separately)
and assign the binary file to the SMKEY setup variable for use by
the
run-time system.
 
15.1  Key Translation File Format
 
The key
translation file contains one line for each key. Each line has the
following
components:
 
     logical-value(label) = character-sequence
 
Logical-value
can either be one of the mnemonics defined in the file smkeys.h ,
or a
hexadecimal value. See Section 15.2 for a table. Only modkey differentiates
between
the two methods; they operate identically in the run-time system. In
modkey,
entries specified with hexadecimal values will all appear on the
miscellaneous
key definition screen, while entries specified with mnemonics will
be
shown on one of the four screens devoted to specific types of keys. At most
24
entries may be specified in hexadecimal.
 
The
label, which must be enclosed in parentheses, should be a short string that
appears
on top of the key on your keyboard. It will be stored in the key
translation
file and can be accessed at run-time through various library
functions
and the %k escape in status-line messages (see d_msg_line). Key
labels,
or keytops as they are sometimes called, can be invaluable in user help
messages
and prompts. The label and parentheses are optional; the following
equal
sign, however, is required.
 
The
character-sequence is up to six characters that JAM will translate to the
logical
value on the left. ASCII control characters may be represented by
mnemonics,
listed in Section 15.3, or as hex numbers. Displayable characters
such as
letters can just be typed in. Blanks between characters are ignored; if
a space
occurs in the sequence, it should be entered as SP.
 
Lines
beginning with a pound sign # will be treated as comments, i.e. ignored,
by
key2bin. Some representative key translation file entries follow.
 
          EXIT(F1) = SOH @ CR
          XMIT(Enter) = SOH O CR
          TAB 
= HT
          BACK = NUL SI
          BKSP = BS
          RARR = ESC [ C
          LARR = ESC [ D
          UARR = ESC [ A
          DARR = ESC [ B
          0x108 = DEL
          PF2(F2) = SOH A CR
 
If the
same mnemonic appears more than once in the file, the last occurrence
will
appear in the modkey utility. If duplicate right-hand sides appear with
different
logical values, unpredictable results will occur. Incorrectly
formatted
lines will cause key2bin to abort.
 
15.2  Key Mnemonics and Logical Values
 
The
following table lists JAM's logical key values, their mnemonics, and their
actions.
Entries followed by "**" are required for jxform to work properly;
those
followed by "*" are strongly recommended.
 
     EXIT 0x103**   exit                    SPF1  0x4101*
     XMIT 0x104**   transmit               
SPF2  0x4201*
     HELP 0x105*    help                   
SPF3  0x4301*
     FHLP 0x106      screen-wide help      
SPF4  0x4401*
     BKSP 0x108*    backspace              
SPF5  0x4501*
     TAB 
0x109*    tab                     SPF6  0x4601*
     NL  
0x10a*    new line                SPF7  0x4701
     BACK 0x10b*    backtab                
SPF8  0x4801
     HOME 0x10c*    home                    SPF9  0x4901
     DELE 0x10e*    delete character       
SPF10 0x4a01
     INS 
0x10f*    insert character        SPF11 0x4b01
     LP  
0x110     local print             SPF12 0X4c01
     FERA 0x111*    field erase            
SPF13 0x4d01
     CLR 
0x112*    clear unprotected       SPF14 0x4e01
     SPGU 0x113     scroll up a page       
SPF15 0x4f01
     SPGD 0x114     scroll down a page     
SPF16 0x5001
     LARR 0x118*    left arrow             
SPF17 0x5101
     RARR 0x119*    right arrow             SPF18 0x5201
     DARR 0x11a*    down arrow             
SPF19 0x5301
     UARR 0x11b*    up arrow               
SPF20 0x5401
     REFR 0x11e*    refresh screen         
SPF21 0x5501
     EMOH 0x11f     go to last field       
SPF22 0x5601
     CAPS 0x110     change shift ind.      
SPF23 0x5701
     INSL 0x120     insert occurrence      
SPF24 0x5801
     DELL 0x121     delete occurrence
     ZOOM 0x122     zoom on field          
APP1  0x6102
                                            APP2 
0x6202
     PF1  
0x6101                          
APP3  0x6302
     PF2  
0x6201*                         
APP4  0x6402
     PF3  
0x6301*                         
APP5  0x6502
     PF4  
0x6401*                         
APP6  0x6602
     PF5   0x6501                          
APP7  0x6702
     PF6  
0x6601*                         
APP8  0x6802
     PF7  
0x6701*                         
APP9  0x6902
     PF8  
0x6801*                         
APP10 0x6a02
     PF9  
0x6901*                          APP11 0x6b02
     PF10 
0x6a01                          
APP12 0x6c02
     PF11 
0x6b01                          
APP13 0x6d02
     PF12 
0x6c01                          
APP14 0x6e02
     PF13 
0x6d01                          
APP15 0x6f02
     PF14 
0x6e01                          
APP16 0x7002
     PF15 
0x6f01                          
APP17 0x7102
     PF16 
0x7001                          
APP18 0x7202
     PF17 
0x7101                          
APP19 0x7302
     PF18 
0x7201                           APP20 0x7402
     PF19 
0x7301                          
APP21 0x7502
     PF20 
0x7401                          
APP22 0x7602
     PF21 
0x7501                          
APP23 0x7702
     PF22 
0x7601                          
APP24 0x7802
     PF23 
0x7701
     PF24 
0x7801
 
15.3  ASCII Character Mnemonics
 
This
table lists two- and three-letter ASCII mnemonics for control and extended
control
characters.
 
                    DLE  0x10                     DSC 
0x90
     SOH  0x01      DC1 
0x11                     PU1  0x91
     STX 
0x02      DC2  0x12                     PU2 
0x92
     ETX 
0x03      DC3  0x13                     STS 
0x93
     EOT 
0x04      DC4  0x14     
IND  0x84      CCH 
0x94
     ENQ 
0x05      NAK  0x15      NEL 
0x85      MW   0x95
     ACK 
0x06      SYN  0x16     
SSA  0x86      SPA 
0x96
     BEL 
0x07      ETB  0x17     
ESA  0x87      EPA 
0x97
     BS  
0x08      CAN  0x18     
HTS  0x88
     HT  
0x09      EM   0x19     
HTJ  0x89
     NL  
0x0a      SUB  0x1a     
VTS  0x8a
     VT  
0x0b      ESC  0x1b     
PLD  0x8b      CSI 
0x9b
     FF  
0x0c      FS   0x1c     
PLU  0x8c      ST  
0x9c
     CR  
0x0d      GS   0x1d     
RI   0x8d      OCS 
0x9d
     SO  
0x0e      RS   0x1e      SS2  0x8e     
PM   0x9e
     SI  
0x0f      US   0x1f     
SS3  0x8f      APC 
0x9f
 
     SP  
0x20      DEL  0x7f
 
NAME
 
     key2bin - convert key translation files
to binary
 
SYNOPSIS
 
     key2bin [-pv] [-eextension] keyfile [keyfile
...]
 
DESCRIPTION
 
The
key2bin utility converts key translation files into a binary format for use
by
applications using the JAM library. The key translation files themselves may
be
generated by JYACC modkey, which is documented elsewhere in this chapter, or
created
with a text editor according to the rules described in the section on
key
files in this chapter.
 
Keyfile
is the name of an ASCII key translation file. By convention it is an
abbreviation
of the terminal's name, plus a tag identifying it as a key
translation
file; for instance, the key translation file for the Wyse 85 is
called
W85keys. The utility first tries to open its input file with the exact
name
you put on the command line; if that fails, it appends keys to the name and
tries
again. The output file will be given the name of the successfully opened
input
file, with a default extension of bin.
 
The
command options are interpreted as follows:
 
   -p   
Place the binary files in the same directories as the input files.
   -v   
List the name of each input file as it is processed.
   -e   
Use the output file extension that follows the option letter in
         place of the default bin.
 
To make
a key translation file memory-resident, first run the binary file
produced
by this utility through the bin2c utility to produce a program source
file;
then compile that file and link it with your program.
 
ERROR
CONDITIONS
 
File
'%s' not found Neither '%s' nor '%s' found. Cause: An input file was
                                                        missing or
unreadable.
                                                        Corrective
action: Check
                                                        the
spelling, presence,
                                                        and permissions of the
                                                        file in
question.
 
Unknown
mnemonic in line: '%s' Cause: The line printed in the message does not
                                                     
  begin with a logical key
                                                        mnemonic.
Corrective
                                                        action:
Refer to
                                                       
smkeys.h  for a list of
                                                        mnemonics,
and correct
                                                        the input.
 
No key
definitions in file '%s' Cause: Warning only. The input file was empty or
                                                        contained only comments.
                                                        Corrective
action: None.
 
Malloc
error Cause: The utility could not allocate enough memory for its needs.
                                                        Corrective action:
None.
 
Cannot
create '%s' Error writing '%s' Cause: An output file could not be
                                                        created,
due to lack of
                                                        permission or perhaps
                                                        disk space.
Corrective
                                                        action:
Correct the file
                                                        system
problem and retry
                                                        the
operation.
 
NAME
 
     lstdd - list the contents of a data
dictionary
 
SYNOPSIS
 
     lstdd [-cdlrp] [-eextension] [-ooutfile]
          [dictionary]
 
DESCRIPTION
 
This
utility reads a data dictionary, by default data.dic, and creates a
human-readable
listing of the contents. By default, all information in the
dictionary
is listed, but you may select certain types using the following
command
options:
 
   -c   
List comments.
   -d   
List default field characteristics for new entries.
   -e   
Give the output file the extension that follows the option letter,
         rather than the default lst.
   -l   
List field characteristics for all entries.
   -o   
Place the output in the file whose name follows the option letter.
         The default is the name of the data
dictionary with the extension
         lst.
   -p   
Place the listing in the same directory as the input file.
   -r   
List the fields belonging to data dictionary records.
 
ERROR
CONDITIONS
 
Error
opening input file. Cause: An input file was missing or unreadable.
                                 Corrective
action: Check the spelling,
                                 presence, and
permissions of the file in
                                 question.
 
Error
opening output file. Cause: An output file could not be created, due to
                                 lack of
permission or perhaps disk space.
                                 Corrective action: Correct the file
system
                                 problem and
retry the operation.
 
Unable
to allocate memory. Can't allocate memory. Cause: The utility could not
                                 allocate
enough memory for its needs.
                                 Corrective
action: None.
 
Error
reading data dictionary file. Error writing list file. Cause: The utility
                                 incurred an
I/O error while processing the file
                                 named in the message. Corrective action: Retry
                                 the
operation.
 
Invalid
file format or incorrect version. %s is not a valid data dictionary. Bad
                                 data in %s.
Cause: An input file has the wrong
                                 magic number
or is corrupt. Corrective action:
                                 Make sure all
the input files are data
                                 dictionaries.
If you have Release 3 data
                                 dictionaries, you may need to run
dd2r4 to
                                 update them.
 
Selection
of Records & fields not yet implemented. Cause: At press time, there
                                 was no
provision yet for selecting sections of
                                 the listing.
Corrective action: None.
 
NAME
 
     lstform - list selected portions of
screens
 
SYNOPSIS
 
     lstform [-adijmnpstv] [-eext] [-ooutfile]
screen
          [screen ...]
 
DESCRIPTION
 
This
program lists selected portions of screen files. By default, all the data
about
each field in each screen is included. Using command options, however, you
can
direct that only some of the display be generated. The command options are
interpreted
as follows:
 
   -a   
List default field characteristics for the screen.
   -d   
List display data.
   -e   
Generate one output file, with the extension following the option
         letter, for each input file.
   -i   
List initial field data, including offscreen data.
   -j   
List JAM control strings.
   -m   
List data relevant to the screen as a whole: border, screen entry
         function, etc.
   -n   
Include a snapshot of the screen showing underscores in place of
         fields.
   -o   
Send the output to a single file whose name follows the option
         letter.
   -p   
Place output files in the same directory as the corresponding
         inputs.
   -s   
Include a snapshot of screen showing display data and initial
         onscreen contents of fields.
   -t   
List all field edits.
   -v   
Print the name of each screen on the terminal as it is processed.
 
ERROR
CONDITIONS
 
Error
opening input file. Cause: An input file was missing or unreadable.
                                 Corrective action: Check the
spelling,
                                 presence, and
permissions of the file in
                                 question.
 
Error
opening output file. Cause: An output file could not be created, due to
                                 lack of
permission or perhaps disk space.
                                 Corrective
action: Correct the file system
                                 problem and
retry the operation.
 
Unable
to allocate memory. Can't allocate memory. Cause: The utility could not
                                 allocate
enough memory for its needs.
                                 Corrective
action: None.
 
Error
reading form file. Error writing list file. Cause: The utility incurred an
                                 I/O error
while processing the file named in
                                 the message.
Corrective action: Retry the
                                 operation.
 
EXAMPLE
 
The
following is an annotated example of the output of this
program
when run on the summary (PF5) window of jxform.
Ellipses
... indicate abridgements.
 
FORM
'fm_summ_wi'
-----------------
FORM
DATA:
----------
form
size         12 lines; 78 columns
Border
style 0    REVERSE VIDEO HIGHLIGHTED
BLUE
Background
color  WHITE
Form
help screen  'fm_sum0hlp'
 
Snapshot
with initial data
--------------------------
1                  2         3         4         5         6         7
123456789012345678901234567890123456789012345678901234567890123456789012345678
------------------------------------------------------------------------------
 
Field
Data Summary
 
Name                                    Char Edits
unfilter
Length        (Max     )  Onscreen Elems      Offset       (Max Items      )
 
Display
Att:
Field
Edits:
Other
Edits:
 
 
 
 
Snapshot
with underscores
-------------------------
1                  2         3         4         5         6         7
123456789012345678901234567890123456789012345678901234567890123456789012345678
------------------------------------------------------------------------------
 
Field
Data Summary
 
Name
_______________________________  Char
Edits ________               _
Length
___  (Max ___ )  Onscreen Elems ___  Offset ___ _ (Max Items ____ )
 
Display
Att: _____________________________________________________________
Field
Edits: _____________________________________________________________
Other
Edits: _____________________________________________________________
_____________________________________________________________
 
 
------------------------------------------------------------------------------
 
FIELD
DATA:
-----------
Field
number      1   (line 4, column 8, length = 31)
Display
attribute UNDERLINED HIGHLIGHTED YELLOW
Field
edits       MENU-FIELD; RETURN-ENTRY;
Help              fm_nam1hlp
 
Field
number      2   (line 4, column 52, length = 8)
Scrolling
values  max items      = 
7; increment =  1; circular;
Display
attribute UNDERLINED HIGHLIGHTED YELLOW
Field
edits       PROTECTED FROM:  ENTRY OF DATA;  CLEARING;  VALIDATION;
Help              fm_chr1hlp
 
initial
data:
item  1: unfilter
...
item  7: reg exp
 
...
 
Field
number      4   (line 5, column 10, length = 3)
Display
attribute UNDERLINED HIGHLIGHTED YELLOW
Character
edits   DIGITS-ONLY
Field
edits       RIGHT-JUSTIFIED;
DATA-REQUIRED;
Range             1 TO 255
Help              fm_len1hlp
 
...
 
Field
number      15   (line 9, column 17, length = 60)
Vertical
array    2 elements; offset between
elements = 1
Array
field numbers : 15 16
Display
attribute HIGHLIGHTED YELLOW
Field
edits       WORD-WRAP; PROTECTED
FROM:  ENTRY OF DATA;  TABBING INTO;
CLEARING;  VALIDATION;
 
DISPLAY
DATA:
-------------
Display
text      Field Data Summary
Position          line = 2; column = 31; length = 18
Display
attribute CYAN
 
Display
text      Name
Position          line = 4; column = 3; length = 4
Display
attribute CYAN
 
...
 
NAME
 
     Message file - JAM error message file
format
 
DESCRIPTION
 
During
initialization, the binary message file identified by the environment
variable
SMMSGS is read into memory. It contains error messages and other text
used by
the JAM library, such as the 3-letter abbreviations used for month and
day of
week names; it can also contain user messages. The binary message file is
created
by msg2bin, q.v., from a text file. This section describes the text
file.
 
Each
line of the message file should have the form
 
     tag = message
 
The tag
is a single word; system message tags have standard prefixes, listed
below,
and matching identifiers defined in smerrors.h . You may use any tag for
your
messages that does not begin with a system prefix. The equal sign is
required,
and the message to its right is completely arbitrary, except that it
may not
contain newlines (carriage returns). If you have a long message, you may
end the
first line or lines with a backslash \ and continue it on the next. A
pound
sign # at the beginning of a line makes it a comment; msg2bin ignores
comments.
 
System
messages are identified by one of the following reserved tag prefixes,
and
have identifiers defined in the system include file smerror.h :
 
   SM     
Denotes messages and strings used by the JAM run-time library.
   FM     
Identifies messages issued by the screen editor.
   JM     
More run-time messages.
   DD     
Messages from the data dictionary editor.
 
Appendix
A contains a list of all the system messages as distributed by JYACC,
plus
explanations and actions recommended for recovery.
 
The
msg2bin utility uses tags only to distinguish user messages from system
messages;
all user entries are assigned consecutive numbers starting from 0,
regardless
of their tags. It is the responsibility of the application programmer
to
maintain the ordering of messages and the assignment of identifiers (manifest
constants)
for them. Some typical entries are shown below.
 
     SM_RENTRY = Entry is required.
SM_MUSTFILL = Must fill field. SM_CKDIGIT =
     Check digit error. SM_NOHELP = No help
text available. US_INSUF =
     Insufficient funds. RESERVED = US_SUPV =
See supervisor.
 
19.1  Modifying and Adding Messages
 
The
ASCII version of the message file can be modified using a text editor. For
example,
if the file was modified as follows:
 
     SM_CKDIGIT = Invalid check digit.
 
the
above message would appear in the case of a check digit error, instead of
Check
digit error.  If an application program
were to be compiled with the
following
definitions:
 
#define
US_INSUF      0
#define
RESERVED      1
#define
US_SUPV       2
 
 
it
could issue the calls:
     sm_quiet_err (sm_msg_get (US_INSUF));
 
     sm_err_reset (sm_msg_get (US_SUPV));
 
 
If a
decision were made later to change the message text, the change could be
made by
modifying the message file only, without any need to modify and
recompile
the application code.
 
If any
message is missing from the message file, and a call is made to display
the
message, only the message number will be shown. Thus, if the file had no
entry
for SM_RENTRY, and an operator failed to enter data in a field in which an
entry
was required, the status line would simply display the number
corresponding
to SM_RENTRY in smerror.h .
 
User
messages may also be placed in separate message files, loaded with calls to
msgread,
and accessed in the same way as above.
 
19.2  Embedding Attributes and Key Names in
Messages
 
Several
percent escapes provide control over the content and presentation of
status
messages. They are interpreted by sm_d_msg_line, which is eventually
called
by everything that puts text on the status line (including field status
text).
The character following the percent sign must be in upper-case; this is
to
avoid conflict with the percent escapes used by printf and its variants.
Certain
percent escapes (%W, for instance; see below) must appear at the
beginning
of the message, i.e. before anything except perhaps another percent
escape.
 
   .
      If a string of the form %Annnn appears
anywhere in the message, the
      hexadecimal number nnnn is interpreted
as a display attribute to be
      applied to the remainder of the message.
The table below gives the
      numeric values of the logical display
attributes you will need to
      construct embedded attributes. If you
want a digit to appear
      immediately after the attribute change,
pad the attribute to 4 digits
      with leading zeroes; if the following
character is not a legal hex
      digit, leading zeroes are unnecessary.
   .
      If a string of the form %KKEYNAME
appears anywhere in the message,
      KEYNAME is interpreted as a logical key
mnemonic, and the whole
      expression is replaced with the key
label string defined for that key
      in the key translation file. If there is
no label, the %K is stripped
      out and the mnemonic remains. Key
mnemonics are defined in smkeys.h ;
      it is of course the name, not the
number, that you want here. The
      mnemonic must be in upper-case.
   .
      If %N appears anywhere in the message,
the latter will be presented in
      a pop-up window rather than on the
status line, and all occurrences of
      %N will be replaced by newlines.
   .
      If the message begins with a %B, JAM
will beep the terminal (using
      sm_bel) before issuing the message.
   .
      If the message begins with %W, it will
be presented in a pop-up window
      instead of on the status line. The
window will appear near the bottom
      center of the screen, unless it would obscure the current field
by so
      doing; in that case, it will appear near
the top.  If the message
      begins with %MU or %MD, and is passed to
one of the error message
      display functions, JAM will ignore the
default error message
      acknowledgement flag and process (for
%MU) or discard (for %MD) the
      next character typed.
 
Note
that, if a message containing percent escapes - that is, %A, %B, %K, %N or
%W - is
displayed before sm_initcrt or after %W is called, the percent escapes
will
show up in it.
 
            Attribute               Hex value
 
          BLACK               0 BLUE
                              1 GREEN
                              2 CYAN
                              3 RED
                              4 MAGENTA
                              5 YELLOW
                              6 WHITE
                              7
 
          B_BLACK             0 B_BLUE
                              100 B_GREEN
                              200 B_CYAN
                              300 B_RED
                              400 B_MAGENTA
                              500 B_YELLOW
                              600 B_WHITE
                              700
 
          BLANK               8 REVERSE
                              10 UNDERLN
                              20 BLINK
                              40 HILIGHT
                              80 DIM
                              1000
 
If the
cursor position display has been turned on (see sm_c_vis), the end of the
status
line will contain the cursor's current row and column. If the message
text
would overlap that area of the status line, it will be displayed in a
window
instead.
 
Note
that the processing of percent escapes in messages is done only when the
message
is displayed on the status line; they will not be expanded simply by
virtue
of having been retrieved from the message file. Also, at present, msg2bin
does no
syntax checking.
 
NAME
 
     modkey - key translation file editor
 
SYNOPSIS
 
     modkey [keyfile]
 
DESCRIPTION
 
20.1  Introduction
 
The
modkey utility provides a convenient mechanism for specifying how keys on a
particular
keyboard should operate in the JAM environment. It provides for
defining
the function, editing, and cursor control keys used by JAM, as well as
keys
that produce foreign or graphics characters. Finally, modkey can store
label
text corresponding to your keys, for use in prompts and help messages.
 
The output
of modkey is a text file called the key translation file. After being
converted
into a binary table by the key2bin utility, it is used to translate
physical
characters generated by the keyboard into logical values used by the
JAM
library. By dealing with logical keys, programs can work transparently with
a
multitude of keyboards.
 
Refer
to the Author's Guide for a table explaining the functions of the cursor
control
and editing keys. The format of the key translation file generated by
modkey
is explained in the section of this chapter on key files.
 
20.1.1  Key Translation
 
The
ASCII character set is comprised of eight-bit characters in the range 0 to
256
(hex FF). It defines characters in the ranges hex 20 to hex 7E and hex A0 to
hex FE as
data characters, and the rest as control characters. Control
characters
have mnemonic names; the character hex 1B, for instance, is usually
called
ESC or escape. See section 15.3 for a list. Note that certain computers,
such as
PRIME, "flip" the high bit of ASCII characters; on such computers,
ESC
would
be hex 9B and the letter A would be hex C1. In this document, standard
ASCII
values will be used.
 
When
you press a key, the keyboard generates either a single  ASCII data
character,
or a sequence of characters beginning with an ASCII control code. JAM
converts
these characters into logical keys before processing them. Logical keys
are
numbers between zero and 65535. Logical values between 1 and hex FF
represent
displayable data; values between hex 100 and hex 1FF are cursor
control
and editing keys; values greater than hex 1FF are function keys. Zero is
never
used. For a list of logical values, see Section 15.2.
 
Data
characters received from the keyboard are not translated. Sequences
beginning
with a control character are translated to a logical value,
representing
a data character or function key, according to the following
algorithm.
 
When a
control character is received, we search the key translation table for a
sequence
beginning with that character. If there is one, we read additional
characters
until a match with an entire sequence in the table is found, and
return
the logical value from the table. If the initial character is in the
table
but the whole sequence is not, the whole is discarded, on the assumption
that it
represents a function key that is missing from the table. Finally, if a
control
character does not begin any sequence in the table, it is returned
unchanged;
this is useful for machines such as IBM PCs that use control codes
for
displayable characters. The Programmer's Guide contains a detailed
discussion
of key translation.
 
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º                   WELCOME TO JYACC MODKEY
UTILITY                            º
º                                                                             
º
º                                                                             
º
ºUsing
this utility you can edit a previously created KEY TRANSLATION file     º
ºor
create a new one.                                                          º
º                                                                             
º
ºEnter
the name of the file you would like to create or modify in the field    º
ºbelow
and then press the "+" key. File names should be in the form
"tttkeys"  º
ºwhere
ttt is a mnemonic for the type of terminal you are using.  For example 
º
º"vt100keys"
might be used for a vt100 terminal.                               º
º                                                                             
º
ºTo
exit the MODKEY utility without proceeding further, press the "-"
key.     º
º                                                                             
º
º                                                                              º
º     File Name:  ____________________   (
Enter '<' to BACKSPACE              º
º                                         
Enter "+" to ENTER                  º
º                                          Enter "-" to EXIT )                 º
º                                                                             
º
º                                                                             
º
ºNote:
Control keys are not active in this utility. 
Instead, data keys are    º
º      used for control purposes.                                             
º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
 
 
                            Figure 1: Welcome
Screen
 
 
20.2  Executing the Utility
 
You
execute modkey by typing its name on the command line, optionally followed
by the
name of the key file you want to examine or change. If you supply a key
file
name, the main menu (Figure 2) appears at once. If you do not give a
filename,
the welcome screen (Figure 1) appears, and you may enter one there.
 
20.3  Control Keys and Data Keys
 
Since
modkey is used to define the cursor control, editing, and function keys,
these
keys do not operate in the utility. Instead, displayable data keys are
used
for these purposes. For example, the TAB key is usually used to move the
cursor
from one field to the next. But since TAB is one of the keys being
defined
with this utility, it cannot first be recognized; the data key t is used
instead.
 
Using
data keys for control purposes poses no problem since, in this utility,
data
keys may not begin a control sequence. This will become clearer when the
screens
in subsequent sections are described. The control functions that are
supported
in the modkey utility and the keys that are used to provide them are
given
in the following table:
 
          Control function    Key
 
 
          TRANSMIT            + EXIT
                              - HELP
                              ? REDRAW SCREEN
                              ! BACKSPACE
                              < BACKTAB
                              b FIELD ERASE
                              d ENTER KEYTOP
                              k TAB
                              t ERASE ALL UNPROTECTED
                              z
 
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º                                                                             
º
º                                                                              º
º                 JYACC MODKEY UTILITY MAIN
MENU                               º
º                                                                             
º
º                                                                              º
º                                                                             
º
º                 0.  Exit                                                     º
º                 1.  Help                                                     º
º                 2.  Define Cursor Control and Editing Keys                   º
º                 3.  Define Function Keys                                     º
º                 4.  Define Shifted Function Keys                             º
º                 5.  Define Application Function Keys                         º
º                 6.  Define Miscellaneous Keys                                º
º                 7.  Test Key Translation File                                º
º                                                                             
º
º                                                                             
º
º          Enter the desired option (0 - 7):
_                                 º
º                                                                             
º
º                                                                             
º
º                                                                              º
º                                                                             
º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
 
 
                              Figure 2: Main
Menu
 
 
The k
key, or ENTER KEYTOP, causes a small window to appear under the cursor in
which
you may enter the label found on the key in question on your keyboard.
This
label will be stored in the key translation file; it can be accessed by
library
functions and in status line messages, and is very useful in help
messages
telling an operator which key to press. It operates in all the screens
below
the main menu that are actually used for defining keys.
 
20.4  Welcome Screen
 
When
you invoke modkey without supplying a key file name, the welcome screen
(Figure
1) is displayed. Here you specify the key translation file to be created
or
modified, by entering it in the field labeled File Name. If you make a
mistake,
backspace over it using the < key. When finished, complete the screen
by
pressing the + key.
 
Key
translation file names should begin with a mnemonic for the type of terminal
you are
using, and end with keys. For example vt100keys might be used for a
vt100
terminal. This convention, while not mandatory, helps avoid confusion with
video
files and with other key translation files; all files distributed by JYACC
adhere
to it.
 
If the
file already exists, it is read into memory and may be modified;
otherwise,
you start from scratch. All modifications are made in memory, and
file
updates are performed only at the conclusion of the program and at your
explicit
request.
 
To exit
the modkey utility while the welcome screen is displayed, press the
"-"
key
(EXIT).
 
20.5  Main Menu
 
The
main menu shown in Figure 2 is displayed at entry to the utility, and
whenever
you return from a lower-level screen. You select an option by typing
the
corresponding number. For example, to test the key translation file, press
"7".
If you make an invalid selection, an error message will appear; acknowledge
it by
pressing the space bar.  The functions
on the main menu are described in
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º                                                     
                        º
º                 JYACC MODKEY UTILITY EXIT
SCREEN                             º
º                                                                             
º
º                                                                              º
º                                                                             
º
º                                                                             
º
º                                                                         
    º
º            Enter:   _    'S' to save data in
a file                          º
º                          'E' to exit the
utility without saving data         º
º                          '-' to return to the
main menu                      º
º                                                                              º
º                                                                             
º
º                                                                             
º
º                   File Name:   
____________________                         º
º                                                                             
º
º                                                                             
º
º               Special Keys:  + 
ENTER (save changes in file)                 º
º                              -  EXIT 
(return to main menu)                 
º
º                              <  BACKSPACE                                    º
º                                                                              º
º                                                                             
º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
 
 
                             Figure 3: Exit
Screen
 
 
subsequent
sections.
 
20.6  Exiting the Utility
 
To exit
modkey, press 0 on the main menu. This causes the exit screen (Figure 3)
to be
invoked. This screen initially contains a single field into which you
enter
s, e, or -.  To save the key translation
file on disk, enter "S" or "s".
When
this is done, the file name entered in the Welcome Screen appears; you may
change
it if you wish, and press + to write it to disk. To exit the utility
without
saving the file, enter e. If you press -, the main menu will reappear,
and you
may make additional changes to the key translation file.
 
20.7  Help Screen
 
The
help screen may be selected from the main menu by pressing "1"; it
appears
in
Figure 4. In addition to displaying useful information, this screen may be
used to
test out the kinds of keystroke entry that will be required on
subsequent
screens in this utility.  There are two
types of keys: those that
generate
a single ASCII character, and those that generate a sequence of
characters.
When a sequence is generated, the first character is always an ASCII
control
character. To see the characters generated by a particular key, type
that
key twice while the help screen is displayed. (Different keys generate
different
numbers of characters; when you press the key twice, the program can
sense
the pattern.)
 
When
the key is pressed the first time, the characters produced will be shown
following
CHARACTERS GENERATED. When the key is pressed the second time and
recognized,
the sequence representing the key will appear following KEY STROKE.
 
It is
sometimes desirable to designate a sequence of keystrokes to serve a
particular
purpose. For example, on a system with a small number of function
keys,
one may choose to implement the function keys F1 through F9 with the
sequence
control-F n where n is a single digit. This sequence of keystrokes can
be
interpreted by JAM as a single key.
 
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍJYACC
MODKEY - HELP SCREENÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º                                                                               º
ºThere
are two types of keys on your keyboard--Data keys and Control keys.  Dataº
ºkeys
will generate a single printable character when pressed.  Control keys    º
ºwill
generate a sequence of one or more characters, the first of which is non- º
ºprintable.                                                                    
º
º                                                                              
º
ºIn
subsequent screens, you will be asked to designate the control keys that    º
ºshould
be used for various functions.  For
example, one control key will be    º
ºdesignated
as EXIT, another as PF1.  To assign a
key to a function, the key    º
ºmust
be pressed twice in succession.  Try
this in the field below.             º
º                                                                              
º
º                            Press key
twice:                                  
º
º
CHARACTERS GENERATED   ___ ___ ___ ___ ___
___ ___ ___ ___ ___ ___ ___        º
º           KEY STROKE   ___ ___ ___ ___ ___ ___                                º
º                                                                              
º
º                 Use the "+" or
"-" keys to exit to the main menu              º
º                                                                              
º
ºWhen
done correctly, the characters generated by the key will be shown in      º
ºthe
KEY STROKE field.  As each key is typed,
its characters are shown in the   º
ºCHARACTERS
GENERATED field.                                                    º
º                                                                              
º
ºIf you
get out of sync. press the space bar repeatedly until a message appears.º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
 
 
                             Figure 4: Help
Screen
 
 
To
demonstrate this, type control-F 1 into the help screen, by pressing the F
key
while holding the CTRL key down, releasing both, and then pressing the 1
key.
The sequence ACK 1 will appear following CHARACTERS GENERATED. Repeating
the
sequence will duplicate the ACK 1 after CHARACTERS GENERATED column, and
also
display ACK 1 following KEY STROKE.
 
If a
printable ASCII character is pressed as the first key in a sequence, modkey
immediately
displays it in the KEY STROKE column. If a non-printable character
is
pressed and then a second, different character is pressed, modkey will assume
that a
sequence is being tried and will continue displaying these characters in
the
CHARACTERS GENERATED field. However, if the sequence gets to be longer than
six
characters without starting to repeat, modkey will display Sequence too
long.
You must acknowledge this message by pressing the space bar. If you
realize
you have made a mistake in entering a key or key sequence and do not
wish to
duplicate it, press any key repeatedly until you see Sequence too long.
After
acknowledging the message, you can start over.
 
To exit
from the help screen and return to the main menu, press the "-" key
(EXIT)
as the first character in a sequence.
 
20.8  Defining Cursor Control and Editing Keys
 
This
function allows the operator to specify the keys that should be used for
the
various cursor control and editing operations. When 2 is selected from the
main
menu, the screen shown in Figure 5 appears. This screen has a field for
each of
the cursor control and editing functions supported by JAM. Each function
has a
logical value defined in the file smkeys.h . The purpose of this screen is
to
allow the operator to specify a sequence of characters for each function key.
20.8.1  Assigning a Key to a Function
 
To
designate a key for a particular cursor control or editing function, position
the
cursor after that function's name and press the key twice. For example, to
designate
a key as the EXIT key, press it twice in succession while the cursor
is in
the EXIT field. When modkey recognizes the second keystroke, the sequence
 
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º       JYACC MODKEY - CURSOR CONTROL AND
EDITING KEY DEFINITION SCREEN         º
º                                                                        
      º
ºEXIT        ___ ___ ___ ___ ___ ___       LEFT ARROW  ___ ___ ___ ___ ___ ___  º
ºTRANSMIT    ___ ___ ___ ___ ___ ___       RIGHT ARROW ___ ___ ___ ___ ___
___  º
ºHELP        ___ ___ ___ ___ ___ ___       UP ARROW    ___ ___ ___ ___ ___ ___ 
º
ºFORM
HELP   ___ ___ ___ ___ ___ ___       DOWN ARROW  ___ ___ ___ ___ ___ ___  º
ºLOCAL
PRINT ___ ___ ___ ___ ___ ___       CHAR
DELETE ___ ___ ___ ___ ___ ___  º
ºNEW
LINE    ___ ___ ___ ___ ___ ___       INSERT MODE ___ ___ ___ ___ ___
___  º
ºTAB         ___ ___ ___ ___ ___ ___       FIELD ERASE ___ ___ ___ ___ ___
___  º
ºBACK
TAB    ___ ___ ___ ___ ___ ___       ERASE ALL   ___ ___ ___ ___ ___ ___ 
º
ºHOME        ___ ___ ___ ___ ___ ___       INSERT LINE ___ ___ ___ ___ ___
___  º
ºBACK
SPACE  ___ ___ ___ ___ ___ ___       DELETE LINE ___ ___ ___ ___ ___
___  º
ºLAST
FIELD  ___ ___ ___ ___ ___ ___       ZOOM        ___ ___ ___ ___ ___ ___ 
º
ºSCROLL
UP   ___ ___ ___ ___ ___ ___       REFRESH     ___ ___ ___ ___ ___ ___ 
º
ºSCROLL
DOWN ___ ___ ___ ___ ___ ___                                            º
º                                                                              
º
º      Each key or sequence of keys must be
pressed twice in succession.        º
º                                                                               º
º
Special Keys:   +  ENTER     
t  TAB             z  ERASE
ALL                 º
º                 -  EXIT       b  BACKTAB         !  REDRAW
SCREEN             º
º                 ?  HELP       d  DELETE ENTRY    k  SET KEYTOPS               º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
 
 
                          Figure 5: Cursor Key
Screen
 
 
of
characters generated by the key will be displayed, and the cursor will move
to the
next field.
 
It is
not permissible to define a printable ASCII character as a cursor control
or
editing key. This means that the sequence of characters generated by the key
must
start with an ASCII control character. If this is not the case, an error
will be
displayed. An error will also be displayed if the sequence of characters
matches
a sequence assigned to another function.
 
When a
field is left empty, its corresponding function will not operate in
programs
using the Keyboard Translation file being defined. If your program has
no use
for a particular key (such as GO TO LAST FIELD), you may leave that entry
blank
on this screen. However, certain keys are required for the proper
operation
of jxform, and should be specified if you are creating a table for use
with
it. A list of the required keys is given in Section 15.2.
 
Situations
may arise in which you do not press the same key twice in succession.
This
will be evident because modkey will not display the characters that were
generated.
To recover, press the space bar repeatedly until the message Sequence
too
long appears. Then, after acknowledging the message with the space bar, you
may
enter the correct keystrokes.
 
To
define a key label or keytop for any key on this screen, press k with the
cursor
at the beginning of the key sequence. A small, borderless window will
appear,
bearing the word KEYTOP:. In the following field, you should type
whatever
appears on top of the key on your keyboard, using the < key to rub out
mistakes.
When done, press + to save the label, or - to discard it.
 
20.8.2  Assigning a Sequence of Keys to a Function
 
It is
sometimes desirable to designate a sequence of keystrokes to serve a
particular
purpose. For example, on a keyboard with few function keys, one might
implement
the function keys PF1 through F9 with the sequences control-F 1
through
control-F 9.
 
ÉÍÍÍÍÍÍÍÍÍÍÍÍJYACC
MODKEY - PROGRAM FUNCTION KEY DEFINITION SCREENÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º                                                                              º
º   PF1    
___ ___ ___ ___ ___ ___       
PF13    ___ ___ ___ ___ ___ ___     º
º   PF2    
___ ___ ___ ___ ___ ___       
PF14    ___ ___ ___ ___ ___ ___     º
º   PF3    
___ ___ ___ ___ ___ ___        PF15    ___ ___ ___ ___ ___ ___     º
º   PF4    
___ ___ ___ ___ ___ ___       
PF16    ___ ___ ___ ___ ___ ___     º
º   PF5    
___ ___ ___ ___ ___ ___       
PF17    ___ ___ ___ ___ ___ ___     º
º   PF6    
___ ___ ___ ___ ___ ___       
PF18    ___ ___ ___ ___ ___
___     º
º   PF7    
___ ___ ___ ___ ___ ___       
PF19    ___ ___ ___ ___ ___ ___     º
º   PF8    
___ ___ ___ ___ ___ ___       
PF20    ___ ___ ___ ___ ___ ___     º
º   PF9    
___ ___ ___ ___ ___ ___       
PF21    ___ ___ ___ ___ ___
___     º
º   PF10   
___ ___ ___ ___ ___ ___       
PF22    ___ ___ ___ ___ ___ ___     º
º   PF11   
___ ___ ___ ___ ___ ___       
PF23    ___ ___ ___ ___ ___ ___     º
º   PF12   
___ ___ ___ ___ ___ ___       
PF24    ___ ___ ___ ___ ___ ___     º
º                                                                             
º
º                                                                             
º
º        Each key or sequence of keys must be
pressed twice in succession      º
º                                                                             
º
ºSpecial
keys:   +  ENTER      ?   HELP            k   SET
KEYTOPS             º
º                -  EXIT       d   DELETE ENTRY    !   REDRAW SCREEN           º
º                t  TAB        z  
ERASE ALL                                   º
º                b  BACKTAB                                                    º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
 
 
                         Figure 6: Function Key Screen
 
 
One
assigns a sequence of keystrokes to a function in much the same way as one
assigns
individual keys. The sequence is entered once in its entirety and is
then
repeated. Upon successful completion, the characters generated on behalf of
the
sequence are displayed.
 
If you
do not press the same key sequence twice, modkey will not display the
generated
characters. To recover, press the space bar repeatedly until the
message
Sequence too long appears. At this point, you may enter the correct
keystrokes.
 
20.9  Defining Function Keys
 
This
function allows the operator to specify the keys that should be used as the
function
keys (PF1 - PF24). When 3 is selected from the main menu, the screen of
Figure
6 appears.  This function works exactly
like its counterpart for defining
the
cursor control and editing keys described in Section 20.8. You designate a
key or
key sequence as a function key by pressing it twice, with the cursor in
the
field to which the sequence applies. For example, to define control-F as the
PF2
key, position the cursor to the PF2 field using t and b, and type control-F
twice
in succession.
 
To save
the changes made in this screen and return to the main menu, press the +
key. To
return to the main menu without saving changes, use the "-" key.
 
To
define a key label or keytop for any key on this screen, press k with the
cursor
at the beginning of the key sequence. A small, borderless window will
appear,
bearing the word KEYTOP:. In the following field, you should type
whatever
appears on top of the key on your keyboard, using the < key to rub out
mistakes.
When done, press + to save the label, or - to discard it.
 
20.10  Defining Shifted Function Keys
 
This
function allows the operator to specify the keys that should be used as the
shifted
function keys (SPF1 - SPF24). When 4 is selected from the main menu, the
screen
depicted in Figure 7 appears.
 
ÉÍÍÍÍÍÍÍÍÍJYACC
MODKEY - SHIFTED PROGRAM FUNCTION KEY DEFINITION SCREENÍÍÍÍÍÍÍÍ»
º                                                                             
º
º  SPF1    
___ ___ ___ ___ ___ ___      
SPF13    ___ ___ ___ ___ ___ ___     º
º  SPF2    
___ ___ ___ ___ ___ ___      
SPF14    ___ ___ ___ ___ ___ ___     º
º  SPF3    
___ ___ ___ ___ ___ ___      
SPF15    ___ ___ ___ ___ ___
___     º
º  SPF4    
___ ___ ___ ___ ___ ___      
SPF16    ___ ___ ___ ___ ___ ___     º
º  SPF5    
___ ___ ___ ___ ___ ___      
SPF17    ___ ___ ___ ___ ___ ___     º
º  SPF6    
___ ___ ___ ___ ___ ___      
SPF18    ___ ___ ___ ___ ___
___     º
º  SPF7    
___ ___ ___ ___ ___ ___      
SPF19    ___ ___ ___ ___ ___ ___     º
º  SPF8    
___ ___ ___ ___ ___ ___      
SPF20    ___ ___ ___ ___ ___ ___     º
º  SPF9    
___ ___ ___ ___ ___ ___      
SPF21    ___ ___ ___ ___ ___
___     º
º  SPF10   
___ ___ ___ ___ ___ ___      
SPF22    ___ ___ ___ ___ ___ ___     º
º  SPF11   
___ ___ ___ ___ ___ ___      
SPF23    ___ ___ ___ ___ ___ ___     º
º  SPF12   
___ ___ ___ ___ ___ ___      
SPF24    ___ ___ ___ ___ ___
___     º
º                                                                             
º
º                                                                             
º
º        Each key or sequence of keys must be
pressed twice in succession      º
º                                                                             
º
ºSpecial
keys:   +  ENTER      ?   HELP            k   SET
KEYTOPS             º
º                -  EXIT       d   DELETE ENTRY    !   REDRAW SCREEN           º
º                t  TAB        z   ERASE ALL                                   º
º                b  BACKTAB                                                    º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
 
 
                     Figure 7: Shifted
Function Key Screen
 
 
This
function works exactly like its counterpart for defining the function keys
described
in Section 20.9. You designate a key (or key sequence) as a shifted
function
key by pressing it twice with the cursor in the field to which the
sequence
applies. For example, to define the sequence of keys control-B 2 as the
shifted
PF2 key, position the cursor to the SPF2 field, using t and b, and type
control-B
2 twice.
 
To save
changes made in this screen and return to the main menu, press the + key
as the
first character in a sequence. To return to the main menu without saving
the
changes, use the "-" key.
 
To
define a key label or keytop for any key on this screen, press k with the
cursor
at the beginning of the key sequence. A small, borderless window will
appear,
bearing the word KEYTOP:. In the following field, you should type
whatever
appears on top of the key on your keyboard, using the < key to rub out
mistakes.
When done, press + to save the label, or - to discard it.
 
20.11  Defining Application Function Keys
 
This
function allows the operator to specify the keys that should be used as the
application
function keys (APP1 - APP24). When 5 is selected from the main menu,
the
screen of Figure 8 appears.  This
function works exactly like its
counterpart
for defining the function keys described in Section 20.9.
 
To
define a key label or keytop for any key on this screen, press k with the
cursor
at the beginning of the key sequence. A small, borderless window will
appear,
bearing the word KEYTOP:. In the following field, you should type
whatever
appears on top of the key on your keyboard, using the < key to rub out
mistakes.
When done, press + to save the label, or - to discard it.
 
20.12  Defining Miscellaneous Keys
 
On this
screen, you can specify logical keys not present on the other screens,
and
define alternate control sequences for keys defined elsewhere. When 6 is
selected
from the main menu, the screen of Figure 9 displayed.  This function
works
in a similar manner to its counterpart for defining the cursor control and
ÉÍÍÍÍÍÍÍÍÍÍÍÍJYACC
MODKEY - APPLICATION KEY DEFINITION SCREENÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º                                                                              º
º  APP1    
___ ___ ___ ___ ___ ___      
APP13    ___ ___ ___ ___ ___ ___     º
º  APP2    
___ ___ ___ ___ ___ ___      
APP14    ___ ___ ___ ___ ___ ___     º
º  APP3    
___ ___ ___ ___ ___ ___      
APP15    ___ ___ ___ ___ ___
___     º
º  APP4    
___ ___ ___ ___ ___ ___      
APP16    ___ ___ ___ ___ ___ ___     º
º  APP5    
___ ___ ___ ___ ___ ___      
APP17    ___ ___ ___ ___ ___ ___     º
º  APP6    
___ ___ ___ ___ ___ ___      
APP18    ___ ___ ___ ___ ___
___     º
º  APP7    
___ ___ ___ ___ ___ ___      
APP19    ___ ___ ___ ___ ___ ___     º
º  APP8    
___ ___ ___ ___ ___ ___      
APP20    ___ ___ ___ ___ ___ ___     º
º  APP9    
___ ___ ___ ___ ___ ___      
APP21    ___ ___ ___ ___ ___ ___     º
º  APP10   
___ ___ ___ ___ ___ ___      
APP22    ___ ___ ___ ___ ___ ___     º
º  APP11   
___ ___ ___ ___ ___ ___      
APP23    ___ ___ ___ ___ ___ ___     º
º  APP12   
___ ___ ___ ___ ___ ___      
APP24    ___ ___ ___ ___ ___ ___     º
º                                                                             
º
º                                                                             
º
º        Each key or sequence of keys must be
pressed twice in succession      º
º                                                                              º
ºSpecial
keys:   +  ENTER      ?   HELP            k   SET
KEYTOPS             º
º                -  EXIT       d   DELETE ENTRY    !   REDRAW SCREEN           º
º                t  TAB        z   ERASE ALL                                   º
º                b  BACKTAB                                                    º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
 
 
                        Figure 8: Application
Key Screen
 
 
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍJYACC
MODKEY - MISCELLANEOUS KEY DEFINITION SCREENÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º                                                                              
º
º      KEY STROKE        LOGICAL VALUE          
KEY STROKE       LOGICAL VALUE º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º___
___ ___ ___ ___ ___   ___________     ___ ___ ___ ___ ___ ___   ___________º
º                                                                              
º
º                    LOGICAL VALUE DISPLAY MODE
IS:________                     º
º                                                                              
º
ºSpecial
keys:  +  ENTER       ?  HELP            v  TAB TO VALUE
FIELD         º
º               -  EXIT        !  REDRAW SCREEN   k  SET KEYTOPS                º
º               t  TAB         d  DELETE ENTRY    <  BACKSPACE IN VALUE
FIELD   º
º               b  BACKTAB     z 
ERASE ALL       c  CHANGE MODE                º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
 
 
                      Figure 9: Miscellaneous
Keys Screen
 
 
editing
keys described in Section 20.8. However, on this screen you must define
the
logical values as well as the sequences that produce them. (On all other
screens,
the logical value was implicitly determined by the field with which the
sequence
was associated.)
 
The
miscellaneous key definition screen has two columns for each key being
defined,
labeled KEY STROKE and LOGICAL VALUE. You enter a key or key sequence
into
these fields twice in succession, and modkey displays the generated
characters;
then the cursor moves to the LOGICAL VALUE column for that key.
Here,
you must enter the logical value to be returned when JAM recognizes the
sequence
of characters you have just entered. You may get to the logical value
field
directly by pressing v in the corresponding KEY STROKE field.
 
20.12.1  Entering the Logical Value
 
Logical
values are numbers, so you will be entering printable ASCII data into
this
field. This is unlike most other fields, where data characters are not
allowed
or are given special meaning (such as "b" representing BACKTAB). When
entering
logical values, three keys are allowed in addition to the data keys
necessary
to enter the value:
 
   .
      The + key (TRANSMIT) signifies that the
logical value just typed is
      correct and should be used. When it is
pressed, modkey will first check
      the logical value for errors. If no
errors are detected, the cursor
      will tab to the next field; otherwise,
an error message will appear.
   .
      The - key (EXIT) means that the logical
value just typed is incorrect
      and should be ignored. The cursor will
go to the next field and the
      logical value will be reset to what
existed before the field was
      entered. If the logical value field was
previously empty, it will be
      set to zero.
   .
      The < key (BACKSPACE) backs up the
cursor one position at a time, so
      that corrections to the logical value
can be made. It erases previously
      entered data as it moves.
 
20.12.2  Logical Value Display and Entry Modes
 
Logical
values are displayed, and may be entered, in any of four modes. The
current
mode is displayed on the screen following the label LOGICAL VALUE
DISPLAY
MODE. It may be changed by typing c as the first character of a sequence
while
the cursor is in any of the KEY STROKE fields on the screen. When the
miscellaneous
keys screen is first invoked, the mode is hexadecimal. It cycles
through
all four modes when you press the c key. The four modes are:
 
   decimal    
In decimal mode, you enter logical values as decimal numbers.
               If a non-digit is entered or
the logical value is zero, an
               error will be displayed.
   octal      
In octal mode, you enter logical values as octal numbers (base
               8). If a non-octal digit is
entered or the logical value is
               zero, an error will be
displayed.
   hexadecimal In hexadecimal mode, you enter
logical values as hexadecimal
               (base 16) numbers. If a non-hex
digit is entered or the
               logical value is zero, an error
will be displayed. The error
               must be acknowledged by
pressing the space bar.
   mnemonic   
In mnemonic mode, you enter the mnemonic associated with any
               of the logical values stored in
the file smkeys.h . For
               example, if EXIT is entered
into the Logical Value field, the
               logical value of the EXIT key,
hex 103, will be used. If an
               incorrect mnemonic is entered,
an error will be displayed
               which must be acknowledged by pressing the space bar. For a
               list of valid mnemonics, press
the "?" key while the cursor is
               in a logical value field.
 
Entering
the logical value as a mnemonic is preferable, as you are less likely
to
mistake the value you want. Using the numeric modes, it is possible to define
logical
key values other than those present in smkeys.h , but this should be
done
cautiously. You should avoid the range 100 hex through 1FF hex, which is
reserved
for future use by JYACC. Also, for portability's sake, the values
should
be small enough to fit in a two-byte integer, i.e. less than 65536 (10000
hex).
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍJYACC
MODKEY - TEST KEY TRANSLATION FILEÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º                                                                                º
º This
screen is used to test out the Key Translation file being defined.        º
º                                                                               
º
º To do
this, press any key in the field below. The characters generated by the  º
º key
will be displayed along with its logical value.                            º
º                                                                               
º
º                                                                                º
º          KEY STROKE             LOGICAL VALUE           KEYTOP                
º
º                                                                               
º
º   ___ ___ ___ ___ ___ ___       _____________        ________________         
º
º                                                                               
º
º         LOGICAL VALUE DISPLAY MODE IS:
________                               
º
º                                                                                º
ºIf a
multiple key sequence has been defined, the entire sequence must be enteredº
ºfor
the logical value to be displayed.  Once
the sequence is started, the cursorº
ºwill
be turned off until it is completed.                                       º
º                                                                               
º
ºIf you
get out of sync. press the space bar repeatedly until a message appears. º
º                                                                                º
º                    Special Keys:  + 
ENTER                                     º
º                                   -  EXIT                                      º
º                                   c  CHANGE MODE                               º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
 
 
                             Figure 10: Test
Screen
 
 
To
define a key label or keytop for any key on this screen, press k with the
cursor
at the beginning of the key sequence. A small, borderless window will
appear,
bearing the word KEYTOP:. In the following field, you should type
whatever
appears on top of the key on your keyboard, using the < key to rub out
mistakes.
When done, press + to save the label, or - to discard it.
 
20.12.3  Returning to the Main Menu
 
To save
changes made in this screen and return to the main menu, press the + key
as the
first character in a sequence while the cursor is in a KEY STROKE field.
To
discard the changes and return to the main menu, use the - key.
 
20.13  Test Keyboard Translation File
 
This
function allows you to test out your new key translation file. When 7 is
selected
from the main menu, the screen of figure 10 is displayed. This screen
has two
fields labeled KEY STROKE and LOGICAL VALUE. You enter a keystroke (or
sequence
of keystrokes) that has been defined in another screen, and modkey will
display
the logical value of that key. The key or keys need only be pressed
once,
since the table is being tested for how it will behave when used in a real
application.  If a key sequence forms only part of a
previously specified
sequence,
modkey will wait for another key until a sequence is matched, or until
it
determines that no match is possible. In the latter case, the message Key not
defined
will appear.
 
The
logical value can be displayed in any of the four modes (decimal, octal,
hexadecimal,
or mnemonic). To change modes, press c as the first character in a
sequence.
To exit the screen and return to the main menu, use -. Help text can
be
obtained by pressing "?".
 
ERROR
CONDITIONS
 
Invalid
entry. Cause: You have typed a key that is not on the menu. Corrective
                      action: Check the
instructions on the screen and try
                      again.
Key
sequence is too long. Cause: You have typed more than six keys wihout
                      repeating any.
Corrective action: Key sequences for
                      translation may be at
most six characters long. Choose a
                      shorter sequence.
 
Invalid
first character. Cause: A multi-key sequence must begin with a control
                      character. Corrective
action: Begin again, using a control
                      character.
 
Invalid
mnemonic - press space for list Cause: In the miscellaneous keys screen,
                      you have typed a
character string for logical value that
                      is not a logical key
mnemonic. Corrective action: Peruse
                      the list, then correct
the input.
 
Invalid
number - enter <decimal>, 0<octal> or 0x<hex> Cause: In the
                      miscellaneous keys
screen, you have typed a malformed
                      numeric key code.
Corrective action: Correct the number,
                      or use a mnemonic.
 
Cannot
create output file. Cause: An output file could not be created, due to
                      lack of permission or
perhaps disk space. Corrective
                      action: Correct the file
system problem and retry the
                      operation.
 
Key
sequence does not repeat. Cause: You have typed a key sequence that failed
                      to repeat a string of
six characters or less. Corrective
                      action: Retry the sequence, or use a shorter one.
 
Cannot
accept NUL as a key. Cause: The ASCII NUL character (binary 0) cannot be
                      used in a key
translation sequence, because it is used
                      internally to mark the
end of a sequence. Corrective
                      action: Use another key.
 
Key
previously defined as %s Key conflicts with %s Cause: You have typed a key
                      sequence that has
already been assigned to another key, or
                      that is a substring of a
previously assigned sequence.
                      Corrective action: Use a
different key or sequence, or
                      reassign the other.
 
NAME
 
     msg2bin - convert message files to binary
 
SYNOPSIS
 
     msg2bin [-pv] [-eextension] [-ooutfile]
          messages [messages ...]
 
DESCRIPTION
 
The
msg2bin utility converts ASCII message files to a binary format for use by
JAM
library routines. The command options are interpreted as follows:
 
   -e   
Give the output files the extension that follows the option letter,
         rather than the default bin.
   -o   
Place all the output in a single file, whose name follows the option
         letter.
   -p   
Place each output file in the same directory as the corresponding
         input file.
   -v   
Print the name of each message file as it is processed.
 
The
input to this utility files are text files containing named messages, either
distributed
by JYACC for use with the JAM library or defined by application
programmers.
For information about the format of ASCII message files, see the
section
on message files in this chapter.
 
The
message file and msg2bin utility provide three different services to
application
designers. First, the error messages displayed by JAM library
functions
may be translated from English to another language, made more verbose,
or
altered to suit the taste of the application designer. Second, error messages
for use
by application routines may be collected in a message file and retrieved
with
the msg_get library function; this provides a centralized location for
application
messages and saves space. Finally, the standard library messages
(and
user messages) may be made memory-resident, to simplify and speed up the
initialization
procedure (at some added cost in memory). The bin2c utility
converts
the output of this utility to a source file suitable for inclusion in
the
application program.
 
ERROR
CONDITIONS
 
File
'%s' not found. Cause: An input file was missing or unreadable. Corrective
                            action: Check the
spelling, presence, and
                            permissions of the
file in question.
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                            for its needs.
Corrective action: None.
 
Bad tag
in line: %s Cause: The input file contained a system message tag unknown
                            to the utility.
Corrective action: Refer to
                            smerror.h  for
a list of tags, and correct the
                            input.
 
Missing
'=' in line: %s Cause: The line in the message had no equal sign
                            following the tag.
Corrective action: Correct the
                            input and re-run the utility.
 
NAME
 
     Setup file - JAM configuration variables
 
DESCRIPTION
 
JAM
supports a number of configuration or setup variables, which provide a
convenient
way for you to control many operating parameters of the JAM run-time
system
and utilities. They include all the environment variables supported in
Release
3. The library function smsetup, which is automatically called from
initcrt,
reads in binary setup files and sets up the run-time environment to
correspond.
 
You can
use configuration variables by creating a text file of name-value pairs
as
described in this section, and then running the var2bin utility to convert it
to a
binary format.
 
22.1  The Two Setup Files
 
There
are two files in which you may place setup variables. The first is named
by the
system environment variable SMVARS. If your operating system does not
support
an environment, this file will be in a hard-coded location; SMVARS
itself
may not be put in a setup file. The second file is named by the SMSETUP
configuration
variable, which may be defined in the SMVARS file or in the system
environment.
 
Any
setup variable may occur in either file. If a variable occurs in both, the
one in
SMSETUP takes precedence. Certain variables may also be specified in the
system
environment, which takes precedence over any values found in the files;
they
are noted in the table of Section 22.3. It is possible to specify all the
variables
necessary to run JAM in the environment, without constructing a setup
file.
 
Typically,
the SMVARS file will contain installation-wide parameters, while the
SMSETUP
file will contain parameters belonging to an individual or project.
 
22.2  Input File Line Format
 
Each
line of the input file has the form
 
     name = value
 
where
name is one of the keywords listed below, the equal sign is required, and
value
depends on the name. If a line gets too long, it may be continued onto the
next by
placing a backslash \ at the end. Lines beginning with a pound sign #
are
treated as comments, i.e. ignored.
 
Certain
variables, notably the JAM hardware configuration files, have values
that
depend on the type of terminal you are using. For those variables, there
may be
many entries in the input file, of the form
 
     name = (term1:term2:...:termN)value
 
This
signifies that name has value for terminals of type term1, term2, etc. It
is not
necessary to give terminal names if you are only interested in one file.
You may
also provide, along with a number of terminal-qualified entries, one
entry
that is not terminal-qualified; this will serve as the default. It must
come
last. Variables that are terminal-dependent are noted below.
 
Certain
variables, particularly those that provide parameters for library
functions,
have keywords to the right of the equal sign. When these keywords are
all
distinct, they may be separated by blanks, commas, or semicolons, just as
you
please. But when a certain keyword may appear more than once, so that
parameter
position is important, then blanks or commas separate the list of
keywords
constituting one parameter, while semicolons separate parameters. The
semicolon
has higher precedence than blank or comma.
 
22.3  Setup Variables
 
Broadly
speaking, setup variables fall into three classes: those that specify
other
configuration files; those that are essentially parameters to library
routines;
and those that specify default file extensions.
 
Three
variables are required: SMMSGS, SMVIDEO, and SMKEY. They specify,
respectively,
the error message, video configuration, and keyboard translation
files
that the JAM run-time system requires in order to function. In the
following
list, an explanation and example is given for each variable.
 
22.3.1  Configuration File Setups
 
SMKEY          Pathname of the binary file
containing a key translation table
               for your terminal, used by the
JAM run-time system. Refer also to
               the key2bin and modkey
utilities, and the library functions
               keyinit and getkey.
               This variable is
terminal-dependent, and may be overridden by the
               system environment. It may not
be omitted.
              
SMKEY=(vt100:x100)/usr/jyacc/config/vt100keys.bin
SMLPRINT       Operating system command used to print the file generated by
the
               local print key (LP). It must
contain the string %s at the place
               where the filename should go.
               This variable may be overridden
by the system environment. It is
               optional.
               SMLPRINT = print %s
SMMSGS         Pathname of the binary file
containing error messages and other
               printable strings used by the
JAM run-time system and utilities.
               Refer also to the msg2bin utility and the library functions
               msg_read and msg_get.
               This variable is
terminal-dependent, and may be overridden by the
               system environment. It may not
be omitted.
               SMMSGS =/usr/jyacc/config/msgfile.bin
SMPATH         List of directories in which the JAM
run-time system should
               search for screens and JPL
procedures. Place a vertical bar |
               between directory paths. Refer
to the library procedure r_window.
               This variable is
terminal-dependent, and may be overridden by the
               system environment. It is
optional.
              
SMPATH=/usr/app/forms|/usr/me/testforms
SMSETUP        Gives the pathname of an additional
binary file of setup
               variables.
               This variable is
terminal-dependent, and may be overridden by the
               system environment. It is
optional.
               SMSETUP = mysetup.bin
SMVIDEO        Pathname of the binary file containing
video control sequences
               and parameters used by the JAM
run-time system. Refer also to the
               vid2bin utility, the Video
section of this chapter, and the
               library function vinit.
               This variable is terminal-dependent, and may be overridden
by the
               system environment. It may not
be omitted.
              
SMVIDEO=(vt100:x100)/usr/jyacc/config/vt100vid.bin
 
22.3.2  Setups for Library Routines
 
Many of
the variables in this class have display attributes as parameters. Here
is a
table of display attribute keywords:
 
     RED      
BLUE      HILIGHT   BLINK
     YELLOW   
GREEN     UNDERLN   DIM
     MAGENTA  
CYAN      BLANK
     BLACK    
WHITE     REVERSE
For a
single display attribute, you may select from this table one color and any
number
of other attributes. If a variable has more than one display attribute
parameter,
separate the parameters with semicolons, but separate the ored
attributes
for each parameter with blanks or commas. See SMCHEMSGATT, below, for
an
example.
 
The
explanations of keywords in this section are terse; full details are
available
on the page in the Programmer's Guide dedicated to the function in
question.
Mnemonics are the same in both places, except that prefixes may have
been
deleted for the setup keywords. All these variables are optional, and most
cannot
be overridden in the system environment.
 
   SMCHEMSGATT    Supplies two display attributes for error messages; see
                  ch_emsgatt. Two parameters,
each consisting of one color
                  and any number of other
attributes, from the table above.
                  SMCHEMSGATT = RED; RED,
REVERSE
   SMCHQMSGATT    Supplies a default display attribute for query messages;
                  see ch_qmsgatt. One
parameter consisting of one color and
                  any number of other
attributes, from the table above.
                  SMCHQMSGATT = CYAN, HILIGHT
   SMCHUMSGATT    Supplies a border style and three default display
                  attributes for certain
FORMAKER windows. The first border
                  style parameter is a number
between 1 and 9; the next three
                  are display attributes. See
ch_form_atts.
                  SMCHUMSGATT = 0;
HILIGHT  REVERSE  BLUE; WHITE; 0
   SMCHFORMATTS   Supplies a border style and three default display
                  attributes for certain JAM
windows. The border style,
                  first, is a number between 1
and 9; the next three are
                  display attributes. See
ch_form_atts.
                  SMCHFORMATTS = 2; BLUE; BLUE
REVERSE; YELLOW
   SMCHSTEXTATT   Supplies a default display attribute for field status text;
                  see ch_stextatt. A single
display attribute.
                  SMCHSTEXTATT=WHITE REVERSE
   SMDICNAME      Gives the pathname of the application's data dictionary.
                  See the library function
dicname. May be overridden in the
                  system environment.
                 
SMDICNAME=/usr/app/dictionary.dat
   SMDWOPTIONS    Turns delayed write on or off; passed to the library
                  function dw_options, q.v.
Value is either ON or OFF.
                  SMDWOPTIONS=OFF
   SMEROPTIONS    Error message acknowledgement options, as documented at
                  er_options. First comes an
acknowledgement character, which
                  you may put in single quotes
or as an ASCII mnemonic. Next
                  is the discard keyboard
input flag, either DISCARD or
                  USE_KEY. Finally comes the
reminder window flag, either
                  YES_WIND or NO_WIND.
                  SMEROPTIONS=' '; DISCARD;
YES_WIND
   SMFCASE        Controls the case-sensitivity of filename comparisons when
                  the run-time system searches
for files named in JAM control
                  strings. The keyword INSENS
means case will be ignored, and
                  SENS means the search is
case-sensitive. The default is
                  SENS. See fcase.
                  SMFCASE=INSENS
   SMFLIBS        A list of pathnames of screen libraries that are to remain
                  open while JAM is active.
The names are separated by
                  blanks, commas, or
semicolons. See r_window and l_open.
                  SMFLIBS=/usr/app/genlib
/usr/me/mylib
   SMINDSET       Scrolling and shifting indicator options, as for the
                  library function sm_ind_set.
The first parameter tells
                  which indicators should be
displayed: NONE, SHIFT, SCROLL,
                  or BOTH. The second controls
the style of scrolling
                  indicators: FLDENTRY,
FLDLEFT, FLDRIGHT, or FLDCENTER.
                  SMINDSET = BOTH FLDCENTER
 
   SMINICTRL      May occur many times. Each occurrence binds a function key
                  to a control string, which
the JAM run-time system will use
                  in the absence of a control
string in the screen. To
                  disable a JYACC-supplied default function key, bind it to
a
                  caret function that does
nothing.
                  SMINICTRL= PF2 =
^toggle_mode
                  SMINICTRL = PF3 =
&popwin(3,28)
                  SMINICTRL = XMIT = ^commit
all
   SMININAMES     Supplies a list of local data block initialization file
                  names for use by ldb_init,
like the library function
                  ininames. The names are
separated by commas, blanks, or
                  semicolons; there may be up to ten of them.
                 
SMININAMES=tables.ini,zips.ini,config.ini
   SMMPOPTIONS    Supplies parameters for the library function mp_options,
                  q.v. These parameters
control the behavior of the cursor
                  within menu_proc. Here they
are:
                  Arrow key wrapping: WRAP or
NOWRAP
                  Up- and down-arrow control:
UD_TAB, UD_FREE, UD_RESTRICT,
                  UD_COLM, UD_SWATH,
UD_NEXTLINE, UD_NEXTFLD
                  Left- and right-arrow control: LR_TAB, LR_FREE,
                  LR_RESTRICT, LR_COLM,
LR_SWATH, LR_NEXTLINE, LR_NEXTFLD
                  SMMPOPTIONS = WRAP;
UD_RESRICT,\
                  UD_NXTLINE; LR_RESTRICT,
LR_NXTFLD;
   SMMPSTRING     Controls the menu item matching actions of menu_proc, by
                  supplying parameters for
mp_string; refer to those
                  functions. The single
parameter is either STRING or
                  NOSTRING.
                  SMMPSTRING = NOSTRING
   SMOKOPTIONS    The right-hand side has six parameters, corresponding to
                  those of the library
function ok_options, (q.v.). They are,
                  in turn:
                  Cursor style: BLOCK or
NOBLOCK
                  Arrow key wrapping: WRAP or NOWRAP
                  Field reset flag: RESET or
NORESET
                  Up- and down-arrow control:
UD_TAB, UD_FREE, UD_RESTRICT,
                  UD_COLM, UD_SWATH,
UD_NEXTLINE, UD_NEXTFLD
                  Left- and right-arrow control: LR_TAB, LR_FREE,
                  LR_RESTRICT, LR_COLM,
LR_SWATH, LR_NEXTLINE, LR_NEXTFLD
                  Always-validate flag: VALID,
NOVALID
                  Beep on overstriking last
character of no-autotab field:
                  ENDCHAR
                  SMOKOPTIONS = BLOCK; WRAP;
RESET;\
                  UD_RESRICT, UD_NXTLINE;
LR_RESTRICT,\
                  LR_NXTFLD; VALID; ENDCHAR
   SMZMOPTIONS    Zoom key options, as documented nunder the library function
                  zm_options. The first
parameter controls the first step of
                  zooming, and may be either
NOSHIFT, SCREEN, ELEMENT, or
                  ITEM. The second controls
the subsequent step, and may be
                  NOSCROLL, SCROLL, PARALLEL, or 1STEP.
                  SMZMOPTIONS = ITEM PARALLEL
 
22.3.3  Setups for Default File Extensions
 
These
variables control the default file extensions used by utilities, which are
listed
below.
 
   SMFEXTENSION   Screen file extension, used by the JAM run-time system and
                  various utilities. The
default in Release 4.0 is none; the
                  default in Release 3 was
jam. May be overridden in the
                  system environment. See
fextension.
                  SMFEXTENSION=f
   SMUSEEXT       This variable controls the file extension rules described
                  in Section 2.2. The first
parameter is the extension
                  separator character, which
may be a quoted character,
                  number, or ASCII mnemonic.
The second controls whether JAM
                  attemptes to recognize and
replace extensions, and is
                  either RECOGNIZE or IGNORE.
The last determines whether
                  extensions are placed before
or after the filename, and is
                  either FRONT or BACK.
                  SMUSEEXT = '-'; RECOGNIZE;
FRONT
 
NAME
 
     term2vid - create a video file from a
terminfo or termcap entry.
 
SYNOPSIS
 
     term2vid [-f] terminal-mnemonic
 
DESCRIPTION
 
Term2vid
creates a rudimentary screen manager video file from information in the
terminfo
or termcap database. Terminal-mnemonic is the name of the terminal
type,
the value of the system environment variable TERM, which is used by the C
library
function tgetent to access that database.
 
The
output file will be named after the mnemonic. The -f option tells the
utility
it's OK to overwrite an existing output file.
 
ERROR
CONDITIONS
 
No
cursor position (cm, cup) for %s Cause: An absolute cursor positioning
                                          
sequence is required for JAM to work,
                                           and
the termcap or terminfo entry you
                                           are using does not contain one.
                                          
Corrective action: Construct the
                                          
video file by hand, or update the
                                          
entry and retry.
 
Cannot
find entry for %s Cause: The terminal mnemonic you have given is not in
                                           the
termcap or terminfo database.
                                          
Corrective action: Check the spelling
                                           of the mnemonic.
 
File %s
already exists; use '-f' to overwrite. Cause: You have specified an
                                          
existing output file. Corrective
                                          
action: Use the -f option to
                                          
overwrite the file, or use a
                                          
different name.
 
 
 
)
 
NAME
 
     txt2form - Converts text files to JAM
screens
 
SYNOPSIS
 
     txt2form [-fv] textfile screen [height
width]
 
DESCRIPTION
 
This
program converts textfile to a read-only JAM screen, named screen. It
creates
display data sections from the input text. It preserves blank space, and
expands
tabs to eight-character stops; other control characters are just copied
to the
output. Text that extends beyond the designated maximum output height or
width
is discarded; if the last two parameters are missing, a 23-line by
80-column
screen is assumed.
 
Txt2form
puts no borders, fields, or display attributes in the output screen.
However,
underscores (or other, user-designated field definition characters) in
the
input are copied to the screen file; if you subsequently bring the screen up
in
jxform and compile it, those characters will be converted to fields.
 
The -f
option directs the utility to overwrite an existing output file. The -v
prints
the name of each screen as it is processed.
 
ERROR
CONDITIONS
 
Warning:
lines greater than %d will be truncated Warning: columns greater than
%d will
be truncated Cause: Your input text file has data that reaches beyond
                            the limits you
have given (default 23 lines by 80
                            columns) for the
screen. Corrective action: Shrink
                            the input, or enlarge the screen.
 
Unable
to create output file. Cause: An output file could not be created, due to
                            lack of permission
or perhaps disk space. Corrective
                            action: Correct the
file system problem and retry
                            the operation.
 
NAME
 
     var2bin - convert files of setup
variables to binary
 
SYNOPSIS
 
     var2bin [-pv] [-eext] setupfile
[setupfile ...]
 
DESCRIPTION
 
This
utility converts files of setup variables to binary format for use by the
run-time
system. See pages 5-55ff for a full description of how to prepare the
ASCII
file.
 
The -v
prints the name of each screen as it is processed. The -p option causes
the
output file to be created in the same directory as the input file, and the
-e
option supplies a file extension different from the default of bin.
 
ERROR
CONDITIONS
 
Error
opening %s. Cause: An input file was missing or unreadable. Corrective
                         action: Check the
spelling, presence, and permissions
                         of the file in
question.
 
Missing
'='. Cause: The input line indicated did not contain an equal sign after
                         the setup variable
name. Corrective action: Insert the
                         equal sign and run
var2bin again.
 
%s is
an invalid name. Cause: The indicated line did not begin with a setup
                         variable name.
Corrective action: Refer to the
                         Configuration Guide
for a list of variable names,
                         correct the input,
and re-run the utility.
 
%s may
not be qualified by terminal type. Cause: You have attached a terminal
                         type list to a
variable which does not support one.
                         Corrective action:
Remove the list. You can achieve the
                         desired effect by
creating different setup files, and
                         attaching a terminal
list to the SMSETUP variable.
 
Unable
to set given values. %s conflicts with a previous parameter. %s is an
                         invalid parameter.
Cause: A keyword in the input is
                         misspelled or
misplaced, or conflicts with an earlier
                         keyword. Corrective action: Check the keywords listed
                         in the manual,
correct the input, and run the utility
                         again.
 
Error
reading smvars or setup file. Cause: The utility incurred an I/O error
                         while processing the file named in the
message.
                         Corrective action:
Retry the operation.
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                         for its needs.
Corrective action: None.
 
At
least one file name is required. Cause: You have failed to give an input file
                         name. Corrective
action: Retype the command, supplying
                         the file name.
 
Entry
size %d is too large. String size %d is too large. Cause: The indicated
                         right-hand side is
too long. Corrective action: Reduce
                         the size of the
entry.
 
NAME
 
     vid2bin - convert video files to binary
 
SYNOPSIS
 
     vid2bin [-vp] [-eext] terminal-mnemonic
 
DESCRIPTION
 
The
vid2bin utility converts an ASCII video file to binaryformat for use by
applications
with the JAM library routines. The video files themselves must be
created
with a texteditor, according to the rules listed in the video
manual(q.v.).
 
Terminal-mnemonic
is an abbreviation for the name of the terminal for which the
ASCII
video file has been constructed. That file,whose name is conventionally
the
mnemonic followed by the suffixvid, is the input to vid2bin. (When opening
its
input,vid2bin first tries them mnemonic, then the mnemonic followedby
vid.)
 
To make
a video file memory-resident, run the bin2c utilityon the output of
vid2bin,
compile the resulting programsource file, link it with your
application,
and call the libraryroutine vinit.
 
The -v
option prints the name of each screen as it is processed. -p creates each
output
file in the same directory as the corresponding input file. The use of
the -p
option is not recommended.
 
For
information about the format of the ASCII video file, referto the video
manual
and the Programmer's Guide.
 
ERROR
CONDITIONS
 
Neither
%s nor %s exists. Cause: An input file was missing or unreadable.
                                 Corrective action: Check the
spelling,
                                 presence, and
permissions of the file in
                                 question.
 
A
cursor positioning sequence is required. An erase display sequence is
                                 required. Cause: These two entries are
required
                                 in all video
files. Corrective action:
                                 Determine
what your terminal uses to perform
                                 these two
operations, and enter them in the
                                 video file;
then run the utility again.
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                                 for its
needs. Corrective action: None.
 
Error
writing to file '%s'. Cause: The utility incurred an I/O error while
                                 processing
the file named in the message.
                                 Corrective
action: Retry the operation.
 
Invalid
entry: '%s'. Entry missing '=': '%s'. Cause: The input line in the
                                 message does
not begin with a video keyword and
                                 an equal
sign. Corrective action: Correct the
                                 input and re-run the utility. You may
have
                                 forgotten to
place a backslash at the end of a
                                 line that
continutes onto the next one.
 
Invalid
attribute list : '%s'. Invalid color specification : '%s'. Invalid
                                 graphics
character specification (%s):'%s'.
                                 Invalid
border information (%s):'%s'. Invalid
                                 graphics type
: '%s'. Invalid label parameter :
                                 '%s'.%s
Invalid cursor flags specification :
                                 '%s'. Cause:
You have misspelled or misplaced
                                 keywords in
the input line in the message.
                                 Corrective action: Correct the input,
referring
                                 to the
Configuration Guide, and run vid2bin
                                 again.
 
NAME
 
     Video file - video configuration manual
 
DESCRIPTION
 
27.1  Introduction to Video Configuration
 
JAM is
designed to run on many displays with widely differing characteristics.
These
characteristics greatly affect JAM's display of screens and messages. For
example,
some displays are 80 columns wide, while others have 132; again, the
control
sequences used to position the cursor and highlight data on the display
are
hardly the same for any two models. JAM obtains display characteristics from
a video
file.
 
27.1.1  How to Use this Manual
 
This
manual has two purposes. The first is to explain the entries in the JAM
video
file, and the concepts used in interpreting them. Although you may well
never
need to modify or construct a video file, you may wish to know what it
does.
The second purpose is to provide instructions for modifying existing video
files,
or constructing new ones, to handle new terminal characteristics.
 
Creating
a video file is not trivial; neither is it a major effort. The easiest
way is
to use one of the many supplied with JAM. There are fifty or so as of
this
writing; you may find a list in an appendix to Chapter One of this manual.
It is
not much harder to begin with one of the files supplied and modify it, if
you can
determine that your terminal is similar; this is very often possible
because
so many terminals emulate others. If your system has a terminfo or
termcap
database, you can use the term2vid utility (q.v.) to make a functional
video
file from that information. Finally, if you must start from scratch, you
should
start with the minimal subset defined in Section 27.1.4, and add entries
one at
a time.
 
   .
      Most of this manual should be used for
reference only. The sample video
      file in Section 27.1.5 is suitable for a
large number of terminals, and
      may be all that you need.
   .
      Section 27.1.2 describes the concept of
the video file.
   .
      Section 27.1.3 describes the text file
format.
   .
      Section 27.1.6 is a must for users on a
PC using MS-DOS. It contains a
      listing of an appropriate video file and
special caveats.
   .
      Section 27.2.2 summarizes the keywords.
Sections 27.3ff explain
      parameterized control sequences, which
support cursor positioning,
      attribute setting, etc.
   .
      A
separate section of this chapter describes the vid2bin utility, which
      translates your video file into a binary
format the JAM library can
      understand.
 
Details
and examples are in Sections 27.4.1ff; the first four are plenty to get
you
started. Next look at Sections 27.4.5 and 27.4.5.1 for a general description
of
attributes. Section 27.4.5.2 discusses latch attributes, the most common
kind,
and Section 27.4.5.3 area attributes. Using color is described in Section
27.4.5.4.
The remaining sections discuss less essential topics, such as borders,
graphics,
help text, etc. The vid2bin utility supplies reasonable defaults for
these
entries, so worry about them last of all.
 
27.1.2  Why Video Files Exist
 
Differences
among terminal characteristics do not affect programs that are line
oriented.
They merely use the screen as a typewriter. Full-screen editors, like
emacs
or vi, use the screen non-sequentially; they need terminal-specific ways
to move
the cursor, clear the screen, insert lines, etc. For this purpose the
termcap
data base, and its close relative terminfo, were developed. Although
closely
associated with UNIX, termcap and terminfo are also used on other
operating
systems. They list the idiosyncrasies of many types of terminals.
 
Text
editors use visual attributes sparingly, if at all. Thus termcap contains
minimal
information about handling them. Usually there are entries to start and
end
"stand-out" and sometimes entries to start and end underline. Notably
missing
are entries explaining how to combine attributes (i.e. reverse video and
blinking
simultaneously). Terminfo can combine attributes; in practice,
unfortunately,
the appropriate entries are usually missing.
 
JAM
makes extensive use of attributes in all combinations, and supports color.
Rather
than extending termcap with additional codes, which might conflict with
other
extensions, JYACC decided to use an independent file to describe the
terminal
specific information.
 
Termcap
uses a limited set of commands; notably missing are conditionals.
Terminfo
uses an extensive set of commands, however the resulting sequences are
excessively
verbose (103 characters for the ANSI attribute setting sequence
without
color). Therefore, JYACC developed a set of commands that extend both
termcap
and terminfo. Both syntaxes are supported with only minor exceptions.
All the
commands needed in the video file can be written using terminfo syntax;
many
can be written using the simpler termcap syntax; and a few can benefit by
using
the extended commands.
 
A
summary of the commands used to process parameters is in Section 27.3; details
and
examples follow. Refer to those sections if you have trouble understanding
the
examples elsewhere in the manual.
 
27.1.3  Text File Format
 
The
video file is a text file that can be created using any text editor. It
consists
of many instructions, one per line. Each line begins with a keyword,
and
then has an equal sign (=). On the right of the equal sign is variable data
depending
on the keyword. The data may be a number, a list of characters, a
sequence
of characters, or a list of further instructions.
 
Comments
can be entered into the file by typing a hash # as the first character
of the
line; that line will be ignored by vid2bin. All the video files
distributed
by JYACC are documented with comments; we recommend that you do
likewise,
as many of the entries are necessarily cryptic.
 
It is
essential that the instruction formats listed in this guide be followed
closely.
In order to make run-time interpretation as efficient as possible, no
error
checking at all is done then. The vid2bin utility checks for things like
missing,
misspelled, and superfluous keywords, but not for things like
duplicated
or conflicting entries.
 
27.1.4  Minimal Set of Capabilities
 
The
only required entries in the video file are for positioning the cursor (CUP)
and
erasing the display (ED).
 
In the
absence of other entries, JAM will assume a 24-line by 80-column screen.
The
24th line will be used for status text and error messages, and the remaining
23 will
be available for forms. It will assume that no attributes are supported
by the
terminal. Since non-display is supported by software, that attribute will
be
available. The underline attribute will be faked by writing an underscore
wherever
a blank appears in an underlined field. Clearing a line will be done by
writing
spaces. Borders will be available, and will consist of printable
characters
only.
 
Although
JAM will function with those two entries, it will have limited
features.
The most glaring shortcoming will be the lack of visual attributes.
Speed
may also be a problem; the sole purpose of many entries in the video file
is to
decrease the number of characters transmitted to the terminal.
 
27.1.5  A Sample Video File
 
The
following video file is for a basic ANSI terminal, like a DEC VT-100.
 
     # Display size (these are actually the
default values)
     LINES   
= 24
     COLMS   
= 80
 
     # Erase whole screen and single line
     ED      
= ESC [ 2 J
     EL      
= ESC [ K
 
     # Position cursor
     CUP     
= ESC [ %i %d ; %d H
 
     # Standard ANSI attributes, four
available
     LATCHATT = REVERSE = 7 UNDERLN = 4 BLINK
= 5 HILIGHT = 1
     SGR     
= ESC [ 0 %9(%? %t ; %c %; %) m
 
This
file contains the basic capabilities, plus control sequences to erase a
line
and to apply the reverse video, underlined, blinking, and highlighted
visual
attributes. The entries for CUP and SGR are more complicated because they
require
additional parameters at run-time. The percent commands they contain are
explained
meticulously in Section 27.3.
 
27.1.6  An MS-DOS Video File
 
By
default, JAM displays data on the console by directly accessing the PC's
video
RAM. On machines that are not 100% IBM-compatible, it will use BIOS calls
instead;
use the entry INIT = BIOS to effect that. Under no circumstances does
JAM use
DOS calls or the ANSI.SYS driver. Video files for both monochrome and
color
displays are included with JAM.
 
Because
JAM contains special code for the PC display, most of the entries that
contain
control sequences are irrelevant, and are given a value of PC in the
video
files distributed by JYACC. You should leave these entries alone, since
their
presence is required but their values are irrelevant. Entries that don't
contain
control sequences, such as LINES, GRAPH, and BORDER, can be changed as
usual.
The PC video file, as distributed, follows.
 
     LINES = 25
     COLMS = 80
     ED = PC
     EL = PC
     EW = PC
     CUP = PC
     CUU = PC
     CUD = PC
     CUB = PC
     CUF = PC
     CON = PC
     COF = PC
     SCP = PC
     RCP = PC
     REPT = PC
     # Next 2 lines give display attributes
for monochrome only
     # The INIT line specifies a blinking
block cursor
     LATCHATT = HILIGHT = 1 BLINK = 5 UNDERLN
= 4 REVERSE = 7
     INIT = C 0 13 2
 
     # Next 3 lines give display attributes
for color only
     # The INIT line specifies a blinking
block cursor
     LATCHATT = HILIGHT = 1 BLINK = 5
     COLOR = RED = 1 BLUE = 4 GREEN = 2
BACKGRND
     INIT = C 0 7 2
 
     SGR = PC
     CURPOS = 1
     GRTYPE = PC
     ARROWS = 0x1b 0x1a 0x1d
     BORDER = SP   SP   SP   SP  
SP   SP   SP   SP   \
             
0xda 0xc4 0xbf 0xb3 0xb3 0xc0 0xc4 0xd9 \
              0xc9 0xcd 0xbb 0xba 0xba 0xc8
0xcd 0xbc \
              0xd5 0xcd 0xb8 0xb3 0xb3 0xd4
0xcd 0xbe \
              0xd6 0xc4 0xb7 0xba 0xba 0xd3
0xc4 0xbd \
              0xdc 0xdc 0xdc 0xdd 0xde 0xdf
0xdf 0xdf \
              .    .    .    .   
.    .    .    .    \
              0xb0 0xb0 0xb0 0xb0 0xb0 0xb0
0xb0 0xb0 \
              0xb2 0xb2 0xb2 0xb2 0xb2 0xb2
0xb2 0xb2 \
              0xdb 0xdb 0xdb 0xdb 0xdb 0xdb
0xdb 0xdb
 
Here
the INIT specifies the cursor style; refer to the section on INIT.
 
27.2  Video File Format
 
27.2.1  General Information
 
All
white space (spaces and tabs) is skipped, except where noted below. A
logical
line may be continued to the next physical line by ending the first line
with a
backslash. (Do not leave a space between the backslash and the newline.)
To
enter a backslash as the last character of the line, use two backslashes
(without
spaces). Thus
 
     text \         means a continuation line
     text \\        ends with a backslash
     text \\\       has a backslash and a continuation
 
A
double quote " starts a string. The quote itself is skipped; text between
it
and the
next double quote (or the end of the line) is taken literally, including
spaces.
To include a double quote in a quoted string, use backslash quote \"
with no
space between. For example,
 
     "stty tabs"    has an embedded space
     stty tabs      does not.
 
The
percent sign is a control character; to enter a literal percent sign, you
must
double it (i.e. %%).
 
There
are three ways to put non-printing characters, such as control characters,
in the
video file:
 
  1. 
Any character at all can be entered as 0x followed by two hexadecimal
      digits. For example, 0x41 can be used
for A, 0x01 for control-A, etc.
      This method is particularly useful for
entering codes in the range 0x80
      to 0xff.
  2. 
Control characters in the range 0x01 to 0x1f can be represented by a
      caret ^ followed by a letter or symbol.
Either ^A or ^a can represent
      SOH (0x01). The symbols are ^[ for ESC,
^\ for FS, ^] for GS, ^^ for RS
      and ^_ for US.
  3. 
More control characters can be represented by two- or three-character
      ASCII mnemonics. This method is
particularly useful for entering
      control sequences to the terminal, since
the manuals often list such
      sequences using mnemonics. Here is a
list:
 
                    DLE  0x10                     DSC 
0x90
     SOH 
0x01      DC1  0x11                     PU1  0x91
     STX 
0x02      DC2  0x12                     PU2 
0x92
     ETX 
0x03      DC3  0x13                     STS 
0x93
     EOT 
0x04      DC4  0x14     
IND  0x84      CCH 
0x94
     ENQ 
0x05      NAK  0x15     
NEL  0x85      MW  
0x95
     ACK 
0x06      SYN  0x16     
SSA  0x86      SPA 
0x96
     BEL 
0x07      ETB  0x17     
ESA  0x87      EPA 
0x97
     BS  
0x08      CAN  0x18     
HTS  0x88
     HT  
0x09      EM   0x19     
HTJ  0x89
     NL  
0x0a      SUB  0x1a     
VTS  0x8a
     VT  
0x0b      ESC  0x1b     
PLD  0x8b      CSI 
0x9b
     FF  
0x0c      FS   0x1c     
PLU  0x8c      ST  
0x9c
     CR  
0x0d      GS   0x1d     
RI   0x8d      OCS 
0x9d
     SO  
0x0e      RS   0x1e     
SS2  0x8e      PM  
0x9e
     SI  
0x0f      US   0x1f     
SS3  0x8f      APC 
0x9f
 
     SP  
0x20      DEL  0x7f
 
The
rightmost two columns are extended ASCII control codes, which can be
transmitted
only if the communication line and terminal use eight data bits. If
this is
not possible, the 8-bit code may be replaced by two 7-bit codes: the
first
code is ESC (0x1b), the second 0x40 less than the desired 8-bit control
character.
For example, CSI (0x9b) would be replaced by ESC 0x5b, or ESC [. If a
video
file contains extended ASCII control codes, JAM will assume they can be
used;
it will not transmit the two-character sequence automatically.
 
Note:
PRIME computers, and some others, internally toggle the high bit of a
character;
ESC on a PRIME is 0x9b and CSI is 0x1b, not vice versa. The numbers
given
in this document are always standard ASCII.
27.2.2  Keyword Summary
 
All the
video file entry keywords are listed here, arranged by function.
Subsequent
sections explain each one in detail.
 
                       basic capabilities
   LINES               number of lines on screen
   COLMS               number of columns on screen
   INIT                initialization sequence
   RESET               undoes initialization sequence
   REPT                repeat following character
   REPMAX              maximum number of repeated characters
   BOTTRT              last position of screen may be written without
                       scrolling the display
   BUFSIZ              number of characters to accumulate before flushing
                       erasure commands
   ED                  erase entire display
   EL                  erase to end of current line
   EW                  erase window
                       cursor appearance
   CON                 turn cursor on
   COF                 turn cursor off
   SCP                 save cursor position and attribute
   RCP                 restore cursor postion and attribute
   INSON               insert-mode cursor
   INSOFF              overstrike-mode cursor
                       cursor position
   CUP                 absolute cursor position
   CUU                 cursor up
   CUD                 cursor down
   CUF                 cursor forward
   CUB                 cursor
backward
   CMFLGS              allowed cursor-motion shortcuts
                       display attributes
   COLOR               list of colors
   LATCHATT            list of available latch attributes
   SGR                 set graphics rendition (latch)
   AREAATT             list of available area attributes
   ASGR                set graphics rendition (area)
   ARGR                remove are attribute
                       message line
   OMSG                open message line
   CMSG                close message line
   MSGATT              message line attributes
                       softkey labels
   KPAR                function key labels description
   KSET                load function key label
                       graphics
   MODE0               normal character set sequence
   MODE1               locking shift to alternate character set 1
   MODE2               locking shift to alternate character set 2
   MODE3               locking shift to alternate character set 3
   MODE4               non-locking shift to alternate character set 1
   MODE5               non-locking shift to alternate character set 2
   MODE6               non-locking shift to alternate character set 3
   GRAPH               graphics character equivalences
   GRTYPE              shortcut for defining graphics characters
   ARROWS              shift indicator graphics characters
   BELL                "visible bell" alarm sequence
                       borders
   BORDER              characters that make up the 10 border styles
   BRDATT              available border attributes
                       jxform help
   JFMTOP              navigation mode function keys
   JFMKDS              draw-screen mode function keys
   JFMKTM     
        test-screen mode function
keys
   FMKRCP              copy-field function key
   FMKRMV              move-field function key
   JDAMOD              data dictionary modification mode keys
   JDFIND              data dictionary find mode text
   JDDCHG              data
dictionary update mode
   JDTPLT              data dictionary template
   JDMTCH              data dictionary match scan
   CURPOS              status line cursor position display
 
27.3  Parameterized Character Sequences
 
Certain
control sequences cannot be completely specified in advance. An example
is the
cursor position sequence, which requires the line and column to move to.
The
commands using these sequences must be passed extra parameters. The
following
keywords take the indicated number of parameters:
 
     REPT repeat sequence (2)
          character and number of times to
repeat
     EW  
erase window (5)
          start line, start column, number of
lines, number of columns,
          background color
     CUP  cursor position (2)
          line and column (relative to 0)
     CUU 
cursor up (1)
          line increment
     CUD 
cursor down (1)
          line increment
     CUF 
cursor forward (1)
          column increment
     CUB 
cursor backward (1)
          column increment
     SGR 
set latch graphics rendition (11)
          see section 27.4.5
     ASGR set area graphics rendition (11)
          see section 27.4.5.1
 
27.3.1  Summary of Percent Commands
 
Parameters
are encoded in sequences by percent commands, sequences starting with
the %
symbol. This is superficially similar to the way the C library function
printf
handles parameters. Some percent commands cause data to be output; others
are
used for control purposes. Every parameter that is to be output requires a
percent
command. JAM uses a stack mechanism as does terminfo; it is described in
the
next secion. Percent commands are summarized in the list that follows.
Examples
and more complete descriptions are in subsequent sections.
 
Since
all sequences go through the same processing, even those that do not use
run-time
arguments, percent signs must be used with care. In particular, to
enter a
percent sign as a literal, you must use %%.
 
In the
following list, each command is tagged with C, I, or E to indicate
whether
it is a termcap, terminfo, or JYACC extended command.
 
Output
commands
 
   %%                output a percent sign (C and I)
   %.                output a character (C)
   %c                output a character (I)
   %d                output a decimal (C and I)
   %#d               output a #-digit decimal, blank filled (I)
   %0#d              output a #-digit decimal, zero filled, like the
termcap
                     %2 which is not supported
(I)
   %+                add and output a character (C)
   %#z               output # (decimal number) binary zeroes (E)
   %#w               wait (sleep) # seconds (E)
 
Stack
manipulation and arithmetic commands
 
   %p#               push parameter # (1 - 11 allowed) (I)
   %'c'              push the character constant c (I)
   %{#}              push the integer constant # (I)
   %+ %- %* %/ %m    add, subtract, multiply, divide, modulus (I)
   %| %^ %&          bit-wise or, exclusive or, and (I)
   %= %> %<          logical conditionals (I)
   %! %~             logical not, one's complement (I)
 
Parameter
sequencing and changing commands
 
   %#u               discard # parameters (E)
   %#b               back up # parameters (E)
   %i    
           increment the next two
parameters (C and I)
   %r                reverse the next two parameters (C)
 
Control
flow commands
 
   %? expr %t then-part %e else-part %;
                     conditionally execute one
of two command sequences (I)
   expr %t then-part %e else-part %;
                     same effect as previous
(E)
   %#( ... %)        repeat the sequence # times (E)
   l( ... %)         select operations from a list (E)
Terminfo
commands not supported
 
   %s                strings
   %P, %g            letter variables
   $<#>              padding (use %#z instead)
 
27.3.2  Automatic Parameter Sequencing
 
A stack
holds all the parameters being processed. It is four levels deep;
anything
pushed off the end is lost. There are commands that push a parameter or
constant
onto the stack, but no explicit pop commands. Output commands transmit
the
value on top of the stack, then remove it. Arithmetic and logical operations
take
one or two operands from the top of the stack, and replace them with one
result;
thus they perform an implicit pop.
 
Arithmetic
and logical operations all use postfix notation: first the operands
are
pushed, then the operation takes place. Thus %p1 %p2 %p3 %+ %* leaves x * (y
+ z) on
the stack, where x, y, and z are parameters 1, 2 and 3. This mechanism
is
identical to that used by terminfo, so its commands can be used freely.
 
The
simpler termcap commands do not use a stack mechanism. To support them, JAM
uses an
automatic parameter sequencing scheme. A current index into the
parameter
list is maintained. Whenever a parameter is needed on the stack, the
current
parameter is pushed and the index is incremented. In particular, if an
output
command is encountered and there is nothing on the stack to output, an
automatic
push is performed using the current index. The commands %d %d output
two
decimals; the sequence %p1 %d %p2 %d does the same thing.
 
The
effect of this scheme is that termcap style commands are automatically
translated
into terminfo style. Most of the examples in this document give both
styles.
Although it is possible to use automatic sequencing and explicit
parameter
pushes in the same sequence, this practice is strongly discouraged.
Explicit
pushes of constants with automatic parameter sequencing, however, is a
useful
combination, as will be seen.
 
27.3.3  Stack Manipulation and Arithmetic Commands
 
Commands
are available to push parameters and constants.  Only four levels of
stack
are supported, and anything pushed off the end is discarded without
warning.
 
   %p2        
push the second parameter
   %p11       
push parameter 11
   %'x'       
push the character x
   %{12}      
push the number 12
   %{0}       
push binary 0
   %'0'       
push ASCII 0
 
Various
arithmetic and logical operations are supported. They require one or two
operands
on the stack. If necessary an automatic push will be generated, using
the
next parameter.
 
   %'@' %| %| %| %c                    or three parameters with @, then
                                       output
the result.
   %'@' %p1 %| %p2 %| %p3 %| %c        same as above
 
The
automatic parameter sequencing mechanism works well in the above example.
Since
or requires two parameters and there is only one on the stack, a push is
performed.
Note that no push is required to process %c as an entry already
exists
on the stack. Thus only three parameters are consumed and the result of
the
bitwise or is output.
 
   %'SP' %+ %c             output the parameter added to the value of a
                           space. See the next
section for an alternate.
   %p1 %'SP' %+ %c         same as above
 
The
example above first pushes the first parameter, then pushes a space
character
(0x20). The %+ command adds these values and puts the answer on the
stack.
%c then pops this value and transmits it to the terminal.
 
27.3.4  Parameter Sequencing Commands
 
With
automatic sequencing of parameters, it is occasionally necessary to skip a
parameter.
The %u command uses up one parameter, by incrementing the parameter
index.
The %b command backs up, by decrementing the parameter index. Both can be
given
with counts, as %2u.
 
   %d %b %d                output the same parameter twice
   %p1 %d %p1 %d           same as above
   %p2 %d %p1 %d           output in reverse order
   %u %d %2b %d            same as above
 
27.3.5  Output Commands
 
Because
the percent sign is a special character, it must be doubled to output a
percent
sign. %c and %. output a character, like printf; the latter is supplied
for
termcap compatibility. %d outputs a decimal. It has variations that allow
for
specifying the number of digits, and whether blank or zero fill is to be
used.
 
%#z
outputs the specified number of NUL characters (binary zero). It is usually
used
for padding, to insert a time delay for commands such as erase screen.
 
   %%         
output a percent sign
   %d         
output a decimal, any number of digits, no fill
   %3d        
output at most 3 digits with blank fill
   %03d       
output at most 3 digits with zero fill
   %100z      
100 pad bytes of 0 are sent to the terminal
 
%S(
string %) issues a system command; the string following %S is passed to the
command
interpreter fpr execution. Since vid2bin strips spaces, this text should
usually
be enclosed in quotes.
 
   %S("stty tabs"%)        System call: stty tabs
   %S(stty SP tabs%)       System call: stty tabs
   %S( stty tabs %)        Mistaken version of above
   %S("keyset \"\""%)      System call: keyset ""
   %S("keyset """%)        Mistaken version of above.
 
%#w
waits (sleeps) the specified # of seconds. It is not supported on systems
where
the sleep library routine is unavailable. It is often used as a time delay
for
INIT and RESET sequences.
 
   %2w        
sleep 2 seconds
 
Because
termcap and terminfo are inconsistent, %+ is implemented in two ways. As
described
in the section above, %+ can be used to add two operands on the stack
and
leave the sum on the stack. If the stack has only one entry, an automatic
push is
generated. However, a special case occurs if the stack is empty: the
character
following %+ is added to the next parameter, the sum is output as a
character,
and the parameter index is incremented. This usage occurs often in
termcap
cursor positioning sequences.
 
   %+SP                    output parameter added to the value of space
   %'SP' %+ %c             same as above
   %'SP' %p1 %+ %c         same as above
 
27.3.6  Parameter Changing Commands
 
%i
increments the next two parameters. It is used almost exclusively in termcap
cursor
positioning sequences. The parameters passed are line and column, with
the
upper left being (0, 0). Many terminals expect the line and column to be
relative
to (1, 1); %i is used to increment the parameters. Note that no output
is
performed, and no parameters are consumed.
 
%r
reverses the next two parameters. It is unnecessary if explicit parameter
pushes
are used; in fact, it should be avoided in that case since the numbering
of the
parameters will be reversed. This command is often used in cursor
positioning
sequences, where the terminal requires that column be given first
and
then the line (the default being the other way around).
 
   ESC [ %i %d ; %d H            Add 1 to each parameter and send out as
                                 decimals
   FS G %r %c %c                 output column first, then line
   FS G %p2 %c %p1 %c            same as above
 
27.3.7  Control Flow Commands
 
The
general if-then-else clause is %? expr %t then-part %e else-part %; . It can
be
abbreviated by omitting the if, thus: expr %t then-part %e else-part %; . The
expression
expr is any sequence, including the empty sequence. %t pops a value
from
the stack and tests it, executing then-part if it is true (non-zero) and
else-part
otherwise. Then-part and else-part may be any sequence, including the
empty
sequence. If else-part is empty, %e may be omitted as well; but %t is
always
required, even if then-part is empty.
 
If %t
finds that the stack is empty, it will generate an automatic push of the
next
parameter as usual. %t consumes one parameter; however, the incrementing of
the
parameter index is delayed until after the entire conditional has been
executed.
A conditional always consumes exactly one parameter, regardless of
which
branch is taken or of the content of then-part or else-part. If either of
those
use automatic parameter sequencing, they use a local index; thus even if
they
consume, say, two parameters, at the end of the conditional the parameter
index
is reset. When the next command is reached, only one parameter has been
consumed.
 
In each
of the following examples, one parameter is consumed, even in the last
one
where no parameter is output.
 
   %t ;
%c %;              output ; and a
character if the parameter is
                           non-zero, otherwise
skip the parameter.
   %p1 %t ; %p1 %c %;      same
   %? %p1 %t ; %p1 %c %;   same
   %? %p1 %t ; %c %;       same
   %t ; 5 %;               output ; and
5 if the parameter is non-zero.
 
In the
following two examples, the constant (binary) 1 is pushed, the parameter
is
compared with 1, and the boolean value is left on the stack. If the value is
true,
nothing is done; otherwise the parameter is output as a decimal.
 
     %? %{1} %p1 %= %t %e %p1 %d %;
     %{1} %= %t %e %d %;
 
The
following sequence exhibits a simple "either-or" condition that is
sometimes
used to
toggle an attribute on or off. It outputs ESC ( if the parameter is
non-zero,
and ESC ) otherwise.
 
     ESC %t ( %e ) %;
 
The
then-part and else-part may themselves contain conditionals, so else-if can
be
implemented. This practice is not recommended as it can produce
undecipherable
sequences. Also, because of the way automatic parameter
sequencing
is done, the results might be unexpected. It is provided only for
terminfo
compatibility. The list command, described below, is an alternative.
 
The
repeat command is used to perform the same action for several parameters. It
is
designed to be used with automatic parameter sequencing, and is almost
useless
if explicit parameter pushes are used. The count is specified after the
percent
sign. All the commands between %#( and %) are executed # times.
 
   %3( %d %)                           output 3 decimals
   %p1 %d %p2 %d %p3 %d                same as previous
   %3( %t %d %; %)                     output whichever of the first three
                                      
parameters are non-zero.
   %p1 %t %p1 %d %; %p2 %t %d %; %p3 %t %p3 %d
%;
                                       same as
previous
   ESC 0 %9( %t ; %c %; %) m           usual ANSI sequence for SGR.
   ESC 0 %? %p1 %t ; 7 %; %? %p2 %t ; 2 ...
                                       same as
above, assuming that parameter
                                       1 is 7
and parameter 2 is 2
 
27.3.8  The List Command
 
The
list command is needed very rarely, but is available as an alternate to a
complicated
if-then-elseif construct. It implements a simple "select" or
"case"
conditional.
The general format is %l( value1: expr1 %; value2: expr2 %; ... %)
 
The
values are single character constants representing the various cases. The
expression
is executed if the value matches the top of stack. At most one
expression
is executed, i.e. each case contains a "break". If the value is
missing
the expression is evaluated as a default. For correct operation, the
default
case must occur last in the list. Note that the colons do not have a
leading
percent sign, so no selector may be a colon. The %;  after the last
element
of the list is not required.
 
The
parameter on the stack (automatically pushed, if necessary) is popped and
tested
against the various cases. The parameter index is incremented by 1 after
the
entire list is processed, even if the expressions use parameters. The
following
examples are a bit contrived; see the section on color for a live
example.
 
   %l( 0:%; 1:ESC%; :FS %)             output nothing if the parameter
is
                                       '0'; ESC if it is '1'; FS
otherwise.
   %'0' %= %t %e %'1' %= %t ESC %e FS %; %;
                                       same
result, using "else-if"
   %l( 1:2%; 2:1%; %)                  output '1' if the parameter is
'2',
                                       '2' if
the parameter is '1'; otherwise
                                       do
nothing
 
27.3.9  Padding
 
Certain
terminals (or tty drivers) require extra time to execute instructions.
Sometimes
the terminal manual specifies the delay required for each command, but
more
often than not it is silent on the subject. If random characters appear on
the
screen, particularly characters that are part of command sequences, time
delays
may be required.
 
Delays
can be introduced in two ways. %#w will cause a wait (sleep) for the
specified
number of seconds; %#z will output the specified number of zeros. The
wait
command is usually only required in terminal initialization or reset
sequences.
A "hard reset" of a terminal sometimes requires a sleep of 1 or 2
seconds.
The zero command is occasionally needed on the erase display or erase
line
commands. Very rarely the cursor positioning sequence requires padding. The
number
of zeros to send range from about 5, for very short delays, to several
thousand
for longer delays. Usually 100 or so is enough for any terminal.
termcap
indicates padding by using a number at the beginning of a sequence,
which
is the number of milliseconds of pad required. terminfo uses the syntax
$<#>.
In either case it is easy to convert to the %#z notation, using the fact
that,
at 9600 baud, one character takes one millisecond to output.
 
   ESC c %2w               sleep 2 seconds after terminal reset
   ESC [ J %100z           100 pad zeros after clear screen
   ESC [ H %1000z          long delay of 1000 pad zeros
 
27.4  Constructing a Video File, Entry by Entry
 
27.4.1  Basic Capabilities
 
LINES
indicates the number of lines on the display. The default value is 24. In
general
one line will be reserved for status and error messages so the  maximum
form
size will usually be one less than the number specified  here. (See OMSG,
below,
for exceptions.) COLMS gives the number of columns on the display. The
default
value is 80.
 
   LINES = 25              24 lines for the form, 1 for messages
   COLMS = 132             wide screen
   LINES = 31              SUN workstation
 
INIT is
a terminal initialization sequence, output by the library function
initcrt.
There is no default; this keyword may be omitted. It is typically used
to
change the mode of the terminal, to map function keys, select attribute
styles,
etc. Padding is sometimes required, either with %#z or %#s.
 
RESET
is a reset-terminal sequence, output by the library function resetcrt.
There
is no default. If given, this keyword should undo the effects of INIT. For
many
terminals a "hard reset" that resets the terminal to the state stored
in
non-volatile
memory is appropriate.
 
     # map 2 function keys, then wait 2
seconds
     INIT = %S( "/etc/keyset f1 ^a P
^m" %) \
            %S( "/etc/keyset f2 ^a Q
^m" %) \
            %2w
 
     # load alternate character sets
     INIT = ESC)F ESC*| ESC+}
 
     # hard reset, delay, then set tabs
     RESET = ESC c %1000z %S("stty
tabs"%)
 
On
MS-DOS systems only, the INIT and RESET sequences (which are normally not
used)
may be given a special value to specify the cursor style. With ASCII
terminals,
escape sequences for setting the cursor style may be included in the
INIT
and RESET strings in the normal fashion. The format is
 
     INIT  
= C n1 n2 n3
     RESET 
= C n1 n2 n3
 
The
first two numbers, n1 and n2, specify the top and bottom scan lines for the
cursor
block; line 0 is at the top. The optional n3 gives the blink rate, as
follows:
 
   1        
no cursor
   2        
fast blink (the default)
   3        
slow blink
   0        
fast blink (Not always valid on non-IBM systems)
 
The
standard sequences, for a blinking block cursor, are INIT = C 0 13 0 for a
monochrome
monitor, and INIT = C 0 7 0 for a CGA monitor (with lower
 
resolution).
If RESET is not specified, JAM saves and restores the original
cursor
style.
 
A scan
line is the smallest vertical unit on your display (it is one pixel
wide).
 
Two
additional special keywords may be used with INIT on MS-DOS systems. BIOS
specifies
that JAM should use BIOS calls to do display output rather than
writing
the video RAM directly. XKEY actually controls keyboard input; it
directs
JAM to use a different BIOS interrupt for keyboard input, one that
recognizes
the F11 and F12 keys on an extended keyboard.
 
REPT is
a repeat-character sequence. There is no default, since most terminals
do not
support character repeat. If it is available, it should be given as it
can
substantially speed up clearing of windows, painting of borders, etc. This
sequence
is passed two parameters; the character to be repeated and the number
of
times to display it. The repeat sequence will be used whenever possible,
usually
for borders and for clearing areas of the screen. If borders do not
appear
correctly, this sequence may be wrong. A repeat sequence is never used to
repeat
a control character, and will never extend to more than one line.
 
REPMAX
gives the maximum number of characters REPT can repeat. To check the
proper
value of REPMAX, first omit it; then, in jxform, draw a field that
extends
the entire width of the screen, and hit the TRANSMIT key. If the whole
field
changes to the underline attribute, REPMAX is not needed. If it doesn't,
experiment
by gradually shortening the field to determine the largest possible
value
of REPMAX.
 
     REPT = %c ESC F %+?        output character, then ESC F
                               and the count with
0x3f (the
                               ASCII value of
'?') added
     REPMAX = 64                maximum count for above.
                               Anything over
this count will
                               be split into
more sequences
     REPT = %p1 %c ESC F %'?' %p2 %+ %c         same as previous
 
BOTTRT
is a simple flag, indicating that the bottom right-hand corner of the
display
may be written to without causing the display to scroll. If this flag is
not
present, JAM will never write to that position.
 
BUFSIZ
sets the size of the output buffer used by JAM. If it is omitted, JAM
calculates
a reasonable default size, so you should include it only if special
circumstances
warrant. If you make extensive use of a screen-oriented debugger,
you may
want to set BUFSIZ to a large value; that effectively disables the
delayed-write
feature, which may prove troublesome during debugging.
 
27.4.2  Screen Erasure
 
ED
gives the control sequence that erases the display. It is required, and must
clear
all available display attributes, including background color. The correct
command
can be found in the terminal manual, or in termcap as "cl". Some
terminals
require padding after this command.
 
   ED = ESC [ J            common for ANSI terminals
   ED = CSI J              ANSI terminals, 8 bit mode
   ED = ESC [ H ESC [ J    "home" may be required too
   ED = ESC [ 2 J          another variation
   ED = ESC [ 2 J %100z    with padding
   ED = ^L                 videotex terminals
   ED = FF                 same as above
 
EL
gives a sequence that erases characters and attributes from the cursor to the
end of
the line. If it is not given, JAM erases the line by writing blanks. The
 
sequence
can be found in termcap as "ce". Padding may be required. EL = ESC [
K
is
common for ANSI terminals; to include padding, use EL = ESC [ 0 K %100z .
 
EW
gives a sequence that erases a rectangular region on the screen, to a given
background
color if available. The only known terminal where this is available
is a PC
using MS-DOS. Five parameters are passsed: 
start line, start column,
number
of lines, number of columns, and background color. (If color is not
available,
the last parameter can be ignored.) On a PC using MS-DOS, EW should
be specified
as ESC [ %i %d; %d; %d; %d; %c w .
 
27.4.3  Cursor Position
 
CUP,
absolute cursor position, is required to run JAM. This sequence appears in
termcap
as "cm". It takes two parameters: the target line and the target
column,
in that
order and relative to 0. %i (increment) can be used to convert them to
be
relative to 1. ANSI terminals need the line and column as decimals. Other
terminals
add a fixed value to the line and column to make them printable
characters;
%+ is used to implement this. Some typical descriptions follow; all
are
ANSI standard.
 
     CUP = ESC [ %i %d;%d H
     CUP = ESC [ %i %d;%d f
     CUP = ESC [ %i %p1 %d ; %p2 %d f
     CUP = CSI %i %d; %d H
 
Another
common scheme is to output the line and column as characters, after
adding
SP. Terminal manuals tend to obscure this method, as the following
excerpt
shows:
 
     Address or load the cursor by
transmitting ESC = r c where r is an
     ASCII character from the table for the
row (line) and c is an ASCII
     character from the table for the column:
 
          row/column     ASCII code
 
          1              Space
          2              !
          3              "
          ...            ...
 
Examples
of coding in the video file follow.
 
     CUP = FS C %+SP %+SP
     CUP = FS C %'SP' %p1 %+ %c %'SP' %p2 %+
%c
     CUP = ESC = %+SP %+SP
 
CUU,
CUD, CUF and CUB perform relative cursor movement. CUU moves the cursor up
in the
same column; CUD moves it down. CUF moves the cursor forward in the same
row and
CUB moves it back. All take as a parameter the number of lines or
columns
to move. If sequences exist to move the cursor by one line or column but
not
more, do not specify them.
 
   CUU = ESC [ %d A        ANSI cursor up
   CUD = ESC [ %d B        cursor down
   CUF = ESC [ %d C        cursor forward
   CUB = ESC [ %d D        cursor back
   CUU = CSI %d A          using 8 bit codes
   CUU = ESC [ %{1} %= %t %e %d %; A
                           omit the parameter
if it is 1
 
The CMFLGS
keyword lists several shortcuts JAM can use for cursor positioning.
They
are as follows:
 
   CR         
Carriage return (0x0d, or ^M) moves the cursor to the first
               column of the current line.
   LF         
Linefeed (0x0a, or ^J) moves the cursor down one line, in the
               same column.
   BS         
Backspace (0x08, or ^H) moves the cursor one position to the
               left, without erasing anything.
   AM         
Automatic margin: the cursor automatically wraps to column 1
               when it reaches the right-hand
edge of the display.
 
Most
terminals are capable of the first three. The fourth can frequently be
found
in termcap, as am.
 
27.4.4  Cursor Appearance
 
CON
turns the cursor on in the style desired. Since an underline cursor is
difficult
to see in an underlined field, we recommend a blinking block cursor.
Note
that the INIT and RESET sequences can be used to switch between the cursor
style
used in JAM applications and that used on the command line.
 
COF
turns the cursor off. If possible this sequence and CON should be given.
Menus
(using a block cursor) look better with the regular cursor off. Also JAM
often
must move the cursor around the screen to put text in fields, to scroll
arrays,
etc.; if the cursor is off during these operations, the user is not
disturbed
by its flickering all over the screen.
 
Many
terminals have no ability to turn the cursor on and off. Although JAM
attempts
to minimize cursor movement, some flickering is unavoidable.
 
CON and
COF can sometimes be found in the terminal manual as "cursor
attributes"
and in
termcap as CO and CF. Here are some examples.
 
   CON = ESC [             cursor on for videotex terminal
   COF = ESC ]             cursor off for videotex
   CON = ESC [>5l          cursor on for some ANSI terminals
   COF = ESC [>5h          and off
   CON = ESC [?25h         another possibility for ANSI terminals
   COF = ESC [?25l
   CON = ESC [ 3 ; 0 z
   COF = ESC [ 3 ; 4 z
 
SCP and
RCP save and restore the cursor position, respectively. JAM must often
move
the cursor temporarily, as to update the status line. Beforehand, it saves
the
current cursor position and attribute, and restores them afterwards. Some
terminals
offer a pair of sequences that perform these two actions, producing
less
output than the cursor position and attribute setting sequences together.
Thus,
if they are available, JAM can run faster. Terminal manuals refer to these
sequences
in many ways, the most obscure being "cursor description." Here is an
example,
commonly found in ANSI terminals.
 
     SCP = ESC 7
     RCP = ESC 8
 
The
INSON and INSOFF sequences are issued to the terminal when you toggle JAM's
data
entry mode between insert and overstrike, using the INSERT key. They should
change
the cursor style, so that you can easily see which mode you are in. On
many
terminals, changing the cursor style also turns it on; in this case, INSOFF
should
be the same as COF, or you can omit it altogether. If the cursor style
can be
changed without turning it on or off, you should give both INSON and
INSOFF.
 
27.4.5  Display Attributes
 
JAM
supports highlight, blink, underline and reverse video attributes. If either
highlight
or blink is not available, low intensity is supported in its place.
The
keywords LATCHATT and AREAATT in the video file list the attributes
available
in each style and associate a character with each attribute.
 
The set
graphics rendition sequences (SGR and ASGR) are each passed eleven
parameters.
The first nine are the same as used by terminfo; only five of them
are
actually used by JAM. The last two specify foreground and background color,
and are
omitted if color is not available. The parameters, in order, represent:
 
  1.  standout      not supported, always 0
  2. 
underline
  3. 
reverse video
  4. 
blink
  5. 
dim (low intensity)
  6. 
highlight (bold)
  7. 
blank         supported by
software, always 0
  8. 
protect       supported by
software, always 0
  9. 
alternate charsupported in other sequences, 0
 10. 
foreground color
      (if available)
 11. 
background color
      (if available)
 
If an
attribute is desired, the parameter passed is the character associated
with
the attribute, as explained below. If the attribute is not desired, the
parameter
passed is (binary) 0. If the video file contains LATCHATT = REVERSE =
7
HILIGHT = 1 BLINK = 5 UNDERLN = 4 , and a field is to be highlighted and
underlined,
the SGR sequence will be passed (0, '4', 0, 0, 0, '1', 0, 0, 0) .
The
second and sixth parameters respresent underline and highlight; they are set
to the
corresponding values from LATCHATT. The rest are zero. To make the field
reverse
video and blinking, SGR would be passed (0, 0, '7', '5', 0, 0, 0, 0, 0)
.
 
If no
attributes are specified in the video file, JAM will support just two
attributes:
non-display (done in software anyway) and underline (using the
underscore
character).
 
27.4.5.1  Attribute Types
 
JAM
supports three different kinds of attribute handling. The first is called
latch
attributes, and is the most common today. The position of the cursor is
irrelevant
when the attribute setting sequence is sent. Any characters written
thereafter
take on that attribute. Attributes require no space on the screen.
ANSI
terminals use this method.
 
The
second is called area attributes. The cursor position is very important at
the
time the sequence to set the attribute is sent to the terminal. Indeed, all
characters
from the cursor position to the next attribute (or end of line or end
of
screen) immediately take on that attribute. Attributes do not occupy a screen
position
(they are "non-embedded" or "no space"). In this style, JAM
will
position
the cursor to the end of the area to be changed, set the ending
attribute,
then position the cursor to the beginning of the area and set its
attribute.
 
The
third is called onscreen attributes. They act like area attributes, but
occupy
a screen position. (They are "embedded" or "spacing".) This
style of
attribute
handling imposes the condition on the screen designer that fields
and/or
display areas cannot be adjacent, since a space must be reserved for the
attribute.
Display of windows may be hampered by lack of space for attributes.
 
A terminal
may have several user-settable modes. It is quite common for a
terminal
to support both area and onscreen attributes. If so, you should select
area
("non-embedded" or "no space") over onscreen
("embedded" or "spacing").
Some
terminals support one latch attribute and several area attributes
simultaneously.
If a
terminal has only one attribute style available, it is often user
selectable.
We recommend that reverse video be selected, since it is attractive
in
borders. JAM supports non-display in software, so that attribute need not be
available.
Underlines will be faked (by writing an underscore character) if that
attribute
is not available.
 
Usually
attribute information is available only in the terminal manual. However
some
clues can be found in the termcap data base. The codes "so",
"ul" and "bl"
specify
standout (usually reverse video), underline and bold respectively. The
codes
"se", "ue" and 
"be" give the sequence to end the attributes. The standard
ANSI
sequences are
 
     so=\E[7m:se=\E[0m:ul=\E[4m:ue=\E[0m:bl=\E[1m:be=\E[0m
 
If you
find something like these you can be quite sure that ANSI latch
attributes
are available. If you find entries ug#1:sg#1 you can be sure that
onscreen
attributes are in use.
 
27.4.5.2  Specifying Latch Attributes
 
The
LATCHATT keyword is followed by a list of attributes equated to their
associated
character. The possible attributes are:
 
   REVERSE    
reverse (or inverse) video
   BLINK      
blink or other standout
   UNDERLN    
underline
   HILIGHT    
highlight (bold)
   DIM        
dim (low intensity)
 
The
format is LATCHATT = attribute = value attribute = value etc. If the equal
sign
and value are missing, the attribute is given the value (binary) 1.
 
Most
ANSI terminals use latch attributes and the codes are fairly standardized.
The
only question is which attributes are supported and how attributes can be
combined,
if at all. Some ANSI terminals support color, either foreground only
or
foreground and background. The sequences for color are far less standard.
 
Terminal
manuals often describe the sequence as "set graphics rendition." A
common
description reads:
 
     ESC [ p1 ; p2 ; ... m
     where pn = 0    for normal
                1    for bold
                5    for blink
                ...
 
Thus
ESC [ 0 m is normal, ESC [ 1 m is bold, ESC[ 1 ; 5 m is bold and blinking.
Often
setting an attribute does not "erase" others, so it is best to reset
to
normal
first, using ESC[ 0; 1 m for bold, ESC[0;1;5m for blinking bold, etc. The
coding
in the video file is as follows:
 
     LATCHATT = HILIGHT = 1 BLINK = 5 UNDERLN
= 4 REVERSE = 7
     SGR = ESC [ 0 %9(%t ; %c %; %) m
 
The
meaning of the above SGR sequence is as follows. The sequence is passed 11
parameters,
each 0 (if the attribute is not to be set) or the character in the
LATCHATT
list. First, ESC [ 0 is output. The %t test, repeated 9 times, causes
the
zero parameters to be skipped. A non-zero parameter causes a semicolon and
the
parameter to be output. Finally, the character m is output. If normal
attribute
is wanted, all parameters will be 0, and the output sequence will be
ESC [ 0
m. If only underline is wanted, it will be ESC [ 0 ; 4 m. If
highlighted,
blinking, and reverse video are desired, the output will be ESC [
0; 7 ;
5 ; 1 m.
 
Some
terminals (or emulators) will not accept the method of  combining
attributes
used above. In that case, one sequence followed by the next might
work,
e.g. ESC [ 1 m ESC [ 7 m. Some terminals cannot combine attributes at all.
Here
are some more ANSI and near-ANSI examples:
 
     LATCHATT = HILIGHT = 1 BLINK = 5 UNDERLN
= 4 REVERSE = 7
                     "standard" ANSI
terminal
 
     LATCHATT = DIM = 2 REVERSE = 7 UNDERLN =
4 BLINK = 5
                     ANSI with low intensity but no highlight
 
     LATCHATT = REVERSE = 7
                     only one attribute
available
 
     SGR = ESC [ 0 %9(%t  ; %c %; %) m
                     repeat of previous
example
 
     SGR = ESC [ 0 m %9(%t  ESC [ %c m %; %)
                     attributes not combinable
 
     SGR = %u ESC [ 0 %5(%t ; %c %; %) m
                     skip parameters that are
always 0
 
In the
next LATCHATT/SGR example we will use explicit pushes to select the
appropriate
parameter. The second pair is the same as the first, but the
attribute
is treated as a boolean. The first uses the optional %?, the second
omits
it.
 
     LATCHATT = DIM = 2
     SGR = ESC [ m %? %p5 %t ESC [ 2 m %;
 
     LATCHATT = DIM
     SGR = ESC [ m %t ESC [ 2 m %;
 
The
following is suitable for terminals that support all attributes but cannot
combine
them. It selects one attribute giving preference to REVERSE, UNDERLN,
BLINK
and HILIGHT in that order. It uses a complicated
"if-then-elseif-elseif-elseif"
structure. Automatic parameter sequencing cannot
be
relied on, so explicit parameter pushes are used.
 
     LATCHATT = HILIGHT BLINK UNDERLN REVERSE
     SGR = ESC [ %p3 %t 7 %e %p2 %t 4 %e %p4
%t 5 %e\
          %p6 %t 1 %; %; %; %; m
 
Some
terminals use bit-mapped attributes. Terminal manuals are not usually
explicit
on this. Often they use tables like the following:
 
     n      
Visual attribute
 
     0      
normal
     1      
invisible
     2      
blink
     3      
invisible blink
     4      
reverse video
     5      
invisible reverse
     6      
reverse and blink
     7      
invisible reverse and blink
     8      
underline
     9      
invisible underline
     :      
underline and blink
     ;      
invisible underline and blink
     <       reverse and underline
     =      
invisible reverse and underline
     >       reverse, underline and blink
     ?      
invisible reverse, underline and blink
 
After
poring over the ASCII table for a while, it becomes clear that this is
bit-mapped,
with the four high-order bits constant (0x30) and the four low-order
bits
varying, like this:
 
     x x x x 
x x x x
     0 0 1 1 
| | | |___ invisible
              | | |_____ blink
              | |_______ reverse
              |_________ underline
 
This
can be coded in the video file as follows. The attributes  are ored with a
starting
value of '0' (0x30).
 
     LATCHATT = BLINK = 2 REVERSE = 4 UNDERLN
= 8
     SGR = ESC G %'0' %9( %| %) %c
 
The
following gives an example for use with a videotex terminal. All are
equivalent:
the bits are ored together with a starting value of 0x40, or @, and
the
result is output as a character.
 
     LATCHATT = UNDERLN = DLE BLINK = STX
REVERSE = EOT HILIGHT=SP
    
LATCHATT = UNDERLN = ^P BLINK = ^B REVERSE = ^D HILIGHT = SP
     LATCHATT = UNDERLN = 0x10 BLINK = 0x02
REVERSE = 0x04 \
                HILIGHT = 0x20
     SGR = FS G %u %'%5( %| %) %c
 
     LATCHATT = UNDERLN = P BLINK = B REVERSE
= D HILIGHT = `
     SGR = FS G %'%9( %| %) %c
 
Some
terminals that use area attributes will support a single latch attribute.
It is
often called "protected" and is used to indicate protected areas when
the
terminal
is operated in block mode. The following example switches between
protected
and unprotected modes in order to use low intensity. (Be aware that a
terminal
might become very slow when using the protect feature.)  The SGR
sequence
depends only on the attribute being non-zero, so no value is necessary:
 
     LATCHATT = DIM
     SGR = ESC %?%t ) %e ( %;
 
27.4.5.3  Specifying Area Attributes
 
Area or
onscreen attributes are specified like latch attributes.  The AREAATT
keyword
lists the area or onscreen attributes that are available and associates
a
character with each. As for latch attributes, REVERSE, BLINK, UNDERLN, HILIGHT
and DIM
are available. In addition, several flags are available to specify how
the
attributes are implemented by the terminal. The flags are:
 
   ONSCREEN   
the attribute uses a screen position
   LINEWRAP   
the attribute wraps from line to line
   SCREENWRAP 
the attribute wraps from bottom of screen to top
   REWRITE    
must rewrite attribute when writing character
   MAX = #    
maximum number of attributes per line
 
Area
and onscreen attributes modify all characters from the start attribute to
the
next attribute or to an end, which ever is closer. If there is no end, use
SCREENWRAP.
If the end is the end of screen, use LINEWRAP. If end is the end of
the
line, omit both wrap flags. Some terminals allow the user to select the
style.
For onscreen attributes, screen wrap is best and line wrap a good second
best;
for area attributes the choices are about the same. If the attribute takes
up a
screen position, use the ONSCREEN flag.
 
     AREAATT = REVERSE = i UNDERLN = _ BLINK =
b DIM = l
     ASGR = ESC s r %u %5(ESC s %c %)
 
     AREAATT = BLINK = 2 DIM = p REVERSE = 4
UNDERLN = 8 \
               ONSCREEN LINEWRAP
     ASGR = ESC G %u %'0' %5( %| %) %c
 
Some
terminals have the following misfeature: writing a character at the
position
where an attribute was set can remove the attribute. Immediately after
placing
the attribute the character may be written with no problems; however,
the
next time a character is written there, the attribute will disappear. In
this
case, use the REWRITE flag to tell JAM to reset the attribute before
writing
to that position. The following example is for the Televideo 925:
 
     AREAATT = REVERSE = 4 UNDERLN = 8 BLINK =
2 REWRITE
     ASGR = ESC G %'0' %9( %| %) %c
 
Yet
other terminals restrict the number of attributes that are available on a
given
line. If so, include MAX = #, where # represents the maximum. If possible,
also
give a "remove attribute" sequence, ARGR. Changing an attribute to
normal
is not
the same as removing it: a normal attribute will stop the propogation of
a
previous attribute, but a removed attribute will not. If the maximum number of
attributes
is small, JAM's performance may be limited.
 
If
there is a remove attribute sequence, JAM will use it to remove repeated
attributes,
to avoid exceeding the maximum number of attributes on a line. If
there
is no maximum, the remove attribute sequence can be omitted. Indeed it
often
makes the screen "wiggle," which is very unpleasant for the viewer.
 
     AREATT = REVERSE = Q UNDERLN = ` MAX = 16
     ASGR = ESC d %u %'%5( %| %) %c
     ARGR = ESC e
 
27.4.5.4  Color
 
JAM
supports eight foreground and background colors. The COLOR keyword is used
to
associate a character with each color, just as LATCHATT associates a
character
with each attribute. The CTYPE entry has flags that tell JAM that
background
color is available. Only the three primary colors need be specified
in the
video file. If the other colors are not there, they will be generated
according
to the following rule:
 
     BLACK        = BLUE & GREEN & RED
     BLUE         must be specified
     GREEN        must be specified
     CYAN         = BLUE | GREEN
     RED    
     must be specified
     MAGENTA      = RED | BLUE
     YELLOW       = RED | GREEN
     WHITE        = RED | GREEN | BLUE
 
The
tenth parameter to SGR or ASGR is the character representing the foreground
color;
the eleventh is that representing the background color (it is 0 if
background
color is not available). Many ANSI terminals set foreground color
with
the sequence ESC [ 3x m, where x ranges from 0 for black to 7 for white.
Background
color is often set with ESC [ 4x m. The order of the colors varies
from
terminal to terminal.
 
On
color terminals, REVERSE often means black on white. If background color is
available,
JAM can do better if REVERSE is not specified in the video file: it
will
use the specified color as the background, and either black or white as the
foreground.
The following is often suitable for a color ANSI terminal:
 
     LATCHATT = HILIGHT = 1 BLINK = 5
     COLOR = RED = 4 GREEN = 2 BLUE = 1
BACKGRND
     SGR = %3u ESC [ 0 %3( %?%t ; %c %; %) ;
%3u 3%c ; 4%c m
     or
     SGR = %3u ESC [ 0 %5( %?%t ; %c %; %) m
ESC [ 3%c;4%c m
     or
     LATCHATT = HILIGHT BLINK
     SGR = ESC [ 0 %?%p4%t ;5 %; %?%p6%t ;1 %;
m \
           ESC [ 3%p10%c; 4%p11%c m
 
If the
terminal has a unique sequence for each color, a list command works well.
In the
following example, the ANSI attribute sequence (ESC [ 0 ; p1 ; p2 ; ...
m) is
used and the values for the colors are:
 
     cyan           >1
     magenta        5
     blue           5 ; > 1
     yellow         4
     green          4 ; > 1
     red            4 ; 5
     black          4 ; 5 ; > 1
 
     LATCHATT = REVERSE = 7 HILIGHT = 2
     COLOR = CYAN = 0 MAGENTA = 1 BLUE = 2
YELLOW = 3 GREEN = 4\
       RED = 5 BLACK = 6 WHITE = 7
     SGR = ESC [ 0 %p3%t;7%; %p6%t;2%; \
           %l( 0:;>1%; 1:;5%; 2:;5;>1%;
3:;4%; \
           4:;4;>1%; 5:;4;5%; 6:;4;5;>1
%) m
 
Some
terminals use ESC [ 2 ; x ; y m to set color and other attributes. Here x
is the
foreground color and y is the background color; both numbers range from 0
to 7.
If highlight is desired in the foreground, 8 should be added to x. If
blink
is desired, 8 should be added to y. The following video entries satisfy
these
requirements:
 
     LATCHATT = HILIGHT = 8 BLINK = 8
     COLOR = RED = 4 GREEN = 2 BLUE = 1
BACKGRND
     SGR = ESC [ 2 ; %p10 %p6 %+ %d ; %p11 %p4
%+ %d m
 
27.4.6  Message Line
 
JAM
usually steals a line from the screen to display status text and error
messages.
Thus a 25-line screen (as specified in the LINES keyword) will have 24
lines
for the form itself, and one for messages. This use of a normal screen
line
for messages is the default.
 
Some
terminals have a special message line that cannot be addressed by normal
cursor
positioning. In that case, the OMSG sequence is used to "open" the
message
line, and CMSG to close it. All text between these sequences appears on
the
message line. No assumption is made about clearing the line; JAM always
writes
blanks to the end of the line.
 
     OMSG = ESC f
     CMSG = CR ESC g
 
If the
OMSG line keyword is present, JAM uses all the lines specified in the
LINES
keyword for forms.
 
Terminals
that use a separate message line may use different attributes on the
status
line than on the screen itself. JAM provides some support for this
circumstance;
for very complicated status lines, the programmer must write a
special
routine and install it with the statfnc call. (See the Programmer's
Guide
for details.) The keyword MSGATT lists the attributes available on the
message
line. This keyword takes a list of flags:
 
   REVERSE    
reverse video available
   BLINK      
blink available
   UNDERLN    
underline available
   HILIGHT    
highlight (bold) available
   DIM        
dim (low intensity) available
   LATCHATT   
all latch attributes can be used
   AREAATT    
all area attributes can be used
   NONE       
no attributes on message line
   ONSCREEN   
area attributes take a screen position
 
The
attribute for the message line must have been specified as either a latch or
area
attribute, and the sequence to set it must be given in the SGR or ASGR
keyword.
For example, if REVERSE is listed in MSGATT and REVERSE is a latch
attribute,
then SGR is used to set it. Attributes 
that appear in MSGATT and
don't
appear in either LATCHATT or AREAATT are ignored.
 
JAM
must determine the correct count of the length of the line. Thus it is
important
to know whether area attributes are 
onscreen or not. It is not
uncommon
for area attributes to be non-embedded on the screen but embedded on
the
status line. The keyword ONSCREEN may be included in MSGATT to inform JAM of
this
condition.
 
     LATCHATT = DIM
     AREAATT = REVERSE UNDERLN BLINK
     MSGATT = REVERSE UNDERLN BLINK ONSCREEN
     MSGATT = AREAATT ONSCREEN
 
The two
MSGATT entries are equivalent. They show a case where only area
attributes
are available on the message line and they take a screen position.
The
area attributes in the normal screen area do not.
 
27.4.7  Function Key Labels
 
Certain
terminals set aside areas on the screen, typically two lines high and
several
characters wide, into which descriptive labels for the terminal's
function
keys may be written. The KPAR entry gives the number and width of the
function
key label areas, and looks like KPAR = NUMBER = number of labels LENGTH
= width
of area The KSET entry gives the character sequence for writing text
into a
label area. It is passed three parameters:
 
  1. 
The number of the area to be written.
  2. 
Twice the width of the area (LENGTH parameter of KPAR).
  3. 
The label text, as a null-terminated string.
 
Here is
an example, for the HP-2392A:
 
     KPAR = NUMBER = 8 LENGTH = 8
     KSET = ESC & f 0 a %d k %d d 0 L %s
ESC & j B
 
27.4.8  Graphics and Foreign Character Support
 
JAM has
support for eight-bit ASCII codes as well as any graphics that the
terminal
can support in text mode. Bit-mapped graphics are not supported. Just
as the
key translation tables give a mapping from character sequences to
internal
numbers, the GRAPH table in the video file maps internal numbers to
output
sequences. The only character value that may not be sent is 0.
 
Some
terminals have a special "compose" key, active in eight-bit mode.
Generally,
you would press the compose key followed by one or two more keys,
generating
a character in the range 0xa0 to 0xff. JAM can process such
characters
as normal display characters, with no special treatment in the video
file.
 
Other
terminals have special keys that produce sequences representing special
characters.
The modkey utility can be used to map such sequences to single
values
in the range 0xa0 to 0xfe. (See the Programmer's Guide for a way to use
values
outside that range.) The video file would then specify how these values
are
output to the terminal.
 
Often,
to display graphics characters, a terminal must be told to "shift" to
an
alternate
character set (in reality, to address a different character ROM). The
video
file's GRAPH table tells which alternate set to use for each graphics
character,
and how to shift to it. Whenever JAM is required to display a
character,
it looks in the GRAPH table for that character. If it is not there,
the
character is sent to the terminal unchanged. The following section describes
what
happens if it is in the table.
 
27.4.9  Graphics Characters
 
JAM
supports up to three alternate character sets. The sequences that switch
among
character sets are listed below. Modes 0 through 3 are locking shifts: all
characters
following will be shifted, until a different shift sequence is sent.
Modes 4
through 6 are non-locking or single shifts, which apply only to the next
character.
You may need to use the INIT entry to load the character sets you
want
for access by the mode changes.
 
   MODE0      
switch to standard character set
   MODE1      
alternate set 1
   MODE2      
alternate set 2
   MODE3      
alternate set 3
   MODE4      
...
   MODE5
   MODE6
 
Different
modes can be used to support foreign characters, currency symbols,
graphics,
etc. JAM makes no assumption as to whether the mode changing sequences
latch
to the alternate character set or not. To output a character in alternate
set 2,
JAM first outputs the sequence defined by MODE2, then a character, and
finally
the sequence defined by MODE0 (which may be empty, if the others are all
non-locking).
Here are three examples; the second one is ANSI standard.
 
     MODE0 = SI
     MODE1 = SO
     MODE2 = ESC n
     MODE3 = ESC o
 
     MODE0 = ESC [ 10 m
     MODE1 = ESC [ 11 m
     MODE2 = ESC [ 12 m
     MODE3 = ESC [ 13 m
 
     MODE0 =
     MODE1 = SS1
     MODE2 = SS2
 
Any
character in the range 0x01 to 0xff can be mapped to an alternate character
set by
use of the keyword GRAPH. The value of GRAPH is a list of equations. The
left
side of each equation is the character to be mapped; the right side is the
number
of the character set (0, 1, 2, 3), followed by the character to be
output.
Any character not so mapped is output as itself. For example, suppose
that
0x90 = 1 d appears in the GRAPH list. First the sequence listed for MODE1
will be
sent, then the letter d, and then the sequence listed for MODE0.
 
In the
following example, 0x81 is output as SO / SI, 0xb2 as SO 2 SI, and 0x82
as ESC
o a SI. LF, BEL and CR are output as a space, and all other characters
are
output without change. This output processing applies to all data coming
from
JAM. No translation is made for direct calls to printf, putchar, etc. Thus
\n and
\r will still work correctly in printf, and putchar (BEL) still makes a
noise
on the terminal.
     MODE0 = SI
     MODE1 = SO
     MODE2 = ESC n
     MODE3 = ESC o
     GRAPH = 0x81 = 1 / 0xb2 = 1 2 0x82 = 3 a
LF = 0 SP\
             BEL = 0 SP CR = 0 SP
 
For
efficiency, we suggest that you use single shifts to obtain accented
letters,
currency symbols, and other characters that appear mixed in with
unshifted
characters; graphics characters, especially for borders, are good
candidates
for a locking shift.
 
It is
possible, though not recommended, to map the usual display characters to
alternates.
For example, GRAPH = y = 0z will cause the y key to display as z.
Graphics
characters are non-portable across different displays, unless care is
taken
to insure that the same characters are used on the left-hand side for
similar
graphics, and only for a common subset of the different graphics
available.
 
The
GRTYPE keyword provides a convenient shortcut for certain common graphics
sets,
each denoted by another keyword. The format is GRTYPE = type. An entry in
the
GRAPH table is made for each character in the indicated range, with mode 0.
If the
mode is not 0, you must construct the GRAPH table by hand. The GRTYPE
keywords
are:
 
   ALL               0xa0 through 0xfe
   EXTENDED          same as ALL.
   PC                0x01 through 0x1f and 0x80 through 0xff
   CONTROL           0x01 through 0x1f, and 0x7f
   C0                same as CONTROL
   C1                0x80 through 0x9f, plus 0xff
 
The
GRTYPE keywords may be combined.
 
27.4.10  Borders
 
Ten
different border styles may be selected when a form is designed. They are
numbered
0 to 9, with style 0 being the default (and the one all the JAM
internal
forms use). It is usually reverse video spaces, but is replaced by I's
if
reverse video is not available. Border styles may be specified in the video
file.
Otherwise the following defaults are used:
 
     0.  
IIIII               1.    ___
          I  
I                    |   |
          IIIII                    |___|
 
     2.  
+++++               3.    ===
          +  
+                    |   |
          +++++                     ===
 
     4.  
%%%%%               5.   .....
          %  
%                    :   :
          %%%%%                    :...:
 
     6.  
*****               7.   \\\\\
          *  
*                    \   \
          *****                    \\\\\
 
     8.  
/////               9.   #####
          /  
/                    #   #
          /////                    #####
 
The
keyword BORDER specifies alternate borders. If fewer than 9 are given, the
default
borders are used to complete the set. The data for BORDER is a list of 8
characters
per border, in the order: upper left corner, top, upper right corner,
left
side, right side, lower left corner, bottom, lower right corner. The
default
border set is:
 
     BORDER = 
SP  SP  SP  SP  SP 
SP  SP  SP \
               SP  _   SP  |   |   |  
_   |  \
               +   +   +   +  
+   +   +   +  \
               SP  =   SP  |   |   SP 
=   SP \
               %   %   %   %  
%   %   %   %  \
               .   .   .   :  
:   :   .   :  \
               *   *   *   *  
*   *   *   *  \
               \   \   \   \  
\   \   \   \  \
               /   /   /  
/   /   /   /   /  \
               #   #   #   #  
#   #   #   #
 
Another
example, using the PC graphics character set:
 
     BORDER = 
SP   SP   SP   SP   SP  
SP   SP   SP   \
               0xda 0xc4 0xbf 0xb3 0xb3 0xc0
0xc4 0xd9 \
               0xc9 0xcd 0xbb 0xba 0xba 0xc8
0xcd 0xbc \
               0xd5 0xcd 0xb8 0xb3 0xb3 0xd4
0xcd 0xbe \
               0xd6 0xc4 0xb7 0xba 0xba 0xd3
0xc4 0xbd \
               0xdc 0xdc 0xdc 0xdd 0xde 0xdf
0xdf 0xdf \
               .    .    .    :   
:    :    .    .    \
               0xb0 0xb0 0xb0 0xb0 0xb0 0xb0
0xb0 0xb0 \
               0xb2 0xb2 0xb2 0xb2 0xb2 0xb2
0xb2 0xb2 \
               0xbd 0xbd 0xbd 0xbd 0xbd 0xbd
0xbd 0xbd
 
If
there is a GRAPH entry in the video file, you can use the graphics character
set of
the terminal for borders. Choose some numbers to represent the various
border
parts. The GRAPH option can be used to map these numbers to a graphics
character
set. The numbers chosen are arbitrary, except that they should not
conflict
with ordinary display characters. Even if the extended 8 bit character
set is
used, there are unused values in the ranges 0x01 to 0x1f and 0x80 to
0x9f.
 
The
keyword BRDATT can be used to limit the attributes available in the border.
Normally
HILIGHT (or DIM) and REVERSE are used; however, if the terminal uses
onscreen
attributes or can hold only a few attributes per line, it may be better
to
prohibit attributes in borders. This is accomplished by BRDATT = NONE.
 
The flags
used in MSGATT can also be used with BRDATT; however, the only
attributes
available are HILIGHT, DIM, and REVERSE.
 
27.4.11  Shifting Field Indicators and Bell
 
Shift
indicators (ARROWS keyword) are used to indicate the presence of
off-screen
data in shifting fields. The default characters for this purpose are
<,
> and X. (The last character is used when two shifting fields are next to
each
other; it represents a combination of both < and >.)  The shift indicators
can be
changed to any three characters desired.
 
     ARROWS = . . .
 
     GRAPH = 0x1b = 0 0x1b   0x1a = 0 0x1a   0x1d = 0 0x1d
     ARROWS = 0x1b 0x1a 0x1d
 
     MODE0 = SI
     MODE1 = SO
     GRAPH = 0x80 = 1a 0x81 = 1x 0x82 = 1&
     ARROWS = 0x80 0x81 0x82
 
The
BELL sequence, if present, will be transmitted by the library function bel
to give
a visible alarm. Normally, that routine rings the terminal's bell. Such
a
sequence can sometimes be found in the termcap file under vb.
 
27.4.12  jxform Status Text
 
The JAM
authoring utility will display help text on the status line if so
desired.
There are several different "states" in the utility, each with its
own
status
text; the text to be  displayed in each
state is listed in the video
file.
(Logically it belongs in the message file; however, the text mentions keys
to use
and uses visual attributes. Since the keys and attributes are
terminal-dependent,
we store the text in the video file.)
 
Since
vid2bin strips spaces, embedded spaces should be entered with the SP
mnemonic,
or the whole text enclosed in quotes. Attributes can be embedded in
the
text by using %a as a lead-in; up to four hex digits following define the
attribute,
using the codes defined in smdefs.h  .
See d_msg_line in the library
manual
for a fuller explanation of embedded attributes.
 
The
following is a sample without embedded attributes. Function keys 2 to 9 are
used.
 
     JFMKDS = "2: DRAW/test 3: form 4:
field 5: tmplt "\
              "6: del 7: move 8: copy 9:
rept"
     JFMKTM = "2: TEST/draw 3: form 4:
field 5: tmplt "\
              "6: del 7: move 8: copy 9:
rept"
     FMKRMV = "MOVE: use arrow keys to
position, F7 to release"
     FMKRCP = "COPY: use arrow keys to
position, F8 to release"
 
The
next group is similar except that the numbers are given the reverse video
blue
attribute. The text is given the normal (i.e. white) attribute. (The color
is
ignored on monochrome terminals.) The text listed here is the default.
 
     FMKRDS = %a11 2: %a07 SP DRAW/test SP \
              %a11 3: %a07 SP form SP      \
              %a11 4: %a07 SP field SP     \
              %a11 5: %a07 SP tmplt SP     \
              %a11 6: %a07 SP del SP       \
              %a11 7: %a07 SP move SP      \
              %a11 8: %a07 SP copy SP      \
              %a11 9: %a07 SP rept
 
     FMKRTM = %a11 2: %a07 SP TEST/draw SP \
              %a11 3: %a07 SP form SP      \
              %a11 4: %a07 SP field SP     \
              %a11 5: %a07 SP tmplt SP     \
              %a11 6: %a07 SP del SP       \
              %a11 7: %a07 SP move SP      \
              %a11 8: %a07 SP copy SP      \
              %a11 9: %a07 SP rept
     FMKRMV = %a11 7: %a07 \
        " MOVE:  use arrow keys to position, F7 to release"
     FMKRCP = %a11 8: %a07 \
        " COPY:  use arrow keys to position, F8 to release"
 
27.4.13  Cursor Position Display
 
The
utility will display the current cursor position on the status line if
desired.
When possible, JAM uses nonblocking keyboard reads. If no key is
obtained
within a specified time, the cursor position display is updated. This
allows
fast typists to type at full speed; when the typist pauses, the cursor
position
display is updated. The keyword CURPOS specifies the timeout delay, in
tenths
of a second. If the keyword is omitted, or is 0, there will be no cursor
position
display. Many terminals display the cursor position themselves.
The
delay depends on the baud rate and the terminal itself; it  should be chosen
so that
typing is not slowed down. If the terminal has its own display, CURPOS
should
be omitted.
 
If
there is no non-blocking read, a non-zero value of CURPOS  enables the
display
and zero disables it.
 
     CURPOS = 1     - update display every .1 sec
                      (use on fast systems)
     CURPOS = 3     - every .3 sec (reasonable for most)
     CURPOS = 7     - at low baud rates
     CURPOS = 0     - no display, same as omitting keyword
 
Appendix
A  Error Messages
 
In this
Appendix, all the error messages issued by the JAM run-time system and
utilities
appear. Each message is listed, with its tag, as it appears in the
message
file distributed by JYACC; even if you change the wording of these
messages,
the tag will remain the same. If you modify the message file
extensively,
you may want to keep the original around for correlation with this
list.
Some messages have slots for information determined at run-time; these
appear
as printf percent escapes, commonly %s for character strings and %d for
numbers.
 
Each
message is followed by a less terse description of the error condition and
the
contexts in which it can arise. If recovery is necessary and possible, you
will
also find recommendations on how to recover from the error.
 
The
run-time and screen editor messages are currently in message file order,
which
is perhaps not the most useful. Utility messages are alphabetical by
utility.
 
28
Run-time Messages
 
SM_BADTERM
= Unknown terminal type. SM_ENTERTERM = Please enter terminal type or
%KNL to
exit. Cause: The library function sm_initcrt cannot find the
                     configuration files it
needs to talk to your terminal.
                     Corrective action: Check
your SMVIDEO, SMKEY, SMTERM, and
                     SMVARS setup variables.
You can proceed by typing the name
                     of your terminal in
response to this message, but that's
                     tedious.
 
SM_MALLOC
= Insufficient memory available. Cause: The screen manager uses the C
                     library function malloc() to get memory when needed. It
has
                     exhausted the area
reserved for dynamic allocation, or
                     perhaps the area has been
corrupted. Corrective action:
                     Exit the program.
 
SM_KEYENV
= SMKEY not found. Cause: The file named in the SMKEY setup variable
                     cannot be opened. This
will cause initialization to be
                     aborted. Corrective
action: Correct the environment
                     variable. Perhaps you need to re-run the key2bin utility.
 
SM_VIDENV
= SMVIDEO not found. Cause: The file named in the SMVIDEO setup
                     variable cannot be
opened. This will cause initialization
                     to be aborted. Corrective
action: Correct the environment
                     variable. Perhaps you
need to re-run the vid2bin utility.
 
SM_FNUM
= Bad field # or subscript. Cause: A field number (following #) or
                     occurrence number (in
[]'s following a field name or
                     number) is out of range.
Corrective action: Correct the
                     math edit or JPL program
that contains the errant number.
 
SM_DZERO
= Divide by zero. Cause: Your math expression has caused division by
                     zero. Corrective action:
Find the zero. You may need to
                     make a field
data-required, as blank fields have a numeric
                     value of zero.
 
SM_EXPONENT
= Exponentiation invalid. Cause: Your math expression has attempted
                     to raise zero to a
negative power, or to raise a negative
                     number to a fractional
power. Corrective action: Fix the
                     exponential expression.
 
SM_DATE
= Invalid date. Cause: The date in a date field is not formatted
                     according to the field's
date edit string. Corrective
                     action: Re-enter the
date.
 
SM_MATHERR
= Math error - Cause: Used as a prefix to other math error messages.
                     Corrective action: None.
 
SM_FORMAT
= Invalid format. Cause: The precision expression that precedes a math
                     expression is malformed.
Corrective action: It should be
                     %m.n, where m is the
total width of the result and n is the
                     number of decimal places.
 
SM_DESTINATION
= Invalid destination. Cause: The destination field expression
                     that begins a math
expression is not followed by an equal
                     sign. Corrective action: Supply the equal sign.
 
SM_INCOMPLETE
= Expression incomplete. SM_ORAND = Operand expected. SM_ORATOR =
                     Operator expected.
SM_EXTRAPARENS = Right parenthesis
                     unexpected. SM_MISSPARENS
= Right parenthesis expected.
                     Cause: The right-hand
side of a math expression is missing
                     or malformed. Corrective
action: Correct the expression.
 
SM_DEEP
= Formula too complicated. Cause: The internal stack used to store
                     intermediate results in
math expression evaluation has
                     overflowed. Corrective
action: Simplify the expression, or
                     use an intermediate.
 
SM_FUNCTION
= Invalid function. Cause: The name following the @ in a math
                     expression is not
"date", "sum", or "abort". Corrective
                     action: Use one of the
built-in functions.
 
SM_ARGUMENT
= Invalid argument. Cause: The argument to @abort in a math
                     expression is not a
number. Corrective action: The
                     meaningful arguments to
@abort are -2, -1, 0, and 1. Use
                     one of those.
 
SM_MISMATCH
= Type mismatch. Cause: A comparison between numeric and string
                     variables has been
attempted in a math expression.
                     Corrective action: Check
the types or character edits of
                     the data elements
involved.
 
SM_NOTMATH
= Not a math expression. Cause: JAM couldn't get to first base trying
                     to evaluate a math
expression edit. Corrective action:
                     Check the Author's Guide
for a description of math
                     expression syntax.
 
SM_QUOTE
= Missing quote character. Cause: A math or string expression contains
                     an unclosed quote.
Corrective action: Supply the missing
                     quote.
 
SM_SYNTAX
= Syntax error. Cause: Extra characters at the end of a math
                     expression, or a
malformed relational operator. Corrective
                     action: Correct the
indicated problem.
 
SM_FRMDATA
= Bad data in form. Cause: A file you have attempted to open as a JAM
                     screen is not a screen
file, or was created with a
                     different release version
of JAM, or has been corrupted.
                     Corrective action: Check
the screen name, then try to bring
                     it up in the screen
editor.
 
SM_NOFORM
= Cannot find form. Cause: JAM cannot open the form file you have
                     requested. Corrective
action: Check that the file exists,
                     and/or that proper
entries have been made in the SMPATH
                     directory list, the memory-resident form list, and the
                     SMFLIBS library list.
 
SM_FRMERR
= Error while reading form. Cause: This refers to I/O errors in
                     reading a form file from
disk. Corrective action: Retry the
                     operation.
 
SM_BIGFORM
= Form has fields that extend beyond screen size. Cause: You have
                     tried to display a form
that won't fit on your terminal.
                     Corrective action: Reduce
the screen's size, using the
                     screen editor.
 
SM_SP1
= Please hit the space bar SM_SP2 = after reading this message. Cause:
                     These two lines appear in
a prompt window when an error
                     message has been displayed
and you have not acknowledged it
                     by pressing the space
bar, but by pressing some other key.
                     Corrective action: Press
the space bar. If you don't want
                     to acknowledge the
message, set the SMEROPTIONS setup
                     variable.
 
SM_RENTRY
= Entry is required. Cause: You have failed to enter data in a
                     required field.
Corrective action: Enter something. In
                     digits-only fields, you
must enter at least one digit.
 
SM_MUSTFILL
= Must fill field. Cause: You have failed to fill a must-fill field.
                     No blanks whatever are
allowed there. Corrective action:
                     Fill out the field.
 
SM_AFOVRFLW
= Amount field overflow. Cause: You have typed a number that is too
                     big for the field's
currency format to accommodate.
                     Corrective action: Reduce
the number or increase the
                     precision.
 
SM_TOO_FEW_DIGITS
= Too few digits. SM_CKDIGIT = Check digit error. Cause: A
                     number has failed
check-digit validation. Corrective
                     action: Re-enter the
number.
 
SM_FMEM
= Insufficient memory for data entry field. Cause: In trying to
                     construct a field for
data entry in a help screen,
                     available memory was
exhausted. Corrective action: Exit the
                     program.
 
SM_NOHELP
= No help text available. Cause: You have pressed the HELP key in a
                     field where no help was
available. Corrective action:
                     Define a help screen for
the field or screen.
 
SM_MAXHELP
= Five help levels maximum. Cause: You have nested help windows too
                     deeply. Corrective action: Restructure the help
windows.
 
SM_FRMHELP
= No form-level help text available. Cause: You have pressed the FORM
                     HELP key in a screen with
no form-wide help. Corrective
                     action: Define a help
screen for the form.
 
SM_OUTRANGE
= Out of range. Cause: The string or number you have entered
                     violates a range edit.
Corrective action: Enter a correct
                     value, or relax the range
restrictions.
 
SM_SYSDATE
= Use clear for system date or enter in format: Cause: The date in a
                     system date field is not
formatted according to the field's
                     date edit string.
Corrective action: Re-enter the date, or
                     clear the field to get the current date.
 
SM_DATFRM
= Invalid format; enter date in format: Cause: The date in a date
                     field is not formatted
according to the field's date edit
                     string. Corrective action:
Re-enter the date.
 
SM_DATCLR
= Invalid date; clear gets system date. Cause: The date in a system
                     date field is not
formatted according to the field's date
                     edit string. Corrective
action: Re-enter the date, or clear
                     the field to get the
current date.
 
SM_DATINV
= Invalid date; enter a valid date. Cause: The date in a date field is
                     not formatted according
to the field's date edit string.
                     Corrective action:
Re-enter the date.
 
SM_SYSTIME
= Use clear for system time or enter in format: Cause: The time in a
                     system time field is not
formatted according to the field's
                     time edit string.
Corrective action: Re-enter the time, or
                     clear the field to get
the current time.
 
SM_TIMFRM
= Invalid format; enter time in format: Cause: The time in a time
                     field is not formatted
according to the field's time edit
                     string. Corrective action: Re-enter the time.
 
SM_TIMCLR
= Invalid time; clear gets system time. Cause: The time in a system
                     time field is not
formatted according to the field's time
                     edit string. Corrective
action: Re-enter the time, or clear
                     the field to get the
current time.
 
SM_TIMINV
= Invalid time; enter a valid time. Cause: The time in a time field is
                     not formatted according
to the field's time edit string.
                     Corrective action:
Re-enter the time.
 
SM_MOREDATA
= No more data. Cause: You have attempted to scroll past the
                     beginning or end of a
non-circular scrolling field.
                     Corrective action:
Warning only.
 
SM_SCRLMEM
= Insufficient memory for scrolling. Cause: Ran out of memory for
                     scroll buffers.
Corrective action: Exit the program.
 
SM_NOTEMP
= Cannot open temporary file. Cause: The local print function failed
                     to open its scratch file.
Corrective action: Check write
                     permissions in your
directory.
 
SM_NOFILE
= '"%s" not found' Cause: A file needed by the screen manager was
                     missing. Corrective action:
Supply the file, or correct the
                     environment variable that
points to it.
 
SM_NOENV
= "'%s' missing" SM_NOSECTOR = section '%2.2s' not found SM_FFORMAT =
                     bad file format in
"%s" SM_FREAD = file read error in "%s"
                     Cause: There was a
problem initializing one of the
                     configuration files (the
key file, video file, msgfile,
                     smvars or setup).
Corrective action: Check the contents of
                     the text file, compile it again (with key2bin, vid2bin,
                     msg2bin or var2bin), and
try again.
 
SM_RX1
= Invalid character. Cause: The character you have typed is not allowed
                     by the field's regular
expression. Corrective action: Type
                     an allowed character, or
relax the expression.
 
SM_RX2
= Incomplete entry. Cause: The field's regular expression demands more
                     data than you have
entered. Corrective action: Supply the
                     missing characters.
 
SM_RX3
= No more input allowed. Cause: The opposite problem:  the field's
                     regular expression
demands fewer characters than you have
                     entered. Corrective
action: Shorten your input.
 
SM_TABLOOK
= Invalid entry. Cause: The contents of a field have failed the
                     table-lookup validation.
Corrective action: Correct the
                     input (perhaps through
item selection), or add the missing
                     item to the table-lookup screen.
 
SM_ILLELSE
= Illegal Else Cause: In a JPL program, an else has appeared without
                     a preceding if.
Corrective action: Correct the program's
                     syntax.
 
SM_EOT
= unexpected End Of File Cause: At the end of JPL program text, there are
                     unclosed blocks.
Corrective action: Supp;ly the missing
                     right curly braces.
 
SM_BREAK
= BREAK not within loop Cause: A JPL program contains a break command
                     that is not inside a for
or while loop. Corrective action:
                     Remove the break.
 
SM_NOARGS
= Verb needs arguments Cause: A JPL command that requires arguments
                     has been given none.
Corrective action: Supply the
                     arguments; see the JPL
Programmer's Guide.
 
SM_HASARGS
= Illegal arguments Cause: A JPL command has excess arguments.
                     Corrective action: Remove
the excess.
 
SM_EOL
= Source line too long Cause: A JPL program contains a logical line that
                     is too long (currently, a
couple of thousand characters).
                     Corrective action: Figure
out how to do it in multiple
                     lines.
 
SM_EXCESS
= Extra data at end of line Cause: In certain JPL commands, there is
                     superfluous stuff
following the command. Corrective action:
                     Get rid of it.
 
SM_FILEIO
= System File I/O error Cause: An I/O error has occurred while reading
                     a JPL program file.
Corrective action: Exit the program.
 
SM_FOR
= USAGE: FOR varname = Value WHILE ( expression ) STEP [+-]value Cause: A
                     JPL for command has a
syntax error. Corrective action:
                     Recast the command
according to the given format.
 
SM_LINE_2_LONG
= Line too long after expansion Cause: A line of a JPL program is
                     too long after colon
expansion (more than about 2000
                     characters). Corrective action: Check for missing
                     subscripts: a name with
multiple occurrences but no
                     subscript in the
expression is replaced by all the
                     occurrences.
 
SM_NOFILE
= Could not open file Cause: A JPL program source file was missing or
                     unreadable. Corrective
action: Create the file, correct its
                     spelling in the program,
or add its directory to your
                     SMPATH.
 
SM_NONAME
= Expected variable name Cause: An entry in a JPL vars command does
                     not begin with a letter,
$, ., or _. Corrective action: Fix
                     the name.
 
SM_NOTARGET
= Target does not exist Cause: The field to be assigned to in a JPL
                     math or cat command is
not in the screen or LDB. Corrective
                     action: Create the field
or change the command.
 
SM_NUMBER
= Illegal Number Cause: The argument to a JPL return statement was
                     invalid. Corrective action: It must be an integer
constant,
                     variable name, or LDB
name - no expressions.
 
SM_RCURLY
= Ended block not begun Cause: A JPL program has too many right
                     curlies. Corrective
action: Remove some.
JM_BIGPARAM
= Parameter list is too big Cause: A parameter list to a caret
                     function exceeds 128
characters. Corrective action: Figure
                     out a way to make the
list shorter.
 
JM_OVFORM
= Form stack overflow Cause: You have progressed through too many
                     (currently 100) screens
without re-visiting any, thus
                     blowing JAM's control
stack. Corrective action: Consider
                     breaking your application
into sub-processes.
 
JM_LONGNAME
= Form name '%s' is too long Cause: The form name in a control
                     field, plus extension if
any, exceeds the limit for
                     filenames (currently over
80). Corrective action: Rename
                     the screen. You must be
tired of typing it, anyway.
 
JM_INVENTRY
= Invalid entry Cause: The form name you have entered in the
                     go-to-form window (SPF3)
begins with one of the reserved
                     characters ^ ! or &. Corrective action: Change the form
                     name.
 
JM_NODD
= Bad or missing Data Dictionary file Cause: The data dictionary file
                     (by default 'data.dic')
can't be opened successfully.
                     Corrective action: If you didn't want a data dictionary,
                     ignore this message. If
you did, check your SMDICNAME setup
                     variable to make sure it
matches the filename, and check
                     SMPATH to see if it
includes all the directories it should.
 
JM_NONDX
= Can't initialize index Cause: The library function sm_ldb_init() has
                     failed to create the
local data block, either because the
                     data dictionary is
missing or because it is out of memory.
                     Corrective action:
Restore the data dictionary or get more
                     memory. Bear in mind that
buggy programs that corrupt the
                     malloc() area can cause
this symptom.
 
JM_READERR
= Error reading %s file Cause: JAM has incurred an I/O error reading
                     an LDB initialization
file, whose name appears in the
                     message. Corrective
action: Check your program for other
                     bugs; this is a straight text file, and format errors
are
                     unlikely.
 
JM_INVFILE
= Error: initialization file %s is invalid Cause: The quotes in an
                     LDB initialization file
don't match up. Corrective action:
                     Check the file for
missing double quotes.
 
JM_BIGNAME
= Warning: name %s too long Cause: A field name and occurrence
                     expression in an LDB
initialization file is longer than 35
                     characters. Corrective
action: Fix the name or subscript.
 
JM_NOITEM
= Item %s does not exist in Data Dictionary Cause: The item named in
                     an LDB initialization
file is not in the LDB. Corrective
                     action: These files
consist of name/value pairs; make sure
                     there isn't one missing
somewhere.
 
JM_BIGELE
= Warning: element number %d exceeds occurrences for %s Cause: The
                     subscript on the item
name in an LDB initialization file is
                     greater than the actual
number of occurrences in the LDB.
                     Corrective action: Take
out the offending entry or increase
                     the number of
occurrences.
 
JM_BIGINIT
= Warning: init string for %s too long; truncated Cause: The data
                     string supplied after the
item name is longer than the
                     item's size in the LDB.
Corrective action: Shorten the data
                     or lengthen the
occurrence.
 
JM_BADDATA
= Warning: bad data, no %s initialization Cause: Because of format or
                     other errors flagged
separately, no values from the named
                     file were loaded.
Corrective action: Correct the other
                     errors.
 
JM_NOINI
= Warning: Initialization file %s not found. Cause: An LDB
                     initialization file
mentioned in a call to sm_lreset() or
                     in the SMININAMES setup
variable can't be opened.
                     Corrective action: Create
the file. If you know it exists,
                     check your SMPATH
directories and your SMININAMES list.
 
 
29
Screen and Data Dictionary Editor Messages
 
 
FM_BADENTRY
= Bad entry. Cause: In the field size window, you have specified a
                                vertical array
without giving an offset.
                                Corrective
action: Supply the offset.
 
FM_MXSCRN
= Maximum number of %s on the screen is %d. Cause: You have tried to
                                make your screen bigger than the display, using
                                the PF3
window; the maximum possible values are
                                in the
message. Corrective action: Specify a
                                smaller
screen.
 
FM_MNBRDR
= Minimum number of %s to hold form data and a border is %d. Cause: In
                                the PF3
window, you have tried to make the
                                screen smaller
than the existing data plus
                                border. Corrective action: Make the
screen
                                larger, or
move or delete some of the contents.
 
FM_MNFORM
= Minimum number of %s to hold form data is %d. Cause: In the PF3
                                window, you have tried to make the
screen
                                smaller than
the existing data. Corrective
                                action: Make
the screen larger, or move or
                                delete some of
the contents.
 
FM_NOOPEN
= Cannot create form %s. Cause: The editor was unable to create the
                                file whose
name is in the message, probably for
                                lack of
permission or space. Corrective action:
                                Write the screen to a different file,
or escape
                                to the command
interpreter and correct the
                                problem.
 
FM_WRFORM
= Error writing form '%s'. Cause: The editor incurred an I/O error
                                while writing
out the screen file. Corrective
                                action: Try
writing to a different file.
 
FM_NOFROOM
= Insufficient memory for new fields. Cause: No fields can be added
                                because the editor has run out of
memory.
                                Corrective
action: Write the screen out at once,
                                exit the
editor, and re-edit the screen.
 
FM_ARHROOM
= No room for horizontal array. Cause: In the field size window, you
                                have specified
a horizontal array that will fall
                                outside the
screen. Corrective action: Make the
                                screen bigger,
or the array smaller.
 
FM_ARVROOM
= No room for vertical array. Cause: In the field size window, you
                                have specified
a vertical array that will fall
                                outside the
screen. Corrective action: Make the
                                screen bigger,
or the array smaller.
 
FM_ARHVSEL
= Enter v or h. Cause: I'm not sure this error message is correct.
                                Corrective
action:
 
FM_AROVERLAP
= Overlaps existing field. Cause: You have specified an array that
                                would overlay
part of an existing field.
                                Corrective
action: Change the array size or move
                                the field.
 
FM_UCSET
= Set upper or lower case. Cause: You have specified both upper- and
                                lower-case in
the field edits window. Corrective
                                action: Type
'n' for one or the other.
 
FM_SHRNG
= The shifting increment must be at least 1, but no more than %d.
                                Cause: You
have specified a shifting increment
                                of zero, or
greater than the onscreen width of
                                the field. Corrective
action: Change the shift
                                increment to a
value in the proper range,
                                indicated in
the message.
 
FM_FLDLEN
= Length must be non-zero and no greater than %d. Cause: In the field
                                size or summary window, you have tried
to make a
                                field so long
that it reaches out of the screen.
                                Corrective
action: Make the field shorter or
                                move its origin to the left.
 
FM_GRNONE
= Graphics not available on this terminal. Cause: You have pressed the
                                graphics key
(PF10 or SPF5), but your display's
                                video file contains
no definitions for graphics
                                characters.
Corrective action: Put the
                                appropriate
entries (GRAPH, GRTYPE, MODE1-6) in
                                your video
file.
 
FM_OVERLAP
= Overlaps field or border. Cause: In creating a JAM control field or
                                moving an
ordinary field, you have placed it so
                                that it would
overlap another field or the
                                screen's
border. Corrective action: Reposition
                                the new field.
 
FM_NAMEINUSE
= Name already assigned to another field. Cause: You have tried to
                                give a field a
name that already belongs to
                                another field. Corrective action:
Rename one of
                                the fields.
 
FM_FLDNO
= Invalid field number. Cause: In specifying a next-field edit, you
                                have given a
target field number (using #) that
                                is out of
range for the screen. Corrective
                                action: Change
the field number to refer to an
                                existing
field.
 
FM_INCR
= Invalid increment. Cause: In specifying a next-field edit, you have
                                given a field
increment (using + or -) that
                                results in an
occurrence number out of range for
                                the field.
Corrective action: Reduce the
                                increment.
 
FM_FNUMB
= Field number must start with #. Cause: In specifying a next-field
                                edit, you have
typed # for field number but have
                                not put a number after it. Corrective action:
                                Supply the
field number.
 
FM_ELEMENT
= Invalid element. Cause: In a next-field edit, your element
                                specification
contains a syntax error.
                                Corrective
action: The proper syntax is
                               
field-id[element].
FM_1FMT
= Enter one format only. Cause: You have entered both a date and a time
                                format string.
Corrective action: Remove one of
                                them; a field
can be either date or time, but
                                not both.
 
FM_CLCMIN
= Minimum digits should not exceed length of field, which is %d.
                                Cause: In the math/check digit window, you
have
                                specified a
minimum number of digits for the
                                check-digit
that is too large. Corrective
                                action: Reduce the minimum below the number
in
                                the message,
or make the field longer.
 
FM_AZNAME
= Name must start with letter. Cause: You have typed a field name that
                                does not begin
with a letter. Corrective action:
                                Change the
field name.
 
FM_A9NAME
= Must be alpha, number or '_'. Cause: You have typed a character
                                elsewhere in a
field name that is neither
                                alphanumeric nor an underscore. Corrective
                                action: Remove
the offending character from the
                                name.
 
FM_INBORDER
= Bad entry -- field in prospective border. Cause: You have
                                requested a
border on a screen that has fields
                                at the very
edge of the screen, where the border
                                should go.
Corrective action: Move the offending
                                field or fields.
 
FM_DUPDRAW
= Duplicate draw character. Cause: In the draw-field/field defaults
                                window, you
have specified a draw-field
                                character
twice. Corrective action: Pick another
                                character.
 
FM_IFORMAT
= Invalid format. Cause: In specifying a window name and coordinates
                                for a help
screen, sub-menu, or other edit, you
                                have deviated from the prescribed format
                                screen-name
(line, column) Perhaps you have left
                                out a
parenthesis, or omitted the comma.
                                Corrective
action: Correct the format.
 
FM_INVRC
= Invalid menu return code. Cause: You have specified a menu return
                                code that does
not evaluate to an integer.
                                Corrective
action: Allowable return codes are:
                                decimal numbers; hexadecimal numbers;
quoted
                                printable
ASCII characters, as 'q'; ASCII
                                control
character mnemonics, as ESC; and JAM
                                logical key mnemonics from smkeys.h.
 
FM_WRMSK
= A word wrap field may not have a regular expression edit. Cause: You
                                have attempted
to create a field with both word
                                wrapping and a
regular expression edit. Because
                                word wrap
interprets certain characters
                                specially,
this is not allowed. Corrective
                                action: Choose
one. As word-wrapped fields are
                                generally used
for large quantities of text,
                                they are best
left unfiltered.
 
FM_RX1
= Regular expression too long. Cause: When compiled, the regular
                                expression you
have typed is to long to be
                                stored as a
special edit. Corrective action: Try
                                to simplify
the expression.
 
FM_RX2
= Unbalanced '[' bracket. Cause: A left bracket that begins a character
                                class has no
matching right bracket. Corrective
                                action: If you
want a literal left bracket,
                                quote it: \[ .
If you really wanted a character
                                class, insert the corresponding right
bracket.
 
FM_RX3
= Too many '(' brackets. FM_RX4 = Too many ')' brackets. FM_RX8 = Closing
                                '}' brace
expected. FM_RX11 = Previous '('
                                bracket not yet closed. Cause:
Various cases of
                                bracket
imbalance. Corrective action: As above,
                                the usual
cause is forgetting to quote a
                                bracketing
character when you want it literally.
 
FM_RX5
= Expecting number between 0-9 or '\}'. Cause: You have put something
                                other than a
number inside a subexpression
                                repeat count.
Corrective action: Remove it.
 
FM_RX6
= Range may not exceed 255. Cause: You have specified a repeat count
                                greater than
what will fit in a field (fields
                                are limited to
255 characters in width).
                                Corrective action: Reduce the count.
 
FM_RX7
= Too many commas in specifying range. Cause: You have put two
                                consecutive
commas in a range expression.
                                Corrective action:
Remove one.
 
FM_RX8
= Closing '}' brace expected. Cause: You have followed a comma in a range
                                expression
with a closing curly brace.
                                Corrective
action: Remove the comma, or put
                                another number after it.
 
FM_RX9
= First number exceeds second in specifying range. Cause: You have got
                                the range of a
range backwards. Corrective
                                action: Reverse
or correct the range limits.
 
FM_RX10
= \digit out of range. Cause: You have entered a backslash followed by a
                                number to
re-match a subexpression, but the
                                number exceeds
the number of parenthesized
                               
subexpressions. Corrective action: Reduce the
                                number or
parenthesize the correct
                               
subexpressions.
 
FM_RX12
= Unexpected end of regular expression. Cause: Your regular expression
                                ends with a
backslash. Corrective action: If you
                                want a literal
backslash, double it.
 
JX_JCSEXISTS
= '"%s" field already exists.' Cause: You have attempted to create
                                a JAM control
string or field when there is
                                already one
such in your screen. Corrective
                                action: Use a
different function key for the
                                control string, or remove the existing one.
 
JX_NOTFIELD
= Cursor is not in a field. Cause: You have pressed SPF4 to add a
                                data
dictionary entry equal to a named field,
                                but the cursor is not in a field.
Corrective
                                action: Move
the cursor to a named field.
 
JX_NONAME
= Field has no name. Cause: You have pressed SPF4 to add a data
                                dictionary
entry equal o a named field, but the
                                cursor is in a
field with no name. Corrective
                                action: Move
the cursor to a named field, or
                                give the
current field a name.
 
JX_ENTEXIST
= Entry already exists. Cause: You have pressed SPF4 to add a data
                                dictionary
entry equal to a named field, but
                                that name is
already in the data dictionary.
                                Corrective action: Delete the old data
                                dictionary
entry, or use SPF6 to modify it.
 
JX_DDDATA
= Bad data in data dictionary file. Cause: JAM has attempted to read
                                in the data
dictionary to add an entry to it,
                                and the
dictionary is corrupt. Corrective
                                action: Exit
JXFORM and fix or delete the data
                                dictionary.
 
JX_DDLIMIT
= Cannot update; new element count exceeds %d limit. Cause: Adding
                                another
element would make the local data block
                                too big to fit
in a malloc'ed area. Corrective
                                action: None,
really. Delete some elements, or
                                buy a
non-segmented, demand-paged machine.
 
JX_DDEREAD
= Error reading data dictionary file. Cause: JAM has encountered a
                                file I/O
error, or the data dictionary is
                                corrupt.
Corrective action: Exit JXFORM and
                                repair or
remove the offending file.
 
JX_DDCREATE
= Cannot create data dictionary. Cause: You do not have permission
                                or room to create a data dictionary in your
                                current
directory. Corrective action: Exit
                                JXFORM (or
escape to the command interpreter)
                                and correct
the file system problem.
 
JX_DDUPDATE
= Cannot update data dictionary. Cause: You do not have permission
                                to update the
data dictionary file, or a file
                                system error
has occurred. Corrective action:
                                Exit JXFORM
and correct the file system problem.
 
JX_DDWRITE
= Failure in writing data dictionary. Cause: JAM incurred a file
                                system error
while writing a new entry to the
                                data
dictionary. The new entry is lost, and the
                                data
dictionary itself may be corrupted.
                                Corrective
action: Exit JXFORM and inspect the
                                data dictionary with dd2asc. If it's bad, remove
                                it; otherwise
retry the operation.
 
JX_NOUPDATE
= Can't update file. LATEST is '%s'; '%s' is backup Cause: JXFORM
                                has incurred a
file system error attempting to
                                add a data
dictionary entry. The message gives
                                the names of
the latest dictionary (with
                                previous
updated from this session) and the
                                original,
presumably intact one. Corrective
                                action:
Inspect the newerdictionary with lstdd
                                or dd2asc to
make sure it's intact. If it is,
                                copy it over the other; otherwise, remove
it.
 
JX_NOREBUILD
= Cannot rebuild index. Cause: JXFORM has incurred an error writing
                                out the data
dictionary, preparatory to
                                rebuilding the LDB. Corrective action: Try
just
                                writing out
the dictionary. If that fails too,
                                escape to the
command interpreter and try to
                                determine the reason.
 
JX_NORECORD
= No record deleted or already undeleted. Cause: You have attempted
                                to undelete an
entry with PF6 without first
                                deleting an
entry, or have pressed PF6 twice in
                                succession. Corrective action: Delete a
record.
 
JX_NOROOM
= No room in data dictionary. Cause: Undeleting an entry would cause
                                the LDB or
data dictionary to exceed available
 
                                memory. Corrective action: Delete unneeded
                                entries, if
possible.
 
JX_RECMANY
= Cannot add record; total records = %d limit. Cause: Adding an entry
                                would cause
the LDB or data dictionary to exceed
                                available
memory. Corrective action: Delete
                                unneeded
entries, if possible.
 
JX_TMPOPEN
= Can't open %s; try writing %s. Cause: The editor is unable to open
                                a temporary file. Corrective action: Try
writing
                                the real data
dictionary, using the exit window.
 
JX_OPENFATAL
= Can't open %s; please exit DD editor. Cause: The editor is unable
                                to open the data dictionary for writing.
                                Corrective
action: None, really, since you can't
                                shell-escape
within the DD editor.
 
JX_LGOPEN
= Can't write %s; delete some items and try again. Cause: JXFORM has
                                incurred an
I/O error writing the data
                                dictionary,
perhaps due to lack of disk space.
                                Corrective
action: Make the dictionary smaller
                                and write it
out again.
 
JX_READ
= Cannot read %s. Cause: The data dictionary cannot be read in.
                                Corrective
action: This is only a warning; but
                                if you really
have a data dictionary, check your
                                SMDICNAME
setup variable to make sure it's what
                                you expected.
 
JX_BADDATA
= Bad data in %s. Cause: The file JXFORM has opened as a data
                                dictionary is not one, or it is
corrupt.
                                Corrective
action: Exit JXFORM and inspect the
                                file in
question. Run dd2r4 to convert your
                                Release 3 dictionary to Release 4 format,
if you
                                haven't
already.
 
JX_LDBMANY
= Too many entries for ldb index. Same as JX_DDLIMIT.
 
JX_CHGTOTAL
= Total fields = %d limit; can only %s %s. Cause: There is no more
                                room in the dictionary for named
entries;
                                however, you
may still change comments or add
                                records.
Corrective action: Restrict yourself to
                                the activities suggested, or delete
some
                                unwanted
entries.
 
JX_ITMEXIST
= Item exists. Cause: You are trying to add an item that is already
                                in the
dictionary. Corrective action: Rename one
                                of the items.
 
JX_NOFIELDS
= Data dictionary has no fields. Cause: The data dictionary was
                                successfully
read in, but it was empty.
                                Corrective action:
Enter the data dictionary
                                editor and add
some entries.
 
JX_ITMNOTFOUND
= Item not found. Cause: The item you are searching for, using
                                PF7 or PF8 in
the data dictionary editor, was
                                not between the cursor and the end
of the
                                dictionary.
Corrective action: Modify the search
                                string, go
back to the beginning of the
                                dictionary (since search does not wrap),
or try
                                searching on
comments.
 
JX_NOSEARCH
= Don't know what to search. Cause: You have pressed the repeat
                                search key
(PF8) before ever pressing PF7 and
                                supplying a
search string.  Corrective action:
                                Press PF7
instead.
 
 
30
Utility Messages
 
These
messages are also listed in the Configuration Guide with their utilities;
they
are repeated here for convenience.
 
bin2c
Messages
 
Insufficient
memory available. Cause: The utility could not allocate enough
                                      memory
for its needs. Corrective action:
                                      None.
 
File
"%s" already exists; use '-f' to overwrite. Cause: You have specified
an
                                      output
file that already exists.
                                     
Corrective action: Use the -f flag to
                                      overwrite the file, or use
another name.
 
Cannot
open "%s" for writing. Cause: An output file could not be created,
due to
                                      lack of
permission or perhaps disk space.
                                      Corrective action: Correct the file
system
                                      problem
and retry the operation.
 
Cannot
open "%s" for reading. Cause: An input file was missing or
unreadable.
                                     
Corrective action: Check the spelling,
                                     
presence, and permissions of the file in
                                     
question.
 
Error
reading file "%s" Cause: The utility incurred an I/O error while
                                      processing the file named in the
message.
                                     
Corrective action: Retry the operation.
 
Error
writing file "%s" Cause: The utility incurred an I/O error while
                                     
processing the file named in the message.
                                     
Corrective action: Retry the operation.
 
 
b2hex
Messages
 
Error
reading %s Error writing %s Cause: The utility incurred an I/O error while
processing
an input or output file. This message will usually be accompanied by
a more
specific, system-dependent message. Corrective action: Correct the
system-dependent
problem, if possible, and retry the operation.
 
%s
already exists %s already exists, it is skipped Cause: The command you have
issued
would overwrite an existing output file. Corrective action: If you are
sure
you want to destroy the old file, reissue the command with the -f option.
 
 
dd2asc
Messages
 
Can't
read %s. Cause: An input file was missing or unreadable. Corrective
                      action: Check the
spelling, presence, and permissions of
                      the file in question.
 
Can't
open %s. Cause: An output file could not be created, due to lack of
                      permission or perhaps
disk space. Corrective action:
                      Correct the file system
problem and retry the operation.
 
%s is
not a valid data dictionary. Cause: The file you have named in the data
                      dictionary parameter
does not have the correct magic
 
                      number. Corrective
action: Check the file you named with
                      the data dictionary
editor.
 
Error
writing %s. Cause: The utility incurred an I/O error while processing the
                      file named in the
message. Corrective action: Retry the
                      operation.
 
%s
already exists. Cause: You have specified an existing output file. Corrective
                      action: Use the -f
option to overwrite the file, or use a
                      different name.
 
Bad
data in %s. Cause: A binary input file is corrupt. Corrective action: Make
                      sure the file is of the
correct type.
 
There
are also numerous messages regarding syntax errors in an ASCII input file,
                      which are intended to be
self-explanatory.
 
 
dd2r4
Messages
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                                  for its
needs. Corrective action: None.
 
File %s
already exists. Use `-f' to overwrite or '-e' to append an extension to
                                  the output
file. Cause: You have specified an
                                  existing
output file. Corrective action: Use
                                  the -f option to overwrite the file,
or use a
                                  different
name.
 
%s is a
Release 4 file. Cause: You have attempted to upgrade a data dictionary
                                  that is
already in Release 4 format.
                                  Corrective
action: Relax.
 
Error
writing %s. Cause: The utility incurred an I/O error while processing the
                                  file named
in the message. Corrective action:
                                  Retry the operation.
 
 
dd2struct
Messages
 
Language
%s undefined. Cause: The language you have given with the -g option has
                              not been defined
in the utility's tables.
                              Corrective action:
Check the spelling of the
                              option, or
define the language ito the utility.
 
%s
already exists. Cause: You have specified an existing output file. Corrective
                              action: Use the
-f option to overwrite the file,
                              or use a
different name.
 
%s has
an invalid file format. Cause: An input file is not of the expected type.
                              Corrective
action: Check the spelling and type of
                              the offending file.
 
'%s'
has no data to convert. Cause: An input file is empty, or does not have the
                              names you
specified. Corrective action: Check the
                              names.
 
Not
enough memory to process '%s'. Unable to allocate memory. Cause: The utility
                              could not
allocate enough memory for its needs.
                              Corrective
action: None.
 
 
ddmerge
Messages
 
%s
already exists. Cause: You have specified an existing output file. Corrective
                          action: Use the -f
option to overwrite the file, or
                          use a different
name.
 
No
output written. Warning: merge incomplete. 
Last input included = %s. Cause:
                          Due to another error
condition, no output or only
                          partial output was
produced. Corrective action:
                          Correct the other
error.
 
Can't
read %s. Cause: An input file was missing or unreadable. Corrective
                          action: Check the
spelling, presence, and permissions
                          of the file in
question.
 
%s is
not a valid data dictionary. Cause: An input file did not have the correct
                          magic number. Corrective action: Check the
spelling
                          and type of the
input file.
 
Bad
data in %s. Cause: An input file was corrupted. Corrective action: Try to
                          repair the file.
 
Insufficient
memory. Cause: The utility could not allocate enough memory for its
                          needs. Corrective
action: None.
 
Default
in %s differed from saved default. Default in %s had different edits
                          from saved default.
Cause: Warning only. The default
                          sections of input
data dictionaries were different;
                          the earliest will be
retained. Corrective action:
                          None.
 
Too
many entries for LDB. Too many entries for data dictionary. Cause: The
                          output dictionary
size has reached the maximum.
                          Corrective action:
Try to shrink or eliminate some
                          input dictionaries.
 
Dropped
record "%s" in %s -- same name as earlier Field. Dropped field
"%s" in
                          %s -- same name as
earlier Record. Cause: Warning
                          only. There were
duplicate items in two or more
                          dictionaries. Corrective action: None.
 
Record
"%s" in %s differed from saved record. Record "%s" in %s
had different
                          data types from
saved record. Field "%s" in %s
                          differed from saved
field. Field "%s" in %s had
                          different edits from
saved field. Field "%s" in %s has
                          different %s. Field
"%s" in %s had different edits
                          from saved field.
Cause: Warning only. An entry in the
                          named data
dictionary has but different attributes
                          from a similarly
named entry in an earlier input file;
                          the earlier one has
been retained. Corrective action:
                          None.
 
 
f2dd
Messages
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                                  for its
needs. Corrective action: None.
 
%s is
not a valid data dictionary. Bad data in %s. Cause: An input file did not
                                  have the
correct magic number, or is
                                  corrupted.
Corrective action: Make sure the
                                  input file
is of the correct type.
 
Too
many entries for data dictionary. Too many data dictionary entries. Too many
                                  entries for
LDB. Cause: The output file has
                                  reached the
maximum possible size. Corrective
                                  action: Specify fewer inputs, or
remove
                                  unnecessary
fields from them.
 
Can't
read form %s. Bad data in form %s. %s is not a form. Cause: An input file
                                  was missing,
unreadable, or not the right
                                  kind.
Corrective action: Check the spelling,
                                  presence,
and permissions of the file in
                                  question.
 
Form %s
has no fields. Form %s has no named fields. Cause: Warning only. The
                                  screen will
make no contribution to the
                                  output.
Corrective action: None.
 
Can't
create record "%s" -- same name as data dictionary Field. Can't add
field
                                 
"%s" in %s -- same name as data dictionary
                                  Record.
Cause: A screen or field has a name
                                  that
conflicts with something already in the
                                  data dictionary. Corrective action:
Rename one
                                  of the
items.
 
Record
"%s" in %s differs from data dictionary record. Field "%s"
in %s differs
                                  from data dictionary
field. Field "%s" in %s
                                  has
different edits from data dictionary
                                  field.
Cause: Warning only. A screen or screen
                                  field
differs from a similarly named item
                                  already in
the data dictionary. The latter
                                  will be
retained. Corrective action: Rename
                                  one of the
items.
 
Can't
write %s. Can't write destination file. Cause: An output file could not be
                                  created, due
to lack of permission or perhaps
                                  disk space.
Corrective action: Correct the
                                  file system
problem and retry the operation.
 
 
f2struct
Messages
 
Language
%s undefined. Cause: The language you have given with the -g option has
                              not been defined
in the utility's tables.
                              Corrective action:
Check the spelling of the
                              option, or
define the language ito the utility.
 
%s
already exists. Cause: You have specified an existing output file. Corrective
                              action: Use the
-f option to overwrite the file,
                              or use a
different name.
 
%s has
an invalid file format. Cause: An input file is not of the expected type.
                              Corrective
action: Check the spelling and type of
                              the offending file.
 
'%s'
has no data to convert. Cause: An input file is empty, or does not have the
                              names you
specified. Corrective action: Check the
                              names.
 
Not
enough memory to process '%s'. Unable to allocate memory. Cause: The utility
                              could not
allocate enough memory for its needs.
                              Corrective
action: None.
 
At
least one form name is required. Cause: You have not given any screen files
                              as input.
Corrective action: Supply one or more
                              screen file
names.
 
 
formlib
Messages
Library
`%s' already exists; use `-f' to overwrite. Cause: You have specified an
                                                           existing
output file.
                                                          
Corrective action:
                                                           Use the
-f option to
                                                           overwrite the
file,
                                                           or use a
different
                                                           name.
 
Cannot
open `%s'. Cause: An input file was missing or unreadable. Corrective
                                                           action:
Check the
                                                          
spelling, presence,
                                                           and permissions of
                                                           the file
in question.
 
Unable
to allocate memory. Insufficient memory available. Cause: The utility
                                                           could
not allocate
                                                           enough
memory for its
                                                           needs.
Corrective
                                                           action:
None.
 
File
`%s' is not a library. Cause: The named file is not a form library
                                                          
(incorrect magic
                                                           number).
Corrective
                                                           action: Check the
                                                           spelling
and
                                                          
existence of your
                                                           library.
 
`%s'
not in library. No forms in library. Cause: A screen you have named is not
                                                           in the
library.
                                                          
Corrective action:
                                                           List the library to
                                                           see
what's in it,
                                                           then
retry the
                                                           operation.
 
Temporary
file `%s' not removed. Cause: The intermediate output file was not
                                                           removed,
probably
                                                           because
of an error
                                                           renaming
it to the
                                                           real
output file.
                                                          
Corrective action:
                                                           Check the
permissions
                                                           and
condition of the
                                                           files,
then retry the
                                                           operation.
 
 
jamcheck
Messages
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                                  for its
needs. Corrective action: None.
 
Can't
read %s. Cause: An input file was missing or unreadable. Corrective
                                  action:
Check the spelling, presence, and
                                  permissions
of the file in question.
 
%s is
not a valid data dictionary. Bad data in %s. Cause: An input file was of
                                  the wrong
kind, or has been corrupted.
                                  Corrective
action: Check the type of the
                                  indicated
file.
 
File %s
already exists; use '-f' to overwrite. Cause: You have specified an
                                  existing
output file. Corrective action: Use
                                  the -f
option to overwrite the file, or use a
                                  different
name.
 
Field
"%s" in %s has same name as data dictionary Record. Cause: Warning
only.
                                  The
indicated field will not be compared.
                                  Corrective
action: None.
 
There
are also many informational messages, which are meant to be
                                 
self-explanatory.
 
 
jammap
Messages
 
Exactly
1 form name is required. Cause: The argument to this utility is the
                                       
top-level screen of a JAM application;
                                        you
have supplied extra parameters.
                                       
Corrective action: Retry the command,
                                       
without the excess.
 
Unable
to allocate memory. Insufficient memory for lists, form  Cause: The
                                       
utility could not allocate enough memory
                                        for
its needs. Corrective action: None.
 
Can't
find top level form Cause: The input file was missing or unreadable.
                                       
Corrective action: Check the spelling,
                                       
presence, and permissions of the file in
                                       
question.
 
 
key2bin
Messages
 
File
'%s' not found Neither '%s' nor '%s' found. Cause: An input file was
                                                        missing or
unreadable.
                                                        Corrective
action: Check
                                                        the
spelling, presence,
                                                        and
permissions of the
                                                        file in
question.
 
Unknown
mnemonic in line: '%s' Cause: The line printed in the message does not
                                                        begin with
a logical key
                                                        mnemonic.
Corrective
                                                        action: Refer
to
                                                       
smkeys.h  for a list of
                                                        mnemonics,
and correct
                                                        the input.
 
No key
definitions in file '%s' Cause: Warning only. The input file was empty or
                                                        contained
only comments.
                                                        Corrective
action: None.
 
Malloc
error Cause: The utility could not allocate enough memory for its needs.
                                                        Corrective
action: None.
 
Cannot
create '%s' Error writing '%s' Cause: An output file could not be
                                                        created, due
to lack of
                                                        permission
or perhaps
                                                        disk space.
Corrective
                                                        action: Correct the file
                                                        system
problem and retry
                                                        the
operation.
 
 
lstdd
Messages
 
Error
opening input file. Cause: An input file was missing or unreadable.
                                 Corrective
action: Check the spelling,
                                 presence, and
permissions of the file in
                                 question.
 
Error
opening output file. Cause: An output file could not be created, due to
                                 lack of
permission or perhaps disk space.
                                 Corrective
action: Correct the file system
                                 problem and retry the operation.
 
Unable
to allocate memory. Can't allocate memory. Cause: The utility could not
                                 allocate
enough memory for its needs.
                                 Corrective
action: None.
 
Error
reading data dictionary file. Error writing list file. Cause: The utility
                                 incurred an
I/O error while processing the file
                                 named in the
message. Corrective action: Retry
                                 the operation.
 
Invalid
file format or incorrect version. %s is not a valid data dictionary. Bad
                                 data in %s.
Cause: An input file has the wrong
                                 magic number
or is corrupt. Corrective action:
                                 Make sure all
the input files are data
                                 dictionaries.
If you have Release 3 data
                                 dictionaries,
you may need to run dd2r4 to
                                 update them.
 
Selection
of Records & fields not yet implemented. Cause: At press time, there
                                 was no
provision yet for selecting sections of
                                 the listing.
Corrective action: None.
 
 
lstform
Messages
 
Error
opening input file. Cause: An input file was missing or unreadable.
                                 Corrective
action: Check the spelling,
                                 presence, and
permissions of the file in
                                 question.
 
Error
opening output file. Cause: An output file could not be created, due to
                                 lack of
permission or perhaps disk space.
                                 Corrective
action: Correct the file system
                                 problem and
retry the operation.
 
Unable
to allocate memory. Can't allocate memory. Cause: The utility could not
                                 allocate
enough memory for its needs.
                                 Corrective
action: None.
 
Error
reading form file. Error writing list file. Cause: The utility incurred an
                                 I/O error
while processing the file named in
                                 the message.
Corrective action: Retry the
                                 operation.
 
 
modkey
Messages
 
Invalid
entry. Cause: You have typed a key that is not on the menu. Corrective
                      action: Check the
instructions on the screen and try
                      again.
 
Key
sequence is too long. Cause: You have typed more than six keys wihout
                      repeating any.
Corrective action: Key sequences for
                      translation may be at
most six characters long. Choose a
                      shorter sequence.
Invalid
first character. Cause: A multi-key sequence must begin with a control
                      character. Corrective
action: Begin again, using a control
                      character.
 
Invalid
mnemonic - press space for list Cause: In the miscellaneous keys screen,
                      you have typed a
character string for logical value that
                      is not a logical key
mnemonic. Corrective action: Peruse
                      the list, then correct the input.
 
Invalid
number - enter <decimal>, 0<octal> or 0x<hex> Cause: In the
                      miscellaneous keys
screen, you have typed a malformed
                      numeric key code.
Corrective action: Correct the number,
                      or use a mnemonic.
 
Cannot
create output file. Cause: An output file could not be created, due to
                      lack of permission or
perhaps disk space. Corrective
                      action: Correct the file
system problem and retry the
                      operation.
 
Key
sequence does not repeat. Cause: You have typed a key sequence that failed
                      to repeat a string of
six characters or less. Corrective
                      action: Retry the
sequence, or use a shorter one.
 
Cannot
accept NUL as a key. Cause: The ASCII NUL character (binary 0) cannot be
                      used in a key
translation sequence, because it is used
                      internally to mark the end
of a sequence. Corrective
                      action: Use another key.
 
Key
previously defined as %s Key conflicts with %s Cause: You have typed a key
                      sequence that has
already been assigned to another key, or
                      that is a substring of a previously assigned sequence.
                      Corrective action: Use a
different key or sequence, or
                      reassign the other.
 
 
msg2bin
Messages
 
File
'%s' not found. Cause: An input file was missing or unreadable. Corrective
                            action: Check the
spelling, presence, and
                            permissions of the
file in question.
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                            for its needs. Corrective action: None.
 
Bad tag
in line: %s Cause: The input file contained a system message tag unknown
                            to the utility.
Corrective action: Refer to
                            smerror.h  for a list of tags, and correct the
                            input.
 
Missing
'=' in line: %s Cause: The line in the message had no equal sign
                            following the tag.
Corrective action: Correct the
                            input and re-run the utility.
 
 
term2vid
Messages
 
No
cursor position (cm, cup) for %s Cause: An absolute cursor positioning
                                          
sequence is required for JAM to work,
                                           and the termcap or terminfo entry you
                                           are
using does not contain one.
                                          
Corrective action: Construct the
                                          
video file by hand, or update the
                                          
entry and retry.
 
Cannot
find entry for %s Cause: The terminal mnemonic you have given is not in
                                           the
termcap or terminfo database.
                                           Corrective action: Check the spelling
                                           of
the mnemonic.
 
File %s
already exists; use '-f' to overwrite. Cause: You have specified an
                                          
existing output file. Corrective
                                          
action: Use the -f option to
                                          
overwrite the file, or use a
                                          
different name.
 
 
txt2form
Messages
 
Warning:
lines greater than %d will be truncated Warning: columns greater than
%d will
be truncated Cause: Your input text file has data that reaches beyond
                            the limits you
have given (default 23 lines by 80
                            columns) for the screen. Corrective action: Shrink
                            the input, or
enlarge the screen.
 
Unable
to create output file. Cause: An output file could not be created, due to
                            lack of permission
or perhaps disk space. Corrective
                            action: Correct
the file system problem and retry
                            the operation.
 
 
var2bin
Messages
 
Error
opening %s. Cause: An input file was missing or unreadable. Corrective
                         action: Check the
spelling, presence, and permissions
                         of the file in
question.
 
Missing
'='. Cause: The input line indicated did not contain an equal sign after
                         the setup variable
name. Corrective action: Insert the
                         equal sign and run
var2bin again.
 
%s is
an invalid name. Cause: The indicated line did not begin with a setup
                         variable name.
Corrective action: Refer to the
                         Configuration Guide
for a list of variable names,
                         correct the input,
and re-run the utility.
 
%s may
not be qualified by terminal type. Cause: You have attached a terminal
                         type list to a
variable which does not support one.
                         Corrective action:
Remove the list. You can achieve the
                         desired effect by
creating different setup files, and
                         attaching a terminal
list to the SMSETUP variable.
 
Unable
to set given values. %s conflicts with a previous parameter. %s is an
                         invalid parameter.
Cause: A keyword in the input is
                         misspelled or
misplaced, or conflicts with an earlier
                         keyword. Corrective
action: Check the keywords listed
                         in the manual,
correct the input, and run the utility
                         again.
 
Error
reading smvars or setup file. Cause: The utility incurred an I/O error
                         while processing the
file named in the message.
                         Corrective action:
Retry the operation.
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                         for its needs.
Corrective action: None.
 
At
least one file name is required. Cause: You have failed to give an input file
                         name. Corrective
action: Retype the command, supplying
                         the file name.
Entry
size %d is too large. String size %d is too large. Cause: The indicated
                         right-hand side is
too long. Corrective action: Reduce
                         the size of the
entry.
 
 
vid2bin
Messages
 
Neither
%s nor %s exists. Cause: An input file was missing or unreadable.
                                 Corrective
action: Check the spelling,
                                 presence, and
permissions of the file in
                                 question.
 
A
cursor positioning sequence is required. An erase display sequence is
                                 required.
Cause: These two entries are required
                                 in all video
files. Corrective action:
                                 Determine what your terminal uses
to perform
                                 these two
operations, and enter them in the
                                 video file;
then run the utility again.
 
Unable
to allocate memory. Cause: The utility could not allocate enough memory
                                 for its
needs. Corrective action: None.
 
Error
writing to file '%s'. Cause: The utility incurred an I/O error while
                                 processing
the file named in the message.
                                 Corrective
action: Retry the operation.
 
Invalid
entry: '%s'. Entry missing '=': '%s'. Cause: The input line in the
                                 message does
not begin with a video keyword and
                                 an equal sign. Corrective action: Correct the
                                 input and
re-run the utility. You may have
                                 forgotten to
place a backslash at the end of a
                                 line that continutes onto the next one.
 
Invalid
attribute list : '%s'. Invalid color specification : '%s'. Invalid
                                 graphics
character specification (%s):'%s'.
                                 Invalid
border information (%s):'%s'. Invalid
                                 graphics type
: '%s'. Invalid label parameter :
                                 '%s'.%s
Invalid cursor flags specification :
                                 '%s'. Cause:
You have misspelled or misplaced
                                 keywords in
the input line in the message.
                                 Corrective
action: Correct the input, referring
                                 to the
Configuration Guide, and run vid2bin
                                 again.
 
skipsomething
 
 
 
 
 
 
 
 
 
                                        Index
 
 
 
 
             In  this  Index, library
functions  are  displayed  in
             boldface,   without 
the  prefixes  specific 
to   the
             language  interface. 
Video  and  setup 
file  entries
             appear in ELITE CAPS, while
utility  programs  and JPL
             commands  are in elite lower-case. Function key  names
             are in ROMAN CAPS.
 
 
 
 
                                            ch_emsgatt 5-57
        A                                   ch_form_atts 5-57
        ALL video parameter 5-88            ch_qmsgatt 5-57
        AM video parameter 5-79             ch_stextatt 5-57
        area attributes 5-80, 5-83          CMFLGS video parameter 5-70,
        AREAATT video parameter                  5-78
             5-70, 5-80, 5-83, 5-86         CMSG video parameter 5-70,
        ARGR video parameter 5-70,               5-85
             5-84                           COF video parameter 5-69,
        ARROWS video parameter 5-70,             5-79
             5-89                           COLMS video parameter 5-69,
        ASGR video parameter 5-70,               5-76
             5-71, 5-80, 5-84, 5-86         color
                                              
background 5-84
        B                                      implementation 5-84
        b2hex utility 5-104                 COLOR video parameter 5-70,
        beep 5-40                                5-84
        bel 5-40, 5-89                      comments
        BELL video parameter 5-70,             in key file 5-30
             5-89                              in message file 5-39
        bin2c                                  in setup file 5-55
         utility 5-1, 5-3, 5-5,                in video file 5-66
             5-33, 5-54, 5-104              CON video parameter 5-69,
        bin2hex utility 5-1, 5-6                 5-79
        BIOS video parameter 5-77           configuration files 5-30,
        BLINK video parameter 5-81,              5-39, 5-55, 5-65
             5-86                           configuration utilities
        border                                 summary 5-1
           implementation 5-88              CONTROL video parameter 5-88
        BORDER video parameter 5-67,        CR video parameter 5-78
             5-70, 5-88                     CTYPE video parameter
5-84
        BOTTRT video parameter 5-69,        CUB video parameter 5-70,
             5-77                                5-71, 5-78
        BRDATT video parameter 5-70,        CUD video parameter 5-70,
             5-89                                5-78
        BS video parameter 5-79             CUF video parameter 5-70,
        BUFSIZ video parameter 5-69,             5-71, 5-78
             5-77                           CUP video parameter 5-66,
                                                
5-69, 5-70, 5-78
        C                                   CURPOS video parameter 5-70,
        C0 video parameter 5-88                  5-90, 5-91
        C1 video parameter 5-88             cursor
        c_vis 5-41                             position display 5-90
           turning off 5-79                 formlib utility 5-1, 5-24,
           turning on 5-79                       5-107
        cursor positioning                  function key
           absolute 5-78                       EXIT 5-46, 5-51
           relative 5-78                       F9 5-47
        cursor style                           INSERT 5-79
           PC 5-76                             LP 5-56
        CUU video parameter 5-69,              PF1 5-47
             5-70, 5-78                        PF2 5-48
                                               TAB 5-43
        D                                      TRANSMIT 5-77
        d_msg_line 5-30, 5-40, 5-90         function key labels 5-40,
        dd2asc utility 5-1, 5-7,                 5-44, 5-47, 5-48, 5-49,
             5-104                               5-52
        dd2r4 utility 5-1, 5-13,            function keys
             5-35, 5-105, 5-110                defining 5-42
        dd2struct utility 5-1, 5-3,            labeling 5-86
             5-14, 5-105
        ddmerge utility 5-1, 5-16,          G
             5-105, 5-117                   getkey 5-56
        dicname 5-57                        GRAPH video parameter 5-67,
        DIM video parameter 5-81,                5-70, 5-86, 5-87, 5-88,
            
5-86                               
5-89
        display attribute                   graphics characters 5-87
           area 5-80                           mapping 5-87
           bit-mapped 5-83                  GRTYPE video parameter 5-70,
           embedded in status line               5-88
             5-40
           implementation 5-80              H
           latch 5-80                       HILIGHT video parameter
           onscreen 5-80                         5-81, 5-86
           parameters 5-80
        dw_options 5-57                     I
                                           
ininames 5-58
        E                                   INIT video parameter 5-68,
        ED video parameter 5-66,                 5-69, 5-73, 5-76, 5-77,
             5-69, 5-77                          5-79, 5-87
        8-bit ASCII 5-69                    initcrt 5-55, 5-76
        EL video parameter 5-69,            INSERT key 5-79
             5-77                           INSOFF video parameter 5-69,
        er_options 5-57                          5-79
        error message                       INSON video parameter
5-69,
           to change 5-39                        5-79
        EW video parameter 5-69,
             5-70, 5-78                     J
        EXIT key 5-46, 5-51                 jamcheck utility 5-1, 5-27,
        EXTENDED video parameter                 5-108
             5-88                           jammap utility 5-1, 5-29,
                                                 5-109
        F                                   JDAMOD video parameter 5-70
        f2dd utility 5-1, 5-20,             JDDCHG video parameter 5-70
             5-106                          JDFIND video parameter 5-70
        f2r4 utility 5-1, 5-22              JDMTCH video parameter 5-70
        f2struct utility 5-1, 5-3,          JDTPLT video parameter 5-70
             5-18, 5-107                    JFMKDS video parameter
5-70
        F9 key 5-47                         JFMKTM video parameter 5-70
        fcase 5-57                          JFMTOP video parameter 5-70
        fextension 5-58
        FMKRCP video parameter 5-70         K
        FMKRMV video parameter 5-70         key file 5-33
        foreign language support               comments 5-30
             5-86                              format 5-30
        formlib 5-24                           testing 5-52
 
        key mnemonics 5-31                  mp_options 5-58
        key translation                     mp_string 5-58
           algorithm 5-42                   MS-DOS 5-76
           creating table 5-42                 video file 5-67
        key translation file 5-30,          msg2bin utility 5-1, 5-5,
             5-40                                5-39, 5-41, 5-54, 5-56,
        key2bin utility 5-1, 5-5,                5-111
             5-30, 5-31, 5-33, 5-42,        msg_get 5-54, 5-56
             5-56, 5-109                    msg_read 5-56
        keyinit 5-56                        MSGATT video parameter 5-70,
        keytops 5-40, 5-44, 5-47,                5-85, 5-86, 5-89
             5-48, 5-49, 5-52               msgread 5-40
        KPAR video parameter 5-70,
             5-86                           N
        KSET video parameter 5-70,          NONE video parameter 5-86
             5-86
                                            O
        L                                   ok_options 5-58
        l_open 5-57                         OMSG video parameter 5-70,
        latch attributes 5-80                    5-76, 5-85
        LATCHATT video parameter            onscreen attributes 5-80,
             5-70, 5-80, 5-81, 5-82,             5-83
             5-84, 5-86                     ONSCREEN video parameter
        ldb_init 5-58                            5-83, 5-86
        LENGTH video parameter 5-86
        LF video parameter 5-79             P
        LINES video parameter 5-67,         PC video parameter 5-88
             5-69, 5-76, 5-85               PF1 key 5-47
        LINEWRAP video parameter            PF2 key 5-48
             5-83                           PRIMOS 5-69
        logical keys 5-42                   prompt 5-40
           mnemonics 5-31
        LP key 5-56                         R
        lstdd utility 5-1, 5-35,            r_window 5-56, 5-57
             5-109                          RCP video parameter 5-69,
        lstform utility 5-1, 5-2,                5-79
             5-36, 5-110                    REPMAX video parameter
5-69,
                                                
5-77
        M                                   REPT video parameter 5-69,
        MAX video parameter 5-83                 5-70, 5-77
        MENU bit 5-22                       RESET video parameter
5-69,
        menu_proc 5-58                           5-73, 5-76, 5-79
        message file 5-39, 5-54             resetcrt 5-76
        MODE0 video parameter 5-70,         REVERSE video parameter
             5-87                                5-81, 5-85
        MODE1 video parameter 5-70,         REWRITE video parameter
             5-87                                5-83, 5-84
        MODE2 video parameter 5-70,
             5-87                           S
        MODE3 video parameter 5-70,         SCP video parameter 5-69,
             5-87                                5-79
        MODE4 video parameter 5-70,         screen library 5-24
             5-87                           SCREENWRAP video parameter
        MODE5 video parameter 5-70,              5-83
             5-87                           setup file 5-55
        MODE6 video parameter 5-70,         SGR video parameter 5-70,
             5-87                                5-71, 5-80, 5-81, 5-82,
        modkey utility 5-1, 5-30,                5-83, 5-84, 5-86
             5-31, 5-33, 5-42, 5-43,        shifting indicator 5-89
             5-44, 5-45, 5-46, 5-51,        sm_ind_set 5-57
             5-56, 5-86, 5-110              SMCHEMSGATT setup variable
           control keys 5-43                     5-57
           display modes 5-51               SMCHFORMATTS setup variable
           invoking 5-43                         5-57
        SMCHQMSGATT setup variable          statfnc 5-85
             5-57                           status line 5-85
        SMCHSTEXTATT setup variable            embedded attribute 5-40
             5-57                           status text 5-40
        SMCHUMSGATT setup variable          status window 5-40
            
5-57
        SMDICNAME setup variable            T
             5-57                           TAB key 5-43
        SMDWOPTIONS setup variable          term2vid utility 5-1, 5-60,
             5-57                                5-65, 5-111
        SMEROPTIONS setup variable          TRANSMIT key 5-77
             5-57                           txt2form utility 5-1, 5-61,
        SMFCASE setup variable 5-57              5-112
        SMFEXTENSION setup variable
             5-58                           U
        SMFLIBS setup variable 5-57         UNDERLN video parameter
        SMINDSET setup variable 5-57             5-81, 5-86
        SMINICTRL setup variable
             5-57                           V
        SMININAMES setup variable           var2bin utility 5-1, 5-5,
             5-58                                5-55, 5-62, 5-112
        SMKEY setup variable 5-30,          vid2bin utility 5-1, 5-5,
             5-56                                5-56, 5-63, 5-64, 5-65,
        SMLPRINT setup variable 5-56             5-66, 5-73, 5-90, 5-113
        SMMPOPTIONS setup variable          video control sequences 5-70
             5-58                           video file 5-63, 5-65
        SMMPSTRING setup variable              comments 5-66
             5-58                              format 5-66, 5-68
        SMMSGS setup variable 5-39,            keywords 5-69
             5-56                              minimal 5-67
        SMOKOPTIONS setup variable             rationale 5-66
             5-58                              sample 5-67
        SMPATH setup variable 5-56          vinit 5-56, 5-63
        smsetup 5-55
        SMSETUP setup variable 5-55,        X
             5-56                           XKEY video parameter 5-77
        SMUSEEXT setup variable 5-3,
             5-58                           Z
        SMVARS setup variable 5-55          zm_options 5-58
        SMVIDEO setup variable 5-56
        SMZMOPTIONS setup variable
             5-58