will@nirvana.westford.ccur.com (Will Athanasiou) (08/09/90)
Here are the pathes to allow GNU emacs v18.55 to run on the Concurrent/Masscomp machines. There are two things worth mentioning about these patches: 1) The changes in crt0.c that follow can and should be removed if you are not running RTU 5.0. + #ifdef masscomp + int _mp_flag = 0; + int _process_prof = 0; + extern int _sprivate; + int privseg = (int) &_sprivate; + int _magicpg= (int) &privseg; + #endif 2) Some of our local X servers to not handle SIGIO correctly. It is always handled correctly when going through the network. With this in mind, I modified Emacs to always use the Net X server. I didn't notice any speed degradation. ---- Cut here ---- *** Makefile Tue Mar 27 16:01:10 1990 --- dist-18.55/Makefile Mon Jun 18 12:28:50 1990 *************** *** 13,21 # Where to install things # Note that on system V you must change MANDIR to /use/local/man/man1. ! LIBDIR= /usr/local/emacs ! BINDIR= /usr/local/bin ! MANDIR= /usr/man/man1 # Flags passed down to subdirectory makefiles. MFLAGS= --- 13,21 ----- # Where to install things # Note that on system V you must change MANDIR to /use/local/man/man1. ! LIBDIR= /usr/local/gnuemacs ! BINDIR= /usr/local ! MANDIR= /usr/man/manl # Flags passed down to subdirectory makefiles. MFLAGS='CC=gcc -g -fwritable-strings -traditional -O -fstrength-reduce' *************** *** 18,24 MANDIR= /usr/man/man1 # Flags passed down to subdirectory makefiles. ! MFLAGS= # Subdirectories to make recursively. `lisp' is not included # because the compiled lisp files are part of the distribution --- 18,24 ----- MANDIR= /usr/man/manl # Flags passed down to subdirectory makefiles. ! MFLAGS='CC=gcc -g -fwritable-strings -traditional -O -fstrength-reduce' # Subdirectories to make recursively. `lisp' is not included # because the compiled lisp files are part of the distribution *** VIRGIN_GNU/crt0.c Fri Apr 13 11:36:21 1990 --- dist-18.55/src/crt0.c Mon Jun 18 12:32:53 1990 *************** *** 303,308 environ--; exit (main (argc, argv, environ)); } #else /* not CRT0_DUMMIES */ /* "m68k" and "m68000" both stand for m68000 processors, --- 303,317 ----- environ--; exit (main (argc, argv, environ)); } + + #ifdef masscomp + int _mp_flag = 0; + int _process_prof = 0; + extern int _sprivate; + int privseg = (int) &_sprivate; + int _magicpg= (int) &privseg; + #endif + #else /* not CRT0_DUMMIES */ /* "m68k" and "m68000" both stand for m68000 processors, *** VIRGIN_GNU/m-masscomp.h Fri Apr 13 11:35:10 1990 --- dist-18.55/src/m-masscomp.h Mon Jun 18 12:34:02 1990 *************** *** 128,134 /* This triggers some stuff to avoid a compiler bug */ ! #define MASSC_REGISTER_BUG /* Prevent -lg from being used for debugging. Not implemented? */ --- 128,134 ----- /* This triggers some stuff to avoid a compiler bug */ ! /* #define MASSC_REGISTER_BUG */ /* Prevent -lg from being used for debugging. Not implemented? */ *** VIRGIN_GNU/process.c Fri Apr 13 11:30:43 1990 --- dist-18.55/src/process.c Mon Jun 18 12:36:01 1990 *************** *** 1447,1452 else error("select error: %s", sys_errlist[xerrno]); } #ifdef sun else if (nfds > 0 && (Available & 1) && interrupt_input) /* System sometimes fails to deliver SIGIO. */ --- 1447,1457 ----- else error("select error: %s", sys_errlist[xerrno]); } + #ifdef masscomp + else if (nfds > 0 && (Available & 1) && interrupt_input) + kill( getpid(), /* SIGIO */ 32); + /* sigio does not work for local networks. */ + #endif #ifdef sun else if (nfds > 0 && (Available & 1) && interrupt_input) /* System sometimes fails to deliver SIGIO. */ *** VIRGIN_GNU/s-rtu.h Fri Apr 13 11:31:57 1990 --- dist-18.55/src/s-rtu.h Mon Jun 18 12:38:06 1990 *************** *** 37,43 does not have "job control" (the ability to stop a program, run some other program, then continue the first one). */ ! #define NOMULTIPLEJOBS /* Emacs can read input using SIGIO and buffering characters itself, or using CBREAK mode and making C-g cause SIGINT. --- 37,43 ----- does not have "job control" (the ability to stop a program, run some other program, then continue the first one). */ ! #undef NOMULTIPLEJOBS /* Emacs can read input using SIGIO and buffering characters itself, or using CBREAK mode and making C-g cause SIGINT. *************** *** 57,63 through a pipe. */ ! #undef INTERRUPT_INPUT /* Letter to use in finding device name of first pty, if system supports pty's. 'a' means it is /dev/ptya0 */ --- 57,63 ----- through a pipe. */ ! /* #undef INTERRUPT_INPUT */ /* Letter to use in finding device name of first pty, if system supports pty's. 'a' means it is /dev/ptya0 */ *************** *** 154,160 This hack below isn't the best solution, but without it this program will cause the whole system to hang! !@#$#%$ Masscomp! */ ! #define fsync(x) 0 /* "Comment out" fsync calls */ /* RTU has IPC instead of Unix-domain sockets. */ --- 154,160 ----- This hack below isn't the best solution, but without it this program will cause the whole system to hang! !@#$#%$ Masscomp! */ ! /* #define fsync(x) 0*/ /* "Comment out" fsync calls */ /* RTU has IPC instead of Unix-domain sockets. */ *** VIRGIN_GNU/x11term.c Wed Aug 2 22:56:42 1989 --- dist-18.55/src/x11term.c Mon Jun 18 13:46:09 1990 *************** *** 1525,1530 int ix; vardisplay = (alternate_display ? alternate_display : ""); if (!vardisplay) { fprintf (stderr, "DISPLAY environment variable must be set\n"); --- 1525,1534 ----- int ix; + #ifdef masscomp + vardisplay = (alternate_display ? alternate_display : (char *) egetenv("DISPLAY")); + if (!vardisplay || *vardisplay == '\0') { + #else vardisplay = (alternate_display ? alternate_display : ""); if (!vardisplay) { #endif *************** *** 1527,1532 vardisplay = (alternate_display ? alternate_display : ""); if (!vardisplay) { fprintf (stderr, "DISPLAY environment variable must be set\n"); exit (-200); } --- 1531,1537 ----- #else vardisplay = (alternate_display ? alternate_display : ""); if (!vardisplay) { + #endif fprintf (stderr, "DISPLAY environment variable must be set\n"); exit (-200); } *************** *** 1530,1535 fprintf (stderr, "DISPLAY environment variable must be set\n"); exit (-200); } XXdisplay = XOpenDisplay (vardisplay); if (XXdisplay == (Display *) 0) { --- 1535,1560 ----- fprintf (stderr, "DISPLAY environment variable must be set\n"); exit (-200); } + #ifdef masscomp + { + char mach_name[50]; + char *local_str = "local"; + char *net_str = "net"; + char *new_disp; + + if ( gethostname( mach_name, 50 ) != 0 ) { + fprintf( stderr, "Unable to determine the name of the host machine.\n" ); + exit (-200); + } + if ( strncmp( vardisplay, mach_name, strlen(mach_name) ) == 0 || + strncmp( vardisplay, local_str, strlen(local_str) ) == 0 ) { + new_disp = (char *) malloc(50); + strcpy( new_disp, net_str ); + strcat( new_disp, index( vardisplay, ':' )); + vardisplay = new_disp; + } + } + #endif XXdisplay = XOpenDisplay (vardisplay); if (XXdisplay == (Display *) 0) { *** VIRGIN_GNU/x11term.h Fri Apr 13 14:19:21 1990 --- dist-18.55/src/x11term.h Mon Jun 18 12:38:44 1990 *************** *** 20,23 #define UNBLOCK_INPUT() #endif /* SIGIO */ ! #define CLASS "emacs" /* class id for GNU Emacs, used in .Xdefaults, etc. */ --- 20,23 ----- #define UNBLOCK_INPUT() #endif /* SIGIO */ ! #define CLASS "gemacs" /* class id for GNU Emacs, used in .Xdefaults, etc. */ *** VIRGIN_GNU/xfns.c Sun Aug 13 15:53:07 1989 --- dist-18.55/src/xfns.c Mon Jun 18 13:09:35 1990 *************** *** 1071,1076 fontinfo = 0; XXdisplay = 0; } XXdisplay = XOpenDisplay (newdisplayname); if (!XXdisplay) { --- 1071,1097 ----- fontinfo = 0; XXdisplay = 0; } + #ifdef masscomp + { + char mach_name[50]; + char local_str = "local"; + char net_str = "net"; + char *new_disp; + + if ( gethostname( mach_name, 50 ) != 0 ) { + fprintf( stderr, "Unable to determine the name of the host machine.\n" ); + exit (-200); + } + if ( strncmp( newdisplayname, mach_name, strlen(mach_name) ) == 0 || + strncmp( newdisplayname, local_str, strlen(local_str) ) == 0 ) { + new_disp = (char *) malloc(50); + strcpy( new_disp, net_str ); + strcat( new_disp, newdisplayname[ index( newdisplayname, ':' ) ] ); + newdisplayname = new_disp; + } + } + #endif + XXdisplay = XOpenDisplay (newdisplayname); if (!XXdisplay) { *** VIRGIN_GNU/xterm.c Wed Dec 28 23:09:23 1988 --- dist-18.55/src/xterm.c Mon Jun 18 13:07:41 1990 *************** *** 1338,1343 fprintf (stderr, "DISPLAY environment variable must be set\n"); exit (-200); } XXdisplay = XOpenDisplay (vardisplay); if (XXdisplay == (Display *) 0) --- 1338,1349 ----- fprintf (stderr, "DISPLAY environment variable must be set\n"); exit (-200); } + #ifdef masscomp + { + char mach_name[50]; + char local_str = "local"; + char net_str = "net"; + char *new_disp; if ( gethostname( mach_name, 50 ) != 0 ) { fprintf( stderr, "Unable to determine the name of the host machine.\n" ); *************** *** 1339,1344 exit (-200); } XXdisplay = XOpenDisplay (vardisplay); if (XXdisplay == (Display *) 0) { --- 1345,1363 ----- char net_str = "net"; char *new_disp; + if ( gethostname( mach_name, 50 ) != 0 ) { + fprintf( stderr, "Unable to determine the name of the host machine.\n" ); + exit (-200); + } + if ( strncmp( vardisplay, mach_name, strlen(mach_name) ) == 0 || + strncmp( vardisplay, local_str, strlen(local_str) ) == 0 ) { + new_disp = (char *) malloc(50); + strcpy( new_disp, net_str ); + strcat( new_disp, vardisplay[ index( vardisplay, ':' ) ] ); + vardisplay = new_disp; + } + } + #endif XXdisplay = XOpenDisplay (vardisplay); if (XXdisplay == (Display *) 0) { *** VIRGIN_GNU/ymakefile Fri Apr 13 11:49:54 1990 --- dist-18.55/src/ymakefile Mon Jun 18 12:41:00 1990 *************** *** 72,77 #endif /* COFF, or not BSD */ #endif /* Some m- files define this to request special switches in ld. */ #ifndef LD_SWITCH_MACHINE #define LD_SWITCH_MACHINE --- 72,79 ----- #endif /* COFF, or not BSD */ #endif + CC=gcc + /* Some m- files define this to request special switches in ld. */ #ifndef LD_SWITCH_MACHINE #define LD_SWITCH_MACHINE *************** *** 102,108 /* If user wants to optimize, this is how. */ #ifndef C_OPTIMIZE_SWITCH ! #define C_OPTIMIZE_SWITCH -O #endif /* cc switches needed to make `asm' keyword work. --- 104,110 ----- /* If user wants to optimize, this is how. */ #ifndef C_OPTIMIZE_SWITCH ! #define C_OPTIMIZE_SWITCH -O -fstrength-reduce -finline-functions -fforce-mem -fforce-addr -fcombine-regs #endif /* cc switches needed to make `asm' keyword work. *************** *** 142,148 SHORT= shortnames #endif /* SHORTNAMES */ ! CFLAGS= C_DEBUG_SWITCH -Demacs $(MYCPPFLAG) C_SWITCH_MACHINE C_SWITCH_SYSTEM /* DO NOT use -R. There is a special hack described in lastfile.c which is used instead. Some initialized data areas are modified at initial startup, then labeled as part of the text area when --- 144,150 ----- SHORT= shortnames #endif /* SHORTNAMES */ ! CFLAGS= C_DEBUG_SWITCH C_OPTIMIZE_SWITCH -Demacs $(MYCPPFLAG) C_SWITCH_MACHINE C_SWITCH_SYSTEM /* DO NOT use -R. There is a special hack described in lastfile.c which is used instead. Some initialized data areas are modified at initial startup, then labeled as part of the text area when