; *** GADGETS.ASM

; GADGET SUPPORT ROUTINES FOR BOOLEAN, STRING, AND PROPORTIONAL TYPES

SIZE.BBORDER EQU 40
BB.BUTTONLINES EQU 16

; NEWPGADG MACRO

NEWSGADG MACRO
  LEA \1,A0
  LEA \2,A1
  MOVE.W #\3,D4
  MOVE.W #\4,D5
  BSR MAKEASTRINGADGET
  MOVE.L \5,A0
  MOVE.L D0,A1
  BSR ADDNEWGADG
 ENDM

NEWBGADG MACRO
  LEA \1,A1
  MOVE.W #\2,D4
  MOVE.W #\3,D5
  BSR MAKEAGADGET
  MOVE.L \4,A0
  MOVE.L D0,A1
  BSR ADDNEWGADG
 ENDM

ADDNEWGADG
  ZERO D0
  MOVE.W #-1,D0
  INTLIB ADDGADGET
  MOVE.L _THISGADGET,D0
 RTS

MAKEAGADGET
  MOVE.L A1,_THISGTEXT
  REMEMBERPUBMEM REMEMBERKEY,#SIZE.BBORDER
  TST.L D0
  BEQ ERR_MAKEAGADGETMEM
  MOVE.L D0,_THISBBORDER
  TST.L _THISGTEXT
  BNE.S GADGIT		; SKIP FOR NO-TEXT BOOLEANS
  ZERO D0
  MOVE.L D0,_THISGITEXT
  BRA.S AFTERIT
GADGIT
  REMEMBERPUBMEM REMEMBERKEY,#SIZE.IT
  TST.L D0
  BEQ ERR_MAKEAGADGETMEM
  MOVE.L D0,_THISGITEXT
  MOVE.L D0,A0
  MOVE.L _THISGTEXT,A1
  BSR CREATETEXT
  INTLIB INTUITEXTLENGTH
  MOVE.L D0,D6
  ADDI.W #4,D6
  BCLR #0,D6
  MOVE.W _THISFONTHITE,D7
  ADDI.W #4,D7
  BCLR #0,D7
AFTERIT
  MOVEA.L _THISBBORDER,A0
  ADDA.L #SIZE.BORD,A0
  MOVE.W D6,4(A0)
  MOVE.W D6,8(A0)
  MOVE.W D7,10(A0)
  MOVE.W D7,14(A0)
  MOVE.W #-1,D0
  CMP.W #STRGADGET,_THISGTYPE
  BNE.S BORDERMINONE
  MOVE.W #-5,D0
BORDERMINONE
  MOVE.W D0,2(A0)
  MOVE.W D0,6(A0)
  MOVE.W D0,18(A0)
  MOVE.W D0,(A0)
  MOVE.W D0,12(A0)
  MOVE.W D0,16(A0)
  MOVEA.L _THISBBORDER,A1
  MOVE.L A0,BORD.XY(A1)
  MOVE.B #JAM1,BORD.DRAWMODE(A1)
  MOVE.B #1,BORD.FRONTPEN(A1)
  MOVE.B #5,BORD.COUNT(A1)
_JUSTTHEGADGET
  REMEMBERCHIPMEM REMEMBERKEY,#SIZE.GADG
  TST.L D0
  BEQ ERR_MAKEAGADGETMEM
  MOVE.L D0,_THISGADGET
  MOVE.L D0,A0
  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.W _THISGTYPE,GADG.TYPE(A0)
  MOVE.W _THISGACTIV,GADG.ACTIVATION(A0)
  MOVE.L _THISGITEXT,GADG.TEXT(A0)
  MOVE.W _THISGFLAGS,GADG.FLAGS(A0)
  MOVE.L _THISBBORDER,GADG.RENDER(A0)
  ZERO D1
  MOVE.L _THISGADGET,D0
 RTS

ERR_MAKEAGADGETMEM
  MOVE.L #CANTALLOCMEM,D1
  ZERO D0
 RTS

ERR_MAKEAGADGET
  MOVE.L #CANTALLOCMEM,D1
  ZERO D0
 RTS

MAKEASTRINGADGET
  MOVE.W #STRGADGET,_THISGTYPE
  MOVE.L A0,_THISGBUFFER
  MOVE.L A1,_THISGUNDOBUF
  REMEMBERPUBMEM REMEMBERKEY,#SIZE.SI
  TST.L D0
  BEQ ERR_MAKEAGADGETMEM
  MOVE.L D0,A0
  MOVE.L D0,_THISGSTRINGINFO
  MOVE.L _THISGBUFFER,SI.BUFFER(A0)
  MOVE.L _THISGUNDOBUF,SI.UNDOBUFFER(A0)
  MOVE.W #1,SI.BUFFERPOS(A0)
  MOVE.W #80,SI.MAXCHARS(A0)
  LEA SIZESTRING,A1
  BSR MAKEAGADGET
  MOVE.L _THISGSTRINGINFO,GADG.SPECIALINFO(A0)
  MOVE.W #BOOLGADGET,_THISGTYPE
 RTS

MAKEAPROPGADGET
  MOVE.W #PROPGADGET,_THISGTYPE
  REMEMBERCHIPMEM REMEMBERKEY,#SIZE.IMAG
  TST.L D0
  BEQ ERR_MAKEAGADGETMEM
  MOVE.L D0,_THISGIMAGE
  REMEMBERCHIPMEM REMEMBERKEY,#SIZE.PI
  TST.L D0
  BEQ ERR_MAKEAGADGETMEM
  MOVE.L D0,A0
  MOVE.L D0,_THISGPROPINFO
  MOVE.W #AUTOKNOB!FREEHORIZ,PI.FLAGS(A0)
  CMP.B #'V',D3
  BNE.S ITSHORIZONTAL
  MOVE.W #$8000,PI.VERTPOT(A0)
  MOVE.W #$1000,PI.VERTBODY(A0)
  MOVE.W #AUTOKNOB!FREEVERT,PI.FLAGS(A0)
ITSHORIZONTAL
  MOVE.W #$8000,PI.HORIZPOT(A0)
  MOVE.W #$1000,PI.HORIZBODY(A0)

  BSR _JUSTTHEGADGET
  MOVE.L _THISGADGET,D0
  ZERO D1
  MOVE.L _THISGIMAGE,GADG.RENDER(A0)
  MOVE.L #0,GADG.TEXT(A0)
  MOVE.L _THISGPROPINFO,GADG.SPECIALINFO(A0)
ENDMAKEPROPGADG
  MOVE.W #BOOLGADGET,_THISGTYPE
 RTS

MAKEAGADGETC
  REMEMBERCHIPMEM REMEMBERKEY,#SIZE.IMAG
  TST.L D0
  BEQ ERR_MAKEAGADGETMEM
  MOVE.L D0,_THISGIMAGE
  MOVE.L D0,A0
  MOVE.W D6,IMAG.WIDTH(A0)
  MOVE.W D7,IMAG.HEIGHT(A0)
  BSR _JUSTTHEGADGET
  MOVE.L _THISGADGET,D0
  ZERO D1
  MOVE.L _THISGIMAGE,GADG.RENDER(A0)
  MOVE.L #0,GADG.TEXT(A0)
 RTS

_THISGADGET
  DC.L 0
_THISGACTIV
  DC.W STRINGCENTER!RELVERIFY!GADGIMMEDIATE
_THISGFLAGS
  DC.W GADGHCOMP
_THISGTYPE
  DC.W BOOLGADGET
_THISGTEXT
  DC.L 0
_THISGITEXT
  DC.L 0
_THISBBORDER
  DC.L 0
SIZESTRING
  DC.B 0
  EVENPC

_THISGSTRINGINFO
  DC.L 0
_THISGBUFFER
  DC.L 0
_THISGUNDOBUF
  DC.L 0 
_THISGIMAGE
  DC.L 0
_THISGPROPINFO
  DC.L 0
