DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T b

⟦3dd74933c⟧ TextFile

    Length: 2715 (0xa9b)
    Types: TextFile
    Names: »bibext.c«

Derivation

└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
    └─⟦this⟧ »./tex82/bibtex/bibext.c« 

TextFile

/*
 * Auxilliary routines for BibTeX in C.
 *
 * Tim Morgan 2/15/88
 * Eduardo Krell 4/21/88
 */

#include <stdio.h>
#ifdef	BSD
#include <string.h>
#else
#include <strings.h>
#endif
#include "site.h"

#define TRUE 1
#define FALSE 0
#define filenamesize 1024
extern char realnameoffile[];
extern char xord[], buffer[], nameoffile[];
char **gargv;
int gargc;

static char input_path[filenamesize];

FILE *openf(name, mode)
char *name, *mode;
{
    FILE *result;

    result = fopen(name, mode);
    if (!result) {
	perror(name);
	exit(1);
    }
    return(result);
}

int eoln(f)
FILE *f;
{
    register int c;

    if (feof(f)) return(1);
    c = getc(f);
    if (c != EOF)
	(void) ungetc(c, f);
    return (c == '\n' || c == EOF);
}

void lineread(f, size)
FILE *f;
int size;
{
    extern long last;
    int in;

    last = 0;
    while (last < size && (in = getc(f)) != EOF && in != '\n') {
#ifdef	NONASCII
	buffer[last++] = xord[in];
#else
	buffer[last++] = in;
#endif
    }
    while (in != EOF && in != '\n')	/* Skip past eoln if buffer full */
	(void) getc(f);
}

void setpaths()
{
    extern char *getenv();
    char *p;

    if (p = getenv("TEXINPUTS"))
	(void) strcpy(input_path, p);
    else
	(void) strcpy(input_path, TEXINPUTS);
}


int testaccess(wam, filepath)
int wam, filepath;
{
    char *path = NULL;
    register int ok;
    int f;

    if (filepath == 1)
	path = input_path;
    if (nameoffile[0] == '/')
	path = NULL;
    do {
	packrealnameoffile(&path);
	if (wam == 4)
	    if (access(realnameoffile, 4) == 0) ok = TRUE;
	    else ok = FALSE;
        else {
	    f = creat(realnameoffile, 0666);
	    if (f >= 0) ok = TRUE;
	    else ok = FALSE;
	    if (ok)
		(void) close(f);
	}
    }
    while (!ok && path != NULL);
/*
    if (ok) {
	for (p=realnameoffile; *p; p++);
	while (p < &(realnameoffile[filenamesize]))
	    *p++ = ' ';
    }
*/
    return(ok);
}

static packrealnameoffile(cpp)
char **cpp;
{
    register char *p, *realname;

    realname = realnameoffile;
    if ((p = *cpp)) {
	while ((*p != ':') && *p) {
	    *realname++ = *p++;
	    if (realname == &(realnameoffile[filenamesize-1]))
		break;
	}
	if (*p == '\0') *cpp = NULL;
	else *cpp = p+1;
	*realname++ = '/';
    }
    p = nameoffile;
    while (*p != ' ') {
	if (realname >= &(realnameoffile[filenamesize-1])) {
	    fprintf(stderr, "! Full file name is too long\n");
	    break;
	}
	*realname++ = *p++;
    }
    *realname = '\0';
}

int
getcmdline(buf, n)
char *buf;
{
	strncpy(buf, gargv[1], n);
	return (strlen(buf));
}

main(argc, argv)
char *argv[];
{
    extern schar history;
    int status;

    gargc = argc;
    gargv = argv;
    setpaths();
    main_body();
    status = (history != 0);
    exit(status);
}