PROGRAM CREATE.MERGED.FILES.STATE

*
  LastUpdated... = "Rev: 11:44 12MAY88 MIS.SNA.PRAN.SGB <D4.3>DEVEL 36 E"
*
*  WARNING !!  Before running this program, make sure that all files
*              previously created by this program ( .MIS suffix) have
*              all been properly deleted. When deleting change the VOC
*              attribute 3 to D_filename.MIS because when this program
*              created the file it changed the VOC to point to the
*              production dictionary.
***
*  Generic program to make a merged file in devel of all the production
*  files from each state-corp. Input is the CONSTANT FILES.TO.MERGE.STATE
*  This program creates a file with a suffix of .MIS and changes the
*  VOC item to look at the production dictionary.
****
*                           R E V I S I O N   L O G
* PR#         WHEN     WHO        WHY
* =========== ======== ========== =======================================
* HC0144      05/11/88 SGB        Initial coding
*
****
$INSERT SYSLIB>INSERTS>STDDEF.INS.IBAS
$INSERT SYSLIB>INSERTS>STD.SUBROUTINES.INS.IBAS
$INSERT SYSLIB>INSERTS>STD.INPUT.INS.IBAS
$INSERT SYSLIB>INSERTS>IODEF.INS.IBAS

     DIM VOC.FILE(2)
     DIM CONSTANT.FILE(2)
     MAT VOC.FILE = NULL$
     MAT CONSTANT.FILE = NULL$

     PRINT CS$

     GOSUB OPEN.AND.INITIAL
     GOSUB GET.REGIONS
     GOSUB SETUP.HARDCOPY
     GOSUB MAIN.PROCESSING
     STOP

OPEN.AND.INITIAL:

     EQU PROGRAM.NAME TO "CREATE.MERGED.FILES.STATE"
     EQU NON.READ TO "NON-READ ON FILE # "

     ERROR = NULL$
     CALL @OPEN.FILE$('CONSTANT', MAT CONSTANT.FILE, ERROR)
     CALL @OPEN.FILE$('VOC',  MAT VOC.FILE,  ERROR)
     IF LEN(ERROR) THEN
        CALL @ABORT$(ERROR, PROGRAM.NAME)
     END

     READ DFILES.TO.MERGE FROM CONSTANT.FILE(IO$FILE.VARIABLE),"FILES.TO.MERGE.STATE" ELSE
        ERROR = "NON-READ ON CONSTANT, FILES.TO.MERGE.STATE"
        CALL @ABORT$(ERROR, PROGRAM.NAME)
     END
     RETURN

GET.REGIONS:

     DVOC = NULL$
     DVOC<1> = "F"
     DVOC<3> = "D_VOC"
     WRITE DVOC ON VOC.FILE(IO$FILE.VARIABLE),"QMERGE"
     READ DREGIONS FROM CONSTANT.FILE(IO$FILE.VARIABLE), "REGIONS.STATE.SGB" ELSE
        ERROR = "NON-READ ON CONSTANT REGIONS.STATE.SGB"
        CALL @ABORT$(ERROR, PROGRAM.NAME)
     END
     REGION.1 = DREGIONS<1>
     REGION.3 = DREGIONS<3>
     RETURN

MAIN.PROCESSING:

     MORE.FILES = TRUE$
     LOOP
     WHILE MORE.FILES DO
        CONTINUE = TRUE$
        REMOVE FILE.NAME FROM DFILES.TO.MERGE SETTING MORE.FILES
        IF FILE.NAME = "GROUPS" THEN SIZE = 809 ELSE SIZE = 293
        CCMD = "CREATE.FILE ":FILE.NAME:".MIS 5 ":SIZE
        EXECUTE CCMD
        DICTLINE = "SOURCE>DICT>D_":FILE.NAME
        WRITEV DICTLINE ON VOC.FILE(IO$FILE.VARIABLE), FILE.NAME:".MIS", 3
        OPEN '',FILE.NAME:".MIS" TO OUTFILE.MIS ELSE
           ERROR = "COULD NOT OPEN ":FILE.NAME:".MIS":" FILE NOT PROCESSED"
           GOSUB ERROR.MSG
           CONTINUE = FALSE$
        END
        IF CONTINUE THEN
           GOSUB IO.SECTION
           CLOSE OUTFILE.MIS
        END
     REPEAT
     DELETE VOC.FILE(IO$FILE.VARIABLE), "QMERGE"
     RETURN

IO.SECTION:

     REGION.1 = REGION.1
     REGION.3 = REGION.3
     MORE.ITEMS = TRUE$
     LOOP
     WHILE MORE.ITEMS DO
       CONTINUE = TRUE$
       REMOVE PREGION FROM REGION.3 SETTING MORE.ITEMS
       REMOVE NREGION FROM REGION.1 SETTING DUMMY
       GOSUB SET.CORRECT.POINTER
       POINTER = PREGION:">":FILE.NAME
       WRITEV POINTER ON VOC.FILE(IO$FILE.VARIABLE),"QMERGE",2
       OPEN '','QMERGE' TO QMERGE.FILE ELSE
          ERROR = "OPEN ERROR ON QMERGE>":POINTER
          GOSUB ERROR.MSG
          CONTINUE = FALSE$
       END
       IF CONTINUE THEN
          SELECT QMERGE.FILE
          EOF = FALSE$
          LOOP
             READNEXT QID ELSE EOF = TRUE$
          UNTIL EOF DO
             READ DQMERGE FROM QMERGE.FILE, QID THEN
                QID := "-":NREGION
                WRITE DQMERGE ON OUTFILE.MIS, QID
             END ELSE
                ERROR = NON.READ:QID:" IN REGION: ":NREGION
                GOSUB ERROR.MSG
             END
          REPEAT
       END
       CLOSE QMERGE.FILE
    REPEAT
    RETURN

SETUP.HARDCOPY:
     ENTRY.NO = NULL$
     CALL @SETPTR.HOLD$(1,ENTRY.NO)
     MSG = @(25,19):"Your HOLD number is : ":ENTRY.NO
     PRINT MSG
     APPL = "HC"
     TITLE = "CREATE.MERGED.FILES.STATE ERROR REPORT"
     PERIOD = OCONV(@DATE,"D2-")
     WIDTH = 132
     HEADING1 = NULL$
     CALL @STD.RPT.HEADING$(PROGRAM.NAME,APPL,TITLE,PERIOD,WIDTH,HEADING1,ERROR)
     HEADING ON 1 HEADING1
     RETURN

SET.CORRECT.POINTER:
     QVOC = NULL$
     QVOC<1> = "F"
     QVOC<2> = PREGION:">VOC"
     QVOC<3> = "D_VOC"
     WRITE QVOC ON VOC.FILE(IO$FILE.VARIABLE), "VOC.Q.SGB"
     OPEN '','VOC.Q.SGB' TO QVOC.FILE ELSE
        ERROR = "NON-OPEN ON VOC POINTER TO ":PREGION
        GOSUB ERROR.MSG
        CONTINUE = FALSE$
     END
     IF CONTINUE THEN
        READ PVOC FROM QVOC.FILE, FILE.NAME THEN
           IF PVOC<2> # FILE.NAME THEN
              PREGION = FIELD(PVOC<2>,">",1)
           END
        END ELSE
           PVOC = NULL$
        END
        CLOSE QVOC.FILE
     END
     DELETE VOC.FILE(IO$FILE.VARIABLE), "VOC.Q.SGB"
     RETURN

ERROR.MSG:
     PRINT ON 1 ERROR
     RETURN

END
