
; Program:	SHOWDOORS.XIM - CODED BY CøRTEX/TRSI
; Reassembled:	(C)1996 ADKINS/RASCALS, ALL RIGHTS RESERVED.

; Note:	Diese Door wurde ausschliesslich fuer Lehrzwecke im Umgang mit
;	der AEDoor.library reassembliert und dokumentiert.

;	Der Code ist nicht anspruchsvoll und fuer Einsteiger durch
;	optimale Kommentare sehr geeignet.

;	Um zusaetzliche Informationen ueber diese Door zu bekommem,
;	empfiehlt es sich, die beiliegenden Doc's zu lesen.

;	Da die Door keinen WBStartUpCode enthaelt, kann diese
;	eben nur unter OS2.0+ von der Workbench gestartet werden.

;	Bug diesbezueglich entfernt.

;	Adkins/Rascals

		INCDIR	"Dh0:Includes/"
		INCLUDE	"AmiExpress/Amix.i"
		INCLUDE	"Exec/Macros.i"
		INCLUDE	"Dos/Dos.i"
		INCLUDE	"LVO.i"

AbsExecBase	EQU	4

		SECTION "  0",CODE_C		; Definition

Start		Move.l	(AbsExecBase).w,a6	; ExecBase nach a6

		MoveQ	#2,d0			; LibVersion nach d0
		Lea	DosName(pc),a1		; DosLibNameAdr nach a1
		JSRLIB	OpenLibrary		; OpenLibrary anspringen
		Lea	DosBase(pc),a0		; DosBaseAdr nach a0
		Move.l	d0,(a0)			; Resultat sichern

;		Die folgende Fehlerabfrage hat der Autor nicht
;		Fuer notwendig gehalten, muss aber sein(!)

		Beq.w	Exit			; Wenn Fehler, zu Exit

		MoveQ	#2,d0			; LibVersion nach d0
		Lea	AEDoorName(pc),a1	; AEDoorLibNameAdr nach a1
		JSRLIB	OpenLibrary		; OpenLibrary anspringen
		Lea	AEDoorBase(pc),a0	; AEDoorBaseAdr nach a0
		Move.l	d0,(a0)			; Resultat sichern
		Beq.w	CloseDosLib		; Wenn Fehler, zu CloseDosLib

		Move.l	AEDoorBase(pc),a6	; AEDoorBase nach a6
		JSRLIB	AECreateComm		; AECreateComm anspringen
		Lea	AEPortBase(pc),a0	; AEPortBaseAdr nach a0
		Move.l	d0,(a0)			; Resultat sichern

		ClearA	a0			; Kein String
		Move.l	AEPortBase(pc),a1	; AEPortBase nach a1
		MoveQ	#DT_ACCESSLEVEL,d0	; AmixData nach d0
		JSRLIB	AEGetDT			; AEGetDT anspringen

		Move.l	AEPortBase(pc),a1	; AEPortBase nach a1
		Lea	CopyStrBuffer(pc),a0	; CopyStrBufferAdr nach a0
		JSRLIB	AECopyStr		; AECopyStr anspringen

		Lea	CopyStrBuffer(pc),a0	; CopyStrBufferAdr nach a0
		Move.b	#10,3(a0)		; ReturnCode setzen
		Move.l	(a0),a0			; LevelNummer nach a0

		Lea	Level.txt(pc),a1	; LevelTxtAdr nach a1
		Move.l	(a1),a1			; LevelNummer nach a1

;		Auch hier ist keine besonders gute Moeglichkeit
;		Gefunden worden, 2 Werte miteinander zu vergleichen.

		Cmp.l	a0,a1			; Miteinander vergleichen
		Ble.s	IsUser			; Kleiner o. Gleich, IsUser

		Lea	MainText.txt(pc),a0	; TextStringAdr nach a0
		MoveQ	#WSF_LF,d1		; LineFeed FLAG nach d1
		Move.l	AEPortBase(pc),a1	; AEPortBase nach a1
		JSRLIB	AEWriteStr		; AEWriteStr anspringen

		Lea	SysOpBull.txt(pc),a0	; TextStringAdr nach a0
		Move.l	AEPortBase(pc),a1	; AEPortBase nach a1
		JSRLIB	AEShowFile		; AEShowFile anspringen

		Lea	Register.txt(pc),a0	; TextStringAdr nach a0
		MoveQ	#WSF_LF,d1		; LineFeed FLAG nach d1
		Move.l	AEPortBase(pc),a1	; AEPortBase nach a1
		JSRLIB	AEWriteStr		; AEWriteStr anspringen

		Bra.s	CloseAll		; CloseAll anspringen

IsUser		Lea	MainText.txt(pc),a0	; TextStringAdr nach a0
		MoveQ	#WSF_LF,d1		; LineFeed FLAG nach d1
		Move.l	AEPortBase(pc),a1	; AEPortBase nach a1
		JSRLIB	AEWriteStr		; AEWriteStr anspringen

		Lea	UserBull.txt(pc),a0	; TextStringAdr nach a0
		Move.l	AEPortBase(pc),a1	; AEPortBase nach a1
		JSRLIB	AEShowFile		; AEShowFile

		Lea	Register.txt(pc),a0	; TextStringAdr nach a0
		MoveQ	#WSF_LF,d1		; LineFeed FLAG nach d1
		Move.l	AEPortBase(pc),a1	; AEPortBase nach a1
		JSRLIB	AEWriteStr		; AEWriteStr anspringen

CloseAll	Move.l	AEPortBase(pc),a1	; AEPortBase nach a1
		JSRLIB	AEDeleteComm		; AEDeleteComm anspringen

CloseAEDoorLib	Move.l	a6,a1			; AEDoorBase nach a1
		Move.l	(AbsExecBase).w,a6	; ExecBase nach a6
		JSRLIB	CloseLibrary		; CloseLibrary anspringen

CloseDosLib	Move.l	DosBase(pc),a1		; DosBase nach a1
		Move.l	(AbsExecBase).w,a6	; ExecBase nach a6
		JSRLIB	CloseLibrary		; CloseLibrary anspringen

Exit		MoveQ	#RETURN_OK,d0		; ReturnCode nach d0
		Rts				; Zurrueck zu AmiExpress

AEDoorName	Dc.b	"AEDoor.library",0
DosName		Dc.b	"dos.library",0
		Even

DosBase		Dc.l	0
AEDoorBase	Dc.l	0
AEPortBase	Dc.l	0

SysOpBull.txt	Dc.b	"DOORS:ShowDoors/SysopDoors.txt",0
UserBull.txt	Dc.b	"DOORS:ShowDoors/UserDoors.txt",0

Level.txt	Dc.b	"250",0
CopyStrBuffer	Blk.b	30,10		; 30 * ReturnCode's

MainText.txt	Dc.b	$C
		Dc.w	$A0D
		Dc.b	'            '
		Dc.w	$1B5B
		Dc.b	'32m.[ '
		Dc.w	$1B5B
		Dc.b	'33mShowDoors v0.1 '
		Dc.w	$1B5B
		Dc.b	'31m© by C'
		Dc.b	-8
		Dc.b	'RteX/tRS'
		Dc.w	-$40DF
		Dc.b	' '
		Dc.b	$1B
		Dc.b	'[36m(not registered)'
		Dc.w	$1B5B
		Dc.b	'32m ]. '
		Dc.b	$A
		Dc.b	0

Register.txt	Dc.b	$A
		Dc.b	'        '
		Dc.w	$1B5B
		Dc.b	'32m.[ '
		Dc.w	$1B5B
		Dc.b	'33mTo register this Door call:'
		Dc.w	$1B5B
		Dc.b	'31m Dark'
		Dc.w	-$48B7
		Dc.b	'l'
		Dc.b	-$5D
		Dc.w	-$4AAD
		Dc.w	-$5E08
		Dc.b	'N '
		Dc.w	$1B5B
		Dc.b	'32m+'
		Dc.w	$1B5B
		Dc.b	'33m43'
		Dc.b	$1B
		Dc.b	'[32m-'
		Dc.b	$1B
		Dc.b	'[33m512'
		Dc.b	$1B
		Dc.b	'[32m-'
		Dc.b	$1B
		Dc.b	'[33m365302'
		Dc.w	$1B5B
		Dc.b	'32m ].'
		Dc.w	$A00

		END
