; *** CPallete

  BRA _START

DOS EQU 1
INT EQU 1
GFX EQU 1

WIN EQU 1
GAD EQU 1
TXT EQU 1

  INCLUDE "HEADER"

MAIN
  TST.L ENDFROMWB
  BNE.S _BUILDGADGETS
FROMUSER
  DOSPRINT STDOUT,#OPENMESSAGE
  ZERO D0
  MOVEA.L COMMAND,A0
  CMPI.B #'?',(A0)
  BEQ USAGE

_BUILDGADGETS
;BORDER FOR COLOR GADGETS
  LEA LINES,A1
  LEA GADGETBORDER,A0
  MOVE.L A1,BORD.XY(A0)
;ACTION GADGETS
  LEA GADGETS,A5
  MOVE.W _MYGADGACTIV1,_THISGACTIV
  MOVE.W _MYGADGFLAGS1,_THISGFLAGS
  LEA  NEXTG,A1
  MOVE.W #15,D4
  MOVE.W #75,D5
  BSR MAKEAGADGET
  MOVE.L _THISGADGET,(A5)+
  LEA  CANCELG,A1
  MOVE.W #230,D4
  MOVE.W #75,D5
  BSR MAKEAGADGET
  MOVE.L _THISGADGET,(A5)+
;SLIDERS
  MOVE.W _MYGADGACTIV2,_THISGACTIV
  MOVE.W _MYGADGFLAGS2,_THISGFLAGS
  MOVE.W #15,D4
  MOVE.W #40,D5
  MOVE.W #-20,D6
  MOVE.W #9,D7
  BSR MAKEAPROPGADGET
  MOVE.L _THISGADGET,(A5)+
  MOVE.W #15,D4
  MOVE.W #50,D5
  MOVE.W #-20,D6
  MOVE.W #9,D7
  BSR MAKEAPROPGADGET
  MOVE.L _THISGADGET,(A5)+
  MOVE.W #15,D4
  MOVE.W #60,D5
  MOVE.W #-20,D6
  MOVE.W #9,D7
  BSR MAKEAPROPGADGET
  MOVE.L _THISGADGET,(A5)+
;COLORGADGETS
  MOVE.W _MYGADGACTIV3,_THISGACTIV
  MOVE.W _MYGADGFLAGS3,_THISGFLAGS
  MOVE.W #31,D0         ;MAX COLORS -1
  LEA CGADGETS,A5
CG
  PUSHREG D0
  ZERA A1
  BSR MAKEAGADGETC
  MOVE.L _THISGADGET,(A5)+
  PULLREG D0
  DBRA D0,CG

;BUILD ITEXT MODULES
  MAKEITEX RED,ERROR,REDIT
  MAKEITEX GREEN,ERROR,GREENIT
  MAKEITEX BLUE,ERROR,BLUEIT

  MOVE.L _MYIDCMPFLAGS,_THISIDCMP
  MOVE.L _MYFLAGS,_THISFLAGS
  MOVE.W #CUSTOMSCREEN,_THISTYPE
_BUILDAWINDOW
  MOVE.L _INTBASE,A0
  MOVE.L IB.FIRSTSCREEN(A0),A0
  MOVE.L A0,_THISSCREEN
  BSR CHECKDIM
  MAKEWIN #MYWINDOWTITLE,LEFT,TOP,WIDTH,HEIGHT,ERROR
  MOVE.L D0,A0
  MOVE.L D0,WINDOW
  MOVE.L WW.WSCREEN(A0),SCRN
  MOVE.L WW.RPORT(A0),RP
  INTLIB VIEWPORTADDRESS
  MOVE.L D0,A0
  MOVE.L A0,VP
  MOVE.L VP.COLORMAP(A0),CM
  MOVE.L SCRN,A0
  ZERO D0
  MOVE.B SCRN.BITMAP+BM.DEPTH(A0),D0
  ZERO D1
  MOVE.L VP,A0
  MOVE.W VP.MODES(A0),D1
  PUSHREG D1
  AND.W #HAM,D1
  CMP.W #HAM,D1
  BNE.S 19$
  MOVE.W #4,D0
19$:
  PULLREG D1
  AND.W #EXTRA_HALFBRITE,D1
  CMP.W #EXTRA_HALFBRITE,D1
  BNE.S 29$
  MOVE.W #5,D0
29$:
  MOVE.W #1,D1
  ASL.W D0,D1
  TST.W D1
  BNE.S 100$
  MOVE.W #1,D1
100$:
  CMP.W #32,D1
  BLT.S 200$
  MOVE.W #32,D1
200$:
  MOVE.W D1,NUMBEROFCOLORS

; POP UP INTUITEXTS & COLOR GADGET BORDER
  BSR REFRESHINTS

COLORGADGETS
; GET SCREEN INFO TO DETERMINE PALETTE SIZE
  MOVE.W NUMBEROFCOLORS,D1
  ZERO D6
  MOVE.W #288,D6
  DIVS D1,D6
  MOVE.W #20,D7
  MOVE.L #0,D0
  MOVE.W #6,D4
  MOVE.W #12,D5
  LEA CGADGETS,A5
  LEA COLORPALETTE,A4
  SUBI.W #1,D1
GADG2
  PUSHREG D0-D1
  MOVE.L (A5)+,A0
  PUSHREG A0
  BSR SIZEGADGET
  PULLREG A0
  BSR COLORIZEGADG
  ADD.W D6,D4
  MOVE.L CM,A0
  GFXLIB GETRGB4
  MOVE.W D0,(A4)+
  PULLREG D0-D1
  ADDI.B #1,D0
  DBRA D1,GADG2

  MOVE.W #0,ACTIVECOLOR
  BSR PROPADJUST

; POP UP GADGETS
  LEA GADGETS,A5
  ZERO D7
  MOVE.W NUMBEROFCOLORS,D7
  ADDI.L #4,D7
GADG1
  ZERO D0
  MOVE.W #-1,D0
  MOVE.L WINDOW,A0
  MOVE.L (A5)+,A1
  INTLIB ADDGADGET
  DBRA D7,GADG1

  BSR REFRESHING

LOOP
  MOVE.L WINDOW,A0
  MOVE.L WW.USERPORT(A0),A0
  SYSLIB WAITPORT
  MOVE.L WINDOW,A0
  MOVE.L WW.USERPORT(A0),A0
  SYSLIB GETMSG
  TST.L D0
  BEQ.S 9$
  MOVE.L D0,A1
  MOVE.L IM.CLASS(A1),D2
  MOVE.W IM.CODE(A1),D3
  MOVE.W IM.QUALIFIER(A1),D4
  MOVE.L IM.IADDRESS(A1),D5
  SYSLIB REPLYMSG
  CMP.L #CLOSEWINDOW,D2
  BEQ DONE
  CMP.L #GADGETUP,D2
  BEQ.S 10$
  CMP.L #NEWSIZE,D2
  BNE.S 8$
  BSR REFRESHINTS
  BRA RELOOP
8$:
  CMP.L #MOUSEMOVE,D2
  BNE.S 9$
  BSR MMOVE
  BRA RELOOP
9$:
; UNKNOWN MESSAGE - MAKE SURE SCREEN SURVIVED
   MOVE.L _INTBASE,A0
   MOVE.L IB.FIRSTSCREEN(A0),A0
12$:
   CMP.L SCRN,A0
   BEQ.S 11$
   CMP.L #0,A0
   BEQ.S 13$
   MOVE.L (A0),A0
   BRA 12$
13$:
   BRA 101$
11$:
  BRA.S RELOOP
10$:
  BSR DOGADGET
  TST.B D6   ; REQUIRES CHANGING SCREEN?
  BEQ.S 2$
   MOVE.L WINDOW,A0
   INTLIB CLOSEWINDOW
   MOVE.L _INTBASE,A0
   MOVE.L IB.FIRSTSCREEN(A0),A0
   INTLIB SCREENTOBACK
101$:
   BRA _BUILDAWINDOW
2$:
RELOOP
  BRA LOOP

DONE
  ZERO D0
QUIT
  PUSHREG D0
  TST.L WINDOW
  BEQ.S 1$
  MOVE.L WINDOW,A0
  INTLIB CLOSEWINDOW
1$:
  PULLREG D0
QUITNOW
 RTS

USAGE
  DOSPRINT STDOUT,#USAGETEXT
 BRA DONE

ERROR
  MOVE.L #CANTALLOCMEM,D0
 BRA QUIT

CHECKDIM
  MOVE.L _THISSCREEN,A0
  MOVE.W SCRN.WIDTH(A0),D0
  MOVE.W WIDTH,D1
  MOVE.W LEFT,D2
  ADD.W D1,D2
  CMP.W D0,D2
  BLE.S 1$
  MOVE.W #0,LEFT
  CMP.W D0,D1
  BLE.S 1$
  MOVE.W #80,WIDTH
1$:
  MOVE.W SCRN.HEIGHT(A0),D0
  MOVE.W HEIGHT,D1
  MOVE.W TOP,D2
  ADD.W D1,D2
  CMP.W D0,D2
  BLE.S 2$
  MOVE.W #0,TOP
  CMP.W D0,D1
  BLE.S 2$
  MOVE.W #20,HEIGHT
2$:
 RTS
  
DOGADGET
 MOVE.L D5,A0
 LEA GADGETS,A1
 BSR GETGADG
 CMP.W #0,D0
 BEQ ENDDOGADGET
 CMP.W #1,D0
 BNE.S 2$
; NEXTSCRN
  MOVE.L WINDOW,A0
  MOVE.W WW.LEFTEDGE(A0),LEFT
  MOVE.W WW.TOPEDGE(A0),TOP
  MOVE.W WW.WIDTH(A0),WIDTH
  MOVE.W WW.HEIGHT(A0),HEIGHT
  MOVE.B #1,D6
  BRA ENDDOGADGET
2$:
 CMP.W #2,D0
 BNE.S 3$
; CANCEL
  MOVE.L VP,A0
  LEA COLORPALETTE,A1
  MOVE.W NUMBEROFCOLORS,D0
  GFXLIB LOADRGB4
  BSR PROPADJUST
  BSR REFRESHING
  ZERO D6
  BRA ENDDOGADGET
3$:
 CMP.W #5,D0
 BGT.S 4$
; RED/GREEN/BLUE
  LEA PGADGETS,A5
  MOVE.L #2,D5
20$:
  ZERO D4
  MOVE.L (A5)+,A0
  MOVE.L GADG.SPECIALINFO(A0),A0
  MOVE.W PI.HORIZPOT(A0),D4
  DIVS #$1111,D4
  PUSHREG D4
  MULS #$1111,D4
  MOVE.W D4,PI.HORIZPOT(A0)
  DBRA D5,20$
  PULLREG D3
  PULLREG D2
  PULLREG D1
  MOVE.L VP,A0
  MOVE.W ACTIVECOLOR,D0
  GFXLIB SETRGB4
  BSR REFRESHING
  ZERO D6
  BRA ENDDOGADGET
4$:
  ;COLOR GADGETS
  SUB.W #6,D0
  MOVE.W D0,ACTIVECOLOR
  BSR PROPADJUST
  BSR REFRESHING
  ZERO D6
ENDDOGADGET
 RTS

GETGADG      ; A0-GADGET / A1-GADGET PTR LIST
 ZERO D0   ; D0-PTR # (0=NOT FOUND) / D1-GADGET
 MOVE.W #1,D0
GGLOOP
 MOVE.L (A1)+,D1
 CMP.L #0,D1
 BEQ.S GGNOGO
 CMP.L D1,A0
 BEQ.S GGGOT
 ADDI.W #1,D0
 BRA.S GGLOOP
GGGOT
 RTS
GGNOGO
 MOVE.W 0,D0
 RTS

MMOVE
; RED/GREEN/BLUE MOVES
  LEA PGADGETS,A5
  MOVE.L #2,D5
20$:
  ZERO D4
  MOVE.L (A5)+,A0
  MOVE.L GADG.SPECIALINFO(A0),A0
  MOVE.W PI.HORIZPOT(A0),D4
  DIVS #$1111,D4
  PUSHREG D4
  DBRA D5,20$
  PULLREG D3
  PULLREG D2
  PULLREG D1
  MOVE.L VP,A0
  MOVE.W ACTIVECOLOR,D0
  GFXLIB SETRGB4

COLORIZEGADG            ;A0-GADGET / D0-COLOR
  MOVE.L GADG.RENDER(A0),A0
  MOVE.B D0,IMAG.PLANEONOFF(A0)
 RTS

SIZEGADGET              ;A0-GADGET / D4/D5/D6/D7-SIZE DATA
  MOVE.W D4,GADG.LEFTEDGE(A0)
  MOVE.W D5,GADG.TOPEDGE(A0)
  MOVE.W D6,GADG.WIDTH(A0)
  MOVE.W D7,GADG.HEIGHT(A0)
  MOVE.L GADG.RENDER(A0),A0
  MOVE.W D6,IMAG.WIDTH(A0)
  MOVE.W D7,IMAG.HEIGHT(A0)
 RTS

REFRESHING
  MOVE.L GADGETS,A0
  MOVE.L WINDOW,A1
  ZERA A2
  INTLIB REFRESHGADGETS
 RTS

REFRESHINTS
; DISPLAY RGB
  PRINTOLDAT WINDOW,REDIT,3,39
  PRINTOLDAT WINDOW,GREENIT,3,49
  PRINTOLDAT WINDOW,BLUEIT,3,59
; BOX IN COLOR PALETTE
  MOVE.L RP,A0
  LEA GADGETBORDER,A1
  ZERO D0
  ZERO D1
  INTLIB DRAWBORDER
 RTS

PROPADJUST
  MOVE.W ACTIVECOLOR,D0
  MOVE.L CM,A0
  GFXLIB GETRGB4
  LEA PGADGETS,A5
  MOVE.L #8,D4
  MOVE.L #2,D5
PROP1
  MOVE.L (A5)+,A0
  MOVE.L GADG.SPECIALINFO(A0),A0
  MOVE.W D0,D1
  LSR.W D4,D1
  AND.W #$000F,D1
  MULS #$1111,D1
  MOVE.W D1,PI.HORIZPOT(A0)
  SUBI.W #4,D4
  DBRA D5,PROP1
 RTS

; *** DATA
MYWINDOWTITLE
  DC.B 'CPalette v1.1',0
  EVENPC
USAGETEXT
  DC.B 'USAGE: [RUN] CPalette',10,0
  EVENPC
OPENMESSAGE
  DC.B 'CPallete V1.1 from LeverEdge',10,0
  EVENPC

RED
  DC.B 'R',0
  EVENPC
REDIT DC.L 0
GREEN
  DC.B 'G',0
  EVENPC
GREENIT DC.L 0
BLUE
  DC.B 'B',0
  EVENPC
BLUEIT DC.L 0
NEXTG
  DC.B 'Next SCRN',0
  EVENPC
CANCELG
  DC.B 'Cancel',0
  EVENPC

WINDOW DC.L 0
SCRN DC.L 0
RP DC.L 0
VP DC.L 0
CM DC.L 0

GADGETS DCB.L 2,0
PGADGETS DCB.L 3,0
CGADGETS DCB.L 32,0
         DC.L 0

LEFT DC.W 20
TOP DC.W 0
HEIGHT DC.W 90
WIDTH DC.W 300

ACTIVECOLOR DC.W 0
NUMBEROFCOLORS DC.W 4
COLORPALETTE DCB.W 32,0

GADGETBORDER
  DC.W 0,0,
  DC.B 1,0,JAM1,5
  DC.L 0,0
  
LINES
  DC.W 5,11,5,32,294,32,294,11,5,11

_MYIDCMPFLAGS DC.L CLOSEWINDOW!GADGETUP!MOUSEMOVE!NEWSIZE
_MYFLAGS DC.L WINDOWSIZING!WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE!SMART_REFRESH

_MYGADGACTIV1      ;OPTIONS
  DC.W RELVERIFY!GADGIMMEDIATE
_MYGADGFLAGS1
  DC.W GADGHCOMP
_MYGADGACTIV2      ;COLOR SLIDERS
  DC.W RELVERIFY!GADGIMMEDIATE!FOLLOWMOUSE
_MYGADGFLAGS2
  DC.W GADGIMAGE!GADGHCOMP!GRELWIDTH
_MYGADGACTIV3      ;COLOR PALETTE
  DC.W RELVERIFY!GADGIMMEDIATE
_MYGADGFLAGS3
  DC.W GADGHCOMP!GADGIMAGE

_THISFONTHITE DC.W 9

 END
