109 lines
2.7 KiB
C
109 lines
2.7 KiB
C
|
/*********************************************************************
|
||
|
|
||
|
d4ascii.c (c)Copyright Sequiter Software Inc., 1990-1991.
|
||
|
All rights reserved.
|
||
|
|
||
|
Creates a database file from an ASCII file.
|
||
|
|
||
|
NOTE: Make sure that the accompanying ascii file, 'INVENTOR.ASC'
|
||
|
is with this file when executing the program.
|
||
|
|
||
|
*********************************************************************/
|
||
|
|
||
|
#include "d4all.h"
|
||
|
|
||
|
#ifdef __TURBOC__
|
||
|
extern unsigned _stklen = 10000 ; /* Borland only */
|
||
|
#endif
|
||
|
|
||
|
#define DESC_LEN 20
|
||
|
#define CODE_LEN 4
|
||
|
#define VALUE_LEN 6
|
||
|
#define QUANTITY_LEN 5
|
||
|
|
||
|
#define DESC_POS 0
|
||
|
#define CODE_POS (DESC_POS + DESC_LEN)
|
||
|
#define VALUE_POS (CODE_POS + CODE_LEN)
|
||
|
#define QUANTITY_POS (VALUE_POS+ VALUE_LEN)
|
||
|
|
||
|
/* The carriage return and line feed characters are included. */
|
||
|
|
||
|
#ifdef S4UNIX
|
||
|
#define TOTAL_LEN (QUANTITY_POS + QUANTITY_LEN + 1)
|
||
|
#else
|
||
|
#define TOTAL_LEN (QUANTITY_POS + QUANTITY_LEN + 2)
|
||
|
#endif
|
||
|
|
||
|
CODE4 code_base ;
|
||
|
DATA4 *inventory ;
|
||
|
FIELD4 *descrip, *code, *value, *quantity ;
|
||
|
|
||
|
FILE4 ascii ;
|
||
|
FILE4SEQ_READ seq_read ;
|
||
|
|
||
|
char ascii_buf[TOTAL_LEN], seq_read_buf[1024] ;
|
||
|
|
||
|
FIELD4INFO inventory_fields[] =
|
||
|
{
|
||
|
{ "CODE", 'C', 4, 0 },
|
||
|
{ "DESCRIP", 'C', 30, 0 },
|
||
|
{ "DATE", 'D', 8, 0 },
|
||
|
{ "VALUE", 'N', 8, 2 },
|
||
|
{ "QUANTITY", 'N', 6, 0 },
|
||
|
{ 0,0,0,0 }
|
||
|
} ;
|
||
|
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
d4init( &code_base ) ;
|
||
|
|
||
|
code_base.safety = 0 ;
|
||
|
|
||
|
/* Create the data file; open the ASCII file. */
|
||
|
inventory = d4create( &code_base, "INVENTOR", inventory_fields,0);
|
||
|
file4open( &ascii, &code_base, "inventor.asc", 0 ) ;
|
||
|
e4exit_test( &code_base ) ;
|
||
|
|
||
|
descrip = d4field( inventory, "DESCRIP" ) ;
|
||
|
code = d4field( inventory, "CODE" ) ;
|
||
|
value = d4field( inventory, "VALUE" ) ;
|
||
|
quantity = d4field( inventory, "QUANTITY" ) ;
|
||
|
|
||
|
/* Initialize to read the ASCII file with extra fast performance. */
|
||
|
|
||
|
file4seq_read_init( &seq_read, &ascii, 0, seq_read_buf,
|
||
|
sizeof(seq_read_buf) ) ;
|
||
|
|
||
|
for(;;)
|
||
|
{
|
||
|
unsigned len_read ;
|
||
|
|
||
|
/* Read one ASCII record. */
|
||
|
len_read = file4seq_read( &seq_read, ascii_buf, sizeof(ascii_buf) );
|
||
|
|
||
|
if ( len_read != sizeof(ascii_buf) ) break ;
|
||
|
|
||
|
/* Start the Append Operation */
|
||
|
d4append_start( inventory, 0 ) ;
|
||
|
|
||
|
/* Assign the fields. */
|
||
|
f4assign_n( descrip, ascii_buf+DESC_POS, DESC_LEN ) ;
|
||
|
f4assign_n( code, ascii_buf+CODE_POS, CODE_LEN ) ;
|
||
|
|
||
|
f4assign_double( value, c4atod( ascii_buf+VALUE_POS, VALUE_LEN) ) ;
|
||
|
f4assign_double( quantity, c4atod( ascii_buf+QUANTITY_POS,
|
||
|
QUANTITY_LEN) ) ;
|
||
|
|
||
|
/* Append the new record */
|
||
|
d4append( inventory ) ;
|
||
|
}
|
||
|
|
||
|
d4close(inventory) ;
|
||
|
file4close( &ascii ) ;
|
||
|
d4init_undo( &code_base ) ;
|
||
|
mem4reset() ;
|
||
|
|
||
|
exit(0) ;
|
||
|
}
|