home *** CD-ROM | disk | FTP | other *** search
- <<* APPPHRA.INC *>>
- <<#
-
- procedure FldNamList
- <<* Generates: "Field1 Field2 Field3..." *>>
- integer itemcount,listcount
- begin
- listcount := 0
- while (listcount < 3) and not eof(fields)
- gen( ' "' )
- itemcount := 0
- while (itemcount < 5) and not eof(fields)
- gen( ljust( fldnam,10 ) )
- itemcount := itemcount + 1
- skip field
- endwhile
- listcount := listcount + 1
- if (listcount = 3) or eof(fields)
- genln( '",;' )
- else
- genln( '"+;' ) <<*More to come*>>
- endif
- endwhile
- end FldNamList
-
-
- procedure GenFldName( phrasetotal : integer )
- begin
- #>>
- <<if phrasetotal <= 15>>
- fldnam = SUBSTR(;
- <<FldNamList>>
- fldnum*10-9,10 )
- <<elsif phrasetotal <= 30>>
- IF fldnum <= 15
- fldnam = SUBSTR(;
- <<FldNamList>>
- fldnum*10-9,10 )
- ELSE
- fldnam = SUBSTR(;
- <<FldNamList>>
- (fldnum-15)*10-9,10 )
- ENDIF
- <<elsif phrasetotal <= 32000>>
- DO CASE
- CASE fldnum <= 15
- fldnam = SUBSTR(;
- <<FldNamList>>
- fldnum*10-9,10 )
- CASE fldnum <= 30
- fldnam = SUBSTR(;
- <<FldNamList>>
- (fldnum-15)*10-9,10 )
- OTHERWISE
- fldnam = SUBSTR(;
- <<FldNamList>>
- (fldnum-30)*10-9,10 )
- ENDCASE
- <<endif>>
- <<end GenFldName>>
-
-
- <<#
- procedure FldAlsList( fldmax : integer )
- begin
- gen( 'fldals = SUBSTR( "' )
- forall (forcount <= fldmax)
- gen( fldals )
- endfor
- genln( '",fldnum,1 )' )
- end <<*FldAlsList*>>
-
-
- procedure FldTypList( fldmax : integer )
- begin
- gen( 'fldtyp = SUBSTR( "' )
- forall (forcount <= fldmax)
- gen( fldtyp )
- endfor
- genln( '",fldnum,1 )' )
- end <<*FldTypList*>>
-
-
- procedure FldWidList
- integer listcount,itemcount
- begin
- select field 1 <<*GOTO TOP*>>
- genln( 'fldwid = VAL( SUBSTR(;' )
- listcount := 0
- while (listcount < 3) and not eof(fields)
- gen( ' "' )
- itemcount := 0
- while (itemcount < 15) and not eof(fields)
- gen( str( fldwid,3 ) )
- itemcount := itemcount + 1
- skip field
- endwhile
- listcount := listcount + 1
- if (listcount = 3) or eof(fields)
- genln( '",;' )
- else
- genln( '"+;' ) <<*More to come*>>
- endif
- endwhile
- genln( ' fldnum*3-2,3 ) )' )
- end <<*FldWidList*>>
-
-
- procedure FldDecList
- integer listcount,itemcount
- begin
- select field 1 <<*GOTO TOP*>>
- genln( ' flddec = VAL( SUBSTR(;' )
- listcount := 0
- while (listcount < 3) and not eof(fields)
- gen( ' "' )
- itemcount := 0
- while (itemcount < 15) and not eof(fields)
- gen( str(flddec,2) )
- itemcount := itemcount + 1
- skip field
- endwhile
- listcount := listcount + 1
- if (listcount = 3) or eof(fields)
- genln( '",;' )
- else
- genln( '"+;' ) <<*More to come*>>
- endif
- endwhile
- genln( ' fldnum*2-1,2 ) )' )
- end <<*FldDecList*>>
-
-
- procedure GenFldGet
- integer phrasecount
- logical isholding
- string picstrg,fldstrg
- begin
- phrasecount := 0
- isholding := false
- forall fields
- phrasecount := phrasecount + 1
- fldstrg := str( phrasecount ) <<*Convert fld# to str*>>
-
- if (fldran or fldval or fldpic) or ((fldpic = '') and (fldtyp = 'N'))
- if isholding
- genln( 'CASE fldnum < ',fldstrg )
- genln( ' @ row,col GET fldget' )
- end
- genln( 'CASE fldnum = ',fldstrg )
- gen( ' @ row,col GET fldget' )
-
- if fldpic <<*We've got a PICTURE clause*>>
- gen( ' PICTURE "',fldpic,'"' )
- elsif fldtyp = 'N' <<*Force a PICTURE on Numerics*>>
- picstrg := replicate( '9',fldwid )
- if flddec <> 0
- picstrg[ fldwid-flddec ] := '.'
- endif
- gen( ' PICTURE "',picstrg,'"' )
- endif
-
- if fldran
- gen( ' RANGE ',fldran )
- endif
- <<*Don't allow VALID(), since it might fail when using CONDITIONS.*>>
- <<*CONDITIONS uses SELECT H, and VALID might expect SELECT A,B,etc.*>>
- genln <<*CR/LF*>>
- isholding := false
- else
- isholding := true
- end
- endfor
-
- if isholding
- genln( 'CASE fldnum <= ',fldstrg ) <<*Gen phrasetotal value*>>
- genln( ' @ row,col GET fldget' )
- end
- end <<*GenFldGet*>>
- #>>
-
-
- <<procedure GenPhrase( phrasetotal : integer )>>
- <<begin>>
- PARAMETER firstrow,fldnum,phrase
- PRIVATE row,col,oper,opernum,operMAX
- PRIVATE fldnam,fldtyp,fldwid,flddec,fldget
- row = firstrow
- opernum = 0
- *
- <<if feat(featals)>>
- * ---Get field information: fldals->fldnam,fldtyp,fldwid,flddec
- <<FldAlsList( phrasetotal )>>
- <<else>>
- * ---Get field information: fldnam,fldtyp,fldwid,flddec
- <<endif>>
- <<GenFldName( phrasetotal )>>
- @ row+1,0
- <<GenColor( 0,'HILITE' )>>
- @ row+1,0 SAY fldnam
- <<if feat(featals)>>
- fldnam = fldals + "->" + TRIM(fldnam)
- <<else>>
- fldnam = TRIM( fldnam )
- <<endif>>
- <<FldTypList( phrasetotal )>>
- <<FldWidList>>
- DO CASE
- CASE fldtyp = "C"
- fldget = SPACE( fldwid )
- CASE fldtyp = "D"
- fldget = CTOD( " / / " )
- CASE fldtyp = "N"
- fldget = 0.00
- <<FldDecList>>
- OTHERWISE
- fldget = .T.
- opernum = 1
- ENDCASE
- *
- * ---Get OPERATOR.
- <<GenColor( 0,'WINDOW' )>>
- IF opernum = 0
- opernum = 1
- operMAX = VAL( SUBSTR( "8661",AT( fldtyp,"CDNL" ),1 ) )
- @ row,0
- @ row,0 SAY "Enter OPERATOR #" GET opernum PICTURE "99" RANGE 1,operMAX
- READ
- IF opernum = 8
- fldget = SPACE( 65 )
- ENDIF
- ENDIF
- oper = TRIM( SUBSTR( " = <>> >=< <=$ $ ",opernum*2,2 ) )
- <<GenColor( 0,'HILITE' )>>
- @ row+1,12 SAY oper
- *
- * ---Get field VALUE.
- <<GenColor( 0,'WINDOW' )>>
- @ row,0
- @ row,0 SAY "Enter VALUE to compare"
- row = row + 1
- col = 15
- DO CASE
- <<GenFldGet>>
- ENDCASE
- READ
- *
- * ---Build phrase.
- DO CASE
- CASE opernum = 7
- * ---Only character types can use the "$" operator.
- phrase = [{"}]+UPPER(TRIM(fldget))+[{"}] + oper + "UPPER("+fldnam+")"
- CASE fldtyp = "C"
- phrase = "UPPER("+fldnam+")" + oper + [{"}]+UPPER(TRIM(fldget))+[{"}]
- CASE fldtyp = "N"
- phrase = fldnam + oper + STR( fldget,fldwid,flddec )
- CASE fldtyp = "D"
- IF DTOC(fldget) = " / / "
- phrase = [DTOC(] + fldnam + [)] + oper + [" / / "]
- ELSE
- phrase = fldnam + oper + [CTOD({"}] + DTOC(fldget) + [{"})]
- ENDIF
- CASE fldget
- phrase = fldnam
- OTHERWISE
- phrase = ".NOT." + fldnam
- ENDCASE
- phrase = "(" + phrase + ")"
- <<end>> <<*GenPhrase*>>
-
-
- <<#
- procedure GenPhraseBody
- begin
- <<*---set the filter---*>>
- select fields on (fldtyp $ 'CDLN') and fldget
- if fldtotal = 0
- <<*do nothing*>>
- elsif fldtotal > 42 <<*Maximum # of fields in Query Table*>>
- GenPhrase( 42 )
- else
- GenPhrase( fldtotal )
- endif
- select all fields
- end GenPhraseBody
-
- <<* EOF: APPPHRA.INC *>>
- #>>