home *** CD-ROM | disk | FTP | other *** search
- // Datadriv.prg
- //
- // Data driven routines
- //
- // BuildScreen(), ReadScren(), GetFldRefresh()
-
- #include "Inkey.ch"
-
- #define GC_SAY_ROW 1
- #define GC_SAY_COL 2
- #define GC_SAY_TEXT 3
- #define GC_SAY_PICT 4
- #define GC_SAY_COLOR 5
- #define GC_FLD_GSB 6
- #define GC_FLD_VALUE 7
-
- FUNCTION BuildScreen(cScrName)
-
- FIELD ScrName, SayRow, SayCol, SayString, ;
- SayPict, SayColor IN Screens
-
- FIELD GetRow, GetCol, GetFld, GetPict, ;
- GetWhen, GetValid, GetColor IN Screens
-
- LOCAL nGets := 0
- LOCAL i
- LOCAL aGets := {}
- LOCAL oGet
-
- Screens -> (DbSeek(cScrName))
- DO WHILE cScrName == Trim(Upper(Screens -> ScrName))
- nGets++
- Aadd(aGets, GetNew())
- oGet := aGets[nGets]
- IF Empty(SayColor)
- oGet:cargo := {SayRow, SayCol, Trim(SayString), ;
- Trim(SayPict), NIL, NIL, NIL}
- ELSE
- oGet:cargo := {SayRow, SayCol, Trim(SayString), ;
- Trim(SayPict), Trim(SayColor), NIL, NIL}
- ENDIF
-
- IF Empty(GetFld)
- oGet:preBlock := {|| .F. }
- ELSE
- oGet:cargo[GC_FLD_GSB] := FieldBlock(GetFld)
- oGet:cargo[GC_FLD_VALUE] := Eval(oGet:cargo[GC_FLD_GSB])
- oGet:block := Oblk(oGet)
- oGet:row := GetRow
- oGet:col := GetCol
- oGet:picture := Trim(GetPict)
-
- IF !Empty(GetColor)
- oGet:colorSpec := GetColor
- ENDIF
-
- IF !Empty(GetWhen)
- oGet:preBlock := &GetWhen
- ENDIF
-
- IF !Empty(GetValid)
- oGet:postBlock := &GetValid
- ENDIF
- ENDIF
-
- Screens -> (DbSkip(1))
- ENDDO
-
- RETURN aGets
-
-
- FUNCTION ReadScreen(aScreen)
-
- LOCAL i
- LOCAL oGet
- LOCAL nGets := Len(aScreen)
-
- CLEAR SCREEN
- FOR i := 1 TO nGets
- oGet := aScreen[i]
- DevPos(oGet:cargo[GC_SAY_ROW], oGet:cargo[GC_SAY_COL])
- DevOutPict(oGet:cargo[GC_SAY_TEXT], ;
- oGet:cargo[GC_SAY_PICT], ;
- oGet:cargo[GC_SAY_COLOR])
- IF oGet:block != NIL
- oGet:display()
- ENDIF
- NEXT
-
- ReadModal(aScreen)
- IF LastKey() != K_ESC .AND. Updated()
- IF Rlock()
- FOR i := 1 TO nGets
- oGet := aScreen[i]
- IF oGet:block != NIL
- Eval(oGet:cargo[GC_FLD_GSB], oGet:cargo[GC_FLD_VALUE])
- ENDIF
- NEXT
- UNLOCK
- ENDIF
- ENDIF
-
- RETURN NIL
-
- FUNCTION Oblk(oGet)
-
- RETURN {|x| iif(x == NIL, oGet:cargo[GC_FLD_VALUE], ;
- oGet:cargo[GC_FLD_VALUE] := x) }
-
-
- FUNCTION GetFldRefresh(aGets)
-
- Aeval(aGets, ;
- {|oGet| iif(oGet:block != NIL, ;
- oGet:cargo[GC_FLD_VALUE] := Eval(oGet:cargo[GC_FLD_GSB]), ;
- NIL)})
-
- RETURN NIL
-