OpenVMS DCL Command Procedure :
Be sure to include your variable information within the FOCUS program; for
example :

-PROMPT &(variable)/(type & length).(verbiage for prompt) :


To produce a report, put the following statement at the end of FOCUS program :

ON TABLE HOLD AS REPORT FORMAT WP


To produce labels, put the following statement at the end of FOCUS program :

ON TABLE HOLD AS LABELS


Be sure to extract and compile/link the LASER-LABELS.COB file.

 
Usage : @FOCREPORT (FOCUS program)

 
$!
$!  FOCREPORT.COM
$!
$!  This procedure will execute the specified FOCUS program.
$!
$ SET NOVERIFY
$ SET NOCONTROL_Y
$ ON ERROR THEN CONTINUE
$!
$ SAY       := WRITE SYS$OUTPUT
$ ASK       := READ/END=END_PROGRAM/PROMPT =
$ USER       = F$EDIT(F$GETJPI("","USERNAME"),"UPCASE,COLLAPSE")
$ READ_FILE  = "SI$FOCUS:" +"'P1'" + ".FEX"                              
$ CL*EAR    := "SET TERM/WIDTH=80"
$ SET DEFAULT SYS$LOGIN
$!
$!  Retrieve and execute FOCUS prompts.
$!
$ CL
$ SAY ""
$ OPEN/READ focfile 'READ_FILE'
$ INX = 0
$!
$READ_FOC:
$!
$ READ/ERROR=END_READ_FOC/END=END_READ_FOC focfile frecord
$ IF F$EXTRACT(0,7,frecord) .EQS. "-PROMPT"
$ THEN
$     	INX        = INX + 1
$     	QBEG       = F$LOCATE(".",frecord) + 1  
$     	RECLEN     = F$LENGTH(frecord)     
$     	VPLEN      = (RECLEN - QBEG)       
$     	VPROMPT    = F$EXTRACT(QBEG,VPLEN,frecord)
$     	READ/PROMPT= " ''VPROMPT' " /END=END_FOC_ALL SYS$COMMAND   ANS 
$     	ANS'INX'   = ANS
$ ENDIF
$ GOTO READ_FOC    
$!
$END_FOC_ALL:
$!
$ CLOSE focfile
$ GOTO END_PROGRAM 
$!
$END_READ_FOC:
$!
$ CLOSE focfile
$!
$!  Capture user and FOCUS program ran; this can be used to track
$!  usage of the available FOCEXECs. 
$!
$ OPEN/APPEND/SHARE=WRITE output_file FOC_RUN_DATA.DAT
$ WRITE output_file USER + "  " + "''P1'"
$ CLOSE output_file 
$!
$!  Execute FOCUS program.
$!
$ 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 "$ ASSIGN SI$DATA:XFOC01.DAT XFOC01" 
$ WRITE output_file "$ SET DEFAULT SYS$LOGIN" 
$ WRITE output_file "$ FOCUS" 
$ WRITE output_file "EXEC " + "SI$FOCUS:" + "''P1'" + ".FEX"
$!
$!  Write out variable information to be used within FOCUS program
$!
$ DUP_INX = 0
$!
$WR_FOC_VAR:
$!
$ IF DUP_INX .LT. INX
$ THEN
$	DUP_INX = DUP_INX + 1
$	WRITE output_file ANS'DUP_INX' 
$ ELSE
$	GOTO END_FOC_VAR
$ ENDIF
$!
$ GOTO WR_FOC_VAR 
$!
$END_FOC_VAR:
$!
$ WRITE output_file "FIN" 
$ WRITE output_file "$ EXIT" 
$! 
$ CLOSE output_file 
$ CL
$ SAY ""
$ SAY "Please wait while FOCUS program executes..."
$ SAY ""
$ SUBMIT/NOPRINT/NOTIFY 'COM_FILE'
$ SYNCHRONIZE FOCTEMP
$!
$!  Check to see if output has been produced, if not generate error.
$!
$ IF (F$SEARCH("SYS$LOGIN:REPORT.WP") .EQS. "") .AND. -
     (F$SEARCH("SYS$LOGIN:LABELS.FTM") .EQS. "")
$ THEN
$ 	SAY " "
$	SAY " "
$	SAY "Error producing report or no data meeting selection criteria  "
$	ASK "<RETURN> to exit ..... " SYS$COMMAND DUMMY
$	SAY " "
$	GOTO END_PROGRAM
$ ENDIF
$!
$!  If regular report is produced, e-mail to user.
$!
$ IF F$SEARCH("SYS$LOGIN:REPORT.WP") .NES. ""
$ THEN
$	COPY SYS$LOGIN:REPORT.WP SYS$LOGIN:REPORT.DOC;
$	HOLDNAME = "SYS$LOGIN:REPORT.DOC;"
$ 	GOSUB MAIL_REPORT
$     	GOTO END_PROGRAM
$ ENDIF
$!
$!  If mailing labels are produced, format and e-mail to user.
$!
$ IF F$SEARCH("SYS$LOGIN:LABELS.FTM") .NES. "" 
$ THEN 
$ 	GOSUB MAIL_LABELS
$     	GOTO END_PROGRAM
$ ENDIF
$!
$END_PROGRAM:
$!
$!  Clean up all temporary FOCUS files.
$!
$ DELETE/NOLOG SYS$LOGIN:*.FTM;*
$ DELETE/NOLOG SYS$LOGIN:*.MAS;*
$ DELETE/NOLOG SYS$LOGIN:*.WP;*
$ DELETE/NOLOG SYS$LOGIN:FOCTEMP.COM;*
$ EXIT
$!
$!  Subroutine to e-mail report.
$!
$MAIL_REPORT:
$!
$ CL
$ SAY " "
$ SAY "                      *** REPORT HAS BEEN PRODUCED ***"
$ SAY " "
$ SAY "    To send other users a copy of the report, answer Y to the next"
$ SAY "    question and enter the name(s) of additional users who will get a copy."
$ SAY "    The usernames need to be seperated by a comma."
$ SAY " "
$ SAY "    To send the report to only yourself then answer N to the next question."
$ SAY " "
$ SAY " "
$ MAIL/SUBJECT="''P1'" 'HOLDNAME' 'USER' 
$ SAY " "
$ ASK  "Do you want others to get the results? "  SYS$COMMAND  ANSWER
$ IF ANSWER 
$ THEN
$ 	SAY " "
$       ASK  "Enter the username(s) "  SYS$COMMAND  USERLIST
$	USERLIST = F$EDIT(USERLIST,"COLLAPSE")
$     	MAIL/SUBJECT="''P1'" 'HOLDNAME' 'USERLIST'
$     	SAY " Report has been sent to ",USERLIST
$ ENDIF
$ RETURN
$!
$!  Subroutine to create and e-mail mailing labels.
$!
$MAIL_LABELS:
$!
$ CL
$ TYPE SYS$INPUT
 
Labels can now be produced in laser printer format.  The supported laser 
printers are :  
         	DECLaser 2100 and DEC Printserver 17

The tested labels were Avery 5160 Laser Printer Labels.  Specifications 
as listed on the box :
        	100 sheets   : 8.5 x 11 inches
        	3000 labels  : 1 inch x 2 5/8 inches
        	30 labels per sheet

These labels may be obtained by submitting a purchase request 

     	Item Description: laser labels 1 by 2 5/8 
     	Order Number    : 615-51-85-112-6

These labels must be printed by using the Print Laser Labels option on 
the SIS menu.
****************************************************************************

$!	  
$ WAIT 00:00:03
$ SAY " "
$ SAY " "
$ SAY "Producing Laser labels"
$ RUN LASER-LABELS
$ SAY " "
$ SAY "Mailing Laser labels to your e-mail account"
$ WAIT 00:00:03
$ MAIL/SUBJECT="''P1'" SYS$LOGIN:LASER_LABELS.TXT 'USER' 
$!
$ CL
$ SAY " "
$ SAY "                      *** LABELS HAVE BEEN PRODUCED ***"
$ SAY " "
$ SAY "    To send other users a copy of the mailing labels, answer y to the next"
$ SAY "    question and enter the name(s) of the all users who will get a copy."
$ SAY "    The usernames need to be seperated by a comma."
$ SAY "  "
$ SAY "    To send the labels to only yourself then answer N to the next question."
$ SAY " "
$ ASK "Do you want others to get the results? [N] " - 
	SYS$COMMAND ANSWER 
$ IF ANSWER 
$ THEN
$ 	SAY " "
$ 	ASK "Enter the username(s) "  SYS$COMMAND  USERLIST
$	USERLIST = F$EDIT(USERLIST,"COLLAPSE")
$       MAIL/SUBJECT="''P1'" SYS$LOGIN:LASER_LABELS.TXT 'USERLIST'
$       SAY " Labels have been sent to ",USERLIST
$ ENDIF
$ RETURN

LASER-LABELS.COB :

IDENTIFICATION DIVISION.
PROGRAM-ID. LASER-LABELS.
AUTHOR.  IRM.
**************************************************************
**     M   A   I   L   I   N   G       L   A   B   E   L   S
**************************************************************
**
**  This program reads in a sort file created from FOCUS 
**  called LABELS.FTM which will reside in SYS$LOGIN.  The 
**  input file will use the sort-file.  This program will build 
**  3 across labels only, at this time.  The print file will be
**  created in SYS$LOGIN directory as LASER-LABELS.TXT.
**************************************************************
**************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. ALPHA-4000.
OBJECT-COMPUTER. ALPHA-4000.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT PRINT-FILE ASSIGN TO 'SYS$LOGIN:LASER_LABELS.TXT'. 
    SELECT SORT-FILE ASSIGN TO 'SYS$LOGIN:LABELS.FTM'. 
                                     
DATA DIVISION.
FILE SECTION.
FD  PRINT-FILE
    RECORD CONTAINS 96 CHARACTERS
    LABEL RECORDS ARE STANDARD
    DATA RECORD IS PRINT-RECS.              
01  PRINT-RECS		PIC X(96).
                                                 
FD  SORT-FILE                                    
    RECORD CONTAINS 144 CHARACTERS
    LABEL RECORDS ARE STANDARD                    
    DATA RECORD IS SORT-RECORD.                    
01  SORT-RECORD.
   03 SORT-NAME                           PIC X(32).
   03 SORT-ADDRESS1                       PIC X(32).
   03 SORT-ADDRESS2                       PIC X(32).
   03 SORT-CITY                           PIC X(16).
   03 SORT-STATE                          PIC X(2).
   03 FILLER                              PIC X(2).
   03 SORT-ZIP-CODE                       PIC X(9).
   03 FILLER                              PIC X(3).
   03 SORT-LAST-NAME                      PIC X(16).

WORKING-STORAGE SECTION.
01  PRINT-RECORD.
    03 PRINT-REC OCCURS 3 TIMES.
       05 LABEL-REC                      PIC X(33).
01 EOF-SORT-FILE                      PIC X(1) VALUE "N".
01 YES                                PIC X(1) VALUE "Y".                     
01 CTR1                               PIC 9(1).
01 CTR2                               PIC 9(1).
01 CTR3                               PIC 9(1).

01 HOLD-RECORD.
   03 HOLD-RECS OCCURS 3 TIMES.                                
      05  HOLD-NAME                      PIC X(30).
      05  FILLER                         PIC X(3).
      05  ADDRESS1                       PIC X(30).
      05  FILLER                         PIC X(3).
      05  ADDRESS2                       PIC X(30).
      05  FILLER                         PIC X(3).
      05  CITY                           PIC X(13).
      05  FILLER                         PIC X(1).
      05  STATE                          PIC X(2).
      05  FILLER                         PIC X(1).
      05  ZIP-CODE                       PIC X(9).
      05  FILLER                         PIC X(7).
01  I-O-STATUS                       PIC XX.
    88  OK                           VALUE  "00".
    88  WARNING-MESSAGE              VALUE  "01".
    88  NO-NEXT                      VALUE  "13".
    88  OP-FILE                      VALUE  "15".
    88  NO-VALID                     VALUE  "16".
    88  DUPL                         VALUE  "22".
    88  NOT-FOUND                    VALUE  "23".
    88  FULLs                        VALUE  "24".
    88  RECORD-NOT-FOUND             VALUE  "32".
    88  BOUND                        VALUE  "34".
    88  SOFT-LOCK                    VALUE  "90".
    88  IN-USE                       VALUE  "92".

PROCEDURE DIVISION.
PROGRAM-EXECUTION SECTION.
CONTROL-PARA.
    OPEN INPUT SORT-FILE.
    OPEN OUTPUT PRINT-FILE.
	
    INITIALIZE PRINT-RECORD.
    PERFORM WRITE-RECORD.
	MOVE ALL "X" TO PRINT_RECORD.
    PERFORM WRITE-RECORD 4 TIMES.
    INITIALIZE PRINT-RECORD.
    PERFORM WRITE-RECORD.

        READ SORT-FILE 
             AT END MOVE YES TO EOF-SORT-FILE
        END-READ.

    PERFORM BUILD-LABELS UNTIL EOF-SORT-FILE = YES.
    CLOSE SORT-FILE,PRINT-FILE.
    STOP RUN.

BUILD-LABELS.
    INITIALIZE HOLD-RECORD.
    PERFORM VARYING CTR1 FROM 1 BY 1 UNTIL CTR1 > 3 OR
                                           EOF-SORT-FILE = YES
        MOVE SORT-NAME TO HOLD-NAME(CTR1)
        MOVE SORT-ADDRESS1 TO ADDRESS1(CTR1)
        MOVE SORT-ADDRESS2 TO ADDRESS2(CTR1)
        MOVE SORT-CITY TO CITY(CTR1)
        MOVE SORT-STATE TO STATE(CTR1)
        MOVE SORT-ZIP-CODE TO ZIP-CODE(CTR1)
        INITIALIZE SORT-RECORD
        READ SORT-FILE 
             AT END MOVE YES TO EOF-SORT-FILE
        END-READ
     END-PERFORM.

** LINE 2
    PERFORM VARYING CTR2 FROM 1 BY 1 UNTIL CTR2 > 3 
          MOVE HOLD-NAME(CTR2) TO LABEL-REC(CTR2)
    END-PERFORM.
    PERFORM WRITE-RECORD.
** LINE 3
    PERFORM VARYING CTR2 FROM 1 BY 1 UNTIL CTR2 > 3 
          MOVE ADDRESS1(CTR2) TO LABEL-REC(CTR2)
    END-PERFORM.
    PERFORM WRITE-RECORD.
** LINE 4
    PERFORM VARYING CTR2 FROM 1 BY 1 UNTIL CTR2 > 3 
          IF ADDRESS2(CTR2) = SPACES 
          THEN STRING CITY(CTR2) DELIMITED BY SIZE " "
                      STATE(CTR2) DELIMITED BY SIZE " "            
                      ZIP-CODE(CTR2) DELIMITED BY SIZE " "
                      DELIMITED BY SIZE INTO LABEL-REC(CTR2)
          ELSE MOVE ADDRESS2(CTR2) TO LABEL-REC(CTR2)                    
          END-IF
    END-PERFORM.
    PERFORM WRITE-RECORD.
** LINE 5          
    PERFORM VARYING CTR2 FROM 1 BY 1 UNTIL CTR2 > 3 
          IF ADDRESS2(CTR2) NOT = SPACES 
          THEN STRING CITY(CTR2) DELIMITED BY SIZE " "
                      STATE(CTR2) DELIMITED BY SIZE  " "            
                      ZIP-CODE(CTR2) DELIMITED BY SIZE " "
                      DELIMITED BY SIZE INTO LABEL-REC(CTR2)
          ELSE MOVE SPACES TO LABEL-REC(CTR2)
          END-IF
    END-PERFORM.
    PERFORM WRITE-RECORD.

** LINE 6 IS BLANK
    INITIALIZE PRINT-RECORD.
    PERFORM WRITE-RECORD 2 TIMES.

WRITE-RECORD.
    IF 	NOT (EOF-SORT-FILE = YES AND CTR1 = 1)
    THEN
	WRITE PRINT-RECS FROM PRINT-RECORD
    	INITIALIZE PRINT-RECORD
    END-IF.

 

This page hosted by Get your own Free Homepage

Hosted by www.Geocities.ws

1