home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0636.ZIP / CCE_0636 / GEMLIB / GMLIBS30.ZOO / vdifsm.c < prev    next >
C/C++ Source or Header  |  1993-05-21  |  18KB  |  648 lines

  1. /*
  2.  * FSM/SpeedoGDOS  gdos bindings
  3.  * this file has some relationship to a file supplied by Atari
  4.  * but it changed quite a bit (among other things it appears to work).
  5.  * v_shtext survived verbatim from the original.
  6.  *
  7.  * ++jrb add more speedoGDOS stuff. now it looks nothing like the one
  8.  *       from atari. i guess this file should now be called vdispeedo or
  9.  *       something like that. btw: atari claims that the api did'nt change
  10.  *       yeah right!
  11.  */
  12.  
  13. #include "common.h"
  14. #ifndef _COMPILER_H
  15. # include <compiler.h>
  16. #endif
  17. #include <types.h>
  18.  
  19. #ifdef __DEF_ALL__
  20.  
  21. #define L_vqt_fext
  22. #define L_v_ftext
  23. #define L_v_fteof
  24. #define L_v_getout
  25. #define L_vst_scra
  26. #define L_vst_erro
  27. #define L_v_shtext
  28. #define L_vst_arbp
  29. #define L_vst_ar32
  30. #define L_vqt_adva
  31. #define L_vqt_ad32
  32. #define L_vqt_devi
  33. #define L_v_saveca
  34. #define L_v_loadca
  35. #define L_v_flushc
  36. #define L_vst_sets
  37. #define L_vst_se32
  38. #define L_vst_skew
  39. #define L_vqt_get_
  40. #define L_vqt_cach
  41. #define L_vst_char
  42. #define L_vst_kern
  43. #define L_vqt_fnt
  44. #define L_vqt_trac
  45. #define L_vqt_pair
  46. #define L_v_getbit
  47.  
  48. #endif /* __DEF_ALL__ */
  49.  
  50. #ifdef L_vqt_fext
  51.  
  52. /* Inquire Outline Font Text Extent. This function works exactly like
  53.  * vqt_extent(), but the rectangle returned will account for the remainder
  54.  * values of vqt_advance() and kerning.
  55.  */
  56. void vqt_f_extent(int handle, const char *str, int extent[8])
  57. {
  58.     unsigned char ch;
  59.     short *ptr;
  60.     int   *ept, *end;
  61.     
  62.     ptr = _intin;
  63.     while ( ch = *str++)
  64.     *ptr++ = ch;
  65.     *ptr = 0;    
  66.     __vdi__(VDI_CONTRL_ENCODE(240, 0, (int)(ptr - _intin), 0), handle);
  67.     
  68.     ptr = _ptsout;
  69.     ept = extent;
  70.     end = ept + 8;
  71.     do {
  72.     *ept++ = *ptr++;
  73.     } while (ept < end);
  74. }
  75.  
  76. #endif /* L_vqt_fext */
  77.  
  78.  
  79. #ifdef L_v_ftext
  80.  
  81. /* Outline Font Text. This function works exactly like v_gtext(), but the text
  82.  * returned will account for the remainder values of vqt_advance().  In other
  83.  * words, the text spacing will be more accurate. In addition, for applications
  84.  * that want more control over character placement, v_ftext() will take a
  85.  * custom set of offset vectors, one for each character in the string
  86.  * (including the last one for underlining calculations).  Each vector must  
  87.  * consist of a pair of 16-bit values that will be used in place of a
  88.  * character's advance vector when outputting text.  A second binding follows
  89.  * the original. 
  90.  */
  91. void
  92. v_ftext(int handle, int x, int y, const char *str)
  93. {
  94.     unsigned char   ch;
  95.     short *ptr = _intin;
  96.     
  97.     _ptsin[0] = x;
  98.     _ptsin[1] = y;
  99.     while ( ch  = (unsigned const char) *str++)
  100.     *ptr++ = ch;
  101.     *ptr = 0;
  102.     
  103.     __vdi__(VDI_CONTRL_ENCODE(241, 1, (int)(ptr - _intin), 0), handle);
  104. }
  105.  
  106. #endif /* L_v_ftext */
  107.  
  108. #ifdef L_v_fteof
  109. void v_ftext_offset(int handle, int x, int y, const char *str, int *offset)
  110. {
  111.     unsigned char   ch;
  112.     short *ptr = _intin;
  113.     int n = 0;
  114.     
  115.     _ptsin[0] = x;
  116.     _ptsin[1] = y;
  117.     while ( ch  = (unsigned const char) *str++) 
  118.     {
  119.     *ptr++ = ch;
  120.         n++;
  121.     }
  122.     *ptr = 0;
  123.  
  124.     ptr = &_ptsin[2];
  125.     for(n *= 2; n > 0; n--)
  126.     {
  127.         *ptr++ = *offset++;
  128.     }
  129.     
  130.     __vdi__(VDI_CONTRL_ENCODE(241, 1, (int)(ptr - _intin), 0), handle);
  131. }
  132. #endif /* L_v_fteof */
  133.  
  134. #ifdef  L_v_killou
  135.  
  136. #error v_killoutline(int handle, void *component) doesnt exist any more
  137.  
  138. #endif /* L_v_killou */
  139.  
  140.  
  141. #ifdef L_v_getout
  142.  
  143. /* Generate an outline for character ch, and return the bezier representation
  144.  * in the buffer provided.
  145.  */
  146. void v_getoutline(int handle, int ch, int *xyarray, char *bezarray,
  147.                   int maxverts, int *numverts)
  148. {
  149.     int **addr;
  150.     
  151.     _intin[0] = ch;
  152.     _intin[1] = maxverts;
  153.     addr = (int **)(&_intin[2]);
  154.     *addr++ = xyarray;
  155.     *addr = (int *)bezarray;
  156.     __vdi__(VDI_CONTRL_ENCODE(243, 0, 6, 0), handle);
  157.     *numverts = _intout[0];
  158. }
  159.  
  160. #endif /* L_v_getout */
  161.  
  162.  
  163. #ifdef L_vst_scra
  164.  
  165. /* Set scratch buffer allocation mode.
  166.  * This buffes is used when creating special effects on fonts.
  167.  * mode=0: (default) account for FSM fonts when allocating scratch buffers
  168.  * mode=1: account only for BM fonts;  no special effects for outlines
  169.  * mode=2: allocate no scratch buffer; no special effects at all
  170.  */
  171. void vst_scratch(int handle, int mode)
  172. {
  173.     _intin[0] = mode;
  174.     __vdi__(VDI_CONTRL_ENCODE(244, 0, 1, 0), handle);
  175. }
  176.  
  177. #endif /* L_vst_scra */
  178.  
  179.  
  180. #ifdef L_vst_erro
  181.  
  182. /* Set FSM error mode.
  183.  * mode=1: (default) errors go to screen.
  184.  * mode=0: errors reported in error variable `errorvar'.
  185.  */
  186. void vst_error(int handle, int mode, short *errorvar)
  187. {
  188.     
  189.     _intin[0] = mode;
  190.     *(short **)&_intin[1] = &errorvar;
  191.     __vdi__(VDI_CONTRL_ENCODE(245, 0, 3, 0), handle);
  192. }
  193.  
  194. #endif /* L_vst_erro */
  195.  
  196.  
  197. #ifdef L_v_shtext
  198.  
  199. /* v_gtext with shadow.
  200.  * Text color should be set to `color' before calling.
  201.  * This is not technically an FSM binding,
  202.  * but this module is a convenient place for it.
  203.  */
  204. void v_shtext( int wsid, 
  205.       int x,
  206.       int y,
  207.       const char * text,
  208.       int color,
  209.       int xshadow,
  210.       int yshadow )
  211. {
  212.     __EXTERN void v_ftext __PROTO((int, int, int, const char *));
  213.     __EXTERN int vst_color __PROTO((int, int));
  214.  
  215.     if( xshadow || yshadow )
  216.     {
  217.     v_ftext( wsid, x+xshadow*2, y+yshadow*2, text );
  218.     (void) vst_color( wsid, 0 );
  219.     v_ftext( wsid, x+xshadow, y+yshadow, text );
  220.     (void) vst_color( wsid, color );
  221.     }
  222.     v_ftext( wsid, x, y, text );
  223. }
  224. #endif /* L_v_shtext */
  225.  
  226.  
  227. #ifdef L_vst_arbp
  228.  
  229. /* Set character cell height to arbitrary value.
  230.  * Height is given in printer points (more or less) and it does not
  231.  * have to be listed in extend.sys.
  232.  * Only for FSM outline fonts.
  233.  */
  234. int vst_arbpt( int handle,
  235.        int point,
  236.        int *wchar,
  237.        int *hchar,
  238.        int *wcell,
  239.        int *hcell )
  240. {
  241.     short    *outp = &_ptsout[0];
  242.  
  243.     _intin[0] = point;
  244.     __vdi__(VDI_CONTRL_ENCODE(246, 0, 1, 0), handle);
  245.     *wchar = *outp++;
  246.     *hchar = *outp++;
  247.     *wcell = *outp++;
  248.     *hcell = *outp;
  249.  
  250.     return _intout[0];
  251. }
  252. #endif /* L_vst_arbp */
  253.  
  254. #ifdef L_vst_ar32
  255.  
  256. /* fix32 version */
  257. long vst_arbpt32( int handle,
  258.        long point,
  259.        int *wchar,
  260.        int *hchar,
  261.        int *wcell,
  262.        int *hcell )
  263. {
  264.     short    *outp = &_ptsout[0];
  265.  
  266.     *((long *)(&_intin[0])) = point;
  267.     __vdi__(VDI_CONTRL_ENCODE(246, 0, 2, 0), handle);
  268.     *wchar = *outp++;
  269.     *hchar = *outp++;
  270.     *wcell = *outp++;
  271.     *hcell = *outp;
  272.  
  273.     return *((long *)(&_intout[0]));
  274. }
  275. #endif /* L_vst_ar32 */
  276.  
  277. #ifdef L_vqt_adva
  278.  
  279. /* Inquire Outline Font Text Advance Placement Vector
  280.  * This function returns the x and y offsets which are needed to  place the
  281.  * next character of a string in the proper position.  This call is necessary
  282.  * when laying down text at rotations other than 0, 90,  and 270.  In addition,
  283.  * the call returns remainder values for the x and y offsets (mod 16000), so
  284.  * that cursor placement can be calculated for v_ftext() and vqt_f_extent().
  285.  *
  286.  * In addition, this call also returns values in units of 1/65536 pixels (fix31
  287.  * format).  The new binding for vqt_advance32() follows, and atari encourages
  288.  * programmers to use the new data type.
  289.  *
  290.  */
  291. void vqt_advance(int handle, int ch, int *xadv, int *yadv, int *xrem,
  292.                  int *yrem) 
  293. {
  294.     short    *outp = &_ptsout[0];
  295.  
  296.     _intin[0] = ch;
  297.     __vdi__(VDI_CONTRL_ENCODE(247, 0, 1, 0), handle);
  298.     *xadv = *outp++;
  299.     *yadv = *outp++;
  300.     *xrem = *outp++;
  301.     *yrem = *outp;
  302. }
  303. #endif /* L_vqt_adva */
  304.  
  305. #ifdef L_vqt_ad32
  306. /* new binding. returns results in fix31 (1/64k pixels) types.
  307.  */
  308. void vqt_advance32(int handle, int ch, long *advx, long *advy)
  309. {
  310.     long *outp = (long *)(&_ptsout[4]);
  311.  
  312.     _intin[0] = ch;
  313.     __vdi__(VDI_CONTRL_ENCODE(247, 0, 1, 0), handle);
  314.     *advx = *outp++;
  315.     *advy = *outp;
  316. }
  317. #endif /* L_vqt_ad32 */
  318.  
  319. #ifdef L_vqt_devi
  320.  
  321. /* Inquire device status information.
  322.  * This function takes a device id number as a parameter and reports back to
  323.  * the application whether or not the driver for that device has been installed
  324.  * by gdos. If the driver has been installed, the name of the driver is
  325.  * returned to the application.
  326.  */
  327. void
  328. vqt_devinfo( int handle, int device, int *isdev, char *drivername )
  329. {
  330.     short    *ioutp, *end;
  331.  
  332.     _intin[0] = device;
  333.     __vdi__(VDI_CONTRL_ENCODE(248, 0, 1, 0), handle);
  334.     if (0 != (*isdev = _ptsout[0])) {
  335.     ioutp = _intout;
  336.     end  = ioutp + _contrl[4];
  337.     do {
  338.         *drivername++ = (char) *ioutp++;
  339.     } while (ioutp < end);
  340.     }
  341.     *drivername = '\0';
  342. }
  343. #endif /* L_vqt_devi */
  344.  
  345. #ifdef L_v_saveca
  346.  
  347. /* Save outline font cache to disk.
  348.  */
  349. int
  350. v_savecache( int handle, char *filename )
  351. {
  352.     short       *inptr = _intin;
  353.  
  354.     while (*inptr++ = *filename++)
  355.     ;    /* nothing */
  356.     __vdi__(VDI_CONTRL_ENCODE(249, 0, (int)(inptr - _intin), 0), handle);
  357.  
  358.     return _intout[0];
  359. }
  360. #endif /* L_v_saveca */
  361.  
  362. #ifdef L_v_loadca
  363.  
  364. /* Load/merge outline font cache from disk.
  365.  * mode = 0 - append
  366.  *      = 1 - flush and load anew
  367.  * returns 0 or -1 if error
  368.  */
  369. int
  370. v_loadcache( int handle, char *filename, int mode )
  371. {
  372.     short *inptr = _intin;
  373.  
  374.     *inptr++ = mode;
  375.     while (*inptr++ = *filename++)
  376.     ;    /* nothing */
  377.     __vdi__(VDI_CONTRL_ENCODE(250, 0, (int)(inptr - _intin), 0), handle);
  378.  
  379.     return _intout[0];
  380. }
  381. #endif /* L_v_loadca */
  382.  
  383. #ifdef L_v_flushc
  384.  
  385. /* Flush outline font cache.
  386.  * return 0 or -1 on error.
  387.  */
  388. int v_flushcache( int handle )
  389. {
  390.     __vdi__(VDI_CONTRL_ENCODE(251, 0, 0, 0), handle);
  391.  
  392.     return _intout[0];
  393. }
  394. #endif /* L_v_flushc */
  395.  
  396. #ifdef L_vst_sets
  397.  
  398. /* Set Character Cell Width by Arbitrary Points. This function sets the current
  399.  * graphic text character width (set size) in printer points.  An arbitrary set
  400.  * size may be entered to represent the character width.  It should be noted
  401.  * that the next call to vst_point, vst_arbpt or vst_height will cancel out
  402.  * this call and  will set the set size to be equal to the requested point
  403.  * size. This call will only work with outline fonts.  The set size may be
  404.  * specified in either 16-bit integer format or 32-bit fix31 format (units of
  405.  * 1/65536 points). 
  406.  */
  407. int vst_setsize( int handle,
  408.          int point,
  409.          int *wchar,
  410.          int *hchar,
  411.          int *wcell,
  412.          int *hcell )
  413. {
  414.     short *outp = &_ptsout[0];
  415.     
  416.     _intin[0] = point;
  417.     __vdi__(VDI_CONTRL_ENCODE(252, 0, 1, 0), handle);
  418.  
  419.     *wchar = *outp++;
  420.     *hchar = *outp++;
  421.     *wcell = *outp++;
  422.     *hcell = *outp;
  423.  
  424.     return _intout[0];
  425. }
  426. #endif /* L_vst_sets */
  427.  
  428. #ifdef L_vst_se32
  429.  
  430. /* new fix31 version
  431.  */
  432.  
  433. long vst_setsize32( int handle,
  434.          long point,
  435.          int *wchar,
  436.          int *hchar,
  437.          int *wcell,
  438.          int *hcell )
  439. {
  440.     short *outp = &_ptsout[0];
  441.     
  442.     *((long *)(&_intin[0])) = point;
  443.     __vdi__(VDI_CONTRL_ENCODE(252, 0, 2, 0), handle);
  444.  
  445.     *wchar = *outp++;
  446.     *hchar = *outp++;
  447.     *wcell = *outp++;
  448.     *hcell = *outp;
  449.  
  450.     return *((long *)(&_intout[0]));
  451. }
  452. #endif /* L_vst_se32 */
  453.  
  454. #ifdef L_vst_skew
  455.  
  456. /* Set FSM skew. (only works with outline fonts)
  457.  * Skew in tenths of degrees.  Valid values between -900 and 900. (-ve to left)
  458.  */
  459. int vst_skew( int handle, int skew )
  460. {
  461.     _intin[0] = skew;
  462.     __vdi__(VDI_CONTRL_ENCODE(253, 0, 1, 0), handle);
  463.  
  464.     return _intout[0];
  465. }
  466. #endif /* L_vst_skew */
  467.  
  468. #ifdef L_vqt_get_
  469.  
  470. /* Get Character Mapping Table. This call returns the address of a series of
  471.  * contiguous tables used internally by  SpeedoGDOS.  The tables are used to
  472.  * map the Atari character set to the equivalent Bitstream character indexes.
  473.  * Depending on the font file, a Speedo font's indexes have six different
  474.  * formats: the Bitstream International Character Set, the Bitstream
  475.  * International Symbol Set, the Bitstream Dingbats Set, the PostScript text
  476.  * set, the PostScript symbol set, and the PostScript Dingbats set.  There are
  477.  * a total of seven tables which map the Atari character set to Bitstream
  478.  * character indexes, one master mapping, and one table for each of the
  479.  * aforementioned character sets (in the order presented).  Applications can
  480.  * find out which character set corresponds to the current font by checking the
  481.  * Speedo font file header. Each individual table contains 224  word-sized
  482.  * entries with the first entry being the translation for character 32, the
  483.  * second for character 33....etc.  Therefore, with the address of the table,
  484.  * applications can change the mappings so that any Bitstream character index
  485.  * may be substituted.
  486.  */
  487. void vqt_get_table(int handle, short **map)
  488. {
  489.     __vdi__(VDI_CONTRL_ENCODE(254, 0, 0, 0), handle);
  490.  
  491.     *map = *((short **)(&_intout[0]));
  492. }
  493.  
  494. #if 0 /* old fsm binding */
  495. /* ----------------------------------------------------------------------
  496.  * Get FSM GASCII tables.
  497.  */
  498. void
  499. vqt_get_tables( int handle, void **gascii, void **style )
  500. {
  501.     __vdi__(VDI_CONTRL_ENCODE(254, 0, 0, 0), handle);
  502.     *gascii = *(void **)&_intout[0];
  503.     *style =  *(void **)&_intout[2];
  504. }
  505. #endif
  506. #endif /* L_vqt_get_ */
  507.  
  508. #ifdef L_vqt_cach
  509.  
  510. /* Get Outline Font Cache Size. Returns the largest block size available in
  511.  * each of the two fsm caches.  This call can be used to estimate how big a
  512.  * character SpeedoGDOS can handle when it prints a character.  A zero (0) in
  513.  * which_cache will instruct SpeedoGDOS to return the largest allocatable block
  514.  * in the character bitmap cache.  A one (1) will return the same information
  515.  * for the data structure cache.
  516.  */
  517. void vqt_cachesize( int handle, int which_cache, size_t *size )
  518. {
  519.     _intin[0] = which_cache;
  520.     __vdi__(VDI_CONTRL_ENCODE(255, 0, 1, 0), handle);
  521.     *size = *((size_t *)(&_intout[0]));
  522. }
  523. #endif /* L_vqt_cach */
  524.  
  525.  
  526. #ifdef L_vst_char
  527.  
  528. /* Set Character Mapping Mode. This function allows the application to switch
  529.  * from using the Atari character set to the BICS character set.  The
  530.  * vst_charmap() function will set a flag so that all subsequent calls to text
  531.  * calls will use words that are equivalent to Bitstream character indexes
  532.  * instead of Atari ASCII bytes. 
  533.  */
  534. void vst_charmap(int handle, int mode)
  535. {
  536.     _intin[0] = mode;
  537.     __vdi__(VDI_CONTRL_ENCODE(236, 0, 1, 0), handle);
  538. }    
  539. #endif /* L_vst_char */
  540.  
  541. #ifdef L_vst_kern
  542.  
  543. /* Set Kerning Mode. This function allows the application to set the different
  544.  * kerning modes.  Track kerning can have 0-3 tracks:  0 is no kerning, 1 is
  545.  * normal, 2 is tight, and 3 is very tight.  The vst_kern() function passes in
  546.  * a track kern value and it returns the track to which the current font is
  547.  * set.  Pair kerning is set to be on or off. The vst_kern() function will
  548.  * return 0 if there is no track kerning or a number greater than 0 to indicate
  549.  * that pair kerning is on; that number is the number of kerning pairs in the
  550.  * font. 
  551.  */
  552. void vst_kern(int handle, int tmode, int pmode, int *tracks, int *pairs)
  553. {
  554.     _intin[0] = tmode;
  555.     _intin[1] = pmode;
  556.     __vdi__(VDI_CONTRL_ENCODE(237, 0, 2, 0), handle);
  557.     *tracks = _intout[0];
  558.     *pairs  = _intout[1];
  559. }    
  560. #endif /* L_vst_kern */
  561.  
  562. #ifdef L_vqt_fnt
  563.  
  564. /* Inquire Speedo Font Header Information. This function copies the current 
  565.  * font's Speedo font header into a buffer and returns the full path name for
  566.  * the corresponding TDF file.  Note that the buffer must be at least 421
  567.  * bytes.  See (nonexistant!) Bitstream documentation for specific font header
  568.  * information.  
  569.  */
  570. void vqt_fontheader(int handle, char *buffer, char *pathname)
  571. {
  572.     short *ptr;
  573.     int n;
  574.     
  575.     *((char **)(&_intin[0])) = buffer;
  576.     __vdi__(VDI_CONTRL_ENCODE(232, 0, 2, 0), handle);
  577.     
  578.     for(ptr = &_intout[0], n = _contrl[4]; n > 0; n--)
  579.         *pathname++ = *ptr++;
  580. }    
  581. #endif /* L_vqt_fnt */
  582.  
  583. #ifdef L_vqt_trac
  584.  
  585. /* Inquire Track Kerning Information. This function allows the application to
  586.  * inquire the adjustment vector for track kerning.  The vqt_trackkern()
  587.  * function returns the vector (x-direction and  y-direction) that indicates
  588.  * the spacing adjustment made between characters. 
  589.  */
  590. void vqt_trackkern(int handle, long *x, long *y)
  591. {
  592.     __vdi__(VDI_CONTRL_ENCODE(234, 0, 0, 0), handle);
  593.     *x = *((long *)(&_ptsout[0]));
  594.     *y = *((long *)(&_ptsout[2]));
  595. }
  596. #endif /* L_vqt_trac */
  597.  
  598. #ifdef L_vqt_pair
  599.  
  600. /* Inquire Pair Kerning Information. This function allows the application to
  601.  * inquire the adjustment vector for pair kerning.  The vqt_pairkern() function
  602.  * returns the vector (x-direction and y-direction) that indicates the spacing
  603.  * adjustment made between the character pair specified.
  604.  */
  605. void vqt_pairkern(int handle, int ch1, int ch2, long *x, long *y)
  606. {
  607.     _intin[0] = ch1;
  608.     _intin[1] = ch2;
  609.     /* atari doc is wrong about contrl[3] */
  610.     __vdi__(VDI_CONTRL_ENCODE(235, 0, 2, 0), handle);
  611.     *x = *((long *)(&_ptsout[0]));
  612.     *y = *((long *)(&_ptsout[2]));
  613. }
  614. #endif /* L_vqt_pair */
  615.  
  616. #ifdef L_v_getbit
  617.  
  618. /* Get Character Bitmap Information. This call provides information to allow
  619.  * the caller to know the exact size and placement of a given character.  This
  620.  * information includes the character's x and y advance vectors, the x and y
  621.  * offsets, and the bitmap dimensions of the character. The advance vector
  622.  * represents the amount to add to the current point to place the following
  623.  * character.  The x and y offsets, when added to the current point, give the
  624.  * caller the location of the upper left hand corner of the bitmap.  The width
  625.  * and height of the bitmap are returned as 16 bit integers.  All other values
  626.  * are returned in fix31 representation.
  627.  */
  628. void v_getbitmap_info(int handle,
  629.                       int ch, 
  630.                       long *advancex, long *advancey,
  631.                       long *xoffset, long *yoffset,
  632.                       int *width, int *height,
  633.                       short **bitmap)
  634. {
  635.     _intin[0] = ch;
  636.     __vdi__(VDI_CONTRL_ENCODE(239, 0, 1, 0), handle);
  637.     *width = _intout[0];
  638.     *height = _intout[1];
  639.     *advancex = *((long *)(&_intout[2]));
  640.     *advancey = *((long *)(&_intout[4]));
  641.     *xoffset = *((long *)(&_intout[6]));
  642.     *yoffset = *((long *)(&_intout[8]));
  643.     *bitmap = *((short **)(&_intout[10]));
  644. }
  645. #endif /* L_v_getbit */
  646.  
  647. /* -eof- */
  648.