home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
clarion
/
ctrlform.zip
/
CTRLFORM.MDL
next >
Wrap
Text File
|
1991-10-21
|
10KB
|
183 lines
*CTRLFORM***************************************************************************
@PROCNAME PROCEDURE
!!!
!!!
!!! Control form model file modification -- NETWORK model
!!!
!!! Batch 218A
!!!
!!! The CTRLFORM model file mod. uses the network model form procedure
!!! to handle a 1 record control file. The form takes into account
!!! the memory table that must be used to check for other stations
!!! making a change to the record. Also, error checking is done
!!! on the GET to the file incase the record is held or is not
!!! in the file.
!!!
!!!
SCREEN SCREEN PRE(SCR),@SCREENOPT
@PAINTS
@STRINGS
@VARIABLES
ENTRY,USE(?FIRST_FIELD)
@FIELDS
@PAUSE
ENTRY,USE(?LAST_FIELD)
PAUSE(''),USE(?DELETE_FIELD)
.
TABLE TABLE,PRE(SAV)
SAVE_RECORD GROUP;BYTE,DIM(SIZE(@PRE:RECORD)).
SAVE_MEMO GROUP;BYTE,DIM(SIZE(@MEMO)).
.
@SECONDDEF !SECONDARY FILES SAVE AREA
EJECT
CODE
OPEN(SCREEN) !OPEN THE SCREEN
SETCURSOR !TURN OFF ANY CURSOR
hold(@filename,.10) !!! hold the record
get(@filename,1) !!! get the first record from the file
if errorcode() = 43 !!! it's already held
recover(120) !!! arm recovery process
hold(@filename) !!! hold the record indefinitely
get(@filename,1) !!! and get the file
recover !!! dis-arm recovery
.
if errorcode() !!! is it there
action = 1 !!! no - let's add it then
else
action = 2 !!! Yes, let's change it
.
SAVE_RECORD = @PRE:RECORD !SAVE THE ORIGINAL
SAVE_MEMO = @MEMO !SAVE THE ORIGINAL
ADD(TABLE,1) !STORE IN MEMORY TABLE
@SETUP !CALL SETUP PROCEDURE
DISK_ACTN# = ACTION ! SET ACTION FOR DISK WRITE
DISPLAY !DISPLAY THE FIELDS
EXECUTE DISK_ACTN# !SET THE CURRENT RECORD POINTER
POINTER# = 0 ! NO RECORD FOR ADD
POINTER# = POINTER(@FILENAME) ! CURRENT RECORD FOR CHANGE
POINTER# = POINTER(@FILENAME) ! CURRENT RECORD FOR CHANGE
.
ACTION# = ACTION !STORE REQUIRED ACTION
LOOP !LOOP THRU ALL THE FIELDS
MEM:MESSAGE = CENTER(MEM:MESSAGE) !DISPLAY ACTION MESSAGE
DO CALCFIELDS !CALCULATE DISPLAY FIELDS
ALERT !RESET ALERTED KEYS
ALERT(ACCEPT_KEY) !ALERT SCREEN ACCEPT KEY
ALERT(REJECT_KEY) !ALERT SCREEN REJECT KEY
@ALERT !ALERT HOT KEY
ACCEPT !READ A FIELD
@CHECKHOT !ON HOT KEY, CALL PROCEDURE
IF KEYCODE() = REJECT_KEY THEN BREAK. !RETURN ON SCREEN REJECT KEY
EXECUTE ACTION !SET MESSAGE
MEM:MESSAGE = 'Record will be Added' !
MEM:MESSAGE = 'Record will be Changed' !
MEM:MESSAGE = 'Press Enter to Delete' !
.
IF KEYCODE() = ACCEPT_KEY !ON SCREEN ACCEPT KEY
UPDATE ! MOVE ALL FIELDS FROM SCREEN
SELECT(?) ! START WITH CURRENT FIELD
SELECT ! EDIT ALL FIELDS
CYCLE ! GO TO TOP OF LOOP
.
CASE FIELD() !JUMP TO FIELD EDIT ROUTINE
OF ?FIRST_FIELD !FROM THE FIRST FIELD
IF KEYCODE() = ESC_KEY THEN BREAK. ! RETURN ON ESC KEY
IF ACTION = 3 THEN SELECT(?DELETE_FIELD).! OR CONFIRM FOR DELETE
@EDITS !EDIT ROUTINES GO HERE
OF ?LAST_FIELD !FROM THE LAST FIELD
IF KEYCODE() = 0 !IF IN AUTO SELECT MODE
DO CALCFIELDS ! DO CALCULATIONS
SELECT(?) ! TURN IT OFF
.
IF ACTION = 2 OR ACTION = 3 !IF UPDATING RECORD
SAVE_RECORD = @PRE:RECORD ! SAVE CURRENT CHANGES
SAVE_MEMO = @MEMO ! SAVE CURRENT CHANGES
ADD(TABLE,2) ! STORE IN MEMORY TABLE
GET(TABLE,1) ! RETRIEVE ORIGINAL RECORD
HOLD(@FILENAME,.10) ! TRY TO HOLD FILE
GET(@FILENAME,POINTER#) ! RE-READ SAME RECORD
IF ERRORCODE() = 43 ! IF RECORD WAS ALREADY HELD
RECOVER(120) ! ARM RECOVER
HOLD(@FILENAME) ! HOLD FILE
GET(@FILENAME,POINTER#) ! RE-READ SAME RECORD
RECOVER() ! DISARM RECOVER
.
IF ERRORCODE() = 35 ! IF RECORD WAS DELETED
IF DISK_ACTN# = 2 ! IF TRYING TO UPDATE
DISK_ACTN# = 1 ! THEN ADD IT BACK
ELSE !
RELEASE(@FILENAME) ! RELEASE FILE
ACTION = 0 ! TURN OFF ACTION
.
ELSIF | !OTHERWISE
@MEMO <> SAVE_MEMO OR | ! IF IT HAS BEEN CHANGED
@PRE:RECORD <> SAVE_RECORD ! BY ANOTHER STATION
MEM:MESSAGE = 'CHANGED BY ANOTHER STATION' !INFORM USER
SELECT(2) ! GO BACK TO TOP OF FORM
BEEP ! SOUND ALARM
RELEASE(@FILENAME) ! RELEASE FILE
SAVE_RECORD = @PRE:RECORD ! SAVE RECORD
SAVE_MEMO = @MEMO ! SAVE MEMO
DISPLAY ! DISPLAY THE FIELDS
PUT(TABLE) ! FREE SAVED CHANGES
CYCLE ! AND CONTINUE
.
GET(TABLE,2) ! READ CURRENT (CHANGED) REC
@PRE:RECORD = SAVE_RECORD ! MOVE RECORD
@MEMO = SAVE_MEMO ! MOVE MEMO
DELETE(TABLE) ! DELETE MEMORY TABLE ITEM
.
EXECUTE DISK_ACTN# ! UPDATE THE FILE
ADD(@FILENAME) ! ADD NEW RECORD
PUT(@FILENAME) ! CHANGE EXISTING RECORD
DELETE(@FILENAME) ! DELETE EXISTING RECORD
.
IF ERRORCODE() = 40 ! DUPLICATE KEY ERROR
MEM:MESSAGE = ERROR() ! DISPLAY ERR MESSAGE
SELECT(2) ! POSITION TO TOP OF FORM
IF ACTION = 2 THEN RELEASE(@FILENAME). ! RELEASE HELD RECORD
CYCLE ! GET OUT OF EDIT LOOP
ELSIF ERROR() ! CHECK FOR UNEXPECTED ERROR
EXECUTE ACTION ! BUILD AN ERROR MESSAGE
ERROR" = 'Error: ' & ERROR() & ' ' | ! FOR ADDING
& 'Adding to @FILENAME'
ERROR" = 'Error: ' & ERROR() & ' ' | ! FOR CHANGE
& 'Changing @FILENAME'
ERROR" = 'Error: ' & ERROR() & ' ' | ! FOR DELETING
& 'Deleting from @FILENAME'
.
STOP(ERROR") ! HALT EXECUTION
.
@SECONDPUT ! UPDATE SECONDARY FILES
IF ACTION = 1 THEN POINTER# = POINTER(@FILENAME). !POINT TO RECORD
SAVE_RECORD = @PRE:RECORD ! NEW ORIGINAL
SAVE_MEMO = @MEMO ! NEW ORIGINAL
ACTION = ACTION# ! RETRIEVE ORIGINAL OPERATION
@NEXTFORM ! CALL NEXT FORM PROCEDURE
ACTION = 0 ! SET ACTION TO COMPLETE
BREAK ! AND RETURN TO CALLER
OF ?DELETE_FIELD !FROM THE DELETE FIELD
IF KEYCODE() = ENTER_KEY | ! ON ENTER KEY
OR KEYCODE() = ACCEPT_KEY ! OR CTRL-ENTER KEY
SELECT(?LAST_FIELD) ! DELETE THE RECORD
ELSE ! OTHERWISE
BEEP ! BEEP AND ASK AGAIN
. . .
FREE(TABLE) ! RELEASE MEMORY TABLE
RETURN ! AND RETURN TO CALLER
CALCFIELDS ROUTINE
IF FIELD() > ?FIRST_FIELD !BEYOND FIRST_FIELD?
IF KEYCODE() = 0 AND SELECTED() > FIELD() THEN EXIT. !GET OUT IF NOT NONSTOP
.
@LOOKUPS !DISPLAY FROM OTHER FILES
@SHOW !DISPLAY STRING VARIABLES
@COMPUTE !DISPLAY COMPUTED FIELDS
@RESULT !MOVE RESULTING VALUES