You can create Smalltalk classes from the data division structure of other
languages using a parser. If you use a VisualAge external function part
to parse a C include file or COBOL copybook file for record structure
definitions, VisualAge stores the information in an internal, temporary object
table. As an alternative, you can use the VisualAge Record Class
Generator. The Record Class Generator parses the file you specify and
permanently creates a class in your hierarchy for each record
structure.
Use the Record Class Generator to break a COBOL or C data division
structure into Smalltalk classes.
The Record Class Generator can parse applications that satisfy all of the
following requirements:
- The application must have as a prerequisite the application
AbtRecordStructureBaseApp.
- The application must have the current user as a group member.
You can use COBOL or C to define the format of the segments that your
program will be reading or modifying. Several segments can exist within
one COBOL or C definition.
For a C header file, all data types declared with typedef or
struct can be used to generate a class. For a COBOL copy
library file, the record formats declared by 01-level declarations can be
used.
The parser generates classes for each first level of segment
definition; that is, each of the highest levels in the structure becomes
a class. The parser also generates the getter and setter methods for
the class; each lower level definition is split into a getter and a
setter method in its class.
To parse C or COBOL structures into Smalltalk classes, do the
following:
-
In a VisualAge Organizer, select Generate >
Record wrapper from the Parts menu.
The Record Class Generator window opens:

This window is similar to the Record settings page of the C and
COBOL External Function parts.
- Select the name of the Function language, C or COBOL.
- Enter the name of the COBOL or C source file declaring the data types or
records used by the external function. To list the available files,
select Find.... To view the contents of
a file, select View.
- Select the Parameter word size, 16 bit or 32 bit, based on whether your
compiler produces 16- or 32-bit code.
- Note:
- This setting does not apply to the COBOL External Function part.
- Select the Alignment to specify the byte alignment for the record
structure. Set this value to the same value you used when you compiled
the DLL. Refer to the appropriate compiler documentation for more
information about byte alignment.
- Note:
- This setting does not apply to the COBOL External Function part.
- Choose Yes or No for Translate Data?. The
default is No. If the file you will be accessing using the
parsed structure contains binary data created on OS/390, the data needs to be
converted. If you have been using OS/390 Native services and have
downloaded a data set from OS/390 to simulate on the workstation, you will
want to convert the data. Select Yes if you want your binary
data converted.
-
- You can also manually modify the getter and setter methods generated by
the parser to convert between ASCII and EBCDIC for testing on the
workstation. Update COBOL or C display field getter and setter methods
with methods mvsFromEbcdic and mvsAsEbcdic
respectively. When packaging for OS/390, you do not need to remove
these methods from your generated classes; they become NOOP methods on
OS/390.
When Yes is selected for Translate data?, the fields for
Endian and Code page are enabled.
- Select Big or Little for the Endian value.
The default is Big.
- Enter the Code Page number. The default is 37, which is the code
page for MVS.
- When you have specified the file you want to use, select
Parse. A list of all the record and type definitions found
appears in the Records to generate drop-down list. The name
of each entry in the list is the name as it appears in the parsed file,
converted to a valid Smalltalk class name. All underscores and dashes
are removed, and the first character is capitalized if necessary.
- From the Records to generate group box, use the drop-down list, and then
use the list box below it to specify the structures or items within the record
that you want to generate. The first record in the drop-down list is
selected as the default after the file has been parsed.
-
- You can select a subset of the fields in a record and select Selected
fields from the Generate menu if you want only a subset of
the fields to be included in the generated class. You can also select
fields and select Rename selected fields from the pop-up menu on
the fields list to rename fields before generating the record class.
- Select Generate >All Fields to generate selectors for
all of the fields within the record that you specified. Select
Generate >Selected Fields to generate selectors for the
fields you selected within the record that you specified in the Records to
generate list.
You will be prompted to enter a class name for the generated
selectors; the default will be the name selected in the Records to
generate list.
- Enter the class name for generated selectors. Select
OK. If the parser found constants defined in the parsed
file, you will also be prompted to specify a pool dictionary name; the
default will be the name of the generated selector concatenated with the word
Constants.
- Enter the name for the pool dictorionary or select Cancel to
proceed creating a pool dictionary.
If the parsed file contains any constant definitions (level-78 and level-88
items for COBOL; #define items for C), a prompter will appear asking you
to specify the name of a pool dictionary for the generated class. You
can enter a valid global variable name or select Cancel to proceed
with the record generation.
The classes resulting from the parsed structure are subclasses of
OsPtr unless data conversion is requested.
When data conversion is requested, the Record Class Generator generates a
class, that is a subclass of AbtForeignOSObject. If the
class already exists, it will be overwritten in the application in which it
was originally created. If it is a new class, it will be created in the
application that you were browsing when you invoked the Record Class
Generator. The generated class can always be moved to a different
application as needed.
To save a representation of your record for later editing, select
Archival method from the Generate menu of the Record
Class Generator. This adds a class method representing the record to
the class you specify. You can use the method to reconstruct the
selectors of the record.