COBOL TIPS #17
by
Shawn M. Gordon
President S.M.Gordon & Associates
 

In my last column I mentioned a product from Computer Associates called CA-Realia that was a visual COBOL environment rather like Visual Basic. Well, good news, I got a copy to write a review of.  I just got it installed, so I have no opinion on it yet, but look for the review around the time this column hits (could be the same issue).

I keep saying that I am out of ideas, and I keep getting information from readers of this column.  I really do appreciate the input and feedback, it helps spark my imagination as well.  Our tip this month comes from Jim Phillips, and is an excellent example of how and why to use the HPDEVCONTROL instrinsic.  The following program will put a DDS tape drive online without having to eject and reload the tape.  See listing 1 for the code;

$CONTROL USLINIT
IDENTIFICATION DIVISION.

PROGRAM-ID.   ONLINE.
AUTHOR.       JIM PHILLIPS.
DATE-WRITTEN. 03/21/95.
DATE-COMPILED.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.  HP-3000.
OBJECT-COMPUTER.  HP-3000.

SPECIAL-NAMES.
   CONDITION-CODE IS C-C.

INPUT-OUTPUT SECTION.

DATA DIVISION.

FILE SECTION.

WORKING-STORAGE SECTION.

01 HPDEVCONTROL-STATUS     PIC S9(8)  COMP.

01 HPDEVCONTROL-LDEV.
   03 HPDEVCONTROL-LDEV-1  PIC X(10)  VALUE "a00000007a".
   03                      PIC X(190) VALUE SPACES.

01 HPDEVCONTROL-ITEMNUM    PIC S9(8)  COMP.

01 HPDEVCONTROL-ITEM       PIC S9(8)  COMP.

01 STATUS-BREAK-OUT        PIC S9(8)  COMP.
01 FILLER REDEFINES STATUS-BREAK-OUT.
   03 STATUS-1             PIC S9(4)  COMP.
   03 STATUS-2             PIC S9(4)  COMP.

PROCEDURE DIVISION.

START-ONLINE.
     MOVE ZEROES                TO HPDEVCONTROL-STATUS
                                   HPDEVCONTROL-ITEM.
     MOVE +100                  TO HPDEVCONTROL-ITEMNUM.

     CALL INTRINSIC "HPDEVCONTROL" USING HPDEVCONTROL-STATUS,
                                         HPDEVCONTROL-LDEV,
                                         HPDEVCONTROL-ITEMNUM,
                                         HPDEVCONTROL-ITEM.

     MOVE HPDEVCONTROL-STATUS   TO STATUS-BREAK-OUT.

     IF STATUS-1 <> ZEROES
        DISPLAY SPACES
        DISPLAY "CALLED HPDEVCONTROL WITH PARM=100, RESULT="
                STATUS-1.

     MOVE +101                  TO HPDEVCONTROL-ITEMNUM.

     CALL INTRINSIC "HPDEVCONTROL" USING HPDEVCONTROL-STATUS,
                                         HPDEVCONTROL-LDEV,
                                         HPDEVCONTROL-ITEMNUM,
                                         HPDEVCONTROL-ITEM.

     MOVE HPDEVCONTROL-STATUS   TO STATUS-BREAK-OUT.

     IF STATUS-1 <> ZEROES
        DISPLAY SPACES
        DISPLAY "CALLED HPDEVCONTROL WITH PARM=101, RESULT="
                STATUS-1.

     STOP RUN.

For the most part you can look this intrinsic up in the manual if you want to check the items and such.  However, I think it is worth pointing out that the field HPDEVCONTROL-LDEV-1 has to be a 200 byte field, and the first 10 bytes are the significant ones.  The field must be delimited with an alphabetic characters, hence the 'a' and the beginning and the end of the string (this is the example from the manual).  The value between the 'a's s the logical device number of the DDS drive.

Nice, simple, straight forward, handy little utility.  After Jim sent this to me it reminded me of my own adventures using the HPVOLINFO intrinsic when it first became available under MPE V Platform 2P.  Now this code works on a Classic on 2P, but I can't make any guarantees about your particular platform.  You will need to verify some of the parameters.  Next month I will give you a more complex example of this intrinsic.    

$CONTROL USLINIT,SOURCE
 IDENTIFICATION DIVISION.
 PROGRAM-ID. VOLINFO.
 AUTHOR. SHAWN M.GORDON.
 DATE-WRITTEN. WED, NOV 18, 1992.
 DATE-COMPILED.
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 SOURCE-COMPUTER. HP-3000.
 OBJECT-COMPUTER. HP-3000.
 SPECIAL-NAMES.
     CONDITION-CODE IS CC.
 INPUT-OUTPUT SECTION.
 DATA DIVISION.
*
********************************************************
 WORKING-STORAGE SECTION.

 01 EDIT-LNUM                 PIC Z,ZZZ,ZZZ,ZZ9.
 01 EDIT-SNUM                 PIC ZZ,ZZZ,ZZ9.
 01 EDIT-STAT                 PIC ZZZZ9.
 01 MISCELLANEOUS-DATA.
    03 STATINFO               PIC S9(09)   COMP VALUE 0.
    03 STATINFO-ARRAY  REDEFINES STATINFO.
       05 STAT-WORD1          PIC S9(04)   COMP.
       05 STAT-WORD2          PIC S9(04)   COMP.
*
 01 ITEMNUMS  USAGE COMP.
    03 ITEM14                 PIC S9(4)    VALUE 14.
    03 ITEM16                 PIC S9(4)    VALUE 16.
    03 ITEM22                 PIC S9(4)    VALUE 22.
    03 ITEM24                 PIC S9(4)    VALUE 24.
    03 ITEM30                 PIC S9(4)    VALUE 30.
    03 ITEM32                 PIC S9(4)    VALUE 32.
    03 ITEM40                 PIC S9(4)    VALUE 40.
*
 01 ITEMS14.
    03 TOTAL-SYSTEM           PIC S9(18)   COMP VALUE 0.
 01 ITEMS16.
    03 TOTAL-MPE              PIC S9(18)   COMP VALUE 0.
 01 ITEMS22.
    03 TOTAL-VIRTUAL          PIC S9(18)   COMP VALUE 0.
 01 ITEMS24.
    03 TOTAL-DIRECTORY        PIC S9(18)   COMP VALUE 0.
 01 ITEMS30.
    03 TOTAL-SPOOL-USED       PIC S9(18)   COMP VALUE 0.
 01 ITEMS32.
    03 TOTAL-PERM-USED        PIC S9(18)   COMP VALUE 0.
 01 ITEMS40.
    03 TOTAL-FREE-SPACE       PIC S9(18)   COMP VALUE 0.
*
 01 VOL                       PIC X(26)    VALUE
        "%MPEXL_SYSTEM_VOLUME_SET%".
*********************************************************
 PROCEDURE DIVISION.
*
 A1000-INIT.
     DISPLAY SPACES.
     DISPLAY 'Begin run of VOLINFO at ' TIME-OF-DAY.
     DISPLAY 'Disk volume information system'.
     DISPLAY 'Copyright 1992 S.M.Gordon & Associates'.
     DISPLAY 'This will take a few minutes...' NO ADVANCING.

     DISPLAY SPACES.
     DISPLAY SPACES.
     CALL INTRINSIC "HPVOLINFO" USING STATINFO, \2\, VOL,
                                      ITEM16, ITEMS16,
                                      ITEM22, ITEMS22,
                                      ITEM24, ITEMS24.
     IF STAT-WORD1 <> 0
        MOVE STAT-WORD1          TO EDIT-STAT
        DISPLAY 'INTRINSIC HPVOLINFO FAILED'
        DISPLAY 'ERROR CODE = ' EDIT-STAT
        STOP RUN.

     MOVE TOTAL-MPE              TO EDIT-LNUM.
     DISPLAY 'MPE Overhead    = ' EDIT-LNUM.
     MOVE TOTAL-VIRTUAL          TO EDIT-LNUM.
     DISPLAY 'Virtual Memory  = ' EDIT-LNUM.
     DISPLAY SPACES.
     MOVE TOTAL-DIRECTORY        TO EDIT-LNUM.
     DISPLAY 'Sectors used for Directories= ' EDIT-LNUM.

     CALL INTRINSIC "HPVOLINFO" USING STATINFO, \2\, VOL,
                                      ITEM14, ITEMS14,
                                      ITEM30, ITEMS30,
                                      ITEM32, ITEMS32,
                                      ITEM40, ITEMS40.
     IF STAT-WORD1 <> 0
        MOVE STAT-WORD1          TO EDIT-STAT
        DISPLAY 'INTRINSIC HPVOLINFO FAILED'
        DISPLAY 'ERROR CODE = ' EDIT-STAT
        STOP RUN.

     MOVE TOTAL-SYSTEM           TO EDIT-LNUM.
     DISPLAY 'Total System disk space     = ' EDIT-LNUM.
     MOVE TOTAL-PERM-USED        TO EDIT-LNUM.
     DISPLAY 'Sectors used by Perm Files  = ' EDIT-LNUM.
     MOVE TOTAL-SPOOL-USED       TO EDIT-LNUM.
     DISPLAY 'Sectors used by Spool Files = ' EDIT-LNUM.
     MOVE TOTAL-FREE-SPACE       TO EDIT-LNUM.
     DISPLAY 'Sectors still free on system= ' EDIT-LNUM.
     DISPLAY SPACES.

     DISPLAY 'End of VOLINFO at ' TIME-OF-DAY.
     STOP RUN.