'
'This chapter menu
'^^^^^^^^^^^^^^^^^^^^^^
'
'!short:Operators and functions for increased readability of source code
'!short:Constants for increasing the source code readability
'!short:
'!short:OBJECT           new object creation
'!short:
'!short:BEGIN BREAK      supress of system error call
'!short:RECOVER BREAK    system error recovery
'!short:END BREAK        end of program part with supressed error call
'!short:BREAKIF          conditional break
'!short:
'!short:ENDWHILE         conditional while loop end
'!short:REPEAT           unconditional loop begin
'!short:LOOPIF           conditional loop begin
'!short:EXITIF           conditional loop exit
'!short:UNTIL            conditional repeat until loop end
'!short:ENDREPEAT        unconditional repeat loop end
'!short:
'!short:RETURNIF         conditional function exit
'!short:RETURN UPDATE    function exit, for switch set
'!short:FILL EMPTY       variable is filled if empty
'!short:DEFAULT TO       variable is filled with default value if it's value is NIL
'!short:STORE VALUE      variable is stored the default value if it's value <> NIL
'!short:
'!short:SET ERRORS FILE  error file name set
'!short:SET LASTKEY      key code for the LasteKey() function set
'!short:SET QUICKESC     sets if the ESC key should exit the menu or no
'!short:SET DIALOG       enable / disable dialog line output
'!short:CLEAR KEYBOARD   cleares the keyboard queue
'!short:SKIP DELETED     search for first undeleted database record
'!short:
'!short:REFRESH ROW      restores the current viewed row
'!short:REFRESH TABLE    restores the current View object display
'!short:
'!short:NET CREATE       database creation in network environment
'!short:NET USE          database open in a network environment
'!short:NET INDEX ON     index file creation in a network environment
'!short:NET SET INDEX    index file open in a network environment
'!short:NET APPEND BLANK blank record append in a network environment
'!short:NET DELETE       record deleted mark in a network environment
'!short:NET RECALL       deleted marked record recall in a network environment
'!short:NET REPLACE      extended network storing a data info database file
'!short:NET RLOCK        record lock before write atempt in a network environment
'!short:NET FLOCK        database file lock before write atempt in a network environment
'!short:NET ERASE        database file delete in a network environment
'!short:NET REINDEX      reindex of databases in a network environment
'!short:NET PACK         pack of database in a network environment
'!short:NET ZAP          zap of database in a network environment
'!short:NET UNLOCK       unlock of database record in a network environment
'!short:NET CLOSE        close of database in a network environment
'
'
'####################################################################################
!short:Operators and functions for increased readability of source code
^BOperators and functions for increased readability of source code:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

With help of preprocessor command #define are following new operators
defined:

#define  and           .and.
#define  or            .or.
#define  true          .t.
#define  false         .f.
#define  cr_lf         (chr(13)+chr(10))        //new line
#define  NTrim(n)      LTrim(Str(n))            //number to string without spc
#define  Swap(a,b)     Eval({|p|p:=a,a:=b,b:=p})//swap two variables
#define  Bell()        Tone(400,0.2)            //beeps
#define  DisableHelp() ReadHelpVar(DISABLE)
#define  EnableHelp()  ReadHelpVar("")

DisableHelp() disables the help to database fields and menu items;
EnableHelp() it enables.

A logical operator IN defined:
#xtranslate (<var> IN <a>,<b>) => (<a> <= <var> .and. <var> <= <b>)


Source file is Object.ch


'####################################################################################
!short:Constants for increasing the source code readability
^BConstants for increasing the source code readability:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

With help of preprocessor command #define are following new constants
defined:

Color items description:
~~~~~~~~~~~~~~~~~~~~~~~~

#define nNormal    1   //CLIPPER:Normal,Enhanced,Border,NotUse,Unselect
#define nEnhanced  2   //         1      2        3      4      5
#define nBorder    3
#define nNotUse    4
#define nUnSelect  5

#define nShadow    3   //WINDOW: Normal,Enhanced,Shadow,Title, Unselect
#define nTitle     4   //         1      2        3      4      5

#define nSelected  2   //MENU:   Normal,Selected,Shadow,Letter,Disable
#define nLetter    4   //         1      2        3      4      5
#define nDisable   5
#define nExtension 6

Look at the clipper color string.

Source file is Object.ch


'####################################################################################
!short:OBJECT           new object creation
^BOBJECT  new object creation:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  [Visibility] OBJECT [<VarName>] OF <Class> [INIT [InitMethod( [list] )]]

 where:

  Visibility can be LOCAL or STATIC or PUBLIC or PRIVATE

  InitMethod(...) can be: Function( [list] )
                      or: <VarName>:VirtualMethod( [list] )

Description:
~~~~~~~~~~~~
New object of the class is created, the initial instvar values are set
(method o:New()) and in the case of use of INIT it is initialised by o:Init().
If the InitMethod([list]) is set it is performed too.
Have a look to:
Basic concept  Simple object manipulating demo


Example:
~~~~~~~~
  ^ULOCAL OBJECT o1 OF Class1^N
  new local object o1 of Class1 is created, its variables are initialised
  by standard constructor method o:New().

  ^USTATIC OBJECT o2 OF Class2 INIT^N
  new static object o2 of Class2 is created and constructor o:New() and
  virtual method o:Init() is called for it.

  ^UPUBLIC OBJECT o3 OF Class3 INIT PostInit(), o3:Load()^N
  new public object o3 of Class3 is created and constructor o:New() and
  virtual method Init(), and static method  PostInit() and virtual method
  Load() is called for it. This command can be rewritten as

  PUBLIC OBJECT o3 OF Class3  //object creation, constructor o:New() call
  o3:Init()                   //virtual method
  PostInit()                  //function
  o3:Load()                   //virtual method


Source file is Object.ch

!seealso: ob_basic.ngo:Syntax ob_basic.ngo:"Simple demo"


'####################################################################################
!short:BEGIN BREAK      supress of system error call
^BBEGIN BREAK supress of system error call:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UBEGIN BREAK^N
    //any source code which can cause an error
  [^URECOVER BREAK^N [^UUSING oError^N]]   //unconditional error recover
    //any source code to handle the error
  ^UEND BREAK^N

Description:
~~~~~~~~~~~~~
This program construction is suitable for runtime error handle. All errors
causing the "Error CLIPPER/BASE..." are handled by your code. If there is
no command RECOVER BREAK... the control goes immediately to the first command
after the END BREAK, and the error occurance is supressed.
If the RECOVER BREAK... is used :

1.There was no error between BEGIN BREAK and RECOVER BREAK then the
  RECOVER BREAK... command gives the control to the first command
  after the END BREAK. So in this case the code part between
  RECOVER BREAK... and END BREAK is skipped.

2.If there was a error between BEGIN BREAK a RECOVER BREAK then remaining
  code of this part is skipped and the control goes to the first command
  after the RECOVER BREAK...

If you use the full RECOVER BREAK USING oError command, then before the
control goes to the error handling part the variable oError is filled with
clipper object of Error class. This object describes the error type.

Example:
~~~~~~~~
  ...
  REPEAT
    BEGIN BREAK
      Expr:=Space(20)
      Expr:=EditIt(Expr,"Input the valid clipper expression:")
      x:=&(Expr)
    RECOVER BREAK USING oError
      Alert("This was not a valid expression!;"+ErrorMessage(oError))
      LOOP
    END BREAK
  UNTIL true

This code part will be repeated until you input the valid clipper expression.

Comment:
~~~~~~~~
If there occures a rutime error in a part between RECOVER BREAK and END
BREAK, it will be handled in the standard way, with error message and
exiting the program. See the BEGIN SEQUENCE.

Source file is Object.ch

!seealso: REPEAT ob_funct.ngo:EditIt ob_funct.ngo:ErrorMessage


'####################################################################################
!short:RECOVER BREAK    system error recovery
^BRECOVER BREAK system error recovery:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Description:
~~~~~~~~~~~~
The description is in a BEGIN BREAK paragraph.

Source file is Object.ch

!seealso: "BEGIN BREAK"


'####################################################################################
!short:END BREAK        end of program part with supressed error call
^BEND BREAK end of program part with supressed error call:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Description:
~~~~~~~~~~~~
The description is in a BEGIN BREAK paragraph.

Source file is Object.ch

!seealso: "BEGIN BREAK"


'####################################################################################
!short:BREAKIF          conditional break
^BBREAKIF conditional break:
~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UBREAKIF^N <Expr> [^UWITH^N <objError>]

Description:
~~~~~~~~~~~~
If the value of expresion <Expr> is true, the BREAK <objError> is performed.

Example:
~~~~~~~~
  ...
  BREAKIF i<0 WITH MakeErrorObject()
  ...

  STATIC FUNCTION MakeErrorObject()
    LOCAL o:=ErrorNew()
    o:Description:="Variable i has too small value!"
    o:Operation:="<"
    o:Severity:=ES_WHOCARES
    o:SubSystem:="Test i"
    o:Tries:=0
    o:CanRetry:=true
    RETURN o

If variable i < 0 there is a new clipper error object created and the
BREAK command is activated which is given the error object. Have a look
to the clipper Error class.

Source file is Object.ch

!seealso: "BEGIN BREAK"


'####################################################################################
!short:ENDWHILE         conditional while loop end
^BENDWHILE conditional while loop end:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UENDWHILE^N [ <Expr> ]

Description:
~~~~~~~~~~~~
The loop is ended if <Expr> is true if <Expr> is not set it is replaced with
false and the loop is repeated.


Example:
~~~~~~~~
  SET EXACT OFF
  LOCATE FOR field->Name="Nov"
  WHILE FOUND()
    ? field->Name, field->Salary
    CONTINUE
  ENDWHILE Alert("Continue search?",{"Yes,"No"})<>1
  ...

Source file is Object.ch

!seealso: REPEAT UNTIL EXITIF LOOPIF


'####################################################################################
!short:REPEAT           unconditional loop begin
^BREPEAT unconditional loop begin:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UREPEAT^N

Description:
~~~~~~~~~~~~
Exactly the same as WHILE .T.


Example:
~~~~~~~~
  REPEAT
    nKey:=InKey(0)
  UNTIL nKey<>K_ENTER
  ...

Enter key pressing ignore K_ENTER.

Source file is Object.ch

!seealso: EXITIF LOOPIF ENDWHILE


'####################################################################################
!short:LOOPIF           conditional loop begin
^BLOOPIF conditional loop begin:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^ULOOPIF^N <Expr>

Description:
~~~~~~~~~~~
If the expresion <Expr> is true, the LOOP is performed.

Example:
~~~~~~~~
  REPEAT
    nKey:=InKey(0)
    LOOPIF nKey==K_ENTER
    DO CASE
      CASE nKey==K_UP
        ...
      CASE nKey==K_DOWN
        ...
      OTHERWISE
        ...
    ENDCASE
  UNTIL nKey==K_ESC
  ...

All pressed keys are handled without K_ENTER, the loop is finished after
pressing of th ESC key.

Source file is Object.ch

!seealso: REPEAT UNTIL EXITIF ENDWHILE


'####################################################################################
!short:EXITIF           conditional loop exit
^BEXITIF conditional loop exit:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UEXITIF^N <Expr>

Description:
~~~~~~~~~~~~
If the expresion <Expr> is true, the EXIT command is performed.

Example:
~~~~~~~~
  REPEAT
    nKey:=InKey(0)
    EXITIF nKey==K_ENTER or nKey==K_ESC
    DO CASE
      CASE nKey==K_UP
        ...
      CASE nKey==K_DOWN
        ...
      OTHERWISE
        ...
    ENDCASE
  ENDREPEAT
  ...


All pressed keys are handled, the loop is finished after pressing of the 
ESC key or the Enter key.

Source file is Object.ch

!seealso: REPEAT UNTIL LOOPIF ENDWHILE


'####################################################################################
!short:UNTIL            conditional repeat until loop end
^BUNTIL conditional repeat until loop end:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UUNTIL^N <Expr>

Description:
~~~~~~~~~~~~
If the expresion <Expr> is true, the loop is finished otherwise the looping
is continued.

Source file is Object.ch

!seealso: REPEAT LOOPIF EXITIF ENDWHILE


'####################################################################################
!short:ENDREPEAT        unconditional repeat loop end
^BENDREPEAT unconditional repeat loop end:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UENDREPEAT^N

Description:
~~~~~~~~~~~~
in conection with REPEAT command can cause the unlimited loop.

Example:
~~~~~~~~
  REPEAT
    EndLessProcedure()
  ENDREPEAT


Source file is Object.ch

!seealso: REPEAT EXITIF LOOPIF ENDWHILE


'####################################################################################
!short:RETURNIF         conditional function exit
^BRETURNIF conditional function exit:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^URETURNIF^N <Expr> ^UWITH^N <ReturnValue>

Description:
~~~~~~~~~~~~
If a value of <Expr> is true, the loop is finished with command
RETURN <ReturnValue>

Example:
~~~~~~~~

  FUNCTION Test(x)
    RETURNIF x==nil WITH false   //nothing to test
    //the test text
    RETURN true


Source file is Object.ch

!seealso: BREAKIF EXITIF LOOPIF


'####################################################################################
!short:RETURN UPDATE    function exit, for switch set
^BRETURN UPDATE function exit, for switch set:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^URETURN^N <Var> ^UUPDATE WITH^N <Value>

Description:
~~~~~~~~~~~~
The variable <Var> is temporary stored and after it the <Var> is assigned the 
<Value> if diferent from NIL and the temporary stored <Var> is restored by
RETURN command.


Example:
~~~~~~~~

  FUNCTION MySet(New)
    STATIC Old
    RETURN Old UPDATE WITH New

Rewriting this code in standard clipper:

  FUNCTION MySet(New)
    STATIC Old
    LOCAL pom:=Old
    IF New<>NIL
      Old:=New
    END
    RETURN pom


Source file is Object.ch

!seealso: RETURNIF BREAKIF EXITIF LOOPIF


'####################################################################################
!short:FILL EMPTY       variable is filled if empty
^BFILL EMPTY variable is filled if empty:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UFILL EMPTY^N <Var1> ^U:=^N <Value1> [, <VarN> ^U:=^N <ValueN> ]

Description:
~~~~~~~~~~~~
If the expresion Empty(<Var1>) is true the <Var1> is assigned the <Value1>.
This is performed for all variables and their values.

Example:
~~~~~~~~

  FILL EMPTY A:=11, B:=22, C:=33

can be rewritten:

  IF EMPTY(A)
    A:=11
  END
  IF EMPTY(B)
    B:=22
  END
  IF EMPTY(C)
    C:=33
  ENDIF


Source file is Object.ch

!seealso: "DEFAULT" "STORE VALUE"


'####################################################################################
!short:DEFAULT          variable is filled with default value if it's value is NIL
^BDEFAULT variable is filled with default value if it's value is NIL:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UDEFAULT^N <Var1> ^U:=^N <Value1> [, <VarN> ^U:=^N <ValueN> ]

Description:
~~~~~~~~~~~~
If the variable <Var1> == NIL, the variable <Var1> is assigned the <Value1>.
This is performed for all variables and their values.

Example:
~~~~~~~~

  DEFAULT A:=11, B:=22, C:=33

can be rewritten:

  IF A==NIL
    A:=11
  END
  IF B==NIL
    B:=22
  END
  IF C==NIL
    C:=33
  ENDIF


Source file is Object.ch

!seealso: "FILL EMPTY" "STORE VALUE"


'####################################################################################
!short:STORE VALUE      variable is stored the default value if it's value <> NIL
^BSTORE VALUE variable is stored the default value if it's value <> NIL:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^USTORE VALUE^N <Value1> ^UINTO^N <Var1> [, <ValueN> ^UINTO^N <VarN> ]

Description:
~~~~~~~~~~~~~
If the expresion <Value1> <> NIL, then the variable <Var1> is assigned the
<Value1>. This is performed for all variables and their values.

Example:
~~~~~~~~

  STORE VALUE xxx INTO A, yyy INTO B, zzz INTO C

can be rewritten:

  IF xxx==NIL
    A:=xxx
  END
  IF yyy==NIL
    B:=yyy
  END
  IF zzz==NIL
    C:=zzz
  ENDIF


Source file is Object.ch

!seealso: "FILL EMPTY" "DEFAULT"


'####################################################################################
!short:SET ERRORS FILE  error file name set
^BSET ERRORS FILE error file name set:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^USET ERRORRS FILE^N [^UTO^N] <FileName>

Description:
~~~~~~~~~~~~
The Object.lib library has corrected Error.sys to output the error message
to the file set with SET ERRORS command too. It is convenient to quiet
study of reason of program abort. If the file <FileName> doesn't exist it
is created, if exists the messges are apended to its end.


Source file is Object.ch

!seealso: ob_funct.ngo:SetErrFile


'####################################################################################
!short:SET LASTKEY      key code for the LasteKey() function set
^BSET LASTKEY key code for the LasteKey() function set:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^USET LAST KEY^N [^UTO^N] <nKey>

Description:
~~~~~~~~~~~~
This preprocessor command is transformed to SetLastKey() function call.
The <nKey> code is set so the LastKey() function call returns the <nKey>
value, till the next keypress or redefinition by SET LAST KEY command
(or SetLastKey() function).


Source file is Object.ch

!seealso: ob_funct.ngo:SetLastKey


'####################################################################################
!short:SET QUICKESC     sets if the ESC key should exit the menu or no
^BSET QUICKESC sets if the ESC key should exit the menu or no:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^USET QUICKESC^N [^UTO^N] <lValue>

Function:
~~~~~~~~
This command is preprocessored to function call SetQuickEsc().
If <lValue> is true the Esc keypressing causes immediate menu exit, if it is
true the ESC keypressing causes the one menu level return.

Source code is in  Object.ch

!seealso: ob_funct.ngo:SetQuickEsc ob_class.ngo:Menu


'####################################################################################
!short:SET DIALOG       enable / disable dialog line output
^BSET DIALOG enable / disable dialog line output:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^USET DIALOG^N [^UTO^N] <lValue>

Function:
~~~~~~~~~
This command is preprocessored to function call SetDialog().
If the <lValue> is true the dialog line output is enabled, if false it is
disabled.

Source code is in  Object.ch

!seealso: ob_funct.ngo:SetDialog ob_class.ngo:Menu


'####################################################################################
!short:CLEAR KEYBOARD   cleares the keyboard queue
^BCLEAR KEYBOARD cleares the keyboard queue:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UCLEAR KEYBOARD^N

Function:
~~~~~~~~~
The same as original CLEAR TYPEAHEAD, but more readable form.


Source code is in  Object.ch

!seealso:


'####################################################################################
'!short:SKIP DELETED     search for first undeleted database record
^BSKIP DELETED search for first undeleted database record:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^USKIP DELETED^N

Function:
~~~~~~~~~

The same as function SkipDeleted().


Source code is in  Object.ch

!seealso:  ob_funct.ngo:SkipDeleted


'####################################################################################
'!short:REFRESH ROW      current View object row refresh
^BREFRESH ROW  current View object row refresh:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UREFRESH ROW^N

Function:
~~~~~~~~~
The same as function RefreshRow().


Source code is in  Object.ch

!seealso:  ob_funct.ngo:RefreshRow


'####################################################################################
'!short:REFRESH TABLE    current View object refresh
^BREFRESH TABLE  current View object refresh:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UREFRESH TABLE^N

Function:
~~~~~~~~~
The same as function RefreshTable().


Source code is in  Object.ch

!seealso:  ob_funct.ngo:RefreshTable


'####################################################################################
!short:NET CREATE       database cretion in network environment
^BNET CREATE database cretion in network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET CREATE^N <File1> [^UFROM^N <File2>] [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper command CREATE FROM...,
with following enhancements:
1.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
2.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
3.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetCreateFrom c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET USE          database open in a network environment
^BNET USE database open in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET USE^N <dbf> [^UVIA^N <rdd>] [^UALIAS^N <alias>] ;
  [^UNEW^N] [^UEXCLUSIVE^N] [^USHARED^N] [^UREADONLY^N] ;
  [^UINDEX^N <indexlist>] [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper USE..., command with following
enhancements:
1.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
2.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
3.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetDbUseArea c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET INDEX ON     index file creation in a network environment
^BNET INDEX ON index file creation in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET INDEX ON^N <key> [^UTO^N <file>] [^UUNIQUE^N] [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~
It is a network version of clipper command INDEX ON...,
with following enhancements:
1.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
2.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
3.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetIndexOn c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET SET INDEX    index file open in a network environment
^BNET SET INDEX index file open in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET SET INDEX TO^N

  ^UNET SET INDEX TO^N <list> [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~
It is a network version of clipper command SET INDEX TO...,
with following enhancements:
1.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
2.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
3.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetSetIndex c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET APPEND BLANK blank record append in a network environment
^BNET APPEND BLANK blank record append in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET APPEND BLANK [^UIN^N <alias>,[<order>]] [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper command APPEND BLANK,
with following enhancements:
1.Clause IN <alias>,<order>: command APPEND... is performed in workarea
  <alias> with active index <order>. After this command may be unlocked
  current record in <alias> workarea. All other settings are unchanged.
  (i.e. RecNo(), set order to..., RLock(), select, ...)

2.Clause SEEK <key>: command APPEND... is performed for all this records,
  that will be founded with seek <key> in required workarea. 

3.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
4.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
5.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetDbAppend c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET DELETE       record deleted mark in a network environment
^BNET DELETE record deleted mark in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET DELETE^N [^UIN^N <alias>,[<order>]] ;
  [ [^UFOR^N <for>] [^UWHILE^N <while>] [^NNEXT^N <next>] ;
  [^URECORD^N <rec>] [^UREST^N] [^UALL^N] [^UCONTINUE^N] [^URETURN^N <expr>]

  ^UNET DELETE^N [^UIN^N <alias>,[<order>]] ;
  [^USEEK^N <key>] [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper command DELETE...,
with following enhancements:
1.Clause IN <alias>,<order>: command DELETE is performed in workarea
  <alias> with active index <order>. After this command may be unlocked
  current record in <alias> workarea. All other settings are unchanged.
  (i.e. RecNo(), set order to..., RLock(), select, ...)

2.Clause SEEK <key>: command DELETE is performed for all this records,
  that will be founded with seek <key> in required workarea. 

3.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
4.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
5.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetDbDelete c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET RECALL       deleted marked record recall in a network environment
^BNET RECALL deleted marked record recall in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET RECALL^N [^UIN^N <alias>,[<order>]] ;
  [ [^UFOR^N <for>] [^UWHILE^N <while>] [^NNEXT^N <next>] ;
  [^URECORD^N <rec>] [^UREST^N] [^UALL^N] [^UCONTINUE^N] [^URETURN^N <expr>]

  ^UNET RECALL^N [^UIN^N <alias>,[<order>]] ;
  [^USEEK^N <key>] [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper command RECALL...,
with following enhancements:
1.Clause IN <alias>,<order>: command RECALL is performed in workarea
  <alias> with active index <order>. After this command may be unlocked
  current record in <alias> workarea. All other settings are unchanged.
  (i.e. RecNo(), set order to..., RLock(), select, ...)

2.Clause SEEK <key>: command RECALL is performed for all this records,
  that will be founded with seek <key> in required workarea. 

3.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
4.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
5.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetDbRecall c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET REPLACE       extended network storing a data info database file
^BNET REPLACE  extended network storing a data info database file:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET REPLACE^N f1:=v1 [,fN:=vN] [^UIN^N <alias>,[<order>]] ;
  [ [^UFOR^N <for>] [^UWHILE^N <while>] [^NNEXT^N <next>] ;
  [^URECORD^N <rec>] [^UREST^N] [^UALL^N] [^UCONTINUE^N] [^URETURN^N <expr>]

  ^UNET REPLACE^N f1:=v1 [,fN:=vN] [^UIN^N <alias>,[<order>]] ;
  [^USEEK^N <key>] [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is the network version of clipper command REPLACE with following
enhancements:
1.Clause IN <alias>,<order>: command REPLACE is performed in workarea
  <alias> with active index <order>. After this command may be unlocked
  current record in <alias> workarea. All other settings are unchanged.
  (i.e. RecNo(), set order to..., RLock(), select, ...)

2.Clause SEEK <key>: command REPLACE is performed for all this records,
  that will be founded with seek <key> in required workarea. 

3.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
4.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
5.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetRLock c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET RLOCK        record lock before write atempt in a network environment
^BNET RLOCK record lock before write atempt in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET RLOCK^N [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper command RLOCK,
with following enhancements:
1.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
2.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
3.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetRLock c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET FLOCK        database file lock before write atempt in a network environ
^BNET FLOCK database file lock before write atempt in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET FLOCK^N [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper command FLOCK,
with following enhancements:
1.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
2.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
3.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetFLock c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET ERASE        database file delete in a network environment
^BNET ERASE database file delete in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET ERASE^N <file> [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper command ERASE...,
with following enhancements:
1.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
2.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
3.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetFErase c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET REINDEX      reindex of databases in a network environment
^BNET REINDEX reindex of databases in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET REINDEX^N [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper command REINDEX...,
with following enhancements:
1.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
2.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
3.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetReIndex c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET PACK         pack of database in a network environment
^BNET PACK pack of database in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET PACK^N [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper command PACK...,
with following enhancements:
1.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
2.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
3.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetPack c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET ZAP          zap of database in a network environment
^BNET ZAP zap of database in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET ZAP^N [^UCONTINUE^N] [^URETURN^N <expr>]

Function:
~~~~~~~~~
It is a network version of clipper command ZAP...,
with following enhancements:
1.Network enhancement: If command fails, the user is given an Alert about it
  and he is to decide the next step:
        - repeat the failed command
        - continue even if the command failed, and when the CONTINUE clause
          was used
        - break of the program with a question if the user realy wants to
          break the program
2.CONTINUE clause: If set the user has the possibility to continue after
  a network error occured. This can be checked by NetErr(), which is after
  a network error set to true, when also the CONTINUE clause is used.
3.RETURN clause: is to use when is the continue clause used too. If it is
  used and after an failed command user wants to continue, the RETURN false
  command is performed to immediate break of a failed function.

This enhancements are a strong tool for a programmer, but this library has
better capabilities to handle the database in a network environment, see the
objects of Dbf and View classes for a high level network data handle.

Source code is in Object.ch a Object3.prg

!seealso: ob_funct.ngo:NetZap c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET UNLOCK       unlock of database record in a network environment
^BNET UNLOCK unlock of database record in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET UNLOCK^N [<rest>]

Function:
~~~~~~~~~
It is a network version of clipper command UNLOCK...,
the COMMIT command is performed and then UNLOCK [<rest>].
Source code is in  Object.ch

!seealso: "NET RLOCK" c_dbf.ngo:Dbf c_view.ngo:View


'####################################################################################
!short:NET CLOSE        close of database in a network environment
^BNET CLOSE close of database in a network environment:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Syntax:
~~~~~~~

  ^UNET CLOSE^N [<rest>]

Function:
~~~~~~~~
It is a network version of clipper command CLOSE...,
the NET UNLOCK [<rest>] is performed and then CLOSE [<rest>].
Source code is in  Object.ch

!seealso: "NET UNLOCK" "NET RLOCK" c_dbf.ngo:Dbf c_view.ngo:View

'
' eof (c)JHK 
'

