campo-sirio/cb5/d4ascii.c

109 lines
2.7 KiB
C
Raw Normal View History

/*********************************************************************
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) ;
}