\ DBF Fields \ Copyright (C) 2000 Alex Malyshev (alexript@mail.ru) \ This is free software; you can redistribute it and/or \ modify it under the terms of the GNU General Public License \ as published by the Free Software Foundation; either version 2 \ of the License, or (at your option) any later version. \ This program is distributed in the hope that it will be useful, \ but WITHOUT ANY WARRANTY; without even the implied warranty of \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \ GNU General Public License for more details. \ You should have received a copy of the GNU General Public License \ along with this program; if not, write to the Free Software \ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. uses Files.DBF.struct uses TTY.out uses Strings.tokens 11 CONSTANT MaxFieldNameLen : DBFGetFieldName ( aname n -- addr u ) \ !!! n >= 0 !!! DBFSubRecord %size * swap SubRecords @ + MaxFieldNameLen 0 rot rot CutAfterChar ; : DBFGetFieldType ( aname n -- char ) DBFSubRecord %size * DataType swap SubRecords @ + c@ ; : DBFGetFieldOff ( aname n -- n ) DBFSubRecord %size * FieldOff swap SubRecords @ + @ ; : DBFGetFieldLen ( aname n -- n ) DBFSubRecord %size * FieldLen swap SubRecords @ + @ ; : DBFPrintFields ( aname -- ) DUP DBFGetNumberOfFields 0 DO DUP I 2DUP 2DUP 2DUP DBFGetFieldName TYPE DBFGetFieldType ." [" EMIT ." ] " DBFGetFieldOff ." @" . DBFGetFieldLen ." :" . .TAB LOOP DROP ; : DBFFindField { aname addr u -- n -1 | 0 } FALSE aname DBFGetNumberOfFields 0 DO aname I DBFGetFieldName addr u COMPARE 0= IF DROP I TRUE LEAVE THEN LOOP ;