home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 18 REXX
/
18-REXX.zip
/
netrexx.zip
/
NetRexx
/
WordClock.nrx
< prev
Wrap
Text File
|
1997-05-19
|
5KB
|
117 lines
/* WordClock -- an applet that shows the time in English. */
/* */
/* Parameters: */
/* */
/* face -- the font face to use */
/* size -- the font size to use */
/* */
/* ---------------------------------------------------------- */
/* Based on the ancient QTIME.REXX, and typical Java applets. */
class WordClock extends Applet implements Runnable
timer=Thread null /* the timer thread */
offsetx; offsety /* text position */
now /* current time */
method init
/* Get parameters from the <applet> markup */
face=getParameter("face") /* font face */
if face=null then face="TimesRoman"
size=getParameter("size")
if size=null then size="20" /* font size */
setFont(Font(face, Font.BOLD, size))
resize(size*20, size*2) /* set window size */
offsetx=size/2 /* and where text will start */
offsety=size*3/2 /* note Y is from top */
parse Date() . . . now . /* initial time is fourth word */
method start
if timer=null then timer=Thread(this) /* new thread */
timer.setPriority(Thread.MAX_PRIORITY) /* time matters */
timer.start /* start the thread */
method stop
if timer\=null then do /* have thread */
timer.stop /* .. so stop it */
timer=null /* .. and discard */
end
method run
/* Use the Java Date class to get the time */
loop while timer\=null
parse Date() . . . now . /* time is fourth word */
this.repaint /* redisplay */
parse now ':' ':'secs /* where in minute */
wait=30-secs /* calculate delay in seconds */
if wait<=0 then wait=wait+60
/* say 'secs, wait:' secs wait */
Thread.sleep(1000*wait) /* wait for milliseconds */
catch InterruptedException
say 'Interrupted...'
end
timer=null /* done */
method paint(g=Graphics)
g.drawString(wordtime(now), offsetx, offsety) /* show it */
/* WORDTIME -- a cut-down version of QTIME.REXX
Arg1 is the time string (hh:mm:ss)
Returns the time in english, as a Rexx string
*/
method wordtime(arg) static returns Rexx
/* Extract the hours, minutes, and seconds from the time. */
parse arg hour':'min':'sec
if sec>29 then min=min+1 /* round up minutes */
/* Nearness phrases - this time using an array */
near=Rexx[5] /* five items */
near[0]='' /* exact */
near[1]=' just gone'; near[2]=' just after' /* after */
near[3]=' nearly'; near[4]=' almost' /* before */
mod=min//5 /* where we are in 5 minute bracket */
out="It's"near[mod] /* start building the result */
if min>32 then hour=hour+1 /* we are TO the hour... */
min=min+2 /* shift minutes to straddle a 5-minute point */
/* Now special-case the result for Noon and Midnight hours */
if hour//12=0 & min//60<=4 then do
if hour=12 then return out 'Noon.'
return 'Midnight.'
end
min=min-(min//5) /* find nearest 5 mins */
if hour>12
then hour=hour-12 /* get rid of 24-hour clock */
else
if hour=0 then hour=12 /* .. and allow for midnight */
/* Determine the phrase to use for each 5-minute segment */
select
when min=0 then nop /* add "o'clock" later */
when min=60 then min=0 /* ditto */
when min= 5 then out=out 'five past'
when min=10 then out=out 'ten past'
when min=15 then out=out 'a quarter past'
when min=20 then out=out 'twenty past'
when min=25 then out=out 'twenty-five past'
when min=30 then out=out 'half past'
when min=35 then out=out 'twenty-five to'
when min=40 then out=out 'twenty to'
when min=45 then out=out 'a quarter to'
when min=50 then out=out 'ten to'
when min=55 then out=out 'five to'
end
numbers='one two three four five six'- /* continuation */
'seven eight nine ten eleven twelve '
out=out numbers.word(hour) /* add the hour number */
if min=0 then out=out "o'clock" /* .. and o'clock if exact */
return out'.' /* return the final result */
/* Mike Cowlishaw, December 1979 - January 1985. */
/* NetRexx version March 1996; applet April 1996. */