         SYSTEM   BPM
         SYSTEM   ESCHCI5
*        SYSTEM REFERENCES
*        BU006 REFERENCES
         REF      F:SCHE
         REF      Q:PCSR,Q:OBJS
         PAGE
*        DMS REFERENCES
         REF      SCHMA
*        PROGRAM DEFINITIONS
         DEF      DBXX
         DEF      DBNN
         DEF      FIXIT
         DEF      FIXSCHMA
         PAGE
         CSECT    0
         PSYS     1                 LIST SUBSCHEMA
SPACDATA CSECT    0
DBNN     DATA     0                 DB01--DB64
SEQNO    DATA     0
FODBAS   DATA    0                   NONZERO INDICATES F:DBASG IS OPEN
OLDSEQ   DATA     0
PAGESZ   EQU     512                 SIZE OF DMS PAGE.
PAGHSZ   EQU     2                   SIZE OF PAGE HEADER.
DBXX     DATA     0
DCBPTR   DATA     0                 DCB POINTER F:SCHE OR F:NEWSCHE
TEN      DATA    10                  USED TO CONVERT FROM BINARY TO EBCDIC
NAME     RES      1
SAVE15   RES      1
         CSECT    1
FIXIT    EQU      %
         LW,1     *15               GET SCHEMA NAME LOCATION
         STW,1    NAME
         AI,15    1
         STW,15   SAVE15            SAVE RETURN
         LI,R1    F:SCHE
         STW,R1   DCBPTR
         PAGE
*
*   MVSCHN        MOVE SCHEMA NAME INTO AREA DEFN
*
         M:OPEN   *DCBPTR,(SAVE),(IN),(RANDOM),;
                         (ERR,ERROR),(ABN,ERROR)
         LW,X1    DCBPTR
         AI,X1    6
         LW,X2    *X1               GET FLP OF SCHEMA FILE
         AND,X2   =X'1FFFF'         GET ADDR PORTION
         AI,X2    1                 BYPASS CONTROL WORD
         SLS,X2   2                 CHANGE TO BA
         LI,X1    0                 CLEAR X1
         LB,X1    0,X2              GET BYTE COUNT OF SCHEMA FILENAME
         AI,X1    1                 1ST BYTE INCLUDED
         LI,X3    SCHMA+2           GET FIRST OF AREA LINK ADDR
         LW,X3    *X3
         AI,X3    6                 FORM AREA NAME ADDR
         SLS,X3   2                 CHANGE TO BA
         MOVE     (0,X2),(0,X3),*X1 MOVE SCHEMA FILE NAMETO INCORE SCH
         LW,3     NAME
         AI,1     -1
         AI,2     1
         STB,1    3
         MBS,2    0
         M:CLOSE  *DCBPTR,(SAVE)
         LI,A     SCHMA             GET SCHEMA ADDR
         STW,A    Q:OBJS            SET OBJECT SCHEMA ADDR
         MTW,1    Q:PCSR            SET Q:PCSR FLAG
*
FINI     LW,15    SAVE15
         AI,15    1
         B        *15
FIXSCHMA STW,15   SAVE15
         LW,X1    *15
         LW,X1    *1
*    FIXSCHMA     INSERTS NECESSARY INFORMATION INTO
*                 IN-CORE SUBSCHEMA
*               UPON ENTRY: X1 = SCHEMA SIZE
*                           FIRST CALCULATE NEXT LARGEST
*                           PRIME NUMBER
*                                   LINK IS ON X7
*
         STW,X1   X5                SAVE SIZE (PRIME BASE)
         OR,X1    =1                MAKE IT ODD
         CI,X1    3
         BLE      FIX:4
FIX:1    LI,X4    3                 START DIVISOR AT LOWEST ODD NUMBER
FIX:2    LI,X2    0
         STW,X1   X3                CANDIDATE FOR PRIME
         DW,X2    X4                DIVIDE IT
         CI,X2    0                 WAS THERE A REMAINDER
         BNE      FIX:3             NO -- STILL MAY BE PRIME
         AI,X1    2                 NOT PRIME -- BUMP BASE TO NEXT ODD
         B        FIX:1             START OVER
FIX:3    AI,X4    2                 BUMP DIVISOR TO NEXT ODD
         STW,X4   X3                SQUARE DIVISOR
         MW,X3    X4
         CW,X3    X1                IS DIVISOR SQUARED < PRIME CANDIDATE
         BL       FIX:2             YES - TRY DIVIDING BY IT
*        PRIME VALUE IN X1, SCHEMA SIZE IN X5
*        SUBCHEMA FOR SCHEMA DATABASE STARTS AT 'SCHMA'
*
FIX:4    LW,X2    =X'200000'        MASK FOR CALC BIT
         LW,X3    SCHMA+2           X3 = ADDR OF AREA DEFN
         STW,X5   1,X3              SET NUMBER OF DATA PAGES IN AREA DEF
FIX:5    LW,X3    4,X3              ADDR OF NXT DEFN IN GROUP LINK
         AND,X3   =X'1FFFF'
         CW,X3    SCHMA+2           IS IT AREA DEFN
         BE       FINI              EXIT IF SO -- DONE
         CW,X2    0,X3              IS GROUP CALC
         BAZ      FIX:5             BR IF NOT
         STW,X5   7,X3              STORE PAGE RANGE MAX
         STW,X1   8,X3              STORE PRIME VALUE
         B        FIX:5
ERROR    LW,15    SAVE15
         STW,15   *15
         B        FINI
         END
