#include <string.h>
#include <exec/types.h>
#include <exec/execbase.h>
#include <proto/dos.h>

#include "users.h"
#include "misc.h"

extern struct ExecBase *SysBase;
#define UID_PEEKER		0xf000
#define CUID	  ((struct Process *)(SysBase->ThisTask))->pr_Pad

int adduser(char *file,char *lname,char *pword,char *fname,char *hme,long quota,UWORD uid)
{	long han,pos;
	struct User usr;
	char name[80];
	UWORD muid=CUID;

	CUID=UID_SYSTEM;
	lowercase(name,lname);
	if(search_userdata(file,&usr,0,lname)==-1)
	{
		if(han=Open(file,MODE_READWRITE))
		{
			Seek(han,0,OFFSET_END);
			pos=Seek(han,0,OFFSET_CURRENT);
			pos=(pos/sizeof(struct User))*sizeof(struct User);
			Seek(han,pos,OFFSET_BEGINNING);
			Read(han,&usr,sizeof(struct User));
			strncpy(usr.Loginname,name,16);
			strncpy(usr.Password,pword,16);
			strncpy(usr.Fullname,fname,47);
			strncpy(usr.Home,hme,99);
			usr.Quota=quota;
			usr.UID=((usr.UID+1) & ~UID_ACCESSMASK) | uid;
			Write(han,&usr,sizeof(struct User));
			Close(han);

			CUID=muid;
			return 0;
		}
	}
	CUID=muid;
	return -1;
}

