This commit is contained in:
Oliver Lehmann 1989-12-19 12:13:06 +00:00
parent 826babe59a
commit 40d2a90975
1 changed files with 345 additions and 0 deletions

View File

@ -0,0 +1,345 @@
/*
** J. Wenzlaff, ZKI der AdW
**
** REDABAS -- creation of REDABAS / DB relations
*/
# include "db.h"
# include "../h/version.h"
# ifdef P8000
ret_buf AAjmp_buf;
# else
jmp_buf AAjmp_buf;
# endif
static char D = 1; /* don't convert record mark&no */
static char List; /* flag to list only */
struct admin AAdmin;
extern char *Parmvect[];
extern char *Flagvect[];
# ifdef MSDOS
char *Database;
char *Fileset;
extern char *mkfileset();
extern char *AAdbpath[];
# else
extern char *AAdbpath;
# endif
# define DBI_PARM Parmvect[0]
# define DBD_PARM Parmvect[1]
# define DB_PARM Parmvect[2]
# define REL_PARM Parmvect[3]
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
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 'f':
case 'F':
List_fld++;
break;
case 'h':
case 'H':
List_hdr++;
break;
case 'i':
case 'I':
D = -1;
break;
case 'l':
case 'L':
List++;
break;
case 'r':
case 'R':
switch (p[2])
{
case 'd':
case 'D':
List_rec = 1;
break;
case 'v':
case 'V':
List_rec = 2;
break;
case 0:
List_rec = 3;
break;
default:
goto badflag;
}
break;
default:
badflag:
printf("REDABAS\tUnbekanntes Flag '%s'\n", p);
i++;
}
}
if (i)
goto usage;
if (!REL_PARM)
{
usage:
printf("usage:\t%s [flags] dbi dbd db {rel}\n", *argv);
printf("flags:\t-f list field descriptions\n");
printf("\t-h list header\n");
printf("\t-i convert into %s format\n", USERDBS);
printf("\t-l don't create DBI-file\n");
printf("\t-r list all records\n");
printf("\t-rd list deleted records\n");
printf("\t-rv list valid records\n");
goto term;
}
/* open REDABAS head informations */
if (rdhdr(DBD_PARM))
{
printf("REDABAS\tsyntax error\n");
goto term;
}
/* create DBI-file (if wanted) */
if (!List && dbi())
goto term;
/* list REDABAS records (if wanted) */
if (!List_rec || rdopen(DBD_PARM))
goto term;
printf("\n----no-*------------------------------------------------\n");
for (i = 1; rdrec(); i++)
prrec();
printf("--------------------------------------------------------\n");
term:
fflush(stdout);
return (0);
}
/*
** DBI create DBI-file
** return (0) = ok
** return (1) = error
*/
static int dbi()
{
register int i;
register FILE *dbi;
register struct db_fld *f;
register char **rel;
extern char *lower();
# ifdef SETBUF
static char dbi_buf[BUFSIZ];
# endif
if ((dbi = fopen(DBI_PARM, "w")) == (FILE *) 0)
{
printf("REDABAS\tcan't access DBI-file %s\n", DBI_PARM);
return (1);
}
# ifdef SETBUF
setbuf(dbi, dbi_buf);
# endif
fprintf(dbi, "%c command part before conversion\n", CMD_COMMENT);
fprintf(dbi, "\n%c REDABAS %c part\n", CMD_COMMENT, CMD_DBD);
fprintf(dbi, "%c\t%s\n\n", CMD_DBD, DBD_PARM);
for (f = Db_fld, i = Db_hdr.db_fields; i; --i, f++)
{
fprintf(dbi, "%c\t%3d\t%-12s", CMD_FIELD,
f - Db_fld, f->db_f_name);
if (f->db_f_len)
{
fprintf(dbi, "\t%c%-3d",
f->db_f_type, ctou(f->db_f_len));
if (f->db_f_dec)
fprintf(dbi, " %3d", f->db_f_dec);
}
putc('\n', dbi);
}
fprintf(dbi, "\n%c %s %s part\n", CMD_COMMENT, USERDBS, VERSION);
fprintf(dbi, "%c\t%s\n", CMD_DB, DB_PARM);
for (rel = &REL_PARM; *rel; rel++)
{
fprintf(dbi, "\n%c relation %s part\n", CMD_COMMENT, *rel);
fprintf(dbi, "%c\t%s\n\n", CMD_REL, *rel);
for (f = Db_fld, i = Db_hdr.db_fields; i; --i, f++)
{
if (f->db_f_name[0] == FLD_RECNO)
{
if (D < 0)
continue;
fprintf(dbi, "%c\t 1\trec_no\t\t%c%d\n",
CMD_DOMAIN, typeunconv(INT), sizeof (long));
continue;
}
if (f->db_f_name[0] == FLD_DELMARK)
{
if (D < 0)
continue;
fprintf(dbi, "%c\t 2\trec_mark\t%c%d\n",
CMD_DOMAIN, typeunconv(CHAR), sizeof (char));
continue;
}
fprintf(dbi, "%c\t%3d\t%-12s\t", CMD_DOMAIN,
f - Db_fld + D, lower(f->db_f_name));
switch (f->db_f_type)
{
case TYPE_CHAR:
fprintf(dbi, "c%-3d", ctou(f->db_f_len));
break;
case TYPE_DATE:
fprintf(dbi, "%c8", typeunconv(CHAR));
break;
case TYPE_LOG:
fprintf(dbi, "%c%d", typeunconv(CHAR), sizeof (char));
break;
case TYPE_NUM:
if (f->db_f_dec || ctou(f->db_f_len) > 10)
{
fprintf(dbi, "%c%d",
typeunconv(FLOAT), sizeof (double));
break;
}
if (ctou(f->db_f_len) < 4)
fprintf(dbi, "%c%d",
typeunconv(INT), sizeof (char));
else if (ctou(f->db_f_len) < 6)
fprintf(dbi, "%c%d",
typeunconv(INT), sizeof (short));
else
fprintf(dbi, "%c%d",
typeunconv(INT), sizeof (long));
break;
# if (REDABAS == 3)
case TYPE_MEMO:
fprintf(dbi, "c10");
break;
# endif
default:
printf("REDABAS\tunknown type %c on field %d/%s\n",
f->db_f_type, f - Db_fld, f->db_f_name);
fclose(dbi);
return (1);
}
putc('\n', dbi);
}
putc('\n', dbi);
for (i = 1 - D; i < Db_hdr.db_fields; i++)
fprintf(dbi, "%c\t%3d\t%3d\n", CMD_REF, i, i + D);
}
fprintf(dbi, "\n%c command part after conversion\n", CMD_COMMENT);
fclose(dbi);
return (0);
}
static char *lower(db)
register char *db;
{
register char *n;
register int chr;
static char name[DBNAME + 1];
for (n = name; chr = *db++; )
{
if ((chr >= 'A'
# ifdef EBCDIC
&& chr <= 'I') || (chr >= 'J'
&& chr <= 'R') || (chr >= 'S'
# endif
&& chr <= 'Z'))
chr += 'a' - 'A';
if (chr == ':')
chr = '_';
*n++ = chr;
}
*n = 0;
return (name);
}
static int prrec()
{
register int len;
register char *r;
register struct db_fld *f;
register int i;
r = Record;
if (*r == DB_RECVAL)
{
if (!(List_rec & 2))
return;
}
else if (!(List_rec & 1))
return;
printf("|%5ld", Recno);
for (f = &Db_fld[1], i = Db_hdr.db_fields - 1; i; --i, f++)
{
putchar('|');
for (len = ctou(f->db_f_len); len; --len, r++)
putchar(*r? *r: '*');
}
putchar('\n');
fflush(stdout);
}
rubproc()
{
fflush(stdout);
exit(1);
}
AApageflush() {}