home *** CD-ROM | disk | FTP | other *** search
- //************************************************************************
- //
- // Copyright 1987-1992 Data Access Corporation, Miami FL, USA
- // All Rights reserved
- // DataFlex is a registered trademark of Data Access Corporation.
- //
- //
- // $Source: /u3/source.30/product/pkg/RCS/table.pkg,v $
- // $Revision: 1.1 $
- // $State: Exp $
- // $Author: james $
- // $Date: 1992/09/08 14:43:09 $
- // $Locker: $
- //
- // $Log: table.pkg,v $
- //Revision 1.1 1992/09/08 14:43:09 james
- //Initial revision
- //
- //Revision 1.26 92/07/02 18:18:21 lee
- //added guard in beginning/end_of_data for no items to prevent invalid item
- //refrerence.
- //
- //Revision 1.25 92/06/28 16:08:03 lee
- //added goto_top/bottom_row messages for keys: these do the same thing
- //as the recent top/bottom_of_panel message were doing. top/bottom_of_panel
- //now revert to superclass behavior: moves to first/last item on row.
- //beginning_of_data corrected to respect noSaveFlag (like it had been for a
- //short while).
- //
- //Revision 1.24 92/06/27 09:33:54 lee
- //child_wrapping corrected to handle table in ringing client. also using
- //recurseClient flag in inqure msgs.
- //
- //Revision 1.23 92/06/19 16:31:57 james
- //Last minute changes made to correct problem with
- //SWITCH_BACK
- //
- //Revision 1.22 92/06/17 23:57:27 lee
- //fixed various bugs in table: only validates on same row and during save
- //childwrapping moves to last enterable item when moving backward
- //request_delete disables validation during removal of row.
- //beginning/end_of panel moves to top/biottom row, same column
- //
- //Revision 1.21 92/06/10 06:09:10 lee
- //various fixes for bugs introduced during "overhaul"
- //
- //Revision 1.19 92/06/06 08:11:41 lee
- //complete overhaul of add-mode mechanism. lots and lots of changes!
- //
- //Revision 1.18 92/06/05 16:32:36 steve-l
- //altered set current_item occurrances to use set item false/true/2/3 instead,
- //in order to properly handle displayonly/noenter items on top-of-panel et al.
- //
- //Revision 1.17 92/06/03 15:20:57 steve-l
- //altered child_wrapping for proper dereferencing of new argument
- //
- //Revision 1.16 92/06/03 15:10:08 steve-l
- //altered child_wrapping for new argument
- //
- //Revision 1.15 92/06/01 17:58:07 steve-l
- //guarded REQUEST_SAVE behavior with server=0 | not(read-only(server))
- //
- //Revision 1.14 92/05/14 17:14:44 SWM
- //Updated Copyright slug.
- //
- //Revision 1.13 92/04/30 13:21:38 lee
- //altered add_or_remove_row to not delete the last row of the table
- //
- //Revision 1.12 92/04/28 14:45:08 lee
- //actually declared the noSaveFlag argument this time!
- //
- //Revision 1.11 92/04/28 14:32:08 lee
- //Added nosave flag to beginning_of data to allow initialize list to
- //not cause a save.
- //
- //Revision 1.10 92/04/24 15:41:59 lee
- //update_row now checks to see if there are any rows in the table before
- //checking to see if the row changed. this prevents an item number out of
- //range error.
- //
- //Revision 1.9 92/03/18 12:39:39 steve-l
- //altered all calls to vfind to perform a relate if successful]
- //
- //Revision 1.8 92/03/10 17:07:50 steve-l
- //CLEAR altered to just clear row instead of inserting blank row when the
- //row's recnum is already 0, e.g. the row was "remotely" deleted (e.g.
- //from a zoom)
- //
- //Revision 1.7 92/03/09 19:04:51 james
- //Added #CHKSUB directive to insure source
- //only compiled with correct revision of
- //compiler.
- //
- //Revision 1.6 92/03/05 15:43:35 steve-l
- //Request_Superfind changed to set ERR false before calling server and to
- //check err (with found) afterward, in case of non-file-boundary errors
- //
- //Revision 1.5 92/02/12 16:48:20 steve-l
- //row_changing altered to correct blank-row rotation problem
- //
- //Revision 1.4 92/01/13 11:20:28 james
- //Cleaned up header.
- //
- //Revision 1.3 91/11/26 09:19:35 steve-l
- //sparky
- //
-
- //************************************************************************/
-
- //************************************************************************
- // File Name: Table.Pkg
- // Creation Date: January 1, 1991
- // Modified Date: Apr 30, 1992
- // Author(s): Steven A. Lowe
- //
- // This module contains the Table class definition.
- //************************************************************************/
-
- #CHKSUB 1 1 // Verify the UI subsystem.
-
- Use DataList
- Use Verify
- Use FindEdit
-
-
- class Table is a Data_List
-
- procedure construct_object integer img
- forward send construct_object img
- Property integer Wrapping_State PUBLIC 0
- on_key kADD_MODE send add_or_remove_row PRIVATE
- send define_Verify //invoke verify support constructor
- send define_find_edit //invoke find/edit support constructor
- set Auto_Save_State to TRUE //tables change default for wrap-around save
- set No_Create_State to FALSE //tables permit creation by default
- end_procedure
-
- IMPORT_CLASS_PROTOCOL VERIFY_Mixin //include Verification support module
- IMPORT_CLASS_PROTOCOL FIND_EDIT_Mixin //include finding/editing support module
-
- procedure Request_Clear
- local integer obj# retval base
-
- if (no_create_state(current_object)) procedure_return
-
- //
- // modification for Server support
- //
- get Server to obj#
- //
- // modification for Verify support
- //
- if ((Changed_State(current_object) OR ; //(self changed OR
- (obj# <> 0 AND Changed_State(obj#)))) begin //server changed)
- if (Verify_Data_Loss(current_object)) NE 0 ; //don't abandon changes
- procedure_return //means don't clear
- else send find_record (current_record(current_object))
- end
-
- get Object_Validation to retval
- set Object_Validation to false
-
- if obj# ne 0 send clear to obj#
- else send clear
-
- // if (auto_top_panel_state(current_object)) begin
- // get base_item to base
- // if (current_item(current_object)) NE base ;
- // set current_item to (base_item(current_object))
- // end
-
- set Object_Validation to retval
- end_procedure
-
- procedure Request_Clear_All
- local integer obj# isChgd retval
-
- if (no_create_state(current_object)) procedure_return
-
- get Object_Validation to retval
- set Object_Validation to false
- get Server to obj#
- if ((obj# <> 0 AND Changed_State(obj#)) OR ;
- Changed_State(current_object)) begin
- if (Verify_Data_Loss(current_object)) NE 0 begin
- set Object_Validation to retval
- procedure_return
- end
- end
- if obj# ne 0 send clear_all to obj#
- else send entry_clear_all 0
- if (Auto_Top_Panel_State(current_object)) send beginning_of_panel
- set Object_Validation to retval
- end_procedure
-
- procedure entry_autofind integer mode
- local integer srvr# file# datafile# field# oldDisp oldChg item#
- get Changing_State to oldChg
- set Changing_State to TRUE
- get Server to srvr#
- get main_file to file#
- get autofind_item to item#
- get data_file item item# to datafile#
- get data_field item item# to field#
- if (srvr# <> 0 AND datafile# > 0) begin
- if datafile# eq file# ; //if finding on main file, redisplay page
- send Item_Find to srvr# mode datafile# field# TRUE FALSE ;
- (Deferred_State(current_object))
- else begin //if finding on parent file, redisplay current row only
- get line_display_State to oldDisp
- set line_display_State to true
- send Item_Find to srvr# mode datafile# field# TRUE FALSE ;
- (Deferred_State(current_object))
- set line_display_State to oldDisp
- end
- end
- else begin
- forward send entry_autofind mode
- if datafile# eq file# send fill_page DOWNWARD_DIRECTION
- end
- set Changing_State to oldChg
- end_procedure
-
- //
- // FindEdit support behavior
- //
- procedure Request_Find integer mode integer entUpdtFlag
- local integer dataFile ser# dfrdState mainfile
- get Data_File to dataFile
- get Server to ser#
- get Deferred_State to dfrdState
- get main_file to mainfile
-
- //
- // server augmentation
- //
- if (ser# <> 0 AND dataFile > 0) begin
- send Item_Find to ser# mode dataFile ;
- (Data_Field(current_object,CURRENT)) entUpdtFlag TRUE dfrdState
- [found] if dfrdState begin
- if dataFile eq mainfile send display
- else send entry_display 0 0
- end
- end
-
- //
- // standard form behavior
- //
- else begin
- send Entry_Find mode
- [found] begin
- if dataFile eq mainfile send fill_page DOWNWARD_DIRECTION
- else send entry_display 0 0
- end
- end
- end_procedure
-
- //
- // FindEdit support behavior
- //
- procedure Request_SuperFind integer mode
- local integer obj# file# mainfile#
- get Server to obj#
- get data_file to file#
- if file# gt 0 begin
- get main_file to mainfile#
- if obj# ne 0 begin
- if mainfile# eq 0 get main_file of obj# to mainfile#
- indicate err false
- send Request_SuperFind to obj# mode file# ;
- (data_field(current_object,CURRENT))
- [not found not err] begin
- if mode lt 2 error 41
- else error 42
- end
- end
- else begin
- send entry_superfind mode mainfile#
- [found] begin
- if file# eq mainfile# send fill_page DOWNWARD_DIRECTION
- else send entry_display 0 0
- end
- end
- end
- end_procedure
-
- Register_Function Save returns integer
-
- function row_changed INTEGER row# RETURNS INTEGER
- local integer count maxx base lim obj#
- get item_limit to lim
- calc (row# * lim) to base
- calc (base + lim - 1) to maxx
- for count from base to maxx
- if (item_changed_State(current_object,count)) function_return 1
- loop
- get server to obj#
- if (obj# <> 0 AND Should_Save_Row(obj#)) function_Return 1
- end_function
-
- function validate_range integer from# integer to# returns integer
- local integer count retval oldcuritem
- move 0 to retval
- get current_item to oldcuritem
- for count from from# to to#
- set new_item to count
- move (exec_Validate(Current_Object,count)) to retval
- until retval ne 0
- set new_item to oldcuritem
- if retval ne 0 function_return count //return item# that failed
- else function_return -1 //-1 means all ok
- end_function
-
- function update_row integer row# returns integer
- local integer srvr# lineDisp retval rec# base mainfile oldVal
-
- //
- // if the specified row is changed, save the changes as required
- //
- if ((Row_Count(Current_Object) > 0) AND ;
- Row_Changed(current_object,row#)) begin
-
- //
- // if we're not supposed to save (auto-save is false, or we're trying to
- // create a new record with no_create=true), abandon changes.
- //
- if (not(auto_save_state(current_object)) OR ;
- (no_create_state(current_object) AND ;
- record_number(current_object,row#) = 0)) begin
- if (verify_data_loss(current_object)) NE 0 ; // user disallowed abandon
- function_return 2
- else send find_record (record_number(current_object,row#))
- end
- else begin
- //
- // calculate the base-item for the designated row
- //
- calc (row# * item_limit(Current_Object)) to base
-
- //
- // get the server
- //
- get Server to srvr#
-
- //
- // if this list has a server, save the changes as required
- //
- if Srvr# ne 0 begin
-
- //
- // validate the items of this list and all other DEOs for this
- // list's server
- //
- get object_validation to oldVal
- set object_validation to TRUE
-
- get Request_Validate of Srvr# to retval
-
- set object_validation to oldVal
-
- //
- // if validation failed, exit
- //
- if retval ne 0 function_return 1
-
- //
- // if the user verifies the save, save the changes
- //
- if (Verify_Save(current_object) = 0) begin
-
- //
- // get the record number for the designated row
- //
- get record_number item row# to rec#
-
- //
- // get the main_file of the list
- //
- move (main_file(current_object)) to mainfile
-
- //
- // use Read_By_RecNum of the server to locate the designated
- // row's record
- //
- send Read_By_RecNum to Srvr# mainfile rec#
-
- //
- // if this list is Deferred, make sure the server is latched on
- // to the proper record
- //
- if (Deferred_State(current_object)) ;
- send Request_Assign to Srvr# mainfile
-
- //
- // save the changes to the designated (current) row
- //
- send Save_Row
-
- //
- // if an error occurred, exit
- //
- [err] function_return 3
-
- end
-
- //
- // if the user cancels the save, exit
- //
- else function_return 2
-
- end
- end
- end
- end_function
-
- //
- //kADD_MODE toggling procedure
- //
- procedure add_or_Remove_row
- local integer ser# retval
-
- if (no_create_state(current_object)) procedure_return
-
- get server to ser#
-
- //
- // if not an a clear row, or on last row, clear
- //
- if ((current_Record(current_object) <> 0) OR ;
- (current_row(current_object) = (row_count(current_object) - 1)) ) ;
- send request_clear
- else begin
- //
- // if the current row is changed, ask the user if they want to
- // abandon the changes; if not, exit, otherwise, close the "hole"
- // and regerate the display page
- //
- if (row_changed(current_object,current_row(current_object)) AND ;
- (Verify_Data_Loss(current_object) <> 0)) ; //don't abandon changes
- procedure_return //means don't clear
-
- get Exit_Add_Mode TRUE TRUE (current_item(current_object)) ;
- to retval
-
- send Find_Record (current_record(current_object))
-
- end
- end_procedure
-
- procedure Toggle_Shadow //shadow/unshadow current row of items
- local integer counter shadowValue wdth baseItem lim
- get item_limit to wdth
- get base_item to baseItem
- if (shadow_state(current_object,baseItem)) eq 0 begin
- move 1 to shadowValue //else set items shadowed
- set changed_state to true
- end
- else move 0 to shadowValue //else set items unshadowed
- calc (baseItem + wdth - 1) to lim
- for counter from baseItem to lim
- set shadow_state item counter to shadowValue
- loop
- end_procedure
-
- procedure Child_Wrapping integer direction integer xorigID
- local integer targetItem origID
-
- if NUM_ARGUMENTS gt 1 move xorigID to origID
- else get focus of desktop to origID
- if origID eq 0 move current_object to origID
-
- send activate
-
- if direction ne 0 begin //wrapping forward
- calc (base_item(current_object) + item_limit(current_object)) ;
- to targetItem
- if targetItem GE (item_count(current_object)) send add_row
-
- //
- // save only when wrapping forward
- //
- if ((origID <> current_object) AND auto_Save_State(origID)) ;
- send request_Save to origID
- else if (auto_save_state(current_object) AND ;
- not(advancing_state(current_object))) send request_save
-
- end
- else calc (base_item(current_object) - 1) to targetItem // wrapping backward
-
- set Wrapping_State to true
- set current_item to targetItem
-
- set Wrapping_State to false
- procedure_return 1
- end_procedure
-
- procedure Request_Delete
- local integer obj# dynUpdt oldItem oldDisp rec# retval item# oldDyn
- local integer oldVal oldEntEx base
-
- indicate err false
- get Server to obj#
-
- if (obj# <> 0 AND can_Delete(obj#)) begin
- if (Verify_Delete(current_object)) NE 0 procedure_return
-
- if (Batch_State(current_object)) send toggle_shadow
- else if obj# ne 0 begin
- set changed_state to false
-
- if (Deferred_State(current_object)) ;
- send Request_Assign to obj# 0 //0 means main_file of Server
-
- send Request_Delete to obj#
-
- [not err] begin
- get dynamic_update_state to oldDyn
- set dynamic_update_state to FALSE
-
- get object_validation to oldVal
- set object_validation to FALSE
- get object_item_entry_exit to oldEntEx
- set object_item_entry_exit to FALSE
-
- get current_item to item#
- get Exit_Add_Mode TRUE FALSE item# to retval
- set current_item to item#
-
- if (current_record(current_object)) NE 0 ;
- send Find_Record (current_record(current_object))
- else send clear_row (current_row(current_object))
-
- set object_item_entry_exit to oldEntEx
-
- // if (auto_top_panel_state(current_object)) begin
- // get base_item to base
- // if ((current_record(current_object) = 0) AND ;
- // (current_item(current_object) <> base)) ;
- // set current_item to (base_item(current_object))
- // end
-
- set object_validation to oldVal
-
- set dynamic_update_state to oldDyn
- end
- end
- end
- end_procedure
-
- procedure save_row
- local integer obj#
-
- indicate err false
- get Server to obj#
-
- if obj# ne 0 begin
- send Request_Save to obj#
-
- [not err] begin
- get main_file to filenumber
- move 0 to fieldindex
- set current_record to Indirect_File.RECNUM
- end
- end
- end_procedure
-
- procedure Request_Save
- local integer curItem obj# retval wasNew oldWasNew file# oldVal
-
- if (not(no_create_state(current_object)) OR ;
- (current_record(current_object) <> 0)) begin
-
- get Server to obj#
- if (obj# = 0 OR not(Read_Only_State(obj#))) begin
-
- get current_item to curItem
-
- get main_file to file#
-
- if ((obj# <> 0 AND Should_Save(obj#)) OR ;
- Changed_State(current_object)) begin
-
- get object_validation to oldVal
- set object_validation to TRUE
-
- if obj# ne 0 get Request_Validate of obj# to retval
- else get Validate_Items FALSE to retval
-
- set object_validation to oldVal
-
- if (retval OR (Verify_Save(Current_object) <> 0)) procedure_return
-
- if (Deferred_State(current_object)) ;
- send Request_Assign to obj# file#
-
- move (current_record(current_object) = 0) to wasNew
-
- get was_new_row_state to oldWasNew
- set was_new_row_state to wasNew
- send save_row //save the current row
- set was_new_row_state to oldWasNew
-
- if wasNew get Exit_Add_Mode FALSE TRUE ;
- (current_item(current_object)) to retval
- end
- end
- end
- end_procedure
-
- //
- // returns -1 if all went ok, else returns item# which failed
- //
- function row_changing integer fromItem integer toItem returns integer
-
- local integer from# to# retval toRow fromRow lim wasNew oldWasNew
- local integer rowChgd btch adv
-
- //
- // initialize working origin and destination item numbers
- // and other variables representing properties
- //
- move fromItem to from#
- move toItem to to#
- get row item from# to fromRow
- get item_limit to lim
-
- //
- // if origin row's record_number is zero, wasNew is TRUE
- // else it is FALSE
- //
- move (record_number(current_object,fromRow) = 0) to wasNew
-
- get was_new_row_state to oldWasNew //required for forwarded function
- set was_new_row_state to wasNew //required for forwarded function
-
- move (row_changed(current_object,fromRow)) to rowChgd
-
- get batch_state to btch
- get advancing_state to adv
-
- if not btch begin
- //
- // if row was changed
- //
- if rowChgd begin
- //
- // if in add-mode, but row will not be saved,
- // wrap to first item on same row
- //
- if (wasNew AND adv AND (no_create_state(current_object) OR ;
- not(auto_save_state(current_object)))) ;
- function_return (base_item(current_object))
-
- if (Update_Row(current_object,fromRow)) NE 0 ;
- function_return (current_item(current_object))
- end
- //
- // else row was NOT changed and in add-mode;
- // wrap to first item on same row
- //
- else if (wasNew AND adv) ;
- function_return (base_item(current_object))
-
- end
-
- forward get row_changing from# to# to to#
-
- set was_new_row_state to oldWasNew //reset (required for forwarded function)
-
- //
- // new row was just saved, but we're not continuing add_mode, exit_add_mode
- //
- if (wasNew AND rowChgd AND not(btch) AND (not(adv) OR ;
- not(auto_clear_deo_state(current_object)))) begin
-
- get current_item to from#
-
- set new_item to to#
- get Exit_Add_Mode FALSE TRUE to# to to# //returns adjusted dest item
- set new_item to from#
- end
-
- //
- // get destination item's row
- //
- get row item to# to toRow
-
- //
- // if we're moving to some column other than the first column in the
- // destination row, validate the preceding items in the row
- //
- if to# gt (toRow * lim) begin
-
- //
- // validate all items from the first column to the item just prior
- // to the destination item
- //
- move (validate_range(Current_Object,(toRow * lim),(to# - 1))) to retval
-
- //
- // if validate_range returned anything other than -1 (0..n-1),
- // the return value is the item number of the item that failed
- // validation; return this item as the destination
- //
- if retval ne -1 function_return retval
-
- end
-
- //
- // return the destination item number
- //
- function_return to#
-
- end_function
-
- function exit_and_save integer dir returns integer
- local integer curItem base lim ret_val
-
- get current_item to curItem
- get base_item to base
- get item_limit to lim
-
- if (exec_exit(current_object,curItem)) NE 0 function_return 1 // failed
-
- if (update_row(current_object,current_row(current_object))) NE 0 ;
- function_return 1 // failed
-
- function_return 0 // success
- end_function
-
- function validate_and_enter returns integer
- local integer curItem base ret_val
-
- get current_item to curItem
- get base_item to base
-
- //
- // validate up to current item
- //
- if curItem NE base begin
- get validate_range base (curItem - 1) to ret_val
-
- if ret_val NE -1 begin
- set current_item to ret_val
- function_return 1 // failed
- end
- end
-
- //
- // enter current item
- //
- if (exec_entry(current_object,curItem)) NE 0 function_return 1 // failed
-
- function_return 0
- end_function
-
- procedure item_change integer from# integer to# returns integer
- local integer oldObjVal base retVal suspendValidate
-
- if (Changing_State(Current_Object)) begin
- set Advancing_State to FALSE
- procedure_Return to#
- end
-
- //
- // suspend validation if moving off the current row
- //
- get base_item to base
- move (not(batch_state(current_object)) AND ;
- ((to# > (base + item_limit(current_object) - 1)) OR (to# < base))) ;
- to suspendValidate
- if suspendValidate begin
- get object_validation to oldObjVal
- set object_validation to FALSE
- end
- //
- // forward the ITEM_CHANGE message to perform the inherited behavior
- //
- forward get msg_item_change from# to# to to#
- //
- // if validation qwazs suspended, restore it
- //
- if suspendValidate begin
- set object_validation to oldObjVal
-
- //
- // validate up to new current item
- //
- get base_item to base
- if to# GT base begin
- get validate_range base (to# - 1) to retVal
- if retVal NE -1 move retVal to to#
- end
- end
-
- //
- // return the destination item number
- //
- procedure_Return to#
- end_procedure
-
- procedure scroll integer dir integer dist
- local integer oldObjVal oldObjEntEx ret_val
-
- if not (batch_state(current_object)) begin
- if (exit_and_save(current_object,dir)) NE 0 procedure_return
-
- get object_item_entry_exit to oldObjEntEx
- set object_item_entry_exit to FALSE
- get object_validation to oldObjVal
- set object_validation to FALSE
- end
-
- //
- // forward the scroll message
- //
- forward send scroll dir dist
-
- if not (batch_state(current_object)) begin
- set object_validation to oldObjVal
- set object_item_entry_exit to oldObjEntEx
- //
- // the validate and entry messages cannot inhibit movement because
- // original row is gone
- //
- if (validate_and_enter(current_object)) NE 0 procedure_return
- end
- end_procedure
-
- procedure beginning_of_data integer noSaveFlag
- local integer oldObjVal oldObjEntEx ret_val
-
- if not (batch_state(current_object)) begin
- if (item_count (current_object)) GT 0 begin
- if ((NUM_ARGUMENTS > 0) AND noSaveFlag) begin
- if (exec_exit(current_object,current_item(current_object))) NE 0 ;
- procedure_return
- end
- else if (exit_and_save(current_object,UPWARD_DIRECTION) <> 0) ;
- procedure_return
- end
-
- get object_item_entry_exit to oldObjEntEx
- set object_item_entry_exit to FALSE
- get object_validation to oldObjVal
- set object_validation to FALSE
- end
-
- if NUM_ARGUMENTS GT 0 forward send beginning_of_data noSaveFlag
- else forward send beginning_of_data
-
- if not (batch_state(current_object)) begin
- set object_validation to oldObjVal
- set object_item_entry_exit to oldObjEntEx
- //
- // the validate and entry messages cannot inhibit movement because
- // original row is gone
- //
- if (validate_and_enter(current_object)) NE 0 procedure_return
- end
- end_procedure
-
- procedure end_of_data
- local integer oldObjVal oldObjEntEx ret_val
-
- if not (batch_state(current_object)) begin
- if ((item_count(current_object) > 0) AND ;
- (exit_and_save(current_object,DOWNWARD_DIRECTION) <> 0)) procedure_return
-
- get object_item_entry_exit to oldObjEntEx
- set object_item_entry_exit to FALSE
- get object_validation to oldObjVal
- set object_validation to FALSE
- end
-
- forward send end_of_data
-
- if not (batch_state(current_object)) begin
- set object_validation to oldObjVal
- set object_item_entry_exit to oldObjEntEx
- //
- // the validate and entry messages cannot inhibit movement because
- // original row is gone
- //
- if (validate_and_enter(current_object)) NE 0 procedure_return
- end
- end_procedure
-
- procedure entry_display integer file integer flag
- if (flag eq 0 AND file eq 0) begin
- is_file_included (main_file(current_object)) 1
- [found] send assign_current_record
- end
- forward send entry_display file flag
- end_procedure
-
- end_class
-