home *** CD-ROM | disk | FTP | other *** search
- DECLARE FUNCTION DbfCreate% (FileIn$)
- DECLARE SUB DoDosCall (FileName$)
- DECLARE FUNCTION Exist% (FileName$)
-
- DEFINT A-Z
-
- 'PROGRAM - MAKEDBF.BAS
- 'Create a dBASE DBF file with each type of data
- 'field.
-
- ' QB 4.5 users should use the QB.BI file in the
- ' next instruction
-
- '$INCLUDE: 'QBX.BI'
-
- ' Version 7.0 users MUST use RegTypeX instead of
- ' RegType because of far strings. Note that error
- ' trapping code is not included. In your programs,
- ' you may want to handle error trapping in the
- ' event of "critical" errors.
-
- DIM SHARED InRegs AS RegTypeX, OutRegs AS RegTypeX
-
- TYPE DbfFieldMask
- FdName AS STRING * 11
- FdType AS STRING * 1
- Reserved1 AS STRING * 4
- FdLength AS STRING * 1
- FdDec AS STRING * 1
- Reserved2 AS STRING * 14
- END TYPE
-
- TYPE DbfHdrMask
- VersionNumber AS STRING * 1
- Update AS STRING * 3
- NbrRec AS LONG
- HdrLen AS INTEGER
- RecLen AS INTEGER
- Reserved AS STRING * 20
- END TYPE
-
- CLS
-
- FileName$ = "PLANETS.LAY"
-
- ActionCreate = DbfCreate(FileName$)
-
- PRINT "DBF file creation for "; FileName$;
- IF ActionCreate THEN
- PRINT " successful."
- ELSE
- PRINT " failed."
- END IF
-
- END
-
- FUNCTION DbfCreate% (FileIn$)
-
- PeriodPos = INSTR(FileIn$, ".")
-
- IF PeriodPos = 0 THEN
- FileOut$ = FileIn$ + ".DBF"
- FileIn$ = FileIn$ + ".LAY"
- ELSE
- FileOut$ = LEFT$(FileIn$, PeriodPos - 1) + _
- ".DBF"
- END IF
-
- IF NOT Exist%(FileIn$) THEN
- PRINT "Error - Layout file "; FileIn$; _
- " does not exist."
- EXIT FUNCTION
- END IF
-
- IF Exist%(FileOut$) THEN
- PRINT "Warning - DBF file "; FileOut$; _
- " already exists."
- PRINT "Replace current "; FileOut$; _
- " (Y/N)?: ";
- INPUT Response$
- IF UCASE$(Response$) <> "Y" THEN
- PRINT "File Not Replaced"
- EXIT FUNCTION
- END IF
- END IF
-
- FileLayout = 1
- NewDbfFile = 2
-
- OPEN FileIn$ FOR INPUT AS FileLayout
- OPEN FileOut$ FOR BINARY AS NewDbfFile
-
- DIM FieldRec AS DbfFieldMask
- DIM Header AS DbfHdrMask
-
- FieldCounter = 0
- RecordLength = 0
-
- DbfCreate% = 0 'Set function to failed status
-
- EOH = &HD
- EODbf = &H1A
-
- FieldRec.Reserved1 = STRING$(4, 0)
- FieldRec.Reserved2 = STRING$(14, 0)
-
- 'Position DBF file for first write
-
- SEEK NewDbfFile, 33
-
- 'First process the fields
-
- WHILE NOT EOF(FileLayout)
- LINE INPUT #FileLayout, Temp$
- FieldCounter = FieldCounter + 1
- Location = INSTR(Temp$, " ")
- IF Location < 11 THEN
- FdName$ = LEFT$(Temp$, Location - 1)
- ELSE
- FdName$ = LEFT$(Temp$, 10)
- END IF
- FieldRec.FdName = FdName$ + _
- STRING$(11 - LEN(FdName$), 0)
- FieldRec.FdType = MID$(Temp$, 11, 1)
- FieldRec.FdLength = _
- CHR$(VAL(MID$(Temp$, 12, 3)))
- FieldRec.FdDec = _
- CHR$(VAL(MID$(Temp$, 15, 2)))
- PUT NewDbfFile, , FieldRec
- RecordLength = RecordLength + _
- ASC(FieldRec.FdLength)
- WEND
-
- CLOSE FileLayout
-
- PUT NewDbfFile, , EOH 'End of header
- PUT NewDbfFile, , EODbf'End of file
-
- ' Now set the header information
-
- Header.VersionNumber = CHR$(&H3)
- MID$(Header.Update, 1, 1) = _
- CHR$(VAL(RIGHT$(DATE$, 4)) - 1900)
- MID$(Header.Update, 2, 1) = _
- CHR$(VAL(LEFT$(DATE$, 2)))
- MID$(Header.Update, 3, 1) = _
- CHR$(VAL(MID$(DATE$, 4, 2)))
- Header.NbrRec = 0
- Header.HdrLen = FieldCounter * 32 + 33
- Header.RecLen = RecordLength + 1
- Header.Reserved = STRING$(20, 0)
-
- PUT NewDbfFile, 1, Header 'At beginning of file
- CLOSE NewDbfFile
- DbfCreate = -1 'Successful creation
- END FUNCTION
-
- SUB DoDosCall (FileName$)
-
- ' If you have QuickBASIC, change all
- ' occurrences of SSEG to VARSEG.
-
- ' DOS requires an ASCIIZ string so add CHR$(0)
-
- Spec$ = FileName$ + CHR$(0)
- InRegs.ds = SSEG(Spec$) ' Load DS:DX with
- InRegs.dx = SADD(Spec$) ' address of Spec$
- CALL InterruptX(&H21, InRegs, OutRegs)
-
- END SUB
-
- FUNCTION Exist% (FileName$)
-
- ' See if a given file exists using
- ' DOS "Search for first match" service &H4E
-
- InRegs.ax = &H4E00
- InRegs.cx = 63 ' Search for all files
- DoDosCall (FileName$)
-
- ' If AX contains a value, then file does not exist
-
- SELECT CASE OutRegs.ax
- CASE 0
- Exist% = -1
- CASE ELSE
- Exist% = 0
- END SELECT
-
- END FUNCTION
-
-