		opt	d-,p+

*************************************************************************
* Programm: shootupWB		Version: 1.0	Datum: 24.01.1990	*
* Autor   : Merlin/dv-team						*
*************************************************************************
* Funktion: Diese Routine schließt alle Fenster auf dem WORKBENCHScreen *
* und danach die Workbench selbst. Dadurch werden mindestens 50 KB Chip-*
* Mem freigegeben. Als eigenständiges Programm nicht sehr sinnvoll (man *
* zieht sich damit selbst den Boden unter den Füßen weg), kann es als	*
* Unterroutine in speicherhungrigen Programmen nützlich sein. Diese	*
* Programme müssen dann aber selbst einen Screen mit Flag WBENCHSCREEN	*
* öffnen, damit nicht etwaige System-Requester ins Leere laufen.	*
* Geschrieben und assembliert mit dem HiSoft/DEVPAC-Assembler.Für SEKA- *
* Benutzer: Die 'equ'-Anweisungen müssen nur duch '=' ersetzt und die	*
* erste Programmzeile ('opt ...') entfernt werden, dann sollte es gehen *
*************************************************************************

*Intuition-Funktionen und -Konstanten
_LVOGetScreenData	equ	-426
_LVOCloseWindow		equ	-72
_LVOCloseWorkBench	equ	-78
WBENCHSCREEN		equ	1

*EXEC-Funktionen
_LVOOldOpenLibrary	equ	-408
_LVOCloseLibrary	equ	-414

vorarbeit	lea		intname(pc),a1
		move.l		4.w,a6			;Intuition öffnen
		jsr		_LVOOldOpenLibrary(a6)
		move.l		d0,a6

* hier beginnt die eigentliche Routine

		lea		buffer(pc),a0
		move.l		#8,d0
		move.l		#WBENCHSCREEN,d1
		move.l		#0,a1
		jsr		_LVOGetScreenData(a6)	;WBScreenData holen
		lea		buffer(pc),a5
		move.l		4(a5),a5		;FirstWindow
lab1		move.l		a5,a0
		cmp.l		#0,a0			;kein weiteres?
		beq		all_w_closed
		move.l		32(a0),d0		;Ptr auf WindowTitle
		cmp.l		#$FFFFFFFF,d0		;Default, also WB?
		beq		all_w_closed		;das nicht schließen
		jsr		_LVOCloseWindow(a6)
		move.l		(a5),a5			;NextWindow
		bra		lab1

all_w_closed	jsr		_LVOCloseWorkBench(a6)

* ab hier könnte es im eigenen Programm weitergehen

		bsr		demo

beenden		move.l		a6,a1
		move.l		4.w,a6
		jsr		_LVOCloseLibrary(a6)
		clr.l		d0
		rts

* deb Pufferspeicher braucht man ...
buffer		ds.b		8

* wird in eigenen Programmen eh' vorhanden sein
intname		dc.b		'intuition.library',0
		cnop		0,4

* nur eine demo-routine, damit nicht alles stillsteht
* wartet auf Maustastendruck und macht die Workbench dann wieder auf

_LVOOpenWorkBench	equ	-210

demo		btst		#6,$bfe001	;Mausohr gedrückt?
		bne		demo		;nein
		jsr		_LVOOpenWorkBench(a6)
		rts
