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
}