v07i066: Grand Digital Clock
Brandon S. Allbery - comp.sources.misc
allbery at uunet.UU.NET
Sun Jul 9 10:34:19 AEST 1989
Posting-number: Volume 7, Issue 66
Submitted-by: Amos Shapir <amdahl!nsc!taux01!nsc.uucp!taux01!amos at uunet.uu.net>
Archive-name: gcl
The recently posted digital clock reminded me of something from my
remote past. I have dug it out, and here it is - the Grand Digital
Clock. It displays the time in very big reverse video characters.
Since it was written before the days of termcap it only fits VT100 and
ANSI-compatible terminals, but all the terminal-dependent routines are
concentrated at the end, and can be easily hacked. This source was run
successfully on BSD4.3 and sysV.3 systems.
Usage: 'gclock [-s] [n]' to run for n seconds, default infinity (well,
actually 2**32 seconds, or 136 years). The -s flag causes the displayed
digits to scroll when they change.
Happy hacking!
o / o / o / o /
--Cut-here-------X---------------X---------------X---------------X----
o \ o \ o \ o \
#!/bin/sh
: "This is a shell archive, meaning: "
: "1. Remove everything above the #! /bin/sh line. "
: "2. Save the rest in a file. "
: "3. Execute the file with /bin/sh (not csh) to create the files:"
: " gcl.6"
: " gcl.c"
: "This archive created: Thu Jun 23 13:29:43 GMT+3:00 1988 "
if [ -f gcl.6 ]
then
echo file gcl.6 exists
else
echo extracting file: gcl.6
sed 's/^X//' >gcl.6 << 'END-of-gcl.6'
X.TH GCLOCK 6
X.SH NAME
Xgclock \- grand digital clock
X.SH SYNOPSIS
X.B gclock
X[-s] [
X.I n
X]
X.SH DESCRIPTION
X.I Gclock
Xruns a digital clock made of reverse-video blanks on a vt100 or ANSI
Xcompatible VDU screen. With an optional numeric argument
X.I n
Xit stops after
X.I n
Xseconds (default never).
XThe optional
X.B -s
Xflag makes digits scroll as they change.
X.SH AUTHOR
XAmos Shapir
X.SH BUGS
XShould use the termlib(3) routines for terminal adaptibility.
END-of-gcl.6
fi
if [ -f gcl.c ]
then
echo file gcl.c exists
else
echo extracting file: gcl.c
sed 's/^X//' >gcl.c << 'END-of-gcl.c'
X/*
X * Grand digital clock for vt100 and clones
X * Usage: gclock [-s] n -- run for n seconds (default infinity)
X * Flags: -s: scroll
X */
X#include <stdio.h>
X#include <time.h>
Xlong now;
Xstruct tm *tm;
Xshort disp[11] = {
X 075557, 011111, 071747, 071717, 055711,
X 074717, 074757, 071111, 075757, 075717, 002020
X};
Xlong old[6], next[6], new[6], mask;
Xchar scrol;
Xmain(argc, argv)
X char **argv;
X{
X register long t, a;
X register i, j, s, n, k;
X
X clear();
X while(--argc > 0) {
X if(**++argv == '-')
X scrol = 1;
X else
X n = atoi(*argv);
X }
X do {
X mask = 0;
X time(&now);
X tm = localtime(&now);
X set(tm->tm_sec%10, 0);
X set(tm->tm_sec/10, 4);
X set(tm->tm_min%10, 10);
X set(tm->tm_min/10, 14);
X set(tm->tm_hour%10, 20);
X set(tm->tm_hour/10, 24);
X set(10, 7);
X set(10, 17);
X for(k=0; k<6; k++) {
X if(scrol) {
X for(i=0; i<5; i++)
X new[i] = new[i]&~mask | new[i+1]&mask;
X new[5] = new[5]&~mask | next[k]&mask;
X } else
X new[k] = new[k]&~mask | next[k]&mask;
X next[k] = 0;
X for(s=1; s>=0; s--) {
X standout(s);
X for(i=0; i<6; i++) {
X if(a = (new[i]^old[i])&(s ? new : old)[i])
X for(j=0,t=1<<26; t; t>>=1,j++)
X if(a&t) {
X if(!(a&(t<<1))) {
X movto(i, 2*j);
X }
X printf(" ");
X }
X if(!s)
X old[i] = new[i];
X }
X }
X }
X movto(6, 0);
X fflush(stdout);
X sleep(1);
X } while(--n);
X return(0);
X}
X
Xset(t, n)
X register n;
X{
X register i, m;
X
X m = 7<<n;
X for(i=0; i<5; i++) {
X next[i] |= ((disp[t]>>(4-i)*3)&07)<<n;
X mask |= (next[i]^old[i])&m;
X }
X if(mask&m)
X mask |= m;
X}
X
X/* terminal-dependent routines */
Xclear()
X{
X printf("\033[H\033[2J");
X}
X
Xstandout(on)
X{
X printf("\033[%sm", on ? "7" : "");
X}
X
Xmovto(line,col)
X{
X printf("\033[%d;%dH", line+1, col+1);
X}
END-of-gcl.c
fi
exit
o / o / o / o /
--Cut-here-------X---------------X---------------X---------------X----
o \ o \ o \ o \
May the Source be with you, always...
--
Amos Shapir (My other cpu is a NS32532)
National Semiconductor (Israel)
6 Maskit st. P.O.B. 3007, Herzlia 46104, Israel Tel. +972 52 522261
amos%taux01 at nsc.com 34 48 E / 32 10 N
More information about the Comp.sources.misc
mailing list