home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Falcon 030 Power 2
/
F030_POWER2.iso
/
ST_STE
/
MAGS
/
ICTARI03.ARJ
/
ictari.03
/
GFA
/
GFA_CODE
/
CLOCK.LST
< prev
next >
Wrap
File List
|
1993-05-10
|
7KB
|
275 lines
' CLOCK v3
' A multi tasking clock accessory with switching between analog and digital
' clocks when the FULLER is clicked. If accessory selected again when already
' open a time setting dialog will appear.
'
' Requires CLOCK3.RSC to be present in program directory
'
' (c) Ian Rae 22/08/92 - commented 5/5/93 :-)
'
$m40528 ! Random number - seems to work!
ap_id&=APPL_INIT()
@init
@main
'
PROCEDURE init
IF XBIOS(4)<>2
ALERT 1," | High resolution only... | Sorry about that...",1,"Hmmm",a%
DO
~EVNT_TIMER(-1)
LOOP
ENDIF
IF RSRC_LOAD("clock3.rsc")=0
ALERT 1," Can't find CLOCK3.RSC... | | Take Yourself outside| and have a word!",1," OK ",a%
DO
~EVNT_TIMER(-1)
LOOP
ENDIF
~RSRC_GADDR(0,0,adr%)
'
IF ap_id&<>0
me_id&=MENU_REGISTER(ap_id&," MT Clock")
ENDIF
open!=FALSE
analog!=TRUE
RETURN
'
PROCEDURE main
IF ap_id&<>0
DO ! We are and accessory
evnt%=EVNT_MULTI(&X110000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2000)
IF BTST(evnt%,5) AND open! ! A timer event, update clock
@dotime(FALSE)
ELSE
message ! a message event, process it
ENDIF
LOOP
ELSE
TITLEW #1,LEFT$(TIME$,5) ! Not an accessory so open
OPENW #1,10,50,82,100,&X1111 ! a window and use ON MENU
handle&=W_HAND(#1) ! to handle it
ON MENU MESSAGE GOSUB message
EVERY 200 GOSUB dotime
exit!=FALSE
REPEAT
ON MENU
UNTIL exit!
ENDIF
RETURN
'
PROCEDURE message
x&=MENU(5)
y&=MENU(6)
w&=MENU(7)
h&=MENU(8)
'
SELECT MENU(1)
CASE 21 ! topped
TOPW #1
CASE 23 ! Fulled ( switch between analog and digital
analog!=NOT analog!
~WIND_GET(handle&,5,wx&,wy&,ww&,wh&)
IF analog!
~WIND_SET(handle&,5,wx&,wy&,82,100)
ELSE
~WIND_SET(handle&,5,wx&,wy&,82,20)
ENDIF
CASE 20 !
@dotime(TRUE)
CASE 22,41 ! Closed clicked or acc close recieved
CLOSEW #1
exit!=TRUE
open!=FALSE
CASE 28 ! Moved
IF analog!
~WIND_SET(handle&,5,x&,y&,82,100)
ELSE
~WIND_SET(handle&,5,x&,y&,82,20)
ENDIF
CASE 40 ! Acc open
IF open! ! If already open then display set time dialog
timeset
ELSE
open!=TRUE
TITLEW #1,LEFT$(TIME$,5) ! Display time in title bar
IF analog!
OPENW #1,10,50,82,100,&X1111
ELSE
OPENW #1,10,50,82,20,&X1111
ENDIF
handle&=W_HAND(#1)
ENDIF
ENDSELECT
RETURN
'
PROCEDURE dotime(redraw!) ! redraw TRUE if we need to redraw
hours&=VAL(LEFT$(TIME$,2)) ! FALSE if we just updating time
mins&=VAL(MID$(TIME$,4,2))
IF hours&>12
hours&=hours&-12
ENDIF
IF (mins&<>oldm&) OR redraw!
TITLEW #1,LEFT$(TIME$,5)
IF analog!
hdeg=(360*hours&)/12+(mins&*0.5)
mdeg=(360*mins&)/60
~WIND_UPDATE(1) ! Grab mouse control
~WIND_GET(handle&,11,x&,y&,w&,h&)
~WIND_GET(handle&,4,wx&,wy&,ww&,wh&)
REPEAT
IF RC_INTERSECT(wx&,wy&,ww&,wh&,x&,y&,w&,h&) ! get clipping
CLIP x&,y&,w&,h& OFFSET wx&,wy& ! rectangles
@drawclock(hdeg,mdeg) ! draw it all
CLIP 0,0,WORK_OUT(0),WORK_OUT(1)
ENDIF
~WIND_GET(handle&,12,x&,y&,w&,h&)
UNTIL w&=0 AND h&=0
~WIND_UPDATE(0) ! release mouse control
ENDIF
ENDIF
oldm&=mins&
RETURN
'
PROCEDURE drawclock(hdeg,mdeg) ! Can't be bothered with trig and stuff
DEFFILL 0,0 ! so I'll cheat and use the logo type stuff
PBOX 0,0,82,80
CIRCLE 40,40,30
DEFTEXT 1,0,0,6
TEXT 32,8,"12"
TEXT 37,78,"6"
TEXT 1,43,"9"
TEXT 71,43,"3"
SETDRAW 40,40,hdeg
DRAW "PU FD 20 PD"
x=DRAW(0)
y=DRAW(1)
DRAW "RT 170 FD 10 DA 40,40"
SETDRAW x,y,hdeg
DRAW "LT 170 FD 10 DA 40,40"
SETDRAW 40,40,mdeg
DRAW "PU FD 28 PD"
x=DRAW(0)
y=DRAW(1)
DRAW "RT 175 FD 15 DA 40,40"
SETDRAW x,y,mdeg
DRAW "LT 175 FD 15 DA 40,40"
RETURN
'
PROCEDURE timeset ! open up the timeset dialog, this proc is MESSY
exit!=FALSE
~FORM_CENTER(adr%,x&,y&,w&,h&)
~FORM_DIAL(0,x&,y&,w&,h&,x&,y&,w&,h&) ! prepare draw area
'
' set up initial time...
'
h1&=VAL(LEFT$(TIME$,1))
h2&=VAL(MID$(TIME$,2,1))
m1&=VAL(MID$(TIME$,4,1))
m2&=VAL(MID$(TIME$,5,1))
t$=" "
'
CHAR{{OB_SPEC(adr%,13)}}=STR$(h1&)
CHAR{{OB_SPEC(adr%,14)}}=STR$(h2&)
CHAR{{OB_SPEC(adr%,15)}}=STR$(m1&)
CHAR{{OB_SPEC(adr%,16)}}=STR$(m2&)
~OBJC_DRAW(adr%,0,3,x&,y&,w&,h&)
'
REPEAT
but%=FORM_DO(adr%,0)
SELECT but%
'
CASE 5 !h1down
DEC h1&
IF h1&<0
h1&=2
ENDIF
CHAR{{OB_SPEC(adr%,13)}}=STR$(h1&)
~OBJC_DRAW(adr%,13,0,x&,y&,w&,h&)
PAUSE 5
'
CASE 6 !h2down
DEC h2&
IF h2&<0
h2&=9
ENDIF
CHAR{{OB_SPEC(adr%,14)}}=STR$(h2&)
~OBJC_DRAW(adr%,14,0,x&,y&,w&,h&)
PAUSE 5
'
CASE 7 !m1down
DEC m1&
IF m1&<0
m1&=5
ENDIF
CHAR{{OB_SPEC(adr%,15)}}=STR$(m1&)
~OBJC_DRAW(adr%,15,0,x&,y&,w&,h&)
PAUSE 5
'
CASE 8 !m2 down
DEC m2&
IF m2&<0
m2&=9
ENDIF
CHAR{{OB_SPEC(adr%,16)}}=STR$(m2&)
~OBJC_DRAW(adr%,16,0,x&,y&,w&,h&)
PAUSE 5
'
CASE 9 ! h1 up
INC h1&
IF h1&>2
h1&=0
ENDIF
IF h1&>1 AND h2&>3
h1&=0
ENDIF
CHAR{{OB_SPEC(adr%,13)}}=STR$(h1&)
~OBJC_DRAW(adr%,13,0,x&,y&,w&,h&)
PAUSE 5
'
CASE 10 ! h2 up
INC h2&
IF h2&>9
h2&=0
ENDIF
CHAR{{OB_SPEC(adr%,14)}}=STR$(h2&)
~OBJC_DRAW(adr%,14,0,x&,y&,w&,h&)
PAUSE 5
'
CASE 11 ! m1 up
INC m1&
IF m1&>5
m1&=0
ENDIF
CHAR{{OB_SPEC(adr%,15)}}=STR$(m1&)
~OBJC_DRAW(adr%,15,0,x&,y&,w&,h&)
PAUSE 5
'
CASE 12 ! m2 up
INC m2&
IF m2&>9
m2&=0
ENDIF
CHAR{{OB_SPEC(adr%,16)}}=STR$(m2&)
~OBJC_DRAW(adr%,16,0,x&,y&,w&,h&)
PAUSE 5
'
CASE 18 ! OK
set!=TRUE
exit!=TRUE
'
CASE 19 ! Cancel
set!=FALSE
exit!=TRUE
ENDSELECT
UNTIL exit!
'
~FORM_DIAL(3,x&,y&,w&,h&,x&,y&,w&,h&) ! redraw area...
'
OB_STATE(adr%,18)=0 ! Deselect OK and Cancel buttons
OB_STATE(adr%,19)=0
IF set!
t$=STR$(h1&)+STR$(h2&)+":"+STR$(m1&)+STR$(m2&)+":00" ! Set the time !
TIME$=t$
ENDIF
RETURN