/* BASL2DBF konverterar svenska baslistan till DBF-format */
/* L�nka i LARGE MODEL med BULLET_L.LIB */
#include <dos.h>
#include <bios.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>
#include <bullet.h>
struct memorypack MP;
struct initpack IP;
struct exitpack EP;
struct createdatapack CDP;
struct createkeypack CKP;
struct dosfilepack DFP;
struct openpack OP;
struct accesspack AP;
struct statdatapack SDP;
struct exitpack EP;
struct blrectype {
char tag[1];
char telnr[11];
char basnamn[21];
char prog[2];
char hastighet[13];
char sysop[17];
char nodnr[8];
char komment[3][58];
};
struct blrectype blrec;
struct fielddesctype fieldlist1[9];
FILE* basdatf;
char blDATname[] = "BASLISTA.DBF";
unsigned blDAThandle;
char basdats[80];
#define TRUE 1
#define FALSE 0
int firsttime;
int rez,level;
main(int argc, char **argv)
{
int i;
char *p;
if(argc > 1)
{
if( ! (basdatf = fopen(argv[1],"rt"))){
printf("Couldn't find %s!\n",argv[1]);
exit(1);
}
init();
make_dbf();
clear_fields();
i = 0;
firsttime = TRUE;
while(fgets(basdats,80,basdatf))
{
if(strnicmp(&basdats[2],"- ",2) != 0)
{
if(! firsttime) {
add_record();
clear_fields();
i = 0;
}
else
firsttime = FALSE;
strncpy(blrec.telnr,&basdats[0],11);
strncpy(blrec.basnamn,&basdats[12],21);
strncpy(blrec.prog,&basdats[34],2);
strncpy(blrec.hastighet,&basdats[37],13);
strncpy(blrec.sysop,&basdats[51],17);
strncpy(blrec.nodnr,&basdats[69],8);
if(blrec.nodnr[6] == 10)
strncpy(&blrec.nodnr[6]," ",2);
else
if(blrec.nodnr[7] == 10)
blrec.nodnr[7] = 32;
}
else
{
blrec.komment[i][0] = 0;
strcpy(blrec.komment[i],basdats+13);
strncpy(&blrec.komment[i][strlen(blrec.komment[i])-1]," ",2);
i++;
}
}
add_record();
fclose(basdatf);
EP.func = EXITXB;
rez = BULLET(&EP);
}
else
{
printf("BASL2DBF konverterar BASLISTA till Dbase DBF\n");
printf("usage: basl2dbf <baslistefilnamn>\n");
}
}
init()
{
level = 100;
MP.func = MEMORYXB;
rez = BULLET(&MP);
if (MP.memory < 40000l) {
rez = 8;
error();
}
level = 110;
IP.func = INITXB;
IP.jftmode = 0;
if((rez = BULLET(&IP)) != 0) error();
}
make_dbf()
{
FILE* dummy;
if((dummy = fopen(blDATname,"rt"))) {
fclose(dummy);
unlink(blDATname);
}
strcpy(fieldlist1[0].fieldname,"TELNR");
strcpy(fieldlist1[0].fieldtype,"C");
fieldlist1[0].fieldlen = 11;
fieldlist1[0].fielddc = 0;
strcpy(fieldlist1[1].fieldname,"BASNAMN");
strcpy(fieldlist1[1].fieldtype,"C");
fieldlist1[1].fieldlen = 21;
fieldlist1[1].fielddc = 0;
strcpy(fieldlist1[2].fieldname,"PROG");
strcpy(fieldlist1[2].fieldtype,"C");
fieldlist1[2].fieldlen = 2;
fieldlist1[2].fielddc = 0;
strcpy(fieldlist1[3].fieldname,"HASTIGHET");
strcpy(fieldlist1[3].fieldtype,"C");
fieldlist1[3].fieldlen = 13;
fieldlist1[3].fielddc = 0;
strcpy(fieldlist1[4].fieldname,"SYSOP");
strcpy(fieldlist1[4].fieldtype,"C");
fieldlist1[4].fieldlen = 17;
fieldlist1[4].fielddc = 0;
strcpy(fieldlist1[5].fieldname,"NODNR");
strcpy(fieldlist1[5].fieldtype,"C");
fieldlist1[5].fieldlen = 8;
fieldlist1[5].fielddc = 0;
strcpy(fieldlist1[6].fieldname,"KOMMENT1");
strcpy(fieldlist1[6].fieldtype,"C");
fieldlist1[6].fieldlen = 58;
fieldlist1[6].fielddc = 0;
strcpy(fieldlist1[7].fieldname,"KOMMENT2");
strcpy(fieldlist1[7].fieldtype,"C");
fieldlist1[7].fieldlen = 58;
fieldlist1[7].fielddc = 0;
strcpy(fieldlist1[8].fieldname,"KOMMENT3");
strcpy(fieldlist1[8].fieldtype,"C");
fieldlist1[8].fieldlen = 58;
fieldlist1[8].fielddc = 0;
createdbf(blDATname,9,&fieldlist1);
opendbf(blDATname,&blDAThandle);
}
createdbf(char far *fname,unsigned nofields,char far *fieldlist)
{
CDP.func = CREATEDXB;
CDP.filenameptr = fname;
CDP.nofields = nofields;
CDP.fieldlistptr = fieldlist;
CDP.fileid = 3;
if((rez = BULLET(&CDP)) != 0) error();
}
opendbf(char far *fname,unsigned *handle)
{
level = 1010;
OP.func = OPENDXB;
OP.filenameptr = fname;
OP.asmode = READWRITE | DENYNONE;
if((rez = BULLET(&OP)) != 0) error();
*handle = OP.handle;
}
add_record()
{
AP.func = ADDRECORDXB;
AP.handle = blDAThandle;
AP.recptr = &blrec;
rez = BULLET(&AP);
if(rez != 0) error();
}
clear_fields()
{
memset(blrec.telnr,32,11);
memset(blrec.basnamn,32,21);
memset(blrec.prog,32,2);
memset(blrec.hastighet,32,13);
memset(blrec.sysop,32,17);
memset(blrec.nodnr,32,8);
memset(blrec.komment[0],32,58);
memset(blrec.komment[1],32,58);
memset(blrec.komment[2],32,58);
}
error()
{
printf("Error: %u at level %u while performing ",rez,level);
switch (level) {
case 100:
printf("a memory request of 140K.\n");
break;
default:
printf("(See source)\n"); /* just check the source */
}
exit(1);
}