[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2] parthw-cleaned 5f44029: [gf] FT stream support for gf driver
From: |
Parth Wazurkar |
Subject: |
[freetype2] parthw-cleaned 5f44029: [gf] FT stream support for gf driver. |
Date: |
Tue, 26 Jun 2018 19:16:12 -0400 (EDT) |
branch: parthw-cleaned
commit 5f44029acfab44a099e60531533cd7f96e7f6972
Author: Parth Wazurkar <address@hidden>
Commit: Parth Wazurkar <address@hidden>
[gf] FT stream support for gf driver.
* src/gf/gflib.c : Convert all the file functions to
FT stream functions.
---
src/gf/gflib.c | 275 ++++++++++++++++++++++++++-------------------------------
1 file changed, 127 insertions(+), 148 deletions(-)
diff --git a/src/gf/gflib.c b/src/gf/gflib.c
index c0ad307..31bd2ec 100644
--- a/src/gf/gflib.c
+++ b/src/gf/gflib.c
@@ -21,6 +21,10 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_OBJECTS_H
+#include FT_SYSTEM_H
+#include FT_CONFIG_CONFIG_H
+#include FT_ERRORS_H
+#include FT_TYPES_H
#include "gf.h"
#include "gfdrivr.h"
@@ -36,6 +40,8 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_gflib
+unsigned char bit_table[] = {
+ 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
/**************************************************************************
*
@@ -43,105 +49,57 @@
*
*/
- long gf_read_intn(FILE*,int);
- unsigned long gf_read_uintn(FILE*,int);
- void gf_skip_n(FILE*,int);
-
-#define READ_INT1(fp) (INT1)gf_read_intn((fp), 1)
-#define READ_UINT1(fp) (UINT1)gf_read_uintn((fp), 1)
-#define READ_INT2(fp) (INT2)gf_read_intn((fp), 2)
-#define READ_UINT2(fp) (UINT2)gf_read_uintn((fp), 2)
-#define READ_INT3(fp) (INT3)gf_read_intn((fp), 3)
-#define READ_UINT3(fp) (UINT3)gf_read_uintn((fp), 3)
-#define READ_INT4(fp) (INT4)gf_read_intn((fp), 4)
-#define READ_UINT4(fp) (UINT4)gf_read_uintn((fp), 4)
-#define READ_INTN(fp,n) (INT4)gf_read_intn((fp), (n))
-#define READ_UINTN(fp,n) (UINT4)gf_read_uintn((fp), (n))
-#define SKIP_N(fp,k) gf_skip_n((fp), (k))
+ long gf_read_intn(FT_Stream,int);
+ unsigned long gf_read_uintn(FT_Stream,int);
+#define READ_UINT1( stream ) (UINT1)gf_read_uintn( stream, 1)
+#define READ_UINTN( stream,n) (UINT4)gf_read_uintn( stream, n)
+#define READ_INT1( stream ) (INT1)gf_read_intn( stream, 1)
+#define READ_INT4( stream ) (INT4)gf_read_intn( stream, 4)
/*
* Reading a Number from file
*/
unsigned long
- gf_read_uintn(FILE* fp, int size)
+ gf_read_uintn(FT_Stream stream, int size)
{
- unsigned long v;
-
+ unsigned long v,k;
+ FT_Error error = FT_Err_Ok;
+ FT_Byte tp;
v = 0L;
while (size >= 1)
{
- v = v*256L + (unsigned long)getc(fp);
+ FT_READ_BYTE(tp);
+ k =(unsigned long)tp;
+ v = v*256L + k;
--size;
}
return v;
}
long
- gf_read_intn(FILE* fp, int size)
+ gf_read_intn(FT_Stream stream, int size)
{
long v;
-
- v = (long)getc(fp) & 0xffL;
+ FT_Byte tp;
+ FT_Error error= FT_Err_Ok;
+ unsigned long z ;
+ FT_READ_BYTE(tp);
+ z= (unsigned long)tp;
+ v = (long)z & 0xffL;
if (v & 0x80L)
v = v - 256L;
--size;
while (size >= 1)
{
- v = v*256L + (unsigned long)getc(fp);
+ FT_READ_BYTE(tp);
+ z= (unsigned long)tp;
+ v = v*256L + z;
--size;
}
-
- return v;
- }
-
- void
- gf_skip_n(FILE* fp, int size)
- {
-
- while (size > 0)
- {
- (void)getc(fp);
- --size;
- }
-
- }
-
- unsigned long
- gf_get_uintn(unsigned char *p, int size)
- {
- unsigned long v;
-
- v = 0L;
- while (size >= 1)
- {
- v = v*256L + (unsigned long) *(p++);
- --size;
- }
-
- return v;
- }
-
- long
- gf_get_intn(unsigned char *p, int size)
- {
- long v;
-
- v = (long)*(p++) & 0xffL;
- if (v & 0x80L)
- v = v - 256L;
- --size;
- while (size >= 1)
- {
- v = v*256L + (unsigned long) *(p++);
- --size;
- }
-
return v;
}
-
-
/**************************************************************************
*
* API.
@@ -149,7 +107,7 @@
*/
FT_LOCAL_DEF( FT_Error )
- gf_read_glyph(FT_FILE* fp, GF_BITMAP bm)
+ gf_read_glyph(FT_Stream stream, GF_Bitmap bm)
{
long m, n;
int paint_sw;
@@ -158,30 +116,33 @@
long w, h, d;
int m_b, k;
unsigned char *ptr;
+ FT_Error error = FT_Err_Ok;
+ FT_Face face = FT_FACE_STREAM( stream );
+ FT_Memory memory = FT_FACE_MEMORY( face );
- switch (READ_UINT1(fp))
+ switch (READ_UINT1( stream ))
{
case GF_BOC:
- SKIP_N(fp, 4);
- SKIP_N(fp, 4);
- min_m = READ_INT4(fp);
- max_m = READ_INT4(fp);
- min_n = READ_INT4(fp);
- max_n = READ_INT4(fp);
+ FT_STREAM_SKIP( 4 );
+ FT_STREAM_SKIP( 4 );
+ min_m = READ_INT4( stream );
+ max_m = READ_INT4( stream );
+ min_n = READ_INT4( stream );
+ max_n = READ_INT4( stream );
break;
case GF_BOC1:
- SKIP_N(fp, 1);
- del_m = (INT4)READ_UINT1(fp);
- max_m = (INT4)READ_UINT1(fp);
- del_n = (INT4)READ_UINT1(fp);
- max_n = (INT4)READ_UINT1(fp);
+ FT_STREAM_SKIP( 1 );
+ del_m = (INT4)READ_UINT1( stream );
+ max_m = (INT4)READ_UINT1( stream );
+ del_n = (INT4)READ_UINT1( stream );
+ max_n = (INT4)READ_UINT1( stream );
min_m = max_m - del_m;
min_n = max_n - del_n;
break;
default:
- goto Exit;
+ goto Fail;
}
w = max_m - min_m + 1;
@@ -189,16 +150,16 @@
if ((w < 0) || (h < 0))
{
error = FT_THROW( Invalid_File_Format );
- goto Exit;
+ goto Fail;
}
if ((bm->bitmap = (unsigned char*)malloc(h*((w+7)/8))) == NULL)
{
error = FT_THROW( Invalid_File_Format );
- goto Exit;
+ goto Fail;
}
- memclr(bm->bitmap, h*((w+7)/8));
+ memset(bm->bitmap, 0, h*((w+7)/8));
bm->raster = (w+7)/8;
bm->bbx_width = w;
bm->bbx_height = h;
@@ -212,7 +173,7 @@
m = min_m;
n = max_n;
paint_sw = 0;
- while ((instr = (int)READ_UINT1(fp)) != GF_EOC)
+ while ((instr = (int)READ_UINT1( stream )) != GF_EOC)
{
if (instr == GF_PAINT_0)
{
@@ -236,7 +197,7 @@
case GF_PAINT1:
case GF_PAINT2:
case GF_PAINT3:
- d = (UINT4)READ_UINTN(fp, (instr - GF_PAINT1 + 1));
+ d = (UINT4)READ_UINTN( stream, (instr - GF_PAINT1 + 1));
Paint:
if (paint_sw == 0)
@@ -272,7 +233,7 @@
case GF_SKIP2:
case GF_SKIP3:
m = min_m;
- n = n - (UINT4)READ_UINTN(fp, (instr - GF_SKIP1 + 1)) - 1;
+ n = n - (UINT4)READ_UINTN( stream, (instr - GF_SKIP1 + 1)) - 1;
paint_sw = 0;
break;
@@ -280,12 +241,12 @@
case GF_XXX2:
case GF_XXX3:
case GF_XXX4:
- k = READ_UINTN(fp, instr - GF_XXX1 + 1);
- SKIP_N(fp, k);
+ k = READ_UINTN( stream, instr - GF_XXX1 + 1);
+ FT_STREAM_SKIP( k );
break;
case GF_YYY:
- SKIP_N(fp, 4);
+ FT_STREAM_SKIP( 4 );
break;
case GF_NO_OP:
@@ -300,6 +261,9 @@
}
}
+ Fail:
+ return -1;
+
Exit:
return error;
}
@@ -307,10 +271,11 @@
FT_LOCAL_DEF( FT_Error )
gf_load_font( FT_Stream stream,
- GF_Face face )
+ FT_Memory extmemory,
+ GF_Glyph *goptr )
{
- GF_GLYPH go;
- GF_BITMAP bm;
+ GF_Glyph go;
+ GF_Bitmap bm;
UINT1 instr, d;
UINT4 ds, check_sum, hppp, vppp;
INT4 min_m, max_m, min_n, max_n;
@@ -319,18 +284,24 @@
double dx, dy;
long ptr_post, ptr_p, ptr, optr, gptr;
int bc, ec, nchars, i;
- FT_Error error = FT_Err_Ok;
-
- FT_FILE *fp = stream->descriptor.pointer
+ FT_Error error = FT_Err_Ok, error1;
+ FT_Memory memory = extmemory; /* needed for FT_NEW */
+ FT_ULong offset;
+ FT_Byte tp;
go = NULL;
nchars = -1;
/* seek to post_post instr. */
- ft_fseek(fp, -1, SEEK_END);
+ /* fseek(fp, -1, SEEK_END); */
+ FT_STREAM_SEEK( stream->size - 1 );
- while ((d = READ_UINT1(fp)) == 223)
- fseek(fp, -2, SEEK_CUR);
+ while ( d= READ_UINT1( stream ) == 223)
+ FT_STREAM_SEEK( stream->pos -2 );
+ /* fseek(fp, -2, SEEK_CUR); */
+
+ FT_STREAM_SEEK( stream->pos -1 );
+ d= READ_UINT1( stream );
if (d != GF_ID)
{
@@ -338,42 +309,46 @@
goto ErrExit;
}
- fseek(fp, -6, SEEK_CUR);
+ /* fseek(fp, -6, SEEK_CUR); */
+ FT_STREAM_SEEK( stream->pos -6 );
/* check if the code is post_post */
- if (READ_UINT1(fp) != GF_POST_POST)
+ if (READ_UINT1( stream ) != GF_POST_POST)
{
error = FT_THROW( Invalid_File_Format );
goto ErrExit;
}
/* read pointer to post instr. */
- if ((ptr_post = READ_UINT4(fp)) == -1)
+ FT_READ_ULONG( ptr_post );
+ if (ptr_post == -1)
{
error = FT_THROW( Invalid_File_Format );
goto ErrExit;
}
/* goto post instr. and read it */
- fseek(fp, ptr_post, SEEK_SET);
- if (READ_UINT1(fp) != GF_POST)
+ /* fseek(fp, ptr_post, SEEK_SET); */
+ FT_STREAM_SEEK( ptr_post );
+ if (READ_UINT1( stream ) != GF_POST)
{
error = FT_THROW( Invalid_File_Format );
goto ErrExit;
}
- ptr_p = READ_UINT4(fp);
- ds = READ_UINT4(fp);
- check_sum = READ_UINT4(fp);
- hppp = READ_UINT4(fp);
- vppp = READ_UINT4(fp);
- min_m = READ_INT4(fp);
- max_m = READ_INT4(fp);
- min_n = READ_INT4(fp);
- max_n = READ_INT4(fp);
+ FT_READ_ULONG( ptr_p ) ;
+ FT_READ_ULONG( ds ) ;
+ FT_READ_ULONG( check_sum );
+ FT_READ_ULONG( hppp ) ;
+ FT_READ_ULONG( vppp ) ;
+ min_m = READ_INT4( stream );
+ max_m = READ_INT4( stream );
+ min_n = READ_INT4( stream );
+ max_n = READ_INT4( stream );
+ #if 0
gptr = ftell(fp);
-
+ #endif
#if 0
/* read min & max char code */
@@ -412,10 +387,12 @@
#endif
nchars = ec - bc + 1;
- FT_ALLOC(go, GF_GlyphRec)
+ /*go= malloc(sizeof(GF_GlyphRec));*/
+ if( FT_ALLOC(go, sizeof(GF_GlyphRec)) )
goto ErrExit;
- FT_ALLOC_MULT(go->bm_table, GF_BitmapRec, nchars)
+ /*go->bm_table = (GF_Bitmap)malloc(nchars* sizeof(GF_BitmapRec));*/
+ if( FT_ALLOC_MULT(go->bm_table, sizeof(GF_BitmapRec), nchars) )
goto ErrExit;
for (i = 0; i < nchars; i++)
@@ -438,45 +415,46 @@
for ( ; ; )
{
- if ((instr = READ_UINT1(fp)) == GF_POST_POST)
+ if ((instr = READ_UINT1( stream )) == GF_POST_POST)
break;
switch ((int)instr)
{
-
- case GF_CHAR_LOC:
- code = READ_UINT1(fp);
- dx = (double)READ_INT4(fp)/(double)(1<<16);
- dy = (double)READ_INT4(fp)/(double)(1<<16);
- w = READ_INT4(fp);
- ptr = READ_INT4(fp);
- break;
-
- case GF_CHAR_LOC0:
- code = READ_UINT1(fp);
- dx = (double)READ_INT1(fp);
- dy = (double)0;
- w = READ_INT4(fp);
- ptr = READ_INT4(fp);
- break;
-
- default:
- error = FT_THROW( Invalid_File_Format );
- goto ErrExit;
-
+ case GF_CHAR_LOC:
+ code = READ_UINT1( stream );
+ dx = (double)READ_INT4( stream )/(double)(1<<16);
+ dy = (double)READ_INT4( stream )/(double)(1<<16);
+ w = READ_INT4( stream );
+ ptr = READ_INT4( stream );
+ break;
+ case GF_CHAR_LOC0:
+ code = READ_UINT1( stream );
+ dx = (double)READ_INT1( stream );
+ dy = (double)0;
+ w = READ_INT4( stream );
+ ptr = READ_INT4( stream );
+ break;
+ default:
+ error = FT_THROW( Invalid_File_Format );
+ goto ErrExit;
}
- optr = ft_ftell(fp);
- ft_fseek(fp, ptr, SEEK_SET);
+ /* optr = ft_ftell(fp); */
+ optr = stream->pos;
+ /* ft_fseek(fp, ptr, SEEK_SET); */
+ FT_STREAM_SEEK( ptr );
bm = &go->bm_table[code - bc];
- if (gf_read_glyph(fp, bm) < 0)
+ if (gf_read_glyph( stream, bm ) < 0)
goto ErrExit;
bm->mv_x = dx;
bm->mv_y = dy;
- ft_fseek(fp, optr, SEEK_SET);
+ /* ft_fseek(fp, optr, SEEK_SET); */
+ FT_STREAM_SEEK( optr );
}
- return go;
+ *goptr = go;
+
+ return error;
ErrExit:
printf("*ERROR\n");
@@ -495,8 +473,9 @@
FT_LOCAL_DEF( void )
- gf_free_font( GF_Glyph gf_glyph )
+ gf_free_font( GF_Glyph go, FT_Memory memory )
{
+ int i=0, nchars =sizeof(go->bm_table);
if (go != NULL)
{
if (go->bm_table != NULL)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2] parthw-cleaned 5f44029: [gf] FT stream support for gf driver.,
Parth Wazurkar <=