[an error occurred while processing this directive]

HP OpenVMS Systems Documentation

Content starts here

HP COBOL
Reference Manual


Previous Contents Index

6.8.39 TERMINATE

Function

The TERMINATE statement causes the Report Writer Control System (RWCS) to complete the processing of the specified report.


report-name

names a report defined by a Report Description entry in the Report Section of the Data Division.

General Rules

  1. If the TERMINATE statement includes more than one report-name, the statement executes as if there were a separate TERMINATE statement for each report-name.
  2. The program cannot execute a TERMINATE statement unless an INITIATE statement was executed before the TERMINATE statement for that report, and the program did not already execute a TERMINATE statement for that report.
  3. If the program did not execute a GENERATE statement, the execution of a TERMINATE statement does not cause the RWCS to produce any of its report groups or perform any of the related processing.
  4. The TERMINATE statement causes the RWCS to:
    • Produce all CONTROL FOOTING report groups beginning with the minor CONTROL FOOTING report group.
    • Produce the REPORT FOOTING report group.

    The RWCS makes the prior set of control data item values available to these two report groups and to any associated USE procedure. This action simulates a control break at the most major level.
  5. The RWCS automatically processes the PAGE HEADING and PAGE FOOTING report groups, if present, when it must advance the report to a new page to present a CONTROL HEADING, DETAIL, or CONTROL FOOTING report group.
  6. The TERMINATE statement does not automatically close a report file; the program must close the file. The program must terminate the report before the CLOSE statement can close the report file.

Additional Reference

Section 6.8.42, USE statement.

6.8.40 UNLOCK

Function

The UNLOCK statement removes a record lock from the current record or from all locked records in the file. On Alpha and I64 systems, the X/Open standard UNLOCK statement always removes the record lock from all locked records in the file.


file-name

is the name of a sequential, relative, or indexed file described in the Data Division.

Syntax Rules

  1. For Format 1, if the UNLOCK statement does not include the RECORD or the ALL RECORDS option, the singular RECORD option is the default. (However, see General Rule 3.)
  2. For Format 2, the RECORD and RECORDS options have the same effect: to unlock all currently locked records. This behavior also is the default if neither option is specified.

General Rules

  1. The first access stream to lock a record owns the record lock for that record.
  2. Only the owner of a record lock can unlock the record.
  3. For Format 1, implicitly (by default) or explicitly specifying the RECORD option unlocks the current record. Therefore, you must specify ALL RECORDS explicitly to unlock all the record locks held on file-name.
    The single exception to this rule for Format 1 is that for indexed files the RECORD option (implicitly or explicitly) is unsupported on Tru64 UNIX systems. The ALL RECORDS phrase is assumed. <>
  4. For Format 2, whether you specify the RECORD option or the RECORDS option, the effect is the same: to unlock all record locks held on file-name by the current access stream.
  5. If an access stream attempts to unlock a record (or records) in a file containing no record locks, the statement is considered successful and execution resumes at the statement following the UNLOCK statement.
  6. Because both formats of the UNLOCK statement include the UNLOCK RECORD and UNLOCK forms, the compiler determines whether to interpret these forms of the statement as X/Open standard (on Alpha and I64) or Hewlett-Packard standard as follows:
    • If on Alpha and I64 X/Open standard syntax (LOCK MODE or WITH (NO) LOCK) has been specified for file-name prior to the UNLOCK statement, the compiler interprets the statement according to the X/Open standard.
    • If Hewlett-Packard standard syntax (LOCK-HOLDING, ALLOWING, or REGARDLESS) has been specified for file-name prior to the UNLOCK statement, the compiler interprets the statement according to the Hewlett-Packard standard.
    • If no file-sharing syntax (LOCK-HOLDING, ALLOWING, REGARDLESS, LOCK MODE, or WITH [NO] LOCK) has been specified for file-name prior to the UNLOCK statement, then the compiler uses the /STANDARD=[NO]XOPEN qualifier on OpenVMS Alpha and I64 (or the Tru64 UNIX equivalent -std [no]xopen flag) to determine whether the START statement is interpreted as X/Open or Hewlett-Packard standard: a setting of xopen selects the X/Open standard, whereas a setting of noxopen selects the Hewlett-Packard standard.

    Any subsequent I-O locking syntax for the same file connector in your program must be consistent: X/Open standard locking and Hewlett-Packard standard locking (implicit or explicit) cannot be mixed for the same file connector.

Technical Notes

  • UNLOCK statement execution can result in these FILE STATUS data item values:
    File
    Status
    File
    Organization
    Access
    Method
    Meaning
    00 All All Unlock is successful
    93 All All No current record
    94 All All File not open, or incompatible open mode
    30 All All All other permanent errors

Additional References

Hewlett-Packard Standard Examples

These examples assume only one access stream for the image. The following examples refer to this partial program:


CONFIGURATION SECTION.
FILE-CONTROL.
    SELECT MASTER-FILE ASSIGN TO "CLIENT.DAT"
    ORGANIZATION IS INDEXED
    ACCESS MODE IS DYNAMIC
    RECORD KEY IS MASTER-KEY
    FILE STATUS IS FILE-STAT.
I-O-CONTROL.

*
* This APPLY clause is required syntax for manual record locking
*

    APPLY LOCK-HOLDING ON MASTER-FILE.

DATA DIVISION.
FD  MASTER-FILE
    LABEL RECORDS STANDARD.
01  MASTER-RECORD.
     .
     .
     .
PROCEDURE DIVISION.
A100-BEGIN.

*
*  The ALLOWING phrase enables file sharing
*

    OPEN I-O MASTER-FILE ALLOWING ALL.
     .
     .
     .
A900-END-OF-JOB.
  1. Unlocking the record lock on the current record by taking the default RECORD option:


         READ MASTER-FILE KEY IS MASTER-KEY
              ALLOWING NO OTHERS.
         REWRITE MASTER-RECORD ALLOWING NO OTHERS.
         UNLOCK MASTER-FILE.
    
  2. Explicitly unlocking the record lock on the current record:


         READ MASTER-FILE KEY IS MASTER-KEY
              ALLOWING NO OTHERS.
         .
         .
         .
         UNLOCK MASTER-FILE RECORD.
    
  3. Unlocking all records in MASTER-FILE:


         PERFORM A100-READ-MASTER UNTIL
                   MASTER-KEY = ID-KEY
                OR
                   MASTER-KEY > ID-KEY.
         .
         .
         .
         UNLOCK MASTER-FILE ALL RECORDS.
         .
         .
         .
     A100-READ-MASTER.
         READ MASTER-FILE ALLOWING NO OTHERS.
    

X/Open Standard Example (Alpha, I64)

The following example shows the use of X/Open standard syntax:


  SELECT employee-file ASSIGN TO "EMPFIL"
         ORGANIZATION IS INDEXED
         ACCESS MODE IS DYNAMIC
         RECORD KEY IS employee-id
         LOCK MANUAL LOCK ON MULTIPLE RECORDS
         FILE STATUS IS emp-stat.
   .
   .
   .
* The file is implicitly shareable via the SELECT specification.
    OPEN I-O employee-file.

    PERFORM UNTIL emp-stat = end-of-file
        READ employee-file NEXT RECORD
             WITH LOCK

        IF employee-job-code = peon-code
           PERFORM find-boss-record
        ENDIF
   .
   .
   .
        REWRITE employee-record

*   This will unlock this record and the boss's
*   record found earlier.

        UNLOCK employee-file RECORDS

     END-PERFORM.

FIND-BOSS-RECORD.
    START employee-file
          KEY > employee-job-code.
    READ employee-file NEXT WITH LOCK.


Previous Next Contents Index