SUBROUTINE eMailSofin
***
*     Processing code for eMail..
*
*  Date       Programmer    Revision Description
*  --------   ------------- -------------------------------------------
*  10/02/89   A. McLaughlin Initial coding.
*
$INSERT SOFIN>SOFIN.INSERT>I_SOFCOM
$INSERT SOFIN>SOFIN.INSERT>I_SETVECTOR
$INSERT SOFIN>SOFIN.INSERT>I_CATEQUATES
$INSERT SOFIN>SOFIN.INSERT>I_STDDEF
LastUpdated... = "Rev: 10:21 18JUN90 ANDREW <KSF.V2>EMAIL 161 Z <KSF.V2>EMAIL>BP>EMAILSOFIN"
*
     EQU ai TO 1
     EQU bi TO 2
*
*
     COMMON /TABCOM/ gotab(100,2)

********** Branch to correct processing time
     ON PROCESSING.TIME GOSUB HandleAIBI,
        HandleAIBI,
        FileTime,
        ExitTime,
        DeleteTime,
        SetUp,
        ControlPoint,
        AfterFileTime
     RETURN

* AI BI Handler
HandleAIBI:
     ON gotab(FIELD.INDEX+1,PROCESSING.TIME) GOSUB AI.0, BI.3

InvalidTime:
     RETURN

AI.0:
     USER1 = UPDATE.RECORD
     RETURN

BI.3:
     FLOW.VECTOR = display.current.only.op
     RETURN

FileTime:
     IF USER1<6> NE UPDATE.RECORD<6> THEN
        List = USER1<6>
        More = LEN(List) GT 0
        LOOP WHILE More DO
           REMOVE Item FROM List SETTING More
           LOCATE Item IN UPDATE.RECORD<6,1> SETTING Dummy ELSE
              READU Rec FROM FILE.VARS(1), Item THEN
                 LOCATE UPDATE.ID IN Rec<7,1> SETTING Ptr THEN
                    DEL Rec<7,Ptr>
                 END
                 WRITE Rec TO FILE.VARS(1), Item
              END ELSE
                 RELEASE FILE.VARS(1), Item
              END
           END
        REPEAT
        List = UPDATE.RECORD<6>
        More = LEN(List) GT 0
        LOOP WHILE More DO
           REMOVE Item FROM List SETTING More
           LOCATE Item IN USER1<6,1> SETTING Dummy ELSE
              READU Rec FROM FILE.VARS(1), Item THEN
                 LOCATE UPDATE.ID IN Rec<7,1> SETTING Ptr ELSE
                    INS UPDATE.ID BEFORE Rec<7,Ptr>
                 END
                 WRITE Rec TO FILE.VARS(1), Item
              END ELSE
                 RELEASE FILE.VARS(1), Item
              END
           END
        REPEAT
        CRT SPACE(20):"Child pointers updated.  (eMailSofin)"
     END

     IF USER1<7> NE UPDATE.RECORD<7> THEN
        List = USER1<7>
        More = LEN(List) GT 0
        LOOP WHILE More DO
           REMOVE Item FROM List SETTING More
           LOCATE Item IN UPDATE.RECORD<7,1> SETTING Dummy ELSE
              READU Rec FROM FILE.VARS(1), Item THEN
                 LOCATE UPDATE.ID IN Rec<6,1> SETTING Ptr THEN
                    DEL Rec<6,Ptr>
                 END
                 WRITE Rec TO FILE.VARS(1), Item
              END ELSE
                 RELEASE FILE.VARS(1), Item
              END
           END
        REPEAT
        List = UPDATE.RECORD<7>
        More = LEN(List) GT 0
        LOOP WHILE More DO
           REMOVE Item FROM List SETTING More
           LOCATE Item IN USER1<7,1> SETTING Dummy ELSE
              READU Rec FROM FILE.VARS(1), Item THEN
                 LOCATE UPDATE.ID IN Rec<6,1> SETTING Ptr ELSE
                    INS UPDATE.ID BEFORE Rec<6,Ptr>
                 END
                 WRITE Rec TO FILE.VARS(1), Item
              END ELSE
                 RELEASE FILE.VARS(1), Item
              END
           END
        REPEAT
        CRT SPACE(20):"Parent pointers updated.  (eMailSofin)"
     END
     RETURN

********** Exit time logic
ExitTime:
     ABORT.ENABLED = TRUE
     RETURN

********** Delete time logic
DeleteTime:
     DELETE.ENABLED = TRUE
     RETURN

********** Control time logic
ControlPoint:
     RETURN

********** After File time logic
AfterFileTime:
     RETURN

********** Procedure setup logic
SetUp:
     ABORT.ENABLED = TRUE
     MAT gotab = 0
********* LOAD BRANCH TABLE FOR AFTER INPUT AND BEFORE INPUT
********* PROCESSING TIMES--THE TABLE IS LOAD BY FIELD NUMBER
********* PLUS ONE--COLUMN ONE = AI, AND COLUMN TWO = BI
*
     gotab(1+0,ai) = 1                  ;* AI.0
     gotab(1+3,bi) = 2                  ;* BI.1
*
     RETURN
  END
