Sample Program Listings
This section lists the language source files used in the sample debugger
sessions on line.
These source files: are listed in:
DEMOCBMS Figure 2-2
DEMOCBSS Figure 2-3
DEMOFS Figure 2-4
DEMOPS Figure 2-5
DEMOCS Figure 2-6
Sample HP COBOL II Program
_______________________________________________________________________
| |
| $CONTROL BOUNDS, VERBS, MAP, CROSSREF |
| IDENTIFICATION DIVISION. |
| PROGRAM-ID. RAIN-REPORT. |
| ENVIRONMENT DIVISION. |
| DATA DIVISION. |
| WORKING-STORAGE SECTION. |
| 77 NUMBER-YEARS PIC 9. |
| 77 FIRST-YEAR PIC 9(4). |
| 01 YEAR-INDEX PIC 9(4) COMP. |
| 01 NUM-OF-MONTHS PIC 9(4) COMP. |
| 01 MONTH-TOTALS VALUE ZEROS. |
| 05 MT-TABLE PIC 9(6)V99 |
| OCCURS 60 TIMES. |
| PROCEDURE DIVISION. |
| 100-MAIN-ROUTINE. |
| PERFORM 200-GET-INPUT. |
| PERFORM 300-CALCULATE. |
| PERFORM 400-PRINT-REPORT. |
| PERFORM 500-STOP-RUN. |
| 200-GET-INPUT. |
| DISPLAY "ENTER THE FIRST YEAR YOU WISH TO REPORT ON:". |
| ACCEPT FIRST-YEAR. |
| IF (FIRST-YEAR < 1950) OR (1988 < FIRST-YEAR) THEN |
| GO 200-GET-INPUT. |
| DISPLAY "ENTER THE # OF YEARS YOU WISH TO CONSIDER (1-5):".|
| ACCEPT NUMBER-YEARS. |
| IF (NUMBER-YEARS < 0) OR (5 < NUMBER-YEARS) THEN |
| GO 200-GET-INPUT. |
| 300-CALCULATE. |
| COMPUTE YEAR-INDEX = (FIRST-YEAR - 1950) * 12. |
| COMPUTE NUM-OF-MONTHS = NUMBER-YEARS * 122. |
| CALL "LOADMT" USING YEAR-INDEX, |
| NUM-OF-MONTHS, |
| MONTH-TOTALS. |
| 400-PRINT-REPORT. |
| 500-STOP-RUN. |
| STOP RUN. |
_______________________________________________________________________
Figure 2-2. HP COBOL II Main Source File, DEMOCBMS
Sample HP COBOL II Program
___________________________________________________________
| |
| $CONTROL SUBPROGRAM, BOUNDS, VERBS, MAP, CROSSREF |
| IDENTIFICATION DIVISION. |
| PROGRAM-ID. LOADMT. |
| AUTHOR. ANON. |
| ENVIRONMENT DIVISION. |
| INPUT-OUTPUT SECTION. |
| FILE-CONTROL. |
| SELECT RAINFILE ASSIGN TO "RAINFALL.pub.sys". |
| DATA DIVISION. |
| FILE SECTION. |
| FD RAINFILE. |
| 01 INCHES-PER-MONTH PIC 9(6)V99. |
| WORKING-STORAGE SECTION. |
| 77 77-INDEX PIC S9(4) COMP.|
| LINKAGE SECTION. |
| 01 YEAR-INDEX PIC 9(4) COMP.|
| 01 NUM-OF-MONTHS PIC 9(4) COMP.|
| 01 MONTH-TOTALS. |
| 05 MT-TABLE PIC 9(6)V99 COMP |
| OCCURS 60 TIMES. |
| PROCEDURE DIVISION USING YEAR-INDEX, |
| NUM-OF-MONTHS, |
| MONTH-TOTALS. |
| 100-MAIN-SUBROUTINE. |
| OPEN INPUT RAINFILE. |
| PERFORM 200-READ-RAINFILE YEAR-INDEX TIMES. |
| MOVE 1 TO 77-INDEX. |
| PERFORM 300-LOAD-MT-TABLE NUM-OF-MONTHS TIMES. |
| CLOSE RAINFILE. |
| PERFORM 500-GOBACK. |
| 200-READ-RAINFILE. |
| READ RAINFILE AT END GO 500-GOBACK. |
| 300-LOAD-MT-TABLE. |
| PERFORM 200-READ-RAINFILE. |
| MOVE INCHES-PER-MONTH TO MT-TABLE (77-INDEX). |
| ADD 1 TO 77-INDEX. |
| 500-GOBACK. |
| GOBACK. |
___________________________________________________________
Figure 2-3. HP COBOL II Subroutine Source File, DEMOCBSS
Sample HP FORTRAN 77 Program
_________________________________________________________________________
| |
| $CONTROL RANGE, CODE_OFFSETS, TABLES |
| PROGRAM RAIN_REPORT |
| INTEGER*2 NUMBER_YEARS, |
| 2 FIRST_YEAR, |
| 3 YEAR_INDEX, |
| 4 NUM_OF_MONTHS |
| REAL MONTH_TOTALS(60) |
| 100 PRINT *,'ENTER THE FIRST YEAR YOU WISH TO REPORT ON: ' |
| READ (5,*) FIRST_YEAR |
| IF ((FIRST_YEAR .LT. 1950).OR.(FIRST_YEAR .GT. 1988)) THEN |
| GOTO 100 |
| ENDIF |
| 110 PRINT *,'ENTER THE # OF YEARS YOU WISH TO CONSIDER (1-5): '|
| READ (5,*) NUMBER_YEARS |
| IF ((NUMBER_YEARS .LT. 1).OR.(NUMBER_YEARS .GT. 5)) THEN |
| GOTO 110 |
| ENDIF |
| YEAR_INDEX = (FIRST_YEAR - 1950) * 12 |
| NUM_OF_MONTHS = NUMBER_YEARS * 122 |
| CALL LOADMT (YEAR_INDEX, NUM_OF_MONTHS, MONTH_TOTALS) |
| PRINT *,'PROGRAM ENDS' |
| STOP |
| END |
| |
| SUBROUTINE LOADMT (YEAR_INDEX, NUM_OF_MONTHS, MONTH_TOTALS) |
| INTEGER*2 YEAR_INDEX, |
| 2 NUM_OF_MONTHS, |
| 3 TABLE_INDEX |
| REAL MONTH_TOTALS(60), |
| 2 HOLD_RAINFALL |
| OPEN (UNIT=10, FILE='RAINFALL.pub.sys') |
| DO I=1, YEAR_INDEX |
| READ (10,*) HOLD_RAINFALL |
| END DO |
| DO TABLE_INDEX = 1,NUM_OF_MONTHS |
| READ (UNIT=10, FMT=10, END=900) HOLD_RAINFALL |
| MONTH_TOTALS(TABLE_INDEX) = HOLD_RAINFALL |
| END DO |
| 900 RETURN |
| END |
_________________________________________________________________________
Figure 2-4. HP FORTRAN 77 Main Source File, DEMOFS
Sample HP Pascal Program
____________________________________________________________________________
| |
| $RANGE ON, CODE_OFFSETS ON, TABLES ON$ |
| program RainReport (INPUT, OUTPUT, RainFall); |
| |
| type |
| YearType = 1900..2000; |
| NumYearsType = 0..200; |
| MonthTotalType = REAL; |
| ArrayType = ARRAY [1..60] of MonthTotalType; |
| |
| var |
| NumYears : NumYearsType; |
| FirstYear : YearType; |
| YearIndex : INTEGER; |
| NumOfMonths : INTEGER; |
| MonthTable : ArrayType; |
| RainFall : TEXT; |
| |
| procedure GetInput; |
| { |
| This procedure prompts the user for the initial year and number of |
| years for the report. It also checks to see that the year and number|
| of years are within range. |
| } |
| const |
| YearPrompt = 'Enter the first year on which to report: '; |
| NumYearsPrompt = 'Enter the # of years to consider (1 - 5): '; |
| |
| procedure GetFirstYear; |
| begin {GetFirstYear statements}; |
| writeln (OUTPUT); |
| prompt (OUTPUT, YearPrompt); |
| readln (INPUT, FirstYear); |
| IF (FirstYear < 1950) or (FirstYear > 1988) THEN |
| GetFirstYear; |
| end {GetFirstYear statements}; |
____________________________________________________________________________
Figure 2-5. HP Pascal Main Source File, DEMOPS
__________________________________________________________________________
| |
| procedure GetNumYears; |
| begin {procedure GetNumYears statements}; |
| writeln (OUTPUT); |
| prompt (OUTPUT, NumYearsPrompt); |
| readln (INPUT, NumYears); |
| IF (NumYears < 1) or (NumYears > 5) THEN |
| GetNumYears; |
| end; |
| |
| begin {level 1 procedure}; |
| GetFirstYear; |
| GetNumYears; |
| YearIndex := (FirstYear - 1950) * 12; |
| NumOfMonths := NumYears * 122; |
| end {level 1 procedure}; |
| |
| procedure LoadMonthTable; |
| var |
| ArrayIndex : INTEGER; |
| HoldRainFall : INTEGER; |
| |
| begin {LoadMonthTable statements}; |
| HoldRainFall := 0; |
| reset (RainFall, 'RAINFALL.pub.sys'); |
| FOR ArrayIndex := 1 to YearIndex DO |
| { |
| This loop will perform dummy reads to get the file to the start|
| of the requested data. |
| } |
| readln (RainFall, HoldRainFall); |
| FOR ArrayIndex := 1 to NumOfMonths DO |
| begin {FOR loop} |
| readln (RainFall, HoldRainFall); |
| MonthTable[ArrayIndex] := HoldRainFall / 100 |
| end {FOR loop} |
| end {LoadMonthTable statements}; |
| |
| begin {main program} |
| GetInput; |
| LoadMonthTable |
| end {of program}. |
__________________________________________________________________________
Figure 2-5. Pascal Main Source File, DEMOPS (Continued)
Sample HP C Program
________________________________________________________________________________
| |
| #include <stdio.h> |
| |
| #define YEAR_PROMPT "\nEnter the first year on which to report: " |
| #define NUM_YEARS_PROMPT "\nEnter the # of years to consider (1 - 5): "|
| |
| typedef int year_type; |
| typedef int num_years_type; |
| typedef double month_total_type; |
| typedef month_total_type array_type[60]; |
| |
| num_years_type num_years; |
| year_type first_year; |
| int year_index; |
| int num_of_months; |
| array_type month_table; |
| FILE *rain_fall, |
| *fopen(); |
| |
| void get_first_year() |
| { |
| printf (YEAR_PROMPT); |
| scanf ("%d", &first_year); |
| if ((first_year < 1950) || (first_year > 1988)) |
| get_first_year(); |
| } |
| |
| void get_num_years() |
| { |
| printf (NUM_YEARS_PROMPT); |
| scanf ("%d", &num_years); |
| if ((num_years < 1) || (num_years > 5)) |
| get_num_years(); |
| } |
________________________________________________________________________________
Figure 2-6. C Main Source File, DEMOCS
__________________________________________________________________________________
| |
| void get_input() |
| { |
| /* |
| * This function prompts the user for the initial year and number of |
| * years for the report. It also checks to see that the year and number|
| * of years are within range. |
| */ |
| get_first_year(); |
| get_num_years(); |
| year_index = (first_year - 1950) * 12; |
| num_of_months = num_years * 122; |
| } |
| |
| void load_month_table() |
| { |
| int array_index; |
| int hold_rain_fall = 0; |
| |
| rain_fall = fopen("RAINFALL.pub.sys", "r"); |
| /* This loop will perform dummy reads to get the file to the start |
| * of the requested data. |
| */ |
| for (array_index = 1; array_index <= year_index; array_index++) |
| fscanf (rain_fall, "%d", &hold_rain_fall); |
| for (array_index = 1; array_index <= num_of_months; array_index++) { |
| fscanf (rain_fall, "%d", &hold_rain_fall); |
| month_table[array_index] = hold_rain_fall / 100; |
| } |
| } |
| |
| main() |
| { |
| get_input(); |
| load_month_table(); |
| } |
__________________________________________________________________________________
Figure 2-6. C Main Source File, DEMOCS (Continued)