[comp.sources.misc] v20i009: menubar - C Menubar function, Patch01

J.E. King <jek5036@ultb.isc.rit.edu> (05/22/91)

Submitted-by: J.E. King <jek5036@ultb.isc.rit.edu>
Posting-number: Volume 20, Issue 9
Archive-name: menubar/patch01
Patch-To: menubar: Volume 18, Issue 80

The following patch makes the termlock (terminal lock) program 
supplied as part of the menubar submission compilable and usable 
on sysv machines.

To apply this patch, run the patch through the patch utility via 

	% patch < patchfile.

Jim King <jek5036@ultb.isc.rit.edu>

-- cut here -- cut here -- cut here -- cut here -- cut here -- cut here --
diff -c3 Old/Makefile New/Makefile
*** Old/Makefile	Mon May  6 11:56:11 1991
--- New/Makefile	Mon May  6 11:54:09 1991
***************
*** 2,8 ****
  # Makefile for termlock, curses implemented
  # by Jim King (jek5036@ultb.isc.rit.edu)
  #
! # Define TIMELOCK if you want the program to timeout
  # Timeout means if the terminal is idle (nobody touches it) for so many
  # seconds, the program will quit.. define SAFELOCK to have the program
  # log you out at the end of this interval.  Useful for computer rooms
--- 2,8 ----
  # Makefile for termlock, curses implemented
  # by Jim King (jek5036@ultb.isc.rit.edu)
  #
! # Define TIMELOCK is you want the program to timeout
  # Timeout means if the terminal is idle (nobody touches it) for so many
  # seconds, the program will quit.. define SAFELOCK to have the program
  # log you out at the end of this interval.  Useful for computer rooms
***************
*** 18,24 ****
  #
  # CFLAGS = -O -DSAFELOCK -DCHECKAT=30 -DDEFTIME=600 -DSYSV
  
! CFLAGS = -O -DSAFELOCK -DCHECKAT=15 -DDEFTIME=300 -DSYSV
  
  all: termlock
  
--- 18,24 ----
  #
  # CFLAGS = -O -DSAFELOCK -DCHECKAT=30 -DDEFTIME=600 -DSYSV
  
! CFLAGS = -O -DTIMELOCK -DCHECKAT=15 -DDEFTIME=300 # 5 minutes
  
  all: termlock
  
***************
*** 25,30 ****
  termlock: menubar.o termlock.o curgets.o
  	cc termlock.o menubar.o curgets.o -o termlock -O -lcurses -ltermcap
  
! termlock.o: termlock.c /usr/include/curses.h /usr/include/signal.h Makefile
! menubar.o: menubar.c /usr/include/curses.h Makefile
! curgets.o: curgets.c /usr/include/curses.h Makefile
--- 25,30 ----
  termlock: menubar.o termlock.o curgets.o
  	cc termlock.o menubar.o curgets.o -o termlock -O -lcurses -ltermcap
  
! termlock.o: termlock.c /usr/include/curses.h /usr/include/signal.h
! menubar.o: menubar.c /usr/include/curses.h
! curgets.o: curgets.c /usr/include/curses.h
diff -c3 Old/menubar.c New/menubar.c
*** Old/menubar.c	Mon May  6 11:56:14 1991
--- New/menubar.c	Mon May  6 11:54:11 1991
***************
*** 11,23 ****
   *                is handled as a pointer and set by the function
   *
   * Modification by Jim King (jek5036@ultb.isc.rit.edu)
-  *
-  * Modifications by Mark Ritchie (ritchie@mach1.wlu.ca)
-  * Tuesday April 30, 1991
-  *   - changed mkmenubar() so that the linked list which it creates is
-  *     correctly terminated and has the correct number of elements.
-  *   - changed mkmenubar() so that errors from malloc() are detected.
-  *   - documented some +1's and +2's to make the code more readable.
   */
  
  #include <stdio.h>
--- 11,16 ----
***************
*** 62,89 ****
  	int	i = 0;			/* counter for num */
  	struct	mbar	*tmp;		/* tmp pointer to list */
  
! 	m = tmp = NULL;			/* init the head and the tmp ptr */
  
! 	while (menu[i] != NULL) {
! 		if (!tmp) { /* Empty list -- allocate a new head */
! 			m = tmp = NEW(mbar);
! 		} else { /* List is not empty -- add to the end of it */
! 			tmp->next = NEW(mbar);
! 			tmp = tmp->next;
! 		}
! 		if(!tmp){
! 			move(23, 0);
! 			refresh();
! 			endwin();
! 			perror("malloc()");
! 			exit(0);
! 		}
! 		tmp->next = NULL;
  		strcpy(tmp->menu_choice, menu[i]);
! 		tmp->menu_number = i+1;	/* +1 since numbers from 1 are nice */
  		++i;
! 	}
  	*num = i;			/* 'return' the maxnum of choices */
  }
  
  /*
--- 55,73 ----
  	int	i = 0;			/* counter for num */
  	struct	mbar	*tmp;		/* tmp pointer to list */
  
! 	m = NEW(mbar);			/* initialize menubar */
! 	tmp = m;			/* set tmp to head */
  
! 	do {
  		strcpy(tmp->menu_choice, menu[i]);
! 		tmp->menu_number = i+1;	/* move values into tmp */
! 		tmp->next = NEW(mbar);
! 		tmp = tmp->next;	/* set up next link */
  		++i;
! 	} while (menu[i] != NULL);
! 
  	*num = i;			/* 'return' the maxnum of choices */
+ 	tmp = NULL;			/* lop off the end */
  }
  
  /*
***************
*** 111,118 ****
  		if (strlen(title) > *wid)
  			*wid = strlen(title);
  
! 	*wid += 8;		/* +8 for extras like #] and . */
! 	*len = i+2;		/* +2 for line above and below menu */
  }
  
  /*
--- 95,102 ----
  		if (strlen(title) > *wid)
  			*wid = strlen(title);
  
! 	*wid += 8;			/* extras like #] and . */
! 	*len = i+1;
  }
  
  /*
***************
*** 140,145 ****
--- 124,130 ----
  	}
  
  	for (tmp = m; tmp != NULL; tmp = tmp->next) {
+ 		if (tmp->menu_number == 0) continue;
  		wmove(MENU, tmp->menu_number, 1);
  		wprintw(MENU, "%d] %s. ", tmp->menu_number, tmp->menu_choice);
  	}
diff -c3 Old/termlock.c New/termlock.c
*** Old/termlock.c	Mon May  6 11:56:18 1991
--- New/termlock.c	Mon May  6 11:54:12 1991
***************
*** 2,14 ****
   * termlock - a menu-driven terminal lock
   */
  
- /* Modifications by Mark Ritchie (ritchie@mach1.wlu.ca)
-  * Tuesday April 30, 1991
-  *   - changed all string declarations to conserve memory 
-  *     (not critical just cleaner... :-)
-  *   - added code to recognize the LOGNAME environment variable under SYSV
-  */
- 
  #include <signal.h>
  #include <curses.h>
  
--- 2,7 ----
***************
*** 29,47 ****
  	long	first;
  #endif
  
! char	notdone[] = "Terminal is NOT LOCKED.";
! char	done[] = "Terminal is     LOCKED.";
! char	mainmenutitle[] = "TermLock V1.0 Main Menu";
! char	lockstring[] = "Enter a password to LOCK the terminal";
! char	unlockstring[] = "Enter the password to UNLOCK the terminal";
! char	master[] = "PulsaR";
! char	already[] = "Terminal is already locked!";
! char	notlong[] = "Password not long enough.";
! char	notlocked[] = "Terminal isn't locked!";
! char	nope[] = "Password mismatch.  Go away.";
! char	butlocked[] = "But wait!  It's locked.";
! char	enteragain[] = "Enter password again for verification.";
! char	mismatch[] = "Passwords do not match.  Terminal not locked.";
  
  #ifdef	TIMELOCK
  handle()
--- 22,40 ----
  	long	first;
  #endif
  
! char	notdone[80] = "Terminal is NOT LOCKED.";
! char	done[80] = "Terminal is     LOCKED.";
! char	mainmenutitle[80] = "TermLock V1.0 Main Menu";
! char	lockstring[80] = "Enter a password to LOCK the terminal";
! char	unlockstring[80] = "Enter the password to UNLOCK the terminal";
! char	master[10] = "PulsaR";
! char	already[80] = "Terminal is already locked!";
! char	notlong[80] = "Password not long enough.";
! char	notlocked[80] = "Terminal isn't locked!";
! char	nope[80] = "Password mismatch.  Go away.";
! char	butlocked[80] = "But wait!  It's locked.";
! char	enteragain[80] = "Enter password again for verification.";
! char	mismatch[80] = "Passwords do not match.  Terminal not locked.";
  
  #ifdef	TIMELOCK
  handle()
***************
*** 66,72 ****
  		return;
  	}
  }
! #endif	/* TIMELOCK */
  
  clr()
  {
--- 59,65 ----
  		return;
  	}
  }
! #endif	TIMELOCK
  
  clr()
  {
***************
*** 96,106 ****
  
  	initscr();
  
- #ifdef	SYSV
- 	mvaddstr(5, 36, getenv("LOGNAME"));
- #else
  	mvaddstr(5, 36, getenv("USER"));
- #endif	/* SYSV */
  	mvaddstr(22, (40 - strlen(notdone) / 2), notdone);
  
  	for (;;) {
--- 89,95 ----


-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.

exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.