Clock — File Browser
a_dude-clock / a_dude-clock / clock_challenge.mrc
clock_challenge.mrc — 16.63 KB — Download this file
on *:LOAD:{
clock.init
set %clock.pos.x [ 0 ]
set %clock.pos.y [ 0 ]
set %clock.alarm [ 00:00:00 ]
set %clock.timezone [ +01 ]
set %clock.city [ Brussels ]
echo $colour(info) -se *** Clock installed ... Type /clock or go to the status popup or "commands" menu and select the item "Clock"
clock.help
}
on *:CONNECT:{
if ($window(@Clock).state != $null) {
set %clock.pos.x [ $window(@Clock).x ]
set %clock.pos.y [ $window(@Clock).y ]
.timerClock off
.timerClockAlarm off
window -c @ClockHidden
window -c @Clock
clock
}
}
alias -l clock.help {
echo $colour(info) -se * Left-click on the "Timezone" area : to choose your timezone or show a different timezone than yours (your Windows clock should be set correctly !)
echo $colour(info) -se * Left-click on the "Alarm" area : to set the alarm. When the alarm is triggered, either left-click anywhere in the @Clock window to stop the sound or close the window @Clock
echo $colour(info) -se * Left-click on the "Settings" area : to configure all the displayed colours. Enter colour values between 0 and 15
echo $colour(info) -se * Right-click on the "Alarm" area : to set the alarm on/off (Note : the alarm is triggered on your Windows local time, no matter which timezone you choosed)
echo $colour(info) -se * To uninstall the clock, type /uninstall.clock
}
alias clock.init {
set %clock.h [ 1 ]
set %clock.m [ 2 ]
set %clock.s [ 4 ]
set %clock.hold [ 1 ]
set %clock.dis [ 15 ]
set %clock.bg [ 0 ]
set %clock.txt.bg [ 10 ]
set %clock.txt [ 0 ]
set %clock.write [ 1 ]
}
alias uninstall.clock {
.timerClock off
.timerClockAlarm off
window -c @ClockHidden
window -c @Clock
unset %clock.*
echo $colour(info) -se *** Clock successfully uninstalled
unload -rs $scriptdir $+ clock_challenge.mrc
}
menu status,menubar {
Clock:clock
}
alias clock {
if ($window(@Clock).state == $null) {
window -bkh[O]p @ClockHidden 0 0 270 200
window -bk[O]p +tn @Clock %clock.pos.x %clock.pos.y 270 200
titlebar @Clock - www.armathan.cjb.net
clock.draw.window
}
elseif (($window(@Clock).state == minimized) || ($window(@Clock).state == normal)) { window -a @Clock }
}
on *:CLOSE:@Clock:{
.timerClock off
.timerClockAlarm off
window -c @ClockHidden
set %clock.pos.x [ $window(@Clock).x ]
set %clock.pos.y [ $window(@Clock).y ]
}
menu @Clock {
;mouse:echo 4 -s ( $mouse.x , $mouse.y )
rclick:clock.alarm.on $mouse.x $mouse.y
sclick:clock.menu $mouse.x $mouse.y
}
alias -l clock.alarm.on {
if ($inrect($1,$2,170,85,73,37)) {
if (%clock.alarm.on != $null) { unset %clock.alarm.on }
else { set %clock.alarm.on [ on ] }
clock.draw.alarm
}
}
alias -l clock.menu {
.timerClockAlarm off
if ($inrect($1,$2,170,10,73,58)) { clock.timezone }
if ($inrect($1,$2,170,85,73,37)) { clock.alarm }
if ($inrect($1,$2,170,140,73,20)) { clock.settings }
}
alias -l clock.draw.window {
drawrect -f @Clock %clock.bg 1 0 0 270 200
drawrect -f @ClockHidden %clock.bg 1 0 0 270 200
clock.draw
.timerClock 0 1 clock.draw
clock.draw.timezone
clock.draw.alarm
drawrect -f @Clock %clock.txt.bg 1 170 140 75 20
drawtext @Clock %clock.txt 180 142 Settings
}
alias -l clock.draw.timezone {
drawrect -f @Clock %clock.bg 1 174 32 67 34
drawrect @Clock %clock.txt.bg 2 170 10 75 60
drawrect -f @Clock %clock.txt.bg 1 170 10 75 20
drawtext @Clock %clock.txt 175 12 Timezone
drawtext -c @Clock %clock.write 175 32 66 20 %clock.city
drawtext @Clock %clock.write 175 52 GMT %clock.timezone
}
alias -l clock.draw.alarm {
drawrect -f @Clock %clock.bg 1 173 106 68 15
drawrect @Clock %clock.txt.bg 2 170 85 75 40
drawrect -f @Clock %clock.txt.bg 1 170 85 75 20
if (%clock.alarm.on != $null) { drawtext @Clock %clock.txt 178 87 Alarm on }
else { drawtext @Clock %clock.txt 178 87 Alarm off }
drawtext @Clock %clock.write 177 107 %clock.alarm
}
alias -l clock.draw {
drawdot @ClockHidden %clock.dis 60 75 75
var %clock.time = $gettok($fulldate,4,32)
if ((%clock.time == %clock.alarm) && (%clock.alarm.on != $null)) { clock.alarm.start }
var %clock.hour = $calc($gettok(%clock.time,1,58) - $time(z) + %clock.timezone)
if (%clock.hour > 24) { %clock.hour = %clock.hour - 24 }
if (%clock.hour < 0) { %clock.hour = 24 + %clock.hour }
drawrect -f @ClockHidden %clock.dis 1 43 143 65 20
var %clock.time.dig = $clock.add.zero(%clock.hour) $+ : $+ $gettok(%clock.time,2,58) $+ : $+ $gettok(%clock.time,3,58)
drawtext @ClockHidden %clock.h 48 145 %clock.time.dig
if (%clock.hour > 12) { %clock.hour = %clock.hour - 12 }
drawline @ClockHidden %clock.h 2 75 75 $clock.pos(%clock.hour,h,$gettok(%clock.time,2,58))
drawline @ClockHidden %clock.m 1 75 75 $clock.pos($gettok(%clock.time,2,58),m)
drawline @ClockHidden %clock.s 1 75 75 $clock.pos($gettok(%clock.time,3,58),s)
drawline @ClockHidden %clock.h 3 75 15 75 18
drawline @ClockHidden %clock.h 3 127 75 130 75
drawline @ClockHidden %clock.h 3 15 75 19 75
drawline @ClockHidden %clock.h 3 75 126 75 130
drawdot @ClockHidden %clock.hold 4 76 76
drawcopy @ClockHidden 0 0 140 160 @Clock 0 0 140 160
}
;clock.pos $hour/$min/$sec h/m/s
alias -l clock.pos {
var %clock.x
var %clock.y
var %clock.par
var %clock.ang
if ($2 == h) {
if (($1 >= 0) && ($1 <= 3)) {
%clock.ang = $math.degree.rad($calc(90 - ($1 * 30) - ($3 / 60 * 30) ))
}
if (($1 > 3) && ($1 <= 6)) {
%clock.ang = $math.degree.rad($calc(360 - (($1 - 3) * 30) - ($3 / 60 * 30) ))
}
if (($1 > 6) && ($1 <= 9)) {
%clock.ang = $math.degree.rad($calc(180 + ((9 - $1) * 30) - ($3 / 60 * 30) ))
}
if (($1 > 9) && ($1 <= 12)) {
%clock.ang = $math.degree.rad($calc(90 + ((12 - $1) * 30) - ($3 / 60 * 30) ))
}
%clock.x = $math.cos(%clock.ang)
%clock.y = $math.sin(%clock.ang)
return $round($calc((%clock.x * 30) + 75),0) $round($calc(- (%clock.y * 30) + 75),0)
}
if (($2 == m) || ($2 == s)) {
if (($1 >= 0) && ($1 <= 15)) {
%clock.ang = $math.degree.rad($calc(90 - ($1 * 6)))
}
if (($1 > 15) && ($1 <= 30)) {
%clock.ang = $math.degree.rad($calc(360 - (($1 - 15) * 6)))
}
if (($1 > 30) && ($1 <= 45)) {
%clock.ang = $math.degree.rad($calc(180 + ((45 - $1) * 6)))
}
if (($1 > 45) && ($1 <= 60)) {
%clock.ang = $math.degree.rad($calc(90 + ((60 - $1) * 6)))
}
%clock.x = $math.cos(%clock.ang)
%clock.y = $math.sin(%clock.ang)
return $round($calc((%clock.x * 50) + 75),0) $round($calc(- (%clock.y * 50) + 75),0)
}
}
alias -l clock.alarm.start {
beep 5 2
.timerClockAlarm 0 2 beep 5 2
}
alias -l clock.add.zero {
if ($len($1) == 1) { return 0 $+ $1 }
else { return $1 }
}
alias -l clock.timezone {
if ($dialog(clock.timezone.dialog) == $null) {
dialog -m clock.timezone.dialog clock.timezone.dialog
}
else { dialog -v clock.timezone.dialog }
}
alias -l clock.alarm {
if ($dialog(clock.alarm.dialog) == $null) {
dialog -m clock.alarm.dialog clock.alarm.dialog
}
else { dialog -v clock.alarm.dialog }
}
alias -l clock.settings {
if ($dialog(clock.settings.dialog) == $null) {
dialog -m clock.settings.dialog clock.settings.dialog
}
else { dialog -v clock.settings.dialog }
}
dialog clock.alarm.dialog {
title "Clock - Alarm"
size -1 -1 100 40
option dbu
edit "",1601,5 5 12 10
text ":",1603,19 6 2 10
edit "",1604,23 5 12 10
text ":",1605,37 6 2 10
edit "",1606,40 5 12 10
check "Enabled",1607,60 5 30 10
button "OK", 1608, 20 25 25 12, ok
button "Cancel",1609,55 25 25 12,cancel
}
ON *:DIALOG:clock.alarm.dialog:INIT:0:{
did -ra clock.alarm.dialog 1601 $gettok(%clock.alarm,1,58)
did -ra clock.alarm.dialog 1604 $gettok(%clock.alarm,2,58)
did -ra clock.alarm.dialog 1606 $gettok(%clock.alarm,3,58)
if (%clock.alarm.on != $null) { did -c clock.alarm.dialog 1607 }
else { did -u clock.alarm.dialog 1607 }
}
ON *:DIALOG:clock.alarm.dialog:SCLICK:1608:{
var %clock.al.val = $false
if (($did(1601).text isnum) && ($did(1601).text >= 0) && ($did(1601).text < 24)) { %clock.al.val = $true }
else { %clock.al.val = $false }
if (($did(1604).text isnum) && ($did(1604).text >= 0) && ($did(1604).text < 60) && (%clock.al.val == $true)) { %clock.al.val = $true }
else { %clock.al.val = $false }
if (($did(1606).text isnum) && ($did(1606).text >= 0) && ($did(1606).text < 60) && (%clock.al.val == $true)) { %clock.al.val = $true }
else { %clock.al.val = $false }
if (%clock.al.val == $true) {
set %clock.alarm [ [ $clock.add.zero($did(1601).text) ] [ $+ : ] [ $+ [ $clock.add.zero($did(1604).text) ] ] [ $+ : ] [ $+ [ $clock.add.zero($did(1606).text) ] ] ]
;scr ipted by a_ du de at w w w. ar mat han. c j b. n e t
if ($did(1607).state == 1) { set %clock.alarm.on [ on ] }
else { unset %clock.alarm.on }
clock.draw.alarm
}
else { echo $colour(info) -se *** Alarm error : one of the values was wrong }
}
dialog clock.timezone.dialog {
title "Clock - Timezone"
size -1 -1 200 40
option dbu
text "Display timezone : ",1612,5 6 45 10
combo 1613,50 5 145 80,drop
button "OK", 1610, 65 25 30 12, ok
button "Cancel",1611,100 25 30 12,cancel
}
ON *:DIALOG:clock.timezone.dialog:INIT:0:{
did -a clock.timezone.dialog 1613 GMT -11 Samoa Midway Islands
did -a clock.timezone.dialog 1613 GMT -10 Hawaii
did -a clock.timezone.dialog 1613 GMT -09 Alaska
did -a clock.timezone.dialog 1613 GMT -08 West-Coast US && Canada Tijuana
did -a clock.timezone.dialog 1613 GMT -07 Rockies US && Canada
did -a clock.timezone.dialog 1613 GMT -06 Central US && Canada, Mexico
did -a clock.timezone.dialog 1613 GMT -05 East-Coast US && Canada Lima Bogota
did -a clock.timezone.dialog 1613 GMT -04 Bolivia Venezuela
did -a clock.timezone.dialog 1613 GMT -03 Brazilia Terra Novia Buenos Aires
did -a clock.timezone.dialog 1613 GMT -02 Central Atlantic
did -a clock.timezone.dialog 1613 GMT -01 Açores Cap Verde
did -a clock.timezone.dialog 1613 GMT +00 London Casablanca
did -a clock.timezone.dialog 1613 GMT +01 Brussels Berlin Madrid Stockholm
did -a clock.timezone.dialog 1613 GMT +02 Helsinki Athen Istanbul Israel Cairo Pretoria
did -a clock.timezone.dialog 1613 GMT +03 Nairobi Moscou Bagdad Teheran
did -a clock.timezone.dialog 1613 GMT +04 Abu Dhabi Tbilissi Muscat
did -a clock.timezone.dialog 1613 GMT +05 Karachi Islamabad Tachkent
did -a clock.timezone.dialog 1613 GMT +06 Almaty Daka
did -a clock.timezone.dialog 1613 GMT +07 Bangkok Jakarta Hanoi
did -a clock.timezone.dialog 1613 GMT +08 Perth Hong Kong Pekin Singapour
did -a clock.timezone.dialog 1613 GMT +09 Tokyo Seoul Osaka
did -a clock.timezone.dialog 1613 GMT +10 Brisbane Melbourne Sydney Guam Port Moresby
did -a clock.timezone.dialog 1613 GMT +11 Salomon New Caledonia
did -a clock.timezone.dialog 1613 GMT +12 Fidji Aukland Wellington Kamtchatka
did -c clock.timezone.dialog 1613 $calc(12 + %clock.timezone)
}
ON *:DIALOG:clock.timezone.dialog:SCLICK:1610:{
var %clock.tz = $did(1613).sel
%clock.tz = $did(1613,%clock.tz)
set %clock.timezone [ $gettok(%clock.tz,2,32) ]
set %clock.city [ $gettok(%clock.tz,3,32) ]
clock.draw.timezone
clock.draw
}
dialog clock.settings.dialog {
title "Clock - Colour settings"
size -1 -1 150 110
option dbu
box "Clock display :",1617,5 5 65 80
text "Backgrnd :",1618,15 16 30 10
edit "",1619,45 15 12 10
text "Hands :",1620,15 30 30 10
text "Hour :",1621,27 41 15 10
edit "",1622,45 40 12 10
text "Min :",1623,27 51 15 10
edit "",1624,45 50 12 10
text "Sec :",1625,27 61 15 10
edit "",1626,45 60 12 10
text "Hold :",1627,27 71 15 10
edit "",1628,45 70 12 10
box "Various displays :",1629,80 5 65 80
text "Backgrnd :",1630,90 16 30 10
edit "",1631,120 15 12 10
text "Texts :",1632,90 30 30 10
text "Bkgrnd : ",1633,97 41 20 10
edit "",1634,120 40 12 10
text "Title :",1635,97 51 30 10
edit "",1636,120 50 12 10
text "Text :",1637,97 61 30 10
edit "",1638,120 60 12 10
button "OK", 1615, 45 95 25 12, ok
button "Cancel",1616,80 95 25 12,cancel
}
ON *:DIALOG:clock.settings.dialog:INIT:0:{
did -ra clock.settings.dialog 1619 %clock.dis
did -ra clock.settings.dialog 1622 %clock.h
did -ra clock.settings.dialog 1624 %clock.m
did -ra clock.settings.dialog 1626 %clock.s
did -ra clock.settings.dialog 1628 %clock.hold
did -ra clock.settings.dialog 1631 %clock.bg
did -ra clock.settings.dialog 1634 %clock.txt.bg
did -ra clock.settings.dialog 1636 %clock.txt
did -ra clock.settings.dialog 1638 %clock.write
}
ON *:DIALOG:clock.settings.dialog:SCLICK:1615:{
set %clock.dis [ $clock.check.setting($did(1619).text,%clock.dis) ]
set %clock.h [ $clock.check.setting($did(1622).text,%clock.h) ]
set %clock.m [ $clock.check.setting($did(1624).text,%clock.m) ]
set %clock.s [ $clock.check.setting($did(1626).text,%clock.s) ]
set %clock.hold [ $clock.check.setting($did(1628).text,%clock.hold) ]
set %clock.bg [ $clock.check.setting($did(1631).text,%clock.bg) ]
set %clock.txt.bg [ $clock.check.setting($did(1634).text,%clock.txt.bg) ]
set %clock.txt [ $clock.check.setting($did(1636).text,%clock.txt) ]
set %clock.write [ $clock.check.setting($did(1638).text,%clock.write) ]
clock.draw.window
}
alias -l clock.check.setting {
if (($1 isnum) && ($1 >= 0) && ($1 <= 15)) { return $1 }
else { return $2 }
}
alias math.pi { return 3.14159265358 }
;conversion of an angle from rad to degree
alias math.rad.degree { return $calc((180 / $math.pi) * $1) }
;conversion of an angle from degree to rad
alias math.degree.rad { return $calc(($math.pi / 180) * $1) }
;cosinus of an angle (angle in rad) --> angle between 0 and 2*pi
;$math.cos(angle)
alias math.cos {
if ($1 <= $calc($math.pi / 2)) { return $math.cos.help($1) }
if (($1 > $calc($math.pi / 2)) && ($1 <= $math.pi)) {
var %cos.angle = $calc($1 - $calc($math.pi / 2))
return $calc(-1 * $math.sin.help(%cos.angle))
}
if (($1 > $math.pi) && ($1 <= $calc(3 * $math.pi / 2))) {
var %cos.angle = $calc($1 - $math.pi)
return $calc(-1 * $math.cos.help(%cos.angle))
}
if (($1 > $calc(3 * $math.pi / 2)) && ($1 <= $calc(2 * $math.pi))) {
var %cos.angle = $calc($math.pi * 2 - $1)
return $math.cos.help(%cos.angle)
}
}
alias math.cos.help {
var %cos.i = 1
var %cos.res = 1
var %cos.sign = neg
while (%cos.i <= 6) {
if (2 // %cos.i) {
if (%cos.sign == neg) {
%cos.res = $calc(%cos.res - ($math.exp($1,%cos.i) / $math.fact(%cos.i)))
%cos.sign = pos
}
else {
%cos.res = $calc(%cos.res + ($math.exp($1,%cos.i) / $math.fact(%cos.i)))
%cos.sign = neg
}
}
inc %cos.i 1
}
return %cos.res
}
;sinus of an angle (angle in rad) --> angle between 0 and 2*pi
;$math.sin(angle)
alias math.sin {
if ($1 <= $calc($math.pi / 2)) { return $math.sin.help($1) }
if (($1 > $calc($math.pi / 2)) && ($1 <= $math.pi)) {
var %sin.angle = $calc($1 - $calc($math.pi / 2))
return $math.cos.help(%sin.angle)
}
if (($1 > $math.pi) && ($1 <= $calc(3 * $math.pi / 2))) {
var %sin.angle = $calc($1 - $math.pi)
return $calc(-1 * $math.sin.help(%sin.angle))
}
if (($1 > $calc(3 * $math.pi / 2)) && ($1 <= $calc(2 * $math.pi))) {
var %sin.angle = $calc($math.pi * 2 - $1)
return $calc(-1 * $math.sin.help(%sin.angle))
}
}
alias math.sin.help {
var %sin.i = 1
var %sin.sign = pos
var %sin.res = 0
while (%sin.i <= 6) {
if (2 \\ %sin.i) {
if (%sin.sign == neg) {
%sin.res = $calc(%sin.res - ($math.exp($1,%sin.i) / $math.fact(%sin.i)))
%sin.sign = pos
}
else {
%sin.res = $calc(%sin.res + ($math.exp($1,%sin.i) / $math.fact(%sin.i)))
%sin.sign = neg
}
}
inc %sin.i 1
}
return %sin.res
}
;in french, it's called "factorielle", I don't know how it's called in English
;ex: 6! = 1 * 2 * 3 * 4 * 5 * 6
;$math.fact(number) (with number > 0)
alias math.fact {
if ($1 == 1) { return 1 }
var %fact.i = 1
var %fact = 1
while (%fact.i <= $1) {
%fact = $calc(%fact * %fact.i)
inc %fact.i 1
}
return %fact
}
;exponent of a number ... like 2^4 = 16
;$math.exp(number, exp)
alias math.exp {
var %exp.i = 1
if ($2 == 0) { return 1 }
else { var %exp = $1 }
while (%exp.i < $2 ) {
%exp = $calc(%exp * $1)
inc %exp.i 1
}
return %exp
}