[FERMILAB.FERMILIB...] This area contains procedures useful in the maintenance of various libraries. Some of the files have been submitted to the DECUS library as VAX-38 and provide the capability to convert a macro symbol definition file (such as $SSDEF) into a FORTRAN INCLUDE file in which the symbols are defined by a series of PARAMETER statements. Additional procedures allow the FORTRAN INCLUDE file to be converted to a PASCAL or VAX-11 C include file. The files are: 1. SDIFGENR produces the FORTRAN INCLUDE file from the symbol definition macro. It makes use of the SDFSTRIP3.TEC TECO input file. 2. PASFRMFOR converts the FORTRAN file to a PASCAL %INCLUDE file for the CONST region to define constants. 3. CFROMFOR converts the FORTRAN file to a VAX-11 #include file which contains a series of #define statements. 4. CMTCRYOVR permits the comments from a older version of a FORTRAN INCLUDE file to be carried over into a newer version of the same file. 5. RADIXCVT will convert the radix of the numbers in FORTRAN, PASCAL or VAX-11 C include files from hexadecimal to decimal. Some of the files above require edits to redefine internal logical names. For instance, PASFRMFOR.COM must know where to find the PASFRMFOR.TEC file and so forth. Some of the other useful procedures are particularized to Fermilab and require some edits: 1. ADDTOLIB and BUILDLIB are used to add routines to or rebuild the FERMILIB.OLB library. The source files are assumed to be stored on SYS$SYSDEVICE: in directory [FERMILIB.SOURCES.ROUTINES] (and only source files for FERMILIB modules are stored there)! 2. BUILDTLBS will rebuild a text or macro library from files stored in the [.MACROS] or [.INCLUDES] subdirectories of the [FERMILIB] area. For text files, the module name is found from the text file itself where it is stored on the first line after the opening header comments marker: FORTRAN: "C+ module" PASCAL: "{+ module" or "(*+ module" C: "/*+ module" Currently BUILDTLBS also uses the HDRSTRIPR program and procedure to extract the header comments for help entries, but this can be easily removed from the procedure. Page 2 3. MTLBLIST will list the contents of a text or macro library on a module-by-module basis (starting each module on a new page with a header). 4. OLBMANIP is a procedure to ease mainpulation of object libraries. 5. TLBMANIP is a procedure to ease the manipulation of text libraries. It implements the convention for the module names as described under BUILDTLBS, above. [.DTR32] This subdirectory contains the files used to add several additional functions to VAX-11 Datatrieve at Fermilab. [.INCLUDES] This subdirectory contains a large number of FORTRAN (.FOR), PASCAL (.PAS) and VAX-11 C (.H) include files. The files (for the most part) just define constants, including the offsets into data structures as constants. Nearly all the files have been commented. DESCRIP2.H and VAXTYPES.H define additional data types and macros (extending the standard DESCRIP.H file) for VAX-11 C. The contents of this area was used to form the LCLFORDEF, LCLPASDEF and LCLCDEF text libraries found in [FERMILAB.SYSLIB] which are stored in SYS$LIBRARY: at Fermilab. [.MACROS] This area contains the sources for the macro definitions found in the FERMILIB.MLB macro library (stored in SYS$LIBRARY:). The RAD50.MAR file defines macros to convert text to Radix-50 constants. [.SOURCES] SCRFT is supports foreign terminals (in particular the ADM-3A) for the terminal independent screen package in the VMS Run Time Library. [.SOURCES.ROUTINES] This area contains the sources for the modules in the FERMILIB.OLB library (normally stored in SYS$LIBRARY:). These routines can be thought of as extensions to the VMS Run Time Library. Several of the routines started out from VAX SIG tapes but all have been modified or extended. Some of the more interesting modules are (by file): 1. ARGCHKRS and ARGUTILS permit routines (particularly those written in High Level Languages) to check for defaulted arguments and variable numbers of arguments. 2. LIBABSQUE implements HLL (High Level Language) access to the absolute queue instructions in the same fashion as the RTL (Run Time Library) provides access to the self-relative queue Page 3 instructions. 3. LIBBITS and LIBLOCKS implement single bit manipulations. In LIBLOCKS, the interlocked bit instructions are used to mainpulate locking bits from HLL's. 4. LIBGETS and LIBPUTS provide FORTRAN (in particular) with indirect addressing capability in which an INTEGER*4 variable is a pointer to a table or data structure. LIBGETS and LIBPUTS allow FORTRAN to make effective use of dynamic memory allocated by LIB$GET_VM for storage of data structures. 5. LIBSLEEP implements delay routines like the RSX-11M WAIT routine by using $SCHDWK and $HIBER in a simple to use fashion. 6. MTHQxxx is a package of quadword integer math routines. These can be particularly useful for manipulating VMS times. 7. RMSxxx is a package of routines to provide RMS services easily available to HLL's. In particular RMSPARSE and RMSRELATD provide routines to handle wildcarding and default and related file specifications. 8. STRSQUEEZ will remove all (or all multiple) blanks from a string. [.USS] This area contains the sources for the FERMIUSS privileged shareable image. This image implements a user-written system service to permit one process (the source) to declare an AST in another (the destination) process. The destination process has to have passed its AST address to the source process by some prior arrangement. This system service is a generalization of one used as part of the ACNET network services (a home-brew network) in which the control information and data is passed between processes in a global section and control is passed between processes by triggering AST's. This method was used to avoid multiple QIO overheads and to service multiple user programs in different groups in a real time control system. NOTE As of this time, this version is completely untested. A tested version will be submitted with the next SIG tape and/or to the DECUS library. It is planned at some point to add services to provide for system-wide event flag clusters (across groups) ala the global event flags of RSX-11M.