home *** CD-ROM | disk | FTP | other *** search
- From decwrl!purdue!haven!aplcen!ginosko!uunet!allbery Thu Aug 3 08:48:36 PDT 1989
- Article 958 of comp.sources.misc:
- Path: decwrl!purdue!haven!aplcen!ginosko!uunet!allbery
- From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
- Newsgroups: comp.sources.misc
- Subject: v07i066: Grand Digital Clock
- Message-ID: <761@taux01.UUCP>
- Date: 9 Jul 89 00:34:19 GMT
- Sender: allbery@uunet.UU.NET
- Reply-To: Amos Shapir <nsc!taux01!taux01.UUCP!amos@uunet.uu.net>
- Organization: National Semiconductor (IC) Ltd, Israel
- Lines: 182
- Approved: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
-
- Posting-number: Volume 7, Issue 66
- Submitted-by: Amos Shapir <amdahl!nsc!taux01!nsc.uucp!taux01!amos@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@nsc.com 34 48 E / 32 10 N
-
-
-