jpt@minn-ua.UUCP (Joseph P. Thomas) (11/30/83)
I installed vtclock.c, replacing SIGUSR1 (which our site doesn't support), with SIGURG (defined as signal 16). The windowing and display works okay but I run into a problem when it comes time to restore the cursor. Instead of returning to the old location, the cursors homes, but does not clear the screen. All the escape codes match the manual, so I imagine that the problem is in the save/restore, or in my changing the signal. Anone else run into similar problem or know a fix ?? Thanks.
mce@teldata.UUCP (Brian McElhinney) (12/05/83)
I had the same problem with the cusor restore. As the comments in the code reflected this (something about being typed in from the keyboard) I wonder how it could work at all. It does seem to be a problem in the escape sequence performing as described in the book. Whats going on here?? -- Brian McElhinney uw-beaver!teltone!mce
rcj@burl.UUCP (R. Curtis Jackson) (12/06/83)
Well, I fixed this in a hurry; but I think that the problem centered around the fact that the escape codes hardwired into the program were backslash-three-three instead of backslash-oh-three-three. Anyway, this version works on my vt102 (vt100 lookalike) on USG 5.0 on a Vax 11/780. Enjoy: /* From clyde!akgua!sb1!sb6!bpa!espo Wed Dec 31 19:00:00 1969 Relay-Version: version B 2.10.1 6/24/83; site burl.UUCP Posting-Version: version B 2.10 5/3/83; site bpa.UUCP Path: burl!clyde!akgua!sb1!sb6!bpa!espo From: espo@bpa.UUCP Newsgroups: net.sources Subject: Vtclock program for your VT100 Message-ID: <195@bpa.UUCP> Date: Wed, 23-Nov-83 15:12:09 EST Article-I.D.: bpa.195 Posted: Wed Nov 23 15:12:09 1983 Date-Received: Wed, 23-Nov-83 22:41:15 EST Organization: Wayne, Pennsylvania Lines: 238 Here's a nifty little program(s) to display the date & time of day on the screen of your VT100 terminal on a real-time basis. Although I've written it for a VT100, I'm sure those of you who have different terminals could modify it. The only thing that's required, is that the terminal has a cursor save function within it's command repertoire. The swc.c program included is use to switch the clock display on/off for those times when you don't want the display, but keeps the clock running until switched back on. Bob Esposito....bpa!espo */ /* **************************************************************************** ** ** program = vtclock.c ** ** author = R.J. Esposito ** ** Vtclock provides a visual clock display every minute on ** a real-time basis. The display is visable in the lower ** right-hand corner (row 24, col 56-80) of the screen. ** Vtclock could be modified to perform on other video ** terminals, provided they incorporate the cursor save ** function within their command repertoire. ** ** Vtclock should be called from the user's .profile for ** conveinence, but could be called from the shell. ** It should be run as a backround process, since cursor ** saving is done prior to clock display. ** ** An interface program 'swc.c' is used to switch the display ** on/off depending on it's previous state. Vtclock saves it's ** pid in the user's home directory in '.clock_pid'. Swc reads ** this file to send the SIGUSR1 (16) signal to vtclock for ** display switching. This file is removed when vtclock dies ** (SIGHUP). ** ** NOTE: Some strange things may occur when emacs is used in ** conjunction with vtclock. It may be wise to turn off ** the display (swc) prior to entering emacs, and then ** turning it back on (swc) after completion. If you're ** a die-hard (like me!) just use the ^L to re-draw the ** display. ** **************************************************************************** */ #include <stdio.h> #include <time.h> #include <sys/signal.h> #define JUMPUP "\033[1A\033[J" #define SCROLL "\033[0;23r" /* set the scroll region (0 to 23) */ #define WINDOW "\033[0m\033[24;56f\033[7m \033[24;59f" #define SAVE "\0337" /* save cursor = ESC7 */ /* This MUST be typed-in from keyboard */ #define RESTORE "\0338" /* restore cursor */ #define CLWIN "\033[0m\033[24;56f " #define ATT_OFF "\033[0m\033[2D\033K" struct tm *localtime(), *tp; char *asctime(); char *getenv(); char *strcpy(), *strcat(); char pid_file[100]; long time(), tloc; unsigned sleep(); int (*signal())(); int die(), on_off(), pm; int is_on = 1; FILE *fp; main() { unsigned sec_diff; setbuf(stdout, (char *)0); (void )strcpy(pid_file, getenv("HOME")); (void )strcat(pid_file, "/.clock_pid"); if((fp=fopen(pid_file, "w")) == NULL) { (void )puts("can't open clocl_pid"); exit(1); } (void )fprintf(fp, "%d\n", getpid()); (void )fclose(fp); (void )signal(SIGHUP, die); tloc = time ((long *)0); tp = localtime(&tloc); fixtime(tp->tm_hour); (void )printf("%s%s%16.16s", SAVE, WINDOW, asctime(tp)); if (pm) (void )fputs(" PM", stdout); else (void )fputs(" AM", stdout); (void )printf("%s%s%s", ATT_OFF, SCROLL, RESTORE); (void )signal(SIGUSR1, on_off); for (;;) { /* forever loop until hung-up */ tp = localtime(&tloc); sec_diff = 60 - tp->tm_sec; (void )sleep(sec_diff); tloc = time((long *)0); tp = localtime(&tloc); fixtime(tp->tm_hour); if (is_on) { if (tp->tm_min == 00) /* hourly chime */ (void )fputs("\7\7", stdout); (void )printf("%s%s%16.16s", SAVE, WINDOW, asctime(tp)); if (pm) (void )fputs(" PM", stdout); else (void )fputs(" AM", stdout); (void )printf("%s%s%s", ATT_OFF, SCROLL, RESTORE); } } } die() /* enter here when hung-up */ { (void )unlink(pid_file); exit(0); } on_off() /* routine used by swc to switch display on/off */ { if (is_on) { is_on = 0; (void )printf("%s%s\033[0;24r%s", SAVE, CLWIN, RESTORE); } else { (void )printf("%s%s%s%s",JUMPUP,SAVE,SCROLL,RESTORE); is_on = 1; } (void )signal(SIGUSR1, on_off); } fixtime(hour) int hour; { switch(hour) { /* correct for AM/PM */ case 0: tp->tm_hour = 12; pm = 0; break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: pm = 0; break; case 12: pm = 1; break; case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: tp->tm_hour -= 12; pm = 1; break; } } -- The MAD Programmer -- 919-228-3313 (Cornet 291) alias: Curtis Jackson ...![ floyd clyde ihnp4 mhuxv ]!burl!rcj
larry@ihuxf.UUCP (12/09/83)
I really didn't understand the comment about the cursor save escape code having to be typed in from the terminal -- I know that I just put the "\0337" in there and it works just fine! This brings up another point (that a couple people tripped over). The esacpe codes were all given as: \33 --which SOMETIMES is fine, until the escape is followed by another valid OCTAL number -as in "\337" -- our compiler here did NOT make this an escape char followed by an ascii 7, instead it generated the single character for 337(octal). To be safe, I went thru and editted all the \33 and changed them to \033 --after that all worked fine. -- Larry Marek ihnp4!ihuxf!larry