Category : C Source Code
Archive   : SDB.ZIP
Filename : SDBIEX.C

 
Output of file : SDBIEX.C contained in archive : SDB.ZIP
/* SDB - import/export command routines */

#include "sdbio.h"

extern int dbv_token;
extern char dbv_tstring[];
extern int dbv_tvalue;

/* db_import - import tuples from a file */
int *db_import(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9)
char *fmt;
{
struct scan *sptr;
struct attribute *aptr;
char fname[STRINGMAX+1],avalue[STRINGMAX+1];
int tcnt,astart,i,eofile;
FILE *fp;

/* check for a command line */
if (fmt != NULL)
db_scan(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9);

/* checks for " into " */
if (db_ntoken() == ID)
strcat(dbv_tstring,".dat");
else if (dbv_token != STRING)
return (db_nerror(SYNTAX));
strcpy(fname,dbv_tstring);
if (db_ntoken() != INTO)
return (db_nerror(SYNTAX));
if (db_ntoken() != ID)
return (db_nerror(SYNTAX));

/* open the relation */
if ((sptr = db_ropen(dbv_tstring)) == NULL)
return (FALSE);

/* open the input file */
if ((fp = fopen(fname,"r")) == NULL)
return (db_nerror(INPFNF));

/* import tuples */
eofile = FALSE;
for (tcnt = 0; ; tcnt++) {

/* get attribute values */
astart = 1;
for (i = 0; i < NATTRS; i++) {

/* get a pointer to the current attribute */
aptr = &sptr->sc_relation->rl_header.hd_attrs[i];

/* check for the last attribute */
if (aptr->at_name[0] == 0)
break;

/* input the tuple */
if (fgets(avalue,STRINGMAX,fp) == 0) {
eofile = TRUE;
break;
}
avalue[strlen(avalue)-1] = EOS;

/* store the attribute value */
db_aput(aptr,&sptr->sc_tuple[astart],avalue);

/* update the attribute start */
astart += aptr->at_size;
}

/* store the new tuple */
if (!eofile) {
if (!db_rstore(sptr)) {
db_rclose(sptr);
return (FALSE);
}
}
else
break;
}

/* close the relation */
db_rclose(sptr);

/* close the input file */
fclose(fp);

/* check number of tuples imported */
if (tcnt != 0) {

/* print tuple count */
printf("[ %d imported ]\n",tcnt);
}
else
printf("[ none imported ]\n");

/* return successfully */
return (TRUE);
}

/* db_export - export tuples to a file */
int *db_export(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9)
char *fmt;
{
struct scan *sptr;
struct attribute *aptr;
char rname[STRINGMAX+1],avalue[STRINGMAX+1];
int tcnt,astart,i;
FILE *fp;

/* check for a command line */
if (fmt != NULL)
db_scan(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9);

/* checks for " [ into ]" */
if (db_ntoken() != ID)
return (db_nerror(SYNTAX));
strcpy(rname,dbv_tstring);
if (!db_to(&fp,".dat"))
return (FALSE);

/* open the relation */
if ((sptr = db_ropen(rname)) == NULL)
return (FALSE);

/* export tuples */
for (tcnt = 0; db_rfetch(sptr); tcnt++) {

/* get attribute values */
astart = 1;
for (i = 0; i < NATTRS; i++) {

/* get a pointer to the current attribute */
aptr = &sptr->sc_relation->rl_header.hd_attrs[i];

/* check for the last attribute */
if (aptr->at_name[0] == 0)
break;

/* get the attribute value */
db_aget(aptr,&sptr->sc_tuple[astart],avalue);

/* output the tuple */
fprintf(fp,"%s\n",avalue);

/* update the attribute start */
astart += aptr->at_size;
}
}

/* close the relation */
db_rclose(sptr);

/* close the output file */
if (fp != stdout)
fclose(fp);

/* check number of tuples exported */
if (tcnt != 0) {

/* print tuple count */
printf("[ %d exported ]\n",tcnt);
}
else
printf("[ none exported ]\n");

/* return successfully */
return (TRUE);
}

/* db_squeeze - squeeze deleted tuples from a relation file */
int *db_squeeze(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9)
char *fmt;
{
struct scan *sptr;

/* check for a command line */
if (fmt != NULL)
db_scan(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9);

/* checks for "" */
if (db_ntoken() != ID)
return (db_nerror(SYNTAX));

/* open the relation */
if ((sptr = db_ropen(dbv_tstring)) == NULL)
return (FALSE);

/* compress the relation file */
if (!db_rcompress(sptr)) {
db_rclose(sptr);
return (FALSE);
}

/* close the relation */
db_rclose(sptr);

/* return successfully */
return (TRUE);
}

/* db_extract - extract a relation definition */
int *db_extract(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9)
char *fmt;
{
struct scan *sptr;
struct attribute *aptr;
char rname[STRINGMAX+1],aname[ANSIZE+1],*atype;
int i;
FILE *fp;

/* check for a command line */
if (fmt != NULL)
db_scan(fmt,a1,a2,a3,a4,a5,a6,a7,a8,a9);

/* checks for " [ into ]" */
if (db_ntoken() != ID)
return (db_nerror(SYNTAX));
strcpy(rname,dbv_tstring);
if (!db_to(&fp,".def"))
return (FALSE);

/* open the relation */
if ((sptr = db_ropen(rname)) == NULL)
return (FALSE);

/* output the relation definition */
fprintf(fp,"create %s (\n",rname);

/* get attribute values */
for (i = 0; i < NATTRS; i++) {

/* get a pointer to the current attribute */
aptr = &sptr->sc_relation->rl_header.hd_attrs[i];

/* check for the last attribute */
if (aptr->at_name[0] == 0)
break;

/* get the attribute name */
strncpy(aname,aptr->at_name,ANSIZE); aname[ANSIZE] = 0;

/* determine the attribute type */
switch (aptr->at_type) {
case TCHAR:
atype = "char";
break;
case TNUM:
atype = "num";
break;
default:
atype = "";
break;
}

/* output the attribute definition */
if (strlen(aname) < 8)
fprintf(fp,"\t%s\t\t%s\t%d\n",aname,atype,aptr->at_size);
else
fprintf(fp,"\t%s\t%s\t%d\n",aname,atype,aptr->at_size);
}

/* output the relation size */
fprintf(fp,") %d %d\n",sptr->sc_relation->rl_tmax,
sptr->sc_relation->rl_text);

/* close the relation */
db_rclose(sptr);

/* close the output file */
if (fp != stdout)
fclose(fp);

/* return successfully */
return (TRUE);
}



  3 Responses to “Category : C Source Code
Archive   : SDB.ZIP
Filename : SDBIEX.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/