home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 5
/
DATAFILE_PDCD5.iso
/
utilities
/
c
/
clockmem
/
!ClockMem
/
Resources
/
ts2
< prev
Wrap
Text File
|
1994-06-24
|
17KB
|
487 lines
10REM ><ClockMem$Dir>.Resources.Source2
20REM clock application
30DIMcode%16384
40
50REM various parameters here
60_AppDir$ ="<ClockMem$Dir>"
70_AppResDir$ =_AppDir$+".Resources"
80_SpritePath$ =_AppResDir$+".Sprites"
90_TemplPath$ =_AppResDir$+".Template2"
100_AlmPath$ ="<ClockMemAlarm$Dir>.CMAlarm"
110SYS "OS_File",17,_SpritePath$ TO ,,,,_SpriteSize
120_ibb_left =0: REM icon bounding box
130_ibb_bot =-12
140_ibb_right =92
150_ibb_top =92
160_NWindows =3
170DIM _WName$(_NWindows),_ISize(_NWindows),_NIcons(_NWindows),_TSize(_NWindows),t_buff(_NWindows),i_buff(_NWindows)
180DIM block(_NWindows),w_name(_NWindows)
190RESTORE +0
200_TSize=0:_ISize=0
210FORI%=1TO_NWindows
220READ _WName$(I%),_ISize(I%),_NIcons(I%)
230_ISize(I%)=(_ISize(I%)+3)AND-4
240_TSize(I%)=88+32*_NIcons(I%)+_ISize(I%)
250_ISize+=_ISize(I%)
260IF_TSize(I%)>_TSize _TSize=_TSize(I%)
270NEXT
280DATA Info,100,8
290DATA SetClock,0,6
300DATA SetAlarm,68,21
310_MenuWidth_1 =166
320
330REM a few points:
340REM - sprite for icon must be *first* in sprite file
350
360FORopt=4TO6STEP2
370O%=code%:P%=&8000
380[OPTopt
390
400 MOV 10,#0
410 B Init ; sorry!
420
430; ---------------------------------------------------------
440; ------------------- the real work -----------------------
450; ---------------------------------------------------------
460
470.ordinal_block
480 EQUD 0: EQUD 0: EQUD 0: EQUD 0: EQUD 0: EQUD 0: EQUD 0: EQUD 0
490.acornbug EQUD 0 ; Territory_ConvertTimeToOrdinals stomps
500
510.old_hours EQUD -1
520.old_mins EQUD -1
530
540.time_format EQUS "%24 %mi"+CHR$0
550.time_string EQUS "23 59"+CHR$0
560
570ALIGN
580.sprite_name EQUS "clock"+CHR$0
590ALIGN
600.sa EQUD sprite_area ; naughty!
610
620.setisblock EQUD -1: EQUD 0: EQUD 0: EQUD 0
630
640.wimp_block FNspace(256)
650
660; get_time puts hours in r4, minutes in r5
670.get_time
680 MOV 0,#14: ADR 1,utc_block: MOV 2,#3: STR 2,[1]: SWI "OS_Word"
690 MVN 0,#0: ADR 2,ordinal_block: SWI "Territory_ConvertTimeToOrdinals"
700 LDR 4,[2,#12]: LDR 5,[2,#8]
710 MOVS 15,14
720
730.state_save EQUD 0: EQUD 0: EQUD 0
740
750.free_amount EQUD 0
760.cvtbuf EQUS "XXXXXX": ALIGN
770
780.errtitle
790 EQUS "ClockMem says:"+CHR$0
800ALIGN
810
820; following zogs r0,r1, puts adr of msg in r2
830.get_msg_adr
840 MOV 0,#13: ADR 1,alm_icn: STR 0,[1,#4]
850 SWI "Wimp_GetIconState": MOV 0,#15: STR 0,[1,#4]
860 LDR 2,[1,#28]
870 MOV 15,14
880
890; zogs r1,r3; copies 24 bytes from r2 to r0
900.copy24
910 MOV 1,#23: .lll LDRB 3,[2,1]: STRB 3,[0,1]: SUBS 1,1,#1: BGE lll
920 MOV 15,14
930
940.update_sprite
950 LDR 0,alm_unsetP: CMP 0,#0: BNE no_alm
960 LDR 0,utc_block: LDR 1,alm_utc: SUBS 2,1,0
970 LDR 0,utc_block+4: LDR 1,alm_utc+4: SBCS 2,1,0
980 BPL no_alm
990 BL get_msg_adr: ADR 0,alm_err_block+4: BL copy24: SUB 0,0,#4
1000 ADR 2,errtitle: MOV 1,#17
1010 SWI 256+7
1020 SWI "Wimp_ReportError"
1030 MOV 0,#1: STR 0,alm_unsetP: MOV 10,#1
1040.no_alm
1050 BL get_time
1060 LDR 6,old_hours: LDR 7,old_mins
1070 CMP 4,6: CMPEQ 5,7: BEQ skip_time ; not changed
1080 STR 4,old_hours: STR 5,old_mins
1090 MOV 0,#256+60: LDR 1,sa: ADR 2,sprite_name
1100 MOV 3,#0: SWI "OS_SpriteOp": SWI 256+5
1110 ADR 9,state_save: STMIA 9,{1,2,3}
1120 MOV 0,#4: MOV 1,#6: MOV 2,#40: SWI "OS_Plot"
1130 MOV 0,#16: MOV 1,#2: SWI "OS_SetColour"
1140 MOV 0,#0: MOV 1,#2: SWI "OS_SetColour"
1150 ADR 0,time_string: SWI "OS_Write0"
1160 MOV 0,#0: MOV 1,#7: SWI "OS_SetColour"
1170 MOV 0,#4: MOV 1,#6: MOV 2,#40: SWI "OS_Plot"
1180 MVN 0,#0: ADR 1,utc_block: ADR 2,time_string: MOV 3,#8
1190 ADR 4,time_format: SWI "Territory_ConvertDateAndTime"
1200 SWI "OS_Write0"
1210 MOV 0,#256+60: LDMIA 9,{1,2,3}: SWI "OS_SpriteOp"
1220 ADR 1,setisblock: SWI "Wimp_SetIconState"
1230
1240.skip_time
1250 MVN 0,#0: MVN 1,#0: SWI "Wimp_SlotSize": MOV 11,2,LSR#10
1260 LDR 12,free_amount: CMP 11,12: BEQ mainloop0
1270 STR 11,free_amount
1280 MOV 0,#256+60: LDR 1,sa: ADR 2,sprite_name
1290 MOV 3,#0: SWI "OS_SpriteOp": SWI 256+5
1300 ADR 9,state_save: STMIA 9,{1,2,3}
1310 MOV 0,#4: MVN 1,#8: MOV 2,#84: SWI "OS_Plot"
1320 MOV 0,#16: MOV 1,#2: SWI "OS_SetColour"
1330 MOV 0,#0: MOV 1,#2: SWI "OS_SetColour"
1340 MOV 0,12: ADR 1,cvtbuf: MOV 2,#6: SWI "OS_ConvertCardinal4"
1350 CMP 2,#0: SWIGT 256+32: SUBGT 2,2,#1: BGT P%-12
1360 SWI "OS_Write0"
1370 MOV 0,#4: MVN 1,#8: MOV 2,#84: SWI "OS_Plot"
1380 MOV 0,#0: MOV 1,#7: SWI "OS_SetColour"
1390 MOV 0,11: ADR 1,cvtbuf: MOV 2,#6: SWI "OS_ConvertCardinal4"
1400 CMP 2,#0: SWIGT 256+32: SUBGT 2,2,#1: BGT P%-12
1410 SWI "OS_Write0"
1420 MOV 0,#256+60: LDMIA 9,{1,2,3}: SWI "OS_SpriteOp"
1430 ADR 1,setisblock: SWI "Wimp_SetIconState"
1440
1450.mainloop0
1460 MOVS 10,10,LSR#1: BCS fix_alarm_string
1470
1480; ---------------------------------------------------------
1490; ------------------ main Wimp_Poll loop ------------------
1500; ---------------------------------------------------------
1510
1520.mainloop
1530 SWI "OS_ReadMonotonicTime": ADD 2,0,#100 ; 1 second
1540 MOV 0,#0 ; no events masked out
1550 ADR 1,wimp_block
1560 SWI "Wimp_PollIdle"
1570 ; 0 null
1580 ; 1 redraw [r1]=window handle
1590 ; 2 open window window block at r1
1600 CMP 0,#2: SWIEQ "Wimp_OpenWindow": BEQ mainloop
1610 ; 3 close window [r1]=window handle
1620 CMP 0,#3: SWIEQ "Wimp_CloseWindow": BEQ mainloop
1630 ; 4 ptr leaving [r1]=window handle
1640 ; 5 ptr entering [r1]=window handle
1650 ; 6 mouse click x, y, buttons, whandle, ihandle
1660 CMP 0,#6: BEQ MouseClick
1670 ; 7 userdragbox xmin,ymin,xmax,ymax
1680 ; 8 key pressed whand, ihand, xofs, yofs, caret-flags,
1690 ; idx-into-string, key
1700 CMP 0,#8: SWIEQ "Wimp_ProcessKey": BEQ mainloop
1710 ; 9 menu seln item0, item1, item2, ...
1720 CMP 0,#9: BEQ MenuSelect
1730 ; 10 scroll req window block, xdirn, ydirn
1740 ; 11 lose caret caret block at r1
1750 ; 12 gain caret caret block at r1
1760 ; 13 pollwordnon0 addr, contents
1770 ; 14-16 not used
1780 ; 17 user msg blocksize, sender-handle, my_ref,
1790 ; your_ref, action code, data
1800 ; 18 user msg rec <ditto>
1810 CMP 0,#17: CMPNE 0,#18: BEQ Message
1820 ; 19 user msg ack <ditto>
1830 B update_sprite
1840
1850; ---------------------------------------------------------
1860; ----------------- boring Wimp-ish routines --------------
1870; ---------------------------------------------------------
1880
1890.MouseClick
1900 ; certainly need to check for Menu on icon
1910 LDR 0,[1,#12]: CMN 0,#2: BNE not_iconbar
1920 LDR 0,[1,#16]: LDR 2,icon_handle: CMP 0,2: BNE not_our_icon
1930 LDR 0,[1,#8]: CMP 0,#2: BNE not_menu
1940 LDR 0,[1]
1950 SUB 2,0,#64 ; x coordinate of top left
1960 MOV 3,#272 ; y coordinate of top left
1970 ADR 1,menu_block
1980 SWI "Wimp_CreateMenu"
1990.not_our_icon
2000.not_menu
2010.not_set_alarm
2020 B mainloop
2030
2040.utc_block EQUD 0: EQUD 0
2050
2060.onehour EQUD 360000
2070.onemin EQUD 6000
2080.crap_format EQUS "%w3,%dy %m3 %ce%yr.%24:%mi:%se"+CHR$0
2090.crap_block EQUB 24
2100.crap_time EQUS "Mon,17 Feb 1992.17:35:04"+CHR$0
2110ALIGN
2120
2130.not_iconbar
2140 LDR 2,block(FNw("SetClock")): CMP 0,2: BNE not_set_clock
2150 LDR 8,[1,#16] ; icon number
2160 CMP 8,#4: BGE mainloop ; not an interesting icon
2170 ADR 1,utc_block: MOV 0,#3: STRB 0,[1]: MOV 0,#14: SWI "OS_Word"
2180 LDR 3,utc_block
2190 CMP 8,#2: LDRLT 4,onehour: LDRGE 4,onemin
2200 TST 8,#1: BEQ subnotadd
2210 ADDS 3,3,4: STR 3,utc_block
2220 BCC changed: LDR 3,utc_block+4: ADD 3,3,#1: STR 3,utc_block+4
2230 B changed
2240.subnotadd
2250 SUBS 3,3,4: STR 3,utc_block
2260 BCS changed: LDR 3,utc_block+4: SUB 3,3,#1: STR 3,utc_block+4
2270.changed
2280 MVN 0,#0: ADR 1,utc_block: ADR 2,crap_time: MOV 3,#