[comp.sources.amiga] v90i086: vt100 2.9a - diffs to vt100 terminal emulator, Part02/02

Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (02/25/90)

Submitted-by: acs@pccuts.pcc.amdahl.com (Tony Sumrall)
Posting-number: Volume 90, Issue 086
Archive-name: comm/vt100-2.9a/part02

#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 2 (of 2)."
# Contents:  2.9-2.9A
# Wrapped by tadguy@xanth on Sat Feb 24 12:28:09 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f '2.9-2.9A' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'2.9-2.9A'\"
else
echo shar: Extracting \"'2.9-2.9A'\" \(53415 characters\)
sed "s/^X//" >'2.9-2.9A' <<'END_OF_FILE'
XEnclosed are the patches to bring version 2.9 of VT100 up to version 2.9A.
XThese patches are context diffs which may be applied by hand or by using
X* patch version 2.0 available from Fish disk # 129 or
X* patch version 2.0.1.6 (patchlevel 12) available from Fish disk # 296.
XIf you use one of the patch programs, make a copy of your current VT100
Xsource (fopr safekeeping), CD to the directory containing the source and
Xsay:
X    patch < 2.9-2.9A
Xwhere "2.9-2.9A" is the name of this file.
X
XThese patches fix a number of problems, some of them relatively serious
Xso I encourage you to apply them as soon as possible.  These patches also
Xprovide a new command STRIP ON/OFF and an equivalent menu option under the
XParity menu.  STRIP will discard parity from data from your host which is
Xdestined for your terminal.  If full-screen editors don't work from your
Xhost (e.g. you're seeing funny things like [0;0H). then try STRIP.
X
XIf you encounter any problems with VT100, please send e-mail to me.
X--
XTony Sumrall   author of VT100 2.9 (and 2.8a and 2.8 and...)
Xacs@pccuts.pcc.amdahl.com -or- amdahl!pccuts!acs
X
XIndex: vt100.h
XPrereq: 891003)
X*** ./vt100.h	Tue Feb 13 09:54:54 1990
X--- ../2.9A/vt100.h	Tue Feb 13 09:55:08 1990
X***************
X*** 1,7 ****
X--- 1,22 ----
X+ #define HRCSID "$RCSfile: vt100.h,v $ $Revision: 1.4 $"
X+ 
X  /*********************************************************************
X   *  a terminal program that has ascii and xmodem transfer capability
X   *			:ts=8
X   *
X+  * $Log:	vt100.h,v $
X+  * Revision 1.4  90/02/12  20:23:52  acs
X+  * 1) Update date stamp in VERSION for the release of 2.9A.
X+  * 2) define HRCSID instead of declaring it static char.
X+  * 
X+  * Revision 1.3  89/12/19  20:39:14  acs
X+  * Updated version and date stamp.
X+  * 
X+  * Revision 1.2  89/11/06  20:58:52  acs
X+  * 1) Support for new STRIP command and menu option.
X+  * 2) New window title (date change).
X+  * 3) Add RCS id and change log.
X+  * 
X   *	v2.9 ACS - See change summary.
X   *	v2.8a 880331 ACS - Update title to 2.8A.
X   *	v2.7 870825 ACS - See README.
X***************
X*** 23,29 ****
X   ********************************************************************/
X  
X  /********* major version (used for title of terminal window) *********/
X! #define	VERSION	"VT100 (V2.9 ACS 891003) Terminal Window"
X  
X  /*********** ########  define the compiler type here ######## ********/
X  #define	LATTICE	0
X--- 38,44 ----
X   ********************************************************************/
X  
X  /********* major version (used for title of terminal window) *********/
X! #define	VERSION	"VT100 (V2.9A ACS 900212) Terminal Window"
X  
X  /*********** ########  define the compiler type here ######## ********/
X  #define	LATTICE	0
X***************
X*** 100,106 ****
X  #define EXTMAX 10	/* number of external xfer pgms allowed */
X  #define COMMAX 4	/* number of communication sub menus */
X  #define RSMAX 5		/* speed menu items */
X! #define PARMAX 5	/* parity items */
X  #define XFMAX 4		/* transfer mode items */
X  #define SCRIPTMAX 3	/* script menu items */
X  #define UTILMAX 12	/* utility menu */
X--- 115,121 ----
X  #define EXTMAX 10	/* number of external xfer pgms allowed */
X  #define COMMAX 4	/* number of communication sub menus */
X  #define RSMAX 5		/* speed menu items */
X! #define PARMAX 7	/* parity items */
X  #define XFMAX 4		/* transfer mode items */
X  #define SCRIPTMAX 3	/* script menu items */
X  #define UTILMAX 12	/* utility menu */
X***************
X*** 264,270 ****
X  extern int	p_foreground,p_background,p_bold,p_cursor,p_lines,p_mode;
X  extern int	p_parity,p_volume,p_wrap,p_echo,p_keyapp,p_curapp,p_bs_del;
X  extern int	p_xbeep, p_xproto, p_convert,p_autochop, p_kmaxpack, p_unit;
X! extern int	p_fontsize, p_shared, p_mouse_up, p_mouse_down;
X  extern char	p_keyscript;
X  extern long	p_break;
X  extern char	*p_font, *p_device, *p_f[11],*p_F[10];
X--- 279,285 ----
X  extern int	p_foreground,p_background,p_bold,p_cursor,p_lines,p_mode;
X  extern int	p_parity,p_volume,p_wrap,p_echo,p_keyapp,p_curapp,p_bs_del;
X  extern int	p_xbeep, p_xproto, p_convert,p_autochop, p_kmaxpack, p_unit;
X! extern int      p_fontsize, p_shared, p_mouse_up, p_mouse_down, p_strip;
X  extern char	p_keyscript;
X  extern long	p_break;
X  extern char	*p_font, *p_device, *p_f[11],*p_F[10];
X***************
X*** 325,332 ****
X  		cmd_ac(), cmd_appcur(), cmd_baud(), cmd_bt(), cmd_conv(),
X  		cmd_echo(), cmd_exit(), cmd_ext(), cmd_fnc(), cmd_key(),
X  		cmd_kmode(), cmd_kmaxpk(), cmd_mode(), cmd_mouse(),
X! 		cmd_numkey(), cmd_parity(), cmd_share(), cmd_short(),
X! 		cmd_swap(), cmd_wrap(), cmd_xbeep(), cmd_xproto();
X  
X  		/* rexx-only commands */
X  extern int	cmd_rx(), cmd_fwd();
X--- 340,348 ----
X  		cmd_ac(), cmd_appcur(), cmd_baud(), cmd_bt(), cmd_conv(),
X  		cmd_echo(), cmd_exit(), cmd_ext(), cmd_fnc(), cmd_key(),
X  		cmd_kmode(), cmd_kmaxpk(), cmd_mode(), cmd_mouse(),
X! 		cmd_numkey(), cmd_parity(), cmd_strip(), cmd_share(),
X! 		cmd_short(), cmd_swap(), cmd_wrap(), cmd_xbeep(),
X! 		cmd_xproto();
X  
X  		/* rexx-only commands */
X  extern int	cmd_rx(), cmd_fwd();
XIndex: expand.c
X*** ./expand.c	Tue Feb 13 09:54:48 1990
X--- ../2.9A/expand.c	Tue Feb 13 09:55:06 1990
X***************
X*** 1,7 ****
X--- 1,13 ----
X+ static char rcsid[] = "$RCSfile: expand.c,v $ $Revision: 1.2 $";
X+ 
X  /*************************************************************
X   * vt100 terminal emulator - Wild card and Directory support
X   *			:ts=8
X   *
X+  * $Log:	expand.c,v $
X+  * Revision 1.2  89/12/19  20:38:41  acs
X+  * Added RCS id and change log.
X+  * 
X   *	v2.9 ACS - See change summary.
X   *	v2.7 870825 ACS - Use the *InfoMsg*() routines in window.c rather
X   *			  than req().
XIndex: init.c
X*** ./init.c	Tue Feb 13 09:54:49 1990
X--- ../2.9A/init.c	Tue Feb 13 09:55:06 1990
X***************
X*** 1,7 ****
X--- 1,27 ----
X+ static char rcsid[] = "$RCSfile: init.c,v $ $Revision: 1.4 $";
X+ 
X  /***************************************************************
X   * vt100 - terminal emulator - initialization
X   *				:ts=8
X   *
X+  * $Log:	init.c,v $
X+  * Revision 1.4  89/12/12  22:13:56  acs
X+  * 1) Strip excess blanks from the rest of the menu items.
X+  * 2) No checkmark on "---" parity item (ParItem[5]).
X+  * 
X+  * Revision 1.3  89/12/11  20:48:16  acs
X+  * 1) Remove extraneous spaces at end of menu items.
X+  * 2) Increase width of checked menu items by CHECKWIDTH instead of by
X+  *    the width of 2 characters.
X+  * 3) Don't highlight the "---" separating the new Strip item from the
X+  *    other items in the Parity menu.
X+  * 4) A little better initialization of the Utility items.
X+  * 
X+  * Revision 1.2  89/11/06  21:25:22  acs
X+  * 1) Add new Parity menu item: Strip to remove parity from data destined
X+  *    for the display.
X+  * 2) Add RCS id and change log.
X+  * 
X   *	v2.9 ACS - Support new cmds EXT.  Use S and R for Send and Receive menu
X   *		   items instead of ^ and V.  AREXX support.
X   *	v2.8a 880331 ACS - Allow lines 0 in init file to *really* mean
X***************
X*** 84,91 ****
X      char sp;	/* SPace		*/
X      char ev;	/* EVen			*/
X      char od;	/* ODd			*/
X!     char nl;
X! } parcmd_chars = { 'N', ' ', ' ', 'E', 'O', '\0' };
X  
X  /*   Equivalences for the Xfer Mode sub-menu... */
X  struct modcmd {
X--- 104,113 ----
X      char sp;	/* SPace		*/
X      char ev;	/* EVen			*/
X      char od;	/* ODd			*/
X!     char n0;    /* ---                  */
X!     char st;	/* STrip		*/
X!     char n1;
X! } parcmd_chars = { 'N', ' ', ' ', 'E', 'O', ' ', ' ', '\0' };
X  
X  /*   Equivalences for the Xfer Mode sub-menu... */
X  struct modcmd {
X***************
X*** 131,170 ****
X  };
X  
X  static char *modetext[] = {
X!     "  Ascii",
X!     "  Xmodem",
X!     "  XmodemCRC",
X!     "  Kermit"
X  };
X  
X  static char *commtext[] = {
X      "Baud Rate",
X!     "Parity   ",
X      "Xfer Mode",
X!     "  Shared ",
X  };
X  
X  static char *baudtext[] = {
X!     "   300",
X!     "  1200",
X!     "  2400",
X!     "  4800",
X!     "  9600"
X  };
X  
X  static char *partext[] = {
X!     "  None ",
X!     "  Mark ",
X!     "  Space",
X!     "  Even ",
X!     "  Odd  "
X  };
X  
X  static char *modtext[] = {
X!     "  Image  ",
X!     "  Text   ",
X!     "  Convert",
X!     "  AutoChop"
X  };
X  
X  static char *scrtext[] = {
X--- 153,194 ----
X  };
X  
X  static char *modetext[] = {
X!     "Ascii",
X!     "Xmodem",
X!     "XmodemCRC",
X!     "Kermit"
X  };
X  
X  static char *commtext[] = {
X      "Baud Rate",
X!     "Parity",
X      "Xfer Mode",
X!     "Shared",
X  };
X  
X  static char *baudtext[] = {
X!     " 300",
X!     "1200",
X!     "2400",
X!     "4800",
X!     "9600"
X  };
X  
X  static char *partext[] = {
X!     "None",
X!     "Mark",
X!     "Space",
X!     "Even",
X!     "Odd",
X!     "-------",
X!     "Strip"
X  };
X  
X  static char *modtext[] = {
X!     "Image",
X!     "Text",
X!     "Convert",
X!     "AutoChop"
X  };
X  
X  static char *scrtext[] = {
X***************
X*** 178,191 ****
X      "Hang Up",
X      "Change Dir",
X      "Clear Scrn",
X!     "  Echo",
X!     "  Wrap",
X!     "  Num Key",
X!     "  App Cur",
X!     "  BS<->DEL",
X!     "  Xfer Beep",
X!     "  Mouse Up",
X!     "  Mouse Dn",
X  };
X  
X  struct HowToInit {
X--- 202,215 ----
X      "Hang Up",
X      "Change Dir",
X      "Clear Scrn",
X!     "Echo",
X!     "Wrap",
X!     "Num Key",
X!     "App Cur",
X!     "BS<->DEL",
X!     "Xfer Beep ",
X!     "Mouse Up",
X!     "Mouse Dn",
X  };
X  
X  struct HowToInit {
X***************
X*** 211,217 ****
X  	      modtext, (char *)(&modcmd_chars) },
X  	{ 0, 20, ITEMTEXT | ITEMENABLED | HIGHCOMP,
X  	     scrtext, (char *)(&scrcmd_chars) },
X! 	{ 0, 16, ITEMTEXT | ITEMENABLED | HIGHCOMP,
X  	     utiltext, (char *)(&utilcmd_chars) }
X  };
X  
X--- 235,241 ----
X  	      modtext, (char *)(&modcmd_chars) },
X  	{ 0, 20, ITEMTEXT | ITEMENABLED | HIGHCOMP,
X  	     scrtext, (char *)(&scrcmd_chars) },
X! 	{ 0, 16, ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | MENUTOGGLE,
X  	     utiltext, (char *)(&utilcmd_chars) }
X  };
X  
X***************
X*** 591,596 ****
X--- 615,621 ----
X  *******************************************************************/
X  void InitCommItems()
X  {
X+     struct IntuiText *itext;
X      int n;
X  
X      do_menu_init(CommItem, CommText, COMM_INIT_ENTRY, COMMAX);
X***************
X*** 598,603 ****
X--- 623,631 ----
X      CommItem[1].SubItem = ParItem;
X      CommItem[2].SubItem = XFItem;
X      CommItem[3].Flags |= CHECKIT | MENUTOGGLE;
X+     CommItem[3].Width += CHECKWIDTH;
X+     itext = (struct IntuiText *)CommItem[3].ItemFill;
X+     itext->LeftEdge = CHECKWIDTH;
X      if(p_shared)
X  	CommItem[3].Flags |= CHECKED;
X      else
X***************
X*** 632,638 ****
X  /*****************************************************************/
X  
X      do_menu_init(ParItem, ParText, PAR_INIT_ENTRY, PARMAX);
X!     for( n=0; n<PARMAX; n++ ) {
X  	ParItem[n].MutualExclude = (~(1 << n));
X      }
X  
X--- 660,666 ----
X  /*****************************************************************/
X  
X      do_menu_init(ParItem, ParText, PAR_INIT_ENTRY, PARMAX);
X!     for( n=0; n<PARMAX-2; n++ ) {
X  	ParItem[n].MutualExclude = (~(1 << n));
X      }
X  
X***************
X*** 639,644 ****
X--- 667,680 ----
X      /* select parity item chekced */
X      ParItem[p_parity].Flags |= CHECKED;
X  
X+     if(p_strip)
X+ 	ParItem[PARMAX-1].Flags |= CHECKED;
X+     else
X+ 	ParItem[PARMAX-1].Flags &= (-1L ^ CHECKED);
X+ 
X+     ParItem[5].Flags |= HIGHNONE;		/* Don't highlight "----" */
X+     ParItem[5].Flags &= (-1L ^ (CHECKIT | MENUTOGGLE));	/* No checkmarks  */
X+ 
X  /*****************************************************************/
X  /*    The following initializes the structure arrays		 */
X  /* initialize text for specific menu items */
X***************
X*** 677,689 ****
X  /*****************************************************************/
X  void InitUtilItems()
X  {
X      int	n;
X  
X      do_menu_init(UtilItem, UtilText, UTIL_INIT_ENTRY, UTILMAX);
X      /* initialize each menu item and IntuiText with loop */
X!     for( n=0; n<UTILMAX; n++ ) {
X! 	if (n > 3)
X! 	    UtilItem[n].Flags |= CHECKIT | MENUTOGGLE;
X      }
X  
X      if (p_echo)
X--- 713,725 ----
X  /*****************************************************************/
X  void InitUtilItems()
X  {
X+     struct IntuiText *itext;
X      int	n;
X  
X      do_menu_init(UtilItem, UtilText, UTIL_INIT_ENTRY, UTILMAX);
X      /* initialize each menu item and IntuiText with loop */
X!     for(n = 0; n < 4; n++) {
X! 	UtilItem[n].Flags &= (-1L ^ (CHECKIT | MENUTOGGLE));
X      }
X  
X      if (p_echo)
X***************
X*** 769,774 ****
X--- 805,812 ----
X  	menuitem[n].LeftEdge = initentry->LeftEdge * Ysize;
X  	menuitem[n].TopEdge = 10 * n;
X  	menuitem[n].Width = initentry->Width * Ysize;
X+ 	if(initentry->Flags & CHECKIT)
X+ 	    menuitem[n].Width += CHECKWIDTH;
X  	menuitem[n].Height = 10;
X  	menuitem[n].Flags = initentry->Flags;
X  	menuitem[n].MutualExclude = 0;
X***************
X*** 787,793 ****
X  	menutext[n].FrontPen = 0;
X  	menutext[n].BackPen = 1;
X  	menutext[n].DrawMode = JAM2;/* render in fore and background */
X! 	menutext[n].LeftEdge = 0;
X  	menutext[n].TopEdge = 1;
X  	menutext[n].ITextFont = NULL;
X  	menutext[n].NextText = NULL;
X--- 825,834 ----
X  	menutext[n].FrontPen = 0;
X  	menutext[n].BackPen = 1;
X  	menutext[n].DrawMode = JAM2;/* render in fore and background */
X! 	if(menuitem[n].Flags & CHECKIT)
X! 	    menutext[n].LeftEdge = CHECKWIDTH;
X! 	else
X! 	    menutext[n].LeftEdge = 0;
X  	menutext[n].TopEdge = 1;
X  	menutext[n].ITextFont = NULL;
X  	menutext[n].NextText = NULL;
XIndex: kermit.c
X*** ./kermit.c	Tue Feb 13 09:54:49 1990
X--- ../2.9A/kermit.c	Tue Feb 13 09:55:06 1990
X***************
X*** 1,7 ****
X--- 1,18 ----
X+ static char rcsid[] = "$RCSfile: kermit.c,v $ $Revision: 1.3 $";
X+ 
X  /*************************************************************
X   * vt100 terminal emulator - KERMIT protocol support
X   *			:ts=8
X   *
X+  * $Log:	kermit.c,v $
X+  * Revision 1.3  89/11/02  10:28:28  acs
X+  * doksend()/dokreceive(): Memory for spackbuf and msgpkt not freed if
X+  * filename == "$".
X+  * 
X+  * Revision 1.2  89/10/25  21:19:54  acs
X+  * 1) saybye(): allocate/free msgpkt and spackbuf if necessary.
X+  * 2) Add RCS id and change log.
X+  * 
X   *	v2.9 ACS - Kermit shouldn't NAK packet 0 but timeout waiting for
X   *		   send-init then NAK if necessary; terminate each packet with
X    *		   EOL only; don't sendstring("\r") but sendchar() it.
X***************
X*** 111,120 ****
X      int amount, c, wild;
X      char *p, **list = NULL;
X  
X-     msgpkt    = (char *)AllocMem((long)(MAXLONGPKS+20), MEMF_PUBLIC|MEMF_CLEAR);
X-     spackbuf  = (char *)AllocMem((long)(MAXLONGPKS+20), MEMF_PUBLIC|MEMF_CLEAR);
X      sending = 1;
X      if (!strcmp(file,"$")) { saybye(); return(USERABORT); }
X      p = file;
X      while(*p && *p != '*' && *p != '?') p++;
X      if (*p) {
X--- 122,131 ----
X      int amount, c, wild;
X      char *p, **list = NULL;
X  
X      sending = 1;
X      if (!strcmp(file,"$")) { saybye(); return(USERABORT); }
X+     msgpkt    = (char *)AllocMem((long)(MAXLONGPKS+20), MEMF_PUBLIC|MEMF_CLEAR);
X+     spackbuf  = (char *)AllocMem((long)(MAXLONGPKS+20), MEMF_PUBLIC|MEMF_CLEAR);
X      p = file;
X      while(*p && *p != '*' && *p != '?') p++;
X      if (*p) {
X***************
X*** 170,180 ****
X  {
X      int retval;
X  
X-     msgpkt    = (char *)AllocMem((long)(MAXLONGPKS+20), MEMF_PUBLIC|MEMF_CLEAR);
X-     spackbuf  = (char *)AllocMem((long)(MAXLONGPKS+20), MEMF_PUBLIC|MEMF_CLEAR);
X      ttime = TTIME_KERMIT;
X      sending = 0;
X      if (!strcmp(file,"$")) { saybye(); return(USERABORT); }
X      strcpy(filnam, file);
X      if (server) strcpy(mainmode,"GET");
X      else        strcpy(mainmode,"RECV");
X--- 181,191 ----
X  {
X      int retval;
X  
X      ttime = TTIME_KERMIT;
X      sending = 0;
X      if (!strcmp(file,"$")) { saybye(); return(USERABORT); }
X+     msgpkt    = (char *)AllocMem((long)(MAXLONGPKS+20), MEMF_PUBLIC|MEMF_CLEAR);
X+     spackbuf  = (char *)AllocMem((long)(MAXLONGPKS+20), MEMF_PUBLIC|MEMF_CLEAR);
X      strcpy(filnam, file);
X      if (server) strcpy(mainmode,"GET");
X      else        strcpy(mainmode,"RECV");
X***************
X*** 992,1006 ****
X  void
X  saybye()
X  {
X!    int len,num;
X  
X!    if(msgpkt == NULL)	/* No msgpkt buffer... */
X! 	return;		/* ...so just return.  */
X  
X     if(numreqs != 0)	/* Requester's up... */
X  	Delay(5L);	/* ...so wait for Intuition, just in case. */
X     spack('G',n,1,"F");  /* shut down server no more files */
X     rpack(&len,&num,ackpkt);
X  }
X  
X  static void
X--- 1003,1029 ----
X  void
X  saybye()
X  {
X!    int len, num, gotbuf = 0;
X  
X!    if(msgpkt == NULL) {	/* No msgpkt buffer, create one */
X! 	msgpkt    = (char *)AllocMem((long)(MAXLONGPKS+20), MEMF_PUBLIC|MEMF_CLEAR);
X! 	spackbuf  = (char *)AllocMem((long)(MAXLONGPKS+20), MEMF_PUBLIC|MEMF_CLEAR);
X!         if(msgpkt == NULL || spackbuf == NULL) {
X! 	    InfoMsg1Line("KERMIT: Insufficient free memory, BYE bypassed");
X! 	    return;
X! 	}
X! 	gotbuf = 1;
X!     }
X  
X     if(numreqs != 0)	/* Requester's up... */
X  	Delay(5L);	/* ...so wait for Intuition, just in case. */
X     spack('G',n,1,"F");  /* shut down server no more files */
X     rpack(&len,&num,ackpkt);
X+    if(gotbuf) {
X+        FreeMem(spackbuf, (long)(MAXLONGPKS+20));
X+        FreeMem(msgpkt,   (long)(MAXLONGPKS+20));
X+        msgpkt = spackbuf = NULL;
X+    }
X  }
X  
X  static void
XIndex: remote.c
X*** ./remote.c	Tue Feb 13 09:54:51 1990
X--- ../2.9A/remote.c	Tue Feb 13 09:55:07 1990
X***************
X*** 1,7 ****
X--- 1,23 ----
X+ static char rcsid[] = "$RCSfile: remote.c,v $ $Revision: 1.4 $";
X+ 
X  /****************************************************
X   * vt100 emulator - remote character interpretation
X   *		:ts=8
X   *
X+  * $Log:	remote.c,v $
X+  * Revision 1.4  89/12/18  20:44:21  acs
X+  * doremote() no longer needs to strip parity...the main loop in vt100.c
X+  * takes care of it now.
X+  * 
X+  * Revision 1.3  89/11/02  10:13:38  acs
X+  * doremote(): strip parity from data destined for display if user has
X+  * requested it (p_strip is set).
X+  * 
X+  * Revision 1.2  89/11/01  20:28:42  acs
X+  * 1) Correct use of Ysize in coordinate calculation.  Thanks to Sean
X+  *    Hogan (sean2@garfield.mun.ca).
X+  * 2) Add RCS id and change log.
X+  * 
X   *	V2.9 ACS - CAN was not cancelling a control sequence (thanks
X   *		   to Bill Kinnersly.
X   *	V2.8		  Insert/delete character (@/P) by John Wang
X***************
X*** 201,207 ****
X        case 'H': case 'f':		/* Cursor position */
X  	if (p[0] <= 0) p[0] = 1;
X  	if (p[1] <= 0) p[1] = 1;
X! 	y = (--p[0]*Ysize)+MINY; x = (--p[1]*Ysize)+MINX;
X  	if (y > MAXY) y = MAXY;
X  	if (x > MAXX) x = MAXX;
X  	if (y < MINY) y = MINY;
X--- 217,223 ----
X        case 'H': case 'f':		/* Cursor position */
X  	if (p[0] <= 0) p[0] = 1;
X  	if (p[1] <= 0) p[1] = 1;
X! 	y = (--p[0]*Ysize)+MINY; x = (--p[1]*Xsize)+MINX;
X  	if (y > MAXY) y = MAXY;
X  	if (x > MAXX) x = MAXX;
X  	if (y < MINY) y = MINY;
XIndex: rexx.c
X*** ./rexx.c	Tue Feb 13 09:54:51 1990
X--- ../2.9A/rexx.c	Tue Feb 13 09:55:07 1990
X***************
X*** 1,7 ****
X--- 1,13 ----
X+ static char rcsid[] = "$RCSfile: rexx.c,v $ $Revision: 1.2 $";
X+ 
X  /*************************************************************
X   * vt100 terminal emulator - AREXX support
X   *				:ts=8
X   *
X+  * $Log:	rexx.c,v $
X+  * Revision 1.2  89/12/19  20:38:59  acs
X+  * Added RCS id and change log.
X+  * 
X   *	v2.9 ACS - New with this version.
X   *
X   *************************************************************/
XIndex: script.c
X*** ./script.c	Tue Feb 13 09:54:52 1990
X--- ../2.9A/script.c	Tue Feb 13 09:55:07 1990
X***************
X*** 1,7 ****
X--- 1,29 ----
X+ static char rcsid[] = "$RCSfile: script.c,v $ $Revision: 1.5 $";
X+ 
X  /*************************************************************
X   * vt100 terminal emulator - Script file support
X   *				:ts=8
X   *
X+  * $Log:	script.c,v $
X+  * Revision 1.5  89/12/14  20:32:10  acs
X+  * Wasn't beeping after a transfer using external protocols.
X+  * 
X+  * Revision 1.4  89/12/11  20:35:04  acs
X+  * 1) do_script_cmd(): if(CmdFromRexx) should return a value.  Thanks to
X+  *    William Dimm (wdimm@lehi3b15.csee.Lehigh.EDU).
X+  * 2) cmd_ext(): After successfully deleting an external protocol it should
X+  *    return CMDOK.  Thanks again, William!
X+  * 3) Displaynames for external protocols no longer need 2 spaces before
X+  *    the name.
X+  * 
X+  * Revision 1.3  89/11/02  10:27:06  acs
X+  * New command: STRIP which will strip parity from data destined for
X+  * display.
X+  * 
X+  * Revision 1.2  89/11/01  15:32:54  acs
X+  * 1) Make cmd_from_script accessible to other source modules.
X+  * 2) Add RCS id and change log.
X+  * 
X   *	v2.9 ACS - Add support for font size, external transfer program
X   *		   support, new ASIS option to LACE cmd and AREXX support.
X   *	v2.8a 880331 ACS - Allow comments on XPROTO and FONT.
X***************
X*** 142,147 ****
X--- 164,170 ----
X  cmd_sendf,	"sendfile",	5, SCRIPT,	/* send a file to host		*/
X  cmd_share,	"shareserial",	5, INIT|SCRIPT,	/* ShareSerial device		*/
X  cmd_short,	"shortcut",	3, INIT,	/* Set shortcuts		*/
X+ cmd_strip,	"strip",	2, INIT|SCRIPT,	/* Strip parity for display	*/
X  cmd_swap,	"swap",		4, INIT|SCRIPT,	/* Swap BS and DEL		*/
X  cmd_unit,	"unit",		4, INIT,	/* Unit of serial.device to use */
X  cmd_volume,	"volume",	3, INIT,	/* set volume			*/
X***************
X*** 193,198 ****
X--- 216,222 ----
X      char sp;	/* SPace		*/
X      char ev;	/* EVen			*/
X      char od;	/* ODd			*/
X+     char st;	/* STrip		*/
X      char nl;
X  } parcmd_chars;
X  
X***************
X*** 259,264 ****
X--- 283,289 ----
X      "space", &(parcmd_chars.sp),	/* Set Parity			*/
X      "even", &(parcmd_chars.ev),		/* Set Parity			*/
X      "odd", &(parcmd_chars.od),		/* Set Parity			*/
X+     "strip", &(parcmd_chars.st),	/* Strip parity			*/
X      "image", &(modcmd_chars.im),	/* KERMIT transfer mode		*/
X      "text", &(modcmd_chars.tx),		/* KERMIT transfer mode		*/
X      "convert", &(modcmd_chars.cn),	/* KERMIT transfer mode		*/
X***************
X*** 284,290 ****
X      NULL, NULL
X  };
X  
X! static int cmd_from_script;		/* != 0 iff cmd from a script	*/
X  
X  
X  /********************************************************************/
X--- 309,315 ----
X      NULL, NULL
X  };
X  
X! int cmd_from_script;			/* != 0 iff cmd from a script	*/
X  
X  
X  /********************************************************************/
X***************
X*** 461,467 ****
X      script_wait = FALSE;
X  
X      if(CmdFromRexx)
X! 	return;
X  
X      while(fgets(line,256,sf) != NULL) {
X         len = strlen(line);
X--- 486,492 ----
X      script_wait = FALSE;
X  
X      if(CmdFromRexx)
X! 	return 0;
X  
X      while(fgets(line,256,sf) != NULL) {
X         len = strlen(line);
X***************
X*** 734,740 ****
X  		NumExts--;
X  		if(!doing_init)
X  		    InitFileItems();
X! 		return;
X  	    }
X      }
X      nxfer = i;			/* Remember index of match or where to put new... */
X--- 759,765 ----
X  		NumExts--;
X  		if(!doing_init)
X  		    InitFileItems();
X! 		return CMDOK;
X  	    }
X      }
X      nxfer = i;			/* Remember index of match or where to put new... */
X***************
X*** 781,789 ****
X      /* Initialize the new ExternalXfer entry.  Leave room in dispname for
X      ** a checkmark (2 character widths). */
X      len = strlen(dn);
X!     cexp->dispname = (char *)AllocMem((long)len+3, mem_type);
X!     strcpy(cexp->dispname, "  ");
X!     strcat(cexp->dispname, dn);
X      cexp->downname = (char *)AllocMem((long)len+1, mem_type);
X      for(i = 0; i < len; i++)
X  	cexp->downname[i] = dn[i] | ' ';
X--- 806,813 ----
X      /* Initialize the new ExternalXfer entry.  Leave room in dispname for
X      ** a checkmark (2 character widths). */
X      len = strlen(dn);
X!     cexp->dispname = (char *)AllocMem((long)len+1, mem_type);
X!     strcpy(cexp->dispname, dn);
X      cexp->downname = (char *)AllocMem((long)len+1, mem_type);
X      for(i = 0; i < len; i++)
X  	cexp->downname[i] = dn[i] | ' ';
X***************
X*** 1623,1628 ****
X--- 1647,1659 ----
X      return CMDFAIL;
X  }
X  
X+ cmd_strip(par)
X+ char	*par;
X+ {
X+     setvar(par,0,&p_strip);
X+     return CMDOK;
X+ }
X+ 
X  cmd_key(par)
X  char	*par;
X  {
X***************
X*** 1777,1781 ****
X--- 1808,1814 ----
X      if(!p_shared && OpenDevice(mysername,(LONG)p_unit,(struct IORequest *)Read_Request,NULL))
X  	cleanup("Can't re-open Read device",0);
X      setparams();
X+     if(p_xbeep)
X+ 	cmd_beep(0L);
X      return CMDOK;
X  }
XIndex: vt100.c
X*** ./vt100.c	Tue Feb 13 09:54:53 1990
X--- ../2.9A/vt100.c	Tue Feb 13 09:55:08 1990
X***************
X*** 1,7 ****
X--- 1,46 ----
X+ static char rcsid[] = "$RCSfile: vt100.c,v $ $Revision: 1.8 $";
X+ static char hrcsid[] = HRCSID;
X+ 
X  /********************************************************************
X   *  vt100 terminal emulator with xmodem transfer capability
X   *		:ts=8
X   *
X+  * $Log:	vt100.c,v $
X+  * Revision 1.8  90/02/12  20:25:05  acs
X+  * Include reference to HRCSID defined in vt100.h.
X+  * 
X+  * Revision 1.7  90/01/01  21:03:53  acs
X+  * 1) do_capture() shouldn't strcpy() to XferredFileName.
X+  * 2) do_capture() should use name instead of XferredFileName.
X+  * 3) do_send() would only prompt for filename once.
X+  * 
X+  * Revision 1.6  89/12/18  20:52:38  acs
X+  * Strip parity from inbound serial data if p_strip or p_parity is set.
X+  * Used to be that this module would only strip parity if p_parity was
X+  * set; it was up to subordinate routines to strip parity if p_strip
X+  * was set (notably, emit() and doremote()).
X+  * 
X+  * Revision 1.5  89/12/13  22:02:17  acs
X+  * p_bs_del is now based on flag set in selected menu item, too.
X+  * 
X+  * Revision 1.4  89/12/12  22:18:02  acs
X+  * 1) Give selected menu item to handle_menupick().
X+  * 2) Base new values of p_* on flags set in selected menu item.
X+  * 
X+  * Revision 1.3  89/11/06  22:07:46  acs
X+  * 1) Used 8 instead of Xsize and Ysize and 6 instead of BaseLine in mouse
X+  *    location calculation.  Thanks to Evan Harris (evan@cs.mu.oz.au).
X+  * 2) Mouse location routine would call sendchar() with 2 parameters
X+  *    (thanks again Evan!).
X+  * 3) Support new STRIP command and menu option (p_strip).
X+  * 
X+  * 
X+  * Revision 1.2  89/11/01  20:37:10  acs
X+  * 1) Don't poll serial port while executing a script unless we're waiting
X+  *    or delaying.
X+  * 2) ASCII Capture would only prompt for filename once.
X+  * 3) Add RCS id and change log.
X+  * 
X   *	v2.9 ACS - Only strip parity if parity is enabled; handle external xfer
X   *		   items in handle_menupick(); new p_interlace value (2).
X   *	v2.8a 880331 ACS - Don't ReplyMsg too soon.
X***************
X*** 246,251 ****
X--- 285,291 ----
X  int	p_background	= 0x000;	/* default background RGB color */
X  int	p_bold		= 0x000;	/* default BOLD       RGB color */
X  int	p_cursor	= 0x00d;	/* default Cursor	  RGB color */
X+ int	p_strip		= 1;	/* Strip parity from data for terminal	*/
X  int	p_mouse_up	= 0;	/* 1 = send mouse UP events		*/
X  int	p_mouse_down	= 0;	/* 1 = send mouse DOWN events		*/
X  int	p_lines		= 0;	/* 0 == use all available (MoreRows)	*/
X***************
X*** 282,287 ****
X--- 322,328 ----
X  
X  /* for script file */
X  extern char on_string[], wait_string[];
X+ extern int cmd_from_script;		/* in script.c */
X  int script_on, script_wait;
X  int doing_init = 0;
X  
X***************
X*** 393,404 ****
X  	}
X  
X  	/* see if there are any characters from the host */
X! 	if (CheckIO((struct IORequest *)Read_Request)) {
X  	    register int fwdndx = 0;
X  	    struct MsgPort *FwdPort;
X  
X  	    WaitIO((struct IORequest *)Read_Request);
X! 	    c = rs_in[0] & (p_parity ? 0x7F : 0xFF);
X  #if AREXX
X  	    fwdchars[fwdndx++] = c;
X  #endif
X--- 434,449 ----
X  	}
X  
X  	/* see if there are any characters from the host */
X! 	if (  (!script_on || (script_on && script_wait)) 
X! 	   && CheckIO((struct IORequest *)Read_Request)) {
X  	    register int fwdndx = 0;
X  	    struct MsgPort *FwdPort;
X  
X  	    WaitIO((struct IORequest *)Read_Request);
X! 	    if(p_parity || p_strip)
X! 		c = rs_in[0] & 0x7f;
X! 	    else
X! 		c = rs_in[0];
X  #if AREXX
X  	    fwdchars[fwdndx++] = c;
X  #endif
X***************
X*** 421,433 ****
X  		    	dola = 1;
X  		else
X  			dola = 0;
X! 		Read_Request->IOSer.io_Length =
X! 		Read_Request->IOSer.io_Actual;
X  		DoIO((struct IORequest *)Read_Request);
X  		Read_Request->IOSer.io_Length = 1;
X  
X  		for (i = 0; i < actual; i++) {
X! 		    c=rs_in[i] & (p_parity ? 0x7f : 0xff);
X  #if AREXX
X  		    if(fwdndx < 255)
X  			fwdchars[fwdndx++] = c;
X--- 466,482 ----
X  		    	dola = 1;
X  		else
X  			dola = 0;
X! 		if(actual > sizeof(lookahead))
X! 		    actual = sizeof(lookahead);
X! 		Read_Request->IOSer.io_Length = actual;
X  		DoIO((struct IORequest *)Read_Request);
X  		Read_Request->IOSer.io_Length = 1;
X  
X  		for (i = 0; i < actual; i++) {
X! 		    if(p_parity || p_strip)
X! 			c = rs_in[i] & 0x7f;
X! 		    else
X! 			c = rs_in[i];
X  #if AREXX
X  		    if(fwdndx < 255)
X  			fwdchars[fwdndx++] = c;
X***************
X*** 527,533 ****
X  		    unsigned int newcode =
X  			(Item ? Item->NextSelect : code);
X  
X! 		    redo |= handle_menupick(class,code);
X  		    if(code == newcode)
X  			code = MENUNULL;
X  		    else
X--- 576,582 ----
X  		    unsigned int newcode =
X  			(Item ? Item->NextSelect : code);
X  
X! 		    redo |= handle_menupick(class,code, Item);
X  		    if(code == newcode)
X  			code = MENUNULL;
X  		    else
X***************
X*** 558,565 ****
X  
X  		    sendstring(p_f[10]);
X  		    sendchar(mouse_qual + '@');
X! 		    sendchar(' ' + ((mouse_x - MINX) / 8),10);  /* column */
X! 		    sendchar(' ' + ((mouse_y - MINY + 6 ) / 8),10);/* row */
X  		}
X  		break;
X  
X--- 607,614 ----
X  
X  		    sendstring(p_f[10]);
X  		    sendchar(mouse_qual + '@');
X! 		    sendchar(' ' + ((mouse_x - MINX) / Xsize));  /* column */
X! 		    sendchar(' ' + ((mouse_y - MINY + BaseLine ) / Ysize));/* row */
X  		}
X  		break;
X  
X***************
X*** 570,577 ****
X  	}   /* end of while ( newmessage )*/
X  
X  	if (!script_wait ||
X! 	   (CheckIO((struct IORequest *)&Script_Timer) &&
X! 	    script_wait == WAIT_TIMER))
X  		do_script_cmd(NEXTCOMMAND);
X  
X  	while( reqwinup && ((NewMessage = (struct IntuiMessage *)
X--- 619,626 ----
X  	}   /* end of while ( newmessage )*/
X  
X  	if (!script_wait ||
X! 	   (script_wait == WAIT_TIMER &&
X! 	    CheckIO((struct IORequest *)&Script_Timer)))
X  		do_script_cmd(NEXTCOMMAND);
X  
X  	while( reqwinup && ((NewMessage = (struct IntuiMessage *)
X***************
X*** 703,720 ****
X  do_capture(file)
X  char *file;
X  {
X      if (capture == TRUE) {
X  	capture=FALSE;
X  	fclose(tranr);
X  	InfoMsg1Line("End File Capture");
X      } else {
X! 	if (file == NULL || *file == '\0') {
X! 	    req("Ascii Capture:",XferredFileName,1);
X! 	} else
X! 	    strcpy(XferredFileName, file);
X! 	if ((tranr=fopen(XferredFileName,"w")) == 0) {
X  	    capture=FALSE;
X! 	    InfoMsg2Line("Error Opening File:", XferredFileName);
X  	    return(FALSE);
X  	}
X  	capture=TRUE;
X--- 752,777 ----
X  do_capture(file)
X  char *file;
X  {
X+     char name[MAXGADSTR];
X+ 
X      if (capture == TRUE) {
X  	capture=FALSE;
X  	fclose(tranr);
X  	InfoMsg1Line("End File Capture");
X      } else {
X! 	if(file)
X! 	    strcpy(name, file);
X! 	else
X! 	    name[0] = '\0';
X! 
X! 	if (file == NULL || *file == '\0' || !cmd_from_script) {
X! 	    req("Ascii Capture:",name,1);
X! 	    if(file && !cmd_from_script)
X! 		strcpy(file, name);
X! 	}
X! 	if ((tranr=fopen(name,"w")) == 0) {
X  	    capture=FALSE;
X! 	    InfoMsg2Line("Error Opening File:", name);
X  	    return(FALSE);
X  	}
X  	capture=TRUE;
X***************
X*** 725,742 ****
X  do_send(file)
X  char *file;
X  {
X      if (send == TRUE) {
X  	send=FALSE;
X  	fclose(trans);
X  	InfoMsg1Line("File Send Cancelled");
X      } else {
X! 	if (file == NULL || *file == '\0') {
X! 	    req("Ascii Send:", XferredFileName, 1);
X! 	} else
X! 	    strcpy(XferredFileName, file);
X! 	if ((trans=fopen(XferredFileName, "r")) == 0) {
X  	    send=FALSE;
X! 	    InfoMsg2Line("Error Opening File:", XferredFileName);
X  	    return(FALSE);
X  	}
X  	send=TRUE;
X--- 782,807 ----
X  do_send(file)
X  char *file;
X  {
X+     char name[MAXGADSTR];
X+ 
X      if (send == TRUE) {
X  	send=FALSE;
X  	fclose(trans);
X  	InfoMsg1Line("File Send Cancelled");
X      } else {
X! 	if(file)
X! 	    strcpy(name, file);
X! 	else
X! 	    name[0] = '\0';
X! 
X! 	if (file == NULL || *file == '\0' || !cmd_from_script) {
X! 	    req("Ascii Send:",name,1);
X! 	    if(file && !cmd_from_script)
X! 		strcpy(file, name);
X! 	}
X! 	if ((trans=fopen(name, "r")) == 0) {
X  	    send=FALSE;
X! 	    InfoMsg2Line("Error Opening File:", name);
X  	    return(FALSE);
X  	}
X  	send=TRUE;
X***************
X*** 802,810 ****
X      SetMenuStrip(mywindow,&menu[0]);
X  }
X  
X! ULONG handle_menupick(class, code)
X  ULONG class;
X  unsigned int code;
X  {
X      unsigned int menunum, itemnum, subnum, i;
X      int nxfer;
X--- 867,876 ----
X      SetMenuStrip(mywindow,&menu[0]);
X  }
X  
X! ULONG handle_menupick(class, code, Item)
X  ULONG class;
X  unsigned int code;
X+ struct MenuItem *Item;
X  {
X      unsigned int menunum, itemnum, subnum, i;
X      int nxfer;
X***************
X*** 886,894 ****
X  	    break;
X  
X  	case 1:    /* menunum case 1 itemnum 1 -- Set  Parity */
X! 	    p_parity = subnum;
X  	    break;
X- 
X  	case 2:    /* menunum case 1 itemnum 2 -- set transfer mode */
X  	    switch(subnum) {
X  	    case 0:
X--- 952,970 ----
X  	    break;
X  
X  	case 1:    /* menunum case 1 itemnum 1 -- Set  Parity */
X! 	    switch(subnum) {
X! 	    case 0: case 1: case 2: case 3: case 4:
X! 		p_parity = subnum;
X! 		break;
X! 	    case 6:
X! 		if(Item->Flags & CHECKED)
X! 		    p_strip = 1;
X! 		else
X! 		    p_strip = 0;
X! 		break;
X! 	    }
X! 	    retval |= REDOCOMM;
X  	    break;
X  	case 2:    /* menunum case 1 itemnum 2 -- set transfer mode */
X  	    switch(subnum) {
X  	    case 0:
X***************
X*** 896,911 ****
X  		p_mode = subnum;
X  		break;
X  	    case 2:
X! 		if (p_convert)
X! 		    p_convert = 0;
X! 		else
X  		    p_convert = 1;
X  		break;
X  	    case 3:
X! 		if(p_autochop)
X! 		    p_autochop = 0;
X! 		else
X  		    p_autochop = 1;
X  		break;
X  	    }
X  	    retval |= REDOCOMM;
X--- 972,987 ----
X  		p_mode = subnum;
X  		break;
X  	    case 2:
X! 		if(Item->Flags & CHECKED)
X  		    p_convert = 1;
X+ 		else
X+ 		    p_convert = 0;
X  		break;
X  	    case 3:
X! 		if(Item->Flags & CHECKED)
X  		    p_autochop = 1;
X+ 		else
X+ 		    p_autochop = 0;
X  		break;
X  	    }
X  	    retval |= REDOCOMM;
X***************
X*** 914,923 ****
X  	    {
X  		char onoff[4];
X  
X! 		if(p_shared)
X! 		    strcpy(onoff, "off");
X! 		else
X  		    strcpy(onoff, "on");
X  		cmd_share(onoff);
X  	    }
X  	    break;
X--- 990,999 ----
X  	    {
X  		char onoff[4];
X  
X! 		if(Item->Flags & CHECKED)
X  		    strcpy(onoff, "on");
X+ 		else
X+ 		    strcpy(onoff, "off");
X  		cmd_share(onoff);
X  	    }
X  	    break;
X***************
X*** 969,1031 ****
X  	    break;
X  
X  	case 4:	/* menunum case 3 itemnum case 4 -- Echo mode */
X! 	    if (p_echo)
X! 		p_echo = 0;
X! 	    else
X  		p_echo = 1;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 5:	/* menunum case 3 itemnum case 5 -- Wrap mode */
X! 	    if (p_wrap)
X! 		p_wrap = 0;
X! 	    else
X  		p_wrap = 1;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 6:	/* menunum case 3 itemnum case 6 -- NumKey */
X! 	    if (p_keyapp)
X! 		p_keyapp = 0;
X! 	    else
X  		p_keyapp = 1;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 7:	/* menunum case 3 itemnum case 7 -- App Cur */
X! 	    if (p_curapp)
X! 		p_curapp = 0;
X! 	    else
X  		p_curapp = 1;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 8:	/* menunum case 3 itemnum case 8 -- BS <-> DEL */
X! 	    swap_bs_del();
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 9:	/* menunum case 3 itemnum case 9 -- Xfer Beep */
X! 	    if(p_xbeep)
X! 		p_xbeep = 0;
X! 	    else
X  		p_xbeep = 1;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 10: /* menunum case 3 itemnum case 10 - Mouse Up */
X! 	    if(p_mouse_up)
X! 		p_mouse_up = 0;
X! 	    else
X  		p_mouse_up = 1;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 11: /* menunum case 3 itemnum case 11 - Mouse Down */
X! 	    if(p_mouse_down)
X! 		p_mouse_down = 0;
X! 	    else
X  		p_mouse_down = 1;
X  	    retval |= REDOUTIL;
X  	    break;
X  	}
X--- 1045,1110 ----
X  	    break;
X  
X  	case 4:	/* menunum case 3 itemnum case 4 -- Echo mode */
X! 	    if(Item->Flags & CHECKED)
X  		p_echo = 1;
X+ 	    else
X+ 		p_echo = 0;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 5:	/* menunum case 3 itemnum case 5 -- Wrap mode */
X! 	    if(Item->Flags & CHECKED)
X  		p_wrap = 1;
X+ 	    else
X+ 		p_wrap = 0;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 6:	/* menunum case 3 itemnum case 6 -- NumKey */
X! 	    if(Item->Flags & CHECKED)
X  		p_keyapp = 1;
X+ 	    else
X+ 		p_keyapp = 0;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 7:	/* menunum case 3 itemnum case 7 -- App Cur */
X! 	    if(Item->Flags & CHECKED)
X  		p_curapp = 1;
X+ 	    else
X+ 		p_curapp = 0;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 8:	/* menunum case 3 itemnum case 8 -- BS <-> DEL */
X! 	    if(Item->Flags & CHECKED)
X! 		p_bs_del = 1;
X! 	    else
X! 		p_bs_del = 0;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 9:	/* menunum case 3 itemnum case 9 -- Xfer Beep */
X! 	    if(Item->Flags & CHECKED)
X  		p_xbeep = 1;
X+ 	    else
X+ 		p_xbeep = 0;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 10: /* menunum case 3 itemnum case 10 - Mouse Up */
X! 	    if(Item->Flags & CHECKED)
X  		p_mouse_up = 1;
X+ 	    else
X+ 		p_mouse_up = 0;
X  	    retval |= REDOUTIL;
X  	    break;
X  
X  	case 11: /* menunum case 3 itemnum case 11 - Mouse Down */
X! 	    if(Item->Flags & CHECKED)
X  		p_mouse_down = 1;
X+ 	    else
X+ 		p_mouse_down = 0;
X  	    retval |= REDOUTIL;
X  	    break;
X  	}
XIndex: vt100.doc
X*** ./vt100.doc	Tue Feb 13 09:54:54 1990
X--- ../2.9A/vt100.doc	Tue Feb 13 09:55:08 1990
X***************
X*** 51,58 ****
X  		.
X  		.		- externally defined transfer programs
X  		.
X! 	Send		(A-^)	- Send a file using the selected protocol
X! 	Receive		(A-V)	- Receive a file as above
X  	Kermit Get	(A-G)	- Get files from a kermit server
X  	Kermit Bye	(A-B)	- Finish with the kermit server.
X  	Capture			- Log received text to a file.  Changes to
X--- 51,58 ----
X  		.
X  		.		- externally defined transfer programs
X  		.
X! 	Send		(A-S)	- Send a file using the selected protocol
X! 	Receive		(A-R)	- Receive a file as above
X  	Kermit Get	(A-G)	- Get files from a kermit server
X  	Kermit Bye	(A-B)	- Finish with the kermit server.
X  	Capture			- Log received text to a file.  Changes to
X***************
X*** 182,191 ****
X  character of the function key definition is the KEYSCRIPT character (e.g.,
X  define F5 as "~df1:foo.script").
X  
X! During the time script file is running the terminal emulation is still
X! active and you may type simulataneous to the script file. This may be
X! desired if your script file is WAITing for a string or is DELAYing for a
X! period of time etc.
X  
X  AREXX support:
X  --------------
X--- 182,200 ----
X  character of the function key definition is the KEYSCRIPT character (e.g.,
X  define F5 as "~df1:foo.script").
X  
X! Prior to release 2.9A (a patch release to 2.9), VT100 would interleave
X! script command execution with the processing of data received from the
X! serial port.  This made scripts inherently timing dependant.  To remove
X! this timing dependancy, beginning with 2.9A, VT100 will not receive nor
X! process data from the serial port while executing a script until the
X! script issues a WAIT or a DELAY command.  Since the ON command depends
X! on receipt of serial data, this change will also delay ON command
X! execution until a WAIT or DELAY is encountered in the script as well.
X! However, during the time a script file is running terminal emulation is
X! still active and you may type simulataneous with the execution of the
X! script file.  This may be desired if your script file is WAITing for a
X! string or is DELAYing for a period of time etc.  You may, of course,
X! cancel the execution of a script at any time
X  
X  AREXX support:
X  --------------
X***************
X*** 673,679 ****
X      EVEN    - Set Parity even          ODD	- Set Parity odd
X      IMAGE   - KERMIT transfer mode     TEXT	- KERMIT transfer mode
X      CONVERT - KERMIT transfer mode     AUTOCHOP	- Enable/disable XMODEM
X! 						  auto-chop feature
X  			  >> Script items: <<
X      EXECUTE - execute macro		ABORT	- abort macro
X      RX      - send AREXX command
X--- 682,689 ----
X      EVEN    - Set Parity even          ODD	- Set Parity odd
X      IMAGE   - KERMIT transfer mode     TEXT	- KERMIT transfer mode
X      CONVERT - KERMIT transfer mode     AUTOCHOP	- Enable/disable XMODEM
X!     STRIP   - Strip parity of serial		  auto-chop feature
X! 	      data destined for terminal
X  			  >> Script items: <<
X      EXECUTE - execute macro		ABORT	- abort macro
X      RX      - send AREXX command
X***************
X*** 691,696 ****
X--- 701,715 ----
X  	SHORTCUT XS             removes the shortcut key for sending via
X                                  XMODEM protocol
X  --------------------------------------------------------------------------
X+ STRIP	Strip parity of data destined for terminal	(INIT,SCRIPT)
X+     Format:
X+     	STRIP ON/OFF or YES/NO
X+     Example:
X+     	STRIP ON	Prior to displaying data from the remote host,
X+ 			remove the parity.  This will "clean up" displays
X+ 			from hosts which can't or won't recognize your
X+ 			parity settings.
X+ --------------------------------------------------------------------------
X  SWAP	Swap the meanings of backspace and delete keys	(INIT,SCRIPT)
X      Format:
X  	SWAP ON/OFF or YES/NO
X***************
X*** 742,748 ****
X  --------------------------------------------------------------------------
X  XPROTO	Set default transfer protocol			(INIT,SCRIPT)
X      Format:
X! 	XPROTO	XMODEM/XMODEMCRC/KERMIT/an external protocol
X      Example:
X  	XPROTO	KERMIT		Sets transfer protocol to Kermit
X  --------------------------------------------------------------------------
X--- 761,767 ----
X  --------------------------------------------------------------------------
X  XPROTO	Set default transfer protocol			(INIT,SCRIPT)
X      Format:
X! 	XPROTO	ASCII/XMODEM/XMODEMCRC/KERMIT/an external protocol
X      Example:
X  	XPROTO	KERMIT		Sets transfer protocol to Kermit
X  --------------------------------------------------------------------------
XIndex: window.c
X*** ./window.c	Tue Feb 13 09:54:55 1990
X--- ../2.9A/window.c	Tue Feb 13 09:55:09 1990
X***************
X*** 1,7 ****
X--- 1,29 ----
X+ static char rcsid[] = "$RCSfile: window.c,v $ $Revision: 1.5 $";
X+ 
X  /****************************************************
X   * vt100 emulator - window/keyboard support
X   *		:ts=8
X   *
X+  * $Log:	window.c,v $
X+  * Revision 1.5  90/01/23  20:17:11  acs
X+  * 1) Machine would lock up due to req() "missing" some events.  Thanks
X+  *    to Patrick Horgan (phorgan@cup.portal.com) for all his work on
X+  *    this one!
X+  * 2) Remove some extraneous white-space for appearances sake.
X+  * 
X+  * Revision 1.4  89/12/18  20:47:12  acs
X+  * emit() no longer needs to strip parity...the main loop in vt100.c
X+  * takes care of it now.
X+  * 
X+  * Revision 1.3  89/11/02  10:14:24  acs
X+  * Support for new STRIP command to strip parity from data destined for
X+  * display.
X+  * 
X+  * Revision 1.2  89/11/01  20:32:28  acs
X+  * 1) Correct interchanged use of Xsize and Ysize.  Thanks to Sean Hogan
X+  *    (sean2@garfield.mun.ca).
X+  * 2) Add RCS id and change log.
X+  * 
X   *	v2.9 ACS - See change summary.
X   *	v2.7 870825 ACS - Provide an info/status window rather than using
X   *			  req().  Better error handling.
X***************
X*** 88,94 ****
X  #if MANX
X      USHORT RemoveGadget();
X  #endif /* MANX */
X!     int  lprmpt, lname;
X      struct IntuiMessage *Msg;
X  
X      if(reqwinup == 0)
X--- 110,116 ----
X  #if MANX
X      USHORT RemoveGadget();
X  #endif /* MANX */
X!     int  lprmpt, lname, done;
X      struct IntuiMessage *Msg;
X  
X      if(reqwinup == 0)
X***************
X*** 124,129 ****
X--- 146,152 ----
X      /* Make sure the prompt gets updated */
X      if (numreqs == 1 && strcmp(Prompt,prmpt) != 0) {
X  	EndRequest(&myrequest,reqwindow);
X+ 	done = 0;
X  	do {
X  		Wait(1L << reqwindow->UserPort->mp_SigBit);
X  		while (Msg = (struct IntuiMessage *)GetMsg(reqwindow->UserPort)) {
X***************
X*** 131,138 ****
X  			ReplyMsg((struct Message *)Msg);
X  			if(class == NEWSIZE)
X  			    ReqNewSize(reqwindow->Height, reqwindow->Width);
X  		}
X! 	} while (class != REQCLEAR);
X  	numreqs = 0;
X  	}
X  
X--- 154,163 ----
X  			ReplyMsg((struct Message *)Msg);
X  			if(class == NEWSIZE)
X  			    ReqNewSize(reqwindow->Height, reqwindow->Width);
X+ 			if(class == REQCLEAR)
X+ 			    done = 1;
X  		}
X! 	} while(!done);
X  	numreqs = 0;
X  	}
X  
X***************
X*** 154,159 ****
X--- 179,185 ----
X  	    }
X  	    else numreqs = 1;
X  
X+ 	    done = 0;
X  	    do {
X  		Wait(1L << reqwindow->UserPort->mp_SigBit);
X  		while (Msg = (struct IntuiMessage *)GetMsg(reqwindow->UserPort)) {
X***************
X*** 163,170 ****
X  			numreqs = 0;
X  		    if(class == NEWSIZE)
X  			ReqNewSize(reqwindow->Height, reqwindow->Width);
X  		}
X! 	    } while (class != REQSET);
X  	} /* end while numreqs != 0 */
X      } /* end else */
X  
X--- 189,198 ----
X  			numreqs = 0;
X  		    if(class == NEWSIZE)
X  			ReqNewSize(reqwindow->Height, reqwindow->Width);
X+ 		    if(class == REQSET)
X+ 			done = 1;
X  		}
X! 	    } while(!done);
X  	} /* end while numreqs != 0 */
X      } /* end else */
X  
X***************
X*** 174,179 ****
X--- 202,208 ----
X      if((reqwindow->Flags & WINDOWACTIVE) != WINDOWACTIVE) {
X      	WindowToFront(reqwindow);
X  	ActivateWindow(reqwindow);
X+ 	done = 0;
X  	do {
X  	    Wait(1L << reqwindow->UserPort->mp_SigBit);
X  	    while(Msg = (struct IntuiMessage *)GetMsg(reqwindow->UserPort)) {
X***************
X*** 181,188 ****
X  		ReplyMsg((struct Message *)Msg);
X  		if(class == NEWSIZE)
X  		    ReqNewSize(reqwindow->Height, reqwindow->Width);
X  	    }
X! 	} while (class != ACTIVEWINDOW);
X      }
X      
X      /* here is where we pre-select the gadget   */
X--- 210,219 ----
X  		ReplyMsg((struct Message *)Msg);
X  		if(class == NEWSIZE)
X  		    ReqNewSize(reqwindow->Height, reqwindow->Width);
X+ 		if(class == ACTIVEWINDOW)
X+ 		    done = 1;
X  	    }
X! 	} while(!done);
X      }
X      
X      /* here is where we pre-select the gadget   */
X***************
X*** 198,204 ****
X  
X  	/* try once more before giving up... */
X  	ActivateGadget(&mystrgad,reqwindow,&myrequest);
X! 	}
X  
X      /* wait for input to show up */
X      while (1) {
X--- 229,235 ----
X  
X  	/* try once more before giving up... */
X  	ActivateGadget(&mystrgad,reqwindow,&myrequest);
X!     }
X  
X      /* wait for input to show up */
X      while (1) {
X***************
X*** 206,212 ****
X  		GetMsg(reqwindow->UserPort)) == FALSE) {
X  	    Wait(1L<<reqwindow->UserPort->mp_SigBit);
X  	    continue;
X! 	    }
X  	class = NewMessage->Class;
X  	ReplyMsg((struct Message *)NewMessage);
X  
X--- 237,243 ----
X  		GetMsg(reqwindow->UserPort)) == FALSE) {
X  	    Wait(1L<<reqwindow->UserPort->mp_SigBit);
X  	    continue;
X! 	}
X  	class = NewMessage->Class;
X  	ReplyMsg((struct Message *)NewMessage);
X  
X***************
X*** 216,224 ****
X  	if(class == NEWSIZE)
X  	    ReqNewSize(reqwindow->Height, reqwindow->Width);
X  	    
X! 	/* maybe this is a menu item to handle */
X! /*	if (class == MENUPICK) handle_menupick(class,code); */
X! 	}
X  
X      /* all done, so return the result */
X      numreqs = 0;
X--- 247,253 ----
X  	if(class == NEWSIZE)
X  	    ReqNewSize(reqwindow->Height, reqwindow->Width);
X  	    
X!     }
X  
X      /* all done, so return the result */
X      numreqs = 0;
X***************
X*** 254,264 ****
X      {
X      static char wrap_flag = 0;	/* are we at column 80? */
X  
X-     c &= 0x7F;
X      switch( c )
X  	{
X  	case '\t':
X! 	x += (Ysize * 8) - ((x-MINX) % (Ysize * 8));
X  	break;
X  
X  	case 10:  /* lf */
X--- 283,292 ----
X      {
X      static char wrap_flag = 0;	/* are we at column 80? */
X  
X      switch( c )
X  	{
X  	case '\t':
X! 	x += (Xsize * 8) - ((x-MINX) % (Xsize * 8));
X  	break;
X  
X  	case 10:  /* lf */
X***************
X*** 691,698 ****
X      if(init) {
X  	myrequest.LeftEdge = (myrequest.LeftEdge * Xsize) + 5;
X  	myrequest.TopEdge  = (myrequest.TopEdge  * Ysize) + 2;
X! 	myrequest.Width    = (myrequest.Width    * Ysize) + 4;
X! 	myrequest.Height   = (myrequest.Height   * Xsize) + 6;
X  
X  	mydonegad.LeftEdge = (mydonegad.LeftEdge * Xsize) + 2;
X  	mydonegad.TopEdge  = (mydonegad.TopEdge  * Ysize) + 2;
X--- 719,726 ----
X      if(init) {
X  	myrequest.LeftEdge = (myrequest.LeftEdge * Xsize) + 5;
X  	myrequest.TopEdge  = (myrequest.TopEdge  * Ysize) + 2;
X! 	myrequest.Width    = (myrequest.Width    * Xsize) + 4;
X! 	myrequest.Height   = (myrequest.Height   * Ysize) + 6;
X  
X  	mydonegad.LeftEdge = (mydonegad.LeftEdge * Xsize) + 2;
X  	mydonegad.TopEdge  = (mydonegad.TopEdge  * Ysize) + 2;
X***************
X*** 701,708 ****
X  
X  	mystrgad.LeftEdge  = (mystrgad.LeftEdge * Xsize) + 2;
X  	mystrgad.TopEdge   = (mystrgad.TopEdge  * Ysize) + 4;
X! 	mystrgad.Width     = (mystrgad.Width    * Ysize) + 0;
X! 	mystrgad.Height    = (mystrgad.Height   * Xsize) + 2;
X  
X  	donetxt.LeftEdge   = (donetxt.LeftEdge  * Xsize) + 0;
X  	donetxt.TopEdge    = (donetxt.TopEdge   * Ysize) + 0;
X--- 729,736 ----
X  
X  	mystrgad.LeftEdge  = (mystrgad.LeftEdge * Xsize) + 2;
X  	mystrgad.TopEdge   = (mystrgad.TopEdge  * Ysize) + 4;
X! 	mystrgad.Width     = (mystrgad.Width    * Xsize) + 0;
X! 	mystrgad.Height    = (mystrgad.Height   * Ysize) + 2;
X  
X  	donetxt.LeftEdge   = (donetxt.LeftEdge  * Xsize) + 0;
X  	donetxt.TopEdge    = (donetxt.TopEdge   * Ysize) + 0;
XIndex: xmodem.c
X*** ./xmodem.c	Tue Feb 13 09:54:55 1990
X--- ../2.9A/xmodem.c	Tue Feb 13 09:55:09 1990
X***************
X*** 1,7 ****
X--- 1,19 ----
X+ static char rcsid[] = "$RCSfile: xmodem.c,v $ $Revision: 1.3 $";
X+ 
X  /*************************************************************
X   * vt100 terminal emulator - XMODEM protocol support
X   *			:ts=8
X   *
X+  * $Log:	xmodem.c,v $
X+  * Revision 1.3  89/12/14  20:33:37  acs
X+  * 1) Use longs for byte count in xmodem transfers.
X+  * 2) Remove commented out code.
X+  * 
X+  * Revision 1.2  89/12/12  13:39:05  acs
X+  * multi_xfer() will pass "$" to called routines.  This means that
X+  * XMODEM_Read_File(), XMODEM_Send_File() and the kermit routines need
X+  * to check for a filename == "$".
X+  * 
X   *	v2.9 ACS - multi_xfer() no longer looks for $ -- kermit does,
X   *		   readchar() now infers ttime of 100,000 micros if ttime == 0
X   *		   (for newkermit); readchar() doesn't output a TIMED OUT msg
X***************
X*** 287,292 ****
X--- 299,307 ----
X      unsigned short crc;
X      char	scrstr2[40];
X  
X+     if(strcmp(file, "$") == 0)
X+ 	return TRUE;
X+ 
X      bytes_xferred = 0L;
X      ttime = TTIME_SHORT;
X  
X***************
X*** 320,327 ****
X  	}
X  
X  	if  (firstchar == SOH) {
X! 	    sprintf(scrstr2,"%s: Block: %4d Bytes: %d",
X! 		    p_xproto==2?"XmodemCRC":"Xmodem", sectnum, sectnum*SECSIZ);
X  	    InfoMsgNoScroll(scrstr2);
X  	    sectcurr = readchar();
X  	    if (timeout != GOODREAD)
X--- 335,343 ----
X  	}
X  
X  	if  (firstchar == SOH) {
X! 	    sprintf(scrstr2,"%s: Block: %4d Bytes: %ld",
X! 		    p_xproto==2?"XmodemCRC":"Xmodem", sectnum,
X! 		    ((long)sectnum)*SECSIZ);
X  	    InfoMsgNoScroll(scrstr2);
X  	    sectcurr = readchar();
X  	    if (timeout != GOODREAD)
X***************
X*** 363,373 ****
X  			    goto exit;
X  		    } else {
X  			errors = 0;
X- /*			sprintf(scrstr2,"Block %4d verified",sectnum); */
X  			sectnum++;
X  			bufptr += SECSIZ;
X  			bytes_xferred += SECSIZ;
X- /*			InfoMsgNoScroll(scrstr2); */
X  			if (bufptr == BufSize) {
X  			    if (write(fd, bufr, BufSize-SECSIZ) == EOF) {
X  				InfoMsg1Line("XMODEM: Error Writing File");
X--- 379,387 ----
X***************
X*** 433,438 ****
X--- 447,455 ----
X      unsigned short crc;
X      char	scrstr2[40];
X  
X+     if(strcmp(file, "$") == 0)
X+ 	return TRUE;
X+ 
X      bytes_xferred = 0;
X      ttime = TTIME_LONG;
X  
X***************
X*** 474,481 ****
X  	bufptr = 0;
X  	while (bytes_to_send > 0 && attempts != RETRYMAX) {
X  	    attempts = 0;
X! 	    sprintf(scrstr2,"%s: Sending Block: %4d Bytes: %d",
X! 		    use_crc?"XmodemCRC":"Xmodem", sectnum, sectnum*SECSIZ);
X  	    size = SECSIZ <= bytes_to_send ? SECSIZ : bytes_to_send;
X  	    bytes_to_send -= size;
X  	    do {
X--- 491,499 ----
X  	bufptr = 0;
X  	while (bytes_to_send > 0 && attempts != RETRYMAX) {
X  	    attempts = 0;
X! 	    sprintf(scrstr2,"%s: Sending Block: %4d Bytes: %ld",
X! 		    use_crc?"XmodemCRC":"Xmodem", sectnum,
X! 		    ((long)sectnum)*SECSIZ);
X  	    size = SECSIZ <= bytes_to_send ? SECSIZ : bytes_to_send;
X  	    bytes_to_send -= size;
X  	    do {
X***************
X*** 514,521 ****
X  	    } while ((c != ACK) && (attempts != RETRYMAX));
X  	    bufptr += size;
X  	    bytes_xferred += size;
X- /*	    sprintf(scrstr2,"Sent    block %4d",sectnum);
X- 	    InfoMsgNoScroll(scrstr2); */
X  	    sectnum++;
X  	}
X      }
X--- 532,537 ----
X***************
X*** 556,567 ****
X      int status;
X      char *p, *name_start;
X  
X      timeout = USERABORT - 1;
X      for(p=name_start=name; !done && timeout != USERABORT; name_start=++p)
X  	{
X- 	if (*(name_start+1) == '\0')
X- 	    return;
X- 
X  	while(*p == ' ') p++;
X  	while(*p && *p != ',' && *p != ' ') p++;
X  	if (*p == '\0') {
X--- 572,581 ----
X      int status;
X      char *p, *name_start;
X  
X+     fd = -1;
X      timeout = USERABORT - 1;
X      for(p=name_start=name; !done && timeout != USERABORT; name_start=++p)
X  	{
X  	while(*p == ' ') p++;
X  	while(*p && *p != ',' && *p != ' ') p++;
X  	if (*p == '\0') {
X***************
X*** 573,579 ****
X  	*p = '\0';
X  
X  	status = ((*mode)(name_start, multi));
X! 	if (status == FALSE) close(fd);
X  	}
X      server = 0;
X      multi = 0;
X--- 587,593 ----
X  	*p = '\0';
X  
X  	status = ((*mode)(name_start, multi));
X! 	if (status == FALSE && fd >= 0) close(fd);
X  	}
X      server = 0;
X      multi = 0;
END_OF_FILE
if test 53415 -ne `wc -c <'2.9-2.9A'`; then
    echo shar: \"'2.9-2.9A'\" unpacked with wrong size!
fi
# end of '2.9-2.9A'
fi
echo shar: End of archive 2 \(of 2\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked both archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
Mail comments to the moderator at <amiga-request@cs.odu.edu>.
Post requests for sources, and general discussion to comp.sys.amiga.