/*****************************************************************************
 *
 * $Id$
 * Purpose ...............: MBSE BBS Users Database structure
 *
 *****************************************************************************
 * Copyright (C) 1997-2004
 *   
 * Michiel Broek		FIDO:		2:280/2802
 * Beekmansbos 10
 * 1971 BV IJmuiden
 * the Netherlands
 *
 * This file is part of MBSE BBS.
 *
 * This BBS is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2, or (at your option) any
 * later version.
 *
 * MBSE BBS is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with MBSE BBS; see the file COPYING.  If not, write to the Free
 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 *****************************************************************************/


#ifndef _USERRECS_H
#define _USERRECS_H


#define Max_passlen     14      /* Define maximum passwd length            */


typedef enum {LINEEDIT, FSEDIT, EXTEDIT} MSGEDITOR;


/************************************************************************
 *
 *  Other BBS structures
 *
 */


#ifndef	_SECURITYSTRUCT
#define	_SECURITYSTRUCT

/*
 * Security structure
 */
typedef struct _security {
	unsigned int	level;			/* Security level	   */
	unsigned long	flags;			/* Access flags		   */
	unsigned long	notflags;		/* No Access flags	   */
} securityrec;

#endif


/****************************************************************************
 *
 *  Datafile records structure in $MBSE_ROOT/etc
 *
 */



/*
 * Users Control Structures (users.data)
 */
struct	userhdr {
	long		hdrsize;		/* Size of header	    */
	long		recsize;		/* Size of records	    */
};

struct	userrec {
	char		sUserName[36];		/* User First and Last Name */
	char		Name[9];		/* Unix name		    */
	unsigned long	xPassword;
	char		sVoicePhone[20];	/* Voice Number             */
	char		sDataPhone[20];		/* Data/Business Number     */
	char		sLocation[28];		/* Users Location           */
	char		address[3][41];		/* Users address	    */
	char		sDateOfBirth[12];	/* Date of Birth            */
	time_t		tFirstLoginDate;	/* Date of First Login      */
	time_t		tLastLoginDate;		/* Date of Last Login       */
	securityrec	Security;		/* User Security Level      */
	char		sComment[81];		/* User Comment             */
	char		sExpiryDate[12];	/* User Expiry Date         */
	securityrec	ExpirySec;		/* Expiry Security Level    */
	char		sSex[8];		/* Users Sex                */

	unsigned	Hidden		: 1;	/* Hide User from Lists     */
	unsigned	HotKeys		: 1;	/* Hot-Keys ON/OFF          */
	unsigned	GraphMode	: 1;	/* ANSI Mode ON/OFF         */
	unsigned	Deleted		: 1;	/* Deleted Status           */
	unsigned	NeverDelete	: 1;	/* Never Delete User        */
	unsigned	xChat		: 1;
	unsigned	LockedOut	: 1;	/* User is locked out	    */
	unsigned	DoNotDisturb	: 1;	/* DoNot disturb	    */
	unsigned	Cls		: 1;	/* CLS on/off		    */
	unsigned	More		: 1;	/* More prompt		    */
	unsigned	xFsMsged	: 1;
	unsigned	MailScan	: 1;	/* New Mail scan	    */
	unsigned	Guest		: 1;	/* Is guest account	    */
	unsigned	OL_ExtInfo	: 1;	/* OLR extended msg info    */
	int		iTotalCalls; 		/* Total number of calls    */
	int		iTimeLeft;              /* Time left today          */
	int		iConnectTime;           /* Connect time this call   */
	int		iTimeUsed;              /* Time used today          */
	int		iScreenLen;             /* User Screen Length       */
	time_t		tLastPwdChange;         /* Date last password chg   */
	unsigned	xHangUps;
	long		Credit;			/* Users credit		    */
	int		Paged;			/* Times paged today	    */
	int		MsgEditor;		/* Message Editor to use    */
	int		LastPktNum;		/* Todays Last packet number*/
	char		Archiver[6];		/* Archiver to use	    */

	int		iLastFileArea;          /* Number of last file area */
	int		iLastFileGroup;		/* Number of last file group*/
	char		sProtocol[21];          /* Users default protocol   */
	unsigned long	Downloads;		/* Total number of d/l's    */
	unsigned long	Uploads;		/* Total number of uploads  */
	unsigned long	UploadK;		/* Upload KiloBytes         */
	unsigned long	DownloadK;		/* Download KiloBytes       */
	long		DownloadKToday;		/* KB Downloaded today      */
	long		UploadKToday;		/* KB Uploaded today        */
	int		iTransferTime;          /* Last file transfer time  */
	int		iLastMsgArea;           /* Number of last msg area  */
	int		iLastMsgGroup;		/* Number of last msg group */
	int		iPosted;                /* Number of msgs posted    */
	int		iLanguage;              /* Current Language         */
	char		sHandle[36];            /* Users Handle             */
	int		iStatus;                /* WhosDoingWhat status	    */
	int		DownloadsToday;		/* Downloads today	    */
	int		CrtDef;			/* IEMSI Terminal emulation */
	int		Protocol;		/* IEMSI protocol	    */
	unsigned	IEMSI		: 1;	/* Is this a IEMSI session  */
	unsigned	ieMNU		: 1;	/* Can do ASCII download    */
	unsigned	ieTAB		: 1;	/* Can handle TAB character */
	unsigned	ieASCII8	: 1;	/* Can handle 8-bit IBM-PC  */
	unsigned	ieNEWS		: 1;	/* Show bulletins	    */
	unsigned	ieFILE		: 1;	/* Check for new files	    */
	unsigned	Email		: 1;	/* Has private email box    */
	unsigned	FSemacs		: 1;	/* FSedit uses emacs keys   */
	char		Password[Max_passlen+1];/* Plain password	    */
	int		Charset;		/* Character set	    */
};


struct  userhdr         usrconfighdr;           /* Users database          */
struct  userrec         usrconfig;
struct  userrec         exitinfo;               /* Users online data       */


#endif