home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / gutenprint / weave.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-03-15  |  5.1 KB  |  181 lines

  1. /*
  2.  * "$Id: weave.h,v 1.2 2005/06/29 01:42:34 rlk Exp $"
  3.  *
  4.  *   libgimpprint header.
  5.  *
  6.  *   Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
  7.  *    Robert Krawitz (rlk@alum.mit.edu)
  8.  *
  9.  *   This program is free software; you can redistribute it and/or modify it
  10.  *   under the terms of the GNU General Public License as published by the Free
  11.  *   Software Foundation; either version 2 of the License, or (at your option)
  12.  *   any later version.
  13.  *
  14.  *   This program is distributed in the hope that it will be useful, but
  15.  *   WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  16.  *   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  17.  *   for more details.
  18.  *
  19.  *   You should have received a copy of the GNU General Public License
  20.  *   along with this program; if not, write to the Free Software
  21.  *   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  22.  *
  23.  * Revision History:
  24.  *
  25.  *   See ChangeLog
  26.  */
  27.  
  28. /**
  29.  * @file gutenprint/weave.h
  30.  * @brief Softweave functions.
  31.  */
  32.  
  33. /*
  34.  * This file must include only standard C header files.  The core code must
  35.  * compile on generic platforms that don't support glib, gimp, gtk, etc.
  36.  */
  37.  
  38. #ifndef GUTENPRINT_WEAVE_H
  39. #define GUTENPRINT_WEAVE_H
  40.  
  41. #ifdef __cplusplus
  42. extern "C" {
  43. #endif
  44.  
  45. #ifdef HAVE_CONFIG_H
  46. #include <config.h>
  47. #endif
  48.  
  49. #define STP_MAX_WEAVE (16)
  50.  
  51.  
  52. typedef struct            /* Weave parameters for a specific row */
  53. {
  54.   int row;            /* Absolute row # */
  55.   int pass;            /* Computed pass # */
  56.   int jet;            /* Which physical nozzle we're using */
  57.   int missingstartrows;        /* Phantom rows (nonexistent rows that */
  58.                 /* would be printed by nozzles lower than */
  59.                 /* the first nozzle we're using this pass; */
  60.                 /* with the current algorithm, always zero */
  61.   int logicalpassstart;        /* Offset in rows (from start of image) */
  62.                 /* that the printer must be for this row */
  63.                 /* to print correctly with the specified jet */
  64.   int physpassstart;        /* Offset in rows to the first row printed */
  65.                 /* in this pass.  Currently always equal to */
  66.                 /* logicalpassstart */
  67.   int physpassend;        /* Offset in rows (from start of image) to */
  68.                 /* the last row that will be printed this */
  69.                 /* pass (assuming that we're printing a full */
  70.                 /* pass). */
  71. } stp_weave_t;
  72.  
  73. typedef struct            /* Weave parameters for a specific pass */
  74. {
  75.   int pass;            /* Absolute pass number */
  76.   int missingstartrows;        /* All other values the same as weave_t */
  77.   int logicalpassstart;
  78.   int physpassstart;
  79.   int physpassend;
  80.   int subpass;
  81. } stp_pass_t;
  82.  
  83. typedef struct {        /* Offsets from the start of each line */
  84.   int ncolors;
  85.   unsigned long *v;        /* (really pass) */
  86. } stp_lineoff_t;
  87.  
  88. typedef struct {        /* Is this line (really pass) active? */
  89.   int ncolors;
  90.   char *v;
  91. } stp_lineactive_t;
  92.  
  93. typedef struct {        /* number of rows for a pass */
  94.   int ncolors;
  95.   int *v;
  96. } stp_linecount_t;
  97.  
  98. typedef struct {        /* Base pointers for each pass */
  99.   int ncolors;
  100.   unsigned char **v;
  101. } stp_linebufs_t;
  102.  
  103. typedef struct {        /* Width of data actually printed */
  104.   int ncolors;
  105.   int *start_pos;
  106.   int *end_pos;
  107. } stp_linebounds_t;
  108.  
  109. typedef enum {
  110.   STP_WEAVE_ZIGZAG,
  111.   STP_WEAVE_ASCENDING,
  112.   STP_WEAVE_DESCENDING,
  113.   STP_WEAVE_ASCENDING_2X,
  114.   STP_WEAVE_STAGGERED,
  115.   STP_WEAVE_ASCENDING_3X
  116. } stp_weave_strategy_t;
  117.  
  118. typedef int stp_packfunc(stp_vars_t *v,
  119.              const unsigned char *line, int height,
  120.              unsigned char *comp_buf,
  121.              unsigned char **comp_ptr,
  122.              int *first, int *last);
  123. typedef void stp_fillfunc(stp_vars_t *v, int row, int subpass,
  124.               int width, int missingstartrows, int color);
  125. typedef void stp_flushfunc(stp_vars_t *v, int passno, int vertical_subpass);
  126. typedef int stp_compute_linewidth_func(stp_vars_t *v, int n);
  127.  
  128. extern void stp_initialize_weave(stp_vars_t *v, int jets, int separation,
  129.                  int oversample, int horizontal,
  130.                  int vertical, int ncolors, int bitwidth,
  131.                  int linewidth, int line_count,
  132.                  int first_line, int page_height,
  133.                  const int *head_offset,
  134.                  stp_weave_strategy_t,
  135.                  stp_flushfunc,
  136.                  stp_fillfunc,
  137.                  stp_packfunc,
  138.                  stp_compute_linewidth_func);
  139.  
  140. extern stp_packfunc stp_pack_tiff;
  141. extern stp_packfunc stp_pack_uncompressed;
  142.  
  143. extern stp_fillfunc stp_fill_tiff;
  144. extern stp_fillfunc stp_fill_uncompressed;
  145.  
  146. extern stp_compute_linewidth_func stp_compute_tiff_linewidth;
  147. extern stp_compute_linewidth_func stp_compute_uncompressed_linewidth;
  148.  
  149. extern void stp_flush_all(stp_vars_t *v);
  150.  
  151. extern void
  152. stp_write_weave(stp_vars_t *v, unsigned char *const cols[]);
  153.  
  154. extern stp_lineoff_t *
  155. stp_get_lineoffsets_by_pass(const stp_vars_t *v, int pass);
  156.  
  157. extern stp_lineactive_t *
  158. stp_get_lineactive_by_pass(const stp_vars_t *v, int pass);
  159.  
  160. extern stp_linecount_t *
  161. stp_get_linecount_by_pass(const stp_vars_t *v, int pass);
  162.  
  163. extern const stp_linebufs_t *
  164. stp_get_linebases_by_pass(const stp_vars_t *v, int pass);
  165.  
  166. extern stp_pass_t *
  167. stp_get_pass_by_pass(const stp_vars_t *v, int pass);
  168.  
  169. extern void
  170. stp_weave_parameters_by_row(const stp_vars_t *v, int row,
  171.                 int vertical_subpass, stp_weave_t *w);
  172.  
  173. #ifdef __cplusplus
  174.   }
  175. #endif
  176.  
  177. #endif /* GUTENPRINT_WEAVE_H */
  178. /*
  179.  * End of "$Id: weave.h,v 1.2 2005/06/29 01:42:34 rlk Exp $".
  180.  */
  181.