home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / clarion / ctrlform.zip / CTRLFORM.MDL next >
Text File  |  1991-10-21  |  10KB  |  183 lines

  1. *CTRLFORM***************************************************************************
  2. @PROCNAME    PROCEDURE
  3. !!!
  4. !!!
  5. !!! Control form model file modification  -- NETWORK model
  6. !!!
  7. !!!  Batch 218A
  8. !!!
  9. !!!  The CTRLFORM model file mod. uses the network model form procedure
  10. !!!  to handle a 1 record control file.  The form takes into account
  11. !!!  the memory table that must be used to check for other stations
  12. !!!  making a change to the record.   Also, error checking is done
  13. !!!  on the GET to the file incase the record is held or is not
  14. !!!  in the file.
  15. !!!
  16. !!!
  17. SCREEN       SCREEN       PRE(SCR),@SCREENOPT
  18.                           @PAINTS
  19.                           @STRINGS
  20.                           @VARIABLES
  21.                           ENTRY,USE(?FIRST_FIELD)
  22.                           @FIELDS
  23.                           @PAUSE
  24.                           ENTRY,USE(?LAST_FIELD)
  25.                           PAUSE(''),USE(?DELETE_FIELD)
  26.              .
  27. TABLE        TABLE,PRE(SAV)
  28. SAVE_RECORD    GROUP;BYTE,DIM(SIZE(@PRE:RECORD)).
  29. SAVE_MEMO      GROUP;BYTE,DIM(SIZE(@MEMO)).
  30.              .
  31.  
  32. @SECONDDEF                                        !SECONDARY FILES SAVE AREA
  33.  
  34.   EJECT
  35.   CODE
  36.   OPEN(SCREEN)                                   !OPEN THE SCREEN
  37.   SETCURSOR                                      !TURN OFF ANY CURSOR
  38.   hold(@filename,.10)          !!! hold the record
  39.   get(@filename,1)             !!! get the first record from the file
  40.   if errorcode() = 43          !!! it's already held
  41.        recover(120)            !!! arm recovery process
  42.        hold(@filename)         !!! hold the record indefinitely
  43.        get(@filename,1)        !!! and get the file
  44.        recover                 !!! dis-arm recovery
  45.   .
  46.   if errorcode()               !!! is it there
  47.           action = 1           !!! no - let's add it then
  48.      else
  49.           action = 2           !!! Yes, let's change it
  50.   .
  51.   SAVE_RECORD = @PRE:RECORD                      !SAVE THE ORIGINAL
  52.   SAVE_MEMO   = @MEMO                            !SAVE THE ORIGINAL
  53.   ADD(TABLE,1)                                   !STORE IN MEMORY TABLE
  54.   @SETUP                                         !CALL SETUP PROCEDURE
  55.   DISK_ACTN# = ACTION                            !  SET ACTION FOR DISK WRITE
  56.   DISPLAY                                        !DISPLAY THE FIELDS
  57.  
  58.   EXECUTE DISK_ACTN#                             !SET THE CURRENT RECORD POINTER
  59.     POINTER# = 0                                 !  NO RECORD FOR ADD
  60.     POINTER# = POINTER(@FILENAME)                !  CURRENT RECORD FOR CHANGE
  61.     POINTER# = POINTER(@FILENAME)                !  CURRENT RECORD FOR CHANGE
  62.   .
  63.   ACTION# = ACTION                               !STORE REQUIRED ACTION
  64.   LOOP                                           !LOOP THRU ALL THE FIELDS
  65.     MEM:MESSAGE = CENTER(MEM:MESSAGE)            !DISPLAY ACTION MESSAGE
  66.     DO CALCFIELDS                                !CALCULATE DISPLAY FIELDS
  67.     ALERT                                        !RESET ALERTED KEYS
  68.     ALERT(ACCEPT_KEY)                            !ALERT SCREEN ACCEPT KEY
  69.     ALERT(REJECT_KEY)                            !ALERT SCREEN REJECT KEY
  70.     @ALERT                                       !ALERT HOT KEY
  71.     ACCEPT                                       !READ A FIELD
  72.     @CHECKHOT                                    !ON HOT KEY, CALL PROCEDURE
  73.     IF KEYCODE() = REJECT_KEY THEN BREAK.        !RETURN ON SCREEN REJECT KEY
  74.     EXECUTE ACTION                               !SET MESSAGE
  75.       MEM:MESSAGE = 'Record will be Added'       !
  76.       MEM:MESSAGE = 'Record will be Changed'     !
  77.       MEM:MESSAGE = 'Press Enter to Delete'      !
  78.     .
  79.     IF KEYCODE() = ACCEPT_KEY                    !ON SCREEN ACCEPT KEY
  80.       UPDATE                                     !  MOVE ALL FIELDS FROM SCREEN
  81.       SELECT(?)                                  !  START WITH CURRENT FIELD
  82.       SELECT                                     !  EDIT ALL FIELDS
  83.       CYCLE                                      !  GO TO TOP OF LOOP
  84.     .
  85.     CASE FIELD()                                 !JUMP TO FIELD EDIT ROUTINE
  86.     OF ?FIRST_FIELD                              !FROM THE FIRST FIELD
  87.       IF KEYCODE() = ESC_KEY THEN BREAK.         !  RETURN ON ESC KEY
  88.       IF ACTION = 3 THEN SELECT(?DELETE_FIELD).!    OR CONFIRM FOR DELETE
  89.  
  90.     @EDITS                                       !EDIT ROUTINES GO HERE
  91.     OF ?LAST_FIELD                               !FROM THE LAST FIELD
  92.       IF KEYCODE() = 0                           !IF IN AUTO SELECT MODE
  93.         DO CALCFIELDS                            !  DO CALCULATIONS
  94.         SELECT(?)                                !  TURN IT OFF
  95.       .
  96.       IF ACTION = 2 OR ACTION = 3                !IF UPDATING RECORD
  97.         SAVE_RECORD = @PRE:RECORD                !  SAVE CURRENT CHANGES
  98.         SAVE_MEMO   = @MEMO                      !  SAVE CURRENT CHANGES
  99.         ADD(TABLE,2)                             !  STORE IN MEMORY TABLE
  100.         GET(TABLE,1)                             !  RETRIEVE ORIGINAL RECORD
  101.         HOLD(@FILENAME,.10)                      !  TRY TO HOLD FILE
  102.         GET(@FILENAME,POINTER#)                  !  RE-READ SAME RECORD
  103.         IF ERRORCODE() = 43                      !  IF RECORD WAS ALREADY HELD
  104.           RECOVER(120)                           !    ARM RECOVER
  105.           HOLD(@FILENAME)                        !    HOLD FILE
  106.           GET(@FILENAME,POINTER#)                !    RE-READ SAME RECORD
  107.           RECOVER()                              !    DISARM RECOVER
  108.         .
  109.         IF ERRORCODE() = 35                      !  IF RECORD WAS DELETED
  110.           IF DISK_ACTN# = 2                      !  IF TRYING TO UPDATE
  111.              DISK_ACTN# = 1                      !    THEN ADD IT BACK
  112.           ELSE                                   !
  113.              RELEASE(@FILENAME)                  !  RELEASE FILE
  114.              ACTION = 0                          !  TURN OFF ACTION
  115.           .
  116.         ELSIF |                                  !OTHERWISE
  117.           @MEMO <> SAVE_MEMO OR |                !  IF IT HAS BEEN CHANGED
  118.           @PRE:RECORD <> SAVE_RECORD             !    BY ANOTHER STATION
  119.           MEM:MESSAGE = 'CHANGED BY ANOTHER STATION' !INFORM USER
  120.           SELECT(2)                              !  GO BACK TO TOP OF FORM
  121.           BEEP                                   !  SOUND ALARM
  122.           RELEASE(@FILENAME)                     !  RELEASE FILE
  123.           SAVE_RECORD = @PRE:RECORD              !  SAVE RECORD
  124.           SAVE_MEMO = @MEMO                      !  SAVE MEMO
  125.           DISPLAY                                !  DISPLAY THE FIELDS
  126.           PUT(TABLE)                             !  FREE SAVED CHANGES
  127.           CYCLE                                  !  AND CONTINUE
  128.         .
  129.         GET(TABLE,2)                             !  READ CURRENT (CHANGED) REC
  130.         @PRE:RECORD = SAVE_RECORD                !  MOVE RECORD
  131.         @MEMO = SAVE_MEMO                        !  MOVE MEMO
  132.         DELETE(TABLE)                            !  DELETE MEMORY TABLE ITEM
  133.       .
  134.       EXECUTE DISK_ACTN#                         !  UPDATE THE FILE
  135.         ADD(@FILENAME)                           !    ADD NEW RECORD
  136.         PUT(@FILENAME)                           !    CHANGE EXISTING RECORD
  137.         DELETE(@FILENAME)                        !    DELETE EXISTING RECORD
  138.       .
  139.       IF ERRORCODE() = 40                        !  DUPLICATE KEY ERROR
  140.         MEM:MESSAGE = ERROR()                    !    DISPLAY ERR MESSAGE
  141.         SELECT(2)                                !    POSITION TO TOP OF FORM
  142.         IF ACTION = 2 THEN RELEASE(@FILENAME). !      RELEASE HELD RECORD
  143.         CYCLE                                    !    GET OUT OF EDIT LOOP
  144.       ELSIF ERROR()                              !  CHECK FOR UNEXPECTED ERROR
  145.         EXECUTE ACTION                           !    BUILD AN ERROR MESSAGE
  146.           ERROR" = 'Error: ' & ERROR() & ' ' |   !      FOR ADDING
  147.                    & 'Adding to @FILENAME'
  148.           ERROR" = 'Error: ' & ERROR() & ' ' |   !      FOR CHANGE
  149.                    & 'Changing @FILENAME'
  150.           ERROR" = 'Error: ' & ERROR() & ' ' |   !      FOR DELETING
  151.                    & 'Deleting from @FILENAME'
  152.         .
  153.         STOP(ERROR")                             !    HALT EXECUTION
  154.       .
  155.       @SECONDPUT                                 !  UPDATE SECONDARY FILES
  156.       IF ACTION = 1 THEN POINTER# = POINTER(@FILENAME). !POINT TO RECORD
  157.       SAVE_RECORD = @PRE:RECORD                  !  NEW ORIGINAL
  158.       SAVE_MEMO = @MEMO                          !  NEW ORIGINAL
  159.       ACTION = ACTION#                           !  RETRIEVE ORIGINAL OPERATION
  160.       @NEXTFORM                                  !  CALL NEXT FORM PROCEDURE
  161.       ACTION = 0                                 !  SET ACTION TO COMPLETE
  162.       BREAK                                      !  AND RETURN TO CALLER
  163.  
  164.     OF ?DELETE_FIELD                             !FROM THE DELETE FIELD
  165.       IF KEYCODE() = ENTER_KEY |                 !  ON ENTER KEY
  166.       OR KEYCODE() = ACCEPT_KEY                  !  OR CTRL-ENTER KEY
  167.         SELECT(?LAST_FIELD)                      !    DELETE THE RECORD
  168.       ELSE                                       !  OTHERWISE
  169.         BEEP                                     !    BEEP AND ASK AGAIN
  170.   . . .
  171.   FREE(TABLE)                                    !  RELEASE MEMORY TABLE
  172.   RETURN                                         !  AND RETURN TO CALLER
  173.  
  174. CALCFIELDS   ROUTINE
  175.   IF FIELD() > ?FIRST_FIELD                      !BEYOND FIRST_FIELD?
  176.     IF KEYCODE() = 0 AND SELECTED() > FIELD() THEN EXIT. !GET OUT IF NOT NONSTOP
  177.   .
  178.   @LOOKUPS                                       !DISPLAY FROM OTHER FILES
  179.   @SHOW                                          !DISPLAY STRING VARIABLES
  180.   @COMPUTE                                       !DISPLAY COMPUTED FIELDS
  181.   @RESULT                                        !MOVE RESULTING VALUES
  182.  
  183.