[Santa Clara University]
Department of Mathematics
and Computer Science

Math 169

COBOL Information

D. C. Smolarski, S.J.

[Return to Math 169 Homepage | Return to Supplement Listing Page]

Contents


COBOL on the Dec Alpha Server

  1. Create a source code (program) file using an editor of your choice (e.g., Emacs or other available VMS editor, such as LSE). The extension should be .COB

  2. SPECIAL CHARACTERISTICS
    1. In the ENVIRONMENT DIVISION, CONFIGURATION SECTION, both the SOURCE-COMPUTER and the OBJECT-COMPUTER should be VAX.
    2. In the ENVIRONMENT DIVISION, INPUT-OUTPUT SECTION, after SELECTing an internal file name, also list the ASSIGN command as in the following example:
      			SELECT INPUT-INFO
      				ASSIGN TO DSK.
      
    3. In the DATA DIVISION, FILE SECTION, after listing an internal file name, one should list additional information and associate the internal file name with the actual Alpha/VAX directory file name as follows:
      		FD	INPUT-INFO
      			LABEL RECORDS ARE STANDARD
      			VALUE OF ID IS "SAMPLE.INP"
      			DATA RECORD IS INPUT-LINE.
      		01	INPUT-LINE. 
      			...
      
      NOTE: Because of the VALUE OF ID line, the internal file name, "INPUT-INFO" is associated with the VAX directory file name "SAMPLE.INP".

  3. After the source code file is created (along with the input file), execution of the code is via the standard Alpha/VAX sequence of steps. E.g.,
    			[JDOE]> COBOL MPCOB
    			[JDOE]> LINK MPCOB
    			[JDOE]> RUN MPCOB
    
    You may also use EXECUTE MPCOB to combine the above 3 steps into one.

Sample COBOL Source Code

     
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
AUTHOR. DENNIS SMOLARSKI SJ.
DATE-WRITTEN. SEPTEMBER, 1978

*	THE PROGRAM IS STRAIGHT FORWARD.  IT READS ONE LINE AT A
* TIME AND SCANS IT.  DURING THE SCAN A COUNTER IS KEPT OF THE 
* UNMATCHED LEFT PARENS.  IF THE COUNT GOES NEGATIVE THE LOOP IS
* IMMEDIATELY TERMINATED, AND "NOT MATCHED" IS PRINTED.  OTHERWISE,
* A NON-ZERO COUNT AT THE END INDICATES NOT MATCHED.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. VAX.
OBJECT-COMPUTER. VAX.

INPUT-OUTPUT SECTION.
FILE-CONTROL.
	SELECT PARENS-IN
		ASSIGN TO DSK.
	SELECT PARENS-OUT
		ASSIGN TO DSK.

DATA DIVISION.

FILE SECTION.
FD	PARENS-IN 
	LABEL RECORDS ARE STANDARD
	VALUE OF ID IS "SAMPAR.INP"
	DATA RECORD IS INPUT-LINE.
01	INPUT-LINE.
	02	INPUT-CHARACTER OCCURS 80 TIMES INDEXED BY IN-PTR,
			PIC IS X.
FD	PARENS-OUT
	LABEL RECORDS ARE STANDARD
	VALUE OF ID IS "SAMPAR.OUT"
	DATA RECORD IS OUTPUT-LINE.
01	OUTPUT-LINE.
	02	OUTPUT-CHARACTER OCCURS 80 TIMES INDEXED BY OUT-PTR,
			PIC IS X.

WORKING-STORAGE SECTION.
01	ENDFILE
		PIC IS 9, USAGE IS COMPUTATIONAL, VALUE IS ZERO.
01	MATCHED-PARENS.
	02	MATCHED-OUTPUT PIC X(7), VALUE "MATCHED".
	02	FILLER PIC X(33), VALUE SPACES.
01	NOT-MATCHED-PARENS.
	02	NOT-MATCHED-OUTPUT PIC X(11), VALUE "NOT MATCHED".
	02	FILLER PIC X(69), VALUE SPACES.
01	LEFT-PARENS PIC X, VALUE "(".
01	RIGHT-PARENS PIC X, VALUE ")".
01	PARENS-COUNT PIC S999, USAGE IS COMPUTATIONAL, VALUE IS ZERO.

PROCEDURE DIVISION.

MAIN-CODE.
	OPEN INPUT PARENS-IN; OUTPUT PARENS-OUT.
	PERFORM READ-LINES UNTIL ENDFILE IS EQUAL TO 1.
	CLOSE PARENS-IN, PARENS-OUT.
	STOP RUN.

READ-LINES.
	MOVE SPACES TO INPUT-LINE.
	READ PARENS-IN
		AT END MOVE 1 TO ENDFILE.
	IF ENDFILE EQUAL TO ZERO
		PERFORM CHECK-PARENS.

CHECK-PARENS.
	MOVE INPUT-LINE TO OUTPUT-LINE.
	WRITE OUTPUT-LINE.
	COMPUTE PARENS-COUNT = ZERO.
	PERFORM COUNT-PARENS VARYING IN-PTR FROM 1 BY 1
		UNTIL IN-PTR > 80 OR PARENS-COUNT < ZERO.
	IF PARENS-COUNT IS NOT EQUAL TO 0
		MOVE NOT-MATCHED-PARENS TO OUTPUT-LINE
	ELSE
		MOVE MATCHED-PARENS TO OUTPUT-LINE.
	WRITE OUTPUT-LINE.

COUNT-PARENS.
	IF INPUT-CHARACTER (IN-PTR) IS EQUAL TO LEFT-PARENS
		COMPUTE PARENS-COUNT = 1 + PARENS-COUNT
	ELSE
		IF INPUT-CHARACTER (IN-PTR) IS EQUAL TO RIGHT-PARENS
			COMPUTE PARENS-COUNT = PARENS-COUNT - 1.

Sample Execution


[DSMOLARSKI]> photo

Logging session output to file PHOTO.LOG
Type LOGOUT when you are finished.
[DSMOLARSKI]> type sampar.inp
(PLUS 3 5)
)(
((((()))))
()()(((()()())))
((())
(())))
HAVE A NICE DAY
[DSMOLARSKI]> cobol samcob
[DSMOLARSKI]> link samcob
[DSMOLARSKI]> run samcob
[DSMOLARSKI]> type sampar.out
(PLUS 3 5)
MATCHED
)(
NOT MATCHED
((((()))))
MATCHED
()()(((()()())))
MATCHED
((())
NOT MATCHED
(())))                                                                     
NOT MATCHED
HAVE A NICE DAY
MATCHED
[DSMOLARSKI]> pop
  Process DSMOLARSKI_1 logged out at 21-JAN-1988 22:24:11.85


My email address is dsmolarski@math.scu.edu

This page last updated 25 March 2000.