From: karl@claude.cs.umb.edu (Karl Berry)
Subject: rt internal dump
Reply-To: karl@cs.umb.edu
Organization: GNUs Not Usenet
Distribution: gnu
Date: Fri, 8 Jan 1993 05:31:36 GMT

gcc 2.3.3 on an IBM RT running 4.3 bsd (configured as romp-aos), gets an
internal compiler error on the following file.  Only option is -g.

# 1 "metafont.c"
 

















# 1 ".././include/config.h" 1
 





















 
# 1 ".././include/c-auto.h" 1
 
 

 


 


 


 


 


 


 


 


 


 


 


 


 


 

# 24 ".././include/config.h" 2


 



 
# 1 ".././include/c-std.h" 1
 




















 


# 1 "/usr/include/math.h" 1 3
 



 
 
 





 

extern double asinh(), acosh(), atanh();
extern double erf(), erfc();
extern double fabs(), floor(), ceil(); 
extern double modf(), ldexp(), frexp(), atof();
extern double sqrt(), cbrt();
extern double sin(), cos(), tan(), asin(), acos(), atan(), atan2();
extern double expm1(), log1p(), exp(), log(), log10(), pow();
extern double sinh(), cosh(), tanh();
extern double hypot(), cabs(), lgamma();
extern double j0(), j1(), jn(), y0(), y1(), yn();






# 25 ".././include/c-std.h" 2

# 1 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdio.h" 1 3

# 1 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdarg.h" 1 3
 







































 






typedef void *__gnuc_va_list;



 

# 85 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdarg.h" 3










# 137 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdarg.h" 3





# 2 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdio.h" 2 3

 



 
 
 





 









extern	struct	_iobuf {
	int	_cnt;
	char	*_ptr;		 
	char	*_base;		 
	int	_bufsiz;
	short	_flag;
	char	_file;		 
} _iob[];










		


























struct _iobuf 	*fopen();
struct _iobuf 	*fdopen();
struct _iobuf 	*freopen();
struct _iobuf 	*popen();
long	ftell();
char	*fgets();
char	*gets();




# 26 ".././include/c-std.h" 2


 
# 1 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/sys/types.h" 1 3
 



 
 
 








 







 



 


 


 


typedef	unsigned char	u_char;
typedef	unsigned short	u_short;
typedef	unsigned int	u_int;
typedef	unsigned long	u_long;
typedef	unsigned short	ushort;		 








typedef	struct	_physadr { int r[1]; } *physadr;
typedef	struct	label_t	{
	int	val[11];
} label_t;


typedef	struct	_quad { long val[2]; } quad;
typedef	long	daddr_t;
typedef	char *	caddr_t;
typedef	u_long	ino_t;
typedef	long	swblk_t;


typedef	long	size_t;

typedef	long	time_t;
typedef	short	dev_t;
typedef	long	off_t;
typedef	u_short	uid_t;
typedef	u_short	gid_t;

typedef signed char prio_t;	 





 









typedef long	fd_mask;





typedef	struct fd_set {
	fd_mask	fds_bits[(((256 )+(( (sizeof(fd_mask) * 8		)	)-1))/( (sizeof(fd_mask) * 8		)	)) ];
} fd_set;







 



typedef struct qhdr {
	struct qhdr *link, *rlink;
} *queue_t;




# 29 ".././include/c-std.h" 2


 



 








 




extern char *getenv ();







extern void  *calloc (), *malloc (), *realloc ();


 
extern struct _iobuf  *popen ();
extern double hypot ();


# 31 ".././include/config.h" 2


 
# 1 ".././include/c-memstr.h" 1
 






















 


# 1 "/usr/include/string.h" 1 3
 



 
 
 





 







# 1 "/usr/include/strings.h" 1 3
 



 
 
 





 







 



char	*strcat();
char	*strncat();
int	strcmp();
int	strncmp();
char	*strcpy();
char	*strncpy();
int	strlen();
char	*index();
char	*rindex();
# 21 "/usr/include/string.h" 2 3


 



extern char *strcpyn();
extern char *strcatn();
extern int strcmpn();

 




extern char *strchr();
extern char *strrchr();
extern char *strpbrk();
extern int strspn();
extern int strcspn();
extern char *strtok();
# 27 ".././include/c-memstr.h" 2


 

# 1 "/usr/include/memory.h" 1 3
 



 
 
 





 







 



extern char *memccpy();
extern char *memchr();
extern int memcmp();
extern char *memcpy();
extern char *memset();
# 31 ".././include/c-memstr.h" 2
















# 60 ".././include/c-memstr.h"



# 34 ".././include/config.h" 2


 
# 1 ".././include/c-errno.h" 1
 




















# 1 "/usr/include/errno.h" 1 3
 




 
 
 






# 1 "/usr/include/sys/nfs_defines.h" 1 3
 




 
 
 





 



 





















# 15 "/usr/include/errno.h" 2 3



 







 




































 



 






 

	 













	 













	 



 




 

















 



 




# 22 ".././include/c-errno.h" 2


extern int errno;



# 37 ".././include/config.h" 2


 
# 1 "/usr/local/gnu/include/assert.h" 1 3
 








# 19 "/usr/local/gnu/include/assert.h" 3




 





extern void __eprintf (const char *, const char *, unsigned, const char *);









# 50 "/usr/local/gnu/include/assert.h" 3



# 40 ".././include/config.h" 2


 
# 1 ".././include/c-minmax.h" 1
 





















# 1 ".././include/c-limits.h" 1
 

























# 1 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/limits.h" 1 3



 



 



 



 





 



 












 





 



 





 



 






 




 





 






# 27 ".././include/c-limits.h" 2




# 1 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/float.h" 1 3
 


 

    


    


    


    


    


    


    


    


    


    


    



    


    


    


    


    


    


    


    


    



    


    


    



union __convert_long_double {
  int __convert_long_double_i[4];
  long double __convert_long_double_d;
};


    


    


    


    


    


    




# 31 ".././include/c-limits.h" 2




# 23 ".././include/c-minmax.h" 2


 











































 















# 43 ".././include/config.h" 2


 
# 1 ".././include/c-seek.h" 1
 





























# 46 ".././include/config.h" 2


 





 
# 1 ".././include/c-proto.h" 1
 




















 




















# 59 ".././include/c-proto.h"



# 55 ".././include/config.h" 2


 
# 1 ".././include/global.h" 1
 





















# 1 ".././include/lib.h" 1
 




















# 1 ".././include/types.h" 1
 




















 
typedef enum { false = 0, true = 1 } boolean;

 






 
typedef char *string;

 
typedef void *address;

 
typedef double real;

 


typedef unsigned char charcode_type;


 
typedef unsigned char one_byte;
typedef signed char signed_byte;
typedef unsigned short two_bytes;
typedef short signed_2_bytes;
typedef unsigned int four_bytes;
typedef int signed_4_bytes;
typedef int byte_count_type;

 






 
typedef struct
{
  real real;
  real imag;
} complex;
typedef enum { first_complex_part, second_complex_part} complex_part_type;
typedef enum { polar_rep, rectangular_rep} complex_rep_type;


 
typedef struct
{
  unsigned height, width;
} dimensions_type;





 
typedef struct
{
  int x, y;
} coordinate_type;

typedef struct
{
  double x, y;
} real_coordinate_type;


# 22 ".././include/lib.h" 2


 
extern string concat (string s1,  string s2) ;
extern string concat3 (string,  string,  string) ;
extern string concat4 (string,  string,  string,  string) ;
extern string concat5 (string,  string,  string,  string,  string) ;


 
extern string xstrdup (string s) ;


 

extern boolean same_file_p (string filename1,  string filename2) ;


 

extern string find_suffix (string name) ;

 
extern string remove_suffix (string name) ;

 


extern string make_suffix (string s,  string suffix) ;

 


extern string make_prefix (string stem_prefix,  string name) ;

 

extern string extend_filename (string name,  string suffix) ;


 


extern address xmalloc (unsigned size) ;
extern address xrealloc (address old_address,  unsigned new_size) ;
extern address xcalloc (unsigned nelem,  unsigned elsize) ;

 






# 23 ".././include/global.h" 2



 

 
































 

 




 


 





 














 





 



 
extern string now (void);

 

extern boolean float_ok (string);
extern boolean integer_ok (string);

 
extern const unsigned atou (string);

 

extern string itoa (int);
extern string utoa (unsigned);
extern string xdtoa (double);

 

extern struct _iobuf  *xfopen (string filename, string mode);
extern void xfclose (struct _iobuf  *, string filename);
extern void xfseek (struct _iobuf  *, long, int, string filename);
extern four_bytes xftell (struct _iobuf  *, string filename);

 
extern void xrename (string from, string to);

 

extern string basename (string name);



 

extern void safe_free (address *p);


 

 






extern const boolean epsilon_equal (real v1, real v2);

 
extern const real acosd (real);

 
extern const real distance (real_coordinate_type, real_coordinate_type);
extern const real int_distance (coordinate_type, coordinate_type);

 
extern const real slope (real_coordinate_type, real_coordinate_type);

 
extern const real_coordinate_type int_to_real_coord (coordinate_type);
extern const coordinate_type real_to_int_coord (real_coordinate_type);

 
extern const boolean points_adjacent_p (int row1, int col1, int r2, int c2);

 
extern void find_bounds (real values[], unsigned value_count,
	                   real *the_min, real *the_max);

 
extern real *map_to_unit (real * values, unsigned value_count);


 

 

extern string substring (string source, const unsigned start,
                         const unsigned limit);

 
extern string lowercasify (string s);


 

 






extern charcode_type parse_charcode (string s, boolean *valid);

 

extern charcode_type xparse_charcode (string s);

 





# 58 ".././include/config.h" 2



# 19 "metafont.c" 2


# 1 ".././include/bzr.h" 1
 























# 1 ".././include/bounding-box.h" 1
 























 

typedef struct
{
  signed_4_bytes min_row, max_row;
  signed_4_bytes min_col, max_col;
} bounding_box_type;

typedef struct
{
  real min_row, max_row;
  real min_col, max_col;
} real_bounding_box_type;

 






 





 

extern const bounding_box_type dimensions_to_bb (dimensions_type);
extern const dimensions_type bb_to_dimensions (bounding_box_type);


 
extern void update_real_bounding_box (real_bounding_box_type *bb,
                                      real_coordinate_type p);
extern void update_bounding_box (bounding_box_type *bb, coordinate_type p);


# 25 ".././include/bzr.h" 2

# 1 ".././include/font.h" 1
 




















# 1 ".././include/bitmap.h" 1
 























# 1 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdio.h" 1 3

# 1 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdarg.h" 1 3
 







































 










 

# 85 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdarg.h" 3










# 137 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdarg.h" 3





# 2 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdio.h" 2 3

 



 
 
 





 







# 80 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdio.h" 3

# 25 ".././include/bitmap.h" 2





 





 
typedef struct
{
  dimensions_type dimensions;
  one_byte *bitmap;
} bitmap_type;

 


 



 



 


 







 


# 78 ".././include/bitmap.h"

 
 
extern bitmap_type new_bitmap (dimensions_type);

 
extern void free_bitmap (bitmap_type *);

 
extern bitmap_type copy_bitmap (bitmap_type bitmap);

 

extern bitmap_type extract_subbitmap (bitmap_type b, bounding_box_type bb);

 




extern const bounding_box_type bitmap_to_bb (const bitmap_type);

 




extern unsigned *bitmap_find_transitions (const one_byte *row, unsigned width);

 
extern void print_bounded_bitmap (struct _iobuf  *, bitmap_type, bounding_box_type);
extern void/gcc-lib/romp-aos/2.3.3/include/stdarg.h" 3





# 2 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdio.h" 2 3

 



 
 
 





 







# 80 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdio.h" 3

# 22 ".././include/spline.h" 2





 
typedef enum
{
  LINEAR = 1, QUADRATIC = 2, CUBIC = 3
} polynomial_degree;


 




typedef struct
{
  real_coordinate_type v[4];	 
  polynomial_degree degree;
  real linearity;
} spline_type;









 
extern spline_type new_spline (void);

 
extern void print_spline (struct _iobuf  *, spline_type);

 
extern real_coordinate_type evaluate_spline (spline_type spline, real t);



 

typedef struct
{
  spline_type *data;
  unsigned length;
} spline_list_type;

 


 


 


 



 







 
extern spline_list_type *new_spline_list (void);
extern spline_list_type *init_spline_list (spline_type);
extern void free_spline_list (spline_list_type *);

 
extern void append_spline (spline_list_type *s_list, spline_type s);

 
extern void concat_spline_lists (spline_list_type *s1, spline_list_type s2);



 

typedef struct
{
  spline_list_type *data;
  unsigned length;
} spline_list_array_type;

 






 
extern spline_list_array_type new_spline_list_array (void);
extern void free_spline_list_array (spline_list_array_type *);
extern void append_spline_list (spline_list_array_type *, spline_list_type);


# 27 ".././include/bzr.h" 2




 


extern boolean bzr_open_output_file (string filename);
extern boolean bzr_open_input_file (string filename);

 
extern void bzr_close_output_file (void);
extern void bzr_close_input_file (void);

 
typedef struct
{
  string comment;
  real design_size;
} bzr_preamble_type;

 



 



 
extern void bzr_put_preamble (bzr_preamble_type);

 




extern bzr_preamble_type bzr_get_preamble (void);

 

typedef struct
{
  charcode_type code;
  real set_width;
  real_bounding_box_type bb;
  spline_list_array_type shape;
} bzr_char_type;


 


 


 




 





 
extern void bzr_put_char (bzr_char_type);

 


extern bzr_char_type *bzr_get_next_char (void);

 


extern bzr_char_type *bzr_get_char (one_byte code);

 

typedef struct
{
  real_bounding_box_type font_bb;
  one_byte nchars;
} bzr_postamble_type;

 



 



 


extern void bzr_put_postamble (void);

 


extern bzr_postamble_type bzr_get_postamble (void);


# 21 "metafont.c" 2

# 1 ".././include/encoding.h" 1
 
























 


typedef struct
{
  string name;
  list_type ligature;
} encoding_char_type;

 


 
typedef struct
{
  string coding_scheme;
  encoding_char_type encoding_char[ 256 ];
} encoding_info_type;

 


 


 



 





 



 

extern int encoding_number (encoding_info_type e_i, string name);


 




extern string coding_scheme_to_filename (string codingscheme);


 


extern encoding_info_type read_encoding_file (string filename);


# 22 "metafont.c" 2

# 1 ".././include/filename.h" 1
 






















 




extern string find_pk_filename (string font_name, unsigned dpi);

 


extern string find_gf_filename (string font_name, unsigned dpi);

 


extern string find_tfm_filename (string font_name);


# 23 "metafont.c" 2




# 1 ".././include/vector.h" 1
 























 

typedef struct
{
  real dx, dy;
} vector_type;


 
extern const vector_type make_vector (const real_coordinate_type);

 
extern const real_coordinate_type vector_to_point (const vector_type);


 


extern const real magnitude (const vector_type);
extern const vector_type normalize (const vector_type);

extern const vector_type Vadd (const vector_type, const vector_type);
extern const real Vdot (const vector_type, const vector_type);
extern const vector_type Vmult_scalar (const vector_type, const real);
extern const real Vangle (const vector_type in, const vector_type out);

 


extern const real_coordinate_type Vadd_point
  (const real_coordinate_type, const vector_type);


extern const real_coordinate_type Vsubtract_point
  (const real_coordinate_type, const vector_type);

 

extern const coordinate_type Vadd_int_point
  (const coordinate_type, const vector_type);

 
extern const vector_type Vabs (const vector_type);



 


extern const vector_type Psubtract
  (const real_coordinate_type, const real_coordinate_type);

 












 

extern const vector_type IPsubtract
  (const coordinate_type, const coordinate_type);
extern const coordinate_type IPsubtractP
  (const coordinate_type, const coordinate_type);
extern const coordinate_type IPadd
  (const coordinate_type, const coordinate_type);
extern const coordinate_type IPmult_scalar (const coordinate_type, const int);
extern const real_coordinate_type IPmult_real
  (const coordinate_type, const real);
extern const boolean IPequal (const coordinate_type, const coordinate_type);


# 27 "metafont.c" 2


# 1 "char.h" 1
 





















# 1 "input-ccc.h" 1
 

























 
typedef struct
{
  real amount;
  boolean absolute;
  boolean valid;
} dimen_type;

 


 


 


 
typedef struct
{
  int opcode;
  boolean valid;
  union
  {
    charcode_type charcode;
    dimen_type dimen;
  } u;
} ccc_cmd_type;








 
typedef list_type ccc_cmd_list_type;

 
typedef ccc_cmd_list_type ccc_type;

 



typedef struct
{
  charcode_type code;
  string name;
} charname_type;

 


typedef struct
{
  int cap_height;
  int design_size;
  int em;
  int font_depth;
  int xheight;
} ccc_fontinfo_type;


 
extern struct _iobuf  *ccc_file;
extern string ccc_filename;
extern bzr_char_type **chars;
extern ccc_fontinfo_type ccc_fontinfo;
extern ccc_type *ccc_chars[];


 



extern ccc_type **parse_ccc_file
  (string name, bzr_char_type **chars, tfm_global_info_type *t,
   real design_size, boolean warn_p);


# 23 "char.h" 2


typedef enum { bzr_char_class, ccc_char_class } char_class_type;

typedef struct
{
  char_class_type tag;
  union
  {
    bzr_char_type *bzr_char;
    ccc_type *ccc_char;
  } u;
} char_type;






 
extern real oblique_angle;

 
extern spline_list_array_type oblique_splines (spline_list_array_type);


 

extern char_type **subr_chars (bzr_char_type *[], ccc_type *ccc_chars[],
                               charcode_type start, charcode_type end,
                               unsigned *subr_count);

 
extern void scale_char (bzr_char_type *, real scale_factor);


# 29 "metafont.c" 2


# 1 "main.h" 1
 























 
extern encoding_info_type encoding_info;

 
extern charcode_type starting_char;
extern charcode_type ending_char;

 

extern tfm_global_info_type *tfm_global_info;


# 31 "metafont.c" 2

# 1 "metafont.h" 1
 


























 
extern void metafont_start_output (string output_name, bzr_preamble_type, 
				   tfm_global_info_type *);

 
extern void metafont_output_bzr_subr (bzr_char_type);
extern void metafont_output_ccc_subr (ccc_type, charcode_type, char_type *[]);

 
extern void metafont_output_bzr_char (bzr_char_type, char_type *[]);
extern void metafont_output_ccc_char (ccc_type, charcode_type, char_type *[]);

 
extern void metafont_finish_output (list_type, char_type **);


# 32 "metafont.c" 2


# 1 "ccc.h" 1
typedef union
{
  int int_val;
  real real_val;
  dimen_type dimen_val;
  charname_type charname_val;
  ccc_cmd_type cmd_val;
  ccc_cmd_list_type *cmd_list_val;
} YYSTYPE;





















extern YYSTYPE yylval;
# 34 "metafont.c" 2



 
static struct _iobuf  *mf_file;
static string mf_filename;


 


















 



static string charcode_to_subr_name (charcode_type);
static void out_bb_char (real_bounding_box_type *,
                         real_coordinate_type *, bzr_char_type);
static void out_move (real_coordinate_type *, real, real, boolean);
static void output_bzr_body (bzr_char_type);
static real_bounding_box_type output_ccc_body (ccc_type, char_type *[]);
static void output_char_title (charcode_type);
static void output_ligtable (list_type, char_type **);
static void output_subr_start (charcode_type code);
static tfm_char_type **read_tfm_files (list_type);
static void read_tfm_file (tfm_char_type *[], string);

 


void
metafont_start_output (string output_name, bzr_preamble_type pre, 
		       tfm_global_info_type *info)
{
  unsigned this_param;
  string current_time = now ();

  mf_filename = extend_filename (output_name, "mf");
  mf_file = xfopen (mf_filename, "w");

   
  	  fprintf (mf_file, "%% This file defines the Metafont font %s.\n",  mf_filename) ;
  	  fprintf (mf_file, "%% {%s}\n",  ((pre).comment) ) ;
  	  fprintf (mf_file, "%% Generated %s.\n",  current_time) ;
       	  fprintf (mf_file, "%s\n",  "% This font is in the public domain.")  ;
  
   

  	  fprintf (mf_file, "true_design_size# := %.3fpt#;\n",  ((pre).design_size) ) ;
  
   
  	  fprintf (mf_file, "%s;\n",  "input bzrsetup")  ;

   
  	  fprintf (mf_file, "font_coding_scheme := \"%s\";\n", 
        ((encoding_info).coding_scheme) ) ;
  	  fprintf (mf_file, "font_identifier := \"%s\";\n",  output_name) ;

  if (info)
    for (this_param = 1; this_param <= ((*info).parameter_count) ;
         this_param++)
      if (((*info).parameters[( this_param) - 1])  != 0.0)
          fprintf (mf_file, "fontdimen %u: %.3fpt# * u#;\n",  this_param, 
              ((*info).parameters[( this_param) - 1]) ) ; 
}


 


static void
output_char_title (charcode_type code)
{
  string title = (((encoding_info).encoding_char[  code]) .name) ;
  
  if (title == 0 )
    title = concat ("character #", utoa (code));
    
  	  fprintf (mf_file, "  "  "\"%s\";\n",  title) ;
}

 






void
metafont_output_bzr_subr (bzr_char_type c)
{
  output_subr_start (((c).code) );
  output_bzr_body (c);
  	  fprintf (mf_file, "%s;\n",  "enddef")  ;
}


void
metafont_output_ccc_subr (ccc_type c, charcode_type code, char_type *subrs[])
{
  output_subr_start (code);
  output_ccc_body (c, subrs);
  	  fprintf (mf_file, "%s;\n",  "enddef")  ;
}


 



static void
output_subr_start (charcode_type code)
{
  	  fprintf (mf_file, "def %s = \n",  charcode_to_subr_name (code)) ;
  output_char_title (code);
}


 










static string
charcode_to_subr_name (charcode_type code)
{
  string subr_name;
  string name = (((encoding_info).encoding_char[  code]) .name) ;

  if (strspn (name, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
      != strlen (name))
    {
      unsigned high = code >> 4;
      unsigned low = code - (high << 4);
      char alpha[3] = { high + 'a', low + 'a', 0 };

      subr_name = concat ("bzr_subr_" , alpha);
    }
  else
    subr_name = concat ("bzr_subr_" , name);
  
  return subr_name;
}

 





void
metafont_output_bzr_char (bzr_char_type c, char_type *subrs[])
{
  unsigned code = ((c).code) ;
  
  fprintf (mf_file, "\nbeginchar (%d, %.3fu#, %.3fu#, %.3fu#);\n",  
        code,  ((c).set_width) ,  ((((c).bb) ).max_row)  ,  (((((c).bb) ).min_row)   < 0 ? -((((c).bb) ).min_row)   : 0) ) ;
  
  if (subrs[code])
    	  fprintf (mf_file, "  "  "%s;\n",  charcode_to_subr_name (code))  ;
  else
    {
      output_char_title (code);
      output_bzr_body (c);
    }
  
  	  fprintf (mf_file, "%s;\n",  "endchar")  ;
}


void
metafont_output_ccc_char (ccc_type c, charcode_type code, char_type *subrs[])
{
  real_bounding_box_type bb;
  
  if (subrs[code])
    do { fputs ("warning: ", (&_iob[2]) ) ; fprintf ((&_iob[2]) , "%s", "Sorry, CCC characters can't be subroutines yet"); fputs (".\n", (&_iob[2]) ); fflush ((&_iob[2]) ); } while (0)  ;
  else
    {
      	  fprintf (mf_file, "\nbegin_no_dimen_char (%d);\n",  code) ;

      output_char_title (code);
      bb = output_ccc_body (c, subrs);

       
        fprintf (mf_file, "  "  "set_char_dimens (%.3fu#, %.3fu#, %.3fu#);\n", 
            (((bb).max_col)  - ((bb).min_col) ) ,  ((bb).max_row) ,  -((bb).min_row) ) ;
      	  fprintf (mf_file, "%s;\n",  "end_no_dimen_char")  ;
    }
}

 

static void
output_bzr_body (bzr_char_type c)
{
  unsigned this_list;
  charcode_type code = ((c).code) ;
  spline_list_array_type shape = ((c).shape) ;
  boolean was_output = false;

   



  for (this_list = 0; this_list < ((shape).length) ;
       this_list++)
    {
      unsigned this_spline;
      spline_list_type list = (((shape).data) [ this_list]) ;

      if (((list).length)  == 0)
        continue;
        
      was_output = true;
      
      do {	  fprintf (mf_file, "  "  "z%u\\%u\\%us" " = ",   code,   this_list,   0) ;	  fprintf (mf_file, "(%.3fu,%.3fu)",  
                       (((((list).data) [ 0]) ).v[0]) .x,                         (((((list).data) [ 0]) ).v[0]) .y)  ;	   	  fprintf (mf_file, "%s",  ";\n")  ;	} while (0) ; 

      for (this_spline = 0; this_spline < ((list).length) ;
           this_spline++) 
        {
          spline_type s = (((list).data) [ this_spline]) ;

          if (((s).degree)  == CUBIC)
            {
              do {	  fprintf (mf_file, "  "  "z%u\\%u\\%uc1" " = ",   code,   this_list,  
			       this_spline) ;	  fprintf (mf_file, "(%.3fu,%.3fu)",   	((s).v[1]) .x,   	((s).v[1]) .y)  ;	   	  fprintf (mf_file, "%s",  ";\n")  ;	} while (0) ; 
              do {	  fprintf (mf_file, "  "  "z%u\\%u\\%uc2" " = ",   code,   this_list,  
			       this_spline) ;	  fprintf (mf_file, "(%.3fu,%.3fu)",   	((s).v[2]) .x,   	((s).v[2]) .y)  ;	   	  fprintf (mf_file, "%s",  ";\n")  ;	} while (0) ; 
            }

           

          if (this_spline < ((list).length)  - 1)
            do {	  fprintf (mf_file, "  "  "z%u\\%u\\%u" " = ",   code,   this_list,  
		             this_spline) ;	  fprintf (mf_file, "(%.3fu,%.3fu)",   	((s).v[3]) .x,   	((s).v[3]) .y)  ;	   	  fprintf (mf_file, "%s",  ";\n")  ;	} while (0) ;
        }
    }


   


  for (this_list = 0; this_list < ((shape).length) ;
       this_list++)
    {
      unsigned this_spline;
      spline_list_type list = (((shape).data) [ this_list]) ;

      if (((list).length)  == 0)
        continue;
        
        fprintf (mf_file, "  "  "fill_or_unfill z%u\\%u\\%us\n",  code,  this_list,  0) ;

      for (this_spline = 0; this_spline < ((list).length) ;
           this_spline++)
        {
          spline_type s = (((list).data) [ this_spline]) ;

          if (((s).degree)  == LINEAR)
               	  fprintf (mf_file, "%s",  "  "  "  "  "--")  ;
          else
            {
                 	  fprintf (mf_file, "%s",  "  "  "  "  "..controls ")  ;
                fprintf (mf_file, "z%u\\%u\\%uc1 and ",  code,  this_list,  this_spline) ;
                fprintf (mf_file, "z%u\\%u\\%uc2..",  code,  this_list,  this_spline) ;
            }
	  
          if (this_spline < ((list).length)  - 1)
              fprintf (mf_file, "z%u\\%u\\%u\n",  code,  this_list,  this_spline) ;
        }
        
         	  fprintf (mf_file, "%s",  "cycle;\n")  ;
    }
  
   




     
  if (was_output)
         	  fprintf (mf_file, "%s\n",  "  "  "proof_labels (")  ;
  
  for (this_list = 0; this_list < ((shape).length) ;
       this_list++)
    {
      unsigned this_spline;
      spline_list_type list = (((shape).data) [ this_list]) ;

      for (this_spline = 0; this_spline < ((list).length) ;
           this_spline++)
          fprintf (mf_file, "  "  "  "  "%u\\%u\\%u,\n",  code,  this_list,  this_spline) ;
    }

  if (was_output)
       	  fprintf (mf_file, "%s",  ");\n")  ;
}


 





static real_bounding_box_type
output_ccc_body (ccc_type ccc_char, char_type *subrs[])
{
  unsigned this_cmd;
  real_coordinate_type current = (real_coordinate_type) { 0.0, 0.0 };
  real_bounding_box_type bb
    = (real_bounding_box_type) { 3.40282347e+38F , 1.17549435e-38F , 3.40282347e+38F , 1.17549435e-38F  };

  for (this_cmd = 0; this_cmd < ((ccc_char).size) ; this_cmd++)
    { 
      ccc_cmd_type cmd = *(ccc_cmd_type *) ((ccc_char).list) [ this_cmd] ;
      
      switch (((cmd).opcode) )
        {
        case 260 :
          {
            char_type subr = *subrs[((cmd).u.charcode) ];

            if (((subr).tag)  == bzr_char_class)
              {
                bzr_char_type bzr_char = *((subr).u.bzr_char) ;
                
                update_real_bounding_box (&bb, current);
                out_move (&current, ((((bzr_char).bb) ).min_col)  , 0.0,  false) ;

                out_bb_char (&bb, &current, bzr_char);

                out_move (&current, (((bzr_char).set_width)  - ((((bzr_char).bb) ).max_col)  ) , 0.0,  false) ;
                update_real_bounding_box (&bb, current);
              }
            else
               




              do { fputs ("warning: ", (&_iob[2]) ) ; fprintf ((&_iob[2]) , "%s", "Sorry, I can't `setchar' a CCC char yet"); fputs (".\n", (&_iob[2]) ); fflush ((&_iob[2]) ); } while (0)  ;
          }
          break;

        case 261 :
          {
            char_type subr = *subrs[((cmd).u.charcode) ];

            if (((subr).tag)  == bzr_char_class)
              out_bb_char (&bb, &current, *((subr).u.bzr_char) );
            else
              do { fputs ("warning: ", (&_iob[2]) ) ; fprintf ((&_iob[2]) , "%s", "Sorry, I can't `setcharbb' a CCC char yet"); fputs (".\n", (&_iob[2]) ); fflush ((&_iob[2]) ); } while (0)  ;
          }
          break;

        case 262 :
          out_move (&current, (((cmd).u.dimen).amount)  , 0.0,  (((cmd).u.dimen).absolute)  ) ;
          break;

        case 263 :
          out_move (&current, 0.0, (((cmd).u.dimen).amount)  ,  (((cmd).u.dimen).absolute)  ) ;
          break;

        default:
          do { fputs ("fatal: ", (&_iob[2]) ) ; fprintf ((&_iob[2]) , "Bad command %d in CCC character",  ((cmd).opcode) ); fputs (".\n", (&_iob[2]) ); exit (1); } while (0)  ;
	}
    }
  
  return bb;
}


 


static void
out_move (real_coordinate_type *current, real h, real v, boolean absolute)
{
  string units = absolute ? "pt" : "u";
  
  fprintf (mf_file, "  "  "move (%.3f%s, %.3f%s);\n",  (real) h,  units,  (real) v,  units) ;
  current->x += h;
  current->y += v;
}


 








static void
out_bb_char (real_bounding_box_type *bb, real_coordinate_type *current,
             bzr_char_type bzr_char)
{
   
  update_real_bounding_box (bb, ((real_coordinate_type) { current->x, current->y + (((((bzr_char).bb) ).min_row)  ) }) );

   
  	  fprintf (mf_file, "  "  "%s;\n",  charcode_to_subr_name (((bzr_char).code) ))  ;
  
   
  out_move (current, (((((bzr_char).bb) ).max_col)  - ((((bzr_char).bb) ).min_col) ) , 0, false);

   
  update_real_bounding_box (bb, ((real_coordinate_type) { current->x, current->y + (((((bzr_char).bb) ).max_row)  ) }) );
}

 



void
metafont_finish_output (list_type bzr_names, char_type **chars)
{
  output_ligtable (bzr_names, chars);
  
       	  fprintf (mf_file, "%s\n",  "\nbye.")  ;
  xfclose (mf_file, mf_filename);
}


 



 










 


static void
output_ligtable (list_type bzr_names, char_type **chars)
{
  unsigned code;
  tfm_char_type **tfm_chars = read_tfm_files (bzr_names);
  
  for (code = starting_char; code <= ending_char; code++)
    {
      list_type kern_list, ligature_list;
      unsigned this_kern, this_lig;
      tfm_char_type *c;
      boolean output_something = false;
      
       
      if (!(tfm_chars[code] != 0 ) )
        continue;

      c = tfm_chars[code];

       
      kern_list = c->kern;
      for (this_kern = 0; this_kern < ((kern_list).size) ; this_kern++)
        {
          tfm_kern_type *kern = ((kern_list).list) [ this_kern] ;

          if ((tfm_chars[kern->character] != 0 ) )
            {
              if (output_something)	     	  fprintf (mf_file, "%s\n",  ",")  ;	else	{	output_something = true;		  fprintf (mf_file, "ligtable hex\"%x\":\n",  code) ;	} ;
                fprintf (mf_file, "hex\"%x\" kern %.3fpt#",  kern->character,  kern->kern) ;
            }
        }
      
       
      ligature_list = c->ligature;
      for (this_lig = 0; this_lig < ((ligature_list).size) ; this_lig++)
        {
          tfm_ligature_type *lig = ((ligature_list).list) [ this_lig] ;

          if ((tfm_chars[lig->character] != 0 )  && (tfm_chars[lig->ligature] != 0 ) )
          {
  	    if (output_something)	     	  fprintf (mf_file, "%s\n",  ",")  ;	else	{	output_something = true;		  fprintf (mf_file, "ligtable hex\"%x\":\n",  code) ;	} ;
              fprintf (mf_file, "hex\"%x\" =: hex\"%x\"",  lig->character,  lig->ligature) ;
          }
        }

      if (output_something)
             	  fprintf (mf_file, "%s\n",  ";")  ;
    }
}


 





static tfm_char_type **
read_tfm_files (list_type bzr_names)
{
  unsigned c, name;
  tfm_char_type **tfm_chars = ( tfm_char_type * *) xmalloc ((255  + 1) * sizeof ( tfm_char_type *)) ;
  
   
  for (c = 0; c <= 255 ; c++)
    tfm_chars[c] = 0 ;

   
  for (name = 0; name < ((bzr_names).size) ; name++)
    {
      string *bzr_name = ((bzr_names).list) [ name] ;
      
      read_tfm_file (tfm_chars, *bzr_name);
    }

  return tfm_chars;
}


 





static void
read_tfm_file (tfm_char_type *tfm_chars[], string bzr_name)
{
  string tfm_root = make_suffix (bzr_name, "tfm");
  string tfm_name = find_tfm_filename (tfm_root);

  if (tfm_name != 0  && tfm_open_input_file (tfm_name))
    {
      unsigned code;
      tfm_char_type *file_chars = tfm_get_chars ();
      
      for (code = 0; code <= 255 ; code++)
        {
          if (tfm_chars[code] == 0  && ((file_chars[code]).exists) )
            {
              tfm_chars[code] = ( tfm_char_type *) xmalloc ((1) * sizeof ( tfm_char_type))  ;
              *tfm_chars[code] = file_chars[code];
            }
        }

      free (file_chars);
      tfm_close_input_file ();
    }
}

    that uses <underscore><backspace><letter> to represent a bold
    <letter>

Ah yes.  I remember running into this when I looked at spiff before.  I
couldn't find any way to turn off this silly ``feature'', and I didn't
want to use spiff if it was going to mess up the output like that.  I
think that would be even harder to deal with than the unimportant diffs
that come out now!

At this point, I suppose the only solution would be to write some sed
command to strip out the garbage, as even if an improved spiff came out,
people might well have the old version.

    spiff -r5e-8 TeXtrip/trip.log trip.log
    warning -- to many tokens in file only first 50000 tokens will be used.
    parser got confused at end of file
    warning -- to many tokens in file only first 50000 tokens will be used.
    parser got confused at end of file

This doesn't look good -- it's not spiff'ing the entire file?

In any case, I think spiff could be useful for TeX, but I don't know
about Metafont.  There shouldn't be any numeric differences in the
Metafont output anyway.  At least I've never seen any.


Man pages: I picked up your man pages on Thursday.  They look vastly
improved.  Thanks much for doing this.  I changed the README trivially
(there's no site.h any more), incorporated the Makefile changes, and of
course, updated your man pages with the various changes I've made since
5.851c -- one general change was I took out punctuation following all
the ``system default'' paths.  I thought they could be taken too easily
for an element of the path.

Incidentally, I mentioned math.utah.edu:pub/tex/bib in the man page for
BibTeX.  OK?

You can get my revised versions in ftp.cs.umb.edu:private/web2c.tar.Z.
It would be great if you could retrieve them so I can more easily
install any future updates you make ...


internal compiler error on the following file.  Only option is -g.

# 1 "display.c"
 

















# 1 ".././include/config.h" 1
 





















 
# 1 ".././include/c-auto.h" 1
 
 

 


 


 


 


 


 


 


 


 


 


 


 


 


 

# 24 ".././include/config.h" 2


 



 
# 1 ".././include/c-std.h" 1
 




















 


# 1 "/usr/include/math.h" 1 3
 



 
 
 





 

extern double asinh(), acosh(), atanh();
extern double erf(), erfc();
extern double fabs(), floor(), ceil(); 
extern double modf(), ldexp(), frexp(), atof();
extern double sqrt(), cbrt();
extern double sin(), cos(), tan(), asin(), acos(), atan(), atan2();
extern double expm1(), log1p(), exp(), log(), log10(), pow();
extern double sinh(), cosh(), tanh();
extern double hypot(), cabs(), lgamma();
extern double j0(), j1(), jn(), y0(), y1(), yn();






# 25 ".././include/c-std.h" 2

# 1 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdio.h" 1 3

# 1 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdarg.h" 1 3
 







































 






typedef void *__gnuc_va_list;



 

# 85 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdarg.h" 3










# 137 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdarg.h" 3





# 2 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/stdio.h" 2 3

 



 
 
 





 









extern	struct	_iobuf {
	int	_cnt;
	char	*_ptr;		 
	char	*_base;		 
	int	_bufsiz;
	short	_flag;
	char	_file;		 
} _iob[];










		


























struct _iobuf 	*fopen();
struct _iobuf 	*fdopen();
struct _iobuf 	*freopen();
struct _iobuf 	*popen();
long	ftell();
char	*fgets();
char	*gets();




# 26 ".././include/c-std.h" 2


 
# 1 "/usr/local/gnu/lib/gcc-lib/romp-aos/2.3.3/include/sys/types.h" 1 3
 



 
 
 








 







 



 


 


 


typedef	unsigned char	u_char;
typedef	unsigned short	u_short;
typedef

Newsgroups: gnu.gcc.bug