home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C!T ROM 2
/
ctrom_ii_b.zip
/
ctrom_ii_b
/
PROGRAM
/
FOXPRO
/
TABLES
/
TBLSRC
/
TABLE.PRG
< prev
next >
Wrap
Text File
|
1992-11-11
|
7KB
|
285 lines
* Program :table.prg
* Author :Mark D. Miller
* Date :03-Aug-1992
* Notice : Copyright (c) 03-Aug-1992 by Mark D. Miller
* All Rights Reserved.
* Notes :See if I can implement table fields!!!
#INCLUDE IO.HDR
#INCLUDE KEYS.HDR
#INCLUDE FILEIO.HDR
#INCLUDE STRING.HDR
#INCLUDE COLORS.HDR
#INCLUDE PICK.HDR
#INCLUDE WARN.HDR
*
* Global Memory
*
VARDEF
CHAR( 12 ) OpenTableName
FILE OpenTableHandle
CHAR( 1 ) SEX
CHAR( 11 ) box_ = "▓▓▓▓▓▓▓▓▓▓▓"
UINT cnt, cnt2,ky
LONG p, k
LOGICAL PicksInited = .F.
LOGICAL NewTableAndEnterPressed = .F.
INT TableType
ENDDEF
procedure ClearTable
parameters value char( 8 ) name
pick_clear(p)
pick_clear(k)
OpenTableName = space(12)
endpro
function logical InitTable
parameters value char( 8 ) name
vardef
CHAR TableIn
enddef
@ 12,1 say "In InitTable"
*
* Create Pick list to show entries in.
*
OpenTableName = TRIM( name )+".tbl"
* @ 8, 1 SAY "Opening table..."+OpenTableName
IF .NOT. F_OPEN( OpenTableHandle, OpenTableName, &F_READ )
?"error: can't find table!"
RETURN .f.
ENDIF
*
* Bypass first line which is comment line (get table type)
*
p = PICK_INIT()
F_GETLN( OpenTableHandle, TableIn )
TableType = VAL( TableIn )
* @ 8, 40 SAY "TableType = "+I_STR( TableType )
IF TableType = 0 .OR. TableType > 2
TableType = 1 && Numerical table
ENDIF
IF TableType = 2 && Keyed table
* @ 9, 1 SAY "Initing the key pick list"
k = PICK_INIT()
ENDIF
*
* Load the table entries in the pick list
*
cnt = 0
DO WHILE .NOT. F_EOF( OpenTableHandle )
F_GETLN( OpenTableHandle, TableIn )
IF TableType = 2
PICK_ADD( k, LEFT( TableIn, AT( "-", TableIn )-1 ) )
PICK_ADD( p, SUBSTR( TableIn, AT( "-", TableIn )+1, LEN( TableIn ) ) )
ELSE
PICK_ADD( p, TableIn )
ENDIF
cnt = cnt + 1
ENDDO
F_CLOSE( OpenTableHandle )
* @11, 1 SAY "Completed initializing picks! Cnt ="+i_str(cnt)
return .t.
endpro
* Function :Table
* Date :03-Aug-1992
* Parameters:name Name of table
* :tlr Top Left Row of Window
* :tlc Top Left Column of Window
* :rows Number of items to display at once
* :length Max Length of table strings
* :pkey Key into PickList
* :
* Return Val:ky Key pressed
* :
* Notes :This routine opens the correct table file and looks up the value
* in the file.
*
FUNCTION UINT Table
PARAMETERS CONST CHAR( 8 ) name,;
VALUE INT tlr,;
VALUE INT tlc,;
VALUE INT rows,;
VALUE INT length,;
CHAR( 4 ) pkey
VARDEF
UINT s
LOGICAL fnd
INT ttlr
INT ttlc
INT brr
INT brc
INT rc
CHAR( 4 ) mykey
INT l
ENDDEF
ky = LASTKEY()
IF ky <> &K_TAB
RETURN ky
ENDIF
*
* Init the table if not already
*
@ 11,0 say ">"+Name+"< >"+OpenTableName+"<"
if at(Name,OpenTableName) = 0
if .not. InitTable(Name)
return 0
endif
endif
*
* Set up window coords
*
ttlr = tlr
ttlc = tlc
IF ttlr = 0
ttlr = 1
ENDIF
IF ttlc = 0
ttlc = 1
ENDIF
brr = ( ttlr + rows )-1
brc = ttlc + length
IF brr+2 > 23
brr = 21
ENDIF
IF brc+4 > 78
brc = 74
ENDIF
* ?? ttlr, ttlc, brr, brc
* @12, 1 SAY "preparing to display picks"
s = SAVESCRN( ttlr-1, ttlc-1, brr+2, brc+2 ) && A little bigger than necessary
FILL( ttlr-1, ttlc-1, brr+2, brc+2, &SINGLE_BOX, " ", &blue_white, &green_light_grey, 6 )
PICK_LIST( p, ttlr, ttlc, brr, brc, rc, .F., .F. )
KEY_INT( &K_HOME )
KEY_INT( &K_DEL )
KEY_INT( &K_DEL )
KEY_INT( &K_DEL )
KEY_INT( &K_DEL )
IF TableType = 1
pkey = I_STR( rc )
KEYBOARD( pkey )
ELSE
pkey = PICK_STR( k, rc )
KEYBOARD( pkey ) && Get the chosen value
ENDIF
RESTORESCRN( s )
* @13, 1 SAY "returning to get!"
RETURN &K_HOME
ENDPRO
FUNCTION LOGICAL VerifyTable
PARAMETERS VALUE CHAR( 8 ) name,;
value int row,;
value int col,;
value int length,;
VALUE CHAR( 4 ) pkey
VARDEF
CHAR TableIn
LOGICAL fnd
CHAR( 4 ) pkey2, mykey
INT l
ENDDEF
*
* Init the table if not already
*
if at(Name,OpenTableName) = 0
if .not. InitTable(Name)
return .t.
endif
endif
pkey2=TRIM( pkey )
IF pkey2=""
@ row,col clear to row,col+length
if ky = &K_ENTER .or. ky = &K_ESC .or. ky = &K_C_END .or. (ky > &K_HOME .and. ky < &K_INS)
ClearTable(Name)
endif
RETURN .T. && Always allow to skip field
ENDIF
*
* Validate the choice against the list
*
IF TableType = 1
if i_val(pkey2)=0
fnd=.f.
else
IF I_VAL( pkey2 ) > cnt
fnd= .F.
ELSE
@ row,col clear to row,col+length
@row,col ?? pick_str(p,i_val(pkey2))
fnd = .T.
ENDIF
endif
ELSE
cnt2 = 1
fnd = .F.
DO WHILE cnt2 < cnt+1 .AND. .NOT. fnd
mykey = PICK_STR( k, cnt2 )
L = LEN( mykey )
IF LEFT( pkey2, L ) = mykey
fnd = .T.
@ row,col clear to row,col+length
@row,col ?? pick_str(p,cnt2)
ENDIF
cnt2 = cnt2 + 1
ENDDO
ENDIF
IF .NOT. fnd
@ 18, 1
WAIT CHR( 7 )+"Table error!!! Press TAB for choices!"
else
if ky = &K_ENTER .or. ky = &K_ESC .or. ky = &K_C_END .or. (ky > &K_HOME .and. ky < &K_INS)
ClearTable(Name)
endif
ENDIF
RETURN fnd
ENDPRO
PROCEDURE FORCE_MAIN
VARDEF
CHAR( 10 ) fname
INT age
ENDDEF
SET CONFIRM ON
CLEAR
*FILL( 0, 0, 25, 80, box_, box_, 15, 15, 0 )
@ 1, 1 SAY "First Name : " GET fname
@ 3, 1 SAY "table value : " ;
GET SEX PICTURE "!!" ;
FILTER Table( "SEXCODES", 3, 30, 5, 15, SEX ) ;
VALID VerifyTable( "SEXCODES", 3, 22, 15, SEX )
@ 5, 1 SAY "Your Age : " GET age PICTURE "999"
READ
ENDPRO