;Programm: BangerMenuDisk bietet eine grafische Oberfläche zum Anwählen von Programmen
;          die beim Starten in der Startup-Sequence aufgerufen werden sollen.
;Autor   : Andre´ Trettin
;Codename: Banger
;Begin   : 31-Mai-95 17:08:28
;$VER    : BangerMenuDisk.Asm 1.4 (13-Feb-96)

** INCLUDE Struktur Variablen
* Fehler Codes: 21=kein Speicher
*               22=konnte Library (oder Libraries) nicht öffnen
*               23=GetVisualInfo Fehler
*               24=konnte File S:Banger.Prefs nicht öffnen
*               25=bei der Gadgeterschaffung trat ein Fehler auf
*               26=konnte Fenster nicht öffnen oder Task nicht Finden
*               27=Einstellungen sind Leer
*               28=kein Speicher für die Einstellungen
*               29=kein MsgPort
*               30=konnte kein IORequest create
*               31=konnte Device nicht öffnen
*               32=falsche Parameter angabe
*               10=Return Code für die Startup-Sequence

	incdir  INCLUDE:
	include exec/exec.i
	include exec/io.i
	include devices/input.i
	include devices/inputevent.i
	include dos/dos.i
	include dos/dosextens.i
	include intuition/intuition.i
	include libraries/gadtools.i
	include lvo/exec_lib.i
	include lvo/dos_lib.i
	include lvo/intuition_lib.i
	include lvo/gadtools_lib.i
	include lvo/input_lib.i

	STRUCTURE Internal,0
	APTR    INTUIBase
	APTR    DOSBase
	APTR    GADBase
	APTR    WindowHandle
	APTR    OutputHandle
	APTR    ScreenHandle
	APTR    VisualInfo
	APTR    PrefsFileHandle
	APTR    FileSpeicher
	APTR    FontAddr
	APTR    GadgetListe
	APTR    meinTask
	APTR    alterTask
	APTR    AnGad
	APTR    MsgPortAddr
	APTR    RDArgs
	STRUCT  FIB,[fib_SIZEOF]
	STRUCT  GadgetAddr,[68*4]
	STRUCT  TastenIBlock,[IO_SIZE]
	LONG    Filegroesse
	LONG    NOKEYArray
	WORD    BreiteGPos
	WORD    BreiteGADs
	WORD    BreiteWin
	WORD    CAPS
	BYTE    AnzahlGADs
	BYTE    RelativeTopC
	BYTE    RelativeLeftC
	LABEL   Int_SIZEOF
;;
** Hauptprog
	moveq   #0,d7
	move.l  4.w,a6
	move.l  #Int_SIZEOF,d0
	move.l  #MEMF_PUBLIC!MEMF_CLEAR,d1
	jsr     _LVOAllocMem(a6)
	move.l  d0,a5
	bne.s   LibraryO
	moveq   #21,d7           ;21 = kein Speicher
	bra.s   Ende
LibraryO
	bsr.w   InitRelative
	bsr.w   LibOeffne
	tst.w   d7
	bne.s   SchliesseLibrary
	bsr.s   Parameter
	tst.w   d7
	bne.s   SchliesseLibrary
	bsr.w   WaitOnCaps
	cmp.w   #10,d7
	bhi.s   SchliesseLibrary
	tst.w   d7
	beq.s   Menuerscheine
	moveq   #0,d7
	bra.s   SchliesseLibrary
Menuerscheine
	bsr.w   PubScreenOeffne
	tst.w   d7
	bne.s   SchliesseLibrary
	bsr.w   LadePrefs
	tst.w   d7
	bne.s   SchliesseScreen
	bsr.w   InitGadget
	tst.w   d7
	bne.s   FreiSPrefs
	bsr.w   FensterOeffne
	tst.w   d7
	bne.s   RemGad
	bsr.w   GadAktivieren
	bsr.w   RefreshWin
	bsr.w   MessageAbFragen
	bsr.w   FensterSchliesse
RemGad
	bsr.w   RemoveGadget
FreiSPrefs
	bsr.w   SpeicherPrefs
SchliesseScreen
	bsr.w   ScreenSchliesse
SchliesseLibrary
	bsr.w   LibSchliesse
	move.l  a5,a1
	move.l  #Int_SIZEOF,d0
	jsr     _LVOFreeMem(a6)
Ende
	move.l  d7,d0
ende
	rts
;;
** Parameter
Parameter
	move.l  DOSBase(a5),a6
	lea     ParaTemplate(pc),a1
	move.l  a1,d1
	lea     NOKEYArray(a5),a1
	move.l  a1,d2
	moveq   #0,d3
	jsr     _LVOReadArgs(a6)
	move.l  d0,RDArgs(a5)
	bne.s   ParaOK
	jsr     _LVOIoErr(a6)
	move.l  d0,d1
	moveq   #0,d2
	jsr     _LVOPrintFault(a6)
	moveq   #32,d7
	rts
ParaOK
	move.l  RDArgs(a5),d1
	jsr     _LVOFreeArgs(a6)
	rts
;;
** Warte auf Caps Lock
WaitOnCaps
	tst.l   NOKEYArray(a5)
	bne.s   NOKeyJA
	move.l  4.w,a6
	jsr     _LVOCreateMsgPort(a6)
	move.l  d0,MsgPortAddr(a5)
	bne.s   MsgPortOK
	moveq   #29,d7                  ;29 = kein MsgPort
	addq    #4,a7
	pea     SchliesseLibrary(pc)
	rts
MsgPortOK
	move.l  d0,a0
	move.l  #IOSTD_SIZE,d0
	jsr     _LVOCreateIORequest(a6)
	move.l  d0,TastenIBlock(a5)
	bne.s   OeffneDev
	moveq   #30,d7                  ;30=konnte kein IORequest create
	bra.s   FreiMsgP
OeffneDev
	lea     inputname(pc),a0
	move.l  d0,a1
	moveq   #0,d0
	move.l  #IOF_QUICK,d1
	jsr     _LVOOpenDevice(a6)
	tst.l   d0
	beq.s   DevOK
	moveq   #31,d7                   ;31=konnte Device nicht öffnen
	bra.s   IOReqDel
DevOK
	move.l  TastenIBlock(a5),a0
	move.l  IO_DEVICE(a0),a6
	jsr     _LVOPeekQualifier(a6)
	and.w   #IEQUALIFIER_CAPSLOCK,d0
	cmp.w   #IEQUALIFIER_CAPSLOCK,d0
	beq.s   CAPSgedrueckt
	moveq   #10,d7
CAPSgedrueckt
	move.l  4.w,a6
	lea     TastenIBlock(a5),a1
	jsr     _LVOCloseDevice(a6)
IOReqDel
	move.l  TastenIBlock(a5),a0
	jsr     _LVODeleteIORequest(a6)
FreiMsgP
	move.l  MsgPortAddr(a5),a0
	jsr     _LVODeleteMsgPort(a6)
NOKeyJA
	rts
;;
** GadAktivieren
GadAktivieren
	move.l  GadgetAddr(a5),a4
	moveq   #1,d6
	bsr.w   SelGK
	lea     GadgetAddr(a5),a4
	move.l  a4,AnGad(a5)
	rts
;;
** Relative Init
InitRelative
	lea     topazFName8(pc),a0
	lea     topaz8(pc),a1
	move.l  a0,(a1)
	move.l  a1,FontAddr(a5)
	rts
;;
** Message Auswertung
MessageAbFragen
	move.l  WindowHandle(a5),a0
	move.l  wd_UserPort(a0),a0
	move.l  4.w,a6
	jsr     _LVOWaitPort(a6)
nocheine
	move.l  GADBase(a5),a6
	move.l  WindowHandle(a5),a0
	move.l  wd_UserPort(a0),a0
	jsr     _LVOGT_GetIMsg(a6)
	move.l  d0,a1
	tst.l   d0
	beq.s   MessageAbFragen
	move.l  im_Class(a1),d4
	move.w  im_Code(a1),d5
	move.l  im_IAddress(a1),a4
	jsr     _LVOGT_ReplyIMsg(a6)
	cmpi.l  #IDCMP_CLOSEWINDOW,d4
	beq.w   ende
	cmpi.l  #IDCMP_REFRESHWINDOW,d4
	beq.s   RefreWin
	cmpi.l  #IDCMP_GADGETUP,d4
	beq.w   GadAuswertung
	cmpi.l  #IDCMP_VANILLAKEY,d4
	beq.w   VTastendruck
	cmpi.l  #IDCMP_RAWKEY,d4
	beq.w   RTastendruck
	bra.s   nocheine
RefreWin
	bsr.w   RefreshWin
	bra.s   nocheine
UpTaste
	move.l  AnGad(a5),a4
	lea     GadgetAddr(a5),a3
	cmp.l   a3,a4
	beq.s   DownTEnde
	lea     -4(a4),a3
	bra.s   GadAnwaehlen
DownTaste
	move.l  AnGad(a5),a4
	lea     4(a4),a3
	cmp.l   #0,(a3)
	beq.s   DownTEnde
GadAnwaehlen
	move.l  (a4),a4
	moveq   #0,d6
	bsr.w   SelGK
	moveq   #1,d6
	move.l  (a3),a4
	bsr.w   SelGK
	move.l  (a3),a3
	bsr.w   GetGAddr
DownTEnde
	bra.w   nocheine
rechteBank
	bsr.s   NummerGad
	add.w   #17,d0
	cmp.b   AnzahlGADs(a5),d0
	bls.s   rechtsOK
	sub.b   AnzahlGADs(a5),d0
	neg.w   d0
	add.w   #17,d0
	bra.s   rechtsweiter
rechtsOK
	moveq   #17,d0
rechtsweiter
	asl.w   #2,d0
	lea     (a4,d0.w),a3            
	bra.s   GadAnwaehlen
NummerGad
	move.l  AnGad(a5),a4    
	move.l  (a4),a3
	move.w  gg_GadgetID(a3),d0
	rts
linkeBank
	bsr.s   NummerGad
	sub.w   #18,d0
	tst.w   d0
	bgt.s   linksOk
	moveq   #0,d0
linksOk
	asl.w   #2,d0
	lea     GadgetAddr(a5),a3
	lea     (a3,d0.w),a3                            
	bra.s   GadAnwaehlen
RTastendruck
	cmp.b   #$4e,d5         ;rechts
	beq.b   rechteBank
	cmp.b   #$4f,d5         ;links
	beq.s   linkeBank
	cmp.b   #$4d,d5         ;Down
	beq.w   DownTaste
	cmp.b   #$4c,d5         ;Up
	beq.w   UpTaste
	bra.w   nocheine
VTastendruck
	cmp.b   #$0d,d5
	beq.s   Auswahl
	cmp.b   #$1b,d5
	beq.w   ende
	bclr    #5,d5
	cmp.b   #'Q',d5
	beq.w   ende
	bra.w   nocheine
GetGAddr
	lea     GadgetAddr(a5),a4
FindeGAdd
	cmp.l   (a4)+,a3
	beq.s   RichtGAdd
	bra.s   FindeGAdd
RichtGAdd
	lea     -4(a4),a4
	move.l  a4,AnGad(a5)
	rts
SelGK
	move.l  WindowHandle(a5),a0
	bsr.b   RemoveGSuche
	tst.l   d6
	beq.s   DisSel
	or.w    #GFLG_SELECTED,gg_Flags(a4)
	bra.s   NunSel
DisSel
	eor.w   #GFLG_SELECTED,gg_Flags(a4)
NunSel
	move.l  WindowHandle(a5),a0
	bsr.b   AddGSuche
	rts
RemoveGSuche
	move.l  a4,a1
	move.l  INTUIBase(a5),a6
	jsr     _LVORemoveGadget(a6)
	rts
AddGSuche
	move.l  WindowHandle(a5),a0
	move.l  a4,a1
	moveq   #-1,d0
	jsr     _LVOAddGadget(a6)
	move.l  a4,a0
	move.l  WindowHandle(a5),a1
	suba.l  a2,a2
	jsr     _LVORefreshGadgets(a6)
	rts
Auswahl
	move.l  AnGad(a5),a4
	move.l  (a4),a4
GadAuswertung
	move.w  gg_GadgetID(a4),d6
	asl.b   #1,d6
	subq    #2,d6
	move.l  FileSpeicher(a5),a1
SucheExloop
	cmp.b   #0,(a1)+
	bne.s   SucheExloop
	dbra    d6,SucheExloop
	move.l  a1,d1
	moveq   #0,d2
	moveq   #0,d3
	move.l  DOSBase(a5),a6
	jsr     _LVOExecute(a6)
	moveq   #10,d7
	rts
;;
** Refresh Fenster
RefreshWin
	move.l  GADBase(a5),a6
	move.l  WindowHandle(a5),a0
	suba.l  a1,a1
	jsr     _LVOGT_RefreshWindow(a6)
	move.l  WindowHandle(a5),a0
	jsr     _LVOGT_BeginRefresh(a6)
	move.l  WindowHandle(a5),a0
	moveq   #DOSTRUE,d0
	jsr     _LVOGT_EndRefresh(a6)
	rts 
;;
** Fenster Öffnen
FensterOeffne
	move.l  INTUIBase(a5),a6
	lea     Fenster_Tags(pc),a1
	move.l  GadgetListe(a5),12(a1)
	lea     WindowTitle(pc),a0
	move.l  a0,4(a1)
	lea     ScreenTitle(pc),a0
	move.l  a0,20(a1)
	move.w  BreiteGPos(a5),d0
	add.w   #40,d0
	move.w  d0,30(a1)
	sub.w   #640,d0
	neg.w   d0
	asr.w   #1,d0
	move.w  d0,54(a1)
	move.w  BreiteWin(a5),d4
	bne.s   BreiteresWin
	move.b  AnzahlGADs(a5),d4
BreiteresWin    
	move.w  d4,d6
	move.w  d6,d5
	add.w   d6,d5
	asl.w   #3,d4
	add.w   d5,d4
	add.w   #36,d4
	move.w  d4,38(a1)
	move.w  #252,d0
	sub.w   d4,d0
	asr.w   #1,d0
	move.w  d0,46(a1)
	suba.l  a0,a0
	jsr     _LVOOpenWindowTagList(a6)
	move.l  d0,WindowHandle(a5)
	beq.b   ErrorWindow
	move.l  4.w,a6
	suba.l  a1,a1
	jsr     _LVOFindTask(a6)
	move.l  d0,meinTask(a5)
	beq.s   ErrorTask
	move.l  d0,a0
	move.l  pr_WindowPtr(a0),alterTask(a5)
	move.l  WindowHandle(a5),pr_WindowPtr(a0)
	rts
ErrorTask
	bsr.s   keinTask
ErrorWindow
	moveq   #26,d7           ;26 = konnte Fenster nicht öffnen oder Task nicht finden
	rts
FensterSchliesse
	move.l  meinTask(a5),a0
	move.l  alterTask(a5),pr_WindowPtr(a0)
keinTask
	move.l  INTUIBase(a5),a6
	move.l  WindowHandle(a5),a0
	jsr     _LVOCloseWindow(a6)
	rts 
;;
** Init Gadgets
InitGadget
	move.l  ScreenHandle(a5),a0
	move.l  sc_Font(a0),a1
	move.w  ta_YSize(a1),d2
	add.b   sc_WBorTop(a0),d2
	addq    #1,d2
	move.b  d2,RelativeTopC(a5)
	move.b  sc_WBorTop(a0),RelativeLeftC(a5)
	move.l  FileSpeicher(a5),a1
	move.l  Filegroesse(a5),d0
	move.l  a1,a2
	add.l   d0,a2
	moveq   #0,d0
	moveq   #0,d1
	moveq   #0,d2
	moveq   #0,d3
Suchenloop
	addq    #1,d1             ;länge GadgetName aus der Prefs
	move.b  (a1)+,d4          ;Prefs daten nach d4
einReturn
	cmp.b   #10,d4            ;schon ein Return ?
	bne.s   keinReturn
	move.b  #0,-1(a1)         ;das Return mit NullByte abschliessen
	tst.b   d3                ;d3 0/1 entweder Gadgetname oder Programm bzw. Batchdatei
	beq.s   BreiteZaehlen
	moveq   #0,d3
	bra.s   wortkleiner
BreiteZaehlen
	moveq   #1,d3   
	addq    #1,d0             ;d0=Anzahl der Gadgets
	cmp.b   d2,d1             ;d2 enthält den längsten Gadgetnamen
	bls.s   wortkleiner
	move.b  d1,d2             ;neue länge war größer als alte
wortkleiner
	moveq   #0,d1
keinReturn
	cmp.l   a1,a2             ;a2=a1 dann PrefsEnde
	bne.s   Suchenloop
PrefsEnde
	tst.b   d0
	beq.w   PrefsNull
	move.b  d0,AnzahlGADs(a5)
	asl.w   #3,d2
	add.w   #10,d2
	move.w  d2,BreiteGADs(a5)
	lea     GadgetListe(a5),a0
	move.l  GADBase(a5),a6
	jsr     _LVOCreateContext(a6)
	move.l  d0,a0
	beq.w   ErrorGadget
	lea     UniGad(pc),a1
	move.b  RelativeTopC(a5),d2
	move.b  RelativeLeftC(a5),d3
	add.b   d2,gng_TopEdge+1(a1)
	add.b   d3,gng_LeftEdge+1(a1)
	move.w  BreiteGADs(a5),gng_Width(a1)
	move.l  VisualInfo(a5),gng_VisualInfo(a1)
	move.l  FontAddr(a5),gng_TextAttr(a1)
	move.l  FileSpeicher(a5),a4
	moveq   #0,d6
	move.b  AnzahlGADs(a5),d6
	subq    #1,d6
	lea     GadgetAddr(a5),a3
	move.w  #20,BreiteGPos(a5)
InitGadloop
	moveq   #BUTTON_KIND,d0
	lea     UniGad(pc),a1
	move.l  a4,gng_GadgetText(a1)
	bsr.w   Return2Find
	cmp.w   #180,gng_TopEdge(a1)
	bge.s   GadgetCorritur
GadgetCoOK      
	add.w   #10,gng_TopEdge(a1)
	add.w   #1,gng_GadgetID(a1)
	suba.l  a2,a2
	jsr     _LVOCreateGadgetA(a6)
	move.l  d0,(a3)+
	beq.s   ErrorGadget
	move.l  d0,a0
	dbra    d6,InitGadloop
	cmp.w   #20,BreiteGPos(a5)
	bne.s   BreiteDa
	move.w  BreiteGADs(a5),BreiteGPos(a5)
	rts
BreiteDa    
	move.w  BreiteGADs(a5),d2
	sub.w   #20,d2
	add.w   d2,BreiteGPos(a5)
	rts
GadgetVorEnde   
	sub.w   #40,d2
	move.w  d2,BreiteGPos(a5)
	rts
GadgetCorritur
	clr.w   gng_TopEdge(a1)
	move.b  RelativeTopC(a5),d2
	add.b   d2,gng_TopEdge+1(a1)
	move.w  BreiteGADs(a5),d2
	add.w   #20,d2
	add.w   BreiteGPos(a5),d2
	move.w  d2,d5
	add.w   BreiteGADs(a5),d5
	cmp.w   #630,d5
	bgt.s   GadgetVorEnde
	move.w  d2,BreiteGPos(a5)
	move.w  BreiteGPos(a5),gng_LeftEdge(a1)
	move.w  #17,BreiteWin(a5)      
	bra.s   GadgetCoOK                      
ErrorGadget
	bsr.s   RemoveGadget
	moveq   #25,d7           ;25 = Gadget init Fehler
	rts
RemoveGadget
	move.l  GADBase(a5),a6
	move.l  GadgetListe(a5),a0
	jsr     _LVOFreeGadgets(a6)
	rts 
Return2Find
	cmp.b   #0,(a4)+
	bne.s   Return2Find
Return1Mal
	cmp.b   #0,(a4)+
	bne.s   Return1Mal
	rts
PrefsNull
	moveq   #27,d7           ;27 = Prefs sind Null
	rts
;;
** Speicher freigeben von den Einstellungen
SpeicherPrefs
	move.l  FileSpeicher(a5),a1
	move.l  Filegroesse(a5),d0
	move.l  4.w,a6
	jsr     _LVOFreeMem(a6)
	rts
;;
** Lade Einstellungen
LadePrefs
	lea     PrefsFile1(pc),a3
	move.l  a3,d1
	move.l  #MODE_OLDFILE,d2
	move.l  DOSBase(a5),a6
	jsr     _LVOOpen(a6)
	move.l  d0,PrefsFileHandle(a5)
	bne.s   OpenPrefsFile
	lea     PrefsFileName(pc),a3
	move.l  a3,d1
	move.l  #MODE_OLDFILE,d2
	jsr     _LVOOpen(a6)
	move.l  d0,PrefsFileHandle(a5)
	beq.s   OpenFileError
OpenPrefsFile
	move.l  d0,d1
	lea     FIB(a5),a3
	move.l  a3,d2
	jsr     _LVOExamineFH(a6)
	move.l  fib_Size(a3),Filegroesse(a5)
	move.l  Filegroesse(a5),d0
	cmp.l   #1,d0
	beq.s   nixPrefs
	tst.l   d0
	beq.s   nixPrefs
	move.l  #MEMF_PUBLIC!MEMF_CLEAR,d1
	move.l  4.w,a6
	jsr     _LVOAllocMem(a6)
	move.l  d0,FileSpeicher(a5)
	beq.s   ErrorFiSp
	move.l  PrefsFileHandle(a5),d1
	move.l  d0,d2
	move.l  Filegroesse(a5),d3
	move.l  DOSBase(a5),a6
	jsr     _LVORead(a6)
SchliesseFile
	move.l  PrefsFileHandle(a5),d1
	jsr     _LVOClose(a6)
	rts
ErrorFiSp
	moveq   #28,d7           ;28 = kein Speicher für Prefs
	bra.s   SchliesseFile
OpenFileError
	moveq   #24,d7           ;24 = konnte File BangerMenu.prefs nicht öffnen
	rts
nixPrefs
	moveq   #27,d7           ;27 = Prefs vorhanden aber leer
	bra.s   SchliesseFile
;;
** Library Öffnen + Schliessen
LibOeffne
	move.l  a5,a4
	lea     intname(pc),a1
	bsr.s   OeffneLib
	lea     dosname(pc),a1
	bsr.s   OeffneLib
	lea     gadname(pc),a1
	bsr.s   OeffneLib
	rts
OeffneLib
	moveq   #37,d0
	jsr     _LVOOpenLibrary(a6)
	move.l  d0,(a4)+
	beq.s   LibError
	rts
LibError
	moveq   #22,d7                   ;22 = konnte Library nicht öffnen
	rts
LibSchliesse
	move.l  4.w,a6
	moveq   #3-1,d2
	lea     WindowHandle(a5),a4
SchliesseLib
	move.l  -(a4),a1
	cmp.l   #0,a1
	beq.s   notOpened
	jsr     _LVOCloseLibrary(a6)
notOpened
	dbra    d2,SchliesseLib
	rts
;;
** PubScreenOeffne
PubScreenOeffne
	move.l  INTUIBase(a5),a6
	suba.l  a0,a0
	jsr     _LVOLockPubScreen(a6)
	move.l  d0,ScreenHandle(a5)
	move.l  d0,a0
	suba.l  a1,a1
	move.l  GADBase(a5),a6
	jsr     _LVOGetVisualInfoA(a6)
	move.l  d0,VisualInfo(a5)
	beq.s   VisualError
	rts
VisualError
	moveq   #23,d7                  ;23 = GetVisualInfo Fehler
	bra.s   ScrSchliesse
ScreenSchliesse
	move.l  GADBase(a5),a6
	move.l  VisualInfo(a5),a0
	jsr     _LVOFreeVisualInfo(a6)
ScrSchliesse
	move.l  INTUIBase(a5),a6
	suba.l  a0,a0
	move.l  ScreenHandle(a5),a1
	jsr     _LVOUnlockPubScreen(a6)
	rts
;;
** LONG Daten
Fenster_Tags    dc.l    WA_Title,0
		dc.l    WA_Gadgets,0
		dc.l    WA_ScreenTitle,0
		dc.l    WA_Width,0
		dc.l    WA_Height,0
		dc.l    WA_Top,11
		dc.l    WA_Left,0
		dc.l    WA_IDCMP,IDCMP1!IDCMP2
		dc.l    WA_Flags,W_Flags1!W_Flags2
		dc.l    WA_NewLookMenus,-1
		dc.l    WA_AutoAdjust,-1
		dc.l    TAG_DONE
W_Flags1        equ     WFLG_ACTIVATE!WFLG_SMART_REFRESH
W_Flags2        equ     WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_CLOSEGADGET
IDCMP1          equ     BUTTONIDCMP!RAWKEY
IDCMP2          equ     IDCMP_CLOSEWINDOW!IDCMP_VANILLAKEY!IDCMP_REFRESHWINDOW
UniGad
		dc.w    20,0,0,10
		dc.l    0,0
		dc.w    0
		dc.l    PLACETEXT_IN,0,0 
topaz8:
		dc.l    0
		dc.w    8
		dc.b    0,1
;;
** BYTE Daten
ParaTemplate    dc.b 'NOKEY/S',0
intname         INTNAME
dosname         DOSNAME
gadname         GADTOOLSNAME
inputname       dc.b    'input.device',0
PrefsFileName   dc.b    'S:'
PrefsFile1      dc.b    'BangerMenuDisk.prefs',0
topazFName8     dc.b    'topaz.font',0
WindowTitle     dc.b    'BangerMenuDisk',0
				dc.b    '$VER: '
ScreenTitle     dc.b    'BangerMenuDisk 1.4 (13-Feb-1996) © by Andre´ Trettin',0
;;
