home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / c / clockmem / !ClockMem / Resources / ts1 < prev    next >
Text File  |  1994-06-24  |  17KB  |  487 lines

  1.    10REM ><ClockMem$Dir>.Resources.Source
  2.    20REM clock application
  3.    30DIMcode%16384
  4.    40
  5.    50REM various parameters here
  6.    60_AppDir$      ="<ClockMem$Dir>"
  7.    70_AppResDir$   =_AppDir$+".Resources"
  8.    80_SpritePath$  =_AppResDir$+".Sprites"
  9.    90_TemplPath$   =_AppResDir$+".Templates"
  10.   100_AlmPath$     ="<ClockMemAlarm$Dir>.CMAlarm"
  11.   110SYS "OS_File",17,_SpritePath$ TO ,,,,_SpriteSize
  12.   120_ibb_left     =0: REM icon bounding box
  13.   130_ibb_bot      =-12
  14.   140_ibb_right    =92
  15.   150_ibb_top      =92
  16.   160_NWindows     =3
  17.   170DIM _WName$(_NWindows),_ISize(_NWindows),_NIcons(_NWindows),_TSize(_NWindows),t_buff(_NWindows),i_buff(_NWindows)
  18.   180DIM block(_NWindows),w_name(_NWindows)
  19.   190RESTORE +0
  20.   200_TSize=0:_ISize=0
  21.   210FORI%=1TO_NWindows
  22.   220READ _WName$(I%),_ISize(I%),_NIcons(I%)
  23.   230_ISize(I%)=(_ISize(I%)+3)AND-4
  24.   240_TSize(I%)=88+32*_NIcons(I%)+_ISize(I%)
  25.   250_ISize+=_ISize(I%)
  26.   260IF_TSize(I%)>_TSize _TSize=_TSize(I%)
  27.   270NEXT
  28.   280DATA Info,100,8
  29.   290DATA SetClock,0,6
  30.   300DATA SetAlarm,68,16
  31.   310_MenuWidth_1  =166
  32.   320
  33.   330REM a few points:
  34.   340REM  - sprite for icon must be *first* in sprite file
  35.   350
  36.   360FORopt=4TO6STEP2
  37.   370O%=code%:P%=&8000
  38.   380[OPTopt
  39.   390
  40.   400  MOV 10,#0
  41.   410  B Init ; sorry!
  42.   420
  43.   430; ---------------------------------------------------------
  44.   440; ------------------- the real work -----------------------
  45.   450; ---------------------------------------------------------
  46.   460
  47.   470.ordinal_block
  48.   480  EQUD 0: EQUD 0: EQUD 0: EQUD 0: EQUD 0: EQUD 0: EQUD 0: EQUD 0
  49.   490.acornbug EQUD 0 ; Territory_ConvertTimeToOrdinals stomps
  50.   500
  51.   510.old_hours   EQUD -1
  52.   520.old_mins    EQUD -1
  53.   530
  54.   540.time_format EQUS "%24 %mi"+CHR$0
  55.   550.time_string EQUS "23 59"+CHR$0
  56.   560
  57.   570ALIGN
  58.   580.sprite_name EQUS "clock"+CHR$0
  59.   590ALIGN
  60.   600.sa          EQUD sprite_area ; naughty!
  61.   610
  62.   620.setisblock  EQUD -1: EQUD 0: EQUD 0: EQUD 0
  63.   630
  64.   640.wimp_block  FNspace(256)
  65.   650
  66.   660; get_time puts hours in r4, minutes in r5
  67.   670.get_time
  68.   680  MOV 0,#14: ADR 1,utc_block: MOV 2,#3: STR 2,[1]: SWI "OS_Word"
  69.   690  MVN 0,#0: ADR 2,ordinal_block: SWI "Territory_ConvertTimeToOrdinals"
  70.   700  LDR 4,[2,#12]: LDR 5,[2,#8]
  71.   710  MOVS 15,14
  72.   720
  73.   730.state_save  EQUD 0: EQUD 0: EQUD 0
  74.   740
  75.   750.free_amount EQUD 0
  76.   760.cvtbuf      EQUS "XXXXXX": ALIGN
  77.   770
  78.   780.errtitle
  79.   790  EQUS "ClockMem says:"+CHR$0
  80.   800ALIGN
  81.   810
  82.   820; following zogs r0,r1, puts adr of msg in r2
  83.   830.get_msg_adr
  84.   840  MOV 0,#13: ADR 1,alm_icn: STR 0,[1,#4]
  85.   850  SWI "Wimp_GetIconState": MOV 0,#15: STR 0,[1,#4]
  86.   860  LDR 2,[1,#28]
  87.   870  MOV 15,14
  88.   880
  89.   890; zogs r1,r3; copies 24 bytes from r2 to r0
  90.   900.copy24
  91.   910  MOV 1,#23: .lll LDRB 3,[2,1]: STRB 3,[0,1]: SUBS 1,1,#1: BGE lll
  92.   920  MOV 15,14
  93.   930
  94.   940.update_sprite
  95.   950  LDR 0,alm_unsetP: CMP 0,#0: BNE no_alm
  96.   960  LDR 0,utc_block: LDR 1,alm_utc: SUBS 2,1,0
  97.   970  LDR 0,utc_block+4: LDR 1,alm_utc+4: SBCS 2,1,0
  98.   980  BPL no_alm
  99.   990  BL get_msg_adr: ADR 0,alm_err_block+4: BL copy24: SUB 0,0,#4
  100.  1000  ADR 2,errtitle: MOV 1,#17
  101.  1010  SWI 256+7
  102.  1020  SWI "Wimp_ReportError"
  103.  1030  MOV 0,#1: STR 0,alm_unsetP: MOV 10,#1
  104.  1040.no_alm
  105.  1050  BL get_time
  106.  1060  LDR 6,old_hours: LDR 7,old_mins
  107.  1070  CMP 4,6: CMPEQ 5,7: BEQ skip_time ; not changed
  108.  1080  STR 4,old_hours: STR 5,old_mins
  109.  1090  MOV 0,#256+60: LDR 1,sa: ADR 2,sprite_name
  110.  1100  MOV 3,#0: SWI "OS_SpriteOp": SWI 256+5
  111.  1110  ADR 9,state_save: STMIA 9,{1,2,3}
  112.  1120  MOV 0,#4: MOV 1,#6: MOV 2,#40: SWI "OS_Plot"
  113.  1130  MOV 0,#16: MOV 1,#2: SWI "OS_SetColour"
  114.  1140  MOV 0,#0: MOV 1,#2: SWI "OS_SetColour"
  115.  1150  ADR 0,time_string: SWI "OS_Write0"
  116.  1160  MOV 0,#0: MOV 1,#7: SWI "OS_SetColour"
  117.  1170  MOV 0,#4: MOV 1,#6: MOV 2,#40: SWI "OS_Plot"
  118.  1180  MVN 0,#0: ADR 1,utc_block: ADR 2,time_string: MOV 3,#8
  119.  1190  ADR 4,time_format: SWI "Territory_ConvertDateAndTime"
  120.  1200  SWI "OS_Write0"
  121.  1210  MOV 0,#256+60: LDMIA 9,{1,2,3}: SWI "OS_SpriteOp"
  122.  1220  ADR 1,setisblock: SWI "Wimp_SetIconState"
  123.  1230
  124.  1240.skip_time
  125.  1250  MVN 0,#0: MVN 1,#0: SWI "Wimp_SlotSize": MOV 11,2,LSR#10
  126.  1260  LDR 12,free_amount: CMP 11,12: BEQ mainloop0
  127.  1270  STR 11,free_amount
  128.  1280  MOV 0,#256+60: LDR 1,sa: ADR 2,sprite_name
  129.  1290  MOV 3,#0: SWI "OS_SpriteOp": SWI 256+5
  130.  1300  ADR 9,state_save: STMIA 9,{1,2,3}
  131.  1310  MOV 0,#4: MVN 1,#8: MOV 2,#84: SWI "OS_Plot"
  132.  1320  MOV 0,#16: MOV 1,#2: SWI "OS_SetColour"
  133.  1330  MOV 0,#0: MOV 1,#2: SWI "OS_SetColour"
  134.  1340  MOV 0,12: ADR 1,cvtbuf: MOV 2,#6: SWI "OS_ConvertCardinal4"
  135.  1350  CMP 2,#0: SWIGT 256+32: SUBGT 2,2,#1: BGT P%-12
  136.  1360  SWI "OS_Write0"
  137.  1370  MOV 0,#4: MVN 1,#8: MOV 2,#84: SWI "OS_Plot"
  138.  1380  MOV 0,#0: MOV 1,#7: SWI "OS_SetColour"
  139.  1390  MOV 0,11: ADR 1,cvtbuf: MOV 2,#6: SWI "OS_ConvertCardinal4"
  140.  1400  CMP 2,#0: SWIGT 256+32: SUBGT 2,2,#1: BGT P%-12
  141.  1410  SWI "OS_Write0"
  142.  1420  MOV 0,#256+60: LDMIA 9,{1,2,3}: SWI "OS_SpriteOp"
  143.  1430  ADR 1,setisblock: SWI "Wimp_SetIconState"
  144.  1440
  145.  1450.mainloop0
  146.  1460  MOVS 10,10,LSR#1: BCS fix_alarm_string
  147.  1470
  148.  1480; ---------------------------------------------------------
  149.  1490; ------------------ main Wimp_Poll loop ------------------
  150.  1500; ---------------------------------------------------------
  151.  1510
  152.  1520.mainloop
  153.  1530  SWI "OS_ReadMonotonicTime": ADD 2,0,#100 ; 1 second
  154.  1540  MOV 0,#0 ; no events masked out
  155.  1550  ADR 1,wimp_block
  156.  1560  SWI "Wimp_PollIdle"
  157.  1570  ;  0 null
  158.  1580  ;  1 redraw        [r1]=window handle
  159.  1590  ;  2 open window   window block at r1
  160.  1600  CMP 0,#2: SWIEQ "Wimp_OpenWindow": BEQ mainloop
  161.  1610  ;  3 close window  [r1]=window handle
  162.  1620  CMP 0,#3: SWIEQ "Wimp_CloseWindow": BEQ mainloop
  163.  1630  ;  4 ptr leaving   [r1]=window handle
  164.  1640  ;  5 ptr entering  [r1]=window handle
  165.  1650  ;  6 mouse click   x, y, buttons, whandle, ihandle
  166.  1660  CMP 0,#6: BEQ MouseClick
  167.  1670  ;  7 userdragbox   xmin,ymin,xmax,ymax
  168.  1680  ;  8 key pressed   whand, ihand, xofs, yofs, caret-flags,
  169.  1690  ;                  idx-into-string, key
  170.  1700  CMP 0,#8: SWIEQ "Wimp_ProcessKey": BEQ mainloop
  171.  1710  ;  9 menu seln     item0, item1, item2, ...
  172.  1720  CMP 0,#9: BEQ MenuSelect
  173.  1730  ; 10 scroll req    window block, xdirn, ydirn
  174.  1740  ; 11 lose caret    caret block at r1
  175.  1750  ; 12 gain caret    caret block at r1
  176.  1760  ; 13 pollwordnon0  addr, contents
  177.  1770  ; 14-16 not used
  178.  1780  ; 17 user msg      blocksize, sender-handle, my_ref,
  179.  1790  ;                  your_ref, action code, data
  180.  1800  ; 18 user msg rec  <ditto>
  181.  1810  CMP 0,#17: CMPNE 0,#18: BEQ Message
  182.  1820  ; 19 user msg ack  <ditto>
  183.  1830  B update_sprite
  184.  1840
  185.  1850; ---------------------------------------------------------
  186.  1860; ----------------- boring Wimp-ish routines --------------
  187.  1870; ---------------------------------------------------------
  188.  1880
  189.  1890.MouseClick
  190.  1900  ; certainly need to check for Menu on icon
  191.  1910  LDR 0,[1,#12]: CMN 0,#2: BNE not_iconbar
  192.  1920  LDR 0,[1,#16]: LDR 2,icon_handle: CMP 0,2: BNE not_our_icon
  193.  1930  LDR 0,[1,#8]: CMP 0,#2: BNE not_menu
  194.  1940  LDR 0,[1]
  195.  1950  SUB 2,0,#64               ; x coordinate of top left
  196.  1960  MOV 3,#272                ; y coordinate of top left
  197.  1970  ADR 1,menu_block
  198.  1980  SWI "Wimp_CreateMenu"
  199.  1990.not_our_icon
  200.  2000.not_menu
  201.  2010.not_set_alarm
  202.  2020  B mainloop
  203.  2030
  204.  2040.utc_block   EQUD 0: EQUD 0
  205.  2050
  206.  2060.onehour EQUD 360000
  207.  2070.onemin  EQUD   6000
  208.  2080.crap_format EQUS "%w3,%dy %m3 %ce%yr.%24:%mi:%se"+CHR$0
  209.  2090.crap_block EQUB 24
  210.  2100.crap_time EQUS "Mon,17 Feb 1992.17:35:04"+CHR$0
  211.  2110ALIGN
  212.  2120
  213.  2130.not_iconbar
  214.  2140  LDR 2,block(FNw("SetClock")): CMP 0,2: BNE not_set_clock
  215.  2150  LDR 8,[1,#16] ; icon number
  216.  2160  CMP 8,#4: BGE mainloop ; not an interesting icon
  217.  2170  ADR 1,utc_block: MOV 0,#3: STRB 0,[1]: MOV 0,#14: SWI "OS_Word"
  218.  2180  LDR 3,utc_block
  219.  2190  CMP 8,#2: LDRLT 4,onehour: LDRGE 4,onemin
  220.  2200  TST 8,#1: BEQ subnotadd
  221.  2210  ADDS 3,3,4: STR 3,utc_block
  222.  2220  BCC changed: LDR 3,utc_block+4: ADD 3,3,#1: STR 3,utc_block+4
  223.  2230  B changed
  224.  2240.subnotadd
  225.  2250  SUBS 3,3,4: STR 3,utc_block
  226.  2260  BCS changed: LDR 3,utc_block+4: SUB 3,3,#1: STR 3,utc_block+4
  227.  2270.changed
  228.  2280  MVN 0,#0: ADR 1,utc_block: ADR 2,crap_time: MOV 3,#2