;Released as public domain 28-Jan-1996 by the author Dave Dustin

	Section	NewUser,Code
	Opt	C+
	Include	mysystem.gs
	Include	library/eclipse.i
	Output	Work:NewUser

VERSION	MACRO
	Dc.B	'Falcon CBCS NewUser V1.02'
	ENDM
DATE	MACRO
	Dc.B	'22 September 92'
	ENDM
AUTHOR	MACRO
	Dc.B	'(c) 1992  David Dustin'
	ENDM

***************************************************************************
* Notes:
***************************************************************************
Start:	Move.L	SP,_SaveStack

	Sub.L	A1,A1
	CALLEXEC	FindTask
	Move.L	D0,A4
	Tst.L	pr_CLI(A4)
	Beq	fromWorkbench

	Lea	DOSLibrary(PC),A1
	Moveq	#0,D0
	CALL	OpenLibrary
	Move.L	D0,_DOSBase

	Lea	ECLIPSELibrary(PC),A1
	Moveq	#EclipseVer,D0
	CALL	OpenLibrary
	Tst.L	D0
	Beq	ExitToDos
	Move.L	D0,_ECLIPSEBase

	Move.B	#0,UseFileName
	Moveq	#0,D0
	Lea	UserBaseName,A0
	Lea	_FileStart,A1
	Lea	_FileSize,A2
	CALLECLIPSE	ReadFile
	Tst.L	D0
	Beq.S	.FileOk

	Lea	UserBaseKey(PC),A0
	Lea	FileName,A1
	CALL	GetConfigEntry
	Tst.L	D0
	Bne	Exit

	Move.B	#1,UseFileName
	Moveq	#0,D0
	Lea	FileName,A0
	Lea	_FileStart,A1
	Lea	_FileSize,A2
	CALLECLIPSE	ReadFile
	Tst.L	D0
	Bne	Exit

.FileOk	Move.L	_FileStart,CurrentPos

MainLoop:	Move.L	CurrentPos,A0
	
	Cmp.B	#0,(A0)
	Beq.S	NextUser

	Lea	135(A0),A0
	Moveq	#0,D0
	Move.B	(A0),D0
	Cmp.B	#1,D0
	Beq.S	FoundPos

NextUser:	Add.L	#512,CurrentPos
	Add.L	#512,FilePos
	Move.L	FilePos,D0
	Move.L	_FileSize,D1
	Cmp.L	D0,D1
	Beq	NoUserError
	Bra.S	MainLoop

FoundPos:	Addq.B	#1,New
	Bsr	SetupSpace
;name
	Move.L	CurrentPos,A0
	Lea	UsrName,A1
	Moveq	#36,D0
	CALLECLIPSE	CopyData
;city
	Move.L	CurrentPos,A0
	Lea	60(A0),A0
	Lea	City,A1
	Moveq	#38,D0
	CALL	CopyData
;calls made
	Move.L	CurrentPos,A0
	Lea	120(A0),A0
	Moveq	#0,D0
	Move.W	(A0),D0
	Lea	Caltxt,A0
	Moveq	#4,D1
	CALL	ConvertDecimal
;Last Date
	Move.L	CurrentPos,A0
	Lea	124(A0),A0
	Moveq	#0,D0
	Move.L	(A0),D0
	Lea	DateSpace,A0
	CALL	ConvertFalconDate

	Lea	Timetext,A0
	Lea	DateSpace,A1
	CALL	Time12

	Addq	#2,A0
	Lea	DateSpace,A1
	CALL	ShortDay

	Move.B	#',',(A0)
	Addq	#2,A0
	Lea	DateSpace,A1
	CALL	Date

	Moveq	#0,D1
	Move.L	#PrintSpace,D2
	Move.L	#PrintSpaceLen,D3
	CALL	OutputText

	Moveq	#0,D1
	Move.L	#ValAskText,D2
	Moveq	#ValLen,D3
	CALL	OutputText

	CALLDOS	Input
	Move.L	D0,D1
	Move.L	#ReadBuffer,D2
	Moveq	#3,D3
	CALL	Read

	Cmp.L	#1,D0
	Beq.S	Validate
	Move.B	ReadBuffer,D0
	CALLECLIPSE	ChangeCase
	Cmp.B	#'Y',D0
	Beq	Validate

	Moveq	#0,D1
	Move.L	#DelAskText,D2
	Moveq	#DelLen,D3
	CALL	OutputText

	CALLDOS	Input
	Move.L	D0,D1
	Move.L	#ReadBuffer,D2
	Moveq	#3,D3
	CALL	Read

	Cmp.L	#1,D0
	Beq	NextUser
	Move.B	ReadBuffer,D0
	CALLECLIPSE	ChangeCase
	Cmp.B	#'Y',D0
	Bne	NextUser

	Addq.B	#1,Deleted
	Move.L	CurrentPos,A0
	Move.B	#0,(A0)
	Bra	NextUser

Validate:	Cmp.B	#0,Validated
	Bne.S	.GotValues

	Lea	DefCallKey(PC),A0
	Bsr	GetValue
	Beq.S	.No1
	Move.W	D0,DefTimeCall

.No1	Lea	DefDayKey(PC),A0
	Bsr	GetValue
	Beq.S	.No2
	Move.W	D0,DefTimeDay

.No2	Lea	DefDLCallKey(PC),A0
	Bsr	GetValue
	Beq.S	.No3
	Move.W	D0,DefDLCall+2

.No3	Lea	DefDLDayKey(PC),A0
	Bsr	GetValue
	Beq.S	.GotValues
	Move.W	D0,DefDLDay+2

.GotValues	Addq.B	#1,Validated
	Move.L	CurrentPos,A0
	Move.B	#2,135(A0)
	Move.W	DefTimeCall(PC),146(A0)
	Move.W	DefTimeDay(PC),148(A0)
	Move.L	DefDLCall(PC),162(A0)
	Move.L	DefDLDay(PC),166(A0)

	Bra	NextUser

NoUserError:	Cmp.B	#0,Deleted
	Bne.S	.Write

	Cmp.B	#0,Validated
	Beq.S	NoWrite

.Write	Move.L	#UserBaseName,D1
	Cmp.B	#1,UseFileName
	Bne.S	.UseFileName
	Move.L	#FileName,D1

.UseFileName	Move.L	#MODE_NEWFILE,D2
	CALLDOS	Open
	Tst.L	D0
	Beq.S	NoWrite
	Move.L	D0,_FileHandle

	Move.L	_FileHandle,D1
	Move.L	_FileStart,D2
	Move.L	_FileSize,D3
	CALL	Write

	Move.L	_FileHandle,D1
	CALL	Close

NoWrite:	Moveq	#0,D0
	Move.B	New,D0
	Lea	Logtext,A0
	CALLECLIPSE	ConvertDecimal

	Lea	NewUsersText(PC),A0
	Moveq	#NewUsersLen,D0
	CALL	CopyData

	Move.L	A1,A0
	Moveq	#0,D0
	Move.B	Validated,D0
	CALL	ConvertDecimal

	Lea	ValText(PC),A0
	Moveq	#ValTextLen,D0
	CALL	CopyData

	Move.L	A1,A0
	Moveq	#0,D0
	Move.B	Deleted,D0
	CALL	ConvertDecimal

	Lea	DelText(PC),A0
	Moveq	#DelTextLen,D0
	CALL	CopyData

	Lea	Logtext,A0
	CALL	LogTag


	Move.L	_FileStart,A1
	Move.L	_FileSize,D0
	CALLEXEC	FreeMem

Exit:	Move.L	_ECLIPSEBase,A1
	CALLEXEC	CloseLibrary

ExitToDos:	Move.L	_DOSBase,A1
	CALLEXEC	CloseLibrary

	Moveq	#0,D0
	Move.L	_SaveStack,SP
	Rts

***************************************************************************
fromWorkbench:	Lea	pr_MsgPort(A4),A0
	CALLEXEC	WaitPort
	Lea	pr_MsgPort(A4),A0
	CALL	GetMsg
	Move.L	D0,A1

	CALL	Forbid
	CALL	ReplyMsg
	Move.L	_SaveStack,SP
	Rts

***************************************************************************
GetValue:	Lea	ConfigLine,A1
	CALLECLIPSE	GetConfigEntry
	Tst.L	D0
	Bne.S	.Error
	Moveq	#0,D0
	Lea	ConfigLine,A0

.findloop	Cmp.B	#0,(A0)
	Beq.S	.Error
	Cmp.B	#' ',(A0)+
	Beq.S	.Found
	Bra.S	.findloop

.Found	Addq	#1,D0
	Cmp.B	#2,D0
	Bne.S	.findloop
	CALL	ConvertToDecimal
	Bra.S	.Exit

.Error	Moveq	#0,D0
.Exit	Tst.L	D0
	Rts

***************************************************************************
SetupSpace:	Lea	PrintSpace,A0
	Move.L	#PrintSpaceLen-1,D0

.loop	Move.B	#' ',(A0)+
	DBra	D0,.loop

	Move.B	#10,PrintSpace
	Move.B	#10,Return1
	Move.B	#10,Return2

	Lea	UserName(PC),A0
	Lea	UsrNameTxt,A1
	Moveq	#UserNameLen,D0
	CALLECLIPSE	CopyData

	Lea	CallsTxt,A1
	Moveq	#CallsLen,D0
	CALL	CopyData

	Lea	CityTxt,A1
	Moveq	#CallingLen,D0
	CALL	CopyData

	Lea	LastTxt,A1
	Moveq	#CalledLen,D0
	CALL	CopyData
	Rts

***************************************************************************
***************************************************************************
***************************************************************************
VerString:	Dc.B	0,'$VER: '
	VERSION
	Dc.B	' ('
	DATE
	Dc.B	')',0

***************************************
UserBaseName:	Dc.B	'User.BBS',0
UserBaseKey:	Dc.B	'USERDIR',0
DefCallKey:	Dc.B	'DEF_CALL_TIME',0
DefDayKey:	Dc.B	'DEF_DAY_TIME',0
DefDLCallKey:	Dc.B	'DEF_CALL_DL',0
DefDLDayKey:	Dc.B	'DEF_CALL_DL',0
DOSLibrary:	DOSNAME
ECLIPSELibrary:	EclipseName
ValAskText:	Dc.B	"[36mValidate?  ([1mY/n[0;36m)[37m "
ValLen	Equ	*-ValAskText
DelAskText:	Dc.B	"[36mDelete?  ([1my/N[0;36m)[37m "
DelLen	Equ	*-DelAskText

***************************************
UserName:	Dc.B	'[33;1mUserName:[0;37m'
UserNameLen	Equ	*-UserName
.calls	Dc.B	'[33;1mCalls made:[0;37m'
CallsLen	Equ	*-.calls
.calling	Dc.B	'[33;1mCalling from:[0;37m'
CallingLen	Equ	*-.calling
.called	Dc.B	'[33;1mLast Called:[0;37m'
CalledLen	Equ	*-.called
NewUsersText:	Dc.B	' new users found.  '
NewUsersLen	Equ	*-NewUsersText
ValText:	Dc.B	' validated, '
ValTextLen	Equ	*-ValText
DelText:	Dc.B	' deleted.'
DelTextLen	Equ	*-DelText
	Even

***************************************
DefTimeDay:	Dc.W	120
DefTimeCall:	Dc.W	60
DefDLDay:	Dc.L	1800
DefDLCall:	Dc.L	900

***************************************
	Section	DataSpace,BSS
_SaveStack:	Ds.L	1
_FileSize:	Ds.L	1
_FileStart:	Ds.L	1
_FileHandle:	Ds.l	1
_DOSBase:	Ds.L	1
_ECLIPSEBase:	Ds.L	1

CurrentPos:	Ds.L	1
FilePos:	Ds.L	1
ReadBuffer:	Ds.L	1
DateSpace:	Ds.L	3

New:	Ds.B	1
Validated:	Ds.B	1
Deleted:	Ds.B	1
UseFileName:	Ds.B	1

ConfigLine:	Ds.B	80
FileName:	Ds.B	140
Logtext:	Ds.B	60
PrintSpace:	Ds.B	1
UsrNameTxt:	Ds.B	UserNameLen+5
UsrName:	Ds.B	26
CallsTxt:	Ds.B	CallsLen+2
Caltxt:	Ds.B	12
Return1:	Ds.B	1
CityTxt:	Ds.B	CallingLen+1
City:	Ds.B	26
LastTxt:	Ds.B	CalledLen+1
Timetext:	Ds.B	24
Return2:	Ds.B	1
PrintSpaceLen	Equ	*-PrintSpace
	Even
