Typical DCL Command Procedure to set up the program :
$!
$! COM:ENR_MIS_RQ_LET.COM
$!
$! THIS COMMAND PROCEDURE WILL CREATE THE ADMISSIONS MISSING REQUIREMENT
$! LETTERS.
$!
$ SET NOVERIFY
$ SET NOCONTROL_Y
$ ASK := READ/PROMPT=
$ SAY := WRITE SYS$OUTPUT
$!
$ MONTH_01 = "January"
$ MONTH_02 = "February"
$ MONTH_03 = "March"
$ MONTH_04 = "April"
$ MONTH_05 = "May"
$ MONTH_06 = "June"
$ MONTH_07 = "July"
$ MONTH_08 = "August"
$ MONTH_09 = "September"
$ MONTH_10 = "October"
$ MONTH_11 = "November"
$ MONTH_12 = "December"
$!
$ASK_LOOP:
$!
$ CL
$!
$! Prompt for term.
$!
$ENTER_PARM_TERM:
$ READ SYS$COMMAND/TIME=60/END=EXIT_LOOP/ERROR=EXIT_LOOP/PROMPT= -
"Enter the five digit term to run the extract for (CCYYX) >>> " TERMIN
$ LEN_TERMIN = F$LENGTH(TERMIN)
$ IF LEN_TERMIN .NE. 5 THEN GOTO ENTER_PARM_TERM
$ TYP_TERMIN = F$TYPE(TERMIN)
$ IF TYP_TERMIN .NES. "INTEGER" THEN GOTO ENTER_PARM_TERM
$!
$! Prompt for dates to be used on letter.
$!
$! Create today's date to be used as default.
$!
$ DAY = F$CVTIME("TODAY",,"DAY")
$ MON = F$CVTIME("TODAY",,"MONTH")
$ YEAR = F$CVTIME("TODAY",,"YEAR")
$!
$ IF F$EXTRACT(0,1,DAY) .EQS. "0"
$ THEN
$ DAY = F$EXTRACT(1,1,DAY)
$ ENDIF
$!
$ DATE = MONTH_'MON' + " " + DAY + ", " + F$EXTRACT(0,4,YEAR)
$!
$ SAY ""
$ SAY "Date to appear on letter [''DATE']"
$ READ SYS$COMMAND/TIME=60/END=EXIT_LOOP/ERROR=EXIT_LOOP/PROMPT= -
"Press <ENTER> to select today's date >>> " DATEIN1
$ IF DATEIN1 .EQS. ""
$ THEN
$ DATEIN1 = DATE
$ ENDIF
$!
$! Let user check parameters before running program.
$!
$ CL
$ SAY " "
$ SAY "Term ''TERMIN' "
$ SAY "Letter date ''DATEIN1' "
$ SAY " "
$ ASK "Is the above information correct Y/N [Y]? " SYS$COMMAND YN
$ IF YN .EQS. "" THEN YN = "Y"
$ IF .NOT. YN THEN GOTO ASK_LOOP
$!
$! Create and execute the FOCUS command procedure to generate the data
$! source.
$!
$ CL
$ SAY ""
$ SAY "Please wait while program executes..."
$ SAY ""
$!
$ COPY SI$FOCUS:WORDFMT.MFD SYS$LOGIN:*.MAS;
$ COM_FILE = "SYS$LOGIN:FOCTEMP.COM"
$!
$ OPEN/WRITE output_file 'COM_FILE'
$!
$ WRITE output_file "$ DEFINE FOC$DIR1 SI$DATA"
$ WRITE output_file "$ DEFINE FOC$DIR2 SI$FEX,SI$MFD"
$ WRITE output_file "$ SET DEFAULT SYS$LOGIN"
$ WRITE output_file "$ FOCUS"
$ WRITE output_file "EXEC SI$FOCUS:ENR_MIS_RQ_LET"
$ WRITE output_file TERMIN
$ WRITE output_file "FIN"
$ WRITE output_file "$ EXIT"
$!
$ CLOSE output_file
$ SUBMIT/NOPRINT/NOTIFY 'COM_FILE'
$ SYNCHRONIZE FOCTEMP
$!
$! Format the resulting output to remove any "completed"
$! missing requirements
$!
$ OPEN/READ input_file SYS$LOGIN:MISREQIN.FTM
$ OPEN/WRITE output_file SYS$LOGIN:INCFILELTROUT.DOC
$!
$! Extract "header" records.
$!
$ READ/END_OF_FILE=EXIT_LOOP input_file in_record
$ WRITE output_file in_record
$ READ/END_OF_FILE=EXIT_LOOP input_file in_record
$ WRITE output_file in_record
$!
$READ_LOOP:
$!
$! Read in "static" fields.
$!
$ MISREQ = "FALSE"
$!
$ READ/END_OF_FILE=EXIT_LOOP input_file in_record
$ WRITE output_file in_record
$ READ/END_OF_FILE=EXIT_LOOP input_file in_record
$ WRITE output_file in_record
$ READ/END_OF_FILE=EXIT_LOOP input_file in_record
$ WRITE output_file in_record
$ READ/END_OF_FILE=EXIT_LOOP input_file in_record
$ WRITE output_file in_record
$ READ/END_OF_FILE=EXIT_LOOP input_file in_record
$ WRITE output_file in_record
$!
$ READ/END_OF_FILE=EXIT_LOOP input_file hold_record
$!
$! Read in "dynamic" fields (missing requirements).
$!
$READ_MIS_LOOP:
$!
$ READ/END_OF_FILE=EXIT_LOOP input_file in_record
$ IF (F$EXTRACT((F$LENGTH(in_record)-1),1,in_record) .EQS. "
")
$ THEN
$ IF (F$EXTRACT(0,5,in_record) .EQS. "I ") .OR. -
(F$EXTRACT(0,5,in_record) .EQS. " ")
$ THEN
$ IF .NOT. MISREQ THEN WRITE output_file hold_record
$ WRITE output_file F$EXTRACT(0,(F$LENGTH(in_record)-1),in_record)
$ MISREQ = "TRUE"
$ ENDIF
$ ELSE
$ GOTO EXIT_MIS_LOOP
$ ENDIF
$!
$ GOTO READ_MIS_LOOP
$!
$EXIT_MIS_LOOP:
$!
$! Read in remaining records and format according to missing
$! requirement flag.
$!
$ IF MISREQ
$ THEN
$ temp_record = "|" + DATEIN1 + "|END*"
$ ELSE
$ temp_record = hold_record + "|" + DATEIN1 + "|END*"
$ ENDIF
$ WRITE output_file temp_record
$!
$ GOTO READ_LOOP
$!
$EXIT_LOOP:
$!
$ CLOSE input_file
$ CLOSE output_file
$ SAY " "
$ SAY "All done..."
$ SAY " "
$!
$! 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:MISREQHD.DOC;*
$ EXIT
FOCUS program :
-*begin doc
-*
-*FEX: ENR_MIS_RQ_LET
-*
-* This produces a list of students who need to be sent
-* an Admissions missing requirement letter. The output
-* is generated in a format that can be used to create a
-* MS Word data source.
-*
-*INPUT
-* TERM : Enrollment term to select from
-*
-*end doc
-**********************************************************************
SET COMPUTE = OLD
SET PAGE = NOPAGE
SET LINES = 999999
JOIN CLEAR *
-PROMPT &TERM/A5.ENTER THE FIVE DIGIT TERM FOR APPLICANT REPORT (CCYYX) :
-*
-* Select students from Admissions who meet criteria.
-*
TABLE FILE MMFILE
PRINT COLLEGE_1 MAJOR_1 APP_TERM MM030_ORDER
BY STU_ID
WHERE APP_TERM EQ '&TERM';
WHERE MM030_ORDER LE AP_SEG_CNTR;
WHERE (APP_STAT_1 NE 'RF') AND (APP_STAT_1 NE 'RJ') AND (APP_STAT_1 NE 'WD');
ON TABLE HOLD AS MMTEMP1
END
-*
-* Determine test requirements.
-*
JOIN STU_ID IN MMTEMP1 TO KEY IN MTFILE AS J9
TABLE FILE MMTEMP1
PRINT RQMNT_TYPE RQMNT_STAT
BY STU_ID
WHERE (RQMNT_TYPE EQ 'SAT');
WHERE (MM030_ORDER EQ 1 AND APP_FLAG_PREF_1 NE '') OR
(MM030_ORDER EQ 2 AND APP_FLAG_PREF_2 NE '') OR
(MM030_ORDER EQ 3 AND APP_FLAG_PREF_3 NE '') OR
(MM030_ORDER EQ 4 AND APP_FLAG_PREF_4 NE '') OR
(MM030_ORDER EQ 5 AND APP_FLAG_PREF_5 NE '') OR
(MM030_ORDER EQ 6 AND APP_FLAG_PREF_6 NE '') OR
(MM030_ORDER EQ 7 AND APP_FLAG_PREF_7 NE '') OR
(MM030_ORDER EQ 8 AND APP_FLAG_PREF_8 NE '') OR
(MM030_ORDER EQ 9 AND APP_FLAG_PREF_9 NE '');
ON TABLE HOLD AS MMTEMP9
END
-*
MATCH FILE MMTEMP9
PRINT RQMNT_TYPE AS SAT_TYPE RQMNT_STAT AS SAT_STAT
BY STU_ID
RUN
FILE MMTEMP1
PRINT RQMNT_TYPE AS ACT_TYPE RQMNT_STAT AS ACT_STAT
BY STU_ID
WHERE (RQMNT_TYPE EQ 'ACT');
WHERE (MM030_ORDER EQ 1 AND APP_FLAG_PREF_1 NE '') OR
(MM030_ORDER EQ 2 AND APP_FLAG_PREF_2 NE '') OR
(MM030_ORDER EQ 3 AND APP_FLAG_PREF_3 NE '') OR
(MM030_ORDER EQ 4 AND APP_FLAG_PREF_4 NE '') OR
(MM030_ORDER EQ 5 AND APP_FLAG_PREF_5 NE '') OR
(MM030_ORDER EQ 6 AND APP_FLAG_PREF_6 NE '') OR
(MM030_ORDER EQ 7 AND APP_FLAG_PREF_7 NE '') OR
(MM030_ORDER EQ 8 AND APP_FLAG_PREF_8 NE '') OR
(MM030_ORDER EQ 9 AND APP_FLAG_PREF_9 NE '');
AFTER MATCH HOLD OLD-OR-NEW
END
-RUN
-*
MATCH FILE HOLD
PRINT SAT_TYPE SAT_STAT ACT_TYPE ACT_STAT
BY STU_ID
RUN
FILE MMTEMP1
PRINT RQMNT_TYPE AS CPT_TYPE RQMNT_STAT AS CPT_STAT
BY STU_ID
WHERE (RQMNT_TYPE EQ 'CPT');
WHERE (MM030_ORDER EQ 1 AND APP_FLAG_PREF_1 NE '') OR
(MM030_ORDER EQ 2 AND APP_FLAG_PREF_2 NE '') OR
(MM030_ORDER EQ 3 AND APP_FLAG_PREF_3 NE '') OR
(MM030_ORDER EQ 4 AND APP_FLAG_PREF_4 NE '') OR
(MM030_ORDER EQ 5 AND APP_FLAG_PREF_5 NE '') OR
(MM030_ORDER EQ 6 AND APP_FLAG_PREF_6 NE '') OR
(MM030_ORDER EQ 7 AND APP_FLAG_PREF_7 NE '') OR
(MM030_ORDER EQ 8 AND APP_FLAG_PREF_8 NE '') OR
(MM030_ORDER EQ 9 AND APP_FLAG_PREF_9 NE '');
AFTER MATCH HOLD OLD-OR-NEW
END
-RUN
-*
DEFINE FILE HOLD
TEST_REQ/A5=IF (ACT_TYPE EQ 'ACT') AND (ACT_STAT NE 'C') AND
(ACT_STAT NE 'W') AND (ACT_STAT NE 'D') AND
(CPT_TYPE EQ '') AND (SAT_TYPE EQ '') THEN 'ACT'
ELSE IF (CPT_TYPE EQ 'CPT') AND (CPT_STAT NE 'C') AND
(CPT_STAT NE 'W') AND (CPT_STAT NE 'D') AND
(ACT_TYPE EQ '') AND (SAT_TYPE EQ '') THEN 'CPT'
ELSE IF (SAT_TYPE EQ 'SAT') AND (SAT_STAT NE 'C') AND
(SAT_STAT NE 'W') AND (SAT_STAT NE 'D') AND
(ACT_TYPE EQ '') AND (CPT_TYPE EQ '') THEN 'SAT'
ELSE IF (ACT_TYPE EQ 'ACT') AND (ACT_STAT NE 'C') AND
(ACT_STAT NE 'W') AND (ACT_STAT NE 'D') AND
(CPT_TYPE EQ 'CPT') AND (CPT_STAT NE 'C') AND
(CPT_STAT NE 'W') AND (CPT_STAT NE 'D') AND
(SAT_TYPE EQ '') THEN 'AC'
ELSE IF (ACT_TYPE EQ 'ACT') AND (ACT_STAT NE 'C') AND
(ACT_STAT NE 'W') AND (ACT_STAT NE 'D') AND
(SAT_TYPE EQ 'SAT') AND (SAT_STAT NE 'C') AND
(SAT_STAT NE 'W') AND (SAT_STAT NE 'D') AND
(CPT_TYPE EQ '') THEN 'SA'
ELSE IF (CPT_TYPE EQ 'CPT') AND (CPT_STAT NE 'C') AND
(CPT_STAT NE 'W') AND (CPT_STAT NE 'D') AND
(SAT_TYPE EQ 'SAT') AND (SAT_STAT NE 'C') AND
(SAT_STAT NE 'W') AND (SAT_STAT NE 'D') AND
(ACT_TYPE EQ '') THEN 'SC' ELSE 'NONE';
TEST_STAT/A1=' ';
END
TABLE FILE HOLD
PRINT TEST_REQ TEST_STAT
BY STU_ID
ON TABLE HOLD AS MMTEMP8
WHERE TEST_REQ NE 'NONE';
END
-*
JOIN STU_ID IN MMTEMP8 TO STU_ID IN MMTEMP1 AS J2
TABLE FILE MMTEMP8
PRINT COLLEGE_1 MAJOR_1 APP_TERM MM030_ORDER
TEST_REQ TEST_STAT
BY STU_ID
ON TABLE HOLD AS MMTEMP7
END
-*
-* Get missing application requirements (excluding test data).
-*
DEFINE FILE MMTEMP1
THS_REC/A1=IF (RQMNT_TYPE EQ 'CPT') OR (RQMNT_TYPE EQ 'SAT') OR
(RQMNT_TYPE EQ 'ACT') THEN 'N' ELSE 'Y';
END
TABLE FILE MMTEMP1
PRINT COLLEGE_1 MAJOR_1 APP_TERM MM030_ORDER
RQMNT_TYPE RQMNT_STAT
BY STU_ID
WHERE ((MM030_ORDER EQ 1 AND APP_FLAG_PREF_1 NE '') OR
(MM030_ORDER EQ 2 AND APP_FLAG_PREF_2 NE '') OR
(MM030_ORDER EQ 3 AND APP_FLAG_PREF_3 NE '') OR
(MM030_ORDER EQ 4 AND APP_FLAG_PREF_4 NE '') OR
(MM030_ORDER EQ 5 AND APP_FLAG_PREF_5 NE '') OR
(MM030_ORDER EQ 6 AND APP_FLAG_PREF_6 NE '') OR
(MM030_ORDER EQ 7 AND APP_FLAG_PREF_7 NE '') OR
(MM030_ORDER EQ 8 AND APP_FLAG_PREF_8 NE '') OR
(MM030_ORDER EQ 9 AND APP_FLAG_PREF_9 NE '')) AND
(RQMNT_STAT EQ '' OR 'I') AND (THS_REC EQ 'Y');
ON TABLE HOLD AS MMTEMP2
END
-*
-* Combine files.
-*
-RUN
-VMS COPY MMTEMP2.FTM,MMTEMP7.FTM MMTEMPA.FTM
-*
-* Organize combined file by student id.
-*
FILEDEF MMTEMP2 DISK MMTEMPA.FTM
TABLE FILE MMTEMP2
PRINT COLLEGE_1 MAJOR_1 APP_TERM MM030_ORDER
RQMNT_TYPE RQMNT_STAT
BY STU_ID
ON TABLE HOLD AS MMTEMP3
END
-*
-* Get student name information.
-*
JOIN STU_ID IN MMTEMP3 TO STU_ID IN AAFILE AS J3
TABLE FILE MMTEMP3
PRINT COLLEGE_1 MAJOR_1 APP_TERM MM030_ORDER
RQMNT_TYPE RQMNT_STAT STU_NAME STU_SALU
BY STU_ID
ON TABLE HOLD AS MMTEMP4
END
-*
-* Get student address information.
-*
JOIN STU_ID IN MMTEMP4 TO STU_ID IN ADFILE AS J4
TABLE FILE MMTEMP4
PRINT COLLEGE_1 MAJOR_1 APP_TERM MM030_ORDER
RQMNT_TYPE RQMNT_STAT STU_NAME STU_SALU
STREET_1 STREET_2 CITY STATE ZIP_CODE_DPBC
PHONE
BY STU_ID
WHERE AD020_ORDER LE ADDRESS_CTR;
WHERE (ADDR_TYPE_1 EQ 'P') OR (ADDR_TYPE_2 EQ 'P') OR (ADDR_TYPE_3 EQ 'P') OR
(ADDR_TYPE_4 EQ 'P') OR (ADDR_TYPE_5 EQ 'P');
ON TABLE HOLD AS MMTEMP5
END
-*
-* Select students who are enrolled for input term.
-*
JOIN TEMP_KEY WITH STU_ID IN MMTEMP5 TO KEY IN RTFILE AS J5
DEFINE FILE MMTEMP5
TEMP_KEY/A14='&TERM'|STU_ID;
SRT_KEY/A41 = STU_NAME|STU_ID;
END
TABLE FILE MMTEMP5
PRINT COLLEGE_1 MAJOR_1 APP_TERM MM030_ORDER
RQMNT_TYPE RQMNT_STAT STU_NAME STU_SALU
STREET_1 STREET_2 CITY STATE ZIP_CODE_DPBC
PHONE SRT_KEY
BY STU_ID
WHERE COLLEGE NE 'CE';
WHERE TERM EQ '&TERM';
ON TABLE HOLD AS MMTEMP6
END
-*
-* Make an output file in MS Word data source format.
-*
FILEDEF PRDECODE DISK SI$FOCUS:PR_TABLE.DAT
FILEDEF ARQDEC DISK SI$FOCUS:ARQ_TABLE.DAT
DEFINE FILE MMTEMP6
-INCLUDE SI$FOCUS:NAMEPARS.SEG
FOR_SID/A11 = EDIT (STU_ID, '999-99-9999');
SEM/A1 = EDIT('&TERM','$$$$9');
SEMDEC/A6 = DECODE SEM (1 'Fall' 2 'Spring' 3 'Summer');
AY2/A4 = EDIT('&TERM','9999$');
IY2/I4 = EDIT(AY2);
INY/I4 = IY2 + 1;
ANY/A4 = EDIT(INY);
-*
MAJDEC/A45 = DECODE MAJOR_1 (PRDECODE);
RQDEC/A50 = DECODE RQMNT_TYPE (ARQDEC);
RQSDEC/A55 = RQMNT_STAT|RQDEC||'
';
-*
TI_FLD/A4 = MXCASE(4,STU_SALU,'A4');
TRMDEC_FLD/A20 = SEMDEC|' '|AY2|'-'|ANY;
PHONE_FMT/A14 = IF PHONE EQ '' THEN '' ELSE EDIT(PHONE,'(999) 999-9999');
-*
L1/A70 = 'START' || '|' || TI_FLD || '|' || FUL_NAME || '|' || FOR_SID ;
L2/A70 = '|' || STREET_1 || '|' || STREET_2;
L3/A70 = '|' || CITY || '|' || STATE || '|' || ZIP_CODE_DPBC || '|' || STU_NAME;
L4/A70 = '|' || LST_NAME || '|' || COLLEGE_1;
L5/A70 = '|' || MAJDEC || '|' || EDIT(MAJOR_1,'99') || '|' || MAJOR_1;
L6/A70 = '|' || PHONE_FMT || '|' || TRMDEC_FLD || '|';
EOR/A5 = '|END*';
END
TABLE FILE MMTEMP6
"START|TI|NA|SID|A1|A2|CY|ST|ZP|NAME|LSTNAM|APPCOL|MAJDEC|"
"APP_MJ1|APPMJR|PHONE|TRMDEC|MISSING|ldate|END*"
-*
PRINT RQSDEC AS ''
BY SRT_KEY NOPRINT
ON SRT_KEY SUBHEAD
"<1 <L1"
"<1 <L2"
"<1 <L3"
"<1 <L4"
"<1 <L5"
"<1 <L6"
ON SRT_KEY SUBFOOT
"<1 <EOR"
ON TABLE SAVE AS MISREQHD FORMAT DOC
END
-*
FILEDEF WORDFMT DISK MISREQHD.DOC
TABLE FILE WORDFMT
PRINT DATA_FIELD
ON TABLE SAVE AS MISREQIN
END
JOIN CLEAR *
Master File Description (MFD) for WORDFMT :
FILE=WORDFMT,SUFFIX=FIX
SEGNAME=ROOT
FIELD=GEN_FIL001, ,A01,A01,$
FIELD=DATA_FIELD, ,A79,A79,$
This page hosted by
Get your own Free Homepage