Installing the FATMEN software

Installation of the FATMEN software consists of two steps:

  1. Installation of the FATMEN library (part of PACKLIB).
  2. Creation of the FATMEN shell program.

Installation of FATMEN on CERNVM

Generating the FATLIB library

The extraction of the code is made with the following PATCHY cradle:

+EXE.
+USE,QCDE.
+USE,*FATLIB,IBM.
+PAM,11, R=QCDE, T=A.ZEBRA
+PAM,12.       , T=A.FATMEN
+QUIT.

followed by the standard procedure to generate the TXTLIB, namely VFORT asm, EDITLIB asm, TXT GEN FATLIB asm.

The FATMEN module (for the command line interface)

The extraction of the code is made with the following PATCHY cradle:

+EXE.
+ASM,31.
+USE,*FMKUIP,IBM.
+USE,FMCDF,T=EXE,DIV.
+PAM,11, T=A.FATMEN
+QUIT.

which generates two files: the standard ASM file with the FORTRAN code and the diverted ASM2 file containing input to the KUIP processor. Both the ASM code and the output from the KUIP processor must be compiled and linked to build the FATMEN module.

The following exec has been used at CERN to perform the complete operation:

/**/
 Address Command
 'EXEC ZPATCHY FATMEN ( CRADLE(FATMEN) ASM(FATMEN) ASM2(FMCDF CDF)'
 'KUIPC FMCDF'  /* To generate the FORTRAN equivalent of the CDF file */
 'EXEC VFORT FATMEN'
 'EXEC VFORT FMCDF'
 'EXEC VFORT ENDMODU'         /* Dummy routine to "squeeze" the module*/
 'EXEC CERNLIB FATLIB ( LINK'
 'LOAD FATMEN FMCDF ( CLEAR NOAUTO'
 'INCLUDE ENDMODU'
 'GENMOD FATMEN ( TO ENDMODU'
 Exit
/*BEGIN ENDMODU FORTRAN */
      BLOCK DATA ENDMODU
      END

[HORACLE]

Processing the ORACLE routines for the FATMEN server

The ORACLE FORTSQL routines can be generated using the following cradles:

+EXE.
+ASM, 21,R=!./*BEGIN ! FORTSQL */
+USE,ORACLE.
+USE,*FATSQL.
+PAM,11.
+QUIT.

The output file should then be processed by the SPLITFIL command, which will create a separate file for each routine. These can then be pre-processed by the PCC exec as follows:

splitfile fatsql fortsql
-----> Split FATSQL FORTSQL A1 into pieces
Generate BLANKDEK FORTSQL A
Generate FMLOGI FORTSQL A
Generate FODEL FORTSQL A
Generate FOGET FORTSQL A
Generate FOPUT FORTSQL A
FAT3@cernvm;
pcc iname=fmlogi host=fortran
ORACLE Precompiler: Version 1.2.13.10 - Production on Thu Feb 22 17:32:04 1990
Copyright (c) 1987, Oracle Corporation, California, USA.  All rights reserved.
Precompiling FMLOGI.FORTSQL
FAT3@cernvm;
vfort fmlogi
VFORT compilation options in effect are: CHARLEN(32767) FLAG(W) GOSTMT OPT(2)
MAP NOSDUMP.
File 'FMLOGI FORTRAN A1' will be processed.
VS FORTRAN VERSION 2 ENTERED.  17:32:07
**FMLOGI** END OF COMPILATION 1 ******
VS FORTRAN VERSION 2 EXITED.   17:32:10
FAT3@cernvm;

Generating the code for the FATMEN server

This code can be generated with the following cradle:

+USE,IBM,*SQL,*FATSRV.
+EXE.
+PAM,11, R=QCDE, T=A.  ZEBRA PAM *
+PAM,12,  T=A. FATMEN PAM *
+QUIT.

The server module can then be built as follows:

CERNLIB V5ORAFIX V5ORACLE FATLIB
LOAD FATSRV OSDDAT OSDU2OS (CLEAR NOMAP NODUP NOAUTO)
GENMOD FATSRV

Generating the FATMEN server for remote VM systems

This is performed in the same way as on CERNVM with the following exception:

  1. If neither ORACLE or SQL/DS are to be used, the
    +USE,*SQL
    
    statement should be omitted.

    If ORACLE is to be used, the procedure for generating the FORTSQL routines is described on Page [more info] should be followed. If SQL/DS is to be used, the procedure below should be followed.

    [HSQLDS]

    Processing the SQLDS routines for the FATMEN server

    The SQL/DS FORSQL routines can be generated using the following cradles:

    +EXE.
    +ASM, 21,R=!./*BEGIN ! FORSQL */
    +USE,SQLDS.
    +USE,*FATSQL.
    +PAM,11.
    +QUIT.
    
    The output file should then be processed by the SPLITFILE command, which will create a separate file for each routine. These can then be pre-processed by the SQLIFY exec as follows:

    splitfile fatsql forsql
    -----> Split FATSQL FORSQL A1 into pieces
    Generate BLANKDEK FORSQL A
    Generate FMLOGI FORSQL A
    Generate FODEL FORSQL A
    Generate FOGET FORSQL A
    Generate FOPUT FORSQL A
    FAT3@Cernvm;
    sqluser
    SQL195 ( 01A8  R ) RR
    FAT3@Cernvm;
    sqlify fmlogi
    ARI0717I START SQLPREP EXEC: 02/23/90 10:27:47 SET
    ARI0320I THE DEFAULT DATABASE NAME IS SQLDBA.
    ARI0663I FILEDEFS IN EFFECT ARE:
    SYSIN    DISK     FMLOGI   FORSQL   A1
    SYSPRINT DISK     FMLOGI   LISTPREP A1
    SYSPUNCH DISK     FMLOGI   FORTRAN  A1
    ARISQLLD DISK     ARISQLLD LOADLIB  R1
    ARI0713I PREPROCESSOR ARIPRPF CALLED WITH THE FOLLOWING PARAMETERS:
    ........ PREP=FMLOGI, NOCHECK,ISOLATION(CS)
    ARI0710E ERROR(S) OCCURRED DURING SQLPREP EXEC PROCESSING.
    ARI0796I END SQLPREP EXEC: 02/23/90 10:27:48 SET
    FAT3@Cernvm(00008);
    FAT3@Cernvm;
    vfort fmlogi
    CRNVFT030I VFORT compilation options in effect are: CHARLEN(32767) FLAG(W)
    GOSTMT OPT(2) MAP NOSDUMP NOPRINT.
    CRNVFT000I File 'FMLOGI FORTRAN A1' will be processed.
    VS FORTRAN VERSION 2 ENTERED.  10:27:55
    **FMLOGI** END OF COMPILATION 1 ******
    **SQLINT** END OF COMPILATION 2 ******
    VS FORTRAN VERSION 2 EXITED.   10:27:55
    /**********************************************************************/
    /*                                                                    */
    /*  Title  : Invoke SQL preprocessor                                  */
    /*  ======                                                            */
    /*                                                                    */
    /*  Format : SQLIFY   fn                                          */
    /*  ======               $ASMSQL#                                     */
    /*                                                                    */
    /*  Author : J. Wood, Systems Group, CCD, RAL, 10/04/86               */
    /*  ======                                                            */
    /*                                                                    */
    /**********************************************************************/
    Address Command
    Signal on HALT ; buf=0
    Arg fn ft fm . '(' 'USERID' user pwd .
    If user='' Then foruser=''
       Else Do
          user='STRIP'(user)
          foruser='USERID='user'/'pwd','
          End   /* Else Do */
    ret=0
    If fm = '' Then fm = 'A'
    Select
       When fn='' Then Do
          Say 'Format is: SQLIFY file_name '
          Exit 4
          End   /* Do When fn='' */
       When Abbrev('PLISQL',ft,1) Then ft='PLISQL'
       When Abbrev('ASMSQL',ft,1) Then ft='ASMSQL'
       When Abbrev('FORSQL',ft,1) Then ft='FORSQL'
       Otherwise Do
          ft='*'
          'MAKEBUF' ; buf=rc
          'LFILE' fn ft '* ( FIFO'
          n=Queued()
          reply=1
          j=0
          type.1='PLISQL'
          mode.1='A'
          typlist='/PLISQL/ASMSQL/FORSQL'
          Do i=1 To n
             Pull fn1 ft1 fm1 .
             loctyp='/'||Strip(ft1)
             If Pos(loctyp,typlist)>0 Then Do
                Do k=1 To j
                   If ft1=type.k & fm1=mode.k Then Iterate i
                   End   /* Do k=1 ... */
                j=j+1
                type.j=ft1
                mode.j=fm1
                End   /* Do If Pos ... */
             End   /* Do n */
          If j>1 Then Do k=1 While 1
             Say 'There is more than one file of filename' fn
             Say 'Select by number:'
             Do i=1 To j
                Say i':' fn type.i mode.i
                End   /* Do i= ... */
             Pull reply
             Select
                When ^Datatype(reply,'W') Then Iterate k
                When reply >j | reply < 1 Then Iterate k
                Otherwise Leave k
                End   /* Select */
             End   /* Do k=1 ... */
          ft=type.reply
          fm=mode.reply
          End   /* Do Otherwise */
       End   /* Select */
    'STATE' fn ft fm
    If rc^=0 Then Do
       Say fn ft fm 'does not exist'
       ret=rc
       Signal HALT
       End   /* Do If rc^=0 */
    rc='CPUSH'('PRT')
    'CP SPOOL 00E TO' Userid()
    lang = left(ft,3)
    if ft = 'FORSQL' then lang = 'FORTRAN'
    'EXEC SQLPREP' lang 'PP(PREP='fn','foruser,
                     'NOCHECK,ISOLATION(CS))',
                     'SYSIN('fn ft fm')'
    ret=rc
    rc='CPOP'('PRT')
    HALT:
    If buf^=0 Then 'DROPBUF' buf
    Exit ret