Greetings,

Attached is a patch to port GNU ed to Minix 3. It allows GNU ed to be
compiled on Minix with the ANSI-C compiler from the Amsterdam Compiler
Kit (the default C compiler for Minix3). The resulting binary works
fine and passes the test suite.

Cheers,
-Thomas
diff -urN ed-1.4.orig/ChangeLog ed-1.4/ChangeLog
--- ed-1.4.orig/ChangeLog	2009-07-10 11:54:33.000000000 +0000
+++ ed-1.4/ChangeLog	2010-05-11 14:18:39.000000000 +0000
@@ -1,3 +1,11 @@
+2010-05-11  Thomas Cort  <linuxg...@gmail.com>
+
+	* configure: minix specific flags.
+	* Converted C99 style comments '// foo' to ANSI style comments /* foo */
+	* carg_parser.c: fix constant declaration near line 156.
+	* regex.c: make se_max a constant.
+	* signal.c: include termios.h
+
 2009-07-10  Antonio Diaz Diaz  <ant_d...@teleline.es>
 
 	* Version 1.4 released.
diff -urN ed-1.4.orig/buffer.c ed-1.4/buffer.c
--- ed-1.4.orig/buffer.c	2009-06-12 12:02:44.000000000 +0000
+++ ed-1.4/buffer.c	2010-05-11 13:46:44.000000000 +0000
@@ -81,8 +81,8 @@
 
 
 /* remove node from circular queue */
-//static void remove_node( const line_t *node )
-//  { link_nodes( node->q_back, node->q_forw ); }
+/* static void remove_node( const line_t *node ) */
+/*  { link_nodes( node->q_back, node->q_forw ); } */
 
 
 /* add a line node in the editor buffer after the given line */
diff -urN ed-1.4.orig/carg_parser.c ed-1.4/carg_parser.c
--- ed-1.4.orig/carg_parser.c	2009-06-06 10:10:21.000000000 +0000
+++ ed-1.4/carg_parser.c	2010-05-11 13:53:18.000000000 +0000
@@ -81,16 +81,16 @@
 
   for( len = 0; opt[len+2] && opt[len+2] != '='; ++len ) ;
 
-  // Test all long options for either exact match or abbreviated matches.
+  /* Test all long options for either exact match or abbreviated matches. */
   for( i = 0; options[i].code != 0; ++i )
     if( options[i].name && !strncmp( options[i].name, &opt[2], len ) )
       {
-      if( strlen( options[i].name ) == len )	// Exact match found
+      if( strlen( options[i].name ) == len )	/* Exact match found */
         { index = i; exact = 1; break; }
-      else if( index < 0 ) index = i;		// First nonexact match found
+      else if( index < 0 ) index = i;		/* First nonexact match found */
       else if( options[index].code != options[i].code ||
                options[index].has_arg != options[i].has_arg )
-        ambig = 1;			// Second or later nonexact match found
+        ambig = 1;			/* Second or later nonexact match found */
       }
 
   if( ambig && !exact )
@@ -100,7 +100,7 @@
     return 1;
     }
 
-  if( index < 0 )		// nothing found
+  if( index < 0 )		/* nothing found */
     {
     add_error( ap, "unrecognized option `" ); add_error( ap, opt );
     add_error( ap, "'" );
@@ -109,7 +109,7 @@
 
   ++*argindp;
 
-  if( opt[len+2] )		// `--<long_option>=<argument>' syntax
+  if( opt[len+2] )		/* `--<long_option>=<argument>' syntax */
     {
     if( options[index].has_arg == ap_no )
       {
@@ -146,14 +146,16 @@
                          const char * const opt, const char * const arg,
                          const ap_Option options[], int * argindp )
   {
-  int cind = 1;			// character index in opt
+  int cind = 1;			/* character index in opt */
 
   while( cind > 0 )
     {
     int index = -1;
     int i;
     const unsigned char code = opt[cind];
-    const char code_str[2] = { code, 0 };
+    char code_tmp[2] = { 0, 0 };
+    const char *code_str = code_tmp;
+    code_tmp[0] = code;
 
     if( code != 0 )
       for( i = 0; options[i].code; ++i )
@@ -166,7 +168,7 @@
       return 1;
       }
 
-    if( opt[++cind] == 0 ) { ++*argindp; cind = 0; }	// opt finished
+    if( opt[++cind] == 0 ) { ++*argindp; cind = 0; }	/* opt finished */
 
     if( options[index].has_arg != ap_no && cind > 0 && opt[cind] )
       {
@@ -193,9 +195,9 @@
 char ap_init( Arg_parser * ap, const int argc, const char * const argv[],
               const ap_Option options[], const char in_order )
   {
-  const char ** non_options = 0;	// skipped non-options
-  int non_options_size = 0;		// number of skipped non-options
-  int argind = 1;			// index in argv
+  const char ** non_options = 0;	/* skipped non-options */
+  int non_options_size = 0;		/* number of skipped non-options */
+  int argind = 1;			/* index in argv */
   int i;
 
   ap->data = 0;
@@ -209,13 +211,13 @@
     const unsigned char ch1 = argv[argind][0];
     const unsigned char ch2 = ( ch1 ? argv[argind][1] : 0 );
 
-    if( ch1 == '-' && ch2 )		// we found an option
+    if( ch1 == '-' && ch2 )		/* we found an option */
       {
       const char * const opt = argv[argind];
       const char * const arg = (argind + 1 < argc) ? argv[argind+1] : 0;
       if( ch2 == '-' )
         {
-        if( !argv[argind][2] ) { ++argind; break; }	// we found "--"
+        if( !argv[argind][2] ) { ++argind; break; }	/* we found "--" */
         else if( !parse_long_option( ap, opt, arg, options, &argind ) ) return 0;
         }
       else if( !parse_short_option( ap, opt, arg, options, &argind ) ) return 0;
diff -urN ed-1.4.orig/carg_parser.h ed-1.4/carg_parser.h
--- ed-1.4.orig/carg_parser.h	2009-01-15 11:24:38.000000000 +0000
+++ ed-1.4/carg_parser.h	2010-05-11 13:47:38.000000000 +0000
@@ -43,8 +43,8 @@
 
 typedef struct
   {
-  int code;			// Short option letter or code ( code != 0 )
-  const char * name;		// Long option name (maybe null)
+  int code;			/* Short option letter or code ( code != 0 ) */
+  const char * name;		/* Long option name (maybe null) */
   ap_Has_arg has_arg;
   }
 ap_Option;
@@ -75,11 +75,11 @@
 
 const char * ap_error( const Arg_parser * ap );
 
-    // The number of arguments parsed (may be different from argc)
+    /* The number of arguments parsed (may be different from argc) */
 int ap_arguments( const Arg_parser * ap );
 
-    // If ap_code( i ) is 0, ap_argument( i ) is a non-option.
-    // Else ap_argument( i ) is the option's argument (or empty).
+    /* If ap_code( i ) is 0, ap_argument( i ) is a non-option. */
+    /* Else ap_argument( i ) is the option's argument (or empty). */
 int ap_code( const Arg_parser * ap, const int i );
 
 const char * ap_argument( const Arg_parser * ap, const int i );
diff -urN ed-1.4.orig/configure ed-1.4/configure
--- ed-1.4.orig/configure	2009-07-10 11:54:33.000000000 +0000
+++ ed-1.4/configure	2010-05-11 14:19:41.000000000 +0000
@@ -33,6 +33,12 @@
 CXXFLAGS='-Wall -W -O2'
 LDFLAGS=
 
+if [ x"$(uname -s)" = x"Minix" ]
+then
+	CFLAGS="-Wall -O2 -D_MINIX -D_POSIX"
+	CXXFLAGS="${CFLAGS}"
+fi
+
 # Loop over all args
 while [ x"$1" != x ] ; do
 
diff -urN ed-1.4.orig/regex.c ed-1.4/regex.c
--- ed-1.4.orig/regex.c	2009-06-12 11:15:28.000000000 +0000
+++ ed-1.4/regex.c	2010-05-11 13:55:45.000000000 +0000
@@ -38,6 +38,8 @@
 static char *rbuf = 0;		/* replace_matching_text buffer */
 static int rbufsz = 0;		/* replace_matching_text buffer size */
 
+/* max subexpressions in a regular expression */
+#define se_max (30)
 
 char prev_pattern( void ) { return global_pat != 0; }
 
@@ -307,7 +309,6 @@
 static int replace_matching_text( const line_t *lp, const int gflags,
                                   const int snum )
   {
-  const int se_max = 30;	/* max subexpressions in a regular expression */
   regmatch_t rm[se_max];
   char *txt = get_sbuf_line( lp );
   char *eot;
diff -urN ed-1.4.orig/signal.c ed-1.4/signal.c
--- ed-1.4.orig/signal.c	2009-06-12 12:25:39.000000000 +0000
+++ ed-1.4/signal.c	2010-05-11 14:17:25.000000000 +0000
@@ -25,6 +25,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <sys/ioctl.h>
+#include <termios.h>
 
 #include "ed.h"
 
_______________________________________________
bug-ed mailing list
bug-ed@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-ed

Reply via email to