home *** CD-ROM | disk | FTP | other *** search
- /* DClockMenu.rexx by Stefan Sticht PUBLIC DOMAIN
-
- DClockMenu is a short ARexx program which allows you to change
- the options of DClock v1.20+ easily via requesters.
- */
-
- VERSION = "v1.20"
-
- IF ~SHOW('L','rexxsupport.library') THEN
- IF EXISTS("LIBS:rexxsupport.library") THEN DO
- CALL ADDLIB('rexxsupport.library',0,-30)
- END
- ELSE DO
- Say "Got problems allocating rexxsupport.library"
- EXIT
- END
-
- SIGNAL ON HALT /* tell arexx to signal us that the HI */
- SIGNAL ON BREAK_C /* command has been used and trap also */
- SIGNAL ON BREAK_D /* break signals */
- SIGNAL ON BREAK_E
- SIGNAL ON BREAK_F
-
- OPTIONS FAILAT 20
- OPTIONS RESULTS /* Allow DClock to send results */
- ADDRESS "DCLOCK" /* DClock shall be our host */
-
- PARSE ARG argument /* get command line arguments */
- IF argument = "?" THEN EXIT(info())
-
- /* we require the rexxarplib.library; is it available ? */
- IF ~SHOW(LIBRARIES,"rexxarplib.library") THEN DO
- IF EXISTS("libs:rexxarplib.library") THEN DO
- CALL ADDLIB("rexxarplib.library",0,-30)
- END
- ELSE DO
- SAY "DClockMenu requires the rexxarplib.library v2.3 or later!"
- SAY "It can be found on your ARexx Disk. Please copy the"
- SAY "library to your 'libs:' directory!"
- EXIT
- END
- END
-
- dclock.on = SHOW("PORTS","DCLOCK") /* is DClock already running ? */
- IF ~dclock.on THEN DO
- CALL req("DClock has to be started first!")
- EXIT
- END
-
- ADDRESS AREXX "'CALL CreateHost(DCHOST,DCPORT,)'" /* create */
- DO FOR 50 WHILE ~SHOW("PORTS","DCHOST") /* a new host */
- CALL DELAY(10) /* for us */
- END
-
- IF ~SHOW("PORTS","DCHOST") THEN DO /* did the host really open ? */
- CALL req("Can't create a new host!") /* no, so quit */
- EXIT
- END
-
- CALL SETREQCOLOR(DCHOST, BLOCKPEN, 1) /* change color of window */
- CALL SETREQCOLOR(DCHOST, DETAILPEN, 0)
-
- idcmp = "CLOSEWINDOW GADGETUP MENUPICK"
- flags = "ACTIVATE WINDOWDRAG WINDOWDEPTH WINDOWCLOSE"
- width = 415
- height = 150
- leftedge = (SCREENCOLS() - width) % 2
- topedge = 20
-
- ok = OPENWINDOW(DCHOST,leftedge,topedge,width,height,idcmp,flags,,
- "DClock Menu")
- IF ~ok THEN DO
- CALL req("Can't open window!")
- CALL QUIT(DCHOST)
- EXIT
- END
-
- ok = OPENPORT(DCPORT) /* open the message port */
- IF ~ok THEN DO
- CALL req("Can't open new message port!")
- CALL QUIT(DCHOST)
- EXIT
- END
-
-
- /*
- * Get all current settings from DClock
- */
-
- STATUS
-
- PARSE VAR RESULT . dclock.beep . dclock.click . dclock.clickvolume,
- . dclock.priority . dclock.textcolor . dclock.backcolor,
- . dclock.alarm . dclock.alarmtime . dclock.setenv,
- . dclock.version . dclock.countdown . dclock.hour,
- . dclock.seconds . dclock.sound .
-
-
- /*
- * Menus
- */
-
- CALL SETAPEN(DCHOST,2) /* change detail pen */
- CALL ADDMENU(DCHOST,"DClock Menu") /* add a menu */
- CALL ADDITEM(DCHOST,"Version","VERSION","V",,) /* and two items */
- CALL ADDITEM(DCHOST,"Quit","CLOSEWINDOW","Q",,)
-
-
- /*
- * Gadgets:
- */
-
- ontext = " ON "
- offtext = " OFF "
- fontB = 7 /* Baseline offset */
- x = 20 /* LeftEdge of first gadget */
- y = 20 /* TopEdge of first gadget */
- dx = 100 /* horizontal offset of second gadget row */
- dy = 18 /* vertical offset of next gadget */
- gadhsize = 45 /* horizontal size of simple string gadget */
-
- /*
- * Switches:
- */
-
- CALL ADDGADGET(DCHOST, x, y, "BEEP", " BEEP ", "BEEP")
- CALL SETGADGET(DCHOST, "BEEP", dclock.beep)
- CALL ADDGADGET(DCHOST, x + dx, y, "CLICK", " CLICK ", "CLICK")
- CALL SETGADGET(DCHOST, "CLICK", dclock.click)
- CALL ADDGADGET(DCHOST, x + dx + dx, y, "ALARM", " ALARM ", "ALARM")
- CALL SETGADGET(DCHOST, "ALARM", dclock.alarm)
- CALL ADDGADGET(DCHOST, x + dx + dx + dx, y, "SETENV", " SETENV ", "SETENV")
- CALL SETGADGET(DCHOST, "SETENV", dclock.setenv)
- y = y + dy
- CALL ADDGADGET(DCHOST, x, y, "HOUR", " HOUR ", "HOUR")
- CALL SETGADGET(DCHOST, "HOUR", dclock.hour)
- CALL ADDGADGET(DCHOST, x + dx, y, "SECONDS", " SECONDS ", "SECONDS")
- CALL SETGADGET(DCHOST, "SECONDS", dclock.seconds)
-
-
- /*
- * Stringgadgets: these definitions are repeated below!
- */
-
- y1 = y + dy
-
-
- CALL MOVE(DCHOST, x, y1 + fontB)
- CALL TEXT(DCHOST,"ALARMTIME:")
- CALL ADDGADGET(DCHOST, x + dx, y1, "ALARMTIME", " " ||,
- dclock.alarmtime, "ALARMTIME %g", 80)
-
- /* this isn't a string gadget! */
- CALL MOVE(DCHOST, x + dx + dx, y1 + fontB)
- CALL TEXT(DCHOST,"SOUNDFILE:")
- CALL ADDGADGET(DCHOST, x + 3 * dx, y1, "SOUND", CENTER(dclock.sound, 5),,
- "SOUND")
-
- y2 = y1 + dy;
-
- CALL MOVE(DCHOST, x, y2 + fontB)
- CALL TEXT(DCHOST,"COUNTDOWN:")
- CALL ADDGADGET(DCHOST, x + dx, y2, "COUNTDOWN", CENTER(dclock.countdown, 7),,
- "COUNTDOWN %g", gadhsize)
-
- CALL MOVE(DCHOST, x + dx + dx, y2 + fontB)
- CALL TEXT(DCHOST,"PRIORITY:")
- CALL ADDGADGET(DCHOST, x + 3 * dx, y2, "PRIORITY", CENTER(dclock.priority, 7),,
- "PRIORITY %g", gadhsize)
-
- y3 = y2 + dy;
-
- CALL MOVE(DCHOST, x, y3 + fontB)
- CALL TEXT(DCHOST,"TEXTCOLOUR:")
- CALL ADDGADGET(DCHOST, x + dx, y3, "TEXTCOLOR", CENTER(dclock.textcolor, 7),,
- "TEXTCOLOR %g", gadhsize)
-
- CALL MOVE(DCHOST, x + dx + dx, y3 + fontB)
- CALL TEXT(DCHOST,"BACKCOLOUR:")
- CALL ADDGADGET(DCHOST, x + 3 * dx, y3, "BACKCOLOR",,
- CENTER(dclock.backcolor, 7), "BACKCOLOR %g", gadhsize)
-
- y4 = y3 + dy;
-
- CALL MOVE(DCHOST, x, y4 + fontB)
- CALL TEXT(DCHOST,"CLICKVOLUME:")
- CALL ADDGADGET(DCHOST, x + dx, y4, "CLICKVOL", CENTER(dclock.clickvolume, 7),,
- "CLICKVOLUME %g", gadhsize)
-
- /* Not implemented yet !
- /*
- * Other gadgets:
- */
-
- y = y + dy
-
- CALL ADDGADGET(DCHOST, x + 30, y, "remove", " REMOVE DCLOCK ",,
- "REMOVE")
- CALL ADDGADGET(DCHOST, x + dx + dx, y, "refresh", " REFRESH DCLOCK ",,
- "REFRESH")
- */
-
- /*
- * Call the main-routine:
- */
-
- CALL lookport()
-
- EXIT
-
- /*
- * lookport: watch our message port for incoming messages
- */
- lookport:
- quitflag = 0
- DO FOREVER UNTIL quitflag
- CALL WAITPKT(DCPORT)
- pkt = GETPKT(DCPORT)
- IF pkt ~= NULL() THEN DO
- arg = GETARG(pkt)
- CALL REPLY(pkt, 0)
- SELECT
- WHEN arg = "CLOSEWINDOW" THEN quitflag = 1
- WHEN arg = "VERSION" THEN CALL version()
- WHEN LEFT(arg,9) = "CLICKVOLU" THEN CALL clickvol(arg)
- WHEN LEFT(arg,9) = "ALARMTIME" THEN CALL alarmtime(arg)
- WHEN LEFT(arg,9) = "COUNTDOWN" THEN CALL countdown(arg)
- WHEN LEFT(arg,8) = "PRIORITY" THEN CALL priority(arg)
- WHEN LEFT(arg,9) = "TEXTCOLOR" THEN CALL textcolor(arg)
- WHEN LEFT(arg,9) = "BACKCOLOR" THEN CALL backcolor(arg)
- WHEN arg = "SOUND" THEN CALL soundfile
- WHEN arg = "REMOVE" THEN NOP
- WHEN arg = "REFRESH" THEN NOP
- OTHERWISE CALL switch(arg)
- END
- END
- END
- CALL quitcleanup("ok")
- RETURN(0)
-
- /*
- * quitcleanup: close all opened resources and exit
- */
- quitcleanup:
- PARSE ARG msg
- CALL CLOSEPORT(DCPORT)
- CALL QUIT(DCHOST)
- IF msg ~= "ok" THEN SAY msg
- EXIT
-
-
- /*
- * switch: change the status of a option
- */
- switch: PROCEDURE EXPOSE dclock.
- ARG option
-
- IF dclock.option = "ON" THEN dclock.option = "OFF"
- ELSE dclock.option = "ON"
-
- INTERPRET option dclock.option
- CALL SETGADGET(DCHOST, option, dclock.option)
-
- RETURN(0)
-
- /*
- * version: display current DClock Version number
- */
- version: PROCEDURE
- STATUS VERSION
- text = "DClock V1." || RESULT "is installed."
- CALL req(text)
- RETURN(0)
-
- /*
- * alarmtime: a new time has been entered, check it
- */
- alarmtime: PROCEDURE
- PARSE ARG time
- time = SUBWORD(time,2,1)
- IF LENGTH(time) = 8 THEN DO
- ALARMTIME time
- IF RC > 0 THEN DO
- CALL req("Can't change alarmtime!\Perhaps invalid format?")
- END
- END
- ELSE CALL req("Alarm time format has to be in the format HH:MM:SS!")
- RETURN(0)
-
- /*
- * countdown: a new time has been entered, check it
- */
- countdown: PROCEDURE EXPOSE dclock.
- PARSE ARG count
- count = SUBWORD(count, 2, 1)
- IF DATATYPE(count, "NUMERIC") THEN DO
- COUNTDOWN count
- dclock.countdown = count
- END
- ELSE CALL req("Countdown has to be a numeric value!")
- RETURN(0)
-
- /*
- * priority: a new priority has been entered
- */
- priority: PROCEDURE EXPOSE dclock.
- PARSE ARG pri
- pri = SUBWORD(pri, 2, 1)
- IF DATATYPE(pri, "NUMERIC") THEN DO
- IF (pri >= -127 & pri <= 127) THEN DO
- PRIORITY pri
- dclock.priority = pri
- END
- ELSE DO
- CALL req("Illegal value for handler task priority\" ||,
- "(must be between -127 and 127)!")
- END
- END
- ELSE CALL req("Priority must be numeric!")
- RETURN(0)
-
- /*
- * textcolor: textcolour has been changed
- */
- textcolor: PROCEDURE EXPOSE dclock.
- PARSE ARG col
- col = SUBWORD(col, 2, 1)
- IF DATATYPE(col, "NUMERIC") THEN DO
- TEXTCOLOUR col
- dclock.textcolor = col
- END
- ELSE CALL req("TEXTCOLOR must be numeric!")
- RETURN(0)
-
- /*
- * backcolor: backcolour has been changed
- */
- backcolor: PROCEDURE EXPOSE x dx y3 gadhsize
- PARSE ARG col
- col = SUBWORD(col, 2, 1)
- IF DATATYPE(col, "NUMERIC") THEN DO
- BACKCOLOUR col
- IF RC > 0 THEN req("Can't change background colour!")
- END
- ELSE CALL req("BACKCOLOR must be numeric!")
-
- RETURN(0)
-
- /*
- * clickvol: the clickvolume has been changed
- */
- clickvol: PROCEDURE EXPOSE x dx y4 gadhsize
- PARSE ARG vol
- error = 0
- vol = SUBWORD(vol, 2, 1)
- IF DATATYPE(vol, "NUMERIC") THEN DO
- IF (0 < vol | vol > 64) THEN DO
- CALL req("Illegal value for click volume\" ||,
- "(must be between 0 and 64)!")
- error = 1
- END
- ELSE DO
- CLICKVOLUME vol
- IF RC > 0 THEN DO
- req("Can't change clickvolume")
- error = 1
- END
- END
- END
- ELSE DO
- CALL req("CLICKVOLUME must be numeric!")
- error = 1
- END
-
- IF error THEN DO
- CALL REMOVEGADGET(DCHOST, "CLICKVOL")
- STATUS CLICKVOLUME
- CALL ADDGADGET(DCHOST, x + dx, y4, "CLICKVOL", " " RESULT,,
- "CLICKVOLUME %g", gadhsize)
- END
-
- RETURN(0)
-
- /*
- * soundfile:
- */
- soundfile: PROCEDURE EXPOSE dclock.sound x dx y1
-
- file = GETFILE(0, 12, , , "Select sound file:")
- IF file ~= "" THEN DO
- IF ~EXISTS(file) THEN req("Can't find that file!")
- ELSE DO
- SOUND file
- IF RC > 0 THEN req("Can't load that file!")
- STATUS SOUND
- dclock.sound = RESULT
- CALL REMOVEGADGET(DCHOST, "SOUND")
- CALL ADDGADGET(DCHOST, x + 3 * dx, y1, "SOUND",,
- CENTER(dclock.sound, 5), "SOUND")
-
- END
- END
- RETURN(0)
-
-
- /*
- * info: display some information about DClockMenu
- */
- info: PROCEDURE EXPOSE version
- SAY "DClockMenu " version "by Stefan Sticht"
- SAY "Usage: DClockMenu"
- SAY
- SAY SOURCELINE(3)
- SAY SOURCELINE(4)
- SAY
- RETURN(0)
-
- /*
- * req: call the requester of the rexxarplib.library with msg
- */
- req: PROCEDURE
- PARSE ARG msg
- CALL REQUEST(0,12,msg,,," OK ",)
- RETURN(0)
-
- BREAK_C: /* somebody wants to kill us, but before we leave */
- BREAK_D: /* we have to clean up */
- BREAK_E:
- BREAK_F:
- HALT:
- CALL quitcleanup("***user break")
- EXIT
-