home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / gnu / gcc / bug / 2683 < prev    next >
Encoding:
Text File  |  1992-11-09  |  17.9 KB  |  506 lines

  1. Newsgroups: gnu.gcc.bug
  2. Path: sparky!uunet!stanford.edu!agate!spool.mu.edu!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!cs.wisc.edu!tim
  3. From: tim@cs.wisc.edu (Tim Theisen)
  4. Subject: Internal compiler error for gcc-2.3.1 on romp-ibm-aos.
  5. Message-ID: <9211091622.AA09962@appenzell.cs.wisc.edu>
  6. Sender: gnulists@ai.mit.edu
  7. Organization: University of Wisconsin-Madison, Department of Computer Sciences
  8. Distribution: gnu
  9. Date: Mon, 9 Nov 1992 04:22:35 GMT
  10. Approved: bug-gcc@prep.ai.mit.edu
  11. Lines: 493
  12.  
  13. The following input causes an internal compiler error when compiled at
  14. optimization level 2 or 3 with gcc-2.3.1 on an IBM RT running BSD 4.3.
  15. Reducing to optimization level 1 allows it to be compiled.
  16.  
  17. Here is the invocation:
  18.  
  19. $ gcc -v -O2 -c zht.c
  20. Reading specs from /usr/gnu/lib/gcc-lib/romp-ibm-aos/2.3.1/specs
  21. gcc version 2.3.1
  22.  /usr/gnu/lib/gcc-lib/romp-ibm-aos/2.3.1/cpp -lang-c -v -undef -D__GNUC__=2 -Dibm032 -Dunix -D__ibm032__ -D__unix__ -D__ibm032 -D__unix -D__CHAR_UNSIGNED__ -D__OPTIMIZE__ zht.c /usr/tmp/cc009938.i
  23. GNU CPP version 2.3.1
  24.  /usr/gnu/lib/gcc-lib/romp-ibm-aos/2.3.1/cc1 /usr/tmp/cc009938.i -quiet -dumpbase zht.c -O2 -version -o /usr/tmp/cc009938.s
  25. GNU C version 2.3.1 compiled by GNU C version 2.3.1.
  26. zht.c: In function `screen_sample':
  27. zht.c:441: internal error--unrecognizable insn:
  28. (insn 238 74 59 (reg:SI 6 r6) -1 (nil)
  29.    (nil))
  30. gcc: Internal compiler error: program cc1 got fatal signal 5
  31.  
  32. Here is the input:
  33. ------------------8<----------------zht.c----------------------------
  34. extern    struct    _iobuf {
  35.     int    _cnt;
  36.     char    *_ptr;         
  37.     char    *_base;         
  38.     int    _bufsiz;
  39.     short    _flag;
  40.     char    _file;         
  41. } _iob[];
  42. typedef unsigned long size_t;
  43. typedef char *va_list;
  44. struct _iobuf     *fopen(const char *filename, const char *type);
  45. struct _iobuf     *freopen(const char *filename, const char *type, struct _iobuf  *stream);
  46. struct _iobuf     *fdopen(int fildes, const char *type);
  47. struct _iobuf     *popen(const char *command, const char *type);
  48. int    pclose(struct _iobuf  *stream);
  49. int    fflush(struct _iobuf  *stream);
  50. int    fclose(struct _iobuf  *stream);
  51. int    remove(const char *path);
  52. int    rename(const char *from, const char *to);
  53. struct _iobuf     *tmpfile(void);
  54. char    *tmpnam(char *s);
  55. int    setvbuf(struct _iobuf  *iop, char *buf, int type, size_t size);
  56. int    setbuf(struct _iobuf  *stream, char *buf);
  57. int    setbuffer(struct _iobuf  *stream, char *buf, size_t size);
  58. int    setlinebuf(struct _iobuf  *stream);
  59. int    fprintf(struct _iobuf  *stream, const char *format, ...);
  60. int    printf(const char *format, ...);
  61. char    *sprintf(char *s, const char *format, ...);
  62. int    vfprintf(struct _iobuf  *stream, const char *format, va_list arg);
  63. int    vprintf(const char *format, va_list arg);
  64. int    vsprintf(char *s, const char *format, va_list arg);
  65. int    fscanf(struct _iobuf  *stream, const char *format, ...);
  66. int    scanf(const char *format, ...);
  67. int    sscanf(const char *s, const char *format, ...);
  68. int    fgetc(struct _iobuf  *stream);
  69. int    getw(struct _iobuf  *stream);
  70. char    *fgets(char *s, int n, struct _iobuf  *stream);
  71. char    *gets(char *s);
  72. int    fputc(int c, struct _iobuf  *stream);
  73. int    putw(int w, struct _iobuf  *stream);
  74. int    fputs(const char *s, struct _iobuf  *stream);
  75. int    puts(const char *s);
  76. int    ungetc(int c, struct _iobuf  *stream);
  77. int    fread(void *ptr, size_t size, size_t count, struct _iobuf  *iop);
  78. int    fwrite(const void *ptr, size_t size, size_t count, struct _iobuf  *iop);
  79. int    fseek(struct _iobuf  *stream, long offset, int ptrname);
  80. long    ftell(struct _iobuf  *stream);
  81. void rewind(struct _iobuf  *stream);
  82. int    fgetpos(struct _iobuf  *stream, long *pos);
  83. int    fsetpos(struct _iobuf  *stream, const long *pos);
  84. void perror(const char *s);
  85. typedef unsigned char byte;
  86. typedef unsigned char uchar;
  87. typedef unsigned short ushort;
  88. typedef unsigned int uint;
  89. typedef unsigned long ulong;
  90. typedef    unsigned char    u_char;
  91. typedef    unsigned short    u_short;
  92. typedef    unsigned int    u_int;
  93. typedef    unsigned long    u_long;
  94. typedef    unsigned short    ushort_ ;         
  95. typedef    struct    _physadr { int r[1]; } *physadr;
  96. typedef    struct    label_t    {
  97.     int    val[11];
  98. } label_t;
  99. typedef    struct    _quad { long val[2]; } quad;
  100. typedef    long    daddr_t;
  101. typedef    char *    caddr_t;
  102. typedef    u_long    ino_t;
  103. typedef    long    swblk_t;
  104. typedef    long    time_t;
  105. typedef    short    dev_t;
  106. typedef    long    off_t;
  107. typedef    u_short    uid_t;
  108. typedef    u_short    gid_t;
  109. typedef signed char prio_t;     
  110. typedef long    fd_mask;
  111. typedef    struct fd_set {
  112.     fd_mask    fds_bits[(((256 )+(( (sizeof(fd_mask) * 8        )    )-1))/( (sizeof(fd_mask) * 8        )    )) ];
  113. } fd_set;
  114. typedef struct qhdr {
  115.     struct qhdr *link, *rlink;
  116. } *queue_t;
  117. typedef char *ptr_ord_t;
  118. typedef double floatp;
  119. typedef char *(*proc_alloc_t)(unsigned num_elements, unsigned element_size, const char *client_name );
  120. typedef void (*proc_free_t)(char *data, unsigned num_elements, unsigned element_size, const char *client_name );
  121. extern struct _iobuf  *gs_out;
  122. typedef struct gs_point_s {
  123.     double x, y;
  124. } gs_point;
  125. typedef struct gs_int_point_s {
  126.     int x, y;
  127. } gs_int_point;
  128. typedef struct gs_rect_s {
  129.     gs_point p, q;             
  130. } gs_rect;
  131. typedef struct gs_int_rect_s {
  132.     gs_int_point p, q;
  133. } gs_int_rect;
  134. typedef struct gs_state_s gs_state;
  135. typedef struct {
  136.     proc_alloc_t alloc;
  137.     proc_free_t free;
  138. } gs_memory_procs;
  139. char *gs_malloc(uint, uint, const char * );
  140. void gs_free(char *, uint, uint, const char * );
  141. extern char gs_debug[128];
  142. extern int gs_log_error(int, const char   *, int );
  143. typedef struct ref_s ref;
  144. typedef enum {
  145.     t_array,             
  146.     t_boolean,             
  147.     t_condition,             
  148.     t_dictionary,             
  149.     t_file,                 
  150.     t_fontID,             
  151.     t_gstate,             
  152.     t_integer,             
  153.     t_lock,                 
  154.     t_mark,                 
  155.     t_name,                 
  156.     t_null,                 
  157.     t_operator,             
  158.     t_real,                 
  159.     t_save,                 
  160.     t_string,             
  161.     t_mixedarray,             
  162.     t_shortarray,             
  163.     t_color,             
  164.     t_device,             
  165.     t_oparray,             
  166.     t_next_index         
  167. } ref_type;
  168.                      
  169.                      
  170. typedef struct dict_s dict;
  171. typedef struct name_s name;
  172. typedef int (*dummy_op_proc_p)();
  173. struct stream_s;
  174. struct gs_font_s;
  175. struct gs_color_s;
  176. struct gs_condition_s;
  177. struct gs_lock_s;
  178. struct gx_device_s;
  179. struct gstate_obj_s;
  180. struct vm_save_s;
  181. struct tas_s {
  182.     ushort type_attrs;
  183.     ushort rsize;
  184. };
  185. struct ref_s {
  186.     struct tas_s tas;
  187.     union v {             
  188.         long intval;
  189.         ushort index;         
  190.         float realval;
  191.         byte *bytes;
  192.         struct ref_s *refs;
  193.         name *pname;
  194.         dict *pdict;
  195.         ushort *packed;
  196.         dummy_op_proc_p opproc;
  197.         struct stream_s *pfile;
  198.         struct gs_font_s *pfont;
  199.         struct gs_color_s *pcolor;
  200.         struct gs_condition_s *pcond;
  201.         struct gs_lock_s *plock;
  202.         struct gx_device_s *pdevice;
  203.         struct gstate_obj_s *pgstate;
  204.         struct vm_save_s *psave;
  205.     } value;
  206. };
  207. void *memccpy(void *t, const void *f, int c, size_t n);
  208. void *memchr(const void *s, int c, size_t n);
  209. int memcmp(const void *s1, const void *s2, size_t n);
  210. void *memcpy(void *t, const void *f, size_t n);
  211. void *memset(void *s, int c, size_t n);
  212. extern void memswab(const char *src, char *dest, int count);
  213. extern void memflip8x8(const byte *inp, int line_size, byte *outp, int dist);
  214. extern const char   *gs_error_names[];
  215.          
  216.          
  217. typedef ref   *os_ptr;
  218. extern os_ptr osbot, osp, ostop;
  219. typedef int (*op_proc_p)(os_ptr );
  220. typedef struct {
  221.     const char   *oname;
  222.     op_proc_p proc;
  223.     int   *oindex;
  224. } op_def;
  225. typedef op_def const   *op_def_ptr;
  226. extern op_def_ptr *op_def_table;
  227. extern uint op_def_count;
  228. extern ref op_array_table;         
  229. extern ushort *op_array_nx_table;
  230. extern uint op_array_count;
  231. extern int bytes_compare(const byte *, uint, const byte *, uint );
  232. extern int string_match(const byte *str, uint len, const byte *pstr, uint plen, int ignore_case );
  233. extern uint string_hash(const byte *, uint );
  234. struct gs_prop_item_s;
  235. extern int props_extract(
  236.     struct gs_prop_item_s *plist,    
  237.     int count,
  238.     const struct gs_prop_item_s *template, 
  239.                     
  240.     int tcount,
  241.     struct gs_prop_item_s **pknown,    
  242.                     
  243.                     
  244.                     
  245.     int finished            
  246.                     
  247.  );
  248. extern void refcpy_to_new(ref *to, const ref *from, uint size );
  249. extern void refcpy_to_old(ref *to, const ref *from, uint size, const char *client_name );
  250. extern void refset_null(ref *to, uint size );
  251. extern int obj_eq(const ref *, const ref * );
  252. extern int obj_cvs(const ref *, byte *, uint, uint * );
  253. extern int string_to_ref(const char *, ref *, const char * );
  254. extern char *ref_to_string(const ref *, const char * );
  255. extern int num_params(const ref *, int, float * );
  256. extern int real_param(const ref *, float * );
  257. struct gs_matrix_s;
  258. extern int read_matrix(const ref *, struct gs_matrix_s * );
  259. extern int write_matrix(ref * );
  260. typedef struct {
  261.     const char   *vname;
  262.     ref   *pvref;
  263. } names_def;
  264. extern void init_names(const names_def   * );
  265. extern os_ptr osp_nargs[6 ];
  266. void    alloc_init(proc_alloc_t, proc_free_t, uint );
  267. char    *alloc(uint num_elts, uint elt_size, const char *client_name );
  268. void    alloc_free(char *data, uint num_elts, uint elt_size, const char *client_name );
  269. void    alloc_status(long *, long * );
  270. byte    *alloc_grow(byte *data, uint old_num, uint new_num, uint elt_size, const char *client_name );
  271. byte    *alloc_shrink(byte *data, uint old_num, uint new_num, uint elt_size, const char *client_name );
  272. typedef ref   *es_ptr;
  273. extern es_ptr esbot, esp, estop;
  274. extern es_ptr esfile;
  275. typedef struct gs_matrix_s {
  276.     long _xx  ; float xx;    long _xy  ; float xy;    long _yx  ; float yx;    long _yy  ; float yy;    long _tx  ; float tx;    long _ty  ; float ty ;
  277. } gs_matrix;
  278. void    gs_make_identity(gs_matrix * );
  279. int    gs_make_translation(floatp, floatp, gs_matrix * ),
  280.     gs_make_scaling(floatp, floatp, gs_matrix * ),
  281.     gs_make_rotation(floatp, gs_matrix * );
  282. int    gs_matrix_multiply(const gs_matrix *, const gs_matrix *, gs_matrix * ),
  283.     gs_matrix_invert(const gs_matrix *, gs_matrix * ),
  284.     gs_matrix_rotate(const gs_matrix *, floatp, gs_matrix * );
  285. int    gs_point_transform(floatp, floatp, const gs_matrix *, gs_point * ),
  286.     gs_point_transform_inverse(floatp, floatp, const gs_matrix *, gs_point * ),
  287.     gs_distance_transform(floatp, floatp, const gs_matrix *, gs_point * ),
  288.     gs_distance_transform_inverse(floatp, floatp, const gs_matrix *, gs_point * ),
  289.     gs_bbox_transform_inverse(gs_rect *, gs_matrix *, gs_rect * );
  290.       
  291. typedef enum {
  292.     gs_cap_butt = 0,
  293.     gs_cap_round = 1,
  294.     gs_cap_square = 2
  295. } gs_line_cap;
  296. typedef enum {
  297.     gs_join_miter = 0,
  298.     gs_join_round = 1,
  299.     gs_join_bevel = 2
  300. } gs_line_join;
  301. gs_state *gs_state_alloc(proc_alloc_t, proc_free_t );  
  302. int    gs_state_free(gs_state * );
  303. int    gs_gsave(gs_state * ),
  304.     gs_grestore(gs_state * ),
  305.     gs_grestoreall(gs_state * );
  306. gs_state *gs_gstate(gs_state * );
  307. int    gs_currentgstate(gs_state * , const gs_state *  ),
  308.     gs_setgstate(gs_state * , const gs_state *  );
  309. gs_state *gs_state_swap_saved(gs_state *, gs_state * );     
  310. void    gs_state_swap(gs_state *, gs_state * );     
  311. int    gs_initgraphics(gs_state * );
  312. typedef struct gx_device_s gx_device;
  313. int    gs_flushpage(gs_state * );
  314. int    gs_copypage(gs_state * );
  315. int    gs_output_page(gs_state *, int, int );
  316. int    gs_copyscanlines(gx_device *, int, byte *, uint, int *, uint * );
  317. gx_device *    gs_getdevice(int );
  318. int    gs_copydevice(gx_device **, gx_device *, proc_alloc_t );
  319. int    gs_makeimagedevice(gx_device **, gs_matrix *, uint, uint, byte *, int, proc_alloc_t );
  320. void    gs_nulldevice(gs_state * );
  321. int    gs_setdevice(gs_state *, gx_device * );
  322. gx_device *    gs_currentdevice(gs_state * );
  323. const char *    gs_devicename(gx_device * );
  324. void    gs_deviceinitialmatrix(gx_device *, gs_matrix * );
  325. int    gs_closedevice(gx_device * );
  326. int    gs_setlinewidth(gs_state *, floatp );
  327. float    gs_currentlinewidth(const gs_state * );
  328. int    gs_setlinecap(gs_state *, gs_line_cap );
  329. gs_line_cap    gs_currentlinecap(const gs_state * );
  330. int    gs_setlinejoin(gs_state *, gs_line_join );
  331. gs_line_join    gs_currentlinejoin(const gs_state * );
  332. int    gs_setmiterlimit(gs_state *, floatp );
  333. float    gs_currentmiterlimit(const gs_state * );
  334. int    gs_setdash(gs_state *, const float *, uint, floatp );
  335. uint    gs_currentdash_length(const gs_state * );
  336. int    gs_currentdash_pattern(const gs_state *, float * );
  337. float    gs_currentdash_offset(const gs_state * );
  338. int    gs_setflat(gs_state *, floatp );
  339. float    gs_currentflat(const gs_state * );
  340. int    gs_setstrokeadjust(gs_state *, int );
  341. int    gs_currentstrokeadjust(const gs_state * );
  342. typedef enum {
  343.     gs_color_space_DeviceGray = 0,
  344.     gs_color_space_DeviceRGB,
  345.     gs_color_space_DeviceCMYK     
  346. } gs_color_space;
  347. typedef struct gs_color_s gs_color;
  348. extern const uint gs_color_sizeof;
  349. int    gs_setgray(gs_state *, floatp );
  350. float    gs_currentgray(gs_state * );
  351. int    gs_sethsbcolor(gs_state *, floatp, floatp, floatp ),
  352.     gs_currenthsbcolor(gs_state *, float [3] ),
  353.     gs_setrgbcolor(gs_state *, floatp, floatp, floatp ),
  354.     gs_currentrgbcolor(gs_state *, float [3] );
  355. int    gs_currentcolorspace(gs_state *, gs_color_space * );
  356. typedef float (*gs_transfer_proc)(gs_state *, floatp );
  357. int    gs_settransfer(gs_state *, gs_transfer_proc ),
  358.     gs_settransfer_remap(gs_state *, gs_transfer_proc, int );
  359. gs_transfer_proc    gs_currenttransfer(gs_state * );
  360. int    gs_setcolortransfer(gs_state *, gs_transfer_proc ,
  361.             gs_transfer_proc , gs_transfer_proc ,
  362.             gs_transfer_proc  ),
  363.     gs_setcolortransfer_remap(gs_state *, gs_transfer_proc ,
  364.             gs_transfer_proc , gs_transfer_proc ,
  365.             gs_transfer_proc , int );
  366. void    gs_currentcolortransfer(gs_state *, gs_transfer_proc [4] );
  367. int    gs_setscreen(gs_state *, floatp, floatp, float (*)(floatp, floatp ) );
  368. int    gs_currentscreen(gs_state *, float *, float *, float (**)(floatp, floatp ) );
  369. int    gs_sethalftonephase(gs_state *, int, int );
  370. int    gs_currenthalftonephase(gs_state *, gs_int_point * );
  371. typedef struct gs_screen_enum_s gs_screen_enum;
  372. extern const uint gs_screen_enum_sizeof;
  373. int    gs_screen_init(gs_screen_enum *, gs_state *, floatp, floatp );
  374. int    gs_screen_currentpoint(gs_screen_enum *, gs_point * );
  375. int    gs_screen_next(gs_screen_enum *, floatp );
  376. typedef struct int_gstate_s int_gstate;
  377. struct int_gstate_s {
  378.          
  379.     ref screen_proc;         
  380.     struct {
  381.         ref red, green, blue, gray;     
  382.     } transfer_procs;
  383.     ref font;             
  384.     int_gstate *saved;         
  385. };
  386. extern int_gstate istate;
  387. extern gs_state *igs;
  388.      
  389.      
  390. extern int alloc_save_new_mask;         
  391. extern int alloc_save_test_mask;     
  392. extern int alloc_save_change(ref *ptr, const char *client_name );
  393. extern ref *alloc_refs(uint num_refs, const char *client_name );
  394. static  int screen_sample(os_ptr );
  395. static  int set_screen_continue(os_ptr );
  396. static  int i_set_screen_continue;
  397. int
  398. zcurrenthalftonephase(register os_ptr op)
  399. {    gs_int_point phase;
  400.     gs_currenthalftonephase(igs, &phase);
  401.     if ( (osp = op += (2)) > ostop ) return (osp -= (2), (-16) ) ;
  402.     ((op - 1)->value. intval = (  phase.x), ((op - 1)->tas.type_attrs = ((  t_integer) << 7 ) + ( 0)) )   ;
  403.     ((op)->value. intval = (  phase.y), ((op)->tas.type_attrs = ((  t_integer) << 7 ) + ( 0)) )   ;
  404.     return 0;
  405. }
  406. int
  407. zcurrentscreen(register os_ptr op)
  408. {    float freq, angle;
  409.     float (*proc)(floatp, floatp );
  410.     gs_currentscreen(igs, &freq, &angle, &proc);
  411.     if ( (osp = op += (3)) > ostop ) return (osp -= (3), (-16) ) ;
  412.     ((op - 2)->value. realval = (  freq), ((op - 2)->tas.type_attrs = ((  t_real) << 7 ) + ( 0)) )   ;
  413.     ((op - 1)->value. realval = (  angle), ((op - 1)->tas.type_attrs = ((  t_real) << 7 ) + ( 0)) )   ;
  414.     *op = istate.screen_proc;
  415.     return 0;
  416. }
  417. int
  418. zsethalftonephase(register os_ptr op)
  419. {    int code;
  420.     long x, y;
  421.     if ( !(((&op[-1])->tas.type_attrs & ((((1 << 6 ) - 1) << 7 ) + (0))) == ((( t_integer) << 7 ) + (0)))      ) return (-20)  ;
  422.     if ( !(((&*op)->tas.type_attrs & ((((1 << 6 ) - 1) << 7 ) + (0))) == ((( t_integer) << 7 ) + (0)))      ) return (-20)  ;
  423.     x = op[-1].value.intval;
  424.     y = op->value.intval;
  425.     if ( x != (int)x || y != (int)y )
  426.         return (-15) ;
  427.     code = gs_sethalftonephase(igs, (int)x, (int)y);
  428.     if ( code >= 0 ) (osp -= (2)) ;
  429.     return code;
  430. }
  431. int
  432. zsetscreen(register os_ptr op)
  433. {    float fa[2];
  434.     int code = num_params(op - 1, 2, fa);
  435.     gs_screen_enum *penum;
  436.     if ( code < 0 ) return code;
  437.     switch ( (((&*op)->tas.type_attrs) >> (7  - 2))   ) { default:    return(!(~((&*op)->tas.type_attrs)     & ( 0x20  + 0x40 ))  ? (-20)  :    (-7) ); case ((((t_array) << 7 ) + ( 0x20  + 0x40 )) >> (7  - 2))  : case ((((t_mixedarray) << 7 ) + ( 0x20  + 0x40 )) >> (7  - 2))  : case ((((t_shortarray) << 7 ) + ( 0x20  + 0x40 )) >> (7  - 2))  : ; } ;
  438.     penum = (gs_screen_enum *)alloc(1, gs_screen_enum_sizeof, "setscreen");
  439.     if ( penum == 0 ) return (-25) ;
  440.     code = gs_screen_init(penum, igs, fa[0], fa[1]);
  441.     if ( code < 0 )
  442.        {    alloc_free((char *)penum, 1, gs_screen_enum_sizeof, "setscreen");
  443.         return code;
  444.        }
  445.      
  446.     if ( esp + (3 ) > estop ) return (-5)  ;
  447.     (++esp, ((esp)->value. index = (  0            ), ((esp)->tas.type_attrs = ((  t_null) << 7 ) + (  0x40 )) )  ) ;
  448.     *++esp = *op;             
  449.     ++esp;
  450.     (((esp)->value. bytes = ( (byte *)penum), ((esp)->tas.type_attrs = ((  t_string) << 7 ) + (  0)) ) , ((esp)->tas.rsize = (  gs_screen_enum_sizeof)) ) ;
  451.     (osp -= (3)) ;  op -= 3;
  452.     return screen_sample(op);
  453. }
  454. static  int
  455. screen_sample(register os_ptr op)
  456. {    gs_screen_enum *penum = (gs_screen_enum *)esp->value.bytes ;
  457.     gs_point pt;
  458.     int code = gs_screen_currentpoint(penum, &pt);
  459.     ref proc;
  460.     if ( code < 0 ) return code;
  461.     if ( code != 0 )
  462.        {     
  463.         istate.screen_proc = esp[-1] ;
  464.         esp -= 3 ;
  465.         return 8 ;
  466.        }
  467.     if ( (osp = op += (2)) > ostop ) return (osp -= (2), (-16) ) ;
  468.     ((op - 1)->value. realval = (  pt.x), ((op - 1)->tas.type_attrs = ((  t_real) << 7 ) + ( 0)) )   ;
  469.     ((op)->value. realval = (  pt.y), ((op)->tas.type_attrs = ((  t_real) << 7 ) + ( 0)) )   ;
  470.     proc = esp[-1] ;
  471.     (++esp, (((esp)->value. opproc = (  (dummy_op_proc_p)( set_screen_continue)), ((esp)->tas.type_attrs = ((  t_operator) << 7 ) + (  0x40 )) ) , ((esp)->tas.rsize = (     i_set_screen_continue)) )   ) ;
  472.     *++esp = proc;
  473.     return 3 ;
  474. }
  475. static  int
  476. set_screen_continue(register os_ptr op)
  477. {    float value;
  478.     int code = num_params(op, 1, &value);
  479.     if ( code < 0 ) return code;
  480.     code = gs_screen_next((gs_screen_enum *)esp->value.bytes , value);
  481.     if ( code < 0 ) return code;
  482.     (osp -= (1)) ;  op--;
  483.     return screen_sample(op);
  484. }
  485. op_def zht_op_defs[] = {
  486.     {"0currenthalftonephase", zcurrenthalftonephase},
  487.     {"0currentscreen", zcurrentscreen},
  488.     {"2sethalftonephase", zsethalftonephase},
  489.     {"3setscreen", zsetscreen},
  490.          
  491.     {"1%set_screen_continue", set_screen_continue, &i_set_screen_continue},
  492.     {(char   *)0, (op_proc_p)0} 
  493. };
  494. ----------------8<------------end of zht.c----------------------
  495.  
  496. Good Luck!
  497.  
  498. ...Tim
  499.  
  500.           Tim Theisen           Systems Programmer
  501. Internet: tim@cs.wisc.edu       Department of Computer Sciences
  502.     UUCP: uwvax!tim             University of Wisconsin-Madison
  503.    Phone: (608)262-0438         1210 West Dayton Street
  504.      FAX: (608)262-9777         Madison, WI   53706
  505.  
  506.