      *==============================================================
      * Program that locks a record and then waits for input from
      * the operator.
      *
      * Call this program in two different sessions to see the effect.
      * Second program will typically get a error:
      *   'Unable to allocate a record in file' (RNX1218)
      * and the end user typically choses an unhelpful response.
      *==============================================================
      * Note: This is a poor technique because the record remains
      *       locked to all other users until the transaction is
      *       completed, which may be in a few seconds or after lunch.
      *
      *Note: Pgm reads by RRN for convenience. This is not a good
      *      idea is a production program.
      *
      *Note: DSPLY is use to simulate a display file interaction
      *      with the user.
      *
      *Note: QIWS/QCUSTCDT: believed to be on virtually all systems.
      *==============================================================

     H DEBUG(*YES) OPTION(*NODEBUGIO:*SRCSTMT:*NOUNREF)
     H DFTACTGRP(*NO) ACTGRP(*NEW)

     FQCUSTCDT  UF   E             DISK    USROPN EXTDESC('QIWS/QCUSTCDT')
     F                                     RECNO(RRN)
     F*                                    INFSR(*PSSR)

     D QCmdexc         PR                  EXTPGM('QCMDEXC')
     D  CMD                         512A
     D  lgth                         15P 5 const

     D RRN             s             10p 0 inz(10)
     D reply           S              1A   inz('*')
     D Cmd             S            512A

      /free
       *inlr = *on;

       // Set update file to a short wait time. Otherwise the file or
       // system default wait time applies.
       cmd = ' OVRDBF FILE(QCUSTCDT) TOFILE(QIWS/QCUSTCDT) WAITRCD(1)';
       QCMDEXC(cmd:512);
       open QCUSTCDT;

       chain RRN QCUSTCDT;

       if %found(QCUSTCDT);
         // Logic to update the record would be here.
         dsply 'Read for update' ' ' reply;
       else;
         // Logic for record not found would be here
         dsply 'Record not found' ' ' reply;
       endif;

       // === End of Program =========================================
       // Close file before returning
       close QCUSTCDT;
       return;

       // Often found in old programs. Uncomment INFSR(*PSSR) in the
       // F-SPEC to make this active.
       BEGSR *PSSR;
         dsply 'In the *PSSR' ' ' reply;
         dump(a);
       ENDSR '*CANCL';
