diff -c -r fvwm/Imakefile fvwm.tda/Imakefile
*** fvwm/Imakefile	Wed Oct  6 15:03:44 1993
--- fvwm.tda/Imakefile	Sat Oct  9 21:51:24 1993
***************
*** 55,60 ****
--- 55,81 ----
  /* If your libraries don't have sysconf(), uncomment this line */
  /*MORE_FLAGS = -DNO_SYSCONF*/
  
+ #if defined SunArchitecture && defined i386Architecture
+ EXTRA_INCLUDES = -Isun386i
+ EXTRA_SRCS = sun386i/strcasecmp.c
+ EXTRA_OBJS = strcasecmp.o
+ MORE_FLAGS = -DNO_SYSCONF
+ #endif
+ 
+ /*
+  * InstallNonExecFile - generate rules to install a data file
+  * added in case we are using X11R4 <tda10@ucs.cam.ac.uk>
+  */
+ #ifndef InstallNonExecFile
+ #define InstallNonExecFile(file,dest)                                   @@\
+ install:: file                                                          @@\
+ 	MakeDir($(DESTDIR)dest)                                         @@\
+ 	$(INSTALL) -c $(INSTDATFLAGS) file $(DESTDIR)dest
+ #endif /* InstallNonExecFile */
+ 
+ 
+ 
+ 
  CCOPTIONS = $(MORE_FLAGS) $(SHAPEFLAG) $(XPMFLAG) $(EXTRAFLAGS) $(OTHERFLAGS) -DFVWMRC=\"$(FVWMDIR)/system.fvwmrc\"
  
  DEPLIBS = $(DEPXLIB) 
***************
*** 65,76 ****
  
  
  SRCS = fvwm.c configure.c events.c borders.c menus.c functions.c resize.c\
!        add_window.c pager.c move.c icons.c windows.c
   
  OBJS = fvwm.o configure.o events.o borders.o menus.o functions.o resize.o\
!        add_window.o pager.o move.o icons.o windows.o
  
  ComplexProgramTarget(fvwm)
  InstallNonExecFile(system.fvwmrc,$(FVWMDIR))
  
  
--- 86,99 ----
  
  
  SRCS = fvwm.c configure.c events.c borders.c menus.c functions.c resize.c\
!        add_window.c pager.c move.c icons.c windows.c $(EXTRA_SRCS)
   
  OBJS = fvwm.o configure.o events.o borders.o menus.o functions.o resize.o\
!        add_window.o pager.o move.o icons.o windows.o $(EXTRA_OBJS)
  
  ComplexProgramTarget(fvwm)
  InstallNonExecFile(system.fvwmrc,$(FVWMDIR))
  
  
+ strcasecmp.o: sun386i/strcasecmp.c
+ 	$(CC) -c sun386i/strcasecmp.c
diff -c -r fvwm/add_window.c fvwm.tda/add_window.c
*** fvwm/add_window.c	Thu Oct  7 18:37:28 1993
--- fvwm.tda/add_window.c	Sat Oct  9 18:35:47 1993
***************
*** 46,52 ****
  #include "screen.h"
  #ifdef SHAPE
  #include <X11/extensions/shape.h>
! #endif SHAPE
  
  extern Bool PPosOverride;
  char NoName[] = "Untitled"; /* name if no name is specified */
--- 46,52 ----
  #include "screen.h"
  #ifdef SHAPE
  #include <X11/extensions/shape.h>
! #endif /* SHAPE */
  
  extern Bool PPosOverride;
  char NoName[] = "Untitled"; /* name if no name is specified */
diff -c -r fvwm/configure.c fvwm.tda/configure.c
*** fvwm/configure.c	Thu Oct  7 19:45:50 1993
--- fvwm.tda/configure.c	Sat Oct  9 18:35:48 1993
***************
*** 277,283 ****
    while(tline != (char *)0)
      {
        while(isspace(*tline))tline++;
!       if((strlen(&tline[0])>1)&&(tline[0]!='#'))
  	match_string(main_config,tline,"error in config:",fd);
        tline = fgets(line,(sizeof line)-1,fd);
        orig_tline = tline;
--- 277,283 ----
    while(tline != (char *)0)
      {
        while(isspace(*tline))tline++;
!       if(((int)strlen(&tline[0])>1)&&(tline[0]!='#'))
  	match_string(main_config,tline,"error in config:",fd);
        tline = fgets(line,(sizeof line)-1,fd);
        orig_tline = tline;
***************
*** 432,440 ****
    bg_color.pixel = background;
    XQueryColor(dpy,attributes.colormap,&bg_color);
    
!   bg_color.red = (unsigned short)((bg_color.red*50)/100);
!   bg_color.green = (unsigned short)((bg_color.green*50)/100);
!   bg_color.blue = (unsigned short)((bg_color.blue*50)/100);
    
    if(!XAllocColor(dpy,attributes.colormap,&bg_color))
      nocolor("alloc shadow","");
--- 432,440 ----
    bg_color.pixel = background;
    XQueryColor(dpy,attributes.colormap,&bg_color);
    
!   bg_color.red = (unsigned short)(((int)bg_color.red*50)/100);
!   bg_color.green = (unsigned short)(((int)bg_color.green*50)/100);
!   bg_color.blue = (unsigned short)(((int)bg_color.blue*50)/100);
    
    if(!XAllocColor(dpy,attributes.colormap,&bg_color))
      nocolor("alloc shadow","");
***************
*** 460,475 ****
    white_p.pixel = GetColor(white);
    XQueryColor(dpy,attributes.colormap,&white_p);
    
! #define min(a,b) (((a)<(b)) ? (a) : (b))
! #define max(a,b) (((a)>(b)) ? (a) : (b))
    
    bg_color.red = max((white_p.red/5), bg_color.red);
    bg_color.green = max((white_p.green/5), bg_color.green);
    bg_color.blue = max((white_p.blue/5), bg_color.blue);
    
!   bg_color.red = min(white_p.red, (bg_color.red*140)/100);
!   bg_color.green = min(white_p.green, (bg_color.green*140)/100);
!   bg_color.blue = min(white_p.blue, (bg_color.blue*140)/100);
    
    if(!XAllocColor(dpy,attributes.colormap,&bg_color))
      nocolor("alloc hilight","");
--- 460,475 ----
    white_p.pixel = GetColor(white);
    XQueryColor(dpy,attributes.colormap,&white_p);
    
! #define min(a,b) (((int)(a)<(int)(b)) ? (a) : (b))
! #define max(a,b) (((int)(a)>(int)(b)) ? (a) : (b))
    
    bg_color.red = max((white_p.red/5), bg_color.red);
    bg_color.green = max((white_p.green/5), bg_color.green);
    bg_color.blue = max((white_p.blue/5), bg_color.blue);
    
!   bg_color.red = min(white_p.red, ((int)bg_color.red*140)/100);
!   bg_color.green = min(white_p.green, ((int)bg_color.green*140)/100);
!   bg_color.blue = min(white_p.blue, ((int)bg_color.blue*140)/100);
    
    if(!XAllocColor(dpy,attributes.colormap,&bg_color))
      nocolor("alloc hilight","");
***************
*** 855,861 ****
  
    *output=0;
    i=0;
!   while(i<strlen(string))
      {
        j=0;
        matched = FALSE;
--- 855,861 ----
  
    *output=0;
    i=0;
!   while(i<(int)strlen(string))
      {
        j=0;
        matched = FALSE;
***************
*** 898,904 ****
  
    j=0;
    matched = FALSE;
!   while((!matched)&&(strlen(table[j].keyword)>0))
      {
        if(strncasecmp(text,table[j].keyword,strlen(table[j].keyword))==0)
  	{
--- 898,904 ----
  
    j=0;
    matched = FALSE;
!   while((!matched)&&((int)strlen(table[j].keyword)>0))
      {
        if(strncasecmp(text,table[j].keyword,strlen(table[j].keyword))==0)
  	{
diff -c -r fvwm/events.c fvwm.tda/events.c
*** fvwm/events.c	Thu Oct  7 17:53:06 1993
--- fvwm.tda/events.c	Sat Oct  9 20:19:10 1993
***************
*** 377,385 ****
  	      else 
  		XUnmapWindow(dpy,Tmp_win->icon_w);
  	    }
! 	  Tmp_win->icon_w = NULL;
! 	  Tmp_win->icon_pixmap_w = NULL;
! 	  Tmp_win->iconPixmap = NULL;
  	  if(Tmp_win->flags & ICON)
  	    {
  	      Tmp_win->flags &= ~ICON;
--- 377,385 ----
  	      else 
  		XUnmapWindow(dpy,Tmp_win->icon_w);
  	    }
! 	  Tmp_win->icon_w = 0;
! 	  Tmp_win->icon_pixmap_w = 0;
! 	  Tmp_win->iconPixmap = 0;
  	  if(Tmp_win->flags & ICON)
  	    {
  	      Tmp_win->flags &= ~ICON;
Only in fvwm.tda: fvmrc
diff -c -r fvwm/fvwm.c fvwm.tda/fvwm.c
*** fvwm/fvwm.c	Thu Oct  7 18:16:53 1993
--- fvwm.tda/fvwm.c	Sat Oct  9 18:35:51 1993
***************
*** 38,43 ****
--- 38,44 ----
  #include <signal.h>
  #include <fcntl.h>
  #include <string.h>
+ #include <ctype.h>      /* to get tolower() and isupper() */
  #include <sys/wait.h>
  #include <unistd.h>
  #include "fvwm.h"
diff -c -r fvwm/fvwm.h fvwm.tda/fvwm.h
*** fvwm/fvwm.h	Tue Oct  5 20:18:12 1993
--- fvwm.tda/fvwm.h	Sat Oct  9 18:35:52 1993
***************
*** 156,163 ****
      int icon_w_width;		/* width of the icon window */
      int icon_w_height;		/* height of the icon window */
      int icon_t_width;		/* width of the icon title window */
!     int icon_p_width;		/* width of the icon pixmap window */
!     int icon_p_height;		/* height of the icon pixmap window */
      Pixmap iconPixmap;		/* pixmap for the icon */
      Pixmap icon_maskPixmap;	/* pixmap for the icon mask */
      char *name;			/* name of the window */
--- 156,163 ----
      int icon_w_width;		/* width of the icon window */
      int icon_w_height;		/* height of the icon window */
      int icon_t_width;		/* width of the icon title window */
!     unsigned int icon_p_width;	/* width of the icon pixmap window */
!     unsigned int icon_p_height; /* height of the icon pixmap window */
      Pixmap iconPixmap;		/* pixmap for the icon */
      Pixmap icon_maskPixmap;	/* pixmap for the icon mask */
      char *name;			/* name of the window */
Common subdirectories: fvwm/fvwm_icons and fvwm.tda/fvwm_icons
Common subdirectories: fvwm/sample_configs and fvwm.tda/sample_configs
Common subdirectories: fvwm/sun386i and fvwm.tda/sun386i
Common subdirectories: fvwm/xpmroot and fvwm.tda/xpmroot
diff -c -r fvwm/sun386i/README fvwm.tda/sun386i/README
*** fvwm/sun386i/README	Sat Oct  9 22:30:41 1993
--- fvwm.tda/sun386i/README	Sat Oct  9 18:36:19 1993
***************
*** 0 ****
--- 1,5 ----
+ 
+ The Sun 386i doesn't provide <stdlib.h> or strncasecmp() so here is
+ enough to convince fvwm.
+ 
+ Tim Auckland <tda10@ucs.cam.ac.uk>
diff -c -r fvwm/sun386i/stdlib.h fvwm.tda/sun386i/stdlib.h
*** fvwm/sun386i/stdlib.h	Sat Oct  9 22:30:41 1993
--- fvwm.tda/sun386i/stdlib.h	Sat Oct  9 18:36:19 1993
***************
*** 0 ****
--- 1,40 ----
+ 
+ /*
+  * parts of stdlib.h to help the Sun 386i
+  */
+ 
+ #ifndef	__stdlib_h
+ #define	__stdlib_h
+ 
+ #include <sys/types.h>    /* for size_t */
+ 
+ extern unsigned int _mb_cur_max;
+ #define MB_CUR_MAX    _mb_cur_max
+ 
+ #define	mblen(s, n)	mbtowc((wchar_t *)0, s, n)
+ 
+ /* declaration of various libc functions */
+ 
+ extern int	abs(/* int j */);
+ extern double	atof(/* const char *nptr */);
+ extern int	atoi(/* const char *nptr */);
+ extern long int	atol(/* const char *nptr */);
+ extern char *	bsearch(/* const void *key, const void *base, size_t nmemb,
+ 		    size_t size, int (*compar)(const void *, const void *) */);
+ extern char *	calloc(/* size_t nmemb, size_t size */);
+ 
+ extern int	free(/* void *ptr */);
+ extern char *	getenv(/* const char *name */);
+ extern char *	malloc(/* size_t size */);
+ extern int	qsort(/* void *base, size_t nmemb, size_t size,
+ 		    int (*compar)(const void *, const void *) */);
+ extern int	rand(/* void */);
+ extern char *	realloc(/* void *ptr, size_t size */);
+ extern int	srand(/* unsigned int seed */);
+ 
+ extern int    mbtowc(/* wchar_t *pwc, const char *s, size_t n */);
+ extern int    wctomb(/* char *s, wchar_t wchar */);
+ extern size_t mbstowcs(/* wchar_t *pwcs, const char *s, size_t n */);
+ extern size_t wcstombs(/* char *s, const wchar_t *pwcs, size_t n */);
+ 
+ #endif
diff -c -r fvwm/sun386i/strcasecmp.c fvwm.tda/sun386i/strcasecmp.c
*** fvwm/sun386i/strcasecmp.c	Sat Oct  9 22:30:41 1993
--- fvwm.tda/sun386i/strcasecmp.c	Sat Oct  9 21:47:25 1993
***************
*** 0 ****
--- 1,115 ----
+ /*
+  * Copyright (c) 1987 Regents of the University of California.
+  * All rights reserved.
+  *
+  * Redistribution and use in source and binary forms, with or without
+  * modification, are permitted provided that the following conditions
+  * are met:
+  * 1. Redistributions of source code must retain the above copyright
+  *    notice, this list of conditions and the following disclaimer.
+  * 2. Redistributions in binary form must reproduce the above copyright
+  *    notice, this list of conditions and the following disclaimer in the
+  *    documentation and/or other materials provided with the distribution.
+  * 3. All advertising materials mentioning features or use of this software
+  *    must display the following acknowledgement:
+  *	This product includes software developed by the University of
+  *	California, Berkeley and its contributors.
+  * 4. Neither the name of the University nor the names of its contributors
+  *    may be used to endorse or promote products derived from this software
+  *    without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+  * SUCH DAMAGE.
+  */
+ 
+ #include <sys/types.h>
+ #include <string.h>
+ 
+ #if defined(LIBC_SCCS) && !defined(lint)
+ static const char sccsid[] = "@(#)strcasecmp.c	5.10 (Berkeley) 1/26/91";
+ #endif /* LIBC_SCCS and not lint */
+ 
+ /* typedef unsigned char u_char; /* defined in <sys/types.h> */
+ 
+ /*
+  * This array is designed for mapping upper and lower case letter
+  * together for a case independent comparison.  The mappings are
+  * based upon ascii character sequences.
+  */
+ static const u_char charmap[] = {
+ 	'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
+ 	'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
+ 	'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
+ 	'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
+ 	'\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
+ 	'\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
+ 	'\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
+ 	'\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
+ 	'\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+ 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+ 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+ 	'\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
+ 	'\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+ 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+ 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+ 	'\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
+ 	'\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
+ 	'\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
+ 	'\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
+ 	'\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
+ 	'\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
+ 	'\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
+ 	'\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
+ 	'\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
+ 	'\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
+ 	'\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
+ 	'\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
+ 	'\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
+ 	'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
+ 	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
+ 	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
+ 	'\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
+ };
+ 
+ int
+ strcasecmp(s1, s2)
+ 	const char *s1, *s2;
+ {
+ 	register const u_char *cm = charmap,
+ 			*us1 = (const u_char *)s1,
+ 			*us2 = (const u_char *)s2;
+ 
+ 	while (cm[*us1] == cm[*us2++])
+ 		if (*us1++ == '\0')
+ 			return (0);
+ 	return (cm[*us1] - cm[*--us2]);
+ }
+ 
+ int
+ strncasecmp(s1, s2, n)
+ 	const char *s1, *s2;
+ 	register size_t n;
+ {
+ 	if (n != 0) {
+ 		register const u_char *cm = charmap,
+ 				*us1 = (const u_char *)s1,
+ 				*us2 = (const u_char *)s2;
+ 
+ 		do {
+ 			if (cm[*us1] != cm[*us2++])
+ 				return (cm[*us1] - cm[*--us2]);
+ 			if (*us1++ == '\0')
+ 				break;
+ 		} while (--n != 0);
+ 	}
+ 	return (0);
+ }
