
;	NewSysLook V1.0
;	by Preben Nielsen.

;	This is Public Domain.

;   This program will change the images for:
;    a: The screen/window UpFront and DownBack gadgets
;    b: The window close and sizing gadgets
;   When run, this program just replaces the old gadgets/images with
; the new, and doesn't use any extra memory. Running the program will
; give you back the old gadgets/images.
;   The program works with KickStart1.2 and 1.3, but may not work with
; future versions without modifications, because it changes fields
; in the private part of intuitionbase.

;	OPT O+
;	OPT O1+		;Tells when a branch could be optimised to short
;	OPT i+		;Tells when '#' is probably missing

	incdir	"INCLUDE:"
	include "exec/exec_lib.i"
	include "graphics/graphics_lib.i"
	include "intuition/intuition.i"
	include "intuition/intuitionbase.i"
	include "intuition/intuition_lib.i"
	include "libraries/dos.i"
	include "libraries/dos_lib.i"
	include "libraries/dosextens.i"

LoadBase	MACRO
		IFNC		'\1','ExecBase'
		movea.l		\1(PC),A6
		ENDC
		IFC		'\1','ExecBase'
		movea.l		4.W,A6
		ENDC
		ENDM
CallLib		MACRO
		jsr		_LVO\1(A6)
		ENDM
Call		MACRO
		bsr		\1
		ENDM
Push		MACRO
		movem.l		\1,-(SP)
		ENDM
Pop		MACRO
		movem.l		(SP)+,\1
		ENDM

GADGET		MACRO
		dc.l		\1
		dc.w		\2,\3,\4,\5,\6,\7,\8
		ENDM
GADGET2		MACRO
		dc.l		\1,\2,\3,\4,\5
		dc.w		\6
		dc.l		\7
		ENDM
IMAGE		MACRO
		dc.w		\1,\2,\3,\4,\5
		dc.l		\6
		dc.b		\7,\8
		dc.l		\9
		ENDM

Init		LoadBase	ExecBase
		suba.l		A1,A1
		CallLib		FindTask		;Find us
		movea.l		D0,A2
		tst.l		pr_CLI(A2)
		bne.S		CLIAndWBStartup
WBenchStartup	lea		pr_MsgPort(A2),A0
		CallLib		WaitPort		;Wait for a message
		lea		pr_MsgPort(A2),A0
		CallLib		GetMsg			;then get it
		move.l		D0,WBenchMsg		;Save it for later reply
CLIAndWBStartup	lea		IntName(PC),A1
		CallLib		OldOpenLibrary
		move.l		D0,IntBase
		bne.S		Main
Exit		LoadBase	ExecBase
		move.l		IntBase(PC),D0
		beq.S		ReplyWB
		movea.l		D0,A1
		CallLib		CloseLibrary
ReplyWB		move.l		WBenchMsg(PC),D0
		beq.S		AllDone
		CallLib		Forbid
		movea.l		D0,A1
		CallLib		ReplyMsg		;Reply WBenchMessage if we are started from WB
AllDone		moveq		#0,D0
		rts

Main		LoadBase	ExecBase
		CallLib		Forbid
		move.w		#SYSGADGET+SIZING,D0
		Call		FindGadget
		move.l		D0,A0
		move.l		gg_GadgetRender(A0),A0
		move.l		ig_ImageData(A0),A0
		lea		SizingData(PC),A1
		moveq		#2*9-1,D0
CmpLoop		cmp.b		(A0)+,(A1)+		;Has the new image already been installed
		bne.S		InstallNew
		dbf		D0,CmpLoop
InstallOld	lea		OWUpFrontGad(PC),A0	;Gadget
		Call		InstallGadget
		lea		OWDownBackGad(PC),A0
		Call		InstallGadget
		lea		OSizingGad(PC),A0
		Call		InstallGadget
		lea		OCloseGad(PC),A0
		Call		InstallGadget
		lea		OWDragGad(PC),A0
		Call		InstallGadget
		lea		OSUpFrontGad(PC),A0
		Call		InstallGadget
		lea		OSDownBackGad(PC),A0
		Call		InstallGadget
		lea		OSDragGad(PC),A0
		Call		InstallGadget
		bra.S		RefreshWindows
InstallNew	lea		WUpFrontGad(PC),A0	;Gadget
		Call		InstallGadget
		lea		WDownBackGad(PC),A0
		Call		InstallGadget
		lea		SizingGad(PC),A0
		Call		InstallGadget
		lea		CloseGad(PC),A0
		Call		InstallGadget
		lea		WDragGad(PC),A0
		Call		InstallGadget
		lea		SUpFrontGad(PC),A0
		Call		InstallGadget
		lea		SDownBackGad(PC),A0
		Call		InstallGadget
		lea		SDragGad(PC),A0
		Call		InstallGadget
RefreshWindows	LoadBase	IntBase
		move.l		ib_FirstScreen(A6),A4
RSLoop		move.l		A4,D0
		beq.S		EndRS
		move.l		sc_FirstWindow(A4),A5
RWLoop		move.l		A5,D0
		beq.S		EndRW
		move.l		D0,A0
		CallLib		RefreshWindowFrame
		move.l		wd_NextWindow(A5),A5
		bra.S		RWLoop
EndRW		move.l		sc_NextScreen(A4),A4
		bra.S		RSLoop
EndRS		LoadBase	ExecBase
		CallLib		Forbid
		bra		Exit

;D0 = Type of Gadget to find
FindGadget	Push		D1-D7/A0-A6
		movea.l		IntBase(PC),A0
		lea		$2C6(A0),A0
SearchLoop	movea.l		(A0)+,A1
		cmp.w		gg_GadgetType(A1),D0	;GadgetType
		bne.S		SearchLoop
		move.l		A1,D0
		Pop		D1-D7/A0-A6
		rts

;A0 = Gadget
InstallGadget	Push		D0-D7/A0-A6
		move.l		A0,A5
		move.w		gg_GadgetType(A0),D0
		Call		FindGadget
		move.l		D0,A4
		move.l		A5,A0
		move.l		A4,A1
		move.l		A4,A2
		movea.l		gg_GadgetRender(A5),A5
		movea.l		gg_GadgetRender(A4),A4	;Image
		moveq		#gg_SIZEOF-1,D0
GadCopy		move.b		(A0)+,(A1)+
		dbf		D0,GadCopy
		move.l		A4,gg_GadgetRender(A2)
		move.l		A5,D0
		beq.S		DoneInstall
		move.l		A5,A0
		move.l		A4,A1
		move.l		A4,A2
		move.w		ig_Width(A5),D5
		ext.l		D5
		divu		#16,D5
		move.l		D5,D0
		swap		D0
		tst.w		D0
		beq.S		Mod16
		addq.w		#1,D5
Mod16		mulu		ig_Height(A5),D5
		mulu		ig_Depth(A5),D5
		mulu		#2,D5
		movea.l		ig_ImageData(A5),A5
		movea.l		ig_ImageData(A4),A4
		moveq		#ig_SIZEOF-1,D0
ImageCopy	move.b		(A0)+,(A1)+
		dbf		D0,ImageCopy
		move.l		A4,ig_ImageData(A2)
		move.l		A5,A0
		move.l		A4,A1
		subq.w		#1,D5
CopyData	move.b		(A0)+,(A1)+
		dbf		D5,CopyData
DoneInstall	Pop		D0-D7/A0-A6
		rts

WBenchMsg	dc.l		0
IntBase		dc.l		0
IntName		dc.b		'intuition.library',0
		EVEN

WUpFrontGad	GADGET		0,-28,0,26,10,GRELRIGHT+GADGIMAGE,RELVERIFY,SYSGADGET+WUPFRONT
		GADGET2		WUpFrontImage,0,0,0,0,0,0
WUpFrontImage	IMAGE		0,0,29,10,2,WUpFrontData,%00000011,%00000000,0
WUpFrontData	dc.l		%00001111111111111111110000011111
		dc.l		%00011011111111111111111000011111
		dc.l		%00011000111111111111111000011111
		dc.l		%00011000001111111111111000011111
		dc.l		%00011000000011111111111000011111
		dc.l		%00011000000000111111111000011111
		dc.l		%00011000000000001111111000011111
		dc.l		%00011000000000000011111000011111
		dc.l		%00011000000000000000111000011111
		dc.l		%00001111111111111111110000011111
		dc.l		%00000000000000000000000000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000000000000000000000000000000

WDownBackGad	GADGET		0,-52,0,24,10,GRELRIGHT+GADGIMAGE,RELVERIFY,SYSGADGET+WDOWNBACK
		GADGET2		WDownBackImage,0,0,0,0,0,0
WDownBackImage	IMAGE		0,0,24,10,2,WDownBackData,%00000011,%00000000,0
WDownBackData	dc.l		%00001111111111111111110000000000
		dc.l		%00011100000000000000011000000000
		dc.l		%00011111000000000000011000000000
		dc.l		%00011111110000000000011000000000
		dc.l		%00011111111100000000011000000000
		dc.l		%00011111111111000000011000000000
		dc.l		%00011111111111110000011000000000
		dc.l		%00011111111111111100011000000000
		dc.l		%00011111111111111111011000000000
		dc.l		%00001111111111111111110000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000000000000000000000000000000

SizingGad	GADGET		0,-15,-8,16,9,GRELRIGHT+GRELBOTTOM+GADGIMAGE,0,SYSGADGET+SIZING
		GADGET2		SizingImage,0,0,0,0,0,0
SizingImage	IMAGE		0,0,16,9,1,SizingData,%00000001,%00000000,0
SizingData	dc.w		%0000011111111111
		dc.w		%0001110011001111
		dc.w		%0111001100110011
		dc.w		%1100110011001111
		dc.w		%1111001100110011
		dc.w		%1100110011001111
		dc.w		%1111001100110011
		dc.w		%1100110011001111
		dc.w		%1111111111111111

CloseGad	GADGET		0,4,0,24,10,GADGIMAGE,RELVERIFY,SYSGADGET+CLOSE
		GADGET2		CloseImage,0,0,0,0,0,0
CloseImage	IMAGE		-4,0,28,10,2,CloseData,%00000011,%00000000,0
CloseData	dc.l		%11000011111111111111111100000000
		dc.l		%11000110000000000000001110000000
		dc.l		%11000110000000000000111110000000
		dc.l		%11000110000000000011111110000000
		dc.l		%11000110000000001111111110000000
		dc.l		%11000110000000111111111110000000
		dc.l		%11000110000011111111111110000000
		dc.l		%11000110001111111111111110000000
		dc.l		%11000110111111111111111110000000
		dc.l		%11000011111111111111111100000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000001111111111111111000000000
		dc.l		%00000001111111111111111000000000
		dc.l		%00000001111111111111111000000000
		dc.l		%00000001111111111111111000000000
		dc.l		%00000001111111111111111000000000
		dc.l		%00000001111111111111111000000000
		dc.l		%00000001111111111111111000000000
		dc.l		%00000001111111111111111000000000
		dc.l		%00000000000000000000000000000000

SUpFrontGad	GADGET		0,-28,0,26,10,GRELRIGHT+GADGIMAGE,RELVERIFY,SYSGADGET+SCRGADGET+SUPFRONT
		GADGET2		SUpFrontImage,0,0,0,0,0,0
SUpFrontImage	IMAGE		0,0,29,10,2,SUpFrontData,%00000011,%00000000,0
SUpFrontData	dc.l		%00001111111111111111110000011111
		dc.l		%00011000000000000000111000011111
		dc.l		%00011000000000000011111000011111
		dc.l		%00011000000000001111111000011111
		dc.l		%00011000000000111111111000011111
		dc.l		%00011000000011111111111000011111
		dc.l		%00011000001111111111111000011111
		dc.l		%00011000111111111111111000011111
		dc.l		%00011011111111111111111000011111
		dc.l		%00001111111111111111110000011111
		dc.l		%00000000000000000000000000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000000000000000000000000000000

SDownBackGad	GADGET		0,-52,0,24,10,GRELRIGHT+GADGIMAGE,RELVERIFY,SYSGADGET+SCRGADGET+SDOWNBACK
		GADGET2		SDownBackImage,0,0,0,0,0,0
SDownBackImage	IMAGE		0,0,24,10,2,SDownBackData,%00000011,%00000000,0
SDownBackData	dc.l		%00001111111111111111110000000000
		dc.l		%00011111111111111111011000000000
		dc.l		%00011111111111111100011000000000
		dc.l		%00011111111111110000011000000000
		dc.l		%00011111111111000000011000000000
		dc.l		%00011111111100000000011000000000
		dc.l		%00011111110000000000011000000000
		dc.l		%00011111000000000000011000000000
		dc.l		%00011100000000000000011000000000
		dc.l		%00001111111111111111110000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000111111111111111100000000000
		dc.l		%00000000000000000000000000000000

WDragGad	GADGET		0,0,0,0,10,GADGHNONE+GRELWIDTH,0,SYSGADGET+WDRAGGING
		GADGET2		0,0,0,0,0,0,0
SDragGad	GADGET		0,0,0,0,10,GADGHNONE+GRELWIDTH,0,SYSGADGET+SCRGADGET+SDRAGGING
		GADGET2		0,0,0,0,0,0,0

OWUpFrontGad	GADGET		0,-28,0,26,10,GRELRIGHT+GADGIMAGE,RELVERIFY,SYSGADGET+WUPFRONT
		GADGET2		OWUpFrontImage,0,0,0,0,0,0
OWUpFrontImage	IMAGE		0,0,29,10,2,OWUpFrontData,%00000011,%00000000,0
OWUpFrontData	dc.l		%00111111111111111111111100111100
		dc.l		%00110000000000000011111100111100
		dc.l		%00110000000000000000001100111100
		dc.l		%00110000001111111111001100111100
		dc.l		%00110000001111111111001100111100
		dc.l		%00110000001111111111001100111100
		dc.l		%00110000001111111111001100111100
		dc.l		%00111111001111111111001100111100
		dc.l		%00111111000000000000001100111100
		dc.l		%00111111111111111111111100111100
		dc.l		%00000000000000000000000000000000
		dc.l		%00001111111111111100000000000000
		dc.l		%00001111000000000000000000000000
		dc.l		%00001111000000000000000000000000
		dc.l		%00001111000000000000000000000000
		dc.l		%00001111000000000000000000000000
		dc.l		%00001111000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000

OWDownBackGad	GADGET		0,-52,0,24,10,GRELRIGHT+GADGIMAGE,RELVERIFY,SYSGADGET+WDOWNBACK
		GADGET2		OWDownBackImage,0,0,0,0,0,0
OWDownBackImage	IMAGE		0,0,24,10,2,OWDownBackData,%00000011,%00000000,0
OWDownBackData	dc.l		%00111111111111111111111100000000
		dc.l		%00110000000000000011111100000000
		dc.l		%00110011111111110011111100000000
		dc.l		%00110011000000000000001100000000
		dc.l		%00110011000000000000001100000000
		dc.l		%00110011000000000000001100000000
		dc.l		%00110000000000000000001100000000
		dc.l		%00111111000000000000001100000000
		dc.l		%00111111000000000000001100000000
		dc.l		%00111111111111111111111100000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000000000000000000000000000

OSizingGad	GADGET		0,-15,-8,16,9,GRELRIGHT+GRELBOTTOM+GADGIMAGE,0,SYSGADGET+SIZING
		GADGET2		OSizingImage,0,0,0,0,0,0
OSizingImage	IMAGE		0,0,16,9,1,OSizingData,%00000001,%00000000,0
OSizingData	dc.w		%1111111111111111
		dc.w		%1100000011111111
		dc.w		%1100110011111111
		dc.w		%1100000000000011
		dc.w		%1111110011110011
		dc.w		%1111110011110011
		dc.w		%1111110011110011
		dc.w		%1111110000000011
		dc.w		%1111111111111111

OCloseGad	GADGET		0,4,0,24,10,GADGIMAGE,RELVERIFY,SYSGADGET+CLOSE
		GADGET2		OCloseImage,0,0,0,0,0,0
OCloseImage	IMAGE		-4,0,28,10,2,OCloseData,%00000011,%00000000,0
OCloseData	dc.l		%11110011111111111111111111000000
		dc.l		%11110011000000000000000011000000
		dc.l		%11110011001111111111110011000000
		dc.l		%11110011001111111111110011000000
		dc.l		%11110011001111000011110011000000
		dc.l		%11110011001111000011110011000000
		dc.l		%11110011001111111111110011000000
		dc.l		%11110011001111111111110011000000
		dc.l		%11110011000000000000000011000000
		dc.l		%11110011111111111111111111000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000111100000000000000
		dc.l		%00000000000000111100000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000

OSUpFrontGad	GADGET		0,-28,0,26,10,GRELRIGHT+GADGIMAGE,RELVERIFY,SYSGADGET+SCRGADGET+SUPFRONT
		GADGET2		OSUpFrontImage,0,0,0,0,0,0
OSUpFrontImage	IMAGE		0,0,29,10,2,OSUpFrontData,%00000011,%00000000,0
OSUpFrontData	dc.l		%00111111111111111111111100111100
		dc.l		%00110000000000000011111100111100
		dc.l		%00110000000000000000001100111100
		dc.l		%00110000001111111111001100111100
		dc.l		%00110000001111111111001100111100
		dc.l		%00110000001111111111001100111100
		dc.l		%00110000001111111111001100111100
		dc.l		%00111111001111111111001100111100
		dc.l		%00111111000000000000001100111100
		dc.l		%00111111111111111111111100111100
		dc.l		%00000000000000000000000000000000
		dc.l		%00001111111111111100000000000000
		dc.l		%00001111000000000000000000000000
		dc.l		%00001111000000000000000000000000
		dc.l		%00001111000000000000000000000000
		dc.l		%00001111000000000000000000000000
		dc.l		%00001111000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000

OSDownBackGad	GADGET		0,-52,0,24,10,GRELRIGHT+GADGIMAGE,RELVERIFY,SYSGADGET+SCRGADGET+SDOWNBACK
		GADGET2		OSDownBackImage,0,0,0,0,0,0
OSDownBackImage	IMAGE		0,0,24,10,2,OSDownBackData,%00000011,%00000000,0
OSDownBackData	dc.l		%00111111111111111111111100000000
		dc.l		%00110000000000000011111100000000
		dc.l		%00110011111111110011111100000000
		dc.l		%00110011000000000000001100000000
		dc.l		%00110011000000000000001100000000
		dc.l		%00110011000000000000001100000000
		dc.l		%00110000000000000000001100000000
		dc.l		%00111111000000000000001100000000
		dc.l		%00111111000000000000001100000000
		dc.l		%00111111111111111111111100000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000000000000000000000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000111111111111110000000000
		dc.l		%00000000000000000000000000000000

OWDragGad	GADGET		0,0,0,0,10,GADGHNONE+GRELWIDTH,0,SYSGADGET+WDRAGGING
		GADGET2		0,0,0,0,0,0,0
OSDragGad	GADGET		0,0,0,0,10,GADGHNONE+GRELWIDTH,0,SYSGADGET+SCRGADGET+SDRAGGING
		GADGET2		0,0,0,0,0,0,0
	END

