home *** CD-ROM | disk | FTP | other *** search
- /***
- * Gets18.prg
- */
-
- // NOTE valid and when clause must not refer to fields directly - must use
- // GetActive():varGet() or {|o| o:varGet() .... }
-
- /***
- * GET - Edit a field in variable
- *
- */
-
- #include "Getexit.ch"
- #include "Inkey.ch"
-
- // Offsets into cargo
- #define FLD_VAL 1
- #define FLD_GSB 2
-
- #command @ <row>, <col> GET <var> ;
- [<clauses,...>] ;
- TO VAR ;
- [<moreClauses,...>] ;
- ;
- => @ <row>, <col> GET <var> ;
- [<clauses>] ;
- SEND cargo := {Eval(FieldBlock(<(var)>)), ;
- FieldBlock(<(var)>)} ;
- SEND block := CargoGsb(Atail(GetList)) ;
- [<moreClauses>]
-
- MEMVAR GetList
-
- FUNCTION Gets18
-
- FIELD Lname, Fname IN test
-
- CLEAR SCREEN
- USE test SHARED
-
- @ 10, 10 SAY "Enter cVar1" GET Lname TO VAR
- @ 11, 10 SAY "Enter cVar2" GET Fname TO VAR
- READ SAVE
- IF Updated() .AND. LastKey() != K_ESC
- IF Rlock()
- UpdateFields(GetList)
- ENDIF
- ENDIF
- GetList := {}
-
- RETURN NIL
-
-
- FUNCTION UpdateFields(aGets)
-
- LOCAL i
- LOCAL nGets := Len(aGets)
-
- FOR i := 1 TO nGets
- Eval(aGets[i]:Cargo[FLD_GSB], aGets[i]:cargo[FLD_VAL])
- NEXT
-
- RETURN NIL
-
-
- FUNCTION CargoGsb(oGet)
-
- RETURN {|x| iif(x == NIL, ;
- oGet:cargo[FLD_VAL], ;
- oGet:cargo[FLD_VAL] := x) }