REM >DirectorCron:!RunImage

ON ERROR: ON ERROR OFF: ERROR ERR,REPORT$+" at "+STR$ ERL

Menu=FNswi_number("Director_Menu")
EndMenu=FNswi_number("Director_EndMenu")
Option=FNswi_number("Director_Option")
Command=FNswi_number("Director_Command")
Dash=FNswi_number("Director_Dash")

buffer_size%=1024
DIM buffer% buffer_size%

window%=VAL(FNread("Director$Window"))
icon%=VAL(FNread("Director$Icon"))
buttons%=VAL(FNread("Director$Buttons"))

X%=3
ic_job=FNr
ic_command=FNr
ic_month=FNr
ic_day=FNr
ic_week_day=FNr
ic_hour=FNr
ic_min=FNr
ic_job_m=FNr
ic_month_m=FNr
ic_day_m=FNr
ic_week_day_m=FNr
ic_hour_m=FNr
ic_min_m=FNr
ic_delete=FNr
ic_new=FNr
ic_cancel=FNr
ic_update=FNr

SYS "Wimp_Initialise",200,&4B534154,"Temp" TO ,handle%

CASE buttons% OF
  WHEN -255: REM open
  WHEN -254: REM close
  WHEN -253: REM null
  WHEN -252: REM drag to
  WHEN -251: REM drag from
  WHEN 1,4: REM adjust,select
    CASE icon% OF
      WHEN ic_job_m: PROCmenu_job
      WHEN ic_month_m: PROCmenu_month
      WHEN ic_day_m: PROCmenu_day
      WHEN ic_week_day_m: PROCmenu_week_day
      WHEN ic_hour_m: PROCmenu_hour
      WHEN ic_min_m: PROCmenu_min
      WHEN ic_delete: PROCdelete
      WHEN ic_new: PROCnew
      WHEN ic_cancel: PROCcancel
      WHEN ic_update: PROCupdate
    ENDCASE
  WHEN 2: REM menu
    CASE icon% OF
      WHEN ic_job_m: PROCmenu_job
      WHEN ic_month_m: PROCmenu_month
      WHEN ic_day_m: PROCmenu_day
      WHEN ic_week_day_m: PROCmenu_week_day
      WHEN ic_hour_m: PROCmenu_hour
      WHEN ic_min_m: PROCmenu_min
      OTHERWISE: PROCmenu_main
    ENDCASE
ENDCASE

SYS "Wimp_CloseDown",handle%,&4B534154

END

DEF PROCmenu_job
ENDPROC

DEF PROCmenu_month
ENDPROC

DEF PROCmenu_day
ENDPROC

DEF PROCmenu_week_day
ENDPROC

DEF PROCmenu_hour
ENDPROC

DEF PROCmenu_min
ENDPROC

DEF PROCdelete
ENDPROC

DEF PROCnew
ENDPROC

DEF PROCcancel
ENDPROC

DEF PROCupdate
ENDPROC

DEF PROCmenu_main
  OSCLI"Set Director$Menu Cron"
  SYS Menu,"<Director$Menu> -temp"
    SYS Option, "Help"
      SYS Command, "Filer_Run DirectorCron:!Help"
    SYS Option, "Quit"
      SYS Command, "DirectorWindow Cron -remove"
  SYS EndMenu
  OSCLI"DirectorShowMenu <Director$Menu>"
ENDPROC

DEF FNr
X%+=1
=X%-1

DEF PROCset
  PROCseticontext(window%,3,FNnum(module%))
  PROCseticontext(window%,4,FNnum(workspace%))
  PROCseticontext(window%,5,FNnum(malloc%))
  PROCseticontext(window%,6,FNnum(module%+workspace%+malloc%))
  PROCseticontext(window%,7,FNnum(blocks%))
  IF dynamic% THEN
    PROCseticontext(window%,8,FNnum(dynamic%))
    PROCseticontext(window%,9,FNnum(free%))
    PROCseticontext(window%,10,FNnum(largest%))
  ELSE
    PROCseticontext(window%,8,"")
    PROCseticontext(window%,9,"")
    PROCseticontext(window%,10,"")
  ENDIF
ENDPROC

DEF FNnum(a%)
a$=STR$ a%
IF LEN a$>4 THEN a$=LEFT$(a$,LEN a$-3)+","+RIGHT$(a$,3)
=a$

DEF FNread(a$)
  ?buffer%=13
  SYS "XOS_ReadVarVal",a$,buffer%,buffer_size%,0,3 TO ,,read%
  buffer%?read%=13
=$buffer%

DEF FNswi_number(name$)
  SYS "OS_SWINumberFromString",,name$ TO A%
=A%

DEF FNgeticontext(win%,icon%)
LOCAL t$,flags%
 t$=""
 IF icon%>=0 THEN
  buffer%!0=win%
  buffer%!4=icon%
  SYS "Wimp_GetIconState",,buffer%
  flags%=buffer%!24
  IF (flags% AND (1<<0))<>0 THEN
   IF (flags% AND (1<<8))=0 THEN
    t$=FNgetstring(12,buffer%+28)
   ELSE
    t$=FNgetstring(255,buffer%!28)
   ENDIF
  ENDIF
 ENDIF
=t$

REM This gets a control terminated string of maximum length l% from p%

DEF FNgetstring(l%,p%)
LOCAL a$
 a$=""
 WHILE ?p%>=32 AND l%>0
  a$+=CHR$(?p%)
  p%+=1
  l%-=1
 ENDWHILE
=a$

REM This sets the icontext of a given icon

DEF PROCseticontext(win%,icon%,text$)
LOCAL flags%
 buffer%!0=win%
 buffer%!4=icon%
 SYS "Wimp_GetIconState",,buffer%
 flags%=buffer%!24
 IF (flags% AND (1<<0))<>0 THEN
  IF (flags% AND (1<<8))=0 THEN
   IF LEN text$>11 THEN ERROR 1,"String too long for non-indirected icon"
   $(buffer%+28)=text$
  ELSE
   $(buffer%!28)=text$
  ENDIF
  buffer%!8=0
  buffer%!12=0
  SYS "Wimp_SetIconState",,buffer%
 ELSE
  ERROR 1,"Not a text icon"
 ENDIF
ENDPROC
