freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ft-devel] Follow up: FreeType v2501 under DJGPP with RHIDE


From: Daniel Nice
Subject: [ft-devel] Follow up: FreeType v2501 under DJGPP with RHIDE
Date: Tue, 13 Jan 2015 15:55:32 -0500

I am trying to set up FreeType v2.51 with DJGPP under RHIDE on DOS in order to trace through the library source code.
Particularly, I want to translate the anti-aliased rasterizer to another language.
Therefore, I do not want to build the library -- I want all source code to be traceable.

On further investigation, it appears many of the problems in my prior post getting the official demo running were due to the lack of a DOS version of the graphics library.

I have now switched to a more simple test program which displays FreeType output to the console using plain ASCII.

This has reduced my errors down to the following (DJGPP under RHIDE on DOS):
--------------------------------------------------------------
Error: ftinit.o:ftinit.c:(.text+0x0): undefined reference to `_autofit_module_class'
Error: ftinit.o:ftinit.c:(.text+0x8): undefined reference to `_t1_driver_class'
Error: ftinit.o:ftinit.c:(.text+0xc): undefined reference to `_cff_driver_class'
Error: ftinit.o:ftinit.c:(.text+0x10): undefined reference to `_t1cid_driver_class'
Error: ftinit.o:ftinit.c:(.text+0x14): undefined reference to `_pfr_driver_class'
Error: ftinit.o:ftinit.c:(.text+0x18): undefined reference to `_t42_driver_class'
Error: ftinit.o:ftinit.c:(.text+0x1c): undefined reference to `_winfnt_driver_class'
Error: ftinit.o:ftinit.c:(.text+0x20): undefined reference to `_pcf_driver_class'
Error: ftinit.o:ftinit.c:(.text+0x24): undefined reference to `_psaux_module_class'
Error: ftinit.o:ftinit.c:(.text+0x2c): undefined reference to `_pshinter_module_class'
Error: ftinit.o:ftinit.c:(.text+0x44): undefined reference to `_bdf_driver_class'
Error: collect2: ld returned 1 exit status
--------------------------------------------------------------

To get this far, I made a project in RHIDE which includes the following FreeType source files:
common.c
ftbase.c
ftbbox.c
ftbitmap.c
ftdebug.c
ftglyph.c
ftinit.c
ftsystem.c
psnames.c
raster.c
sfnt.c
smooth.c
truetype.c

My demo program, which I believe also came from a FreeType source, is called example1.c and it contains the following:
-----------------------------------------------------------
/* example1.c                                                      */
/*                                                                 */
/* This small program shows how to print a rotated string with the */
/* FreeType 2 library.                                             */


#include <stdio.h>
#include <string.h>
#include <math.h>

#include <ft2build.h>
#include FT_FREETYPE_H


#define WIDTH   640
#define HEIGHT  480


/* origin is the upper left corner */
unsigned char image[HEIGHT][WIDTH];


/* Replace this function with something useful. */

void
draw_bitmap( FT_Bitmap*  bitmap,
             FT_Int      x,
             FT_Int      y)
{
  FT_Int  i, j, p, q;
  FT_Int  x_max = x + bitmap->width;
  FT_Int  y_max = y + bitmap->rows;


  for ( i = x, p = 0; i < x_max; i++, p++ )
  {
    for ( j = y, q = 0; j < y_max; j++, q++ )
    {
      if ( i < 0      || j < 0       ||
           i >= WIDTH || j >= HEIGHT )
        continue;

      image[j][i] |= bitmap->buffer[q * bitmap->width + p];
    }
  }
}


void
show_image( void )
{
  int  i, j;


  for ( i = 0; i < HEIGHT; i++ )
  {
    for ( j = 0; j < WIDTH; j++ )
      putchar( image[i][j] == 0 ? ' '
                                : image[i][j] < 128 ? '+'
                                                    : '*' );
    putchar( '\n' );
  }
}


int
main( int     argc,
      char**  argv )
{
 
  FT_Library    library;
  FT_Face       face;

  FT_GlyphSlot  slot;
  FT_Matrix     matrix;                 /* transformation matrix */
  FT_Vector     pen;                    /* untransformed origin  */
  FT_Error      error;


  char*         filename;
  char*         text;

  double        angle;
  int           target_height;
  int           n, num_chars;

  if ( argc != 3 )
  {
    fprintf ( stderr, "usage: %s font sample-text\n", argv[0] );
    exit( 1 );
  }

  filename      = argv[1];                           /* first argument     */
  text          = argv[2];                           /* second argument    */
  num_chars     = strlen( text );
  //angle         = ( 25.0 / 360 ) * 3.14159 * 2;      /* use 25 degrees     */
  angle = 0;
  target_height = HEIGHT;

  error = FT_Init_FreeType( &library );              /* initialize library */
  /* error handling omitted */

  error = FT_New_Face( library, filename, 0, &face );/* create face object */
  /* error handling omitted */

  /* use 50pt at 100dpi */
  error = FT_Set_Char_Size( face, 50 * 64, 0,
                            100, 0 );                /* set character size */
  /* error handling omitted */

  slot = face->glyph;

  /* set up matrix */
  matrix.xx = (FT_Fixed)( cos( angle ) * 0x10000L );
  matrix.xy = (FT_Fixed)(-sin( angle ) * 0x10000L );
  matrix.yx = (FT_Fixed)( sin( angle ) * 0x10000L );
  matrix.yy = (FT_Fixed)( cos( angle ) * 0x10000L );

  /* the pen position in 26.6 cartesian space coordinates; */
  /* start at (300,200) relative to the upper left corner  */
  pen.x = 300 * 64;
  pen.y = ( target_height - 200 ) * 64;

  for ( n = 0; n < num_chars; n++ )
  {
    /* set transformation */
    FT_Set_Transform( face, &matrix, &pen );

    /* load glyph image into the slot (erase previous one) */
    error = FT_Load_Char( face, text[n], FT_LOAD_RENDER );
    if ( error )
      continue;                 /* ignore errors */

    /* now, draw to our target surface (convert position) */
    draw_bitmap( &slot->bitmap,
                 slot->bitmap_left,
                 target_height - slot->bitmap_top );

    /* increment pen position */
    pen.x += slot->advance.x;
    pen.y += slot->advance.y;
  }

  show_image();

  FT_Done_Face    ( face );
  FT_Done_FreeType( library );

  return 0;
}

/* EOF */
-----------------------------------------------------------

Thanks anyone for your help.

-Daniel Nice

reply via email to

[Prev in Thread] Current Thread [Next in Thread]