diff options
Diffstat (limited to 'gs/base/wrfont.c')
-rw-r--r-- | gs/base/wrfont.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/gs/base/wrfont.c b/gs/base/wrfont.c new file mode 100644 index 000000000..69b8ee806 --- /dev/null +++ b/gs/base/wrfont.c @@ -0,0 +1,86 @@ +/* Copyright (C) 2001-2012 Artifex Software, Inc. + All Rights Reserved. + + This software is provided AS-IS with no warranty, either express or + implied. + + This software is distributed under license and may not be copied, + modified or distributed except as expressly authorized under the terms + of the license contained in the file LICENSE in this distribution. + + Refer to licensing information at http://www.artifex.com or contact + Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, San Rafael, + CA 94903, U.S.A., +1(415)492-9861, for further information. +*/ + +/* +Support functions to serialize fonts as PostScript code that can +then be passed to FreeType via the FAPI FreeType bridge. +Started by Graham Asher, 9th August 2002. +*/ + +#include "wrfont.h" +#include "stdio_.h" + +#define EEXEC_KEY 55665 +#define EEXEC_FACTOR 52845 +#define EEXEC_OFFSET 22719 + +void +WRF_init(WRF_output * a_output, unsigned char *a_buffer, long a_buffer_size) +{ + a_output->m_pos = a_buffer; + a_output->m_limit = a_buffer_size; + a_output->m_count = 0; + a_output->m_encrypt = false; + a_output->m_key = EEXEC_KEY; +} + +void +WRF_wbyte(WRF_output * a_output, unsigned char a_byte) +{ + if (a_output->m_count < a_output->m_limit) { + if (a_output->m_encrypt) { + a_byte ^= (a_output->m_key >> 8); + a_output->m_key = + (unsigned short)((a_output->m_key + a_byte) * EEXEC_FACTOR + + EEXEC_OFFSET); + } + *a_output->m_pos++ = a_byte; + } + a_output->m_count++; +} + +void +WRF_wtext(WRF_output * a_output, const unsigned char *a_string, long a_length) +{ + while (a_length > 0) { + WRF_wbyte(a_output, *a_string++); + a_length--; + } +} + +void +WRF_wstring(WRF_output * a_output, const char *a_string) +{ + while (*a_string) + WRF_wbyte(a_output, *a_string++); +} + +void +WRF_wfloat(WRF_output * a_output, double a_float) +{ + char buffer[32]; + + sprintf(buffer, "%f", a_float); + WRF_wstring(a_output, buffer); +} + +void +WRF_wint(WRF_output * a_output, long a_int) +{ + char buffer[32]; + + sprintf(buffer, "%ld", a_int); + WRF_wstring(a_output, buffer); +} |