ING_DB
This commit is contained in:
parent
6e9ad65d07
commit
10dfba6848
|
|
@ -0,0 +1,464 @@
|
|||
/*
|
||||
** J. Wenzlaff, ZKI der AdW
|
||||
**
|
||||
** REDABAS -- creation of DB relations from REDABAS data base
|
||||
*/
|
||||
|
||||
# include "db.h"
|
||||
# ifdef MSDOS
|
||||
# include "../h/aux#.h"
|
||||
# else
|
||||
# include "../h/aux.h"
|
||||
# endif
|
||||
|
||||
# ifdef P8000
|
||||
ret_buf AAjmp_buf;
|
||||
# else
|
||||
jmp_buf AAjmp_buf;
|
||||
# endif
|
||||
|
||||
struct admin AAdmin;
|
||||
static char Tuple[MAXTUP]; /* tuple buffer */
|
||||
# ifdef MSDOS
|
||||
char *Database;
|
||||
char *Fileset;
|
||||
extern char *mkfileset();
|
||||
# endif
|
||||
extern char *N_db; /* overwrinting for DB */
|
||||
extern char *N_dbd; /* overwrinting for RDABAS.DBD */
|
||||
# define VERBOSE 50
|
||||
extern char *Parmvect[];
|
||||
extern char *Flagvect[];
|
||||
# ifdef MSDOS
|
||||
extern char *AAdbpath[];
|
||||
# else
|
||||
extern char *AAdbpath;
|
||||
# endif
|
||||
|
||||
# define DBI_PARM Parmvect[0]
|
||||
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
register int i;
|
||||
register char **av;
|
||||
register char *p;
|
||||
extern char *AAproc_name;
|
||||
# ifdef SETBUF
|
||||
char buf[BUFSIZ];
|
||||
|
||||
setbuf(stdout, buf);
|
||||
# endif
|
||||
# ifdef xSTR1
|
||||
AAtTrace(&argc, argv, 'X');
|
||||
# endif
|
||||
|
||||
AAproc_name = *argv;
|
||||
|
||||
# ifdef MSDOS
|
||||
Fileset = mkfileset();
|
||||
# endif
|
||||
|
||||
i = initucode(argc, argv, 0, (char **) 0, M_SHARE);
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
|
||||
case 3:
|
||||
AAsyserr(0, "REDABAS\tSie sind kein eingetragener %s-Nutzer", USERDBS);
|
||||
|
||||
default:
|
||||
AAsyserr(22200, AAproc_name, i);
|
||||
}
|
||||
# ifdef MSDOS
|
||||
Database = Parmvect[0];
|
||||
# endif
|
||||
|
||||
i = 0;
|
||||
for (av = Flagvect; p = *av; av++)
|
||||
{
|
||||
if (p[0] != '-')
|
||||
goto badflag;
|
||||
switch (p[1])
|
||||
{
|
||||
case CMD_DBD:
|
||||
N_dbd = &p[2];
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
case 'I':
|
||||
N_db = &p[2];
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
case 'R':
|
||||
switch (p[2])
|
||||
{
|
||||
case 'd':
|
||||
case 'D':
|
||||
List_rec = 1;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
case 'V':
|
||||
List_rec = 2;
|
||||
break;
|
||||
|
||||
default:
|
||||
goto badflag;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
badflag:
|
||||
printf("REDABAS\tUnbekanntes Flag '%s'\n", p);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if (i)
|
||||
goto usage;
|
||||
|
||||
if (!DBI_PARM)
|
||||
{
|
||||
usage:
|
||||
printf("usage:\t%s [flags] dbi\n", *argv);
|
||||
printf("flags:\t-%cdbd change DBD-file-name\n", CMD_DBD);
|
||||
printf("\t-idb change DB-name\n");
|
||||
printf("\t-rd transfer deleted records\n");
|
||||
printf("\t-rv transfer valid records\n");
|
||||
goto term;
|
||||
}
|
||||
|
||||
RW_flag = CMD_READ;
|
||||
dbi(DBI_PARM);
|
||||
|
||||
term:
|
||||
fflush(stdout);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
** TRANSFER read REDABAS records into DATABASE
|
||||
** return (0) = ok
|
||||
** return (1) = error
|
||||
*/
|
||||
transfer(rels)
|
||||
register int rels;
|
||||
{
|
||||
register int i;
|
||||
register int verb;
|
||||
|
||||
if (!rels)
|
||||
return (0);
|
||||
if (!(verb = (Db_hdr.db_records + VERBOSE - 1) / VERBOSE))
|
||||
verb = 1;
|
||||
printf("|--------------------------------------------------|\n");
|
||||
printf("| %5d records per \".\" |\n", verb);
|
||||
printf("|--------------------------------------------------|\n");
|
||||
fflush(stdout);
|
||||
while (rdrec())
|
||||
{
|
||||
if (!(Recno % verb))
|
||||
{
|
||||
putchar('.');
|
||||
fflush(stdout);
|
||||
}
|
||||
if (List_rec)
|
||||
{
|
||||
if (*Record == DB_RECVAL)
|
||||
{
|
||||
if (List_rec == 1)
|
||||
continue;
|
||||
}
|
||||
else if (List_rec == 2)
|
||||
continue;
|
||||
}
|
||||
for (i = 0; i < rels; i++)
|
||||
if (put_tup(&Desc_s[i], &Refs[i * MAXDOM]))
|
||||
return (1);
|
||||
}
|
||||
printf("\n|__________________________________________________|\n");
|
||||
fflush(stdout);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
** PUT_TUP convert REDABAS record into DATABASE tuple
|
||||
** return (0) = ok
|
||||
** return (1) = error
|
||||
*/
|
||||
put_tup(d, r)
|
||||
register DESC *d;
|
||||
register short *r;
|
||||
{
|
||||
register struct db_fld *f;
|
||||
register int i;
|
||||
long tid;
|
||||
|
||||
clr_rec(d);
|
||||
for (i = 1; i <= d->reldum.relatts; i++)
|
||||
{
|
||||
if (*(++r) < 0)
|
||||
continue; /* domain not filled */
|
||||
f = &Db_fld[*r];
|
||||
if (conv(f->db_f_adr, /* ptr to input chars */
|
||||
f->db_f_type, /* source format */
|
||||
ctou(f->db_f_len), /* source length */
|
||||
d->relfrmt[i], /* destination format */
|
||||
ctou(d->relfrml[i]), /* destination length */
|
||||
d->reloff[i])) /* destination offset */
|
||||
{
|
||||
printf("REDABAS\ton FIELD %d / DOMAIN %d\n", *r, i);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
AAam_insert(d, &tid, Tuple, 1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
** CLR_REC create a fresh REDABAS record
|
||||
*/
|
||||
clr_rec(d)
|
||||
register DESC *d;
|
||||
{
|
||||
register int i;
|
||||
register int len;
|
||||
register char *off;
|
||||
register int c;
|
||||
|
||||
for (i = d->reldum.relatts; i; --i)
|
||||
{
|
||||
len = ctou(d->relfrml[i]);
|
||||
off = Tuple + d->reloff[i];
|
||||
c = d->relfrmt[i] == CHAR? ' ': 0;
|
||||
do *off++ = c; while (--len);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** CONV copies data from Record into Tuple
|
||||
** doing conversions whenever necessary
|
||||
** return (0) = ok
|
||||
** return (1) = error
|
||||
*/
|
||||
conv(in, sf, sl, df, dl, doff)
|
||||
register char *in; /* pointer to input chars */
|
||||
register int sf; /* source format */
|
||||
register int sl; /* source length */
|
||||
register int df; /* destination format */
|
||||
register int dl; /* destination length */
|
||||
register int doff; /* destination offset */
|
||||
{
|
||||
char any[sizeof (double)];
|
||||
char c0_temp[MAXFIELD];
|
||||
extern long atol();
|
||||
|
||||
switch (sf)
|
||||
{
|
||||
# if (REDABAS == 3)
|
||||
case TYPE_MEMO:
|
||||
goto conv_err;
|
||||
# endif
|
||||
|
||||
case TYPE_CHAR:
|
||||
if (df != CHAR)
|
||||
goto conv_err;
|
||||
if (dl > sl)
|
||||
dl = sl;
|
||||
break;
|
||||
|
||||
case TYPE_LOG:
|
||||
if (sl != 1)
|
||||
{
|
||||
type_err:
|
||||
printf("\n\tunknown type %c%d\n", sf, sl);
|
||||
return (1);
|
||||
}
|
||||
if (df != CHAR || dl != 1)
|
||||
{
|
||||
conv_err:
|
||||
printf("\n\tcan't convert type %c%d to type %c%d\n",
|
||||
sf, sl, typeunconv(df), dl);
|
||||
return (1);
|
||||
}
|
||||
break;
|
||||
|
||||
case TYPE_DATE:
|
||||
if (sl != 8)
|
||||
goto type_err;
|
||||
if (df != CHAR || dl != 8)
|
||||
goto conv_err;
|
||||
break;
|
||||
|
||||
case TYPE_INT:
|
||||
if (df != INT || dl != sizeof (long))
|
||||
goto conv_err;
|
||||
break;
|
||||
|
||||
case TYPE_NUM:
|
||||
AAbmove(in, c0_temp, sl);
|
||||
c0_temp[sl] = 0;
|
||||
switch (df)
|
||||
{
|
||||
case FLOAT:
|
||||
AA_atof(c0_temp, any);
|
||||
switch (dl)
|
||||
{
|
||||
# ifndef NO_F4
|
||||
case sizeof (float):
|
||||
((F4TYPE *) any)->f4type = ((F8TYPE *) any)->f8type;
|
||||
break;
|
||||
# endif
|
||||
|
||||
case sizeof (double):
|
||||
break;
|
||||
|
||||
default:
|
||||
goto conv_err;
|
||||
}
|
||||
break;
|
||||
|
||||
case INT:
|
||||
((I4TYPE *) any)->i4type = atol(c0_temp);
|
||||
switch (dl)
|
||||
{
|
||||
case sizeof (char):
|
||||
((I1TYPE *) any)->i1type = ((I4TYPE *) any)->i4type;
|
||||
break;
|
||||
|
||||
case sizeof (short):
|
||||
((I2TYPE *) any)->i2type = ((I4TYPE *) any)->i4type;
|
||||
break;
|
||||
|
||||
case sizeof (long):
|
||||
break;
|
||||
|
||||
default:
|
||||
goto conv_err;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
goto conv_err;
|
||||
}
|
||||
in = any;
|
||||
break;
|
||||
|
||||
default:
|
||||
goto conv_err;
|
||||
}
|
||||
AAbmove(in, &Tuple[doff], dl);
|
||||
return (0);
|
||||
}
|
||||
/*
|
||||
** BGN_FLD start of field check
|
||||
** return (0) = ok
|
||||
** return (1) = error
|
||||
*/
|
||||
bgn_fld(argc, argv)
|
||||
int argc;
|
||||
register char **argv;
|
||||
{
|
||||
register int i;
|
||||
|
||||
if (!argc)
|
||||
{
|
||||
printf("\tmissing DBD-file-name\n");
|
||||
return (1);
|
||||
}
|
||||
if (rdhdr(argv[PTR_NAME]) || rdopen(argv[PTR_NAME]))
|
||||
return (1);
|
||||
/* clear field check area */
|
||||
for (i = 0; i < DB_FLDMAX + 2; i++)
|
||||
Flds[i] = 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
** CHK_FLD field check
|
||||
** return (0) = ok
|
||||
** return (1) = error
|
||||
*/
|
||||
chk_fld(argc, argv)
|
||||
int argc;
|
||||
register char **argv;
|
||||
{
|
||||
register int i;
|
||||
register struct db_fld *f;
|
||||
register int l;
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
printf("\tmissing FIELD-n%s\n", argc? "ame": "umber");
|
||||
return (1);
|
||||
}
|
||||
if ((i = atoi(argv[PTR_NAME])) >= Db_hdr.db_fields || i < 0)
|
||||
{
|
||||
printf("\tillegal FIELD-number %d\n", i);
|
||||
return (1);
|
||||
}
|
||||
if (Flds[i])
|
||||
{
|
||||
printf("\tduplicate FIELD-number %d\n", i);
|
||||
return (1);
|
||||
}
|
||||
Flds[i] = 1;
|
||||
if (!i)
|
||||
return (0);
|
||||
if (argc < 3)
|
||||
{
|
||||
printf("\tmissing type & length on FIELD %d\n", i);
|
||||
return (1);
|
||||
}
|
||||
if ((f = &Db_fld[i])->db_f_type != *(argv[PTR_TYPE]))
|
||||
{
|
||||
printf("\ttype error on FIELD %d\n", i);
|
||||
printf("\texpected %c\n", f->db_f_type);
|
||||
printf("\t found %c\n", *(argv[PTR_TYPE]));
|
||||
return (1);
|
||||
}
|
||||
if (ctou(f->db_f_len) != (l = atoi(argv[PTR_TYPE] + 1)))
|
||||
{
|
||||
printf("\tlength error on FIELD %d\n", i);
|
||||
printf("\texpected %d\n", ctou(f->db_f_len));
|
||||
printf("\t found %d\n", l);
|
||||
return (1);
|
||||
}
|
||||
l = (argc > 3)? atoi(argv[PTR_DEC]): 0;
|
||||
if (l != f->db_f_dec)
|
||||
{
|
||||
printf("\tpoint error on FIELD %d\n", i);
|
||||
printf("\texpected %d\n", f->db_f_dec);
|
||||
printf("\t found %d\n", l);
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
** END_FLD end of field check
|
||||
** return (0) = ok
|
||||
** return (1) = error
|
||||
*/
|
||||
end_fld()
|
||||
{
|
||||
register int i;
|
||||
|
||||
for (i = 0; i < DB_FLDMAX + 2; i++)
|
||||
if (!Flds[i])
|
||||
break;
|
||||
if (i != Db_hdr.db_fields)
|
||||
{
|
||||
printf("\tmissing FIELD with number %d\n", i);
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
** SEVERAL replacement routines
|
||||
*/
|
||||
rubproc() { fflush(stdout); exit(1); }
|
||||
Loading…
Reference in New Issue