Typical DCL Command Procedure to run the program :

$!
$!  AM-ADV-ASSIGN.COM
$!
$!      Description:    Creates batch transactions for 
$!                      1) those students without advisors. 
$!                      2) those students who changed majors and/or
$!			   the major they are in was assigned another
$!			   advisor. 
$!
$!  Process students without advisors.
$!
$!  CREATE TEMPORARY COMMAND PROCEDURE THE RUN FOCUS JOB.
$!
$ WF := WRITE FILE
$ COM_FILE = "SYS$LOGIN:FOCTEMP.COM"
$!
$ OPEN/WRITE FILE 'COM_FILE' 
$ WF "$ SET DEFAULT SYS$LOGIN"
$ WF "$ DEFINE FOC$DIR1 SI$DATA"
$ WF "$ DEFINE FOC$DIR2 SI$MFD"
$ WF "$ FOCUS"
$ WF "EXEC SI$FOCUS:AM-NO-ADV-ASSIGN"
$ WF "FIN"
$ WF "$ EXIT"
$ CLOSE FILE
$ @'COM_FILE'
$!
$!  RENAME RESULTING HOLD FILE FOR USE IN NEXT PROGRAM.
$!
$ RENAME SYS$LOGIN:PLAY.FTM SYS$LOGIN:AM-ADV-IN.DAT; 
$!
$!  RUN PROGRAM TO DETERMINE ADVISOR ID.
$!
$ ASSIGN AM_ADV_ASSIGN_DATA.DAT 		ADVDATA
$ ASSIGN SYS$LOGIN:AM-ADV-IN.DAT   		ADVIN
$ ASSIGN SYS$LOGIN:AM-ADV-OUT.DAT  		ADVOUT
$!
$ RUN AM_ASSIGN_ADV_NEW
$!
$!  Process students with advisors.
$!
$!  CREATE TEMPORARY COMMAND PROCEDURE THE RUN FOCUS JOB.
$!
$ OPEN/WRITE FILE 'COM_FILE' 
$ WF "$ SET DEFAULT SYS$LOGIN"
$ WF "$ DEFINE FOC$DIR1 SI$DATA"
$ WF "$ DEFINE FOC$DIR2 SI$MFD"
$ WF "$ FOCUS"
$ WF "EXEC SI$FOCUS:AM-CHG-ADV-ASSIGN"
$ WF "FIN"
$ WF "$ EXIT"
$ CLOSE FILE
$ @'COM_FILE'
$!
$!  RENAME RESULTING HOLD FILE FOR USE IN NEXT PROGRAM.
$!
$ RENAME SYS$LOGIN:PLAY.FTM SYS$LOGIN:AM-ADV-IN.DAT; 
$!
$!  RUN PROGRAM TO DETERMINE ADVISOR ID.
$!
$ ASSIGN AM_ADV_ASSIGN_DATA.DAT 		ADVDATA
$ ASSIGN SYS$LOGIN:AM-ADV-IN.DAT   		ADVIN
$ ASSIGN SYS$LOGIN:AM-ADV-OUT.DAT  		ADVOUT
$!
$ RUN AM_ASSIGN_ADV_CHG
$!
$ COPY SYS$LOGIN:AM-ADV-OUT.DAT;-1,SYS$LOGIN:AM-ADV-OUT.DAT; -
       SYS$LOGIN:AM-ADV-OUT.TMP;
$!
$ COPY SI$FOCUS:ADVTRA.MFD SYS$LOGIN:*.MAS;
$!
$!  CREATE TEMPORARY COMMAND PROCEDURE THE RUN FOCUS JOB TO
$!  GENERATE TRANSACTIONS TO ASSIGN ADVISORS TO STUDENTS.
$!
$ OPEN/WRITE FILE 'COM_FILE' 
$ WF "$ SET DEFAULT SYS$LOGIN"
$ WF "$ DEFINE FOC$DIR1 SI$DATA"
$ WF "$ DEFINE FOC$DIR2 SI$MFD"
$ WF "$ FOCUS"
$ WF "EXEC SI$FOCUS:AM-TRANS-ADV-ASSIGN"
$ WF "FIN"
$ WF "$ EXIT"
$ CLOSE FILE
$ @'COM_FILE'
$!
$!  MOVE RESULTING BATCH TRANSACTIONS TO MAINTENANCE CYCLE FEED FILE.
$!
$ CONVERT/APPEND SYS$LOGIN:ADMADV.FTM SI$DATA:AIB2FL.DAT
$!
$!  CLEAN UP.
$!
$ DELETE/LOG SYS$LOGIN:*.FTM;*
$ DELETE/LOG SYS$LOGIN:*.MAS;*
$ DELETE/LOG SYS$LOGIN:*.WP;*
$ DELETE/LOG SYS$LOGIN:FOCTEMP.COM;*
$ DELETE/LOG SYS$LOGIN:AM-ADV*.DAT;*
$ DELETE/LOG SYS$LOGIN:AM-ADV*.TMP;*
$ EXIT


-*begin doc
-*
-*FEX:  AM-NO-ADV-ASSIGN
-*
-*input
-*      Term
-*
-*      This FOCUS program will select students who have not been assigned 
-*      an advisor.
-*
-*end doc
-*
JOIN CLEAR *
-SET &INTERM='(input term to select from)';
-*
-*  Select students accepted in admissions for the input term.
-*
TABLE FILE MMFILE
PRINT APP_TERM MAJOR_3 BY STU_ID
ON TABLE HOLD AS MMTEMP1
WHERE APP_TERM GE '&INTERM';
WHERE MM030_ORDER LE AP_SEG_CNTR;
WHERE MAJOR_3 NE '';
END
-*
-*  Get list of students without advisors assigned.
-*
TABLE FILE AAFILE
PRINT ADVISOR_ID_1 BY STU_ID
ON TABLE HOLD AS AATEMP1
WHERE ADVISOR_ID_1 EQ 000000000;
WHERE AA050_ORDER LE SR_CNTR;
END
-*
-*  Select students accepted in admissions without an assigned advisor.
-*
MATCH FILE MMTEMP1
PRINT APP_TERM MAJOR_3 BY STU_ID
RUN
FILE AATEMP1
PRINT ADVISOR_ID_1 BY STU_ID
AFTER MATCH HOLD OLD-AND-NEW
END
-RUN
-*
TABLE FILE HOLD 
PRINT APP_TERM MAJOR_3 BY STU_ID
ON TABLE HOLD AS MMTEMP2
END
-*
-*  Select students who are currently registered without an assigned 
-*  advisor.
-*
MATCH FILE RTFILE
PRINT MAJOR_1 TERM BY STU_ID
WHERE TERM GE '&INTERM';
WHERE CURR_ATTEMPTED_HRS GT 0;
RUN
FILE AATEMP1
PRINT ADVISOR_ID_1 BY STU_ID
AFTER MATCH HOLD OLD-AND-NEW
END
-RUN
-*
-*  Combine two lists.
-*
MATCH FILE HOLD
PRINT MAJOR_1 TERM BY STU_ID
RUN
FILE MMTEMP2
PRINT MAJOR_3 APP_TERM BY STU_ID
AFTER MATCH HOLD OLD-OR-NEW
END
-RUN
-* 
JOIN STU_ID IN HOLD TO STU_ID IN AAFILE AS J1
DEFINE FILE HOLD
-INCLUDE SI$FOCUS:NAMEPARS.SEG
WHC_MAJOR/A4=IF MAJOR_1 EQ '' THEN MAJOR_3 ELSE MAJOR_1;
CHK_MAJOR/A2=EDIT(WHC_MAJOR,'99');
CHK_STU_NAME/A3=IF (EDIT(LST_NAME,'9') EQ 'M') AND (CHK_MAJOR EQ 'TR')
                THEN EDIT(LST_NAME,'99')|' '
                ELSE EDIT(LST_NAME,'9')|'  ';
UP_STU_NAME/A3=UPCASE(3,CHK_STU_NAME,UP_STU_NAME);
END
TABLE FILE HOLD
PRINT UP_STU_NAME STU_ID BY WHC_MAJOR
ON TABLE SAVE AS PLAY
END
JOIN CLEAR *


IDENTIFICATION DIVISION.
PROGRAM-ID. AM_ASSIGN_ADV_NEW.
AUTHOR.     JAY THOMPSON.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. ALPHA-4000.
OBJECT-COMPUTER. ALPHA-4000.

*************************************************************************
*                                                                       *
*  This program is used to assign advisors to students who currently    *
*  do not have an advisor assigned to them.                             *
*                                                                       *
*************************************************************************

INPUT-OUTPUT SECTION.

FILE-CONTROL.

    SELECT ADV-FILE-IN          ASSIGN TO ADVIN.
    SELECT ADV-FILE-OUT         ASSIGN TO ADVOUT.
    SELECT ADV-DATA             ASSIGN TO ADVDATA.

DATA DIVISION.
FILE SECTION.

FD  ADV-FILE-IN
    LABEL RECORDS ARE STANDARD
    RECORD CONTAINS 16 CHARACTERS.

01  ADV-RECORD-IN PIC X(16).

FD  ADV-FILE-OUT
    LABEL RECORDS ARE STANDARD
    RECORD CONTAINS 22 CHARACTERS.

01  ADV-RECORD-OUT PIC X(22).

FD  ADV-DATA
    LABEL RECORDS ARE STANDARD
    RECORD CONTAINS 93 CHARACTERS.

01  ADV-DATA-IN PIC X(93).

WORKING-STORAGE SECTION.

01  WS-FD-ADV-RECORD.
    05  WS-FD-ADV-DATA OCCURS 1000 TIMES INDEXED BY ADV-INDEX.
        07  WS-FD-ADV-MAJOR             PIC X(04).
        07  FILLER                      PIC X(01).
        07  WS-FD-ADV-ID                PIC X(09).
        07  FILLER                      PIC X(01).
        07  WS-FD-ADV-ASSIGN            PIC X(03) OCCURS 26 TIMES
                                                 INDEXED BY ALP-INDEX.

01  WS-FD-ADV-IN.
    05  WS-FD-ADV-IN-MAJOR              PIC X(04).
    05  WS-FD-ADV-IN-NAME               PIC X(03).
    05  WS-FD-ADV-IN-SSN                PIC X(09).

01  WS-FD-ADV-OUT.
    05  WS-FD-ADV-OUT-MAJOR             PIC X(04).
    05  WS-FD-ADV-OUT-SSN               PIC X(09).
    05  WS-FD-ADV-OUT-ASSIGN            PIC X(09).

01  WS-EOF                              PIC X.
01  WS-GOT-ADV                          PIC X.
01  WS-ARRAY-CNT                        PIC 9(04).
01  WS-FD-SEA-ADV-MAJOR.
    05  WS-FD-SEA-ADV-TYPE              PIC X(02).
    05  WS-FD-SEA-ADV-DESC              PIC X(02).

PROCEDURE DIVISION.
000-START-PROCESSING.

    OPEN INPUT ADV-DATA.
    MOVE "N" TO WS-EOF.
    MOVE ZERO TO WS-ARRAY-CNT.
    SET ADV-INDEX TO 1.
    MOVE SPACES TO WS-FD-ADV-RECORD.
    PERFORM 100-LOAD-ADV-ARRAY UNTIL WS-EOF IS EQUAL TO "Y".
    SET ADV-INDEX DOWN BY 1.
    SUBTRACT 1 FROM WS-ARRAY-CNT.
    CLOSE ADV-DATA.

    OPEN INPUT ADV-FILE-IN
         OUTPUT ADV-FILE-OUT.
    MOVE "N" TO WS-EOF.
    PERFORM 200-CREATE-ADV-ASSIGN UNTIL WS-EOF IS EQUAL TO "Y".
    CLOSE ADV-FILE-IN
          ADV-FILE-OUT. 

    STOP RUN.

**
**  Load array that has advisor assignment data.
**
100-LOAD-ADV-ARRAY.

    MOVE SPACES TO WS-FD-ADV-DATA(ADV-INDEX)
                   ADV-DATA-IN.
    READ ADV-DATA INTO WS-FD-ADV-DATA(ADV-INDEX)
        AT END
            MOVE "Y" TO WS-EOF.
    SET ADV-INDEX UP BY 1.
    ADD 1 TO WS-ARRAY-CNT.

**
**  Process each input record to determine advisor assignment.
**
200-CREATE-ADV-ASSIGN.

    READ ADV-FILE-IN INTO WS-FD-ADV-IN
        AT END
            MOVE "Y" TO WS-EOF.

    MOVE WS-FD-ADV-IN-MAJOR TO WS-FD-SEA-ADV-MAJOR.
    IF WS-FD-SEA-ADV-TYPE IS EQUAL TO "TR"
        MOVE "**" TO WS-FD-SEA-ADV-DESC.
    SET ADV-INDEX TO 1.
    SET ALP-INDEX TO 1.
    MOVE "N" TO WS-GOT-ADV.
    PERFORM 300-GET-ADV-ASSIGN UNTIL WS-GOT-ADV IS EQUAL TO "Y" OR
                                     ADV-INDEX IS EQUAL TO WS-ARRAY-CNT.

**
**  Determine advisor assignment.
**
300-GET-ADV-ASSIGN.

    SET ALP-INDEX TO 1.

    IF WS-FD-ADV-MAJOR(ADV-INDEX) IS EQUAL TO WS-FD-SEA-ADV-MAJOR
        IF WS-FD-ADV-ASSIGN(ADV-INDEX,ALP-INDEX) IS EQUAL TO "ALL"
            MOVE WS-FD-ADV-IN-MAJOR TO WS-FD-ADV-OUT-MAJOR 
            MOVE WS-FD-ADV-IN-SSN TO WS-FD-ADV-OUT-SSN 
            MOVE WS-FD-ADV-ID(ADV-INDEX) TO WS-FD-ADV-OUT-ASSIGN 
            WRITE ADV-RECORD-OUT FROM WS-FD-ADV-OUT
            MOVE "Y" TO WS-GOT-ADV
        ELSE
            PERFORM 400-LOOK-AT-ALPHA UNTIL (WS-GOT-ADV IS EQUAL TO "Y") OR
                                            (ALP-INDEX IS EQUAL TO 26) OR
                                      (WS-FD-ADV-ASSIGN(ADV-INDEX,ALP-INDEX)
                                            IS EQUAL TO SPACES).

    SET ADV-INDEX UP BY 1.

**
**  Look through letters assigned to advisor id to find match.
**
400-LOOK-AT-ALPHA.

    IF (WS-FD-ADV-ASSIGN(ADV-INDEX,ALP-INDEX) IS EQUAL TO 
        WS-FD-ADV-IN-NAME) OR
       ((WS-FD-ADV-ASSIGN(ADV-INDEX,ALP-INDEX) IS EQUAL TO "MC") AND
        (WS-FD-ADV-IN-NAME IS EQUAL TO "MD " OR "ME " OR "MF " OR "MG " OR
                                       "MH " OR "MI " OR "MJ " OR "MK " OR
                                       "ML " OR "MM " OR "MN " OR "MO " OR 
                                       "MP " OR "MQ " OR "MR " OR "MS " OR 
                                       "MT " OR "MU " OR "MV " OR "MW"  OR 
                                       "MX " OR "MY " OR "MZ ")) 
       MOVE WS-FD-ADV-IN-MAJOR TO WS-FD-ADV-OUT-MAJOR 
       MOVE WS-FD-ADV-IN-SSN TO WS-FD-ADV-OUT-SSN 
       MOVE WS-FD-ADV-ID(ADV-INDEX) TO WS-FD-ADV-OUT-ASSIGN 
       WRITE ADV-RECORD-OUT FROM WS-FD-ADV-OUT
       MOVE "Y" TO WS-GOT-ADV
    ELSE
       SET ALP-INDEX UP BY 1.


-*begin doc
-*
-*FEX:  AM-CHG-ADV-ASSIGN
-*
-*input
-*      Term
-*
-*      This FOCUS program will select students who have been assigned 
-*      an advisor.
-*
-*end doc
-*
JOIN CLEAR *
-SET &INTERM='(input term to select from)';
-*
-*  Select students accepted in admissions for the input term.
-*
TABLE FILE MMFILE
PRINT APP_TERM MAJOR_3 BY STU_ID
ON TABLE HOLD AS MMTEMP1
WHERE APP_TERM GE '&INTERM';
WHERE MM030_ORDER LE AP_SEG_CNTR;
WHERE MAJOR_3 NE '';
END
-*
-*  Get list of students with advisors assigned.
-*
TABLE FILE AAFILE
PRINT ADVISOR_ID_1 BY STU_ID
ON TABLE HOLD AS AATEMP1
WHERE ADVISOR_ID_1 NE 000000000;
WHERE AA050_ORDER LE SR_CNTR;
END
-*
-*  Select students accepted in admissions with an assigned advisor.
-*
MATCH FILE MMTEMP1
PRINT APP_TERM MAJOR_3 BY STU_ID
RUN
FILE AATEMP1
PRINT ADVISOR_ID_1 BY STU_ID
AFTER MATCH HOLD OLD-AND-NEW
END
-RUN
-*
TABLE FILE HOLD 
PRINT APP_TERM MAJOR_3 BY STU_ID
ON TABLE HOLD AS MMTEMP2
END
-*
-*  Select students who are currently registered with an assigned 
-*  advisor.
-*
MATCH FILE RTFILE
PRINT MAJOR_1 TERM BY STU_ID
WHERE TERM GE '&INTERM';
WHERE CURR_ATTEMPTED_HRS GT 0;
RUN
FILE AATEMP1
PRINT ADVISOR_ID_1 BY STU_ID
AFTER MATCH HOLD OLD-AND-NEW
END
-RUN
-*
-*  Combine two lists.
-*
MATCH FILE HOLD
PRINT MAJOR_1 TERM BY STU_ID
RUN
FILE MMTEMP2
PRINT MAJOR_3 APP_TERM BY STU_ID
AFTER MATCH HOLD OLD-OR-NEW
END
-RUN
-* 
MATCH FILE HOLD
PRINT MAJOR_1 MAJOR_3 TERM BY STU_ID
RUN
FILE AATEMP1
PRINT ADVISOR_ID_1 BY STU_ID
AFTER MATCH HOLD OLD
END
-RUN
-*
JOIN STU_ID IN HOLD TO STU_ID IN AAFILE AS J1
DEFINE FILE HOLD
-INCLUDE SI$FOCUS:NAMEPARS.SEG
WHC_MAJOR/A4=IF MAJOR_1 EQ '' THEN MAJOR_3 ELSE MAJOR_1;
CHK_MAJOR/A2=EDIT(WHC_MAJOR,'99');
CHK_STU_NAME/A3=IF (EDIT(LST_NAME,'9') EQ 'M') AND (CHK_MAJOR EQ 'TR')
                THEN EDIT(LST_NAME,'99')|' '
                ELSE EDIT(LST_NAME,'9')|'  ';
UP_STU_NAME/A3=UPCASE(3,CHK_STU_NAME,UP_STU_NAME);
THS_REC/A1=IF STU_ID NE LAST STU_ID THEN 'Y' ELSE 'N';
END
TABLE FILE HOLD
PRINT UP_STU_NAME STU_ID ADVISOR_ID_1 BY WHC_MAJOR
ON TABLE SAVE AS PLAY
WHERE THS_REC EQ 'Y';
END
JOIN CLEAR *


IDENTIFICATION DIVISION.
PROGRAM-ID. AM_ASSIGN_ADV_CHG.
AUTHOR.     JAY THOMPSON.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. ALPHA-4000.
OBJECT-COMPUTER. ALPHA-4000.

*************************************************************************
*                                                                       *
*  This program is used to assign advisors to students who either       *
*  changed majors and/or the major they were in was assigned another    *
*  advisor.                                                             *
*                                                                       *
*************************************************************************

INPUT-OUTPUT SECTION.

FILE-CONTROL.

    SELECT ADV-FILE-IN          ASSIGN TO ADVIN.
    SELECT ADV-FILE-OUT         ASSIGN TO ADVOUT.
    SELECT ADV-DATA             ASSIGN TO ADVDATA.

DATA DIVISION.
FILE SECTION.

FD  ADV-FILE-IN
    LABEL RECORDS ARE STANDARD
    RECORD CONTAINS 25 CHARACTERS.

01  ADV-RECORD-IN PIC X(25).

FD  ADV-FILE-OUT
    LABEL RECORDS ARE STANDARD
    RECORD CONTAINS 22 CHARACTERS.

01  ADV-RECORD-OUT PIC X(22).

FD  ADV-DATA
    LABEL RECORDS ARE STANDARD
    RECORD CONTAINS 93 CHARACTERS.

01  ADV-DATA-IN PIC X(93).

WORKING-STORAGE SECTION.

01  WS-FD-ADV-RECORD.
    05  WS-FD-ADV-DATA OCCURS 1000 TIMES INDEXED BY ADV-INDEX.
        07  WS-FD-ADV-MAJOR             PIC X(04).
        07  FILLER                      PIC X(01).
        07  WS-FD-ADV-ID                PIC X(09).
        07  FILLER                      PIC X(01).
        07  WS-FD-ADV-ASSIGN            PIC X(03) OCCURS 26 TIMES
                                                 INDEXED BY ALP-INDEX.

01  WS-FD-ADV-IN.
    05  WS-FD-ADV-IN-MAJOR              PIC X(04).
    05  WS-FD-ADV-IN-NAME               PIC X(03).
    05  WS-FD-ADV-IN-SSN                PIC X(09).
    05  WS-FD-ADV-IN-ADV                PIC X(09).

01  WS-FD-ADV-OUT.
    05  WS-FD-ADV-OUT-MAJOR             PIC X(04).
    05  WS-FD-ADV-OUT-SSN               PIC X(09).
    05  WS-FD-ADV-OUT-ASSIGN            PIC X(09).

01  WS-EOF                              PIC X.
01  WS-GOT-ADV                          PIC X.
01  WS-ADV-CHK                          PIC X.
01  WS-ARRAY-CNT                        PIC 9(04).
01  WS-FD-SEA-ADV-MAJOR.
    05  WS-FD-SEA-ADV-TYPE              PIC X(02).
    05  WS-FD-SEA-ADV-DESC              PIC X(02).

PROCEDURE DIVISION.
000-START-PROCESSING.

    OPEN INPUT ADV-DATA.
    MOVE "N" TO WS-EOF.
    MOVE ZERO TO WS-ARRAY-CNT.
    SET ADV-INDEX TO 1.
    MOVE SPACES TO WS-FD-ADV-RECORD.
    PERFORM 100-LOAD-ADV-ARRAY UNTIL WS-EOF IS EQUAL TO "Y".
    SET ADV-INDEX DOWN BY 1.
    SUBTRACT 1 FROM WS-ARRAY-CNT.
    CLOSE ADV-DATA.

    OPEN INPUT ADV-FILE-IN
         OUTPUT ADV-FILE-OUT.
    MOVE "N" TO WS-EOF.
    PERFORM 200-CREATE-ADV-ASSIGN UNTIL WS-EOF IS EQUAL TO "Y".
    CLOSE ADV-FILE-IN
          ADV-FILE-OUT. 

    STOP RUN.

**
**  Load array that has advisor assignment data.
**
100-LOAD-ADV-ARRAY.

    MOVE SPACES TO WS-FD-ADV-DATA(ADV-INDEX)
                   ADV-DATA-IN.
    READ ADV-DATA INTO WS-FD-ADV-DATA(ADV-INDEX)
        AT END
            MOVE "Y" TO WS-EOF.
    SET ADV-INDEX UP BY 1.
    ADD 1 TO WS-ARRAY-CNT.

**
**  Process each input record to determine advisor assignment.
**
200-CREATE-ADV-ASSIGN.

    READ ADV-FILE-IN INTO WS-FD-ADV-IN
        AT END
            MOVE "Y" TO WS-EOF.

    MOVE WS-FD-ADV-IN-MAJOR TO WS-FD-SEA-ADV-MAJOR.
    IF WS-FD-SEA-ADV-TYPE IS EQUAL TO "TR"
        MOVE "**" TO WS-FD-SEA-ADV-DESC.
    SET ADV-INDEX TO 1.
    SET ALP-INDEX TO 1.
    MOVE "N" TO WS-GOT-ADV.
    PERFORM 300-GET-ADV-ASSIGN UNTIL WS-GOT-ADV IS EQUAL TO "Y" OR
                                     ADV-INDEX IS EQUAL TO WS-ARRAY-CNT.

**
**  Determine advisor assignment; if different, write out results.
**
300-GET-ADV-ASSIGN.

    SET ALP-INDEX TO 1.

    IF WS-FD-ADV-MAJOR(ADV-INDEX) IS EQUAL TO WS-FD-SEA-ADV-MAJOR
        IF WS-FD-ADV-ASSIGN(ADV-INDEX,ALP-INDEX) IS EQUAL TO "ALL"
            MOVE WS-FD-ADV-IN-MAJOR TO WS-FD-ADV-OUT-MAJOR 
            MOVE WS-FD-ADV-IN-SSN TO WS-FD-ADV-OUT-SSN 
            MOVE WS-FD-ADV-ID(ADV-INDEX) TO WS-FD-ADV-OUT-ASSIGN 
            MOVE "Y" TO WS-GOT-ADV
            IF WS-FD-ADV-ID(ADV-INDEX) IS NOT EQUAL TO WS-FD-ADV-IN-ADV 
                MOVE "N" TO WS-ADV-CHK
                PERFORM 500-CHECK-ADV-ID UNTIL WS-ADV-CHK IS EQUAL TO "Y" OR
                                               ADV-INDEX IS EQUAL TO 
                                               WS-ARRAY-CNT
                IF WS-ADV-CHK IS EQUAL TO "N"
                    WRITE ADV-RECORD-OUT FROM WS-FD-ADV-OUT
        ELSE
            PERFORM 400-LOOK-AT-ALPHA UNTIL (WS-GOT-ADV IS EQUAL TO "Y") OR
                                            (ALP-INDEX IS EQUAL TO 26) OR
                                      (WS-FD-ADV-ASSIGN(ADV-INDEX,ALP-INDEX)
                                            IS EQUAL TO SPACES).

    SET ADV-INDEX UP BY 1.

**
**  Look through letters assigned to advisor id to find match; if 
**  different, write out results.
**
400-LOOK-AT-ALPHA.

    IF (WS-FD-ADV-ASSIGN(ADV-INDEX,ALP-INDEX) IS EQUAL TO 
        WS-FD-ADV-IN-NAME) OR
       ((WS-FD-ADV-ASSIGN(ADV-INDEX,ALP-INDEX) IS EQUAL TO "MC") AND
        (WS-FD-ADV-IN-NAME IS EQUAL TO "MD " OR "ME " OR "MF " OR "MG " OR
                                       "MH " OR "MI " OR "MJ " OR "MK " OR
                                       "ML " OR "MM " OR "MN " OR "MO " OR 
                                       "MP " OR "MQ " OR "MR " OR "MS " OR 
                                       "MT " OR "MU " OR "MV " OR "MW"  OR 
                                       "MX " OR "MY " OR "MZ ")) 
        MOVE WS-FD-ADV-IN-MAJOR TO WS-FD-ADV-OUT-MAJOR 
        MOVE WS-FD-ADV-IN-SSN TO WS-FD-ADV-OUT-SSN 
        MOVE WS-FD-ADV-ID(ADV-INDEX) TO WS-FD-ADV-OUT-ASSIGN 
        MOVE "Y" TO WS-GOT-ADV
        IF WS-FD-ADV-ID(ADV-INDEX) IS NOT EQUAL TO WS-FD-ADV-IN-ADV 
            MOVE "N" TO WS-ADV-CHK
            PERFORM 500-CHECK-ADV-ID UNTIL WS-ADV-CHK IS EQUAL TO "Y" OR
                                           ADV-INDEX IS EQUAL TO 
                                           WS-ARRAY-CNT
            IF WS-ADV-CHK IS EQUAL TO "N"
                WRITE ADV-RECORD-OUT FROM WS-FD-ADV-OUT
    ELSE
        SET ALP-INDEX UP BY 1.

**
**  Check to see if "old" advisor id is in the same major as the selected
**  advisor id.
**
500-CHECK-ADV-ID.

    SET ALP-INDEX TO 1.

    IF ((WS-FD-ADV-MAJOR(ADV-INDEX) IS EQUAL TO WS-FD-SEA-ADV-MAJOR) AND
        (WS-FD-ADV-ID(ADV-INDEX) IS EQUAL TO WS-FD-ADV-IN-ADV))
        MOVE "Y" TO WS-ADV-CHK.
        
    SET ADV-INDEX UP BY 1.


-*begin doc
-*
-*FEX:  AM-TRANS-ADV-ASSIGN
-*
-*input
-*
-*      This FOCUS program will create transactions to assign advisors to  
-*      students.
-*
-*end doc
-*
JOIN CLEAR *
FILEDEF ADVTRA DISK SYS$LOGIN:AM-ADV-OUT.TMP
FILEDEF ADMADV DISK ADMADV.FTM APPEND LREC 80 RECFM F
-*
-*  Create The Batch Header
-*
DEFINE FILE AAFILE
BATCH_HEADER1/A40 = '$$$MSC507        ADMS ADV UPD   YAM     ';
BATCH_HEADER2/A40 = '                                        ';
END
TABLE FILE AAFILE
PRINT BATCH_HEADER1 AS ''
      BATCH_HEADER2 AS ''
BY STU_ID NOPRINT   
ON TABLE SAVE AS ADMADV   
IF RECORDLIMIT EQ 1  
END
-*
DEFINE FILE ADVTRA
BTH_TRANS/A80 = ('10B'|SSN_ADV|'              '|ID_ADV);
END
TABLE FILE ADVTRA
PRINT BTH_TRANS AS '' 
ON TABLE SAVE AS ADMADV   
END
JOIN CLEAR *


-*begin doc
-*
-*FEX:  AM-ADVISOR-ASSIGN-LIST
-*
-*      This produces a list of advisor assignments (majors they
-*      are responsible for and student groupings).
-*
-*end doc
-**********************************************************************
-*
JOIN CLEAR *
SET COMPUTE=OLD
SET LINES=999999
-VMS COPY SI$FOCUS:ADVLIS.MFD *.MAS;
-*
FILEDEF ADVLIS DISK AM_ADV_ASSIGN_DATA.DAT
FILEDEF PRDECODE DISK SI$FOCUS:PR_TABLE.DAT
TABLE FILE ADVLIS
PRINT MAJOR_ADV ASSIGN_ADV BY ID_ADV
ON TABLE HOLD AS ADVTMP1
END
-*
JOIN ID_ADV IN ADVTMP1 TO KEY IN AYFILE AS J1
DEFINE FILE ADVTMP1
CHK_MJR/A2=EDIT(MAJOR_ADV,'$$99');
MJRDEC/A60 = DECODE MAJOR_ADV(PRDECODE);
BLK_LINE/A5= ' ';
END
TABLE FILE ADVTMP1
HEADING CENTER
"Advisor Assignment Listing"
-*
PRINT MAJOR_ADV AS '' MJRDEC AS '' 
      OVER FAC_NAME AS '' 
      OVER ASSIGN_ADV AS '' 
      OVER BLK_LINE AS '' 
BY CHK_MJR NOPRINT
ON TABLE SAVE AS REPORT FORMAT WP
END
JOIN CLEAR *


Master File Description (MFD) for ADVTRA :

FILE=ADVTRA,SUFFIX=FIX
SEGNAME=ROOT
FIELD=MAJOR_ADV, ,A04,A04,$   
FIELD=SSN_ADV, ,A09,A09,$   
FIELD=ID_ADV, ,A09,A09,$   


Master File Description (MFD) for ADVLIS :

FILE=ADVLIS,SUFFIX=FIX
SEGNAME=ROOT
FIELD=MAJOR_ADV, ,A04,A04,$   
FIELD=GEN_FIL001, ,A01,A01,$
FIELD=ID_ADV, ,A09,A09,$   
FIELD=GEN_FIL002, ,A01,A01,$
FIELD=ASSIGN_ADV, ,A76,A76,$   


File layout for AM_ADV_ASSIGN_DATA.DAT file :

Positions 1-4 : Major code (can use wildcard of **)
Positions 6-14 : Id number of advisor
Positions 16-93 : Characters (up to two) of the student's last name; use
                  "ALL" if one advisor covers all students within a major.
                  
Example : 

TR** 999999990 A  G  I  O  
TR** 999999991 B  K  N
TR** 999999992 C  F
TR** 999999993 E  H  MA MB
TR** 999999994 J  L
TR** 999999995 MC
TR** 999999996 P  Q  R  
TR** 999999997 D  S
TR** 999999998 T  U  V  W  X  Y  Z  
ABCD 999999999 ALL
EFGH 000000001 A  B  C  D  E  F  G  H  I  J  K  L  
EFGH 000000002 M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z    

 

 

This page hosted by Get your own Free Homepage

Hosted by www.Geocities.ws

1