_open_dos:								; otwarcie dos.library
	move.l	EXECBASE,a6
	lea		dos_name(pc),a1
	moveq	#36,d0
	jsr		_LVOOpenLibrary(a6)
	move.l	d0,dos_base
	rts
_open_intuition:						; otwarcie intuition.library
	move.l	EXECBASE,a6
	lea		intuition_name(pc),a1
	moveq	#36,d0
	jsr		_LVOOpenLibrary(a6)
	move.l	d0,intuition_base
	rts
_open_gadtools:							; otwarcie gadtools.library
	move.l	EXECBASE,a6
	lea		gadtools_name(pc),a1
	moveq	#36,d0
	jsr		_LVOOpenLibrary(a6)
	move.l	d0,gadtools_base
	rts
_open_graphics:							; otwarcie graphics.library
	move.l	EXECBASE,a6
	lea		graphics_name(pc),a1
	moveq	#36,d0
	jsr		_LVOOpenLibrary(a6)
	move.l	d0,graphics_base
	rts
_open_reqtools:							; otwarcie reqtools.library
	move.l	EXECBASE,a6
	lea		reqtools_name(pc),a1
	moveq	#36,d0
	jsr		_LVOOpenLibrary(a6)
	move.l	d0,reqtools_base
	rts

_close_dos:								; zamkniėcie dos.library
	move.l	dos_base(pc),d0
	beq		no_dos
	move.l	d0,a1
	move.l	EXECBASE,a6
	jsr		_LVOCloseLibrary(a6)
no_dos:
	rts

_close_intuition:						; zamkniėcie intuition.library
	move.l	intuition_base(pc),d0
	beq		no_intuition
	move.l	d0,a1
	move.l	EXECBASE,a6
	jsr		_LVOCloseLibrary(a6)
no_intuition:
	rts

_close_gadtools:						; zamkniėcie gadtools.library
	move.l	gadtools_base(pc),d0
	beq		no_gadtools
	move.l	d0,a1
	move.l	EXECBASE,a6
	jsr		_LVOCloseLibrary(a6)
no_gadtools:
	rts

_close_graphics:						; zamkniėcie graphics.library
	move.l	graphics_base(pc),d0
	beq		no_graphics
	move.l	d0,a1
	move.l	EXECBASE,a6
	jsr		_LVOCloseLibrary(a6)
no_graphics:
	rts

_close_reqtools:						; zamkniėcie reqtools.library
	move.l	reqtools_base(pc),d0
	beq		no_reqtools
	move.l	d0,a1
	move.l	EXECBASE,a6
	jsr		_LVOCloseLibrary(a6)
no_reqtools:
	rts

dos_name:		dc.b 'dos.library',0
				even
intuition_name:	dc.b 'intuition.library',0
				even
graphics_name:	dc.b 'graphics.library',0
				even
reqtools_name:	dc.b 'reqtools.library',0
				even
gadtools_name:	dc.b 'gadtools.library',0
				even

dos_base:		dc.l 0
intuition_base:	dc.l 0
graphics_base:	dc.l 0
reqtools_base:	dc.l 0
gadtools_base:	dc.l 0
;------------------------------------------------------------------
_create_menu:						; tworzenie menu
	move.l	gadtools_base(pc),a6
	lea		_program_menu,a0
	move.l	#0,a1
	jsr		_LVOCreateMenusA(A6)
	move.l	d0,menubase
	tst.l	d0
	rts

_free_menu:							; zwalnianie pamiėci zajmowanej
	tst.l	menubase				; przez menu
	beq		.no_menu
	move.l	menubase(pc),a0
	move.l	gadtools_base(pc),a6
	jsr		_LVOFreeMenus(a6)
.no_menu:
	rts
;------------------------------------------------------------------
WIDTH = 272		; szerokoōź naszego okienka
HEIGHT = 76-8	; wysokoōź naszego okna, a poniūej struktura 'NewWindow'

_open_window:						; stworzenie gadūetów i otworzenie okna
	lea		WindowDef(pc),a0
	move.w	win_x(pc),(a0)+
	move.w	win_y(pc),(a0)

	move.l	intuition_base(pc),a6
	lea		publicname,a0
	jsr		_LVOGetDefaultPubScreen(a6)
	lea		publicname,a0					
	move.l	intuition_base(pc),a6
	jsr		_LVOLockPubScreen(a6)		; pobranie adresu z defaultowego ekranu publicznego
	move.l	d0,wb_base
	beq		_wb_error

		move.l	wb_base(pc),a0
		move.l	intuition_base(pc),a6
		jsr		_LVOGetScreenDrawInfo(a6)	; pobranie informacji o ekranie
		tst.l	d0
		beq		error_draw_info				; skok, gdy siė nie udaīo
		move.l	d0,a0				; a0 <- DrawInfo
		move.l	dri_Font(a0),a0		; a0 <- struktura opisujāca font
		move.w	tf_YSize(a0),d0		; d0 <- wysokoōź fontu
		lea		WindowDef,a0		; a0 <- adres okna, które mamy otworzyź
		move.w	#HEIGHT,nw_Height(a0)	; wpisanie odpowiedniej wysokoōci okna...
		add.w	d0,nw_Height(a0)	; ... i dodanie do tej wartoōci wysokoōci czcionki ekranowej

error_draw_info:
	move.l	wb_base(pc),a0
	move.l	#0,a1
	move.l	gadtools_base(pc),a6
	jsr		_LVOGetVisualInfoA(a6)	; pobranie informacji VisualInfo dla gadtools.library
	move.l	d0,visual_info
	beq		_vi_error

	move.l	gadtools_base(pc),a6
	move.l	menubase(pc),a0
	move.l	visual_info(pc),a1
	lea		_menu_taglist(pc),a2
	jsr		_LVOLayoutMenusA(A6)

	lea		glist(pc),a0
	move.l	gadtools_base(pc),a6
	jsr		_LVOCreateContext(a6)	; stworzenie zaczātku gadūetów dla gadtools.library
	move.l	d0,gad
	beq		_free_visual

	bsr		_create_gadgets			; stworzenie gadūetów

		move.l	wb_base(pc),d0
		move.l	d0,w_public+4
	move.l	intuition_base(pc),a6
	lea		WindowDef(pc),a0		; a0 <- adres struktury NewWindow
	lea		WindowTagList(pc),a1	; a1 <- adres tagów dla okna
	jsr		_LVOOpenWindowTagList(a6)		; otwarcie okna
	move.l	d0,window_base
	bsr		UnLockScreen			; odblokowanie ekranu publicznego
	move.l	window_base(pc),d0
	beq		_free_context_visual

	move.l	window_base(pc),a0
	move.l	menubase(pc),a1
	move.l	intuition_base(pc),a6
	jsr		_LVOSetMenuStrip(a6)	; przywiāzanie menu do okna
	tst.l	d0
	beq		_no_menu_strip

		move.l	gadtools_base(pc),a6
		move.l	window_base(pc),a0
		move.l	#0,a1
		jsr		_LVOGT_RefreshWindow(a6)	; jeszcze naleūy "odōwierzyź" okno

		bsr		_dma_check_refresh	; odōwieūenie gadūetu DMA (z fajeczkā)
	
	move.l	window_base(pc),d0		; przy wyjōciu do D0 <- baza okna
	rts

_no_menu_strip:
	move.l	intuition_base(pc),a6
	move.l	window_base(pc),a0
	jsr		_LVOCloseWindow(a6)			; zamkniėcie okna
_free_context_visual:
	move.l	gadtools_base(pc),a6
	move.l	glist(pc),a0
	jsr		_LVOFreeGadgets(a6)			; zwalnianie pamiėci zajmowanej przez gadūety
	move.l	#0,glist
	move.l	#0,gad
_free_visual:
	move.l	gadtools_base(pc),a6
	move.l	visual_info(pc),a0
	jsr		_LVOFreeVisualInfo(a6)		; zwolnienie VisualInfo
	move.l	#0,visual_info
_vi_error:
	bsr		UnLockScreen				; odblokowanie ekranu publicznego
_wb_error:
	move.l	#0,wb_base
	moveq	#0,d0
	rts

UnLockScreen:
	move.l	#0,a0
	move.l	wb_base(pc),a1
	move.l	intuition_base(pc),a6
	jsr		_LVOUnlockPubScreen(a6)		; odblokowanie ekranu publicznego
	rts

_close_window:						; zamkniėcie okna
	move.l	window_base(pc),a0
	move.w	wd_LeftEdge(a0),win_x
	move.w	wd_TopEdge(a0),win_y
		move.l	intuition_base(pc),a6
		move.l	window_base(pc),d0
		beq		no_window				; jeōli okna nie ma, to nie ma co zamykaź
		move.l	d0,a0
		jsr		_LVOClearMenuStrip(a6)
	move.l	intuition_base(pc),a6
	move.l	window_base(pc),a0
	jsr		_LVOCloseWindow(a6)			; zamkniėcie okna
		move.l	gadtools_base(pc),a6
		move.l	glist(pc),a0
		jsr		_LVOFreeGadgets(a6)		; zwolnienie pamiėci gadūetów
		move.l	#0,glist
		move.l	#0,gad
	move.l	visual_info(pc),a0
	move.l	gadtools_base(pc),a6
	jsr		_LVOFreeVisualInfo(a6)		; zwolnienie VisualInfo
	move.l	#0,visual_info
no_window:
	move.l	#0,window_base
	moveq	#0,d0
	rts

win_x:	dc.w	170
win_y:	dc.w	14

WindowDef:
	dc.w	170,14		; wsp. x, wsp. y
	dc.w	WIDTH,HEIGHT		; szerokoōź (x) , wysokoōź (y)
	dc.b	0			; kolor detali w oknie
	dc.b	1			; kolor wypeīnieļ w oknie
	dc.l	IDCMP_CLOSEWINDOW | IDCMP_GADGETUP | IDCMP_MENUPICK	| IDCMP_VANILLAKEY	; flagi IDCMP
WF:	dc.l	WFLG_CLOSEGADGET | WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_GIMMEZEROZERO | WFLG_SUPER_BITMAP	| WFLG_NEWLOOKMENUS | WFLG_ACTIVATE  ; flagi wyglādu okna
GS:	dc.l	0			; adres pierwszej struktury gadgetu
	dc.l	0			; CheckMark
	dc.l	WindowName	; nazwa okna (adres)
	dc.l	0			; wskaśnik struktury SCREEN (WB=0)
WB:	dc.l	HiQ_bitmap	; adres struktury BITMAP (wykorzystamy go, bo mamy tīo do okienka)
	dc.w	0,0			; minimalna szerokoōź/wysokoōź okna
	dc.w	200,100		; max. szer/wys okna
	dc.w	WBENCHSCREEN	; typ okna
	dc.l	0
WindowTagList:
w_public:	dc.l	WA_PubScreen,0
			dc.l	WA_PubScreenFallBack,1
			dc.l	TAG_DONE,TAG_DONE
WindowName:	dc.b	'HiQ by MICHAL JARZYNSKI',0		; tytuīowy napis w oknie
window_base:	dc.l 0		; tu przechowujemy adres otworzonego okna
wb_base:		dc.l 0		; ... adres publicznego ekranu
visual_info:	dc.l 0		; ... adres struktury VisualInfo
gad:	dc.l 0			; tu przechowujemy tymczasowy adres gadūetu
glist:	dc.l 0			; tu chowamy adres poczātku listy gadūetów
menubase:	dc.l	0
dma_check:	dc.b	0,0

_dma_check_refresh:					; procedurka odōwierzajāca gadūety
	clr.l	d0
	move.b	dma_check(pc),d0
	move.l	d0,dma_tl+4
	move.l	gad5(pc),a0
	move.l	window_base(pc),a1
	move.l	#0,a2
	lea		dma_tl(pc),a3
	move.l	gadtools_base(pc),a6
	jsr		_LVOGT_SetGadgetAttrsA(a6)
	rts

dma_tl:		dc.l	GTCB_Checked,0
			dc.l	0,0

_create_gadgets:
XS equ 15
YS equ 15
GAD_SELECT		equ	1
GAD_INFO		equ	2
GAD_MON_TEXT	equ	3
GAD_MON_ID		equ	4
GAD_DMA			equ	5
GAD_GO			equ	6
GAD_QUIT		equ	7

	move.l	gad(pc),GS
	lea		TextAttr_topaz8,a0		; wpisujemy do gadūetów czcionkė TOPAZ-8
	move.l	a0,T1
	move.l	a0,T2
	move.l	a0,T3
	move.l	a0,T4
	move.l	a0,T5
	move.l	a0,T6
	move.l	a0,T7
	move.l	visual_info(pc),D0		; teraz uzupeīniamy wszystkie gadūety
	move.l	d0,V1				; adresem prywatnej struktury VisualInfo
	move.l	d0,V2	
	move.l	d0,V3
	move.l	d0,V4
	move.l	d0,V5
	move.l	d0,V6
	move.l	d0,V7

	move.l	gadtools_base(pc),a6		; tworzymy pierwszy BUTTON-gadūet
	move.l	#BUTTON_KIND,d0			; z napisem
	move.l	gad(pc),a0					;              'SELECT'
	lea		_gadget_1,a1
	lea		_tag_1,a2
	jsr		_LVOCreateGadgetA(a6)
	move.l	d0,gad1
	move.l	d0,gad

		move.l	gadtools_base(pc),a6	; tworzymy drugi BUTTON-gadūet
		move.l	#BUTTON_KIND,d0		; z napisem
		move.l	gad(pc),a0				;             'INFO MODE'
		lea		_gadget_2,a1
		lea		_tag_2,a2
		jsr		_LVOCreateGadgetA(a6)
		move.l	d0,gad2
		move.l	d0,gad

	move.l	gadtools_base(pc),a6		; 3-ci > TEXT-gadūet
	move.l	#TEXT_KIND,d0			; zawierajācy nazwė wybranego monitora
	move.l	gad(pc),a0					; i trybu graficznego
	lea		_gadget_3,a1
	lea		_tag_3,a2
	jsr		_LVOCreateGadgetA(a6)
	move.l	d0,gad3
	move.l	d0,gad

		move.l	gadtools_base(pc),a6	; 4-ty > TEXT-gadūet zawierajācy
		move.l	#TEXT_KIND,d0		; rodzaj monitora i tryb graficzny
		move.l	gad(pc),a0				; w postaci HEX'a (8 cyfr)
		lea		_gadget_4,a1
		lea		_tag_4,a2
		jsr		_LVOCreateGadgetA(a6)
		move.l	d0,gad4
		move.l	d0,gad

	move.l	gadtools_base(pc),a6		; 5-ty > CHECKBOX-gadūet do wyīāczania
	move.l	#CHECKBOX_KIND,d0		; kanaīów DMA podczas przeīāczania
	move.l	gad(pc),a0					; na inny monitor
	lea		_gadget_5,a1
	lea		_tag_5,a2
	jsr		_LVOCreateGadgetA(a6)
	move.l	d0,gad5
	move.l	d0,gad

		move.l	gadtools_base(pc),a6	; 6-ty > BUTTON-gadūet
		move.l	#BUTTON_KIND,d0		;          przycisk
		move.l	gad(pc),a0				;                   'GO !'
		lea		_gadget_6,a1
		lea		_tag_6,a2
		jsr		_LVOCreateGadgetA(a6)
		move.l	d0,gad6
		move.l	d0,gad

		move.l	gadtools_base(pc),a6	; 7-my > BUTTON-gadūet
		move.l	#BUTTON_KIND,d0		;          przycisk
		move.l	gad(pc),a0				;                   'Quit'
		lea		_gadget_7,a1
		lea		_tag_7,a2
		jsr		_LVOCreateGadgetA(a6)
		move.l	d0,gad7
		move.l	d0,gad

	rts
gad1:	dc.l	0
gad2:	dc.l	0
gad3:	dc.l	0
gad4:	dc.l	0
gad5:	dc.l	0
gad6:	dc.l	0
gad7:	dc.l	0

;-------------------------------------------------------------------------
TextAttr_topaz8:			; struktura opisujāca czcionkė Topaz 8
	dc.l	topaz_name		; pointer do nazwy czcionki
	dc.w	8				; wysokoōź
	dc.b	FS_NORMAL		; styl czcionki
	dc.b	FPF_ROMFONT		; rodzaj fontu
topaz_name:
	dc.b	'topaz.font',0
			even
;-------------------------------------------------------------------------
; GADGET PIERWSZY - PRZYCISK "SELECT"
_tag_1:
	dc.l	GT_Underscore,"_"	; znak, który poprzedza podreōlone litery w gadūetach
	dc.l	0,0
_gadget_1:
	dc.w	XS+0,YS+0			; pozycja x,y gadgetu
	dc.w	8*6+22,13			; szer-x,wys-y
	dc.l	_text_1			; tekst opisujācy gadget
T1:	dc.l	0				; wskaśnik do struktury TextAttr
	dc.w	GAD_SELECT		; nr. gadgetu
	dc.l	PLACETEXT_IN	; flagi do wyōwietlania tekstu
V1:	dc.l	0				; wskaśnik do struktury VisualInfo
	dc.l	0				; wskaśnik do danych uūytkownika
	dc.l	0
_text_1:	dc.b '_SELECT',0
			EVEN
;-----------------------------------------------------------------------
; GADGET DRUGI - PRZYCISK "INFO MODE"
_tag_2:
	dc.l	GT_Underscore,"_"	; znak, który poprzedza podreōlone litery w gadūetach
	dc.l	0,0
_gadget_2:
	dc.w	XS+64+14,YS+0			; pozycja x,y gadgetu
	dc.w	8*9+22,13			; szer-x,wys-y
	dc.l	_text_2			; tekst opisujācy gadget
T2:	dc.l	0				; wskaśnik do struktury TextAttr
	dc.w	GAD_INFO		; nr. gadgetu
	dc.l	PLACETEXT_IN	; flagi do wyōwietlania tekstu
V2:	dc.l	0				; wskaśnik do struktury VisualInfo
	dc.l	0				; wskaśnik do danych uūytkownika
	dc.l	0
_text_2:	dc.b '_INFO MODE',0
			EVEN
;-----------------------------------------------------------------------
; GADGET TRZECI - TEKST "Typ monitora"
_tag_3:
	dc.l	GTTX_Text,_text_3		; zawartoōź pola tekstowego
	dc.l	GTTX_Border,1			; gadūet ma byź z ramkā
	dc.l	GTTX_Clipped,1			; ma 'oprawiaź' tekst
	dc.l	GTTX_Justification,GTJ_CENTER	; ma centrowaź tekst
	dc.l	0,0
_gadget_3:
	dc.w	XS+0,YS+16			; pozycja x,y gadgetu
	dc.w	29*8+2,13			; szer-x,wys-y
	dc.l	0				; tekst opisujācy gadget
T3:	dc.l	0				; wskaśnik do struktury TextAttr
	dc.w	GAD_MON_TEXT	; nr. gadgetu
	dc.l	PLACETEXT_IN	; flagi do wyōwietlania tekstu
V3:	dc.l	0				; wskaśnik do struktury VisualInfo
	dc.l	0				; wskaśnik do danych uūytkownika
	dc.l	0
_text_3:	dc.b '............................',0
			EVEN
;-----------------------------------------------------------------------
; GADGET CZWARTY - TEKST "ID monitora"
_tag_4:
	dc.l	GTTX_Text,_text_4		; zawartoōź pola tekstowego
	dc.l	GTTX_Border,1			; gadūet ma byź z ramkā
	dc.l	GTTX_Clipped,1			; tekst ma byź "oprawiany"
	dc.l	GTTX_Justification,GTJ_CENTER	; centrowanie tekstu
	dc.l	0,0
_gadget_4:
	dc.w	XS+80,YS+32			; pozycja x,y gadgetu
	dc.w	9*8+2,13			; szer-x,wys-y
	dc.l	0				; tekst opisujācy gadget
T4:	dc.l	0				; wskaśnik do struktury TextAttr
	dc.w	GAD_MON_ID		; nr. gadgetu
	dc.l	PLACETEXT_IN	; flagi do wyōwietlania tekstu
V4:	dc.l	0				; wskaśnik do struktury VisualInfo
	dc.l	0				; wskaśnik do danych uūytkownika
	dc.l	0
_text_4:	dc.b '........',0
			EVEN
;-----------------------------------------------------------------------
; GADGET PIĀTY - CHECKBOX "DMA Off"
_tag_5:
	dc.l	GTCB_Scaled,1	; rozmiar gadūetu ma byź wg. wartoōci podanych w strukturze
	dc.l	0,0				; ...a nie, ūeby dostosowywaī siė do wielkoōci liter.
_gadget_5:
	dc.w	XS+213,YS+0		; pozycja x,y gadgetu
	dc.w	21,13			; szer-x,wys-y
	dc.l	_text_5			; tekst opisujācy gadget
T5:	dc.l	0				; wskaśnik do struktury TextAttr
	dc.w	GAD_DMA			; nr. gadgetu
	dc.l	PLACETEXT_LEFT	; flagi do wyōwietlania tekstu
V5:	dc.l	0				; wskaśnik do struktury VisualInfo
	dc.l	0				; wskaśnik do danych uūytkownika
	dc.l	0
_text_5:	dc.b 'DMA',0
			EVEN
;-----------------------------------------------------------------------
; GADGET SZÓSTY - PRZYCISK "GO !"
_tag_6:
	dc.l	GT_Underscore,"_"	; znak, który poprzedza podreōlone litery w gadūetach
	dc.l	0,0
_gadget_6:
	dc.w	XS+8,YS+32			; pozycja x,y gadgetu
	dc.w	64,13			; szer-x,wys-y
	dc.l	_text_6			; tekst opisujācy gadget
T6:	dc.l	0				; wskaśnik do struktury TextAttr
	dc.w	GAD_GO			; nr. gadgetu
	dc.l	PLACETEXT_IN	; flagi do wyōwietlania tekstu
V6:	dc.l	0				; wskaśnik do struktury VisualInfo
	dc.l	0				; wskaśnik do danych uūytkownika
	dc.l	0
_text_6:	dc.b '_GO !',0
			EVEN
;-----------------------------------------------------------------------
; GADGET SIÓDMY - PRZYCISK "QUIT"
_tag_7:
	dc.l	GT_Underscore,"_"	; znak, który poprzedza podreōlone litery w gadūetach
	dc.l	0,0
_gadget_7:
	dc.w	XS+162,YS+32			; pozycja x,y gadgetu
	dc.w	64,13			; szer-x,wys-y
	dc.l	_text_7			; tekst opisujācy gadget
T7:	dc.l	0				; wskaśnik do struktury TextAttr
	dc.w	GAD_QUIT		; nr. gadgetu
	dc.l	PLACETEXT_IN	; flagi do wyōwietlania tekstu
V7:	dc.l	0				; wskaśnik do struktury VisualInfo
	dc.l	0				; wskaśnik do danych uūytkownika
	dc.l	0
_text_7:	dc.b '_Quit',0
			EVEN
;-------------------------------------------------------------------------
_load_config:							; procedura īadujāca plik konfiguracyjny
	lea		load_config_fn_def(pc),a1	; i ustawiajāca konfiguracjė
	lea		load_config_filename,a2
	move.l	(a1)+,(a2)+
	move.l	(a1)+,(a2)+
	move.w	(a1)+,(a2)+

	move.l	#config_name0,d1		; najpierw probujemy odczytaź plik konfiguracyjny
		move.l	#MODE_OLDFILE,d2	; z katalogu bieūācego
		move.l	dos_base(pc),a6
		jsr		_LVOOpen(a6)
		move.l	d0,fh
		bne		exist_config
	move.l	#config_name,d1			; potem próba odczytu z katalogu, w którym
		move.l	#MODE_OLDFILE,d2	; znajduje siė sam program (PROGDIR:)
		move.l	dos_base(pc),a6
		jsr		_LVOOpen(a6)
		move.l	d0,fh
		bne		exist_config
	move.l	#config_name2,d1		; nastėpnie siėgamy po katalog S:
		move.l	#MODE_OLDFILE,d2
		move.l	dos_base(pc),a6
		jsr		_LVOOpen(a6)
		move.l	d0,fh
		bne		exist_config
	move.l	#config_name3,d1	; i na koļcu taki dziki katalog SYS:PREFS/Presets

_load_config_late:					; od tād zaczyna siė ta procedura, gdy
	move.l	#MODE_OLDFILE,d2		; wywoīywana jest po FileRequesterze
	move.l	dos_base(pc),a6
	jsr		_LVOOpen(a6)
	move.l	d0,fh
	beq		error_open_config_file
exist_config:
		move.l	d0,d1
		move.l	#ConfigData,d2
		move.l	#16+34+256+256,d3
		move.l	dos_base(pc),a6
		jsr		_LVORead(a6)
		tst.l	d0
		beq		error_read_config_file
		lea		ConfigData,a0
		move.l	(a0),d0
		cmpi.l	#"HiQ1",d0
		bne		.error_config_type
		bsr		set_configuration
.error_config_type:
error_read_config_file:
	move.l	fh,d1
	move.l	dos_base(pc),a6
	jsr		_LVOClose(a6)
error_open_config_file:
	rts
config_name0:	dc.b	"HiQ.prefs",0
config_name:	dc.b	"PROGDIR:HiQ.prefs",0
config_name2:	dc.b	"S:HiQ.prefs",0
config_name3:	dc.b	"SYS:PREFS/Presets/HiQ.prefs",0
				even
fh:				dc.l	0
;-------------------------------------------------------------------------
_make_mwb:						; skopiowanie podkīadu okna
	lea		_backdrop,a0
	lea		_backdrop_real,a1
	move.l	#1632-1,d0
.loop:
	move.l	(a0)+,(a1)+
	dbf		d0,.loop
	rts
;-------------------------------------------------------------------------
_remap_backdrop:			; PROCEDURA CZYSZCZĀCA TĪO OKNA, POZOSTAWIAJĀCA RAMKĖ
							; Z NAPISEM "SCREEN MODE"
	lea		_backdrop_real,a0		; a0 <- adres bitplanu nr. 0
	lea		2176*1(a0),a1		; a1 <- adres bitplanu nr. 1
	lea		2176*2(a0),a2		; a2 <- adres bitplanu nr. 2
	move.l	#544-1,d3			; d3 <- iloōź dīugich sīów do obrobienia
.loop:
	move.l	(a2),d2
	clr.l	(a2)+
	not.l	d2
	and.l	d2,(a0)
	and.l	d2,(a1)
	move.l	(a0),d0
	move.l	(a1),d1
	not.l	d0
	not.l	d1
	and.l	d0,(a1)+
	and.l	d1,(a0)+
	dbf		d3,.loop
	rts
;------------------------------------------------------------
_menu_taglist:
	dc.l	GTMN_NewLookMenus,1
	dc.l	0,0

MENU	MACRO
	dc.b	\1,0		; TYPE
	dc.l	\2,\3		; LABEL,COMM_KEY
	dc.w	\4			; TYPE
	dc.l	0,\5		; MUT_EX,USER_DATA
\6	equ	(\9*2048)+(\8*32)+\7
		ENDM	

MENM	MACRO
	dc.b	\1,0		; TYPE
	dc.l	\2,0		; LABEL,(COMM_KEY)
	dc.w	\3			; TYPE
	dc.l	\5,\4		; MUT_EX,USER_DATA
\6	equ	(\9*2048)+(\8*32)+\7
		ENDM	

M1	equ	NM_TITLE
M2	equ	NM_ITEM
M3	equ	NM_SUB
M_	equ	NM_BARLABEL
CH	equ	CHECKIT | MENUTOGGLE

P1 = %11111
P2 = %111111
P3 = %11111

_program_menu:
	MENU	M1,m_0,0,0,0,							M_PROGRAM,		0,P2, P3
	 MENU	M2,m_0_0,K_L,0,0,							M_LOAD_MON,		0, 0, P3
	 MENU	M2,M_,0,0,0,							x1,				0, 1, P3
	 MENU	M2,m_0_1,K_O,0,0,							M_LOAD_PREFS,	0, 2, P3
	 MENU	M2,m_0_2,K_P,0,0,							M_SAVE_PREFS,	0, 3, P3
	 MENU	M2,m_0_3,0,0,0,							M_PRI,			0, 4, P3
	  MENM	M3,m_0_3_0,CHECKIT,0,%111111110,		M_PRI_25,		0, 4, 0
	  MENM	M3,m_0_3_1,CHECKIT,0,%111111101,		M_PRI_15,		0, 4, 1
	  MENM	M3,m_0_3_2,CHECKIT,0,%111111011,		M_PRI_5,		0, 4, 2
	  MENM	M3,m_0_3_3,CHECKIT,0,%111110111,		M_PRI_1,		0, 4, 3
	  MENM	M3,m_0_3_4,CHECKIT|CHECKED,0,%111101111,	M_PRI_0,	0, 4, 4
	  MENM	M3,m_0_3_5,CHECKIT,0,%111011111,		M_PRI__1,		0, 4, 5
	  MENM	M3,m_0_3_6,CHECKIT,0,%110111111,		M_PRI__5,		0, 4, 6
	  MENM	M3,m_0_3_7,CHECKIT,0,%101111111,		M_PRI__15,		0, 4, 7
	  MENM	M3,m_0_3_8,CHECKIT,0,%011111111,		M_PRI__25,		0, 4, 8
	 MENU	M2,M_,0,0,0,							x2,				0, 5, P3
	 MENU	M2,m_0_4,K_M,CH|CHECKED,0,				M_MWB,			0, 6, P3
	 MENU	M2,m_0_5,K_C,0,0,							M_LOAD_MON_S,	0, 7, P3
	 MENU	M2,M_,0,0,0,							x3,				0, 8, P3
	 MENU	M2,m_0_6,K_A,0,0,							M_ABOUT,		0, 9, P3
	 MENU	M2,m_0_7,K_Q,0,0,							M_QUIT,			0,10, P3
	MENU	M1,m_1,0,0,0,			M_PAR,	  1,P2,P3
	 MENU	M2,m_1_0,0,CH,0,		M_DATA0,  1, 0,P3		
	 MENU	M2,m_1_1,0,CH,0,		M_DATA1,  1, 1,P3
	 MENU	M2,m_1_2,0,CH,0,		M_DATA2,  1, 2,P3
	 MENU	M2,m_1_3,0,CH,0,		M_DATA3,  1, 3,P3
	 MENU	M2,m_1_4,0,CH,0,		M_DATA4,  1, 4,P3
	 MENU	M2,m_1_5,0,CH,0,		M_DATA5,  1, 5,P3
	 MENU	M2,m_1_6,0,CH,0,		M_DATA6,  1, 6,P3
	 MENU	M2,m_1_7,0,CH,0,		M_DATA7,  1, 7,P3
	 MENU	M2,m_1_8,0,CH,0,		M_BUSY,   1, 8,P3
	 MENU	M2,m_1_9,0,CH,0,		M_POUT,   1, 9,P3
	 MENU	M2,m_1_10,0,CH,0,		M_SEL,    1,10,P3
	MENU	M1,m_2,0,0,0,			M_PAR_S,	2,P2,P3
	 MENU	M2,m_2_0,0,CH,0,		M_S_DATA0,	2, 0,P3
	 MENU	M2,m_2_1,0,CH,0,		M_S_DATA1,	2, 1,P3
	 MENU	M2,m_2_2,0,CH,0,		M_S_DATA2,	2, 2,P3
	 MENU	M2,m_2_3,0,CH,0,		M_S_DATA3,	2, 3,P3
	 MENU	M2,m_2_4,0,CH,0,		M_S_DATA4,	2, 4,P3
	 MENU	M2,m_2_5,0,CH,0,		M_S_DATA5,	2, 5,P3
	 MENU	M2,m_2_6,0,CH,0,		M_S_DATA6,	2, 6,P3
	 MENU	M2,m_2_7,0,CH,0,		M_S_DATA7,	2, 7,P3
	 MENU	M2,m_2_8,0,CH,0,		M_S_BUSY,	2, 8,P3
	 MENU	M2,m_2_9,0,CH,0,		M_S_POUT,	2, 9,P3
	 MENU	M2,m_2_10,0,CH,0,		M_S_SEL,	2,10,P3
	MENU	M1,m_3,0,0,0,			M_SERIAL,  3,P2,P3
	 MENU	M2,m_3_0,0,CH,0,		M_RTS,	   3, 0,P3
	 MENU	M2,m_3_1,0,CH,0,		M_CTS,	   3, 1,P3
	 MENU	M2,m_3_2,0,CH,0,		M_DSR,	   3, 2,P3
	 MENU	M2,m_3_3,0,CH,0,		M_DCD,	   3, 3,P3
	 MENU	M2,m_3_4,0,CH,0,		M_DTR,	   3, 4,P3
	 MENU	M2,M_,0,0,0,			x4,		   3, 5,P3
	 MENU	M2,m_3_5,0,CH,0,		M_FIR1,	   3, 6,P3
	MENU	M1,m_4,0,0,0,			M_SERIAL_S,	4,P2,P3
	 MENU	M2,m_4_0,0,CH,0,		M_S_RTS,	4, 0,P3
	 MENU	M2,m_4_1,0,CH,0,		M_S_CTS,	4, 1,P3
	 MENU	M2,m_4_2,0,CH,0,		M_S_DSR,	4, 2,P3
	 MENU	M2,m_4_3,0,CH,0,		M_S_DCD,	4, 3,P3
	 MENU	M2,m_4_4,0,CH,0,		M_S_DTR,	4, 4,P3
	 MENU	M2,M_,0,0,0,			x5,			4, 5,P3
	 MENU	M2,m_4_5,0,CH,0,		M_S_FIR1,	4, 6,P3
	MENU	M1,m_5,0,0,0,				M_DMA,		5,P2,P3
	 MENU	M2,m_5_0,0,CH|CHECKED,0,	M_PLANES,	5, 0,P3
	 MENU	M2,m_5_1,0,CH,0,	M_COPPER,	5, 1,P3
	 MENU	M2,m_5_2,0,CH,0,	M_BLITTER,	5, 2,P3
	 MENU	M2,m_5_3,0,CH,0,	M_SPRITES,	5, 3,P3
	 MENU	M2,M_,0,0,0,				x6,			5, 4,P3
	 MENU	M2,m_5_4,0,CH,0,			M_DISK,		5, 5,P3
	 MENU	M2,m_5_5,0,CH,0,			M_AUD3,		5, 6,P3
	 MENU	M2,m_5_6,0,CH,0,			M_AUD2,		5, 7,P3
	 MENU	M2,m_5_7,0,CH,0,			M_AUD1,		5, 8,P3
	 MENU	M2,m_5_8,0,CH,0,			M_AUD0,		5, 9,P3

	MENU	NM_END,0,0,0,0,					x0,0,0,0

;---------------------------------------
	MACRO MENU_NAME
		\1	equ	\4*2048+\3*32+\2
	ENDM
m_0:	dc.b	'Program',0
m_0_0:	dc.b	'Load monitor',0
m_0_1:	dc.b	'Load prefs',0
m_0_2:	dc.b	'Save prefs',0
m_0_3:	dc.b	'Priority',0
m_0_3_0:	dc.b	'+25',0
m_0_3_1:	dc.b	'+15',0
m_0_3_2:	dc.b	'+ 5',0
m_0_3_3:	dc.b	'+ 1',0
m_0_3_4:	dc.b	'  0',0
m_0_3_5:	dc.b	'- 1',0
m_0_3_6:	dc.b	'- 5',0
m_0_3_7:	dc.b	'-15',0
m_0_3_8:	dc.b	'-25',0
m_0_4:	dc.b	'MagicWB mode',0
m_0_5:	dc.b	'Load mon. at start',0
m_0_6:	dc.b	'About...',0
m_0_7:	dc.b	'Quit...',0
;---------------------------------------
m_1:	dc.b	'Parallel',0
m_1_0:	dc.b	'DATA_0  ( 9)',0
m_1_1:	dc.b	'DATA_1  ( 8)',0
m_1_2:	dc.b	'DATA_2  ( 7)',0
m_1_3:	dc.b	'DATA_3  ( 6)',0
m_1_4:	dc.b	'DATA_4  ( 5)',0
m_1_5:	dc.b	'DATA_5  ( 4)',0
m_1_6:	dc.b	'DATA_6  ( 3)',0
m_1_7:	dc.b	'DATA_7  ( 2)',0
m_1_8:	dc.b	'BUSY    (11)',0
m_1_9:	dc.b	'POUT    (12)',0
m_1_10:	dc.b	'SEL     (13)',0
;---------------------------------------
m_2:	dc.b	'Parallel Set',0
m_2_0:	dc.b	'High DATA 0 ( 9)',0
m_2_1:	dc.b	'High DATA 1 ( 8)',0
m_2_2:	dc.b	'High DATA 2 ( 7)',0
m_2_3:	dc.b	'High DATA 3 ( 6)',0
m_2_4:	dc.b	'High DATA 4 ( 5)',0
m_2_5:	dc.b	'High DATA 5 ( 4)',0
m_2_6:	dc.b	'High DATA 6 ( 3)',0
m_2_7:	dc.b	'High DATA 7 ( 2)',0
m_2_8:	dc.b	'High BUSY   (11)',0
m_2_9:	dc.b	'High POUT   (12)',0
m_2_10:	dc.b	'High SEL    (13)',0
;---------------------------------------
m_3:	dc.b	'Serial',0
m_3_0:	dc.b	'RTS   ( 4)',0
m_3_1:	dc.b	'CTS   ( 5)',0
m_3_2:	dc.b	'DSR   ( 6)',0
m_3_3:	dc.b	'DCD   ( 8)',0
m_3_4:	dc.b	'DTR   (20)',0
m_3_5:	dc.b	'FIR1  ( 6)',0
;---------------------------------------
m_4:	dc.b	'Serial Set',0
m_4_0:	dc.b	'Low RTS  ( 4)',0
m_4_1:	dc.b	'Low CTS  ( 5)',0
m_4_2:	dc.b	'Low DSR  ( 6)',0
m_4_3:	dc.b	'Low DCD  ( 8)',0
m_4_4:	dc.b	'Low DTR  (20)',0
m_4_5:	dc.b	'High FIR1 ( 6)',0
;---------------------------------------
m_5:	dc.b	'DMA Off',0
m_5_0:	dc.b	'Planes  (BPL)',0
m_5_1:	dc.b	'Copper  (COP)',0
m_5_2:	dc.b	'Blitter (BLT)',0
m_5_3:	dc.b	'Sprites (SPR)',0
m_5_4:	dc.b	'Disk    (DSK)',0
m_5_5:	dc.b	'Audio_3 (AU3)',0
m_5_6:	dc.b	'Audio_2 (AU2)',0
m_5_7:	dc.b	'Audio_1 (AU1)',0
m_5_8:	dc.b	'Audio_0 (AU0)',0

; Program  Parallel  Parallel Set  Serial  Serial Set  DMA Off
	even

K_A:	dc.b	"A",0
K_L:	dc.b	"L",0
K_O:	dc.b	"O",0
K_P:	dc.b	"P",0
K_Q:	dc.b	"Q",0
K_M:	dc.b	"M",0
K_C:	dc.b	"C",0
	dc.l	0,0,0,0
