Fog Creek Software
Discussion Board




Portable Countdown with exe version

With an old horse as TCL,

# New Year Countdown in TCL
# Philippe Back - Jan 2004

proc refresh {} {
 
  global remainingAsText
  global newYear
 
  set remaining [expr $newYear - [clock seconds]]
  set remainingAsText "[clock format $remaining -format {%j days %H hours %M' %S''}]"
  if {$remaining<=0} {
    set remainingAsText "HAPPY NEW YEAR"
    update
  } else {
    after 1000 refresh
  }
}

set newYear [clock scan "Jan 1, 2005"]

label .count -textvariable remainingAsText -font {Courier 40 bold} -bg white -fg red
pack .count
after 1000 refresh


and

prowrap countdown.tcl -out countdown.exe

You have what you need for your party (and with the quicktime extension, you can even embed a movie, MP3s, ...)

As an added benefit, you can deploy the TCL script on MacOS 9, MacOS X, Linux, Win9x, WinNT, Win2K and WinXP (okay you'll have to install a tcl interpreter on some of them but this is *one* file in addition to the script).

Like P. Greenspun wrote: TCL is like Lisp without a brain.
As another poster wrote: Lisp gave me multiple orgasms.

Well, TCL makes me feel good :-) And it doesn't take ages to load. Best of all, it's free and you get all the source code you want.

Philippe Back
Thursday, January 29, 2004

"okay you'll have to install a tcl interpreter "

ROTFL!

Just me (Sir to you)
Thursday, January 29, 2004

"okay you'll have to install a tcl interpreter on some of them but this is *one* file in addition to the script"

One file? Excuse me? The typical TCL install on Unix is dozens of files, with paths hard coded into the exe so you can't install without installing from source.

Chris Tavares
Thursday, January 29, 2004

<HEAD>

<SCRIPT LANGUAGE="JavaScript">

<!-- Begin
function getTime() {
c1 = new Image(); c1.src = "1c.gif";
c2 = new Image(); c2.src = "2c.gif";
c3 = new Image(); c3.src = "3c.gif";
c4 = new Image(); c4.src = "4c.gif";
c5 = new Image(); c5.src = "5c.gif";
c6 = new Image(); c6.src = "6c.gif";
c7 = new Image(); c7.src = "7c.gif";
c8 = new Image(); c8.src = "8c.gif";
c9 = new Image(); c9.src = "9c.gif";
c0 = new Image(); c0.src = "0c.gif";
Cc = new Image(); Cc.src = "Cc.gif";
now = new Date();

//ENTER BELOW THE DATE YOU WISH TO COUNTDOWN TO
later = new Date("Jan 1 2005 0:00:01");

days = (later - now) / 1000 / 60 / 60 / 24;
daysRound = Math.floor(days);
hours = (later - now) / 1000 / 60 / 60 - (24 * daysRound);
hoursRound = Math.floor(hours);
minutes = (later - now) / 1000 /60 - (24 * 60 * daysRound) - (60 * hoursRound);
minutesRound = Math.floor(minutes);
seconds = (later - now) / 1000 - (24 * 60 * 60 * daysRound) - (60 * 60 * hoursRound) - (60 * minutesRound);
secondsRound = Math.round(seconds);

if (secondsRound <= 9) {
document.images.g.src = c0.src;
document.images.h.src = eval("c"+secondsRound+".src");
}
else {
document.images.g.src = eval("c"+Math.floor(secondsRound/10)+".src");
document.images.h.src = eval("c"+(secondsRound%10)+".src");
}
if (minutesRound <= 9) {
document.images.d.src = c0.src;
document.images.e.src = eval("c"+minutesRound+".src");
}
else {
document.images.d.src = eval("c"+Math.floor(minutesRound/10)+".src");
document.images.e.src = eval("c"+(minutesRound%10)+".src");
}
if (hoursRound <= 9) {
document.images.y.src = c0.src;
document.images.z.src = eval("c"+hoursRound+".src");
}
else {
document.images.y.src = eval("c"+Math.floor(hoursRound/10)+".src");
document.images.z.src = eval("c"+(hoursRound%10)+".src");
}
if (daysRound <= 9) {
document.images.x.src = c0.src;
document.images.a.src = c0.src;
document.images.b.src = eval("c"+daysRound+".src");
}
if (daysRound <= 99) {
document.images.x.src = c0.src;
document.images.a.src = eval("c"+Math.floor((daysRound/10)%10)+".src");
document.images.b.src = eval("c"+Math.floor(daysRound%10)+".src");
}
if (daysRound <= 999){
document.images.x.src = eval("c"+Math.floor(daysRound/100)+".src");
document.images.a.src = eval("c"+Math.floor((daysRound/10)%10)+".src");
document.images.b.src = eval("c"+Math.floor(daysRound%10)+".src");
}
newtime = window.setTimeout("getTime();", 1000);
}
//  End -->
</script>

</HEAD>

<!-- STEP TWO: Insert the onLoad event handler into your BODY tag  -->

<BODY onLoad="getTime()">

<!-- STEP THREE: Copy this code into the BODY of your HTML document  -->

<div align="center">
<h3>Countdown to New Years (2005)</h3>
</div>

<center>
<table><tr><td bgcolor="black" valign="bottom">
<img height=21 src="0c.gif" width=16 name=x>
<img height=21 src="0c.gif" width=16 name=a>
<img height=21 src="0c.gif" width=16 name=b>
<img height=21 src="Cc.gif" width=9 name=c>
<img height=21 src="0c.gif" width=16 name=y>
<img height=21 src="0c.gif" width=16 name=z>
<img height=21 src="Cc.gif" width=9 name=cz>
<img height=21 src="0c.gif" width=16 name=d>
<img height=21 src="0c.gif" width=16 name=e>
<img height=21 src="Cc.gif" width=9 name=f>
<img height=21 src="0c.gif" width=16 name=g>
<img height=21 src="0c.gif" width=16 name=h>
</td></tr></table>
</center>

<div align="center">
<h4>(Days : Hours : Minutes : Seconds)</h4>
</div>


ENJOY

cosmo kramer
Thursday, January 29, 2004

The exe embeds the script.
TCL does NOT consists of many files.
Do your homework.

Phil
Friday, January 30, 2004

*  Recent Topics

*  Fog Creek Home