F:SYN    DSECT    1
F:PAR    DSECT    1
SYN      CSECT    1
         DEF      SYN
         DEF      DATA
         REF      M:SL
         REF      SCAN:C
         REF      ERREXIT
GO       EQU      %
* GET SYNON NAME
         LI,8     BUFSYN            GET BUFFER ADDR
         BAL,14   SCAN:C             FOR SCAN
         BCS,14   SCANERR1          ERR, ACCT, OR PASS PRESENT
         BCR,1    SCANERR1          NO FILENAME PRESENT
* GET PARENT NAME
         LI,8     BUFPAR            GET BUFFER ADDR
         BAL,14   SCAN:C             FOR SCAN
         BCS,14   SCANERR2          ERR, ACCT, OR PASS PRESENT
         BCR,1    SCANERR2          NO FILENAME PRESENT
* CHECK IF PARENT NAME IS IDENTICAL TO SYNON NAME
         LB,1     BUFPAR+1          GET TEXTC COUNT FROM SCAN BUFFER
         CB,1     BUFSYN+1          = PARENT SPECIFIED SIZE ?
         BNE      C04               NO - CONTINUE
B02      EQU      %
         LB,12    BUFPAR+1,1        YES - GET A BYTE OF NAME
         CB,12    BUFSYN+1,1        = PARENT NAME ?
         BNE      C04               NO - CONTINUE
         BDR,1    B02               YES - TRY AGAIN
         B        SCANERR5          POIFECT MATCH - FORGET IT
C04      EQU      %
* CHECK IF PARENT FILE EXISTS
         LCI      8                 GET NUM WORDS IN FILE VLP
         LM,0     BUFPAR+1          GET FILE NAME VLP
         STM,0    VLPC2+1            & SET IT IN FPT
         LI,1     2                 POINT TO NUM SIGNIFICANT WORDS
         LB,12    BUFPAR,1          GET FROM SCAN
         STB,12   VLPC2,1            & SET IN VLP
,,VLPC2  M:OPEN   F:PAR,IN,(ERR,ERREXIT),(ABN,ABN2),;
                  (FILE,'ABCDEFGHIJKLMNOPQRSTUVWXYZ12345')
* CHECK IF PARENT IS A SYNON OF SYNON SPECIFIED BY USER
         LB,1     PARPARMS+1        GET TEXTC COUNT FROM FPARAMS
         CB,1     BUFSYN+1          = PARENT SPECIFIED SIZE ?
         BNE      C03               NO - CONTINUE
B01      EQU      %
         LB,12    PARPARMS+1,1      YES - GET A BYTE OF NAME
         CB,12    BUFSYN+1,1        = PARENT NAME ?
         BNE      C03               NO - CONTINUE
         BDR,1    B01               YES - TRY AGAIN
         B        SCANERR4          POIFECT MATCH - FORGET IT
C03      EQU      %
         M:CLOSE  F:PAR,SAVE        CLOSE THE PARENT FILE
         B        C02               CONTINUE
ABN2     EQU      %
         LB,1     10                GET ABNORMAL CODE
         CI,1     X'03'             FILE DOESN'T EXIST ?
         BE       SCANERR3          YES - TELL USER ABOUT IT
         B        ERREXIT           NO - FORGET IT
C02      EQU      %
* CHECK IF SYNON ALREADY EXISTS
         LCI      8                 GET NUM WORDS IN FILE VLP
         LM,0     BUFSYN+1          GET FILE NAME VLP
         STM,0    VLPC1+1            & SET IT IN FPT
         LI,1     2                 POINT TO NUM SIGNIFICANT WORDS
         LB,12    BUFSYN,1          GET FROM SCAN
         STB,12   VLPC1,1            & SET IN VLP
,,VLPC1  M:OPEN   F:SYN,INOUT,(ERR,ERREXIT),(ABN,ABN1),;
                  (FILE,'ABCDEFGHIJKLMNOPQRSTUVWXYZ12345')
         M:CLOSE  F:SYN,REL         DELETE THE EXISTING SYNON FILE
         B        C01               CONTINUE
ABN1     EQU      %
         LB,1     10                GET ABNORMAL CODE
         CI,1     X'03'             FILE DOESN'T EXIST ?
         BNE      ERREXIT           NO - FORGET IT
C01      EQU      %
* MOVE SYNON NAME TO FPT
         LCI      8                 GET NUM WORDS IN FILE VLP
         LM,0     BUFSYN+1          GET FILE NAME VLP
         STM,0    VLP+1              & SET IT IN FPT
         LI,1     2                 POINT TO NUM SIGNIFICANT WORDS
         LB,12    BUFSYN,1          GET FROM SCAN
         STB,12   VLP,1              & SET IN VLP
* MOVE PARENT NAME TO FPT
         LCI      8                 GET NUM WORDS IN SYNON VLP
         LM,0     BUFPAR+1          GET SYNON NAME VLP
         STM,0    VLPSYN+1           & SET IT IN FPT
         LI,1     2                 POINT TO NUM SIGNIFICANT WORDS
         LB,12    BUFPAR,1          GET FROM SCAN
         STB,12   VLPSYN,1           & SET IN VLP
* CREATE THE SYNON FILE
,,VLP    M:OPEN   F:SYN,SAVE,(ERR,ERREXIT),(ABN,ERREXIT),;
                  (FILE,'ABCDEFGHIJKLMNOPQRSTUVWXYZ12345'),;
                  (SYNON,'ABCDEFGHIJKLMNOPQRSTUVWXYZ12345')
VLPSYN   EQU      VLP+9+3           FILE, ACCT
         M:CLOSE  F:SYN,SAVE
         M:EXIT
SCANERR1 LI,2     MSG1
         B        SCANERR
SCANERR2 LI,2     MSG2
         B        SCANERR
SCANERR3 LI,2     MSG3
         B        SCANERR
SCANERR4 LI,2     MSG4
         B        SCANERR
SCANERR5 LI,2     MSG5
         B        SCANERR
SCANERR  EQU      %
         LB,1     *2
         M:WRITE  M:SL,(SIZE,*1),(BTD,1),(BUF,*2)
         M:EXIT
MSG1     TEXTC    'ERROR SCANNING SYNON FILE NAME'
MSG2     TEXTC    'ERROR SCANNING PARENT FILE NAME'
MSG3     TEXTC    'PARENT FILE DOES NOT EXIST'
MSG4     TEXTC    'ILLEGAL SYNON FILE NAME'
MSG5     TEXTC    'ILLEGAL PARENT FILE NAME'
DATA     CSECT    0
BUFSYN   RES      15
BUFPAR   RES      15
PARPARMS RES      90
F:SYN    M:DCB    FILE,SYNON,(ERR,ERREXIT),(ABN,ERREXIT)
F:PAR    M:DCB    FILE,(ERR,ERREXIT),(ABN,ERREXIT),(FPARAM,PARPARMS)
         END      GO
