;V1.04	ERRORMESSAGE IF PATCH WAS CLICKED WITH NO PARAMETER SELECTED
;V1.03	VERSIONSTRING ADDED, CRC16-EVALROUTINE ADDED
;V1.02	FSSM-DEVICEPOINTER STORED, ADDED DRIVEINHIBIT-OPTION
;V1.01	COMMANDLINEPARAMETER ADDED
;V1.00	INITIAL REVISION

	INCDIR	ASM-ONE:INCLUDE2.0/

	INCLUDE LIBRARIES/DOS_LIB.I
	INCLUDE	LIBRARIES/FILEHANDLER.I
	INCLUDE	LIBRARIES/DOSEXTENS.I
	INCLUDE	LIBRARIES/DISKFONT_LIB.I
	INCLUDE EXEC/EXEC_LIB.I
	INCLUDE	EXEC/MEMORY.I
	INCLUDE	GRAPHICS/GRAPHICS_LIB.I
	INCLUDE INTUITION/INTUITION_LIB.I
	INCLUDE INTUITION/INTUITION.I
	INCLUDE	DEVICES/TRACKDISK.I
	INCLUDE	EXEC/IO.I
;_SYSBASE	EQU	4

	INCDIR	ASM-ONE:OWN/Patcher/
;VERSION=1
;SUBVERSION=4

debug=0

FlaggenTEMP	=	activate!WINDOWDRAG!WINDOWCLOSE	;!REPORTMOUSE
FLAGGEN	=	FLAGGENTEMP!WBENCHWINDOW!WINDOWDEPTH!GIMMEZEROZERO
ICDMPFLTEMP	=	GADGETUP!ACTIVEWINDOW	;!MOUSEBUTTONS
ICDMPFL	=	ICDMPFLTEMP!INACTIVEWINDOW!CLOSEWINDOW

JAM2	= 1
;MODE_READWRITE = $3ED


;patcher-includefile for V1.03

PCH_FILECOUNT		= $80004450
PCH_ADAPTOR		= $80004451
PCH_DISKNAME		= $80004452
PCH_CHECKDISK		= $80004453
PCH_FILENAME		= $80004454
PCH_SPECIAL		= $80004455
PCH_CHANGES		= $80004456
PCH_PROCESSING		= $80004457
PCH_NAME		= $80004458
PCH_MINVERSION		= $80004459
PCH_LOADOFFSET		= $8000445A
PCH_INIT		= $8000445B
PCH_STATE		= $8000445C
PCH_STATE2		= $8000445D
PCH_APPENDSPACE		= $8000445E
PCH_SAVEDATA		= $8000445F
PCH_DATALENGTH		= $80004460
PCH_BOOTBLOCK		= $80004461
PCH_FINISH		= $80004462
PCH_ERRORINPARAMETER	= $80004463
PCH_SAVEPGM		= $80004464

PTB_DOSBASE		= $0
PTB_ADDRESSOFFILE	= $4
PTB_INTUITIONBASE	= $8
PTB_GFXBASE		= $C
PTB_WINDOW		= $10
PTB_FILENAME		= $14
PTB_FULLNAME		= $18
PTB_FILESIZE		= $1C
PTB_DISKNAME		= $20
PTB_OPENDEVICE		= $24
PTB_DEVICESOURCEPTR	= $28
PTB_DEVICEDESTPTR	= $2C
PTB_SPACE		= $30
PTB_FORMATDEST		= $34
PTB_REQUEST		= $38
;--- new since version 1.02 ---
PTB_FSSMSOURCEPTR	= $3C
PTB_FSSMDESTPTR		= $40
PTB_INHIBITDRIVE	= $44
PTB_ENABLEDRIVE		= $48
;--- new since version 1.03 ---
PTB_CRC16		= $4C

	SECTION	Editor,CODE

	BRA.S	HP
	DC.B	0,'$VER: Patcher 1.04 (17-jun-97 2:00:00)',0
	EVEN

HP
	BASEREG	DOSBAS,A5
	LEA.L	DOSBAS(PC),A5
	MOVE.L	A7,OSSTACK(A5)

	ifne	debug
	lea	.line(PC),a0
	bra.s	.contdb
.line	dc.b	'-sdf2: -pasm-one:own/patcher/parameter/imagerrocknroll',0
	EVEN
.contdb
	endc


	BSR.W	EXAMCL
	MOVE.L	(_SYSBASE).W,A6
	LEA.L	INTUINAME(PC),A1
	MOVE.L	#0,D0
	JSR	_LVOOpenLibrary(A6)	;Intuition öffnen
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,INTUIBASE(A5)	;Zeiger sichern
	MOVE.L	(_SYSBASE).W,A6
	LEA.L	DOSNAM(PC),A1
	MOVEQ.L	#0,D0
	JSR	_LVOOpenLibrary(A6)	;DOS öffnen
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,DOSBAS(A5)		;Zeiger sichern
	MOVE.L	(_SYSBASE).W,A6
	LEA.L	GRANAME(PC),A1
	MOVEQ.L	#0,D0
	JSR	_LVOOpenLibrary(A6)	;Graphic-Lib öffnen
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,GRABASE(A5)		;Zeiger sichern
	MOVE.L	(_SYSBASE).W,A6
	LEA.L	DISKFNTNAME(PC),A1
	MOVEQ.L	#0,D0
	JSR	_LVOOPENLIBRARY(A6)	;Diskfont-Lib öffnen
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,DISKFNTBASE(A5)	;Zeiger sichern

	MOVE.L	DISKFNTBASE(PC),A6
	LEA.L	RUBY_FNT(PC),A0
	JSR	_LVOOPENDISKFONT(A6)
	TST.L	D0
	BEQ.W	ERR

	MOVE.L	#$28,D0
	MOVE.L	#MEMF_PUBLIC!MEMF_CLEAR,D1
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOALLOCMEM(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,MYPORT(A5)

	MOVE.L	#$38,D0
	MOVE.L	#MEMF_PUBLIC!MEMF_CLEAR,D1
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOALLOCMEM(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,BOOTIORQ(A5)

	MOVE.L	#$38,D0
	MOVE.L	#MEMF_PUBLIC!MEMF_CLEAR,D1
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOALLOCMEM(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,DESTIORQ(A5)

	MOVE.L	#$38,D0
	MOVE.L	#MEMF_PUBLIC!MEMF_CLEAR,D1
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOALLOCMEM(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,SOURCEIORQ(A5)

	MOVE.L	#$48,D0
	MOVE.L	#MEMF_PUBLIC!MEMF_CLEAR,D1
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOALLOCMEM(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,DOSPACKETS(A5)

	MOVEQ.L	#-1,D0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOALLOCSIGNAL(A6)
	CMP.L	#-1,D0
	BEQ.W	ERR
	MOVE.L	D0,SIGNALSTORE
	
	MOVE.L	MYPORT(PC),A4
	MOVE.B	D0,MP_SIGBIT(A4)	
	SUB.L	A1,A1
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOFINDTASK(A6)
	MOVE.L	D0,MP_SIGTASK(A4)
	MOVE.B	#PA_SIGNAL,MP_FLAGS(A4)
	CLR.B	LN_PRI(A4)
	CLR.L	LN_NAME(A4)
	MOVE.B	#NT_MSGPORT,LN_TYPE(A4)
	MOVE.L	A4,A1
	JSR	_LVOADDPORT(A6)
	ST.B	PORTOK(A5)

	MOVE.L	MYPORT(PC),A0
	MOVE.L	BOOTIORQ(PC),A1
	MOVE.L	A0,MN_REPLYPORT(A1)
	MOVE.W	#$20,MN_LENGTH(A1)
	MOVE.B	#NT_MESSAGE,LN_TYPE(A1)
	MOVE.L	DESTIORQ(PC),A1
	MOVE.L	A0,MN_REPLYPORT(A1)
	MOVE.W	#$20,MN_LENGTH(A1)
	MOVE.B	#NT_MESSAGE,LN_TYPE(A1)
	MOVE.L	SOURCEIORQ(PC),A1
	MOVE.L	A0,MN_REPLYPORT(A1)
	MOVE.W	#$20,MN_LENGTH(A1)
	MOVE.B	#NT_MESSAGE,LN_TYPE(A1)
	MOVE.L	DOSPACKETS(PC),A1
	MOVE.L	A0,MN_REPLYPORT(A1)
	MOVE.W	#$30,MN_LENGTH(A1)
	MOVE.B	#NT_MESSAGE,LN_TYPE(A1)

	TST.B	EXEC1PARAM
	BEQ.W	.ALLP
	LEA.L	MEMORYBASE(PC),A3
	MOVE.L	#PARAMFILENAM,D1	;LOAD SINGLE PARAMETER (COMMAND-LINE-
	MOVE.L	DOSBAS(PC),A6		; VERSION)
	JSR	_LVOLOADSEG(A6)
	TST.L	D0
	BEQ.W	.ENDP
	LSL.L	#2,D0
	ADDQ.L	#4,D0
	MOVE.L	D0,(A3)
	MOVE.L	D0,A0
	CLR.L	(A0)
	CMP.L	#'PTCH',8(A0)
	BNE.S	.SP8
	MOVE.L	4(A0),A0
.SP31	CMP.L	#PCH_MINVERSION,(A0)+
	BEQ.S	.SP30
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.ENDP
	BRA.S	.SP31

.SP30	TST.L	(A0)
	BEQ.W	.ENDP
	MOVE.L	(A0),A0
	CMP.B	#'V',(A0)+
	BNE.W	ERR
	MOVEQ.L	#0,D1			;MAINVERSIONCHECK
.SPV1	MOVE.B	(A0)+,D0
	BEQ.W	ERR
	AND.W	#$F,D0
	LSL.W	#4,D1
	OR.W	D0,D1
	CMP.B	#'.',(A0)
	BNE.S	.SPV1
	CMP.W	#1,D1			;VERSION-#
	BHI.S	.SP8

	ADDQ.L	#1,A0			;SKIP '.'
	MOVEQ.L	#0,D1
	MOVE.B	(A0)+,D0
	BEQ.W	ERR
	AND.W	#$F,D0
	LSL.W	#4,D1
	OR.W	D0,D1
	MOVE.B	(A0)+,D0
	BEQ.W	ERR
	AND.W	#$F,D0
	LSL.W	#4,D1
	OR.W	D0,D1

	CMP.W	#4,D1			;SUBVERSION-#
	BHI.S	.SP8
	BRA.W	.ENDP

.SP8	LEA.L	MEMORYBASE(PC),A3
.SP7	MOVE.L	(A3),A2
	TST.L	(A2)
	BEQ.S	.SP6
	MOVE.L	(A3),A3
	BRA.S	.SP7

.SP6	CLR.L	(A3)
	MOVE.L	A2,D1
	SUBQ.L	#4,D1
	LSR.L	#2,D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOUNLOADSEG(A6)
	BRA.W	.ENDP

.ALLP	LEA.L	LOCKNAM(PC),A1			;LOAD PARAMETERS
	MOVE.L	A1,D1
	MOVE.L	#MODE_READWRITE,D2
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOLOCK(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,PARAMLOCK(A5)
	MOVE.L	PARAMLOCK(PC),D1
	MOVE.L	#PARAMINFO,D2
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOEXAMINE(A6)
	TST.L	D0
	BEQ.W	ERR
	BRA.S	.1

.3	MOVE.L	PARAMLOCK(PC),D1
	MOVE.L	#PARAMINFO,D2
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOEXNEXT(A6)
	TST.L	D0
	BEQ.W	.2
.1	LEA.L	PARAMINFO,A0
	CMP.L	#-3,FIB_DIRENTRYTYPE(A0)
	BNE.S	.3
	LEA.L	MEMORYBASE(PC),A3
.5	TST.L	(A3)
	BEQ.S	.4
	MOVE.L	(A3),A3
	BRA.S	.5

.4
	LEA.L	PARAMINFO,A0
	LEA.L	FIB_FILENAME(A0),A1
	LEA.L	BUFFILNAM(PC),A0
	MOVEQ.L	#$68-1,D0
.26	MOVE.B	(A1)+,(A0)+
	DBF	D0,.26

	MOVE.L	#FILENAM,D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOLOADSEG(A6)
	TST.L	D0
	BEQ.S	.3
	LSL.L	#2,D0
	ADDQ.L	#4,D0
	MOVE.L	D0,(A3)
	MOVE.L	D0,A0
	CLR.L	(A0)
	CMP.L	#'PTCH',8(A0)
	BNE.S	.8
	MOVE.L	4(A0),A0
.31	CMP.L	#PCH_MINVERSION,(A0)+
	BEQ.S	.30
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.3
	BRA.S	.31

.30	TST.L	(A0)
	BEQ.W	.3
	MOVE.L	(A0),A0
	CMP.B	#'V',(A0)+
	BNE.W	ERR
	MOVEQ.L	#0,D1			;MAINVERSIONCHECK
.APV1	MOVE.B	(A0)+,D0
	BEQ.W	ERR
	AND.W	#$F,D0
	LSL.W	#4,D1
	OR.W	D0,D1
	CMP.B	#'.',(A0)
	BNE.S	.APV1
	CMP.W	#1,D1			;VERSION-#
	BHI.S	.8

	ADDQ.L	#1,A0			;SKIP '.'
	MOVEQ.L	#0,D1
	MOVE.B	(A0)+,D0
	BEQ.W	ERR
	AND.W	#$F,D0
	LSL.W	#4,D1
	OR.W	D0,D1
	MOVE.B	(A0)+,D0
	BEQ.W	ERR
	AND.W	#$F,D0
	LSL.W	#4,D1
	OR.W	D0,D1

	CMP.W	#4,D1			;SUBVERSION-#
	BHI.S	.8
	BRA.W	.3

.8	LEA.L	MEMORYBASE(PC),A3
.7	MOVE.L	(A3),A2
	TST.L	(A2)
	BEQ.S	.6
	MOVE.L	(A3),A3
	BRA.S	.7

.6	CLR.L	(A3)
	MOVE.L	A2,D1
	SUBQ.L	#4,D1
	LSR.L	#2,D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOUNLOADSEG(A6)
	BRA.W	.3

.2	MOVE.L	PARAMLOCK(PC),D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOUNLOCK(A6)
	CLR.L	PARAMLOCK		;END OF LOADING PARAMETERS



.ENDP	LEA.L	MEMORYBASE(PC),A3
	TST.L	(A3)
	BEQ.W	ERR
	MOVEQ.L	#0,D0
.10	MOVE.L	(A3),A3
	ADDQ.W	#1,D0
	TST.L	(A3)
	BNE.S	.10
	MOVE.W	D0,PARAMCOUNT

	TST.W	PARAMCOUNT
	BEQ.W	ERR
	MOVE.L	#$FFFF,D0
	MOVEQ.L	#0,D1
	MOVE.W	PARAMCOUNT,D1
	CMP.W	#5,D1
	BLS.S	.PI1
	MULU.W	#5,D0
	DIVU.W	D1,D0
	BRA.S	.11

.PI1	MOVE.L	#$FFFF,D0

.11	LEA.L	PROPINFO1(PC),A0
	MOVE.W	D0,PI_VERTBODY(A0)
	MOVE.W	D0,LENGTHBODY

	MOVE.W	PARAMCOUNT(PC),D1
	SUBQ.W	#1,D1
.27	LEA.L	MEMORYBASE(PC),A4
	MOVE.W	PARAMCOUNT(PC),D0
	SUBQ.W	#1,D0
.15	DBF	D0,.13
	DBF	D1,.27
	BRA.S	.14

.13
.16	MOVE.L	(A4),A3
	TST.L	(A3)
	BEQ.S	.15
	MOVE.L	$4(A3),A1
.18	CMP.L	#PCH_NAME,(A1)+
	BEQ.S	.17
	ADDQ.L	#4,A1
	TST.L	(A1)
	BEQ.W	ERR
	BRA.S	.18

.17	MOVE.L	(A1),A1
	MOVE.L	(A3),A2
	MOVE.L	4(A2),A0
.19	CMP.L	#PCH_NAME,(A0)+
	BEQ.S	.20
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	ERR
	BRA.S	.19

.20	MOVE.L	(A0),A0	
.23	CMPM.B	(A1)+,(A0)+
	BHI.S	.21
	BLO.S	.22
	TST.B	(A1)
	BEQ.S	.21
	TST.B	(A0)
	BEQ.S	.22
	BRA.S	.23

.22	MOVE.L	(A2),A1
	MOVE.L	A2,(A4)
	MOVE.L	A3,(A2)
	MOVE.L	A1,(A3)
.21	MOVE.L	(A4),A4
	BRA.S	.15

.14	MOVE.W	PARAMCOUNT(PC),D0
	CMP.W	#$5,D0
	BLS.S	.24
	MOVEQ.L	#6,D0
.24	MOVEQ.L	#6,D1
	SUB.W	D0,D1
	MULU.W	#$18,D1
	JMP	.25(PC,D1.W)

.25	BCLR	#0,AUFLAGS
	BCLR	#0,ADFLAGS
	BCLR	#0,P1FLAGS
	MOVEQ.L	#5,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T5PTR
	BCLR	#0,G5FLAGS
	NOP
	NOP
	MOVEQ.L	#4,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T4PTR
	BCLR	#0,G4FLAGS
	NOP
	NOP
	MOVEQ.L	#3,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T3PTR
	BCLR	#0,G3FLAGS
	NOP
	NOP
	MOVEQ.L	#2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T2PTR
	BCLR	#0,G2FLAGS
	NOP
	NOP
	MOVEQ.L	#1,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T1PTR

	MOVE.L	INTUIBASE(PC),A6
	LEA.L	WINDOW1DATEN,a0
	JSR	_LVOOpenWindow(a6)	;Window öffnen
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,WINDOW1		;Zeiger sichern

	MOVE.L	WINDOW1(PC),A0
	MOVE.L	$32(A0),A4
	MOVE.L	A4,WIN1RASTPORT

	LEA.L	RUBY_FNT(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOOPENFONT(A6)
	TST.L	D0
	BEQ.W	ERR
	
	MOVE.L	D0,A0
	CMP.W	#$8,$14(A0)
	BNE.W	ERR

	MOVE.L	A4,A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETFONT(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#3,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#25+405,D0
	MOVE.L	#18,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#5,D0
	LEA.L	POINTARRAY1(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOPOLYDRAW(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#449,D0
	MOVE.L	#81,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#5,D0
	LEA.L	POINTARRAY2(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOPOLYDRAW(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#449,D0
	MOVE.L	#123,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#5,D0
	LEA.L	POINTARRAY3(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOPOLYDRAW(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#1,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#79,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	#NOSELECTEND-NOSELECT,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	LEA.L	NOSELECT(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#89,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVEQ.L	#0,D0

	MOVE.L	#SRCDEVICE-SRCINFO-1,D0
	LEA.L	SRCDEVICE(PC),A1
.T1	ADDQ.L	#1,D0
	TST.B	(A1)+
	BNE.S	.T1

	MOVE.L	WIN1RASTPORT(PC),A1
	LEA.L	SRCINFO(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#99,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	#DESTDEVICE-DESTINFO-1,D0
	LEA.L	DESTDEVICE(PC),A1
.T2	ADDQ.L	#1,D0
	TST.B	(A1)+
	BNE.S	.T2
	MOVE.L	WIN1RASTPORT(PC),A1
	LEA.L	DESTINFO(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#121,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	#WELCOMEEND-WELCOME,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	LEA.L	WELCOME(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#131,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	#WRITTENEND-WRITTEN,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	LEA.L	WRITTEN(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

;	TST.B	EXEC1PARAM
;	BEQ.S	Y
;					;1PARAMETER-STUFF HERE


	BRA.S	Y

SCHLAEFT	BSR.W	SCHLAFEN
.1	BTST.L	#$12,d4			;WINDOW gerade aktiviert?
	BEQ.S	SCHLAEFT

Y	BSR.W	SCHLAFEN
	BTST.L	#$13,d4			;WINDOW gerade inaktiviert?
	BNE.S	SCHLAEFT

	BTST.L	#9,D4			;QUIT GEDRÜCKT?
	BEQ.S	.10
	BRA.S	ENDE

.10	BTST.L	#6,D4			;GADGET LOSGELASSEN?
	BEQ.S	.8
	BSR.W	CHECKGADGETS
	BRA.S	Y

.8	BTST.L	#3,D4			;Maustaste angeklickt?
	beq.w	next1
next1
	btst	#7,$bfe001
	beq	ende
	BRA.S	Y
		
ENDE	MOVEQ.L	#0,D0
	BEQ.S	ENDE1

ERR	MOVE.L	OSSTACK(PC),A7
	MOVEQ.L	#20,D0

ENDE1	MOVE.L	D0,-(A7)
	MOVE.L	INTUIBASE(PC),A6  
	TST.L	WINDOW1
	BEQ.S	.1
	MOVE.L	WINDOW1(PC),A0
	JSR	_LVOCloseWindow(A6)	;Window schließen

.1	TST.L	FILHANDLE
	BEQ.S	.12
	MOVE.L	FILHANDLE(PC),D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOCLOSE(A6)

.12	LEA.L	MEMORYBASE(PC),A3
	TST.L	(A3)
	BEQ.S	.9
.10	MOVE.L	(A3),A2
	TST.L	(A2)
	BEQ.S	.11
	MOVE.L	(A3),A3
	BRA.S	.10

.11	CLR.L	(A3)
	MOVE.L	A2,D1
	SUBQ.L	#4,D1
	LSR.L	#2,D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOUNLOADSEG(A6)
	BRA.S	.12

.9	TST.L	PARAMLOCK(A5)
	BEQ.S	.2
	MOVE.L	PARAMLOCK(PC),D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOUNLOCK(A6)
.2
	TST.B	PORTOK(A5)
	BEQ.S	.S2
	MOVE.L	MYPORT(PC),A1
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOREMPORT(A6)
.S2
	MOVE.L	SIGNALSTORE(PC),D0
	CMP.L	#-1,D0
	BEQ.S	.S1
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOFREESIGNAL(A6)

.S1	TST.L	BOOTIORQ(A5)
	BEQ.S	.M1
	MOVE.L	BOOTIORQ(PC),A1
	MOVE.L	#$38,D0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOFREEMEM(A6)
.M1
	TST.L	DOSPACKETS(A5)
	BEQ.S	.M5
	MOVE.L	DOSPACKETS(PC),A1
	MOVE.L	#$48,D0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOFREEMEM(A6)
.M5
	TST.L	DESTIORQ(A5)
	BEQ.S	.M2
	MOVE.L	DESTIORQ(PC),A1
	MOVE.L	#$38,D0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOFREEMEM(A6)
.M2
	TST.L	SOURCEIORQ(A5)
	BEQ.S	.M3
	MOVE.L	SOURCEIORQ(PC),A1
	MOVE.L	#$38,D0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOFREEMEM(A6)
.M3
	TST.L	MYPORT(A5)
	BEQ.S	.M4
	MOVE.L	MYPORT(PC),A1
	MOVE.L	#$28,D0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOFREEMEM(A6)
.M4

	TST.L	GRABASE
	BEQ.S	.3
	MOVE.L	(_SYSBASE).W,A6
	MOVE.L	GRABASE(PC),A1
	JSR	_LVOcloselibrary(a6)	;Graphic-Lib schliessen

.3	TST.L	DOSBAS
	BEQ.S	.6
	MOVE.L	(_SYSBASE).W,A6
	MOVE.L	DOSBAS(PC),A1
	JSR	_LVOcloselibrary(a6)	;DOS-Lib schliessen

.6	tst.l	INTUIBASE
	beq.s	.4
	move.l	(_SYSBASE).W,A6
	move.l	INTUIBASE(PC),A1
	jsr	_LVOCloseLibrary(A6)	;Intuition-Lib schließen

.4	tst.l	DISKFNTBASE
	beq.s	.5
	move.l	(_SYSBASE).W,A6
	move.l	DISKFNTBASE(PC),A1
	jsr	_LVOCloseLibrary(A6)	;DISKFONT-Lib schließen

.5	move.l	(sp)+,d0
	rts

*******************************************************************************

CHECKGADGETS
	LEA.L	MSGBUFFER+2(PC),A0
	BTST.B	#6,IM_CLASS+3-$14(A0)
	BNE.S	.2
	MOVEQ.L	#-1,D0
	RTS

.2	MOVE.L	IM_IADDRESS-$14(A0),D0
	CMP.L	#PROPGADGET1,D0
	BEQ.W	DRAWPARS
	CMP.L	#ARROWUP,D0
	BEQ.W	DRAWONEUP
	CMP.L	#ARROWDOWN,D0
	BEQ.W	DRAWONEDOWN
	CMP.L	#GADGET1,D0
	BEQ.S	.G1
	CMP.L	#GADGET2,D0
	BEQ.S	.G2
	CMP.L	#GADGET3,D0
	BEQ.S	.G3
	CMP.L	#GADGET4,D0
	BEQ.S	.G4
	CMP.L	#GADGET5,D0
	BEQ.S	.G5
	CMP.L	#PTCHGADGET,D0
	BEQ.W	REMPROT
	MOVEQ.L	#-1,D0
	RTS

.G5	MOVEQ.L	#5,D0
	BRA.S	.GT0

.G4	MOVEQ.L	#4,D0
	BRA.S	.GT0

.G3	MOVEQ.L	#3,D0
	BRA.S	.GT0

.G2	MOVEQ.L	#2,D0
	BRA.S	.GT0

.G1	MOVEQ.L	#1,D0
.GT0
	MOVEQ.L	#0,D2
	MOVE.W	POSOFPROP(PC),D2
	ADD.W	D0,D2
	LEA.L	MEMORYBASE(PC),A3
	BRA.S	.GT6

.GT4	MOVE.L	(A3),A3
.GT6	DBF	D2,.GT4
	MOVE.L	$4(A3),A3
	MOVE.L	A3,PARAMTABBASE
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#0,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A0
	BCLR.B	#3,RP_FLAGS+1(A0)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#26,D0
	MOVE.L	#72,D1
	MOVE.L	#448,D2
	MOVE.L	#102,D3
	MOVE.L	GRABASE(PC),A6
	JSR	_LVORECTFILL(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#26,D0
	MOVE.L	#114,D1
	MOVE.L	#448,D2
	MOVE.L	#134,D3
	MOVE.L	GRABASE(PC),A6
	JSR	_LVORECTFILL(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#1,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#79,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)

	MOVE.L	PARAMTABBASE(PC),A0
.GT8	CMP.L	#PCH_NAME,(A0)+
	BEQ.S	.GT7	
	ADDQ.L	#4,A0
	BRA.S	.GT8

.GT7	MOVE.L	(A0),A0
	MOVE.L	A0,A1
.GT9	TST.B	(A1)+
	BNE.S	.GT9
	MOVE.L	A1,D0
	SUB.L	A0,D0
	SUBQ.L	#1,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#89,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)

	MOVE.L	PARAMTABBASE(PC),A0
.GT10	CMP.L	#PCH_ADAPTOR,(A0)+
	BEQ.S	.GT11
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.GT17
	BRA.S	.GT10

.GT11	MOVE.L	(A0),A0
	MOVE.L	A0,A1
	BRA.S	.GT15

.GT12	ADDQ.L	#1,A1
.GT15	MOVE.B	(A1),D0
	BEQ.S	.GT13
	CMP.B	#$A,D0
	BNE.S	.GT12
	MOVE.L	A1,D0
	SUB.L	A0,D0
	MOVE.L	A1,A4
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#99,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)

	ADDQ.L	#1,A4
	MOVE.L	A4,A0
	MOVE.L	A0,A1
	BRA.S	.GT16

.GT14	ADDQ.L	#1,A1
.GT16	MOVE.B	(A1),D0
	BEQ.S	.GT13
	CMP.B	#$A,D0
	BNE.S	.GT14
.GT13	MOVE.L	A1,D0
	SUB.L	A0,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
.GT17	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#121,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	#READYEND-READY,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	LEA.L	READY(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
	RTS

DRAWONEUP
	MOVEQ.L	#0,D0
	MOVEQ.L	#0,D1
	MOVEQ.L	#0,D2
	MOVE.W	POSOFPROP(PC),D2
	MOVE.W	PARAMCOUNT(PC),D1
	SUBQ.W	#5,D1
	TST.W	D2
	BEQ.W	.1
	SUBQ.W	#1,D2
	MOVE.W	D2,POSOFPROP
	LEA.L	PROPINFO1(PC),A0
;	MOVE.W	PI_VPOTRES(A0),D0
	MOVE.L	#$FFFF,D0
	MULU.W	D2,D0
	DIVU.W	D1,D0
	MOVE.W	D0,PI_VERTPOT(A0)

	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T1PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T2PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T3PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T4PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T5PTR

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#0,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A0
	BCLR.B	#3,RP_FLAGS+1(A0)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#26,D0
	MOVE.L	#9,D1
	MOVE.L	#429,D2
	MOVE.L	#60,D3
	MOVE.L	GRABASE(PC),A6
	JSR	_LVORECTFILL(A6)

	LEA.L	PROPGADGET1(PC),A0
	MOVE.L	WINDOW1(PC),A1
	LEA.L	0.W,A2
	MOVE.L	#6,D0
	MOVE.L	INTUIBASE(PC),A6
	JSR	_LVOREFRESHGLIST(A6)

.1	RTS

DRAWONEDOWN
	MOVEQ.L	#0,D0
	MOVEQ.L	#0,D1
	MOVEQ.L	#0,D2
	MOVE.W	POSOFPROP(PC),D2
	MOVE.W	PARAMCOUNT(PC),D1
	SUBQ.W	#5,D1
	CMP.W	D1,D2
	BHS.W	.1
	ADDQ.W	#1,D2
	MOVE.W	D2,POSOFPROP
	LEA.L	PROPINFO1(PC),A0
;	MOVE.W	PI_VPOTRES(A0),D0
	MOVE.L	#$FFFF,D0
	MULU.W	D2,D0
	DIVU.W	D1,D0
	MOVE.W	D0,PI_VERTPOT(A0)

	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T1PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T2PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T3PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T4PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T5PTR

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#0,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A0
	BCLR.B	#3,RP_FLAGS+1(A0)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#26,D0
	MOVE.L	#9,D1
	MOVE.L	#429,D2
	MOVE.L	#60,D3
	MOVE.L	GRABASE(PC),A6
	JSR	_LVORECTFILL(A6)

	LEA.L	PROPGADGET1(PC),A0
	MOVE.L	WINDOW1(PC),A1
	LEA.L	0.W,A2
	MOVE.L	#6,D0
	MOVE.L	INTUIBASE(PC),A6
	JSR	_LVOREFRESHGLIST(A6)

.1	RTS

DRAWPARS
	MOVEQ.L	#$0,D1
	MOVEQ.L	#0,D2
	LEA.L	PROPINFO1(PC),A0
;	MOVE.W	PI_VPOTRES(A0),D1
	MOVE.W	PARAMCOUNT(PC),D2
	SUBQ.W	#5,D2
	MOVE.L	#$FFFF,D1
	DIVU.W	D2,D1

	LEA.L	PROPINFO1(PC),A0
	MOVE.W	PI_VERTPOT(A0),D2
	DIVU.W	D1,D2
	AND.L	#$FFFF,D2
.GT18	MOVE.L	D2,D1
	ADDQ.W	#5,D1
	CMP.W	PARAMCOUNT(PC),D1
	BLS.S	.GT3
	TST.W	D2
	BEQ.S	.GT3
	SUBQ.W	#1,D2
	BRA.S	.GT18

.GT3
	MOVE.W	D2,POSOFPROP
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T1PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T2PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T3PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T4PTR
	ADDQ.L	#1,D2
	MOVE.L	D2,D0
	BSR.W	GETPARPTR
	MOVE.L	D0,T5PTR

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#0,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A0
	BCLR.B	#3,RP_FLAGS+1(A0)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#26,D0
	MOVE.L	#9,D1
	MOVE.L	#429,D2
	MOVE.L	#60,D3
	MOVE.L	GRABASE(PC),A6
	JSR	_LVORECTFILL(A6)

	LEA.L	GADGET1(PC),A0
	MOVE.L	WINDOW1(PC),A1
	LEA.L	0.W,A2
	MOVE.L	#5,D0
	MOVE.L	INTUIBASE(PC),A6
	JSR	_LVOREFRESHGLIST(A6)
	RTS

REMPROT	TST.L	PARAMTABBASE(A5)
	BNE.S	.16

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#0,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A0
	BCLR.B	#3,RP_FLAGS+1(A0)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#26,D0
	MOVE.L	#72,D1
	MOVE.L	#448,D2
	MOVE.L	#82,D3
	MOVE.L	GRABASE(PC),A6
	JSR	_LVORECTFILL(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#1,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#79,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	#NOSELECT2END-NOSELECT2,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	LEA.L	NOSELECT2(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
	RTS

.16	LEA.L	SPECIALSPACE,A0
	MOVE.L	#$C000/4-1,D0
.I1	CLR.L	(A0)+
	DBF	D0,.I1

	MOVE.L	PARAMTABBASE(PC),A0
.1	CMP.L	#PCH_INIT,(A0)+
	BEQ.S	.2
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.3
	BRA.S	.1

.2	MOVE.L	(A0),A0
	MOVEM.L	D2-D7/A2-A6,-(A7)
	JSR	(A0)
	MOVEM.L	(A7)+,D2-D7/A2-A6
	TST.L	D0
	BNE.W	.ERRINPARM

.3	MOVE.L	PARAMTABBASE(PC),A0
.4	CMP.L	#PCH_FILECOUNT,(A0)+
	BEQ.S	.5
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.ERRINSTRUCT
	BRA.S	.4

.5	MOVEQ.L	#-1,D6
	MOVE.L	(A0),D7
.6	ADDQ.L	#1,D6
	CMP.L	D6,D7
	BHI.W	.18
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#0,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#26,D0
	MOVE.L	#114,D1
	MOVE.L	#448,D2
	MOVE.L	#134,D3
	MOVE.L	GRABASE(PC),A6
	JSR	_LVORECTFILL(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#1,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#121,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	#OPERFINIEND-OPERFINI,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	LEA.L	OPERFINI(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

	MOVE.L	PARAMTABBASE(PC),A0
.F1	CMP.L	#PCH_FINISH,(A0)+
	BEQ.S	.F2
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.F3
	BRA.S	.F1

.F2	TST.L	(A0)
	BEQ.S	.F3
	MOVE.L	(A0),A0
	MOVEM.L	D2-D7/A2-A6,-(A7)
	JSR	(A0)
	MOVEM.L	(A7)+,D2-D7/A2-A6

.F3	BRA.W	.E3

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

.ERRINLENGTH

	MOVE.L	#ERRORGAMEEND-ERRORGAME,D7
	MOVE.L	#ERRORGAME,D6
	MOVE.L	#ERRORLENGTHEND-ERRORLENGTH,D5
	MOVE.L	#ERRORLENGTH,D4
	BRA.S	.ERR

.ERRINSTRUCT
	MOVEQ.L	#0,D6
	MOVE.L	#ERRORINSTRUCTEND-ERRORINSTRUCT,D5
	MOVE.L	#ERRORINSTRUCT,D4
	BRA.S	.ERR

.ERRINPARM
	MOVEQ.L	#0,D6
	MOVE.L	#ERRORINPARMEND-ERRORINPARM,D5
	MOVE.L	#ERRORINPARM,D4

.ERR	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#0,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#26,D0
	MOVE.L	#114,D1
	MOVE.L	#448,D2
	MOVE.L	#134,D3
	MOVE.L	GRABASE(PC),A6
	JSR	_LVORECTFILL(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#1,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#121,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	D5,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	D4,A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

	TST.L	D6
	BEQ.S	.E9

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#131,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	D7,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	D6,A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

.E9	MOVE.L	PARAMTABBASE(PC),A0
.E1	CMP.L	#PCH_ERRORINPARAMETER,(A0)+
	BEQ.S	.E2
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.E3
	BRA.S	.E1

.E2	TST.L	(A0)
	BEQ.S	.E3
	MOVE.L	(A0),A0
	MOVEM.L	D2-D7/A2-A6,-(A7)
	JSR	(A0)
	MOVEM.L	(A7)+,D2-D7/A2-A6

.E3	TST.L	FILEMEMADR(A5)
	BEQ.S	.ER
	MOVE.L	FILEMEMADR(PC),A1
	MOVE.L	FILSIZE(PC),D0
	ADDQ.L	#7,D0
	AND.L	#$FFFFFFF8,D0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOFREEMEM(A6)
	CLR.L	FILEMEMADR(A5)
	CLR.L	FILSIZE(A5)
.ER
	TST.L	DEVICESOURCEPTR(A5)
	BEQ.S	.E4
	MOVE.L	DEVICESOURCEPTR(PC),A1
	MOVE.L	4.W,A6
	JSR	_LVOCLOSEDEVICE(A6)
	CLR.L	DEVICESOURCEPTR(A5)

.E4	TST.L	DEVICEDESTPTR(A5)
	BEQ.S	.E5
	MOVE.L	DEVICEDESTPTR(PC),A1
	MOVE.L	4.W,A6
	JSR	_LVOCLOSEDEVICE(A6)
	CLR.L	DEVICEDESTPTR(A5)
	
.E5	RTS

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

.18	CLR.L	FILEMEMADR(A5)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#0,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#26,D0
	MOVE.L	#114,D1
	MOVE.L	#448,D2
	MOVE.L	#134,D3
	MOVE.L	GRABASE(PC),A6
	JSR	_LVORECTFILL(A6)

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#121,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#1,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	PARAMTABBASE(PC),A0
.7	CMP.L	#PCH_STATE,(A0)+
	BEQ.S	.8
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.9
	BRA.S	.7

.8	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.S	.9
	MOVE.L	(A0,D0.L),A0
	MOVE.L	A0,A1
	BRA.S	.10

.11	ADDQ.L	#1,A1
.10	MOVE.B	(A1),D0
	BEQ.S	.12
	CMP.B	#$A,D0
	BNE.S	.11
	MOVE.L	A1,D0
	SUB.L	A0,D0
	MOVE.L	A1,A4
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#131,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	ADDQ.L	#1,A4
	MOVE.L	A4,A0
	MOVE.L	A0,A1
	BRA.S	.14

.13	ADDQ.L	#1,A1
.14	MOVE.B	(A1),D0
	BEQ.S	.12
	CMP.B	#$A,D0
	BNE.S	.13
.12	MOVE.L	A1,D0
	SUB.L	A0,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
	BRA.S	.15

.9	MOVE.L	#INSCOPYEND-INSCOPY,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	LEA.L	INSCOPY(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#131,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	#WAITPROCEND-WAITPROC,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	LEA.L	WAITPROC(PC),A0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
.15	
	MOVE.L	PARAMTABBASE(PC),A0
.21	CMP.L	#PCH_DISKNAME,(A0)+
	BEQ.S	.17
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.19
	BRA.S	.21

.17	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.W	.19
	MOVE.L	(A0,D0.L),A0
	LEA.L	LOCKDISK(PC),A2
	LEA.L	FILNAME(PC),A1
.20	MOVE.B	(A0),(A2)+
	MOVE.B	(A0)+,(A1)+
	BNE.S	.20
	MOVE.B	#':',-1(A1)
	MOVE.B	#':',-1(A2)
	CLR.B	(A1)
	CLR.B	(A2)
	MOVE.L	A1,STRFILNAME(A5)
	LEA.L	LOCKDISK(PC),A1
	MOVE.L	A1,D1
	MOVE.L	#MODE_READWRITE,D2
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOLOCK(A6)
	TST.L	D0
	BEQ.W	.ERRINPARM

	MOVE.L	D0,D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOUNLOCK(A6)
	CLR.L	PARAMLOCK
.19
;MANUELLER DISKCHECK
	MOVE.L	PARAMTABBASE(PC),A0
.35	CMP.L	#PCH_CHECKDISK,(A0)+
	BEQ.S	.36
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.37
	BRA.S	.35

.36	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.S	.37
	MOVE.L	(A0,D0.L),A0
	MOVEM.L	D2-D7/A2-A6,-(A7)
	JSR	(A0)
	MOVEM.L	(A7)+,D2-D7/A2-A6
	TST.L	D0
	BNE.W	.ERRINPARM
.37
	CLR.B	FILENAMEGIVEN(A5)
	MOVE.L	PARAMTABBASE(PC),A0
.22	CMP.L	#PCH_FILENAME,(A0)+
	BEQ.S	.23
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.24
	BRA.S	.22

.23	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.W	.24
	MOVE.L	(A0,D0.L),A0
	MOVE.L	STRFILNAME(PC),A1
.25	MOVE.B	(A0)+,(A1)+
	BNE.S	.25
	ST.B	FILENAMEGIVEN(A5)
.24
	MOVE.L	PARAMTABBASE(PC),A0
.38	CMP.L	#PCH_SPECIAL,(A0)+
	BEQ.S	.39
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.40
	BRA.S	.38

.39	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.W	.40
	MOVE.L	(A0,D0.L),A2

	MOVE.L	PARAMTABBASE(PC),A0
.41	CMP.L	#PCH_DATALENGTH,(A0)+
	BEQ.S	.42
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.ERRINSTRUCT
	BRA.S	.41

.42	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.W	.ERRINSTRUCT
	MOVE.L	(A0,D0.L),D0
	MOVE.L	D0,FILSIZE(A5)
	ADDQ.L	#7,D0
	AND.L	#$FFFFFFF8,D0
	MOVE.L	#MEMF_CLEAR,D1
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOALLOCMEM(A6)
	TST.L	D0
	BEQ.W	.ERRINPARM
	MOVE.L	D0,FILEMEMADR(A5)	

	MOVEM.L	D2-D7/A2-A6,-(A7)
	JSR	(A2)
	MOVEM.L	(A7)+,D2-D7/A2-A6
	TST.L	D0
	BNE.W	.ERRINPARM

	MOVE.L	PARAMTABBASE(PC),A0
.43	CMP.L	#PCH_STATE2,(A0)+
	BEQ.S	.44
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.45
	BRA.S	.43

.44	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.W	.45
	MOVE.L	(A0,D0.L),A0
	MOVE.L	A0,-(A7)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#0,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#26,D0
	MOVE.L	#114,D1
	MOVE.L	#448,D2
	MOVE.L	#134,D3
	MOVE.L	GRABASE(PC),A6
	JSR	_LVORECTFILL(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVEQ.L	#1,D0
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOSETAPEN(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#121,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	(A7)+,A1
	MOVE.L	A1,A0
	BRA.S	.46

.47	ADDQ.L	#1,A1
.46	MOVE.B	(A1),D0
	BEQ.S	.48
	CMP.B	#$A,D0
	BNE.S	.47
	MOVE.L	A1,D0
	SUB.L	A0,D0
	MOVE.L	A1,A4
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#131,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	ADDQ.L	#1,A4
	MOVE.L	A4,A0
	MOVE.L	A0,A1
	BRA.S	.49

.50	ADDQ.L	#1,A1
.49	MOVE.B	(A1),D0
	BEQ.S	.48
	CMP.B	#$A,D0
	BNE.S	.50
.48	MOVE.L	A1,D0
	SUB.L	A0,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

.45
	MOVE.L	PARAMTABBASE(PC),A0
.51	CMP.L	#PCH_PROCESSING,(A0)+
	BEQ.S	.52
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.53
	BRA.S	.51

.52	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.S	.53
	MOVE.L	(A0,D0.L),A0
	MOVEM.L	D2-D7/A2-A6,-(A7)
	JSR	(A0)
	MOVEM.L	(A7)+,D2-D7/A2-A6
	TST.L	D0
	BNE.W	.ERRINPARM
.53	
	MOVE.L	PARAMTABBASE(PC),A0
.54	CMP.L	#PCH_CHANGES,(A0)+
	BEQ.S	.55
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.56
	BRA.S	.54

.55	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.S	.56
	MOVE.L	(A0,D0.L),A1
	BSR.W	MODIFY
	TST.L	D0
	BNE.W	.ERRINPARM

.56	
	MOVE.L	PARAMTABBASE(PC),A0
.D29	CMP.L	#PCH_SAVEPGM,(A0)+
	BEQ.S	.D30
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.D31
	BRA.S	.D29

.D30	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.S	.D31
	MOVE.L	(A0,D0.L),A0
	MOVEM.L	D2-D7/A2-A6,-(A7)
	JSR	(A0)
	MOVEM.L	(A7)+,D2-D7/A2-A6
	TST.L	D0
	BNE.W	.ERRINPARM
.D31
	BRA.W	.33

.40
;CHECK IF BOOTBLOCK IS TO WRITE
	MOVE.L	PARAMTABBASE(PC),A0
.59	CMP.L	#PCH_BOOTBLOCK,(A0)+
	BEQ.S	.60
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.61
	BRA.S	.59

.60	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.W	.61
	MOVE.L	(A0,D0.L),A2

.62
	LEA.L	LOCKDISK(PC),A1
	MOVE.L	A1,D1
	MOVE.L	#MODE_READWRITE,D2
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOLOCK(A6)
	TST.L	D0
	BEQ.W	.ERRINPARM
	MOVE.L	D0,D5
	MOVE.L	D0,D1
	MOVE.L	#INFODAT,D2
	JSR	_LVOINFO(A6)
	TST.L	D0
	BEQ.W	.ERRINPARM
;OPEN DEVICE 
;UNITNUMBER IS IN ID_UNITNUMBER OF INFODAT

	SUB.L	A4,A4
	MOVE.L	DOSBAS(PC),D0
	MOVE.L	DL_ROOT(A4,D0.L),D0
	MOVE.L	RN_INFO(A4,D0.L),D0
	LSL.L	#2,D0
	MOVE.L	DI_DEVINFO(A4,D0.L),D0
	LSL.L	#2,D0
	MOVE.L	D0,D4
	BRA.S	.B1

.B2	MOVE.L	DN_NEXT(A4,D0.L),D0
	BEQ.W	.ERRINPARM
	LSL.L	#2,D0
.B1	MOVE.L	DN_TYPE(A4,D0.L),D1
	CMP.L	#2,D1
	BNE.S	.B2
	MOVE.L	DN_NAME(A4,D0.L),D1
	LSL.L	#2,D1
	ADDQ.L	#1,D1
	MOVE.L	D1,A1
	LEA.L	LOCKDISK(PC),A0
.B3	CMPM.B	(A0)+,(A1)+
	BEQ.S	.B3
	CMP.B	#':',-1(A0)
	BNE.S	.B1
	TST.B	-1(A1)
	BNE.S	.B1
	MOVE.L	DN_TASK(A4,D0.L),D0
	EXG.L	D0,D4
	BRA.S	.B4

.B5	MOVE.L	DN_NEXT(A4,D0.L),D0
	BEQ.W	.ERRINPARM
	LSL.L	#2,D0
.B4	MOVE.L	DN_TYPE(A4,D0.L),D1
	CMP.L	#0,D1
	BNE.S	.B5
	CMP.L	DN_TASK(A4,D0.L),D4
	BNE.S	.B5
	MOVE.L	DN_STARTUP(A4,D0.L),D0
	LSL.L	#2,D0
	MOVE.L	FSSM_DEVICE(A4,D0.L),D1
	LSL.L	#2,D1
	ADDQ.L	#1,D1
	MOVE.L	D1,A0
	MOVE.L	BOOTIORQ(PC),A1
	MOVE.L	FSSM_UNIT(A4,D0.L),D0
	MOVEQ.L	#0,D1
	MOVE.L	4.W,A6
	JSR	_LVOOPENDEVICE(A6)
	TST.L	D0
	BNE.W	.ERRINPARM
	MOVE.L	BOOTIORQ(PC),A1
	MOVE.W	#CMD_WRITE,IO_COMMAND(A1)
	MOVE.L	A2,IO_DATA(A1)
	MOVE.L	#$400,IO_LENGTH(A1)
	MOVE.L	#$0,IO_OFFSET(A1)
	JSR	_LVODOIO(A6)
	MOVE.L	D0,-(A7)
	MOVE.L	BOOTIORQ(PC),A1
	JSR	_LVOCLOSEDEVICE(A6)
	MOVE.L	D5,D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOUNLOCK(A6)
	CLR.L	PARAMLOCK

	MOVE.L	(A7)+,D0
	TST.L	D0
	BNE.W	.ERRINPARM
	BRA.W	.6


.61
	MOVE.L	PARAMTABBASE(PC),A0
.64	CMP.L	#PCH_SAVEDATA,(A0)+
	BEQ.S	.63
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.70
	BRA.S	.64

.63	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.W	.70
	MOVE.L	(A0,D0.L),A2
	
	MOVE.L	PARAMTABBASE(PC),A0
.65	CMP.L	#PCH_DATALENGTH,(A0)+
	BEQ.S	.66
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.W	.ERRINSTRUCT
	BRA.S	.65

.66	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.W	.ERRINSTRUCT
	MOVE.L	(A0,D0.L),A3

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#121,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	PARAMTABBASE(PC),A0
.S43	CMP.L	#PCH_STATE2,(A0)+
	BEQ.S	.S44
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.S45
	BRA.S	.S43

.S44	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.S	.S45
	MOVE.L	(A0,D0.L),A0
	MOVE.L	A0,A1
	BRA.S	.S46

.S47	ADDQ.L	#1,A1
.S46	MOVE.B	(A1),D0
	BEQ.S	.S48
	CMP.B	#$A,D0
	BNE.S	.S47
	MOVE.L	A1,D0
	SUB.L	A0,D0
	MOVE.L	A1,A4
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#131,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	ADDQ.L	#1,A4
	MOVE.L	A4,A0
	MOVE.L	A0,A1
	BRA.S	.S49

.S50	ADDQ.L	#1,A1
.S49	MOVE.B	(A1),D0
	BEQ.S	.S48
	CMP.B	#$A,D0
	BNE.S	.S50
.S48	MOVE.L	A1,D0
	SUB.L	A0,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

.S45
	TST.B	FILENAMEGIVEN
	BEQ.W	.ERRINSTRUCT
	LEA.L	FILNAME(PC),A1
	MOVE.L	A1,D1
	MOVE.L	#MODE_NEWFILE,D2
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOOPEN(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,FILHANDLE
	MOVE.L	FILHANDLE(PC),D1
	MOVE.L	A2,D2

	MOVE.L	A3,D3
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOWRITE(A6)
	TST.L	D0
	BMI.W	ERR
	BEQ.W	ERR
	MOVE.L	FILHANDLE(PC),D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOCLOSE(A6)
	CLR.L	FILHANDLE
	BRA.W	.6

.70
;MANUELLE DISKBEARBEITUNG
	LEA.L	FILNAME(PC),A1
	MOVE.L	A1,D1
	MOVE.L	#MODE_READWRITE,D2
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOLOCK(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,PARAMLOCK
	MOVE.L	PARAMLOCK(PC),D1
	MOVE.L	#PARAMINFO,D2
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOEXAMINE(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	PARAMLOCK(PC),D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOUNLOCK(A6)
	CLR.L	PARAMLOCK
	MOVEQ.L	#0,D5
	MOVEQ.L	#0,D4
	MOVE.L	PARAMTABBASE(PC),A0
.26	CMP.L	#PCH_LOADOFFSET,(A0)+
	BEQ.S	.28
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.27
	BRA.S	.26

.28	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	MOVE.L	(A0,D0.L),D5
.27
	MOVE.L	PARAMTABBASE(PC),A0
.O26	CMP.L	#PCH_APPENDSPACE,(A0)+
	BEQ.S	.O28
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.O27
	BRA.S	.O26

.O28	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	MOVE.L	(A0,D0.L),D4
.O27
	LEA.L	PARAMINFO,A0
	MOVE.L	FIB_SIZE(A0),D3
	ADD.L	D5,D3
	ADD.L	D4,D3

	MOVE.L	PARAMTABBASE(PC),A0
.O6	CMP.L	#PCH_DATALENGTH,(A0)+
	BEQ.S	.O8
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.O7
	BRA.S	.O6

.O8	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.S	.O7
	
	CMP.L	(A0,D0.L),D3
	BNE.W	.ERRINLENGTH
.O7
	MOVE.L	D3,FILSIZE(A5)
	MOVE.L	D3,D0
	ADDQ.L	#7,D0
	AND.L	#$FFFFFFF8,D0
	MOVE.L	#MEMF_CLEAR,D1
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOALLOCMEM(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,FILEMEMADR(A5)	

	LEA.L	FILNAME(PC),A1
	MOVE.L	A1,D1
	MOVE.L	#MODE_OLDFILE,D2
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOOPEN(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,FILHANDLE
	MOVE.L	FILHANDLE(PC),D1
	MOVE.L	FILEMEMADR(PC),D2
	ADD.L	D5,D2
	LEA.L	PARAMINFO,A0
	MOVE.L	FIB_SIZE(A0),D3
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOREAD(A6)
	TST.L	D0
	BMI.W	ERR
	BEQ.W	ERR
	MOVE.L	FILHANDLE(PC),D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOCLOSE(A6)
	CLR.L	FILHANDLE

	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#121,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	MOVE.L	PARAMTABBASE(PC),A0
.O43	CMP.L	#PCH_STATE2,(A0)+
	BEQ.S	.O44
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.O45
	BRA.S	.O43

.O44	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.S	.O45
	MOVE.L	(A0,D0.L),A0
	MOVE.L	A0,A1
	BRA.S	.O46

.O47	ADDQ.L	#1,A1
.O46	MOVE.B	(A1),D0
	BEQ.S	.O48
	CMP.B	#$A,D0
	BNE.S	.O47
	MOVE.L	A1,D0
	SUB.L	A0,D0
	MOVE.L	A1,A4
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	#28,D0
	MOVE.L	#131,D1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOMOVE(A6)
	ADDQ.L	#1,A4
	MOVE.L	A4,A0
	MOVE.L	A0,A1
	BRA.S	.O49

.O50	ADDQ.L	#1,A1
.O49	MOVE.B	(A1),D0
	BEQ.S	.O48
	CMP.B	#$A,D0
	BNE.S	.O50
.O48	MOVE.L	A1,D0
	SUB.L	A0,D0
	MOVE.L	WIN1RASTPORT(PC),A1
	MOVE.L	GRABASE(PC),A6
	JSR	_LVOTEXT(A6)

.O45
	MOVE.L	PARAMTABBASE(PC),A0
.29	CMP.L	#PCH_PROCESSING,(A0)+
	BEQ.S	.30
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.31
	BRA.S	.29

.30	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.S	.31
	MOVE.L	(A0,D0.L),A0
	MOVEM.L	D2-D7/A2-A6,-(A7)
	JSR	(A0)
	MOVEM.L	(A7)+,D2-D7/A2-A6
	TST.L	D0
	BNE.W	.ERRINPARM

.31
	MOVE.L	PARAMTABBASE(PC),A0
.32	CMP.L	#PCH_CHANGES,(A0)+
	BEQ.S	.34
	ADDQ.L	#4,A0
	TST.L	(A0)
	BEQ.S	.33
	BRA.S	.32

.34	MOVE.L	(A0),A0
	MOVE.L	D6,D0
	LSL.L	#2,D0
	TST.L	(A0,D0.L)
	BEQ.S	.33
	MOVE.L	(A0,D0.L),A1
	BSR.W	MODIFY
	TST.L	D0
	BNE.W	.ERRINPARM
.33
	TST.B	FILENAMEGIVEN
	BEQ.S	.58
	LEA.L	FILNAME(PC),A1
	MOVE.L	A1,D1
	MOVE.L	#MODE_NEWFILE,D2
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOOPEN(A6)
	TST.L	D0
	BEQ.W	ERR
	MOVE.L	D0,FILHANDLE
	MOVE.L	FILHANDLE(PC),D1
	MOVE.L	FILEMEMADR(PC),D2

	MOVE.L	FILSIZE(PC),D3
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOWRITE(A6)
	TST.L	D0
	BMI.W	ERR
	BEQ.W	ERR
	MOVE.L	FILHANDLE(PC),D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVOCLOSE(A6)
	CLR.L	FILHANDLE

.58	MOVE.L	FILEMEMADR(PC),A1
	MOVE.L	FILSIZE(PC),D0
	ADDQ.L	#7,D0
	AND.L	#$FFFFFFF8,D0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOFREEMEM(A6)
	CLR.L	FILEMEMADR(A5)
	CLR.L	FILSIZE(A5)

	BRA.W	.6

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

FORMATDEST
	TST.L	D0
	BEQ.S	.Y
.ERR2	MOVEQ.L	#-1,D0
	RTS

.Y	MOVEM.L	D2-D7/A2-A6,-(A7)
	LEA.L	DOSBAS(PC),A5
	LEA.L	ROOTBL+108*4+1(PC),A1
	MOVEQ.L	#-1,D1
.2	CMP.B	#30,D1
	BEQ.S	.1
	ADDQ.B	#1,D1
	MOVE.B	(A0)+,(A1)+
	BNE.S	.2
.1	MOVE.B	D1,ROOTBL+108*4
	CLR.L	ROOTBL+$5*4
	LEA.L	ROOTBL(PC),A1
	MOVEQ.L	#0,D1
	MOVEQ.L	#$200/4-1,D0
.3	ADD.L	(A1)+,D1
	DBF	D0,.3
	NEG.L	D1
	MOVE.L	D1,ROOTBL+5*4

	MOVE.L	#DESTDEVICE,D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVODEVICEPROC(A6)
	TST.L	D0
	BEQ.S	.ERR2
	MOVE.L	D0,A3
	MOVE.L	DOSPACKETS(PC),A1
	LEA.L	$14(A1),A0
	MOVE.L	A0,LN_NAME(A1)
	MOVE.L	A1,$14+DP_LINK(A1)
	MOVE.L	MYPORT(PC),$14+DP_PORT(A1)
	MOVE.L	#$1F,$14+DP_TYPE(A1)
	MOVE.L	#-1,$14+DP_ARG1(A1)
	MOVE.L	A3,A0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOPUTMSG(A6)
	MOVE.L	MYPORT(PC),A0
	JSR	_LVOWAITPORT(A6)
	MOVE.L	MYPORT(PC),A0
	JSR	_LVOGETMSG(A6)


;MESSAGE+DOSPACKET-STRUKTUR EINRICHTEN

	LEA.L	FORMATQUEST(PC),A0
	LEA.L	FORMATQUEST2(PC),A1
	BSR.W	ASKREQUEST
	TST.L	D0
	BEQ.S	.4
.ERR	MOVE.L	DOSPACKETS(PC),A1
	LEA.L	$14(A1),A0
	MOVE.L	A0,LN_NAME(A1)
	MOVE.L	A1,$14+DP_LINK(A1)
	MOVE.L	MYPORT(PC),$14+DP_PORT(A1)
	MOVE.L	#$1F,$14+DP_TYPE(A1)
	MOVE.L	#0,$14+DP_ARG1(A1)
	MOVE.L	A3,A0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOPUTMSG(A6)
	MOVE.L	MYPORT(PC),A0
	JSR	_LVOWAITPORT(A6)
	MOVE.L	MYPORT(PC),A0
	JSR	_LVOGETMSG(A6)

	MOVEM.L	(A7)+,D2-D7/A2-A6
	MOVEQ.L	#-1,D0
	RTS

.4	
	MOVEQ.L	#0,D7
	MOVE.L	DOSBAS+PTB_DEVICEDESTPTR(A5),A1
	MOVE.W	#TD_CHANGESTATE,IO_COMMAND(A1)
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVODOIO(A6)
	TST.L	IO_ACTUAL(A1)
	BNE.S	.ERR

	MOVE.W	#$1600/4-1,D0
	MOVE.L	DOSBAS+PTB_SPACE(A5),A0
.7	CLR.L	(A0)+
;.7	MOVE.L	#$AA,(A0)+
	DBF	D0,.7
;	MOVE.L	DOSBAS+PTB_SPACE(A5),A0
;	MOVE.L	A0,(A0)

	MOVE.L	#$0,D2

.8	MOVEQ.L	#$4,D6
.55	MOVE.L	DOSBAS+PTB_DEVICEDESTPTR(A5),A1
	MOVE.L	DOSBAS+PTB_SPACE(A5),IO_DATA(A1)
	MOVE.L	#$1600,IO_LENGTH(A1)
	MOVE.L	D2,IO_OFFSET(A1)
	MOVE.W	#TD_FORMAT,IO_COMMAND(A1)
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVODOIO(A6)
	TST.L	D0
	BEQ.S	.R1OK
	DBF	D6,.55
	BRA.W	.ERR

.R1OK	ADD.L	#$1600,D2
	CMP.L	#$A0*$1600,D2
	BNE.S	.8

	MOVEQ.L	#$4,D6
.REP	MOVE.L	DOSBAS+PTB_DEVICEDESTPTR(A5),A1
	MOVE.L	#ROOTBL,IO_DATA(A1)
	MOVE.L	#$400,IO_LENGTH(A1)
	MOVE.L	#$370*$200,IO_OFFSET(A1)
	MOVE.W	#CMD_WRITE,IO_COMMAND(A1)
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVODOIO(A6)
	TST.L	D0
	BEQ.S	.R2OK
	DBF	D6,.REP
	BRA.W	.ERR

.R2OK
	MOVEQ.L	#BOOTEND-BOOTBL-1,D0
	LEA.L	BOOTBL(PC),A0
	MOVE.L	DOSBAS+PTB_SPACE(A5),A1
.9	MOVE.B	(A0)+,(A1)+
	DBF	D0,.9
	MOVEQ.L	#$4,D6
.REP2	MOVE.L	DOSBAS+PTB_DEVICEDESTPTR(A5),A1
	MOVE.L	DOSBAS+PTB_SPACE(A5),IO_DATA(A1)
	MOVE.L	#$400,IO_LENGTH(A1)
	MOVE.L	#$0*$200,IO_OFFSET(A1)
	MOVE.W	#CMD_WRITE,IO_COMMAND(A1)
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVODOIO(A6)
	TST.L	D0
	BEQ.S	.R3OK
	DBF	D6,.REP2
	BRA.W	.ERR

.R3OK
	MOVE.L	DOSBAS+PTB_DEVICEDESTPTR(A5),A1
	MOVE.W	#CMD_UPDATE,IO_COMMAND(A1)
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVODOIO(A6)
	TST.L	D0
	BEQ.S	.R4OK
	BRA.W	.ERR

.R4OK	MOVE.L	DOSBAS+PTB_DEVICESOURCEPTR(A5),A1
	MOVE.L	#0,IO_LENGTH(A1)
	MOVE.W	#TD_MOTOR,IO_COMMAND(A1)
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVODOIO(A6)

	MOVE.L	DOSPACKETS(PC),A1
	LEA.L	$14(A1),A0
	MOVE.L	A0,LN_NAME(A1)
	MOVE.L	A1,$14+DP_LINK(A1)
	MOVE.L	MYPORT(PC),$14+DP_PORT(A1)
	MOVE.L	#$1F,$14+DP_TYPE(A1)
	MOVE.L	#0,$14+DP_ARG1(A1)
	MOVE.L	A3,A0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOPUTMSG(A6)
	MOVE.L	MYPORT(PC),A0
	JSR	_LVOWAITPORT(A6)
	MOVE.L	MYPORT(PC),A0
	JSR	_LVOGETMSG(A6)

	MOVEM.L	(A7)+,D2-D7/A2-A6
	MOVEQ.L	#0,D0
	RTS


;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ASKREQUEST
	MOVE.L	A0,ASKING
	MOVE.L	A1,ASKING2
	MOVEM.L	D2/D3/A2/A3,-(A7)
	SUBA.L	A0,A0
	LEA.L	BODYTEXT(PC),A1
	LEA.L	LEFTTEXT(PC),A2
	LEA.L	RIGHTTEXT(PC),A3
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVE.W	#300,D2
	MOVEQ	#60,D3
	MOVE.L	INTUIBASE(PC),A6
	JSR	_LVOAUTOREQUEST(A6)
	MOVEM.L	(A7)+,D2/D3/A2/A3
	TST.L	D0
	BEQ.S	.1
;.OK
	MOVEQ.L	#0,D0
	RTS

;.CANCEL
.1	MOVEQ.L	#-1,D0
	RTS

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

INHIBITDRIVE
	MOVEM.L	D1-A6,-(A7)
	CMP.L	#0,D0
	BNE.S	.1
	LEA.L	SRCDEVICE(PC),A2
	BRA.S	.3

.1	CMP.L	#1,D0
	BNE.S	.2
	LEA.L	DESTDEVICE(PC),A2
	BRA.S	.3

.ERR
.2	ST.B	D0
	MOVEM.L	(A7)+,D1-A6
	RTS

.3	MOVE.L	A2,D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVODEVICEPROC(A6)
	TST.L	D0
	BEQ.S	.ERR
	MOVE.L	D0,A3
	MOVE.L	DOSPACKETS(PC),A1
	LEA.L	$14(A1),A0
	MOVE.L	A0,LN_NAME(A1)
	MOVE.L	A1,$14+DP_LINK(A1)
	MOVE.L	MYPORT(PC),$14+DP_PORT(A1)
	MOVE.L	#$1F,$14+DP_TYPE(A1)
	MOVE.L	#-1,$14+DP_ARG1(A1)
	MOVE.L	A3,A0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOPUTMSG(A6)
	MOVE.L	MYPORT(PC),A0
	JSR	_LVOWAITPORT(A6)
	MOVE.L	MYPORT(PC),A0
	JSR	_LVOGETMSG(A6)
	MOVEQ.L	#0,D0
	MOVEM.L	(A7)+,D1-A6
	RTS

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ENABLEDRIVE
	MOVEM.L	D1-A6,-(A7)
	CMP.L	#0,D0
	BNE.S	.1
	LEA.L	SRCDEVICE(PC),A2
	BRA.S	.3

.1	CMP.L	#1,D0
	BNE.S	.2
	LEA.L	DESTDEVICE(PC),A2
	BRA.S	.3

.ERR
.2	ST.B	D0
	MOVEM.L	(A7)+,D1-A6
	RTS

.3	MOVE.L	A2,D1
	MOVE.L	DOSBAS(PC),A6
	JSR	_LVODEVICEPROC(A6)
	TST.L	D0
	BEQ.S	.ERR
	MOVE.L	D0,A3
	MOVE.L	DOSPACKETS(PC),A1
	LEA.L	$14(A1),A0
	MOVE.L	A0,LN_NAME(A1)
	MOVE.L	A1,$14+DP_LINK(A1)
	MOVE.L	MYPORT(PC),$14+DP_PORT(A1)
	MOVE.L	#$1F,$14+DP_TYPE(A1)
	MOVE.L	#0,$14+DP_ARG1(A1)
	MOVE.L	A3,A0
	MOVE.L	(_SYSBASE).W,A6
	JSR	_LVOPUTMSG(A6)
	MOVE.L	MYPORT(PC),A0
	JSR	_LVOWAITPORT(A6)
	MOVE.L	MYPORT(PC),A0
	JSR	_LVOGETMSG(A6)
	MOVEQ.L	#0,D0
	MOVEM.L	(A7)+,D1-A6
	RTS

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

schlafen
	move.l	WINDOW1(PC),a0		;Windowstruktur nach a0
	move.l	$56(a0),a0		;UserPort holen
	move.l	a0,a3			;retten
.3	move.l	a3,a0			;userPort holen
	move.l	(_SYSBASE).W,a6		;execBase nach a6
	jsr	_LVOGETMSG(a6)		;Nachricht holen
	move.l	d0,a1			;und sichern
	TST.L	D0
	BNE.S	.4

	MOVE.L	A3,A0
	move.b	$0f(a0),d1		;Signalmaske holen
	moveq	#0,d0			;d0 löschen
	bset	d1,d0			;benötigte Signale setzen
	move.l	(_SYSBASE).W,A6		;auf Nachricht
	jsr	_LVOWAIT(a6)		;warten
	BRA.S	.3

.4	move.l	$14(a1),d4		;diverse
	move.W	$12(a1),d5		;Parameter
	LEA.L	$14(A1),A0
	LEA.L	MSGBUFFER+2(PC),A2
	MOVE.W	D5,MSGBUFFER
	CMP.W	#$20,D5
	BLO.S	.2
	MOVE.L	#$20,D5
.2	SUBQ.W	#1,D5
.1	MOVE.B	(A0)+,(A2)+
	DBF	D5,.1
	move.l	$1c(a1),a4		;sichern
	move.l	(_SYSBASE).W,A6		;execBase nach a6
	jsr	_LVOREPLYMSG(A6)	;Nachricht beantworten
	rts

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

GETPARPTR	LEA.L	MEMORYBASE(PC),A3
	BRA.S	.3

.1	MOVE.L	(A3),A3
	CMP.L	#0,A3
	BEQ.S	.5
.3	DBF	D0,.1
	MOVE.L	4(A3),A2
.2	CMP.L	#PCH_NAME,(A2)+
	BEQ.S	.4
	ADDQ.L	#4,A2
	BRA.S	.2

.4	MOVE.L	(A2),D0
	RTS

.5	MOVE.L	#TEXT1,D0
	RTS

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

;PROGRAM FOR MODIFYING
;DATAFORMAT OF COMPTAB SEE MAKECOMP
;IT USES THE REGISTERS A0,A1,A3 AND D0,D1
;/ A3 FILEBUFFER
;< A1 ^COMPTAB
;> D0 ERROR, IF SET

MODIFY	MOVE.L	FILEMEMADR(PC),A3

.3	MOVE.L	(A1)+,D0
	MOVE.L	D0,D1
	AND.L	#$1FFFFF,D1
	LEA.L	(A3,D1.L),A0
	AND.L	#$E00000,D0	;CAN DETECT ANY COMBINATION OF BITS $15 - $17
	CMP.L	#$400000,D0
	BEQ.S	.1
	CMP.L	#$800000,D0
	BEQ.S	.2
	CMP.L	#$0,D0
	BNE.S	.ERRMODIFY	;ILLEGAL SPECIAL VALUE - HERE NOT SUPPORTED
	MOVE.B	(A1),(A0)
	BRA.S	.3

.2	MOVEQ.L	#0,D1
	MOVE.B	(A1)+,D1
	SUBQ.L	#1,D1
.4	MOVE.B	(A1)+,(A0)+
	DBF	D1,.4
	MOVE.L	A1,D1
	AND.L	#$FFFFFFFE,D1
	MOVE.L	D1,A1
	BRA.S	.3

.1	CLR.L	D0
	RTS

.ERRMODIFY	MOVEQ.L	#-$1,D0
	RTS

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

EXAMCL
.1	CMP.B	#$20,(A0)
	BNE.S	.2
	ADDQ.L	#1,A0
	BRA.S	.1

.2	CMP.B	#$9,(A0)
	BNE.S	.3
	ADDQ.L	#1,A0
	BRA.S	.1

.3	CMP.B	#$A,(A0)
	BNE.S	.4
	RTS

.4	CMP.B	#$0,(A0)
	BNE.S	.5
.6	RTS

.5	CMP.B	#'-',(A0)
	BNE.S	.6
	ADDQ.L	#1,A0
	CMP.B	#'s',(A0)
	BNE.S	.7
	ADDQ.L	#1,A0
	LEA.L	SRCDEVICE(PC),A1
.10	MOVE.B	(A0)+,(A1)+
	CMP.B	#$20,(A0)
	BEQ.S	.1
	CMP.B	#$9,(A0)
	BEQ.S	.1
	CMP.B	#$A,(A0)
	BEQ.S	.9
	CMP.B	#$0,(A0)
	BNE.S	.10
.9	RTS

.7	CMP.B	#'d',(A0)
	BNE.S	.P1
	ADDQ.L	#1,A0
	LEA.L	DESTDEVICE(PC),A1
	BRA.S	.10

.p1	CMP.B	#'p',(A0)
	BNE.S	.6
	ADDQ.L	#1,A0
	ST	EXEC1PARAM
	LEA.L	PARAMFILENAM(PC),A1
	BRA.S	.10

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

	ENDB	A5
OPENDEV	MOVEM.L	D1-A6,-(A7)
	CMP.L	#0,D0
	BNE.S	.1
	LEA.L	SRCDEVICE(PC),A2
	MOVE.L	SOURCEIORQ(PC),A3
	LEA.L	DEVICESOURCEPTR(PC),A5
	BRA.S	.3

.1	CMP.L	#1,D0
	BNE.S	.2
	LEA.L	DESTDEVICE(PC),A2
	MOVE.L	DESTIORQ(PC),A3
	LEA.L	DEVICEDESTPTR(PC),A5
	BRA.S	.3

.ERR
.2	ST.B	D0
	MOVEM.L	(A7)+,D1-A6
	RTS

.3	SUB.L	A4,A4				;A4 IS ZERO!
	MOVE.L	DOSBAS(PC),D0
	MOVE.L	DL_ROOT(A4,D0.L),D0
	MOVE.L	RN_INFO(A4,D0.L),D0
	LSL.L	#2,D0
	MOVE.L	DI_DEVINFO(A4,D0.L),D0
	LSL.L	#2,D0
	MOVE.L	D0,D4
	BRA.S	.6

.5	MOVE.L	DN_NEXT(A4,D0.L),D0
	BEQ.S	.ERR
	LSL.L	#2,D0
.6	MOVE.L	DN_TYPE(A4,D0.L),D1
	CMP.L	#0,D1
	BNE.S	.5
	MOVE.L	DN_NAME(A4,D0.L),D1
	LSL.L	#2,D1
	ADDQ.L	#1,D1
	MOVE.L	D1,A1
	MOVE.L	A2,A0
.7	MOVE.B	(A0)+,D2
	MOVE.B	(A1)+,D3
	CMP.B	#$61,D2
	BLO.S	.S1
	CMP.B	#$7A,D2
	BHI.S	.S1
	AND.B	#%11011111,D2
.S1	CMP.B	#$61,D3
	BLO.S	.S2
	CMP.B	#$7A,D3
	BHI.S	.S2
	AND.B	#%11011111,D3
.S2	CMP.B	D2,D3
	BEQ.S	.7
	CMP.B	#':',-1(A0)
	BNE.S	.5
	TST.B	-1(A1)
	BNE.S	.5
	MOVE.L	DN_STARTUP(A4,D0.L),D0
	LSL.L	#2,D0
	MOVE.L	D0,(FSSMSOURCEPTR-DEVICESOURCEPTR)(A5)
	MOVE.L	FSSM_DEVICE(A4,D0.L),D1
	LSL.L	#2,D1
	ADDQ.L	#1,D1
	MOVE.L	D1,A0
	MOVE.L	FSSM_UNIT(A4,D0.L),D0
	MOVE.L	A3,A1
	MOVEQ.L	#0,D1
	MOVE.L	4.W,A6
	JSR	_LVOOPENDEVICE(A6)
	TST.L	D0
	BNE.S	.4
	MOVE.L	A3,(A5)
.4	MOVEM.L	(A7)+,D1-A6
	RTS

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

CRCEVAL		movem.l	d2/d5/d7/A1,-(a7)
		move.l	d0,d7
		moveq	#0,d0
		lea	.CRC16table(pc),a1	;CRC16 table for speed up
		move.w	#$ff,d1
		moveq	#0,d2
.loop		move.b	(a0)+,d2		;take a byte
		eor.w	d2,d0
		move.w	d0,d5
		and.w	d1,d0
		add.w	d0,d0
		move.w	(a1,d0.w),d0
		lsr.w	#8,d5
		eor.w	d5,d0
		subq.l	#1,d7
		bne	.loop
		movem.l	(a7)+,d2/d5/d7/A1
		rts

.CRC16table:
	dc.w  $0000,$c0c1,$c181,$0140,$c301,$03c0,$0280,$c241
	dc.w  $c601,$06c0,$0780,$c741,$0500,$c5c1,$c481,$0440
	dc.w  $cc01,$0cc0,$0d80,$cd41,$0f00,$cfc1,$ce81,$0e40
	dc.w  $0a00,$cac1,$cb81,$0b40,$c901,$09c0,$0880,$c841
	dc.w  $d801,$18c0,$1980,$d941,$1b00,$dbc1,$da81,$1a40
	dc.w  $1e00,$dec1,$df81,$1f40,$dd01,$1dc0,$1c80,$dc41
	dc.w  $1400,$d4c1,$d581,$1540,$d701,$17c0,$1680,$d641
	dc.w  $d201,$12c0,$1380,$d341,$1100,$d1c1,$d081,$1040
	dc.w  $f001,$30c0,$3180,$f141,$3300,$f3c1,$f281,$3240
	dc.w  $3600,$f6c1,$f781,$3740,$f501,$35c0,$3480,$f441
	dc.w  $3c00,$fcc1,$fd81,$3d40,$ff01,$3fc0,$3e80,$fe41
	dc.w  $fa01,$3ac0,$3b80,$fb41,$3900,$f9c1,$f881,$3840
	dc.w  $2800,$e8c1,$e981,$2940,$eb01,$2bc0,$2a80,$ea41
	dc.w  $ee01,$2ec0,$2f80,$ef41,$2d00,$edc1,$ec81,$2c40
	dc.w  $e401,$24c0,$2580,$e541,$2700,$e7c1,$e681,$2640
	dc.w  $2200,$e2c1,$e381,$2340,$e101,$21c0,$2080,$e041
	dc.w  $a001,$60c0,$6180,$a141,$6300,$a3c1,$a281,$6240
	dc.w  $6600,$a6c1,$a781,$6740,$a501,$65c0,$6480,$a441
	dc.w  $6c00,$acc1,$ad81,$6d40,$af01,$6fc0,$6e80,$ae41
	dc.w  $aa01,$6ac0,$6b80,$ab41,$6900,$a9c1,$a881,$6840
	dc.w  $7800,$b8c1,$b981,$7940,$bb01,$7bc0,$7a80,$ba41
	dc.w  $be01,$7ec0,$7f80,$bf41,$7d00,$bdc1,$bc81,$7c40
	dc.w  $b401,$74c0,$7580,$b541,$7700,$b7c1,$b681,$7640
	dc.w  $7200,$b2c1,$b381,$7340,$b101,$71c0,$7080,$b041
	dc.w  $5000,$90c1,$9181,$5140,$9301,$53c0,$5280,$9241
	dc.w  $9601,$56c0,$5780,$9741,$5500,$95c1,$9481,$5440
	dc.w  $9c01,$5cc0,$5d80,$9d41,$5f00,$9fc1,$9e81,$5e40
	dc.w  $5a00,$9ac1,$9b81,$5b40,$9901,$59c0,$5880,$9841
	dc.w  $8801,$48c0,$4980,$8941,$4b00,$8bc1,$8a81,$4a40
	dc.w  $4e00,$8ec1,$8f81,$4f40,$8d01,$4dc0,$4c80,$8c41
	dc.w  $4400,$84c1,$8581,$4540,$8701,$47c0,$4680,$8641
	dc.w  $8201,$42c0,$4380,$8341,$4100,$81c1,$8081,$4040

*******************************************************************************

OPERFINI	DC.B	'Operation finished.'
OPERFINIEND	DC.B	0
	EVEN

INSCOPY	DC.B	'Please insert a copy of your disk'
INSCOPYEND	DC.B	0
	EVEN

WAITPROC	DC.B	'and wait for processing.'
WAITPROCEND	DC.B	0
	EVEN

READY	DC.B	'Ready to start.'
READYEND	DC.B	0
	EVEN

WRITTEN	DC.B	'Written by Egon and Harry.'
WRITTENEND	DC.B	0
	EVEN

NOSELECT	DC.B	'No parameter selected.'
NOSELECTEND	DC.B	0
	EVEN

NOSELECT2	DC.B	'!!! NO PARAMETER SELECTED, GUY !!!'
NOSELECT2END	DC.B	0
	EVEN

ERRORINPARM	DC.B	'Error in parameter execution.'
ERRORINPARMEND	DC.B	0
	EVEN

ERRORINSTRUCT	DC.B	'Error in parameter structure.'
ERRORINSTRUCTEND	DC.B	0
	EVEN

ERRORLENGTH	DC.B	'Wrong file length.'
ERRORLENGTHEND	DC.B	0
	EVEN

ERRORGAME	DC.B	'Possibly another game version.'
ERRORGAMEEND	DC.B	0
	EVEN

WELCOME	DC.B	'Welcome to THE PATCHER!'
WELCOMEEND	DC.B	0
	EVEN

FORMATQUEST	DC.B	'Shall I format that disk in the',0
FORMATQUEST2	DC.B	'destination drive?',0

FILENAM	DC.B	'PARAMETER/'
BUFFILNAM	DS.B	$68
	EVEN

LOCKNAM	DC.B	'PARAMETER',0
	EVEN

MSGBUFFER	DS.B	$22

FILNAME	DS.B	$100
LOCKDISK	DS.B	$100

RUBY_FNT	DC.L	RUBYNAME		;FONTNAME
	DC.W	8				;HÖHE
	DC.B	$0				;STYLE
	DC.B	$2+8				;FLAGS

	DC.W	0

RUBYNAME	DC.B	'ruby.font',0
	EVEN
Window1Daten	dc.w	0			;leftEdge
		dc.w	0			;topEdge
		dc.w	480			;width
		dc.w	180			;height
		dc.b	0			;detailPen
		dc.b	1			;blockPen
		dc.l	ICDMPFL			;idcmpFlags
		dc.l	Flaggen			;flags
		dc.l	PTCHGADGET		;firstGadget
		dc.l	0			;checkMark
		dc.l	WINDOWTITEL		;title
		dc.l	0
		dc.l	0			;bitMap
		dc.w	500			;minWidth
		dc.w	180+2			;minHeight
		dc.w	500			;maxWidth
		dc.w	180+2			;maxHeight
		dc.w	WBENCHSCREEN		;type

WindowTitel:	dc.b	"THE PATCHER V1.04",0
		EVEN

PTCHGADGET	DC.L	ARROWUP		;NEXTGADGET
		DC.W	25		;LEFTEDGE
		DC.W	150-6+2		;TOPEDGE
		DC.W	65		;WIDTH
		DC.W	13		;HEIGHT
		DC.W	GADGHIMAGE!GADGIMAGE	;TYPE
		DC.W	RELVERIFY	;!BOOLEXTEND	;ACTIVATION
		DC.W	BOOLGADGET	;GADGETTYPE
		DC.L	PTCHMASKI	;GADGETRENDER
		DC.L	PTCHMASKA	;SELECTRENDER
		DC.L	0		;GADGETTEXT
		DC.L	0		;MUTUALEXCLUDE
		DC.L	0		;SPECIALINFO
		DC.W	0		;NUMMER DES GADGETS
		DC.L	0		;USERDATA

PTCHMASKI	DC.W	0		;LEFTEDGE RELATIV
		DC.W	0		;TOPEDGE RELATIV
		DC.W	65		;WIDTH
		DC.W	13		;HEIGTH
		DC.W	2		;DEPTH
		DC.L	PTCHIIM		;IMAGEDATA
		DC.B	%11		;PLANEPICK
		DC.B	0		;PLANEONOFF
		DC.L	0		;NEXTIMAGE

PTCHMASKA	DC.W	0		;LEFTEDGE RELATIV
		DC.W	0		;TOPEDGE RELATIV
		DC.W	65		;WIDTH
		DC.W	13		;HEIGTH
		DC.W	2		;DEPTH
		DC.L	PTCHAIM		;IMAGEDATA
		DC.B	%11		;PLANEPICK
		DC.B	0		;PLANEONOFF
		DC.L	0		;NEXTIMAGE

ARROWUP		DC.L	ARROWDOWN	;NEXTGADGET
		DC.W	405+26		;LEFTEDGE
		DC.W	8		;TOPEDGE
		DC.W	19		;WIDTH
		DC.W	11		;HEIGHT
AUFLAGS		DC.W	GADGHIMAGE!GADGIMAGE!GADGDISABLED	;TYPE
		DC.W	RELVERIFY	;!BOOLEXTEND	;ACTIVATION
		DC.W	BOOLGADGET	;GADGETTYPE
		DC.L	ARROWUPMASKI	;GADGETRENDER
		DC.L	ARROWUPMASKA	;SELECTRENDER
		DC.L	0		;GADGETTEXT
		DC.L	0		;MUTUALEXCLUDE
		DC.L	0		;SPECIALINFO
		DC.W	0		;NUMMER DES GADGETS
		DC.L	0		;USERDATA

ARROWUPMASKI	DC.W	0		;LEFTEDGE RELATIV
		DC.W	0		;TOPEDGE RELATIV
		DC.W	19		;WIDTH
		DC.W	11		;HEIGTH
		DC.W	2		;DEPTH
		DC.L	AUPIIM		;IMAGEDATA
		DC.B	%11		;PLANEPICK
		DC.B	0		;PLANEONOFF
		DC.L	0		;NEXTIMAGE

ARROWUPMASKA	DC.W	0		;LEFTEDGE RELATIV
		DC.W	0		;TOPEDGE RELATIV
		DC.W	19		;WIDTH
		DC.W	11		;HEIGTH
		DC.W	2		;DEPTH
		DC.L	AUPAIM		;IMAGEDATA
		DC.B	%11		;PLANEPICK
		DC.B	0		;PLANEONOFF
		DC.L	0		;NEXTIMAGE

ARROWDOWN	DC.L	PROPGADGET1	;NEXTGADGET
		DC.W	405+26		;LEFTEDGE
		DC.W	51		;TOPEDGE
		DC.W	19		;WIDTH
		DC.W	11		;HEIGHT
ADFLAGS		DC.W	GADGHIMAGE!GADGIMAGE!GADGDISABLED	;TYPE
		DC.W	RELVERIFY	;!BOOLEXTEND	;ACTIVATION
		DC.W	BOOLGADGET	;GADGETTYPE
		DC.L	ARROWDOWNMASKI	;GADGETRENDER
		DC.L	ARROWDOWNMASKA	;SELECTRENDER
		DC.L	0		;GADGETTEXT
		DC.L	0		;MUTUALEXCLUDE
		DC.L	0		;SPECIALINFO
		DC.W	0		;NUMMER DES GADGETS
		DC.L	0		;USERDATA

ARROWDOWNMASKI	DC.W	0		;LEFTEDGE RELATIV
		DC.W	0		;TOPEDGE RELATIV
		DC.W	19		;WIDTH
		DC.W	11		;HEIGTH
		DC.W	2		;DEPTH
		DC.L	ADOWNIIM	;IMAGEDATA
		DC.B	%11		;PLANEPICK
		DC.B	0		;PLANEONOFF
		DC.L	0		;NEXTIMAGE

ARROWDOWNMASKA	DC.W	0		;LEFTEDGE RELATIV
		DC.W	0		;TOPEDGE RELATIV
		DC.W	19		;WIDTH
		DC.W	11		;HEIGTH
		DC.W	2		;DEPTH
		DC.L	ADOWNAIM	;IMAGEDATA
		DC.B	%11		;PLANEPICK
		DC.B	0		;PLANEONOFF
		DC.L	0		;NEXTIMAGE

PROPGADGET1	DC.L	GADGET1		;NEXTGADGET
		DC.W	405+26		;LEFTEDGE
		DC.W	19		;TOPEDGE
		DC.W	19		;WIDTH
		DC.W	61-29		;HEIGHT
P1FLAGS		DC.W	GADGHCOMP!GADGIMAGE!GADGDISABLED	;TYPE
		DC.W	RELVERIFY	;!BOOLEXTEND	;ACTIVATION
		DC.W	PROPGADGET	;GADGETTYPE
		DC.L	PROP1SEL	;GADGETRENDER
		DC.L	0	;SELECTRENDER
		DC.L	0		;GADGETTEXT
		DC.L	0		;MUTUALEXCLUDE
		DC.L	PROPINFO1	;SPECIALINFO
		DC.W	0		;NUMMER DES GADGETS
		DC.L	0		;USERDATA

PROP1SEL	DC.W	0
	DC.W	0
	DC.W	11	;WIDTH
	DC.W	10	;HEIGHT
	DC.W	0
	DC.L	0
	DC.B	0
	DC.B	0
	DC.L	0

PROPINFO1	DC.W	AUTOKNOB!FREEVERT	;FLAGS
	DC.W	0		;HORIZPOT
	DC.W	0		;VERTPOT
	DC.W	$3333		;HORIZBODY
	DC.W	$2000		;VERTBODY
	DC.W	0		;CWIDTH
	DC.W	0		;CHEIGHT
	DC.W	0		;HPOTRES
	DC.W	0		;VPOTRES
	DC.W	0		;LEFTBORDER
	DC.W	0		;TOPBORDER

GADGET1	DC.L	GADGET2		;NEXTGADGET
	DC.W	28		;LEFTEDGE
	DC.W	10		;TOPEDGE
	DC.W	400		;WIDTH
	DC.W	10		;HEIGHT
G1FLAGS	DC.W	GADGHCOMP	;TYPE
	DC.W	RELVERIFY	;!BOOLEXTEND	;ACTIVATION
	DC.W	BOOLGADGET	;GADGETTYPE
	DC.L	0		;GADGETRENDER
	DC.L	0		;SELECTRENDER
	DC.L	GTEXT1		;GADGETTEXT
	DC.L	0		;MUTUALEXCLUDE
	DC.L	0		;SPECIALINFO
	DC.W	0		;NUMMER DES GADGETS
	DC.L	0		;USERDATA

GTEXT1	DC.B	1	;FRONTPEN
	DC.B	0	;BACKPEN
	DC.B	JAM2	;DRAWMODE
	EVEN
	DC.W	2	;LEFTEDGE
	DC.W	1	;TOPEDGE
	DC.L	RUBY_FNT	;FONT
T1PTR	DC.L	TEXT1	;TEXT
	DC.L	0	;NÄCHSTER TEXT

GADGET2	DC.L	GADGET3		;NEXTGADGET
	DC.W	28		;LEFTEDGE
	DC.W	20		;TOPEDGE
	DC.W	400		;WIDTH
	DC.W	10		;HEIGHT
G2FLAGS	DC.W	GADGHCOMP!GADGDISABLED	;TYPE
	DC.W	RELVERIFY	;!BOOLEXTEND	;ACTIVATION
	DC.W	BOOLGADGET	;GADGETTYPE
	DC.L	0		;GADGETRENDER
	DC.L	0		;SELECTRENDER
	DC.L	GTEXT2		;GADGETTEXT
	DC.L	0		;MUTUALEXCLUDE
	DC.L	0		;SPECIALINFO
	DC.W	0		;NUMMER DES GADGETS
	DC.L	0		;USERDATA

GTEXT2	DC.B	1	;FRONTPEN
	DC.B	0	;BACKPEN
	DC.B	JAM2	;DRAWMODE
	EVEN
	DC.W	2	;LEFTEDGE
	DC.W	1	;TOPEDGE
	DC.L	RUBY_FNT	;FONT
T2PTR	DC.L	TEXT1	;TEXT
	DC.L	0	;NÄCHSTER TEXT

GADGET3	DC.L	GADGET4		;NEXTGADGET
	DC.W	28		;LEFTEDGE
	DC.W	30		;TOPEDGE
	DC.W	400		;WIDTH
	DC.W	10		;HEIGHT
G3FLAGS	DC.W	GADGHCOMP!GADGDISABLED	;TYPE
	DC.W	RELVERIFY	;!BOOLEXTEND	;ACTIVATION
	DC.W	BOOLGADGET	;GADGETTYPE
	DC.L	0		;GADGETRENDER
	DC.L	0		;SELECTRENDER
	DC.L	GTEXT3		;GADGETTEXT
	DC.L	0		;MUTUALEXCLUDE
	DC.L	0		;SPECIALINFO
	DC.W	0		;NUMMER DES GADGETS
	DC.L	0		;USERDATA

GTEXT3	DC.B	1	;FRONTPEN
	DC.B	0	;BACKPEN
	DC.B	JAM2	;DRAWMODE
	EVEN
	DC.W	2	;LEFTEDGE
	DC.W	1	;TOPEDGE
	DC.L	RUBY_FNT	;FONT
T3PTR	DC.L	TEXT1	;TEXT
	DC.L	0	;NÄCHSTER TEXT

GADGET4	DC.L	GADGET5		;NEXTGADGET
	DC.W	28		;LEFTEDGE
	DC.W	40		;TOPEDGE
	DC.W	400		;WIDTH
	DC.W	10		;HEIGHT
G4FLAGS	DC.W	GADGHCOMP!GADGDISABLED	;TYPE
	DC.W	RELVERIFY	;!BOOLEXTEND	;ACTIVATION
	DC.W	BOOLGADGET	;GADGETTYPE
	DC.L	0		;GADGETRENDER
	DC.L	0		;SELECTRENDER
	DC.L	GTEXT4		;GADGETTEXT
	DC.L	0		;MUTUALEXCLUDE
	DC.L	0		;SPECIALINFO
	DC.W	0		;NUMMER DES GADGETS
	DC.L	0		;USERDATA

GTEXT4	DC.B	1	;FRONTPEN
	DC.B	0	;BACKPEN
	DC.B	JAM2	;DRAWMODE
	EVEN
	DC.W	2	;LEFTEDGE
	DC.W	1	;TOPEDGE
	DC.L	RUBY_FNT	;FONT
T4PTR	DC.L	TEXT1	;TEXT
	DC.L	0	;NÄCHSTER TEXT

GADGET5	DC.L	0		;NEXTGADGET
	DC.W	28		;LEFTEDGE
	DC.W	50		;TOPEDGE
	DC.W	400		;WIDTH
	DC.W	10		;HEIGHT
G5FLAGS	DC.W	GADGHCOMP!GADGDISABLED	;TYPE
	DC.W	RELVERIFY	;!BOOLEXTEND	;ACTIVATION
	DC.W	BOOLGADGET	;GADGETTYPE
	DC.L	0		;GADGETRENDER
	DC.L	0		;SELECTRENDER
	DC.L	GTEXT5		;GADGETTEXT
	DC.L	0		;MUTUALEXCLUDE
	DC.L	0		;SPECIALINFO
	DC.W	0		;NUMMER DES GADGETS
	DC.L	0		;USERDATA

GTEXT5	DC.B	1	;FRONTPEN
	DC.B	0	;BACKPEN
	DC.B	JAM2	;DRAWMODE
	EVEN
	DC.W	2	;LEFTEDGE
	DC.W	1	;TOPEDGE
	DC.L	RUBY_FNT	;FONT
T5PTR	DC.L	TEXT1	;TEXT
	DC.L	0	;NÄCHSTER TEXT


TEXT1	DC.B	0
	EVEN

SRCINFO	DC.B	'Source drive is '
SRCDEVICE	DC.B	'DF0:',0
	DS.B	120
	EVEN
	DC.B	0
DESTINFO	DC.B	'Destination drive is '
DESTDEVICE	DC.B	'DF0:',0
	DS.B	120
	EVEN
PARAMFILENAM	DC.B	0
	DS.B	200
	EVEN

SOURCEIORQ
	DC.L	0
DESTIORQ
	DC.L	0
BOOTIORQ
	DC.L	0

TEXT3	DC.B	'CANCEL',0
	EVEN
TEXT2	DC.B	'OK',0
	EVEN
BODYTEXT	DC.B	0	;FRONTPEN
	DC.B	1		;BACKPEN
	DC.B	1		;DRAWMODE
	EVEN
	DC.W	$E		;LINKER RAND DES TEXTES
	DC.W	6		;OBERER RAND DES TEXTES
	DC.L	0		;ZEICHENSATZ STANDARD
ASKING	DC.L	0		;DARZUSTELLENDER TEXT
	DC.L	BODYTEXT2		;LINK ZU WEITEREN STRUKTUREN

BODYTEXT2	DC.B	0	;FRONTPEN
	DC.B	1		;BACKPEN
	DC.B	1		;DRAWMODE
	EVEN
	DC.W	$E		;LINKER RAND DES TEXTES
	DC.W	6+9		;OBERER RAND DES TEXTES
	DC.L	0		;ZEICHENSATZ STANDARD
ASKING2	DC.L	0		;DARZUSTELLENDER TEXT
	DC.L	0		;LINK ZU WEITEREN STRUKTUREN

RIGHTTEXT	DC.B	0
	DC.B	1
	DC.B	1
	EVEN
	DC.W	6
	DC.W	3
	DC.L	0
	DC.L	TEXT3
	DC.L	0

LEFTTEXT	DC.B	0
	DC.B	1
	DC.B	1
	EVEN
	DC.W	6
	DC.W	3
	DC.L	0
	DC.L	TEXT2
	DC.L	0

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

POINTARRAY1
	DC.W	25+405,8
	DC.W	25,8
	DC.W	25,61
	DC.W	25+405,61
	DC.W	25+405,8

POINTARRAY2
	DC.W	449,71
	DC.W	25,71
	DC.W	25,103
	DC.W	449,103
	DC.W	449,71

POINTARRAY3
	DC.W	449,113
	DC.W	25,113
	DC.W	25,135
	DC.W	449,135
	DC.W	449,113

DISKFNTBASE	DC.L	0
PARAMCOUNT	DC.W	10
PARAMTABBASE	DC.L	0

DOSBAS		DC.L	0		;\
FILEMEMADR	DC.L	0		; \
INTUIBASE	DC.L	0		;  \
GRABASE		DC.L	0		;   \
WINDOW1		DC.L	0		;    \
STRFILNAME	DC.L	0		;     \
FILPTR		DC.L	FILNAME		;      \
FILSIZE		DC.L	0		;       \
LOCKDISKPTR	DC.L	LOCKDISK	;        \
OPENDEVICE	DC.L	OPENDEV		;         \
DEVICESOURCEPTR	DC.L	0		;          )
DEVICEDESTPTR	DC.L	0		;         /
SPACE		DC.L	SPECIALSPACE	;        /
FORMATZIEL	DC.L	FORMATDEST	;       /
REQUEST		DC.L	ASKREQUEST	;      /
FSSMSOURCEPTR	DC.L	0		;     /
FSSMDESTPTR	DC.L	0		;    /
INHIBITDR	DC.L	INHIBITDRIVE	;   /
ENABLEDR	DC.L	ENABLEDRIVE	;  /
CRC16		DC.L	CRCEVAL		; /
RESERVED	DS.B	$44		;/

WIN1RASTPORT	DC.L	0
PARAMLOCK	DC.L	0
MEMORYBASE	DC.L	0
FILHANDLE	DC.L	0
OSSTACK		DC.L	0
LENGTHBODY	DC.W	0
POSOFPROP	DC.W	0
SIGNALSTORE	DC.L	-1
DOSPACKETS	DC.L	0
MYPORT	DC.L	0
FILENAMEGIVEN	DC.B	0
PORTOK	DC.B	0
EXEC1PARAM	DC.B	0
	EVEN
IntuiName	dc.b	"intuition.library",0
		EVEN
graName		Dc.b	"graphics.library",0
		even
DISKFNTNAME	DC.B	'diskfont.library',0
	EVEN
DOSNAM		DC.B	'dos.library',0
	EVEN

ROOTBL	INCBIN	ROOTBL

BOOTBL
	DC.B	$44,$4F,$53,$00,$C0,$20,$0F,$19
	DC.B	$00,$00,$03,$70,$43,$FA,$00,$18
	DC.B	$4E,$AE,$FF,$A0,$4A,$80,$67,$0A
	DC.B	$20,$40,$20,$68,$00,$16,$70,$00
	DC.B	$4E,$75,$70,$FF,$60,$FA,$64,$6F
	DC.B	$73,$2E,$6C,$69,$62,$72,$61,$72
	DC.B	$79,$00
BOOTEND

	SECTION	PRG2,BSS
PARAMINFO	DS.B	$104

	SECTION	PRG3,BSS
INFODAT	DS.B	$24

	SECTION	PRG4,BSS_C
SPECIALSPACE	DS.B	$C000

	SECTION	PRG5,DATA_C
PTCHIIM	INCBIN	GFX/PTCHINACTIVE
PTCHAIM	INCBIN	GFX/PTCHACTIVE
AUPIIM	INCBIN	GFX/ARROWUPI
AUPAIM	INCBIN	GFX/ARROWUPA
ADOWNIIM	INCBIN	GFX/ARROWDOWNI
ADOWNAIM	INCBIN	GFX/ARROWDOWNA
