SYSI	equ	1
	incdir	Include:
	include	ssmac.h
	include	rawkeys.i
	include	exec/types.i

NEWLIST	MACRO	; list
	MOVE.L	\1,LH_TAILPRED(\1)
	ADDQ.L	#4,\1	;Get address of LH_TAIL
	CLR.L	(\1)	;Clear LH_TAIL
	MOVE.L	\1,-(\1)	;Address of LH_TAIL to LH_HEAD
	ENDM




	STRUCTURE	WINDOWINFO,0
	APTR	WINF_RPORT
	APTR	WINF_WINDOW
	APTR	WINF_WINTRACKER
	APTR	WINF_WINSIGNAL
	APTR	WINF_WINPORT
	UWORD	WINF_LEFT
	UWORD	WINF_TOP
	UWORD	WINF_WIDTH
	UWORD	WINF_HEIGHT
	APTR	WINF_GADGETTEMPLATE
	APTR	WINF_GLIST
	APTR	WINF_FIRSTGTGAD
	APTR	WINF_GTRACKER
	APTR	WINF_MENULIST
	APTR	WINF_MENUTRACKER
	UBYTE	WINF_NUMGADS
	UBYTE	WINF_NUMIGADS
	UBYTE	WINF_POSIGADS
	UBYTE	WINF_WINSIGBIT
	ULONG	WINF_FLAGS
	APTR	WINF_TRACKLIST
	STRUCT	WINF_GADARRAY,32*4
	LABEL	WINF_SIZEOF



WWIDTH	equ	256
WHEIGHT	equ	128


LINESIZE	equ	$200
BUFSIZE	equ	$80
POOLSIZE	equ	$4000
POOLTRESHOLD	equ	$fff

;DEBUG	equ	1
;SUPERDEBUG	equ	1



check	macro
	b\1.s	.\@a
	bsr	INTERR
.\@a
	endm


c0	macro
	cmp.l	#0,a0
	bne.s	.\@a
	illegal
.\@a
	endm

c1	macro
	cmp.l	#0,a1
	bne.s	.\@a
	illegal
.\@a
	endm

w	equr	a4


wc	macro
	ifd	SUPERDEBUG
	cmp.l	#0,a4
	bne.s	.\@a
	illegal
.\@a
	endc
	endm

wlea	macro	*src,dest
	wc
	lea	WINF_\1(w),\2
	endm

wmovew	macro	*.type,src,dest
	wc
	move.\0	WINF_\1(w),WINF_\2(w)
	endm


movew	macro	*.type,src,dest
	wc
	move.\0	\1,WINF_\2(w)
	endm

wmove	macro	*.type,src,dest
	wc
	move.\0	WINF_\1(w),\2
	endm


tstw	macro	*.type,src
	wc
	tst.\0	WINF_\1(w)
	endm


clrw	macro	*.type,src
	wc
	clr.\0	WINF_\1(w)
	endm



bsetw	macro
	wc
	iflt	WINIFB_\1-8
	bset	#WINIFB_\1,WINF_FLAGS+3(w)
	mexit
	iflt	WINIFB_\1-16
	bset	#WINIFB_\1-8,WINF_FLAGS+2(w)
	mexit
	iflt	WINIFB_\1-24
	bset	#WINIFB_\1-16,WINF_FLAGS+1(w)
	mexit
	bset	#WINIFB_\1-24,WINF_FLAGS+0(w)
	endm

bclrw	macro
	wc
	iflt	WINIFB_\1-8
	bclr	#WINIFB_\1,WINF_FLAGS+3(w)
	mexit
	iflt	WINIFB_\1-16
	bclr	#WINIFB_\1-8,WINF_FLAGS+2(w)
	mexit
	iflt	WINIFB_\1-24
	bclr	#WINIFB_\1-16,WINF_FLAGS+1(w)
	mexit
	bclr	#WINIFB_\1-24,WINF_FLAGS+0(w)
	endm

wbtst	macro
	wc
	iflt	WINIFB_\1-8
	btst	#WINIFB_\1,WINF_FLAGS+3(w)
	mexit
	iflt	WINIFB_\1-16
	btst	#WINIFB_\1-8,WINF_FLAGS+2(w)
	mexit
	iflt	WINIFB_\1-24
	btst	#WINIFB_\1-16,WINF_FLAGS+1(w)
	mexit
	btst	#WINIFB_\1-24,WINF_FLAGS+0(w)
	endm




wrbtst	macro
	iflt	WINIFB_\1-8
	btst	#WINIFB_\1,WINF_FLAGS+\2WIN+3(v)
	mexit
	iflt	WINIFB_\1-16
	btst	#WINIFB_\1-8,WINF_FLAGS+\2WIN+2(v)
	mexit
	iflt	WINIFB_\1-24
	btst	#WINIFB_\1-16,WINF_FLAGS+\2WIN+1(v)
	mexit
	btst	#WINIFB_\1-24,WINF_FLAGS+\2WIN+0(v)
	endm

	
grp	macro
	wc
	move.l	(w),\1
	endm

gwin	macro
	wc
	move.l	WINF_WINDOW(w),\1
	endm

WINIFB_GADON	equ	0

WINIFB_SIZEBLOCK	equ	1

WINIFB_MENUBLOCK	equ	2
	
WINIFB_OPENED	equ	3








;Font dimensions (for edit line window&gadget)

FSIZEY	equ	8
FONTDEP	equ	1
GADBOR	equ	4	;total size of string gadget's border
GADOFF	equ	1	;distance between window and gadget

	bra.s	TotalStart
	dc.b	'  Amiga BASIC++ Compiler v2.34 [04-01-92] (C) 1988-1992 DreamSoft',$d,$a,$1a
	dc.b	$a,$a,'$VER: GetAddress 1.12 30.7.1996',$d,$a
	dc.b	' (C) 1995 PCsoft',0
	even

TotalStart	clistart
	clr.l	d2
	clr.l	d3
	clr.l	d4
	clr.l	d5
	clr.l	d6
	clr.l	d7
	sub.l	a2,a2
	sub.l	a3,a3
	sub.l	a4,a4



GOOO



	tlea	PORTNAME,a1
	call	exec,FindPort
	tst.l	d0
	errc.eq	<GetAddress already running>
	
;
;	Create public port
;
INIPORT	dv.l	RXPORT
	call	ss,TrackPort
	movev.l	d0,RXPORT
	move.l	d0,a1
	tlea	PORTNAME,a0
	move.l	a0,LN_NAME(a1)
	call	exec,AddPort
	vmove.l	RXPORT,a1
	lea	XPORT(pc),a0
	call	ss,TrackRoutine	


;	Create pool for general use
;
	move.l	#POOLSIZE,d0
	move.l	#POOLTRESHOLD,d1
	move.l	#MEMF_PUBLIC,d2
	call	ss,TrackPool
	dv.l	POOL
	movev.l	d0,POOL



;	Initialize copy to list
;
	dbuf.b	CCLIST,MLH_SIZE+4	;UWORD	HIST_COUNT
	vlea	CCLIST,a0
	bsr	INITLIST





	dv.w	ADRCHARS
	dbuf.b	ADRBUF,BUFSIZE
	dv.w	SUBCHARS
	dbuf.b	SUBBUF,BUFSIZE

	dv.l	PREHEADER
	dv.w	PREHDRLEN
	dv.l	BODYADR
	dv.l	COPYADR


;
;	Preload values from header file
;	NOTE: cc not supported here (=will be lost)
;
;
PRELOAD	
	vlea	sv_errsw,a0
	move.l	(a0),d1
	bclr	#err_openread,d1
	move.l	d1,(a0)

	vmove.l	P_FILE,a0
	call	ss,LoadFile

	vlea	sv_errsw,a0
	move.l	(a0),d1
	bset	#err_openread,d1
	move.l	d1,(a0)

	tst.l	d0
	beq	DELEFOK
	move.l	d0,a2
	move.l	a2,a0
	movev.l	a0,PREHEADER
	tlea	G1TXT,a1
	bsr	FINDSTR
	bne.s	PATERR
	subq.l	#1,d3
	sub.l	a2,d3
	movev.w	d3,PREHDRLEN
	bne	EDITHDR
	bsr	SKIPSPC
	vlea	ADRBUF,a1
	bsr	COPYSTR
	movev.w	d1,ADRCHARS
	bsr	SKIPEOL
	tlea	G2TXT,a1
	bsr	STRCMP
	bne.s	PATERR
	bsr	SKIPSPC
	vlea	SUBBUF,a1
	bsr.s	COPYSTR
	movev.w	d1,SUBCHARS
	moveq	#$a,d0
	cmp.b	(a0)+,d0
	bne.s	PATERR
	move.b	(a0)+,d1
	beq.s	REPNFND
	cmp.b	d1,d0
	bne.s	PATERR
SKIPEMPL	move.b	(a0)+,d1
	beq.s	REPNFND
	cmp.b	d0,d1
	beq.s	SKIPEMPL
	subq.l	#1,a0	
	movev.l	a0,BODYADR
SEARCHREP	move.b	(a0)+,d0
	beq.s	REPNFND
	cmp.b	#'>',d0
	beq.s	REPFND
	bsr	SKIPEOL
	tst.b	d0
	beq.s	REPNFND
	bra.s	SEARCHREP
REPFND	movev.l	a0,COPYADR
REPNFND	bra	PRELOADOK

PATERR	movev.w	#1,PREHDRLEN
	bra	EDITHDR
	
FINDSTR	move.l	a1,d2
	move.l	a0,d3
1$	move.l	d2,a1
	move.l	d3,d0
	move.b	(a1)+,d0
2$	move.b	(a0)+,d1
	beq.s	SNOTFND
	cmp.b	d0,d1
	bne.s	2$
	move.l	a0,d3
3$	move.b	(a1)+,d0
	beq.s	SFOUND
	move.b	(a0)+,d1
	beq.s	SNOTFND
	cmp.b	d0,d1
	beq.s	3$
	bra.s	1$
SNOTFND	moveq	#-1,d0
SFOUND	rts
	
	


COPYSTR	move.w	#BUFSIZE-2,d2
	clr.l	d1
0$	move.b	(a0)+,d0
	beq.s	1$
	cmp.b	#$a,d0
	beq.s	1$
	move.b	d0,(a1)+
	addq.w	#1,d1
	dbra	d2,0$
1$	clr.b	(a1)
	subq.l	#1,a0
	rts	
	


STRCMP	move.b	(a1)+,d0
	beq.s	1$
	cmp.b	(a0)+,d0
	beq.s	STRCMP
1$	rts	


SKIPSPC	move.b	(a0)+,d0
	cmp.b	#' ',d0
	beq.s	SKIPSPC
	subq.l	#1,a0
	rts

SKIPEOL	move.b	(a0)+,d0
	beq.s	1$
	cmp.b	#$a,d0
	bne.s	SKIPEOL
	rts
1$	subq.l	#1,a0
	rts



PRELOADOK	vmove.l	P_FILE,d1
	call	dos,DeleteFile
	tst.l	d0
	bne.s	DELEFOK
	dtl	<Can''t delete old config file>,a0
	sub.l	a1,a1
	jump	ss,DosError
DELEFOK
	

	dv.b	FONTHEIGHT
	dv.b	PRINTERPORT
	dv.w	BAUDRATE

	dv.l	SCREEN

		
	vlea	FONTHEIGHT,a0
	moveq	#pf_BaudRate+2,d0
	call	intuition,GetPrefs



;	Fetch pubscreen
;
	dbuf.b	PUBNAME,256
FETCHSCREEN	call	intuition,LockPubScreenList
	vlea	PUBNAME,a0
	call	GetDefaultPubScreen
	vlea	PUBNAME,a0
	call	LockPubScreen
	movev.l	d0,SCREEN
	call	UnlockPubScreenList
	vmove.l	SCREEN,a1
	lea	XPSLOCK(pc),a0
	call	ss,TrackRoutine
	dv.l	PSLOCKTRK
	movev.l	d0,PSLOCKTRK

FETPSOK



	vmove.l	SCREEN,a0
	sub.l	a1,a1
	call	gadtools,GetVisualInfoA
	dv.l	VINFO
	movev.l	d0,VINFO
	errc.ne	<Can''t get visual info>
	move.l	d0,a1
	lea	XVINFO(pc),a0
	call	ss,TrackRoutine





;
;	Initialize edit window
;



	dbuf.b	EWIN,WINF_SIZEOF

EINIT	vlea	EWIN,w	;pointer to current window

	bsr	CREATETRKLIST

INITEMENU
	lea	EMENU(pc),a0
	lea	EMTAGS(pc),a1
	bsr	OPENWIN001


OPENEWIN	vlea	TAGARRAY,a1
	vmove.l	SCREEN,a0
	clr.l	d0
	clr.l	d1
	move.l	#WA_PubScreen,(a1)+
	move.l	a0,(a1)+
	movem.w	sc_Width(a0),d0/d1
	move.l	#WA_MaxWidth,(a1)+
	move.l	d0,(a1)+
	move.l	#WA_MaxHeight,(a1)+
	move.l	d1,(a1)+
	lsr.w	d0
	sub.w	#WWIDTH/2,d0
	ext.l	d0
	move.l	#WA_Left,(a1)+
	move.l	d0,(a1)+
	lsr.w	d1
	sub.w	#WHEIGHT/2,d1
	ext.l	d1
	move.l	#WA_Top,(a1)+
	move.l	d1,(a1)+
	move.l	#TAG_MORE,(a1)+
	lea	EWTAGS(pc),a0
	move.l	a0,(a1)+

	bsr	OPENWIN002

	vmove.l	PSLOCKTRK,a0
	call	ss,FreeObject




EMAKEGAD	lea	EGADGET1(pc),a0
	movew.l	a0,GADGETTEMPLATE
	bsr	CREATEGADGETS





	bsr	SHOWGADGETS

	wmove.l	GADARRAY,a0
	gwin	a1
	sub.l	a2,a2
	call	intuition,ActivateGadget



;========================================================================


	

	dv.l	SIGWAIT

	dv.l	CLASS
	dv.w	CODE
	dv.w	QUAL
	dv.l	ADDR

MAINENTRY	




WSIGNAL	gwin	a0
	wmove.l	WINPORT,a0
	call	exec,WaitPort
	bsr.s	PROCEIDCMP
	bra.s	WSIGNAL



PROCEIDCMP	vlea	EWIN,w	;WindowInfo
1$	bsr.s	2$
	tst.l	d0
	bne.s	1$
	rts

2$	lea	IDCMPETAB(pc),a0

PROCIDCMP	push	a0
	clr.l	d0
	wbtst	OPENED
	beq.s	IDCMPEND
	wmove.l	WINPORT,a0
	call	gadtools,GT_GetIMsg
	tst.l	d0
	beq.s	IDCMPEND
	move.l	d0,a1
	movem.l	im_Class(a1),d0/d1/a0
	movemv.l	d0/d1/a0,CLASS
	call	gadtools,GT_ReplyIMsg
	pop	a0
	vmove.l	CLASS,d0
IDCMPSEL	move.l	(a0)+,d1
	beq.s	IDCMPEX
	cmp.l	d0,d1
	beq.s	1$
	addq.l	#2,a0
	bra.s	IDCMPSEL
1$	add.w	(a0),a0
	jsr	(a0)
IDCMPEX	moveq	#-1,d0
	rts
IDCMPEND	addq.l	#4,sp
	rts	

EXIT	sub.l	a4,a4
	jump	ss,ExitCleanup


idcit	macro
	ifeq	NARG-1
	dc.l	IDCMP_\1
	dc.w	\1-*
	else
	dc.l	IDCMP_\1
	dc.w	\2\1-*
	endc
	endm

IDCMPETAB	idcit	SIZEVERIFY
	idcit	NEWSIZE,E
	idcit	GADGETUP,E
	idcit	NEWPREFS
	idcit	CLOSEWINDOW
	idcit	MENUVERIFY
	idcit	MENUPICK
	dc.l	0
	cnop	0,4



MENUPICK	bclrw	MENUBLOCK
;#define MENUNUM(n) (n & 0x1F)
;#define ITEMNUM(n) ((n >> 5) & 0x003F)
;#define SUBNUM(n) ((n >> 11) & 0x001F)
	moveq	#-1,d0
	vand.w	CODE,d0
	addq.w	#1,d0
	

	
	bne.s	EXIT

	rts



MENUVERIFY	bsetw	MENUBLOCK
	rts


SIZEVERIFY	bsetw	SIZEBLOCK
	rts


ENEWSIZE	bsr.s	NEWSIZE
EREDRAW	rts


NEWSIZE	bclrw	SIZEBLOCK
REDRAW	wmove.l	GTRACKER,a0
	bsr	FREETRK
	bsr	CLS
	bsr.s	CREATEGADGETS
	bsr	SHOWGADGETS
	gwin	a0
;	Record window dimensions
	movem.l	wd_LeftEdge(a0),d0/d1
	movem.l	d0/d1,WINF_LEFT(w)	
	rts


CLOSEWINDOW	bra	EXIT



NEWPREFS	bra.s	REDRAW
	rts






EGADGETUP	vmove.l	ADDR,a0
	move.l	gg_UserData(a0),d0
	beq.s	1$
	move.l	d0,a1
	jsr	(a1)
1$	rts





;------------------------------------------------------------

;This routine creates gadtools gadgets according to array of following
;structures (terminated by -1.l). The ngg_VisualInfo item is initialized
;by this routine, other values can be modified by preprocessing routine.
;
;	STRUCTURE	ExtendedNewGadget,0
;	STRUCT	XNG_GADGET,gng_SIZEOF
;	WORD	XNG_KIND
;	APTR	XNG_PREPROCROUT	;Preprocessing routine or NULL
;	STRUCT	XNG_TAGS,TAGITEM
;
;INPUT:
;A4 ... WINDOWINFO structure
;RESULT: none, fatal error messages to stderr if something is wrong
;
;Structure preprocessing call conventions:
;A0 ... NewGadget structure (in temporary buffer) (scratch)
;A2 ... Tags (can be modified, if necessary)
;A4 ... WINDOWINFO structure
;


	dv.l	LASTGADGET

	dbuf.b	GADBUF,gng_SIZEOF


CREATEGADGETS	mpush	a2/a3
	wmove.l	GADGETTEMPLATE,a3	;Gadget structure to create
	move.l	a3,d0
	check	ne
	tstw.l	GLIST
	check	eq
	tstw.l	GTRACKER
	check	eq
	wlea	GLIST,a0
	call	gadtools,CreateContext
	movev.l	d0,LASTGADGET
	errc.ne	<Can''t create context gadget>
	move.l	a4,a1
	lea	XGADGETS(pc),a0
	bsr	LTRKROUT
	movew.l	d0,GTRACKER
	clrw.b	NUMGADS
	clrw.b	NUMIGADS
CRGADLOOP	move.l	a3,a0
	move.l	(a0),d0
	addq.l	#1,d0
	bne.s	1$
	wmove.l	GLIST,a0
	moveq	#1,d1
5$	move.l	(a0),d0
	beq.s	6$
	move.l	d0,a0
	addq.b	#1,d1
	bra.s	5$
6$	movew.b	d1,NUMIGADS
	mpop	a2/a3
	rts
1$	vlea	GADBUF,a1
	moveq	#gng_SIZEOF,d0
	add.w	d0,a3
	call	exec,CopyMem
	vlea	GADBUF,a0
	vmove.l	VINFO,gng_VisualInfo(a0)
	lea	6(a3),a2
	move.l	2(a3),d0
	beq.s	2$
	move.l	d0,a1
	jsr	(a1)
2$	clr.l	d0
	move.w	(a3),d0
	vmove.l	LASTGADGET,a0
	vlea	GADBUF,a1
	call	gadtools,CreateGadgetA
	tst.l	d0
	errc.ne	<Can''t create gadget>
	movev.l	d0,LASTGADGET
	clr.l	d1
	wmove.b	NUMGADS,d1
	bne.s	4$
	movew.l	d0,FIRSTGTGAD
4$	lsl.w	#2,d1
	wlea	GADARRAY,a0
	move.l	d0,(a0,d1.w)
	addq.b	#1,WINF_NUMGADS(a4)
	addq.l	#6,a3
3$	tst.l	(a3)+
	beq	CRGADLOOP
	addq.l	#4,a3
	bra.s	3$
	


;------------------------------------------------------------





SETIDCMP	gwin	a0
	call	intuition,ModifyIDCMP
	rts
DEACTIDCMP	clr.l	d0
	bra.s	SETIDCMP



DELETEGADGETS	wmove.l	GTRACKER,d0
	beq.s	1$
	move.l	d0,a0
	bsr	FREETRK
1$	rts


	dv.l	EDITGAD
	dv.l	EDITSI





CLREGAD	clrv.l	EDITGAD
	clrv.l	EDITSI

SHOWGADGETS	wbtst	GADON
	check	eq
	gwin	a0
	wmove.l	GLIST,a1
	moveq	#0,d0
	wmove.b	NUMIGADS,d0
	check	ne
	moveq	#0,d1
	push	a2
	sub.l	a2,a2
	call	intuition,AddGList
	movew.b	d0,POSIGADS
	pop	a2
	bsetw	GADON
	gwin 	a0
	sub.l	a1,a1
	call	gadtools,GT_RefreshWindow
	gwin	a0
	call	intuition,RefreshWindowFrame
	rts


HIDEGADGETS	tstw.l	GLIST
	beq.s	1$
	wbtst	GADON
	beq.s	1$
	bclrw	GADON
	gwin	a0
	wmove.l	GLIST,a1
	moveq	#0,d0
	wmove.b	NUMIGADS,d0
	call	intuition,RemoveGList
1$	rts



;	Clear current window (a4) [including its border]
;
;
;
CLS	moveq	#0,d0
	moveq	#0,d1
	grp	a1
	call	gfx,Move
	grp	a1
	jump	ClearScreen



BEEP	vmove.l	SCREEN,a0
	jump	intuition,DisplayBeep




INITLIST	NEWLIST	a0
	rts


;
;	Window's local tracker lists
;


CREATETRKLIST	vmove.l	POOL,a0
	moveq	#MLH_SIZE,d0
	call	ss,PoolAlloc
	move.l	d0,a0
	movew.l	d0,TRACKLIST
	bra.s	INITLIST



LTRKROUT	call	ss,TrackRoutine
	move.l	d0,d1
LTRACK	tstw.l	TRACKLIST
	beq.s	LTRACK1
	push	d1
	vmove.l	POOL,a0
	moveq	#MLN_SIZE+4,d0
	call	ss,PoolAlloc
	move.l	d0,a1
	pop	d0
	move.l	d0,MLN_SIZE(a1)
	wmove.l	TRACKLIST,a0
	push	a1
	call	exec,AddHead
	pop	d0
	vmove.l	ssbase,a6
LTRACK1	rts


FREETRK	push	a0
	move.l	a0,a1
	call	exec,Remove
	move.l	(sp),a0
	move.l	MLN_SIZE(a0),a0
	call	ss,FreeObject
	pop	a1
	vmove.l	POOL,a0
	moveq	#MLN_SIZE+4,d0
	call	PoolFree
	rts




DOCLOSEWINDOW	bclrw	OPENED
	bsr.s	FREETRKLIST
	clrw.l	WINDOW
	clrw.l	WINSIGNAL
	clrw.b	WINSIGBIT
	clrw.l	WINPORT
	rts



FREETRKLIST	tstw.l	TRACKLIST
	beq.s	9$
2$	wmove.l	TRACKLIST,a0
	call	exec,RemHead
	tst.l	d0
	beq.s	1$
	move.l	d0,a0
	push	a0
	move.l	MLN_SIZE(a0),a0
	call	ss,FreeObject
	pop	a1
	vmove.l	POOL,a0
	moveq	#MLN_SIZE+4,d0
	call	PoolFree
	bra.s	2$
1$	vmove.l	POOL,a0
	wmove.l	TRACKLIST,a1
	moveq	#MLH_SIZE,d0
	call	ss,PoolFree
	clrw.l	TRACKLIST
9$	rts




OPENWIN001	push	a1
	call	gadtools,CreateMenusA
	movew.l	d0,MENULIST
	errc.ne	<Can''t create menus>
	move.l	d0,a1
	lea	XMENUS(pc),a0
	bsr	LTRKROUT
	wmove.l	MENULIST,a0
	vmove.l	VINFO,a1
	pop	a2
	call	gadtools,LayoutMenusA
	tst.l	d0
	errc.ne	<Can''t layout menus>
	rts


OPENWIN002	vlea	TAGARRAY,a1
	sub.l	a0,a0
	call	intuition,OpenWindowTagList
	movew.l	d0,WINDOW
	errc.ne	<Can''t open window>
	move.l	d0,a1
	lea	XWINDOW(pc),a0
	bsr	LTRKROUT

OPENWINOK	gwin	a0
	movew.l	wd_RPort(a0),RPORT


	gwin	a0

;	Record window dimensions
	movem.l	wd_LeftEdge(a0),d0/d1
	movem.l	d0/d1,WINF_LEFT(w)	

	move.l	wd_UserPort(a0),d0
	beq.s	1$
	move.l	d0,a0
	move.b	MP_SIGBIT(a0),d0
	clr.l	d1
	bset	d0,d1
	movew.b	d0,WINSIGBIT
	movew.l	d1,WINSIGNAL
	movew.l	a0,WINPORT

1$

	gwin	a0
	wmove.l	MENULIST,a1
	call	intuition,SetMenuStrip
	gwin	a1
	lea	XMENUSTRIP(pc),a0
	bsr	LTRKROUT

	bsetw	OPENED

	rts


	dv.l	SELECTED

PROCCC	mpush	a2/a3
	clr.l	d0
	move.l	gg_SpecialInfo(a0),a2
	move.l	si_Buffer(a2),a0
	move.w	si_NumChars(a2),d0
	bne.s	CCSEL
	mpop	a2/a3
	tstv.w	ADRCHARS
	beq.s	ACTG1
	tstv.w	SUBCHARS
	beq.s	ACTG1
	vmove.w	CODE,d0
	cmp.b	#9,d0
	bne	PROCOK	;cc empty - exit
ACTG1	wmove.l	GADARRAY,a0
	gwin	a1
	push	a2
	sub.l	a2,a2
	call	intuition,ActivateGadget
	pop	a2
	rts

CCSEL	bsr	FINDNAME
	beq.s	CCOK
	bsr	BEEP
	bra.s	PROCCNOP
	
CCOK	move.w	si_NumChars(a2),d0
	add.w	#LN_SIZE+5,d0
	vmove.l	POOL,a0
	call	ss,PoolAlloc
	move.l	d0,a3
	clr.l	d0
	move.w	si_NumChars(a2),d0
	move.l	si_Buffer(a2),a0
	lea	LN_SIZE(a3),a1
	move.l	d0,(a1)+
	move.l	a1,LN_NAME(a3)
	clr.b	(a1,d0.w)
	call	exec,CopyMem
	move.l	a3,a1
	vlea	CCLIST,a0
	move.l	a3,a1
	call	exec,AddTail
	move.l	a3,d0
	bsr	FINDITEM
	vlea	TAGARRAY,a0
	move.l	#GTLV_Labels,(a0)+
	vlea	CCLIST,a1
	move.l	a1,(a0)+
	move.l	#GTLV_MakeVisible,(a0)+
	move.l	d0,(a0)+
	clr.l	(a0)
	wmove.l	GADARRAY+3*4,a0
	gwin	a1
	sub.l	a2,a2
	vlea	TAGARRAY,a3
	call	gadtools,GT_SetGadgetAttrsA
PROCCNOP	vlea	TAGARRAY,a3
	sub.l	a2,a2
	move.l	a3,a0
	move.l	#GA_Disabled,(a0)+
	move.l	#1,(a0)+
	clr.l	(a0)
	wmove.l	GADARRAY+5*4,a0
	gwin	a1
	call	gadtools,GT_SetGadgetAttrsA
	move.l	#GTST_String,(a3)
	clr.l	4(a3)
	wmove.l	GADARRAY+2*4,a0
	gwin	a1
	call	GT_SetGadgetAttrsA
	wmove.l	GADARRAY+2*4,a0
	gwin	a1
	sub.l	a2,a2
	call	intuition,ActivateGadget
	mpop	a2/a3
	rts
	


PROCLIST	mpush	a2/a3
	clr.l	d0
	vmove.w	CODE,d0
	bsr	SEEKITEM
	movev.l	d0,SELECTED
	beq.s	1$
	move.l	d0,a0
	lea	LN_SIZE+4(a0),a0
	vlea	TAGARRAY,a3
	move.l	a3,a1
	move.l	#GTST_String,(a1)+
	move.l	a0,(a1)+
	clr.l	(a1)
	wmove.l	GADARRAY+2*4,a0
	gwin	a1
	sub.l	a2,a2
	call	gadtools,GT_SetGadgetAttrsA
	move.l	a3,a0
	move.l	#GA_Disabled,(a0)+
	move.l	#0,(a0)+
	clr.l	(a0)
	wmove.l	GADARRAY+5*4,a0
	gwin	a1
	call	GT_SetGadgetAttrsA
1$	mpop	a2/a3
	rts

PROCDEL	push	a2
	vmove.l	SELECTED,d0
	beq	PROCD1
	clrv.l	SELECTED
	move.l	d0,a1
	move.l	a1,a2
	vlea	CCLIST,a0
	call	exec,Remove
	move.l	a2,a1
	moveq.l	#LN_SIZE+4,d0
	add.l	LN_SIZE(a1),d0
	vmove.l	POOL,a0
	call	ss,PoolFree
DISDEL	push	a3
	vlea	TAGARRAY,a3
	move.l	a3,a0
	move.l	#GA_Disabled,(a0)+
	move.l	#1,(a0)+
	clr.l	(a0)
	wmove.l	GADARRAY+5*4,a0
	gwin	a1
	sub.l	a2,a2
	call	gadtools,GT_SetGadgetAttrsA
	move.l	a3,a0
	move.l	#GTLV_Labels,(a0)+
	vlea	CCLIST,a1
	move.l	a1,(a0)+
	clr.l	(a0)
	wmove.l	GADARRAY+3*4,a0
	gwin	a1
	vlea	TAGARRAY,a3
	call	GT_SetGadgetAttrsA
	move.l	a3,a0
	move.l	#GTST_String,(a0)+
	clr.l	(a0)+
	clr.l	(a0)
	wmove.l	GADARRAY+2*4,a0
	gwin	a1
	call	GT_SetGadgetAttrsA
	pop	a3
PROCD1	pop	a2
	rts


	dv.w	COPYFLG
PROCCOPY	vmovev.w	CODE,COPYFLG
	rts


PROCADR	clr.l	d0
	move.l	gg_SpecialInfo(a0),a0
	move.w	si_NumChars(a0),d0
	movev.w	d0,ADRCHARS
	move.l	si_Buffer(a0),a0
	vlea	ADRBUF,a1
	clr.b	(a1,d0.w)
	call	exec,CopyMem
	wmove.l	GADARRAY+4,a0
ACTGAD	push	a2
	sub.l	a2,a2
	gwin	a1
	call	intuition,ActivateGadget
	pop	a2
	rts

PROCSUB	clr.l	d0
	move.l	gg_SpecialInfo(a0),a0
	move.w	si_NumChars(a0),d0
	movev.w	d0,SUBCHARS
	move.l	si_Buffer(a0),a0
	vlea	SUBBUF,a1
	clr.b	(a1,d0.w)
	call	exec,CopyMem
	wmove.l	GADARRAY+2*4,a0
	bra.s	ACTGAD


PROCOK	tstv.w	ADRCHARS
	bne.s	1$
2$	bsr	BEEP
	bra	ACTG1

1$	tstv.w	SUBCHARS
	beq.s	2$
	bsr	DOCLOSEWINDOW
EDITHDR	tstv.l	P_EDITOR
	beq	DOCED
	tstv.w	PREHDRLEN
	bne.s	EDITFILE

	vmove.l	P_FILE,a0
	moveq	#OPEN_NEW,d0
	move.l	#POOLSIZE,d1
	call	ss,TrackOpenBuf
	bsr.s	SAVEHDR

	bsr	COPYBODY


CLOSEOUTF	move.l	a3,a0
	call	ss,FreeObject

EDITFILE	vlea	FNAME,a0
	vmove.l	P_EDITOR,a1
	call	ss,StrCat
	move.b	#' ',(a0)+
	vmove.l	P_FILE,a1
	call	StrCat
	vlea	FNAME,a0
	move.l	a0,d1
	clr.l	d2
	clr.l	d3
	call	dos,Execute	
	bra	EXIT


SAVEHDR	move.l	d0,a3
;	clr.l	d0
;	vmove.w	PREHDRLEN,d0
;	beq.s	1$
;	vmove.l	PREHEADER,a0
;	call	BWrite
;1$
	tlea	G1TXT,a0
	moveq	#4,d0
	call	BWrite
	clr.l	d0
	vmove.w	ADRCHARS,d0
	vlea	ADRBUF,a0
	bsr	WRSNL
	tlea	G2TXT,a0
	moveq	#9,d0
	call	BWrite
	clr.l	d0
	vmove.w	SUBCHARS,d0
	vlea	SUBBUF,a0
	bsr	WRSNL
	vlea.l	CCLIST,a2
	move.l	(a2),d2
	beq.s	SUBWOK
WRITECC	move.l	d2,a2
	move.l	(a2),d2
	beq.s	SUBWOK
	lea	LN_SIZE(a2),a0
	move.l	(a0)+,d0
	bsr	WRSNL
	bra.s	WRITECC
SUBWOK	moveq	#$a,d0
	call	BPutByte
	rts



DOCED	



INIMSG	dv.l	RXMSG
	tlea	PORTNAME,a0
	move.l	a0,d0
	vmove.l	RXPORT,a0
	sub.l	a1,a1
	call	rexxsyslib,CreateRexxMsg
	movev.l	d0,RXMSG
	errc.ne	<Can''t create ARexx port>
	move.l	d0,a1
	lea	XREXXMSG(pc),a0
	call	ss,TrackRoutine



	STRUCTURE	PORTRECORD,0
	APTR	PREC_PORT
	APTR	PREC_NAME
	APTR	PREC_PREDPTR
	APTR	PREC_SUCCPTR
	LABEL	PREC_SIZEOF


CEDON	dbuf.b	CEDP,PREC_SIZEOF
	tlea	CEDPORTNAME,a1
	vlea	CEDP,a0
	move.l	a1,PREC_NAME(a0)
	bsr	FINDPORT
	errc.ne	<Start CED first>






ccmd	macro	*comand
	dtl	<\1>,a0
	bsr	CMDTOCEDC
	endm

ccmdn	macro	*comand
	dtl	<\1>,a0
	bsr	CMDTOCED
	endm


	

	alignlong
	dbuf.b	FIB,fib_SIZEOF
	dbuf.b	FNAME,160


CMDCED	ccmd	<CEDTOFRONT>




CHKCEDFILE
	ccmd	<STATUS 16>,1	;# size of file
	bsr	GETNUMR
	tst.l	d0
	bne.s	OPENNEW
	ccmd	<STATUS 18>,1	;# of changes
	bsr	GETNUMR
	tst.l	d0
	beq.s	NOCEDFILE

OPENNEW
	ccmd	<OPEN NEW>

NOCEDFILE


	

	
	tstv.w	PREHDRLEN
	bne.s	OPENCEDF1
	
	vmove.l	P_FILE,a1
	vlea	FNAME,a0
	call	ss,StrCat
	dtl	<.body>,a1
	call	StrCat

CHECKCOPY	push	a3
	vlea	FNAME,a0
	moveq	#OPEN_NEW,d0
	move.l	#POOLSIZE,d1
	call	ss,TrackOpenBuf
	move.l	d0,a3
	bsr	COPYBODY
OPENCEDFILE	move.l	a3,a0
	call	FreeObject
	pop	a3
OPENCEDF1	dtl	<OPEN >,a0
	bsr	PUTARG
	tstv.w	PREHDRLEN
	beq.s	OPENCEDF2
	vmove.l	P_FILE,a0
	bra.s	OPENCEDF3
OPENCEDF2	vlea	FNAME,a0
OPENCEDF3	bsr	ADDARG
	bsr	SENDCED





	dtl	<SAVE DOS/AREXX COMMANDS >,a0
	bsr	PUTARG
	tlea	CEDTMPNAME,a0
	bsr	ADDARG
	bsr	SENDCED

	dtl	<INSTALL DOS/AREXX COMMAND 1 ''''address ">,a0
	bsr	PUTARG
	tlea	PORTNAME,a0
	bsr	ADDARG
	dtl	<" QUIT''''>,a0
	bsr	ADDARG
	bsr	SENDCED

TRACKRXC	lea	XRXCMD(pc),a0
	move.l	a0,a1
	call	ss,TrackRoutine



	dv.l	RXCMDTRK
	movev.l	d0,RXCMDTRK

WEDEND	vmove.l	RXPORT,a0
	call	exec,WaitPort
	vmove.l	RXPORT,a0
	call	GetMsg
	tst.l	d0
	beq.s	WEDEND
	move.l	d0,a1
	call	ReplyMsg
EDEND	ccmd	<STATUS 19>,1
	vlea	FNAME,a0
	bsr	COUNTCHAR
	move.l	d0,d1
	clr.l	d2
	vlea	FNAME,a0
	add.w	d0,a0
	bra.s	1$
2$	move.b	-(a0),d0
	cmp.b	#'/',d0
	beq.s	3$
	cmp.b	#':',d0
	beq.s	3$
	addq.l	#1,d2	
1$	dbra	d0,2$
3$

COMPFN	vlea	RESSTR,a0
	bsr	COUNTCHAR
	cmp.l	d2,d0
	blt.s	WEDEND
	vlea	FNAME,a0
	vlea	RESSTR,a1
	add.w	d1,a0
	add.w	d0,a1
	bra.s	CMPFNE
CMPFN	move.b	-(a0),d0
	cmp.b	-(a1),d0
	bne.s	WEDEND
CMPFNE	dbra	d2,CMPFN
	
TERMINATE	ccmd	<SAVE>
	vmove.l	RXCMDTRK,a0
	call	ss,FreeObject



	ccmd	<QUIT>

	tstv.w	PREHDRLEN
	bne.s	DELCEDTMP

SAVERESULT	vlea	FNAME,a0
	call	ss,LoadFile
	move.l	d0,d3
	vmove.l	P_FILE,a0
	moveq	#OPEN_NEW,d0
	move.l	#POOLSIZE,d1
	call	ss,TrackOpenBuf
	bsr	SAVEHDR
	move.l	d3,a0
	move.l	-4(a0),d0
	beq.s	TERM01
	call	BWrite
TERM01	move.l	a3,a0
	call	FreeObject
	vlea.l	FNAME,a0
	move.l	a0,d1
	call	dos,DeleteFile
DELCEDTMP	tlea	CEDTMPNAME,a0
	move.l	a0,d1
	call	dos,DeleteFile
	bra	EXIT


DOSERR	sub.l	a0,a0
	sub.l	a1,a1
	jump	ss,DosError
	
	
ADDARG	vlea.l	PARG0,a1
	move.w	-4(a1),d0
	move.l	a1,d1
	add.w	d0,a1
	subq.w	#1,d0
	bra.s	ADDARG1
PUTARG	vlea.l	PARG0,a1
	move.l	a1,d1
	moveq.w	#-1,d0
ADDARG1	addq.w	#1,d0
	cmp.w	#LINESIZE-2,d0
	bcc.s	2$
	move.b	(a0)+,(a1)+
	bne.s	ADDARG1
2$	clr.b	(a1)
	move.l	d1,a1
	move.w	d0,-4(a1)
	rts




XRXCMD
	dtl	<LOAD DOS/AREXX COMMANDS >,a0
	bsr.s	PUTARG
	tlea	CEDTMPNAME,a0
	bsr.s	ADDARG
	bsr.s	SENDCED
	rts

;-------------------------------------------------------------------------------	



COUNTCHAR	moveq	#-1,d0
1$	addq.l	#1,d0
	tst.b	(a0)+
	bne.s	1$
	rts
	





CMDTOCED	bsr.s	PUTARG
	bsr.s	SENDCED
X001	rts



	dbuf.b	RESSTR,LINESIZE
	dv.l	ARG0ASIZE
	dv.w	ARG0SIZE
	dv.w	PAD
	dbuf.b	PARG0,LINESIZE



CMDTOCEDC	bsr.s	CMDTOCED
	beq.s	X001
	push	d0
	vlea.l	PARG0,a1
	move.l	a1,-(sp)
	move.l	sp,a1
	err	<CED command "%s" failed returncode %ld>
	



SENDCED	vlea	CEDP,a0
;
;
;	Send a message to an AREXX port
;PARAMETERS:
;	A0...PORTRECORD structure
;RESULT:
;	D0...Result1
;
SENDMSG	tstv.l	P_DEBUG
	beq.s	NORXECHO
	push	a0
	vlea	PARG0,a0
	call	ss,PutsNL	
	pop	a0
NORXECHO	push	a0
	vlea	PARG0,a0
	clr.l	d0
	move.w	-4(a0),d0
	call	rexxsyslib,CreateArgstring
	errc.ne	<Can''t create ARexx string>
	vmove.l	RXMSG,a1
	move.l	d0,rm_Args(a1)
	clr.l	rm_Result1(a1)
	clr.l	rm_Result2(a1)
	move.l	#RXCOMM+RXFF_RESULT,rm_Action(a1)
	vmove.l	rexxsyslibbase,rm_LibBase(a1)

	pop	a0
	move.l	(a0),d0
	move.l	PREC_PREDPTR(a0),a1
	call	exec,Forbid
	cmp.l	(a1),d0
	bne	MSGERR
	move.l	PREC_SUCCPTR(a0),a1
	cmp.l	(a1),d0
	bne	MSGERR
PORTOK	move.l	d0,a0
	vmove.l	RXMSG,a1
	call	PutMsg
	call	Permit
WMLOOP	bsr	GETMSG
	vmove.l	RXMSG,a0
	cmp.l	a0,d0
	bne	BADMSG
	call	ss,TestBreak



	vlea	RESSTR,a1
TESTRESULT	tst.l	rm_Result1(a0)
	bne.s	NORES2
	move.l	rm_Result2(a0),d0
	beq.s	NORES2
	move.l	rm_Action(a0),d1
	btst	#RXFB_RESULT,d1
	beq.s	NORES2

GETRESULT	move.l	d0,a0
	clr.l	d0
	move.w	-4(a0),d0
	beq.s	NORES3
	move.w	#LINESIZE-1,d1
	cmp.w	d1,d0
	bls.s	1$
	move.w	d1,d0
1$	subq.w	#1,d0
2$	move.b	(a0)+,(a1)+
	dbra	d0,2$

FREERESULT	push	a1
	vmove.l	RXMSG,a0
	lea	rm_Result2(a0),a0
	move.l	(a0),d1
	clr.l	(a0)
	move.l	d1,a0
	call	rexxsyslib,DeleteArgstring
	pop	a1
NORES2	clr.b	(a1)
	vmove.l	RXMSG,a0
	lea	rm_Args(a0),a0
	move.l	(a0),d1
	clr.l	(a0)
	move.l	d1,a0
	call	rexxsyslib,DeleteArgstring
	vmove.l	RXMSG,a0
	move.l	rm_Result1(a0),d0
SENDEND	rts

NORES3	bsr	COPYTOBUF
	bra.s	FREERESULT

MSGERR	call	Permit
	bsr.s	FINDPORT
	bne	PORTOK
	push	a0
	vmove.l	RXMSG,a0
	lea	rm_Args(a0),a0
	move.l	(a0),d0
	clr.l	(a0)
	move.l	d0,a0
	call	rexxsyslib,DeleteArgstring
	pop	a0
	
	lea	PREC_NAME(a0),a1
	err	<Port "%s" disapeared>
	
BADMSG	move.l	d0,a0
	cmp.b	#NT_MESSAGE,LN_TYPE(a0)
	bne.s	1$
	call	exec,ReplyMsg
1$	err	<Unknown message received>

FINDPORT	push	a2
	move.l	a0,a2
	move.l	PREC_NAME(a2),a1
	call	exec,Forbid
	call	FindPort
	move.l	d0,(a2)
	beq.s	NOPORT
	move.l	d0,a0
	move.l	LN_PRED(a0),a0
	move.l	a0,PREC_PREDPTR(a2)
	move.l	d0,a0
	move.l	LN_SUCC(a0),a0
	addq.l	#LN_PRED,a0
	move.l	a0,PREC_SUCCPTR(a2)
NOPORT	call	Permit
	move.l	a2,a0
	pop	a2
	tst.l	d0
	rts


GETMSG	vmove.l	RXPORT,a0
	call	WaitPort
	vmove.l	RXPORT,a0
	call	GetMsg
	tst.l	d0
	beq.s	GETMSG
	move.l	d0,a0
	rts



COPYTOBUF	move.l	#LINESIZE-2,d0
ADDTOBUF	move.b	(a0)+,(a1)+
	dbeq	d0,ADDTOBUF
	clr.b	-(a1)
	rts


COPYBODY	vmove.l	BODYADR,d0
	beq.s	1$
	move.l	d0,a0
	tstv.w	COPYFLG
	beq.s	COPYBODYN
	bsr	COUNTCHAR
	tst.l	d0
	beq.s	1$
	vmove.l	BODYADR,a0
	call	BWrite
1$	rts

;Filter REPLY marks
COPYBODYN	push	a2
	move.l	a0,a2
COPYBLM	move.l	a2,a0
COPYBLO	move.b	(a0)+,d0
	beq.s	COPYBEOF
	cmp.b	#$a,d0
	bne.s	COPYBLO
	bsr	COPYBSAVE
	bra.s	COPYBLM
COPYBEOF	subq.l	#1,a0
	bsr	COPYBSAVE
	pop	a2
	rts

COPYBSAVE	move.l	a0,a1
	sub.l	a2,a0
	move.l	a0,d0
	move.l	a2,a0
	move.l	a1,a2
	tst.l	d0
	beq.s	1$
	cmp.b	#'>',(a0)
	beq.s	1$
	call	BWrite
1$	rts



WRSNL	move.b	#$a,(a0,d0.w)
	addq.l	#1,d0
	jump	BWrite



SEEKITEM	tst.l	d0
	bmi.s	1$
	vlea	CCLIST,a0
	tst.l	(a0)
	beq.s	1$
	move.l	(a0),a0
	bra.s	3$
2$	move.l	(a0),a0
	tst.l	(a0)
	beq.s	1$
3$	dbra	d0,2$
	move.l	a0,d0
	tst.l	d0
	rts
1$	clr.l	d0
4$	rts



FINDITEM	moveq	#-1,d1
	vlea	CCLIST,a0
	tst.l	(a0)
	beq.s	1$
2$	move.l	(a0),a0
	tst.l	(a0)
	beq.s	1$
	addq.l	#1,d1
	cmp.l	a0,d0
	beq.s	1$
	bra.s	2$
1$	move.l	d1,d0
	rts
	
FINDNAME	mpush	d2/d3/a2
	move.l	a0,a2
	move.l	d0,d3
	clr.l	d0
	vlea	CCLIST,a0
	move.l	(a0),d2
	beq.s	1$
2$	move.l	d2,a0
	move.l	(a0),d2
	beq.s	1$
	lea	LN_SIZE(a0),a0
	move.l	(a0)+,d0
	cmp.w	d0,d3
	bne.s	2$
	move.l	a2,a1
3$	move.b	(a0)+,d0
	move.b	(a1)+,d1
	cmp.b	#$60,d0
	bls.s	8$
	and.b	#$df,d0
8$	cmp.b	#$60,d1
	bls.s	9$
	and.b	#$df,d1
9$	cmp.b	d0,d1
	beq.s	4$
	bra.s	2$
4$	tst.b	d0
	bne.s	3$
	move.l	a0,d0
	tst.l	d0
	bra.s	7$
1$	clr.l	d0
7$	mpop	d2/d3/a2
	rts
	
	





GETNUMR	vlea	RESSTR,a0
GETNUM	clr.l	d0
2$	move.b	(a0)+,d1
	beq.s	1$
	sub.b	#'0',d1
	bcs.s	1$
	cmp.b	#'9',d1
	bhi.s	1$
	mulu	#10,d0
	add.w	d1,d0
	bra.s	2$
1$	rts




INTERR
	ifd	DEBUG
	illegal
	endc
	err	<Internal error>



XNODE	move.l	a0,a1
	jump	exec,Remove

XGADGETS	push	w
	move.l	a0,w
	bsr	HIDEGADGETS
	wmove.l	GLIST,a0
	call	gadtools,FreeGadgets
	clrw.l	GLIST
	clrw.l	GTRACKER
	pop	w
	rts


XMENUS	jump	gadtools,FreeMenus

XMENUSTRIP	jump	intuition,ClearMenuStrip

XWINDOW	jump	intuition,CloseWindow

XVINFO	jump	gadtools,FreeVisualInfo


XPSLOCK	move.l	a0,a1
	sub.l	a0,a0
	jump	intuition,UnlockPubScreen

XPORT	push	a0
	call	exec,Forbid
XPLOOP	move.l	(sp),a0
	call	GetMsg
	tst.l	d0
	beq.s	XPOK
	move.l	d0,a1
	call	ReplyMsg
	bra.s	XPLOOP
XPOK	pop	a1
	call	RemPort
	call	Permit
	rts


XREXXMSG
	push	a0
	moveq	#$10,d0
	call	rexxsyslib,ClearRexxMsg
	pop	a0
	call	DeleteRexxMsg
	rts


	dbuf.l	TAGARRAY,32
	dbuf.l	GADGETARRAY,32

stag	macro
	dc.l	SA_\1
	dc.l	\2
	endm

STAGS	stag	LikeWorkbench,1
	stag	Depth,2
	stag	Title,STITLE
	stag	Type,PUBLICSCREEN
	stag	PubName,PUBNAME
	dc.l	TAG_DONE


wtag	macro
	dc.l	WA_\1
	dc.l	\2
	endm



AEIDCMP equ LISTVIEWIDCMP|IDCMP_SIZEVERIFY|IDCMP_MENUVERIFY|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_NEWSIZE



EWTAGS	wtag	Width,WWIDTH
	wtag	Height,WHEIGHT
	wtag	MinWidth,WWIDTH
	wtag	MinHeight,WHEIGHT
	wtag	SizeGadget,1
	wtag	DragBar,1
	wtag	DepthGadget,1
	wtag	CloseGadget,1
	wtag	Borderless,0
	wtag	Backdrop,0
	wtag	Activate,1
	wtag	NewLookMenus,1
	wtag	Title,TITLETXT
	wtag	IDCMP,AEIDCMP	;Will be modified later
	dc.l	TAG_DONE
	



EGADGET1	dc.w	0		;gng_LeftEdge	0
	dc.w	0		;gng_TopEdge	2
	dc.w	0		;gng_Width	4
	dc.w	0		;gng_Height	6
	dc.l	G1TXT		;gng_GadgetText	8
	dc.l	FONT1		;gng_TextAttr	c
	dc.w	1		;gng_GadgetID	10
	dc.l	PLACETEXT_LEFT	;gng_Flags	12
	dc.l	0		;gng_VisualInfo	16
	dc.l	PROCADR			;gng_UserData	
	dc.w	STRING_KIND	;XNG_KIND
	dc.l	EINITG1		;XNG_PREPROCROUT
	dc.l	GTST_MaxChars	;XNG_TAGS...
	dc.l	LINESIZE
	dc.l	TAG_DONE
	

EGADGET2	dc.w	0		;gng_LeftEdge
	dc.w	0		;gng_TopEdge	
	dc.w	0		;gng_Width
	dc.w	0		;gng_Height	
	dc.l	G2TXT		;gng_GadgetText	
	dc.l	FONT1		;gng_TextAttr	
	dc.w	2		;gng_GadgetID	
	dc.l	PLACETEXT_LEFT	;gng_Flags
	dc.l	0		;gng_VisualInfo	
	dc.l	PROCSUB			;gng_UserData	
	dc.w	STRING_KIND	;XNG_KIND
	dc.l	EINITG2		;XNG_PREPROCROUT
	dc.l	GTST_MaxChars	;XNG_TAGS...
	dc.l	LINESIZE
	dc.l	TAG_DONE
	

EGADGET3	dc.w	0		;gng_LeftEdge
	dc.w	0		;gng_TopEdge	
	dc.w	0		;gng_Width
	dc.w	0		;gng_Height	
	dc.l	G3TXT		;gng_GadgetText	
	dc.l	FONT1		;gng_TextAttr	
	dc.w	3		;gng_GadgetID	
	dc.l	PLACETEXT_LEFT	;gng_Flags
	dc.l	0		;gng_VisualInfo	
	dc.l	PROCCC			;gng_UserData	
	dc.w	STRING_KIND	;XNG_KIND
	dc.l	EINITG3		;XNG_PREPROCROUT
	dc.l	GTST_MaxChars	;XNG_TAGS...
	dc.l	LINESIZE
	dc.l	TAG_DONE

EGADGET4	dc.w	0		;gng_LeftEdge
	dc.w	0		;gng_TopEdge	
	dc.w	0		;gng_Width
	dc.w	0		;gng_Height	
	dc.l	0		;gng_GadgetText	
	dc.l	FONT1		;gng_TextAttr	
	dc.w	4		;gng_GadgetID	
	dc.l	0		;gng_Flags
	dc.l	0		;gng_VisualInfo	
	dc.l	PROCLIST			;gng_UserData	
	dc.w	LISTVIEW_KIND	;XNG_KIND
	dc.l	EINITG4		;XNG_PREPROCROUT
	dc.l	GTLV_ReadOnly	;XNG_TAGS...
	dc.l	0
	dc.l	TAG_DONE

EGADGET5	dc.w	0		;gng_LeftEdge
	dc.w	0		;gng_TopEdge	
	dc.w	0		;gng_Width
	dc.w	0		;gng_Height	
	dc.l	G5TXT		;gng_GadgetText	
	dc.l	FONT1		;gng_TextAttr	
	dc.w	5		;gng_GadgetID	
	dc.l	PLACETEXT_IN	;gng_Flags
	dc.l	0		;gng_VisualInfo	
	dc.l	PROCOK			;gng_UserData	
	dc.w	BUTTON_KIND	;XNG_KIND
	dc.l	EINITG5		;XNG_PREPROCROUT
	dc.l	TAG_DONE	;XNG_TAGS...

EGADGET6	dc.w	0		;gng_LeftEdge
	dc.w	0		;gng_TopEdge	
	dc.w	0		;gng_Width
	dc.w	0		;gng_Height	
	dc.l	G6TXT		;gng_GadgetText	
	dc.l	FONT1		;gng_TextAttr	
	dc.w	6		;gng_GadgetID	
	dc.l	PLACETEXT_IN	;gng_Flags
	dc.l	0		;gng_VisualInfo	
	dc.l	PROCDEL			;gng_UserData	
	dc.w	BUTTON_KIND	;XNG_KIND
	dc.l	EINITG6		;XNG_PREPROCROUT
	dc.l	GA_Disabled	;XNG_TAGS...
	dc.l	1
	dc.l	TAG_DONE

EGADGET7	dc.w	0		;gng_LeftEdge
	dc.w	0		;gng_TopEdge	
	dc.w	0		;gng_Width
	dc.w	0		;gng_Height	
	dc.l	G7TXT		;gng_GadgetText	
	dc.l	FONT1		;gng_TextAttr	
	dc.w	7		;gng_GadgetID	
	dc.l	PLACETEXT_IN	;gng_Flags
	dc.l	0		;gng_VisualInfo	
	dc.l	EXIT			;gng_UserData	
	dc.w	BUTTON_KIND	;XNG_KIND
	dc.l	EINITG7		;XNG_PREPROCROUT
	dc.l	TAG_DONE	;XNG_TAGS...



EGADGET8	dc.w	0		;gng_LeftEdge
	dc.w	0		;gng_TopEdge	
	dc.w	0		;gng_Width
	dc.w	0		;gng_Height	
	dc.l	G8TXT		;gng_GadgetText	
	dc.l	FONT1		;gng_TextAttr	
	dc.w	8		;gng_GadgetID	
	dc.l	PLACETEXT_LEFT	;gng_Flags
	dc.l	0		;gng_VisualInfo	
	dc.l	PROCCOPY			;gng_UserData	
	dc.w	CHECKBOX_KIND	;XNG_KIND
	dc.l	EINITG8		;XNG_PREPROCROUT
	dc.l	TAG_DONE	;XNG_TAGS...
	dc.l	-1
	
EINITG1	gwin	a1		;Compute size gadget to fit in the window
	clr.l	d0
	clr.l	d1
	move.w	#GADOFF+96,d1
	move.b	wd_BorderLeft(a1),d0
	add.w	d1,d0
	move.w	d0,(a0)
	clr.l	d0
	move.b	wd_BorderRight(a1),d0
	add.w	(a0),d0
	neg.w	d0
	add.w	wd_Width(a1),d0
	check	pl
	subq.w	#GADOFF,d0
	add.b	wd_BorderLeft(a1),d1
	move.w	d1,gng_LeftEdge(a0)
	moveq	#GADOFF+1*FSIZEY,d1
	add.b	wd_BorderTop(a1),d1
	move.w	d1,gng_TopEdge(a0)
	moveq	#FSIZEY+GADBOR,d1
	movem.w	d0/d1,gng_Width(a0)
	tstv.w	ADRCHARS
	beq.s	1$
	vlea	TAGARRAY,a0
	move.l	#GTST_String,(a0)+
	vlea	ADRBUF,a1
	move.l	a1,(a0)+
	move.l	#TAG_MORE,(a0)+
	move.l	a2,(a0)+
	clr.l	(a0)
	vlea	TAGARRAY,a2
1$	rts

EINITG2	gwin	a1		;Compute size gadget to fit in the window
	clr.l	d0
	clr.l	d1
	move.w	#GADOFF+96,d1
	move.b	wd_BorderLeft(a1),d0
	add.w	d1,d0
	move.w	d0,(a0)
	move.b	wd_BorderRight(a1),d0
	add.w	(a0),d0
	neg.w	d0
	add.w	wd_Width(a1),d0
	check	pl
	subq.w	#GADOFF,d0
	add.b	wd_BorderLeft(a1),d1
	move.w	d1,gng_LeftEdge(a0)
	moveq	#GADOFF+3*FSIZEY,d1
	add.b	wd_BorderTop(a1),d1
	move.w	d1,gng_TopEdge(a0)
	moveq	#FSIZEY+GADBOR,d1
	movem.w	d0/d1,gng_Width(a0)
	tstv.w	SUBCHARS
	beq.s	1$
	vlea	TAGARRAY,a0
	move.l	#GTST_String,(a0)+
	vlea	SUBBUF,a1
	move.l	a1,(a0)+
	move.l	#TAG_MORE,(a0)+
	move.l	a2,(a0)+
	clr.l	(a0)
	vlea	TAGARRAY,a2
1$	rts


EINITG3	gwin	a1		;Compute size gadget to fit in the window
	clr.l	d0
	clr.l	d1
	move.w	#GADOFF+96,d1
	move.b	wd_BorderLeft(a1),d0
	add.w	d1,d0
	move.w	d0,(a0)
	move.b	wd_BorderRight(a1),d0
	add.w	(a0),d0
	neg.w	d0
	add.w	wd_Width(a1),d0
	check	pl
	subq.w	#GADOFF,d0
	add.b	wd_BorderLeft(a1),d1
	move.w	d1,gng_LeftEdge(a0)
	moveq	#GADOFF+5*FSIZEY,d1
	add.b	wd_BorderTop(a1),d1
	move.w	d1,gng_TopEdge(a0)
	moveq	#FSIZEY+GADBOR,d1
	movem.w	d0/d1,gng_Width(a0)
	rts

EINITG4	gwin	a1		;Compute size gadget to fit in the window
	clr.l	d0
	clr.l	d1
	moveq.w	#GADOFF+96,d1
	move.b	wd_BorderLeft(a1),d0
	add.w	d1,d0
	move.w	d0,(a0)
	move.b	wd_BorderRight(a1),d0
	add.w	(a0),d0
	neg.w	d0
	add.w	wd_Width(a1),d0
	check	pl
	subq.w	#GADOFF,d0
	add.b	wd_BorderLeft(a1),d1
	move.w	d1,gng_LeftEdge(a0)

	moveq	#GADOFF+7*FSIZEY,d1
	add.b	wd_BorderTop(a1),d1

	move.w	d1,gng_TopEdge(a0)
	add.b	wd_BorderBottom(a1),d1	;!!!!! .b
	add.w	#2*FSIZEY,d1
	neg.w	d1
	add.w	wd_Height(a1),d1
	movem.w	d0/d1,gng_Width(a0)
	vlea	TAGARRAY,a0
	vlea	CCLIST,a1
	move.l	#GTLV_Labels,(a0)+
	move.l	a1,(a0)+
	move.l	#TAG_MORE,(a0)+
	move.l	a2,(a0)+
	vlea	TAGARRAY,a2
	rts

EINITG5	gwin	a1		;Compute size gadget to fit in the window
	clr.l	d0
	clr.l	d1
	move.b	wd_BorderLeft(a1),d0
	add.b	wd_BorderRight(a1),d0
	neg.w	d0
	add.w	wd_Width(a1),d0
	check	pl
	divu	#3,d0
	subq.w	#4*GADOFF,d0
	move.w	d0,d1
	subq.w	#GADOFF,d0
	divu	#3,d0

	moveq	#8*GADOFF,d0
	move.w	d0,(a0)
	move.w	d1,gng_Width(a0)
	moveq	#FSIZEY+GADBOR,d0
	move.w	d0,gng_Height(a0)
	
	clr.l	d1
	move.b	wd_BorderBottom(a1),d1
	add.w	#FSIZEY+GADBOR+GADOFF,d1
	neg.w	d1
	add.w	wd_Height(a1),d1
	move.w	d1,gng_TopEdge(a0)
	rts




EINITG6	gwin	a1		;Compute size gadget to fit in the window
	clr.l	d0
	clr.l	d1
	moveq.w	#GADOFF*4,d1

	add.b	wd_BorderLeft(a1),d1
	addq.w	#GADOFF,d1
	move.w	d1,gng_LeftEdge(a0)

	moveq	#7*FSIZEY,d1
	add.b	wd_BorderTop(a1),d1
	move.w	d1,d0
	add.b	wd_BorderBottom(a1),d1	;!!!!! .b
	add.w	#2*FSIZEY,d1
	neg.w	d1
	add.w	wd_Height(a1),d1
	lsr.w	#2,d1			;1/4
	add.w	d1,d0
	sub.w	#(FSIZEY+GADBOR)/2,d0
	
	move.w	d0,gng_TopEdge(a0)
	move.w	d1,gng_Height(a0)
	move.w	#96-GADOFF*8,gng_Width(a0)
	move.w	#FSIZEY+GADBOR,gng_Height(a0)
	rts


EINITG7	gwin	a1		;Compute size gadget to fit in the window
	clr.l	d0
	clr.l	d1
	move.b	wd_BorderLeft(a1),d0
	add.b	wd_BorderRight(a1),d0
	neg.w	d0
	add.w	wd_Width(a1),d0
	check	pl
	divu	#3,d0
	subq.w	#4*GADOFF,d0
	move.w	d0,d1
	subq.w	#GADOFF,d0
	divu	#3,d0

	moveq	#12*GADOFF,d0
	add.w	d1,d0
	add.w	d1,d0
	move.w	d0,(a0)
	move.w	d1,gng_Width(a0)
	moveq	#FSIZEY+GADBOR,d0
	move.w	d0,gng_Height(a0)
	
	clr.l	d1
	move.b	wd_BorderBottom(a1),d1
	add.w	#FSIZEY+GADBOR+GADOFF,d1
	neg.w	d1
	add.w	wd_Height(a1),d1
	move.w	d1,gng_TopEdge(a0)
	rts


EINITG8	gwin	a1		;Compute size gadget to fit in the window
	clr.l	d0
	clr.l	d1
	moveq.w	#GADOFF,d1

	add.b	wd_BorderLeft(a1),d1
	add.w	#$40,d1		;Length of text !!!!
	move.w	d1,gng_LeftEdge(a0)


	moveq	#7*FSIZEY,d1
	add.b	wd_BorderTop(a1),d1
	move.w	d1,d0
	add.b	wd_BorderBottom(a1),d1	;!!!!! .b
	add.w	#2*FSIZEY,d1
	neg.w	d1
	add.w	wd_Height(a1),d1
	mulu	#3,d1
	lsr.w	#2,d1			;3/4
	add.w	d1,d0
	sub.w	#(FSIZEY+GADBOR)/2,d0
	
	move.w	d0,gng_TopEdge(a0)
	move.w	d1,gng_Height(a0)
	move.w	#10,gng_Width(a0)
	move.w	#FSIZEY+GADBOR,gng_Height(a0)
	vlea	TAGARRAY,a0
	tstv.l	COPYADR,a0
	beq.s	EINITG81
	rts

EINITG81	move.l	#GA_DISABLED,(a0)+
	move.l	#-1,(a0)+
EINITG82	move.l	#TAG_MORE,(a0)+
	move.l	a2,(a0)+
	vlea	TAGARRAY,a2
	rts




EMENU	dc.b	1	;gnm_Type
	dc.b	0	;gnm_Pad
	dc.l	M1TXT	;gnm_Label
	dc.l	0	;gnm_CommKey
	dc.w	0	;gnm_Flags
	dc.l	0	;gnm_MutualExclude
	dc.l	0	;gnm_UserData

	dc.b	2	;gnm_Type
	dc.b	0	;gnm_Pad
	dc.l	I1TXT	;gnm_Label
	dc.l	I1KEY	;gnm_CommKey
	dc.w	0	;gnm_Flags
	dc.l	0	;gnm_MutualExclude
	dc.l	0	;gnm_UserData

	dc.l	0		


EMTAGS	dc.l	GTMN_FullMenu
	dc.l	1
	dc.l	GTMN_NewLookMenus
	dc.l	1
	dc.l	TAG_DONE


	dt	M1TXT,<Control>
	dt	I1TXT,<Quit>
	dt	I1KEY,<Q>



	dt	G1TXT,<To: >
	dt	G2TXT,<Subject: >
	dt	G3TXT,<Copies to: >
	dt	G5TXT,<OK>
	dt	G6TXT,<Del>
	dt	G7TXT,<Cancel>
	dt	G8TXT,<Copy m.>



	dt	TITLETXT,<Enter mail header ...>

	dt	STITLE,<MTerm 1.0>
	dt	FNAME1,<topaz.font>
	dt	SPACE,< >
	dt	TSTTXT,<Test>

	dt	PORTNAME,<GetAddressPort>
	dt	CEDTMPNAME,<t:cedcmd.tmp>
	
	dt	CEDPORTNAME,<rexx_ced>



CLSSEQ	dc.b	27,'[0;0H',27,'[J',27,'[0m',0
LFSEQ	dc.b	10,0

	cnop	0,4

FONT1	dc.l	FNAME1
	dc.w	FSIZEY
	dc.b	0
	dc.b	2





	cnop	0,4

	
	tags
	dc.w	sst_errorreq
	library	rexxsyslib,36
	template	<FILE/A,EDITOR/K,DEBUG/S>
	dv.l	P_FILE
	dv.l	P_EDITOR
	dv.l	P_DEBUG
	finish
	end

Test preheader
To: pc
Subject: blabol


This is the header
> blabol 1
> blabol 2
>blabol 3
This is the footer
