148 lines
2.9 KiB
C
148 lines
2.9 KiB
C
# include "amx.h"
|
|
|
|
tmp(db, uflag)
|
|
register char *db;
|
|
char *uflag;
|
|
{
|
|
register char *p;
|
|
register int argc;
|
|
register char *id;
|
|
char *argv[4];
|
|
char arg[MAXNAME + 3];
|
|
char buf[MAXLINE + 1];
|
|
static char db_buf[MAXNAME + 1];
|
|
|
|
/* setup argvector for initucode */
|
|
AAbmove(db, db_buf, MAXNAME + 1);
|
|
*argv = db = db_buf;
|
|
argc = 1;
|
|
if (uflag)
|
|
{
|
|
argv[argc++] = p = arg;
|
|
*p++ = '-';
|
|
AAbmove(uflag, p, MAXNAME + 2);
|
|
}
|
|
argv[argc++] = db;
|
|
argv[argc] = (char *) 0;
|
|
switch (initucode(argc, argv, TRUE, (char *) 0, M_SHARE))
|
|
{
|
|
case 0: /* everything is ok */
|
|
case 5: /* ok, but there was an indirect token */
|
|
break;
|
|
|
|
case 1: /* the database does not exist */
|
|
case 6: /* dto., but there was an indirect token */
|
|
yyexit(9, db);
|
|
|
|
case 2: /* you are not authorisized to access this database */
|
|
yyexit(7, db);
|
|
|
|
case 3: /* you are not a valid DBS user */
|
|
yyexit(5, USERDBS);
|
|
|
|
case 4: /* no database name specified */
|
|
/* cannot happen */
|
|
break;
|
|
}
|
|
|
|
/* open data base */
|
|
# ifdef MSDOS
|
|
AAdatabase = Parmvect[0];
|
|
# endif
|
|
AAam_start();
|
|
|
|
if (AAdmin.adhdr.adflags & A_DBCONCUR)
|
|
setbit(A_DBCONCUR, Xlocks);
|
|
else
|
|
No_locks++;
|
|
|
|
if (AArelopen(&Indes, 0, AA_INDEX))
|
|
yyexit(8, AA_INDEX);
|
|
|
|
/* make believe catalog AA_REL is read only for concurrency */
|
|
/* that means, readed pages are not locked */
|
|
AAdmin.adreld.relopn = RELROPEN(AAdmin.adreld.relfp);
|
|
|
|
/* setup file name for scan temps */
|
|
*Filespec = 's';
|
|
|
|
/* write include files */
|
|
fprintf(FILE_amx, msg(49), AApath);
|
|
|
|
# ifdef AMX_SC
|
|
if (ExpImp < 0)
|
|
goto lookup;
|
|
# endif
|
|
/* write variables */
|
|
for (argc = 126; argc < 130; argc++)
|
|
fprintf(FILE_amx, msg(argc));
|
|
fprintf(FILE_amx, msg(30), AAusercode);
|
|
fprintf(FILE_amx, msg(31), AApath);
|
|
# ifdef MSDOS
|
|
fprintf(FILE_amx, msg(32));
|
|
for (argc = DBP_STD; argc < DBP_MAX; argc++)
|
|
fprintf(FILE_amx, msg(206), AAdbpath[argc]);
|
|
fprintf(FILE_amx, msg(201));
|
|
fprintf(FILE_amx, msg(204), AAdatabase);
|
|
|
|
if (Xbufs)
|
|
fprintf(FILE_amx, msg(35), (Xbufs * sizeof (ACCBUF)) / sizeof (int));
|
|
# else
|
|
fprintf(FILE_amx, msg(32), AAdbpath);
|
|
|
|
/* get user and group id of (alter ego) user */
|
|
getuser(AAusercode, p = buf);
|
|
getuser((char *) 0);
|
|
for (argc = -2; argc < 2; argc++)
|
|
{
|
|
id = p;
|
|
while (*p != ':')
|
|
p++;
|
|
*p++ = 0;
|
|
if (argc >= 0)
|
|
fprintf(FILE_amx, msg(28 + argc), id);
|
|
}
|
|
# endif
|
|
|
|
|
|
# ifdef AMX_SC
|
|
lookup:
|
|
# endif
|
|
/* lookup catalogs */
|
|
rel_lookup(AA_REL, AMX_INTERNAL); /* = AA_0 */
|
|
rel_lookup(AA_ATT, AMX_INTERNAL); /* = AA_1 */
|
|
rel_lookup(AA_INDEX, AMX_INTERNAL); /* = AA_2 */
|
|
}
|
|
|
|
|
|
# ifndef MSDOS
|
|
char *AArelpath(rel)
|
|
register char *rel;
|
|
{
|
|
extern char *AAztack();
|
|
|
|
return (AAztack(AAztack(AAdbpath, "/"), rel));
|
|
}
|
|
# endif
|
|
|
|
|
|
# ifdef AMX_SC
|
|
import(file)
|
|
register char *file;
|
|
{
|
|
register FILE *inp;
|
|
|
|
ExpImp = -1;
|
|
if (!(inp = fopen(file, "r")))
|
|
yyexit(188, file);
|
|
# ifdef SETBUF
|
|
setbuf(inp, (char *) 0);
|
|
# endif
|
|
FILE_exp = FILE_inp;
|
|
FILE_inp = inp;
|
|
Line_exp = Line;
|
|
Line = 1;
|
|
backup('\n');
|
|
}
|
|
# endif
|