option R on option E on option F on space 12 center ISD Software Maintenance Skeleton space 5 center MAINTSKEL VERSION 2.7 option f off eject space 24 center This page intentionally left blank. option f on setctr p,1 eject The University of Maryland has a program-maintenance skeleton, to which its software releases (such as ASM) are adapted. It has clever features such as cataloguing new files to hold one's output, but these seem to do extremely little that would take any significant effort to do by hand. Also, it lacks some useful features, such as the ability to use non-standard processors (such as one's own assembler). Furthermore, it requires an SGS describing each element in the program; this is typical of its lack of convenient defaults. SPACE Our version of how to maintain programs is embodied in the element 'MAINTSKEL': It was developed by Dan Drake, formerly of ISD, and has been enhanced by other ISD folks since dan left. At some point there will be a proper document describing it; in the meantime this section should give enough information to make it possible to use the thing. 3Features It is assumed that you have a program file containing some source and procs, and a file (probably the same one) with current relocatables. You want (probably) to apply some permanent and/or temporary changes, producing (probably) a new absolute and (perhaps) new source. SPACE MAINTSKEL is designed to do all the above, with a bewildering variety of options. It will not catalogue new files, back up files on tape, or run test cases, as the Maryland skeleton will. In a little more detail, the features offered are as follows: SPACE Distinct files can be specified for source input, source output, procedure input, procedure output, relocatable input, relocatable output, and absolute output. If unspecified, these have allegedly reasonable default values, mostly defaulting to the source input file, which defaults to TPF$. SPACE Because it is assumed that changes will be applied repeatedly to the same source, no new source is produced unless requested. (If neither source output nor procedure output is specified, procedures are updated into a temporary file.) New source can be produced either by a 3-field processor call or by the U option. SPACE Normally, DOC elements are processed first; procedures second; MAPs last; everything else in between. SPACE Within each of those classes, elements will be processed alphabetically if requested. SPACE Elements can be selected for processing in a variety of ways. By default, all elements with changes are processed; but one can select only those with temporary changes, those with both permanent and temporary changes, everything in the file, and so on. SPACE One can select whether elements will be updated by PCF, TCF, both (default), or neither. SPACE Elements can be selected for listing on the basis of whether they have changes. SPACE Instead of updating elements, the skeleton can merge a PCF and TCF to make a new PCF. SPACE The correct processor for any element can be given explicitly (together with options) by an SGS; it can be determined (using standard options) from the table of contents of the source input file; or there can be no processor specification, in which case the element is processed by a default processor, which can be specified by the user (via the 'LANGUAGE' SGS). SPACE The user can specify his own processors to replace the standard ones. He can specify default options for all processors including standard ones. 3Processor Call The user is assumed to know how to call @SSG, giving sources for SGS, PCF, and TCF input. The only special feature relevant to this skeleton is spec2: If this is given as SPACE CENTER <SOURCE-INPUT-FILENAME>./TOC SPACE the skeleton can read the 'TOC' SGS's to determine element types and subtypes; this determines the processor to be used for any element which does not have a 'DESCRIBE' or 'MAP' SGS (see below). If spec2 is not used in this way, the 'LANGUAGE' SGS gives the processor for non-described elements. REMAIN 20 3SGS Types The following conventions apply in describing SGS input: SPACE <filename> can be either a filename or qualifier,filename. SPACE <elt> can be element or element,version. SPACE <subtype> refers to a standard element type or subtype as defined in section 24.2.1.1 Of the Exec-8 PRM, not an actual processor name. For procedures, therefore, one should use ASMP, COBP, or FORP, rather than PDP; the skeleton knows about providing the C or F option. SPACE [bracketed material] is optional. REMAIN 39 4File Definition SGS's COLUMN 2 The following SGS's are all optional. If any of them is omitted, a (hopefully) reasonable default is used. The general syntax is: SPACE CENTER <SGS name> <filename> SPACE 2 TABLE File Definition SGS's SPACE COLUMN 3 SGS name Purpose Default ------------------------------------------------------------------ : : : : : SI : Defines the file which contains : TPF$ : : : the source input, excluding : : : : procedures. : : : : : : : SO : Defines the source output file. : None. New source : : : if <filename> is 'U' (quotes : not produced. : : : required), U-option updating : : : : will be done. : : : : : : : RI : Defines relocatable input file. : SI : : : : : : RO : Defines relocatable output file. : SO if given, else RI : : : : : : PI : Defines procedure input file. : SI : : : : : : PO : Defines procedure output file. : SO if given, else : : : : RO if given, else a : : : : temporary file. : : : : : : : : To force a temporary : : : : file, use: PO 'TEMP' : : : : : : AO : Defines absolute output file. : RO : : : : : ------------------------------------------------------------------ END COLUMN 13 REMAIN 28 4DESCRIBE Purpose: Explicitly describes an element as being part of a package, and to explicitly define its subtype. May optionally define the options to be used when processing this element, and the name of the output element, if different. SPACE Syntax: DESCRIBE <elt> <subtype>[,<opts>] [<output-elt>] SPACE Notes: If <opts> is omitted, the default options for the processor corresponding to the given subtype will be used. Generally, listing options (such as S) and update options (U) are not included, but are determined by the skeleton. SPACE If <output-elt> is given, this name will appear in spec 2 of the processor call card: the relocatable or absolute or procedure output. COLUMN 2 SPACE Examples: DESCRIBE NEWASM ASM DESCRIBE TEST1 ASMP TEST1,NEW DESCRIBE E1,V1 MAP,B ABSOUT SPACE Default: None COLUMN 13 REMAIN 28 4SELECT Purpose: This SGS is used to define where the skeleton looks to find elements to be processed. SPACE Syntax: SELECT <spec> SPACE COLUMN 24 <spec>: PCF - select elements which have PCF corrections. TCF - select elements which have TCF corrections. EITHER - select elements which have either PCF or TCF corrections. BOTH - process elements which have both PCF and TCF corrections. DESCRIBE - select all -and only- those elements which apear in 'DESCRIBE' SGS's. TOC - select all -and only- those elements which appear in 'TOC' SGS's. NOTHING - do not select any elements. SPACE Examples: SELECT PCF SELECT TOC SELECT DESCRIBE SPACE COLUMN 13 Default: SELECT EITHER REMAIN 25 4PROCESS Purpose: Forces the given element to be processed regardless of the criterion in the 'SELECT' SGS. May also override 'DESCRIBE' SGS specifications for the element. SPACE Syntax: Two forms are possible: SPACE A. PROCESS <elt> SPACE forces processing of element <elt>. SPACE B. PROCESS <elt> <subtype>[,<opts>] [<output-elt>] SPACE Fields 2 and 3 override the respective fields of any 'DESCRIBE' SGS for this element. SPACE COLUMN 24 Examples: PROCESS ALWAYSELT PROCESS NONSENSE ASM,Z NONSENSE,REL SPACE Default: None COLUMN 13 REMAIN 31 4MAP Purpose: This causes the element to be collected, regardless of the 'SELECT' and 'DESCRIBE' SGS's. SPACE Syntax: MAP <elt> MAP[,<opts>] [<output-elt>] SPACE Notes: If there is at least one 'MAP' SGS, only elements so specified will be collected; any other map symbolics selected for processing will be processed by @ELT. To prevent all collections, use just one 'MAP' SGS: Map 'NO'. SPACE COLUMN 25 Examples: MAP MAPSYM MAP MAP MAPSYM MAP NEWABS MAP MAP,NEW MAP,B ABS,NEW MAP 'NO' SPACE COLUMN 13 Default: If no 'MAP' SGS's are given, all elements which are found to be MAP symbolics (from 'PROCESS', 'DESCRIBE', or 'TOC' SGS, in that priority) will be @MAP'ed. REMAIN 26 4FIRST Purpose: The skeleton processes procs first, maps last, and everything else in between. The 'FIRST' SGS may be used to specify that a given element or type of element is to be processed -before- the procs. SPACE Syntax: FIRST <what> <elt or type> SPACE COLUMN 24 <what>: ELEMENT - the given <elt> (element, or element,version) is to be processed first. SPACE SUBTYPE - elements with the given subtype are to be processed first. SPACE COLUMN 13 Notes: The default is 'FIRST SUBTYPE DOC'. To specify that nothing is to be processed before the procs, the following SGS is needed: FIRST 'NO' (quotes required). COLUMN 24 SPACE Examples: FIRST SUBTYPE ELT FIRST ELEMENT ME,FIRST FIRST 'NO' COLUMN 13 SPACE Default: FIRST SUBTYPE DOC REMAIN 19 4APPLY Purpose: Determines which changes to apply in processing elements. SPACE Syntax: APPLY <spec> SPACE COLUMN 24 <spec>: PCF - apply PCF corrections only. TCF - apply TCF corrections only. BOTH - apply both PCF and TCF corrections. NEITHER - apply neither PCF nor TCF. SPACE Examples: APPLY PCF APPLY BOTH COLUMN 13 SPACE Default: APPLY BOTH EJECT 4PROCESSOR Purpose: The skeleton creates a set of 'PROCESSOR' SGS's which define the processor to be used upon encountering each element type, the options to use in various situations, and the spec fields required. The user may specify his own 'PROCESSOR' SGS's, to override any of these fields. The SGS's created by the sksleton are known as the standard 'PROCESSOR' cards. If the user does not specify anything for a particular subfield, the skeleton will pick up the value from the standard 'PROCESSOR' card for this element subtype. SPACE It is also possible to define a different standard 'PROCESSOR' SGS. This will be explained below. SPACE Syntax: A. To redefine the options for a given subtype: SPACE PROCESSOR <subtype>,<opt1>,<opt2>,<opt3>,<opt4> SPACE COLUMN 24 <opt1> - defines the non-listing type options which should be used for this subtype. If this subfield is null, the non-listing options from the standard 'PROCESSOR' card for this subtype will be used. To specify that no non-listing options at all are to be used, specify 'NO' in this subfield (quotes required). <opt2> - options to be used when no listing is desired. A null subfield results in use of the no-list options from the standard 'PROCESSOR' card for this subtype. If you wish to specify that no options are to be used, specify 'NO' (quotes required). <opt3> - options to be used for a short listing. Otherwise, same as <opt2>. <opt4> - options to be used for a long listing. Otherwise, same as <opt2>. COLUMN 13 SPACE B. To redefine the processor to be used when processing elements of a given subtype: SPACE PROCESSOR <field1> <field2> <elt> [<filename>] SPACE COLUMN 24 <field1> - as described aobve. <Field2> - optional field with following syntax: SPACE <Subtype>[,<spec-list>] SPACE This second <subtype> is used as a pointer to the standard 'PROCESSOR' card for this subtype. It is usually the same as the <subtype> in <field1>. It is possible to have several 'PROCESSOR' cards for the same subtype: The last one encountered (usually the one supplied by the skeleton) is the standard one, and is used to fill in any subfields the user left null. SPACE If the <subtype> in <field2> is equal to the <subtype> in <field1> of some other 'PROCESSOR' SGS, then that other 'PROCESSOR' SGS becomes the standard 'PROCESSOR' card for this subtype: Any subfields not specified here will be satisfied from that other card. SPACE <Spec-list> is a list of 2 or 3 subfields with the SGS-names of the files applicable to each spec. (Examples: ASM,SI,RO,SO or FORP,PI,PO ). COLUMN 13 SPACE <Elt> and <filename> may be used to produce @<elt> or @<filename>.<elt> in place of @<processor>. The usual conventions apply to <elt> and <filename>. SPACE SPACE Examples: SPACE 1. PROCESSOR ASM,'NO',E,SJ,LJ SPACE Here, the user is redefining the options to be used when processing ASM symbolics. No special non-listing options are desired. When no listing is to be generated, the user wants to use the E-option. Short listings are to use the SJ-options, and long listings are to use LJ. The standard PROCESSOR SGS for the ASM subtype will be used to find the processor name, its location, and the spec fields required. SPACE 2. PROCESSOR ASM,'NO',E,S,S ASM OUR,ASM OUR,FILE SPACE Here, the user is redefining the name and location of the processor to be used upon encountering ASM symbolics, as well as the options. Note that he wants 'long' listings to look just like 'short' listings. When an ASM symbolic is encountered, the skeleton will produce '@OUR*FILE.Our/ASM' with the appropriate options. The standard 'PROCESSOR' SGS for the ASM subtype will still be used to find the spec fields required. SPACE 3. PROCESSOR ASM ASM MASM SPACE Here, the user is just redefining the processor to be called when an ASM symbolic is encountered. Options and spec fields will still be obtained from the standard 'PROCESSOR' SGS for the ASM subtype, but the skeleton will produce '@MASM' instead of '@ASM'. SPACE 4. PROCESSOR ASM XXX 5. PROCESSOR XXX,Z,N,S,L XXX,SI,RO,AO YYY SPACE Example #5 defines a new processor, called @YYY, with specs SI,RO,AO. 'XXX' need not be equal to any of the canned standard subtypes. This 'PROCESSOR' SGS will become the standard 'PROCESSOR' card for the 'XXX' subtype, or for any other 'PROCESSOR' SGS which has 'XXX' as the <subtype> in <field2>, as does example #4. SPACE Default: An entire set of standard 'PROCESSOR' SGS's is generated by the skeleton. See the skeleton for the contents of these standard cards, since you may wish to change them. REMAIN 41 4LIST Purpose: Of the elements selected for processing, determines which ones are to be listed, and at what length. COLUMN 24 SPACE Syntax: LIST <what>[,<how>] SPACE <what>: PCF - list only the elements having PCF corrections. TCF - list only the elements having PCF corrections. EITHER - list only the elements having PCF or TCF corrections. BOTH - list only the elements having PCF and TCF corrections. ALL - list all elements selected for processing. NONE - don't list any elements. SPACE COLUMN 13 Elements which are being processed but are not to be listed will be given the <opt2> options from the proper 'PROCESSOR' SGS. COLUMN 24 SPACE <how>: SHORT - short listing desired. Use <opt3> options from proper 'PROCESSOR' SGS. LONG - long listing desired. Use <opt4> options from proper 'PROCESSOR' SGS. NOT - no listing desired. Use <opt2> options from proper 'PROCESSOR' SGS. SPACE COLUMN 13 Notes: 'LIST NONE' is equivalent to 'LIST <x>,NOT'. Otherwise, if <how> is not specified, 'SHORT' is assumed. In all cases, the listing options used are in addition to the <opt1> (default) options, or the options from the 'MAP', 'PROCESS', or 'DESCRIBE' SGS. SPACE 'MAP' elements are treated as a special case for listing purposes: If 'LIST NONE' or 'LIST <x>,NOT' is specified, the no-listing options will be used. However, if 'LIST <PCF/TCF/BOTH/EITHER>,<how>' is specified, 'MAP' elements will be given the specified <how> options even if they don't have corrections of the specified type. COLUMN 24 SPACE Examples: LIST ALL,LONG LIST EITHER,SHORT LIST NONE COLUMN 13 SPACE Default: LIST ALL,SHORT REMAIN 17 4LANGUAGE Purpose: Specifies the assumed symbolic subtype of any element for which the subtype can not be determined from a 'MAP', 'PROCESS', 'DESCRIBE', or 'TOC' SGS. (The above is the priority order). SPACE Syntax: LANGUAGE <subtype> COLUMN 24 SPACE Examples: LANGUAGE ELT LANGUAGE ASM COLUMN 13 SPACE Default: LANGUAGE ASM REMAIN 10 4MERGE Purpose: If this SGS is given, elements will not be updated; instead, the PCF and TCF will be merged to create (by an @ELT,IL) an element of the name given. SPACE Syntax: MERGE <elt> SPACE Example: MERGE NEWPCF SPACE Default: Process normally, don't merge. REMAIN 16 4UPDATE Purpose: Specifies that an updated PCF is desired. SPACE Syntax: UPDATE SPACE Notes: If 'UPDATE' is specified, the TCF will be merged into the PCF, updating the PCF. This is different from the 'MERGE' SGS, in that normal processing is still done. (Rather than doing a *CORRECT for each element being processed, a *CORRECT,PK will be done). Note that this SGS should be used only if 'APPLY BOTH' is also used. SPACE Default: Process normally, do not update PCF. REMAIN 16 4CORRECT Purpose: If you have the corrections for a given element separate from the PCF or TCF, or you'd like to use these corrections rather than what's in the PCF and TCF, you may use the 'CORRECT' SGS. SPACE Syntax: CORRECT <elt1> FROM <elt2> [<filename>] SPACE Notes: When the given <elt1> is being processed, this will produce an '@ADD,E <elt2>' rather than a *CORRECT <elt1>. SPACE Default: None REMAIN 25 4ALPHA Purpose: If this is specified, elements (within each class) will be processed in alphabetical order. This SGS applies both to updating and to merging operations. SPACE Syntax: ALPHA SPACE Notes: Because of the weaknesses of the SYMSTREAM language, alphabetization is expensive for more than about a dozen elements. For more than two dozen elements, it tends to become prohibitive. Note that if change-files are alphabetical, 'SELECT TCF' (or 'PCF') will produce alphabetical output. To list everything alphabetically while applying updates, it may be desirable to name all elements in the TCF, or even to set up a full set of 'DESCRIBE' SGSses in alphabetical order. Judicious use of the @SSG O and S-options may also help. SPACE We welcome any suggested algorithms for sorting with decent efficiency. SPACE Default: Don't alphabetize. REMAIN 21 4PROGRAM Purpose: Optional SGS which may be used to add descriptive information to the headings produced by the skeleton. SPACE COLUMN 24 Syntax: PROGRAM <program name> COLUMN 13 SPACE Notes: This SGS may have as many fields and subfields as necessary. The contents of all fields and subfields will be concatenated and included in the headings. Spaces will be inserted between fields, but not between subfields. COLUMN 24 SPACE Examples: PROGRAM BATCH INTER,FACE PROGRAM MYPROG LEVEL 5,A SPACE COLUMN 13 Default: None REMAIN 35 4LEVEL Purpose: Optional SGS which may be used to add descriptive information to the headings produced by the skeleton. Also may be used to convey level information to the program, through @MAP 'EQU' directives. SPACE Syntax: LEVEL <level #> [<level tag> <mapelt> <mapcor> ...] SPACE Notes: <Level number> is field 1 only, but may be composed of several subfields. For heading purposes, a '-' will be inserted between each subfield. SPACE Fields 2 through n are optional. If not given, the 'LEVEL' SGS is used only for heading purposes, and the level number subfields may therefore contain any character which is legal in a heading. SPACE If fields 2 through n are given, they have the following meaning: COLUMN 24 SPACE Field 2: <Level tag> - this field should have the same number of subfields as field 1. It specifies the tags to be associated with each subfield of the level number in field 1. For example: SPACE LEVEL 7,2,5 BASE,PCF,TCF ... ... SPACE Field 3: <Mapelt> - the element or element,version name of the MAP element to which the 'EQU' directives are to be added. SPACE Field 4: <Mapcor> - the desired correction card for the MAP element given in field 3. SPACE Field 5-n: Same as fields 3 and 4, for additional MAP elements. SPACE COLUMN 13 Note that when used for this purpose, field 1 may contain only those characters which are acceptable for the value in a @MAP 'EQU' directive. SPACE COLUMN 24 Examples: LEVEL 10,4 SPACE This will result in '10-4' being part of the heading. SPACE LEVEL 7,6 BASLEV,UPDLEV MFDMAP ''-1,2'' SPACE This would cause '7-6' to be part of the heading, and would generate: SPACE *MFDMAP -1,2 EQU BASLEV/7 EQU UPDLEV/6 SPACE LEVEL 6 BASE MAPSYM -93 MAP,VERS ''-13,14'' SPACE this would cause '6' to be part of the heading, and would generate: SPACE *MAPSYM -93 EQU BASE/6 *MAP/VERS -13,14 EQU BASE/6 SPACE Default: None EJECT COLUMN 2 REMAIN 20 4HEADING Purpose: To insert options and/or print control commands into the @HDG cards generated by the skeleton. SPACE Syntax: HEADING <options> [<print control>] SPACE Notes: If no options are desired on the @HDG card, the options field can be set to 'NO' (quotes included). Field 2 can contain an exec print control image and, if used, a period will be inserted preceeding it. SPACE Example: HEADING PN L,0 SPACE This will generate: SPACE @HDG,PN PROGRAM: WHAT LEVEL: 1R1 ELEMENT: HUH .L,0 SPACE Defaults: None EJECT 4CULL Purpose: To generate a @CULL call card after all other processing is done. SPACE Syntax: CULL <opts> <type>[,<scol>,<res>] [<file> <file>...] SPACE Notes: <type>, <scol>, and <res> are as described in the PRM (UP-4144.4, Volume 4). SPACE Fields 3 through n are filenames (with possible qualifiers) to be culled. SPACE Example: CULL msw data,80 qual,file filex SPACE This generates: SPACE @CULL,MSW DATA/80,QUAL*FILE.,FILEX. SPACE Default: None 4CULLDATA Purpose: If the CULL SGS is used, data cards may be passed to the CULL processor through the CULLDATA SGS. SPACE Syntax: CULLDATA <string> [<string> <string> ...] SPACE Notes: Fields 1 through n are character strings to be scanned by the CULL processor. Any number of CULLDATA SGS's may appear. SPACE Default: None roman on