IPF preprocessor v. 1.0 (30/6/1992, International Business Machines Corporation (IBM), Doug Haigh) |
Readme/What's new |
INFORMATION PRESENTATION FACILITY PREPROCESSOR
(C) IBM CORPORATION 1992
VERSION 1.0
June 30, 1992
Doug Haigh
IBM Corporation
Contents
1.0 OVERVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1 What IPFCPREP does for you. . . . . . . . . . . . . . . . . . . . . 3
1.2 Running IPFCPREP . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.0 REFERENCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1 Imbedding Files from Other Subdirectories . . . . . . . . . . . . . 5
2.1.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Defining Symbols . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.1 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Using C Language define files . . . . . . . . . . . . . . . . . . . 6
2.3.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4 Using Bookmaster 1.0 Vanilla conditional compiles . . . . . . . . . 7
2.4.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.5 Using Simple Macros . . . . . . . . . . . . . . . . . . . . . . . . 8
2.5.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.6 Using Simple Macros that can be used in BookMaster . . . . . . . . . 9
2.6.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.7 Using Positional Parameters on Macros . . . . . . . . . . . . . . 11
2.7.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.0 Overview
1.1 What IPFCPREP does for you.
o Allows you to have IPFC script files in different subdirectories.
The IPFCPREP program will look at the INCLUDE environment variable as it
processes the imbed (.im) tags so that it can search more than the
current subdirectory for script files.
o Allows you to define symbols.
The IPFCPREP program allows the use of BookMaster .nameit tags with the
symbol= and text= paramters.
o Allows you to use C language header files to define symbols.
The IPFCPREP program will read in C language header files and use the
#define statements as BookMaster .nameit tags.
o Allows you to have conditional compile sections
The IPFCPREP program supports BookMaster Vanilla conditional compiles.
o Allows you to have simple substitution macros.
The IPFCPREP will support the .dm tag to define simple macros that are
used for text replacement only. Either keyword or positional parameters
may be used.
o Resolves bitmap file names to fully qualified path name.
Currently IPF requires the bitmap files be in the current directory. If
multiple versions of a file are produced in different subdirectories, the
bitmaps must be copied into every subdirectory. IPFCPREP will resolve the
bitmap file's position using the INCLUDE environment variable and replace
the bitmap file's name with a fully qualified path name in the artwork
tag. It will also resolve the artwork linkfile's name.
***************************************************************************
1.2 Running IPFCPREP
To run the IPFC preprocessor, type on the command line
IPFCPREP input_file_name output_file_name [options]
NAME DEFINITION
input_file_name Input script file
output_file_name Output script file
options Preprocessing options
/V, -V, /v, OR -v Flag to indicate you want lines printed out as they are
read in
/W, -W, /w, OR -w Flag to indicate you want additional warning messages.
/N, -N, /n, OR -n Flag to indicate a symbol definition
/S, -S, /s, OR -s Flag to indicate not to include system include files,
i.e. files that are enclosed by '<' & '>'.
/D, -D, /d, OR -d Flag to indicate a symbol definition of the form
-D symbolname[=symbol_text] where
symbolname Name of symbol to be defined
symbol_text Text of defined symbol.
This is optional. If no symbol_text is defined, the
symbol is put in the symbol table with no text
(ex: for use on conditional compiles). If text is
defined, it can either be a single word or multiple
words inclosed in single quotes.
1.2.1 Examples
The following will preprocess the test.scr file into the test.ipf file.
ipfcprep test.scr test.ipf
The following will preprocess the test.scr file into the test.ipf file and
define one symbol called HOST.
ipfcprep test.scr test.ipf -D HOST
The following will preprocess the test.scr file into the test.ipf file and
define one symbol called HOST with the text Mainframe.
ipfcprep test.scr test.ipf -D HOST=MainFrame
The following will preprocess the test.scr file into the test.ipf file and
define one symbol called HOST with the text IBM Mainframe.
ipfcprep test.scr test.ipf -D HOST='IBM MainFrame'
The following will preprocess the test.scr file into the test.ipf file,
define one symbol called HOST with the text IBM Mainframe, and define a
symbol called PC
ipfcprep test.scr test.ipf -D HOST='IBM MainFrame' -D PC
The following will preprocess the test.scr file into the test.ipf file,
define one symbol called HOST with the text IBM Mainframe, define a symbol
called PC and turn on those annoying warning messages.
ipfcprep test.scr test.ipf -D HOST='IBM MainFrame' /D PC /W
2.0 Reference
***************************************************************************
2.1 Imbedding Files from Other Subdirectories
To have the IPFC preprocessor pull in imbedded files from other subdirecto-
ries, set up the INCLUDE environment variable with the path(s) to search.
IPFCPREP will also resolve the bitmap name or linkfile name in an artwork tag
using the INCLUDE environment variable. This can be turned off using the /N
switch on the command line.
2.1.1 Example
After the include environment variable is set as shown by the following
command, the IPFCPREP will search the C:\HELPDIR1 & C:\HELPDIR2 subdirecto-
ries after checking the current subdirectory for an imbed file.
SET INCLUDE=C:\HELPDIR1;C:\HELPDIR2;
For artwork tags, resolving will make a artwork tag that looks like
:artwork name='IPFCPREP.BMP' linkfile='IPFCPREP.LNK'.
into a tag that looks like
:artwork name='C:\HELPDIR1\IPFCPREP.BMP' linkfile='C:\HELPDIR1\IPFCPREP.LNK'.
***************************************************************************
2.2 Defining Symbols
To define symbols, use the same method as in BookMaster with .nameit tags.
IPFCPREP does not allow the GMLTYPE or SIZE parameters however. If you want
those, you must create a simple macro described later.
To use the symbol in the file, put an ampersand (&) before the symbol and a
period (.) after it. The period after the symbol is required.
Symbols may be within symbols (nested symbols). The innermost symbol will be
resolved first and then the resulting text will be used to search for the
remaining symbol.
Currently, the maximum symbol size after everything is resolved is about 250
character bytes.
2.2.1 Examples
The following line will create a symbol called goofy and a symbol called MM
with the text for the first being 'Goofy' and the second being 'Mickey
Mouse'.
.nameit symbol=goofy text='Goofy'
.nameit symbol=MM text='Mickey Mouse'
Now if those are used in the following sentences
I went to Disney World and saw &goofy. and &MM..
The text will come out like
I went to Disney World and saw Goofy and Mickey Mouse.
The following demonstrates the use of nested symbols.
.nameit symbol=mightm text='Mighty Mouse'
.nameit symbol=mickm text='Mickey Mouse'
Now if those are used in the following sentence
I went to Disney World and saw &&mouse_name.m..
The text will come out like
I went to Disney World and saw Mickey Mouse.
when &mouse_name. is set to 'mick', or it will come out like
I went to Disney World and saw Mighty Mouse.
when &mouse_name. is set to 'might'.
***************************************************************************
2.3 Using C Language define files
To use symbols in a C language header files, you must use the .imd tag to
imbed the header file. Then all defines of the form
#define symbol_name integer_value
or
#define symbol_name "string"
or
#define symbol_name2 symbol_name1
or
#define symbol_name expression
will be put into the symbol table.
The integer version is mainly used in defining the resource id on a :h1. tag
so that you can have one file define your panel resource IDs.
The string version is used to define text symbols similar to .namemit tags.
Wherever symbol_name is used the string (without the double quotes) will be
substituted. This is useful in using the same string that is in a .MRI file
in the text for a help panel to eliminate differences.
The symbol set to another symbol is a method to assign the same value to two
different symbol names. If the value after a symbol name matches any previ-
ously defined symbol name (whether it be C #defines or .nameit tags) the
value of the previously defined symbol will be used.
The symbol set to an expression is commonly used in C header files to base
all symbols off of one with an offset such as the following:
#define START 1000
#define PANEL_1 (START + 1)
#define PANEL_2 (START + 2)
IPFCPREP will allow the +, -, *, and / operators. It will evaluate
expressions from left to right without regard to operator precedence. If you
want precedence, you can use parentheses.
This will also search all subdirectories defined by the INCLUDE environment
variable after searching the current directory for the specified file.
An include file can include other include files defined by the #include com-
piler directive. You can disable the including of system include files by
using the /S command line option. This will not include any #include file
that is enclosed in '< >'.
Currently, the maximum symbol size after everything is resolved is about 120
character bytes.
IPFCPREP now supports some compiler directives, namely, #ifdef and #ifndef.
IPFCPREP will determine if the symbol referenced by these lines exists or not
and process or not process the lines that follow. #else used with #ifdefs or
#ifndefs is also allowed.
IPFCPREP does not handle the #if or #elif lines currently due to IPFCPREP's
lack of logical expression evaluation. #else used with #if or #elif is
ignored also.
2.3.1 Example
To include the 'test.h' C language define file in the document use the fol-
lowing line in the script file
.imd test.h
Now if the C header file had the statement
#define HELP_PANEL_1 100
And the script file contained the line
:h1 res=&HELP_PANEL_1..
The preprocessor will resolve it to
:h1 res=100.
***************************************************************************
2.4 Using Bookmaster 1.0 Vanilla conditional compiles
The best reference for this is the BookMaster document, but I will put a
short exerpt here.
The conditional compiles use two main tags, the .CONFIG & .WHEN tags.
.CONFIG tags start and end conditional compile sections and the .WHEN tags
instruct the preprocessor to insert or delete lines based on a conditions.
The .CONFIG tag looks like
.CONFIG config_name ON | OFF
The config_name is used to match the ON and OFF statements. Nested config
statements are allowed.
The .WHEN tag looks like
.WHEN 'condition-expression' INSERT | DELETE
The condition-expression is a symbol or group of symbols that are defined or
not defined to determine if the expression is TRUE. This may take the form of
'symbol1 symbol2 ... symboln'
which will AND the symbols together or
'symbol1 or symbol2 or ... or symboln'
which will OR the symbols together. Symbols may also be negated such as
'not symbol1 or symbol2'
When the condition is TRUE, the lines following the .WHEN line are either
inserted or deleted depending on the INSERT or DELETE following the condi-
tional expression. If the conditional-expression is FALSE, the opposite oper-
ation is performed, i.e. lines will be deleted if INSERT is specified and
lines will be inserted if DELETE is specified.
2.4.1 Example
For example, the conditional compile
.config section1 on
.when 'PC' insert
This is processed on a PC.
.when 'HOST' insert
This is processed on the big iron.
.config section1 off
will produce 'This is processed on a PC.' when IPFCPREP is invoked like
ipfcprep in.scr out.ipf -D PC
and will produce 'This is processed on the big iron.' when IPFCPREP is
invoked like
ipfcprep in.scr out.ipf -D HOST
***************************************************************************
2.5 Using Simple Macros
Macros in the IPFCPREP is a simple way to substitute lines of text for a
single tag. This does not do any math or fancy macro stuff, just simple text
substitution.
Macros start with a '.dm macro-name on' tag and end with a '.dm off' tag. All
text between the those two lines is part of the macro.
The macro is invoked by specifying a colon (:), the macro name, any parame-
ters, and finally a period (.). The period at the end of the macro is
required.
2.5.1 Example
For example, the macro
.dm testmac on
This macro prints out &text. when invoked
.dm off
will produce
This macro prints out garbage when invoked.
when it is called like
:testmac text=garbage.
It will also produce
This macro prints out tons of garbage when invoked.
when it is called like
:testmac text='tons of garbage'.
Another example, the macro
.dm user_resp on
:hp1.&resp.:ehp1.
.dm off
will produce
The user response is :hp1.Quit:ehp1..
when it is called like
The user response is :user_resp resp=Quit..
***************************************************************************
2.6 Using Simple Macros that can be used in BookMaster
To make these macros work under BookMaster, you must structure the macro
slightly different. You must
o Add a '.gs attval parm_keyname_1 parm_keyname2 ...' line after the '.dm
macro_name' line so that the values are assigned in BookMaster.
o Add a '.aa tag_name start_macro_name end_macro_name' after the '.dm off'
line so that you can reference the macros start_macro_name and
end_macro_name by :tag_name. & :etag_name.
o Make sure all substitution variables on the tag line are used in upper-
case.
2.6.1 Example
For example, the macro
.dm testmac on
.gs attval text
This macro prints out &TEXT. when invoked
.dm off
.aa test testmac
will produce
This macro prints out garbage when invoked.
when it is called like
:test text=garbage.
It will also produce
This macro prints out tons of garbage when invoked.
when it is called like
:test text='tons of garbage'.
Another example, the macro
.dm strtlist on
:ul.
.dm off
.dm endlist on
:eul.
.dm off
.aa list strtlist endlist
.dm listitem on
:li.
.dm off
.aa item listitem
will produce
:ul.
:li.Text
:eul.
when it is called like
:list.
:item.Text
:elist.
***************************************************************************
2.7 Using Positional Parameters on Macros
Positional parameters *, and *1 throught *n may be used in macros instead of
keyword parameters.
2.7.1 Example
For example, the macro
.dm posmac on
All parms are :*..
This is the first parm = &*1..
This is the second parm = &*2..
This is the third parm = &*3..
This is the fourth parm = &*4..
. off
will produce
All parms are Mickey Mouse loves Minnie.
This is the first parm = Mickey.
This is the second parm = Mouse.
This is the third parm = loves.
This is the fourth parm = Minnie.
when it is called like
:posmac Mickey Mouse loves Minnie.
It will also produce
All parms are Mickey Mouse loves nobody.
This is the first parm = Mickey.
This is the second parm = Mouse.
This is the third parm = loves.
This is the fourth parm = nobody.
when it is called like
:posmac Mickey Mouse loves nobody. |
Add new comment