Comparison of Powerhouse code to traditional Cobol code


File Access

The Cobol program requires many more lines of code to deal with opening, closing, and reading files. The Powerhouse script requires less because the files and all of the fields in each file are already fully defined in the Powerhouse Data Dictionary.

Thus, the single line Powerhouse access admissions instruction corresponds to lines of Cobol such as these:


           SELECT ADMISSION-FILE
               ASSIGN TO RMS
               ORGANIZATION IS INDEXED
               ACCESS MODE IS DYNAMIC
               RECORD KEY IS ADMIS-KEY
               ALTERNATE RECORD KEY IS ADMIS-ALTERNATE-KEY
                   WITH DUPLICATES
               FILE STATUS IS IO-FILE-STATUS.

       FD  ADMISSION-FILE 
           VALUE OF ID IS ADMIS-FILE-ID. 
      * 
       01  ADMISSION-ITEM. 
           02  ADMIS-KEY. 
               03  ADMIS-ID PICTURE X(10). 
           02  ADMIS-ALTERNATE-KEY. 
               03  ADMIS-NAME.
                   04  ADMIS-LETTER OCCURS 25 TIMES PICTURE X.
           02  ADMIS-PERMANENT-ADDRESS-DATA. 
               03  ADMIS-ADDRESS-1 PICTURE X(25). 
               03  ADMIS-ADDRESS-2 PICTURE X(25). 
               03  ADMIS-CITY PICTURE X(18). 
               03  ADMIS-STATE PICTURE X(2). 
               03  ADMIS-ZIP PICTURE 9(5). 
               03  ADMIS-PHONE. 
                   04  ADMIS-AREA-CODE PICTURE 9(3). 
                   04  ADMIS-PHONE-NUMBER PICTURE X(7). 
               03  ADMIS-COUNTY PICTURE X(18). 
               03  ADMIS-COUNTY-CODE PICTURE X(3). 
           02  ADMIS-STATUS-DATA. 
               03  ADMIS-TERRITORY PICTURE X(2). 
               03  ADMIS-COUNSELOR PICTURE X(4). 
               03  ADMIS-CONTACT-STATUS OCCURS 6 TIMES 
                   INDEXED BY ADMIS-CONTACT-INDEX. 
                   04  ADMIS-CONTACT-TYPE PICTURE X(2). 
                   04  ADMIS-CONTACT-DATE PICTURE 9(6). 
                   04  ADMIS-CONTACT-RESP PICTURE X. 
               03 ADMIS-APPLICATION-STATUS. 
                   04  ADMIS-STATUS PICTURE X(2). 
                       88  COMPLETED-APP VALUE
                       'AP','AD','DP','DE','DJ','AC','PP','CA',
                       'CD','CC','ND','CS','DD','QD'.  
                       88  ACCEPTED-FOR-ADMISS VALUE 'AC','PP'.
                   04  ADMIS-STATUS-DATE PICTURE 9(6). 
               03  ADMIS-RECOMMENDATIONS PICTURE X. 
               03  ADMIS-SCHOLAR PICTURE X. 
               03  ADMIS-ATHLETE PICTURE X. 
               03  ADMIS-FEE-PAID PICTURE X. 
           02  ADMIS-PERSONAL-DATA. 
               03  ADMIS-PERSONAL-DATA-DEMO-1.
                   04  ADMIS-BIRTH-DATE PICTURE 9(6). 
                   04  ADMIS-SEX PICTURE X. 
                   04  ADMIS-ETHNIC-CODE PICTURE X. 
                   04  ADMIS-MARITAL-STATUS PICTURE X. 
                   04  ADMIS-RELIGION PICTURE X. 
               03  ADMIS-PERSONAL-DATA-DEMO-2.
                   04  ADMIS-SOURCE PICTURE X. 
                   04  ADMIS-CITIZEN PICTURE X. 
                   04  ADMIS-HANDICAP PICTURE X. 
                   04  ADMIS-STATE-RESIDENT PICTURE X. 
                   04  ADMIS-INTEREST OCCURS 6 TIMES 
                       INDEXED BY ADMIS-INTEREST-INDEX PIC X(2).
           02  ADMIS-APPLICATION-DATA. 
               03  ADMIS-TERM PICTURE X(3). 
               03  ADMIS-MAJOR PICTURE X(2). 
               03  ADMIS-COLLEGE PICTURE X(2). 
               03  ADMIS-TIME PICTURE X. 
               03  ADMIS-PERIOD PICTURE X. 
               03  ADMIS-FINANCIAL-AID PICTURE X. 
               03  ADMIS-RESIDENCE PICTURE X. 
               03  ADMIS-PARENT-ATTENDED PICTURE X. 
               03  ADMIS-REASON-FOR-CHOOSING PICTURE X. 
               03  ADMIS-ENTRANCE-CODE PICTURE X. 
               03  ADMIS-CREDIT-EARNED PICTURE S9(3)V9(2). 
               03  ADMIS-CLASS PICTURE 9. 
           02  ADMIS-PREVIOUS-COLLEGE. 
               03  ADMIS-TRANSFER-COLLEGE-CODE PICTURE X(6). 
               03  ADMIS-TRANSFER-COLLEGE-DEGREE PICTURE X. 
               03  ADMIS-TRANSFER-DATE.
                   04  ADMIS-TRANSFER-MONTH-GRAD PICTURE 9(2).
                   04  ADMIS-TRANSFER-YEAR-GRAD PICTURE 9(2).
               03  ADMIS-TRANSFER-GPA PICTURE S9V9(2). 
               03  ADMIS-TRANSFER-CODE PICTURE X. 
               03  ADMIS-TRANSFER-TRANSCRIPT PICTURE X. 
           02  ADMIS-HIGH-SCHOOL-DATA. 
               03  ADMIS-HS-CODE PICTURE X(6). 
               03  ADMIS-HS-TYPE PICTURE X. 
               03  ADMIS-HS-DATE.
                   04  ADMIS-HS-MONTH-GRAD PICTURE 9(2).
                   04  ADMIS-HS-YEAR-GRAD PICTURE 9(2).
               03  ADMIS-HS-GPA PICTURE S9V9(2). 
               03  ADMIS-HS-RANKING. 
                   04  ADMIS-HS-RANK PICTURE 9(4). 
                   04  ADMIS-HS-SIZE PICTURE 9(4). 
               03  ADMIS-HS-TRANSCRIPT PICTURE X. 
           02  ADMIS-TEST-DATA. 
               03  ADMIS-TEST PICTURE X(4). 
               03  ADMIS-TEST-COMPOSITE PICTURE 9(4). 
               03  ADMIS-TEST-SUB-SCORE OCCURS 4 TIMES PICTURE 9(3). 
           02  ADMIS-WORK-PHONE-NUM.
               03  ADMIS-WORK-PHONE-AREA-CODE PICTURE 9(3).
               03  ADMIS-WORK-PHONE-DIGITS PICTURE X(7).
           02  ADMIS-SECOND-MAJOR PICTURE X(2).
           02  ADMIS-MINOR PICTURE X(2).
           02  ADMIS-LANGUAGE PICTURE X(2).
           02  FILLER PICTURE X(2). 
           02  ADMIS-SITE PICTURE X(6).
           02  ADMIS-CITIZENSHIP-COUNTRY PICTURE X(2).
           02  ADMIS-EXPANDED-SOURCE PIC 9(6).
           02  FILLER PICTURE X(45). 
           02  ADMIS-ON-LINE-STATUS PICTURE X. 
           02  ADMIS-EMPLOYEE-NO PICTURE X(4). 

           OPEN INPUT ADMISSION-FILE ALLOWING ALL.

      * 
      * 
       GET-NEXT-ADMISSION-ITEM. 
           MOVE 'N' TO FILE-LOCK-STATUS.
           MOVE 'N' TO INVALID-ADMIS-KEY-FLAG. 
           READ ADMISSION-FILE NEXT 
               AT END 
                   MOVE 'Y' TO INVALID-ADMIS-KEY-FLAG 
                   MOVE HIGH-VALUES TO ADMISSION-ITEM. 
           IF FILE-LOCK-ERROR-OCCURRED
               GO TO GET-NEXT-ADMISSION-ITEM.

           CLOSE ADMISSION-FILE.

Output

Powerhouse uses a simple report statement to generate lines of output. Powerhouse itself decides how to format (lining up columns, column and page headers, etc.) each line.


> report id name ad-source class hs-code entrance-code app-status

However, in the Cobol program all of this is specified by the programmer with code such as this:


      *
       01 DETAIL-LINE.
          02 PRINT-ID PIC X(10).
          02 FILLER PIC X(5) VALUE SPACES.
          02 PRINT-NAME PIC X(25).
          02 FILLER PIC X(5) VALUE SPACES.
          02 PRINT-SOURCE PIC X.
          02 FILLER PIC X(5) VALUE SPACES.
          02 PRINT-CLASS PIC X.
          02 FILLER PIC X(5) VALUE SPACES.
          02 PRINT-HS-CODE PIC X(6).
          02 FILLER PIC X(5) VALUE SPACES.
          02 PRINT-ENTRANCE-CODE PIC X.
          02 FILLER PIC X(5) VALUE SPACES.
          02 PRINT-STATUS PIC X(2).

           MOVE SELECT-ID TO PRINT-ID.
           MOVE SELECT-NAME TO PRINT-NAME.
           MOVE SELECT-SOURCE TO PRINT-SOURCE.
           MOVE SELECT-CLASS TO PRINT-CLASS.
           MOVE SELECT-HS-CODE TO PRINT-HS-CODE.
           MOVE SELECT-ENTRANCE-CODE TO PRINT-ENTRANCE-CODE.
           MOVE SELECT-STATUS TO PRINT-STATUS.
           WRITE PRINT-ITEM FROM DETAIL-LINE.
           ADD 1 TO LINE-COUNT.
           ADD 1 TO SOURCE-COUNT.
           ADD 1 TO REPORT-COUNT.

Control Breaks

Powerhouse makes control breaks and footers easy to specify.


> footing at ad-source  skip 2 "Total for: " ad-source "=" count skip 3
> final footing "Total enrollment  " count

Cobol requires greater specification by the programmer.


      *
       01 TOTAL-LINE.
          02 FILLER PIC X(17) VALUE 'TOTAL FOR STATUS '.
          02 PRINT-PREVIOUS-SOURCE PIC X.
          02 FILLER PIC X(2) VALUE ': '.
          02 PRINT-SOURCE-COUNT PIC Z(5)9.
      *
       01 FINAL-LINE.
          02 FILLER PIC X(15) VALUE 'REPORT TOTAL: '.
          02 PRINT-REPORT-COUNT PIC Z(7)9.
      *
       01 PREVIOUS-SOURCE PIC X.
      *
       01 SOURCE-COUNT PIC 9(6).
       01 REPORT-COUNT PIC 9(8).

           IF SELECT-SOURCE NOT = PREVIOUS-SOURCE
              PERFORM DO-CONTROL-BREAK.
           IF LINE-COUNT > 47
               PERFORM PRINT-HEADERS.
           MOVE SELECT-SOURCE TO PREVIOUS-SOURCE.
      * 
      * 
       DO-CONTROL-BREAK.
           MOVE SOURCE-COUNT TO PRINT-SOURCE-COUNT.
           MOVE PREVIOUS-SOURCE TO PRINT-PREVIOUS-SOURCE.
           WRITE PRINT-ITEM FROM TOTAL-LINE AFTER 2.
           MOVE SPACES TO PRINT-ITEM.
           WRITE PRINT-ITEM.
           ADD 3 TO LINE-COUNT.
           MOVE ZERO TO SOURCE-COUNT.
      * 
      * 
       DO-FINAL-LINE.
           PERFORM DO-CONTROL-BREAK.
           MOVE REPORT-COUNT TO PRINT-REPORT-COUNT.
           WRITE PRINT-ITEM FROM FINAL-LINE AFTER 2.

If-Else Logic

Record selection tends to be similar.


> select if term  = "961" and (app-status="AC" or app-status="PP")

           IF ADMIS-TERM = CURRENT-WORKING-TERM
           AND (ADMIS-STATUS = 'AC' OR ADMIS-STATUS = 'PP')
               PERFORM PROCESS-SELECT-ITEM.