
/*
 *  SUBS.C
 */

#include <exec/types.h>
#include "defs.h"
#include <libraries/dos.h>
#include <fcntl.h>

Prototype void FindUser(char *, int);
Prototype void ScanNewsDirs(void (*)(), long);
Prototype char *FindField(FILE *, char *);
Prototype int  FileExists(char *);

typedef struct FileInfoBlock FIB;

void
FindUser(buf, bufsiz)
char *buf;
int bufsiz;
{
    char *user;

    user = GetUserName();

    if (user == NULL) {
	user = "FuBar";
	printf("No UserName env: var or Config var !\n");
    }
    strncpy(buf, user, bufsiz - 1);
    buf[bufsiz] = 0;
}

void
ScanNewsDirs(vect, arg)
void (*vect)();
long arg;
{
    FIB *fib = malloc(sizeof(FIB));
    char *cfdir = GetConfigDir(UUNEWS);
    BPTR lock;

    if (lock = Lock(cfdir, SHARED_LOCK)) {
	if (Examine(lock, fib)) {
	    while (ExNext(lock, fib)) {
		sprintf(TmpBuf, "%s%s", cfdir, fib->fib_FileName);
		(*vect)(TmpBuf, fib->fib_FileName, arg);
	    }
	}
	UnLock(lock);
    }
    free(fib);
}

char *
FindField(fi, field)
FILE *fi;
char *field;
{
    short len = strlen(field);

    rewind(fi);
    while (fgets(TmpBuf, sizeof(TmpBuf), fi) && TmpBuf[0] != '\n') {
	if (strnicmp(TmpBuf, field, len) == 0) {
	    field = TmpBuf + len;
	    while (*field == ' ' || *field == 9)
		++field;
	    for (len = strlen(field) - 1; len >= 0 && (field[len] == ' ' || field[len] == 9 || field[len] == '\n'); --len);
	    ++len;
	    field[len] = 0;
	    return(strdup(field));
	}
    }
    return(NULL);
}

int
FileExists(file)
char *file;
{
    int fd;

    if ((fd = open(file, O_RDONLY)) >= 0) {
	close(fd);
	return(1);
    }
    return(0);
}

