shithub: freetype+ttf2subf

Download patch

ref: 53ecd88986141e0e207e48f5fba8803c1d8621b7
parent: 332bc3212572a75aedf436693a508f4ed42aec81
author: Werner Lemberg <[email protected]>
date: Wed Jan 3 01:38:54 EST 2001

Initial revision

git/fs: mount .git/fs: mount/attach disallowed
--- /dev/null
+++ b/builds/vms/descrip.mms
@@ -1,0 +1,25 @@
+#
+# FreeType 2 system rules for VMS
+#
+
+
+# Copyright 2001 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([],[--.include],[--.src.base])
+
+OBJS=ftsystem.obj
+
+all : $(OBJS)
+	library/create [--.lib]freetype.olb $(OBJS)
+
+ftsystem.obj : ftsystem.c ftconfig.h
+
+# EOF
--- /dev/null
+++ b/builds/vms/ftconfig.h
@@ -1,0 +1,238 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftconfig.h                                                             */
+/*                                                                         */
+/*    VMS-specific configuration file (specification only).                */
+/*                                                                         */
+/*  Copyright 1996-2000 by                                                 */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This header file contains a number of macro definitions that are used */
+  /* by the rest of the engine.  Most of the macros here are automatically */
+  /* determined at compile time, and you should not need to change it to   */
+  /* port FreeType, except to compile the library with a non-ANSI          */
+  /* compiler.                                                             */
+  /*                                                                       */
+  /* Note however that if some specific modifications are needed, we       */
+  /* advise you to place a modified copy in your build directory.          */
+  /*                                                                       */
+  /* The build directory is usually `freetype/builds/<system>', and        */
+  /* contains system-specific files that are always included first when    */
+  /* building the library.                                                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef FTCONFIG_H
+#define FTCONFIG_H
+
+
+  /* Include the header file containing all developer build options */
+#include <ft2build.h>
+#include FT_CONFIG_OPTIONS_H
+
+FT_BEGIN_HEADER
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*               PLATFORM-SPECIFIC CONFIGURATION MACROS                  */
+  /*                                                                       */
+  /* These macros can be toggled to suit a specific system.  The current   */
+  /* ones are defaults used to compile FreeType in an ANSI C environment   */
+  /* (16bit compilers are also supported).  Copy this file to your own     */
+  /* `freetype/builds/<system>' directory, and edit it to port the engine. */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#define HAVE_UNISTD_H  1
+#define HAVE_FCNTL_H   1
+
+#define SIZEOF_INT   4
+#define SIZEOF_LONG  4
+
+
+#define FT_SIZEOF_INT  4
+#define FT_SIZEOF_LONG 4
+
+
+  /* Preferred alignment of data */
+#define FT_ALIGNMENT  8
+
+
+  /* UNUSED is a macro used to indicate that a given parameter is not used */
+  /* -- this is only used to get rid of unpleasant compiler warnings       */
+#ifndef FT_UNUSED
+#define FT_UNUSED( arg )  ( (arg) = (arg) )
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                     AUTOMATIC CONFIGURATION MACROS                    */
+  /*                                                                       */
+  /* These macros are computed from the ones defined above.  Don't touch   */
+  /* their definition, unless you know precisely what you are doing.  No   */
+  /* porter should need to mess with them.                                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* IntN types                                                            */
+  /*                                                                       */
+  /*   Used to guarantee the size of some specific integers.               */
+  /*                                                                       */
+  typedef signed short    FT_Int16;
+  typedef unsigned short  FT_UInt16;
+
+#if FT_SIZEOF_INT == 4
+
+  typedef signed int      FT_Int32;
+  typedef unsigned int    FT_UInt32;
+
+#elif FT_SIZEOF_LONG == 4
+
+  typedef signed long     FT_Int32;
+  typedef unsigned long   FT_UInt32;
+
+#else
+#error "no 32bit type found -- please check your configuration files"
+#endif
+
+#if FT_SIZEOF_LONG == 8
+
+  /* FT_LONG64 must be defined if a 64-bit type is available */
+#define FT_LONG64
+#define FT_INT64   long
+
+#else
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Many compilers provide the non-ANSI `long long' 64-bit type.  You can */
+  /* activate it by defining the FTCALC_USE_LONG_LONG macro in             */
+  /* `ftoption.h'.                                                         */
+  /*                                                                       */
+  /* Note that this will produce many -ansi warnings during library        */
+  /* compilation, and that in many cases,  the generated code will be      */
+  /* neither smaller nor faster!                                           */
+  /*                                                                       */
+#ifdef FTCALC_USE_LONG_LONG
+
+#define FT_LONG64
+#define FT_INT64   long long
+
+#endif /* FTCALC_USE_LONG_LONG */
+#endif /* FT_SIZEOF_LONG == 8 */
+
+
+#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
+
+#define LOCAL_DEF   static
+#define LOCAL_FUNC  static
+
+#else
+
+#ifdef __cplusplus
+#define LOCAL_DEF   extern "C"
+#define LOCAL_FUNC  extern "C"
+#else
+#define LOCAL_DEF   extern
+#define LOCAL_FUNC  extern
+#endif
+
+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
+
+#ifndef FT_BASE
+
+#ifdef __cplusplus
+#define FT_BASE( x )  extern "C"  x
+#else
+#define FT_BASE( x )  extern  x
+#endif
+
+#endif /* !FT_BASE */
+
+#ifndef BASE_DEF
+
+#ifdef __cplusplus
+#define BASE_DEF( x )  extern "C"  x
+#else
+#define BASE_DEF( x )  extern  x
+#endif
+
+#endif /* !BASE_DEF */
+
+
+#ifndef FT_EXPORT
+
+#ifdef __cplusplus
+#define FT_EXPORT( x )  extern "C"  x
+#else
+#define FT_EXPORT( x )  extern  x
+#endif
+
+#endif /* !FT_EXPORT */
+
+#ifndef FT_EXPORT_DEF
+
+#ifdef __cplusplus
+#define FT_EXPORT_DEF( x )  extern "C"  x
+#else
+#define FT_EXPORT_DEF( x )  extern  x
+#endif
+
+#endif /* !FT_EXPORT_DEF */
+
+
+#ifndef FT_EXPORT_VAR
+
+#ifdef __cplusplus
+#define FT_EXPORT_VAR( x )  extern "C"  x
+#else
+#define FT_EXPORT_VAR( x )  extern  x
+#endif
+
+#endif /* !FT_EXPORT_VAR */
+
+
+  /* This is special.  Within C++, you must specify `extern "C"' for */
+  /* functions which are used via function pointers, and you also    */
+  /* must do that for structures which contain function pointers to  */
+  /* assure C linkage -- it's not possible to have (local) anonymous */
+  /* functions which are accessed by (global) function pointers.     */
+  /*                                                                 */
+#ifdef __cplusplus
+
+#define FT_CALLBACK_DEF             extern "C"
+#define FT_CALLBACK_TABLE           extern "C"
+#define FT_CALLBACK_TABLE_DEF       extern "C"
+
+#else
+
+#define FT_CALLBACK_DEF             static
+#define FT_CALLBACK_TABLE           extern
+#define FT_CALLBACK_TABLE_DEF
+
+#endif /* __cplusplus */
+
+FT_END_HEADER
+
+#endif /* FTCONFIG_H */
+
+
+/* END */
--- /dev/null
+++ b/builds/vms/ftsystem.c
@@ -1,0 +1,300 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftsystem.c                                                             */
+/*                                                                         */
+/*    Unix-specific FreeType low-level system interface (body).            */
+/*                                                                         */
+/*  Copyright 1996-2000 by                                                 */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+/* we use our special ftconfig.h file, not the standard one */
+#include <ftconfig.h>
+#include FT_INTERNAL_DEBUG_H
+#include FT_SYSTEM_H
+#include FT_ERRORS_H
+#include FT_TYPES_H
+#include FT_INTERNAL_OBJECTS_H
+
+  /* memory-mapping includes and definitions */
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <sys/mman.h>
+#ifndef MAP_FILE
+#define MAP_FILE  0x00
+#endif
+
+#ifdef MUNMAP_USES_VOIDP
+#define MUNMAP_ARG_CAST  void *
+#else
+#define MUNMAP_ARG_CAST  char *
+#endif
+
+#ifdef NEED_MUNMAP_DECL
+
+#ifdef __cplusplus
+  extern "C"
+#else
+  extern
+#endif
+  int  munmap( char*  addr,
+               int    len );
+
+#define MUNMAP_ARG_CAST  char *
+
+#endif /* NEED_DECLARATION_MUNMAP */
+
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                       MEMORY MANAGEMENT INTERFACE                     */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    ft_alloc                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The memory allocation function.                                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    memory :: A pointer to the memory object.                          */
+  /*                                                                       */
+  /*    size   :: The requested size in bytes.                             */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The address of newly allocated block.                              */
+  /*                                                                       */
+  FT_CALLBACK_DEF
+  void*  ft_alloc( FT_Memory  memory,
+                   long       size )
+  {
+    FT_UNUSED( memory );
+
+    return malloc( size );
+  }
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    ft_realloc                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The memory reallocation function.                                  */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    memory   :: A pointer to the memory object.                        */
+  /*                                                                       */
+  /*    cur_size :: The current size of the allocated memory block.        */
+  /*                                                                       */
+  /*    new_size :: The newly requested size in bytes.                     */
+  /*                                                                       */
+  /*    block    :: The current address of the block in memory.            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The address of the reallocated memory block.                       */
+  /*                                                                       */
+  FT_CALLBACK_DEF
+  void*  ft_realloc( FT_Memory  memory,
+                     long       cur_size,
+                     long       new_size,
+                     void*      block )
+  {
+    FT_UNUSED( memory );
+    FT_UNUSED( cur_size );
+
+    return realloc( block, new_size );
+  }
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    ft_free                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The memory release function.                                       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    memory  :: A pointer to the memory object.                         */
+  /*                                                                       */
+  /*    block   :: The address of block in memory to be freed.             */
+  /*                                                                       */
+  FT_CALLBACK_DEF
+  void  ft_free( FT_Memory  memory,
+                 void*      block )
+  {
+    FT_UNUSED( memory );
+
+    free( block );
+  }
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                     RESOURCE MANAGEMENT INTERFACE                     */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
+  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
+  /* messages during execution.                                            */
+  /*                                                                       */
+#undef  FT_COMPONENT
+#define FT_COMPONENT  trace_io
+
+  /* We use the macro STREAM_FILE for convenience to extract the       */
+  /* system-specific stream handle from a given FreeType stream object */
+#define STREAM_FILE( stream )  ( (FILE*)stream->descriptor.pointer )
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    ft_close_stream                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The function to close a stream.                                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    stream :: A pointer to the stream object.                          */
+  /*                                                                       */
+  FT_CALLBACK_DEF
+  void  ft_close_stream( FT_Stream  stream )
+  {
+    munmap( (MUNMAP_ARG_CAST)stream->descriptor.pointer, stream->size );
+
+    stream->descriptor.pointer = NULL;
+    stream->size               = 0;
+    stream->base               = 0;
+  }
+
+
+  /* documentation is in ftobjs.h */
+
+  FT_EXPORT_DEF( FT_Error )  FT_New_Stream( const char*  filepathname,
+                                            FT_Stream    stream )
+  {
+    int          file;
+    struct stat  stat_buf;
+
+
+    if ( !stream )
+      return FT_Err_Invalid_Stream_Handle;
+
+    /* open the file */
+    file = open( filepathname, O_RDONLY );
+    if ( file < 0 )
+    {
+      FT_ERROR(( "FT_New_Stream:" ));
+      FT_ERROR(( " could not open `%s'\n", filepathname ));
+      return FT_Err_Cannot_Open_Resource;
+    }
+
+    if ( fstat( file, &stat_buf ) < 0 )
+    {
+      FT_ERROR(( "FT_New_Stream:" ));
+      FT_ERROR(( " could not `fstat' file `%s'\n", filepathname ));
+      goto Fail_Map;
+    }
+
+    stream->size = stat_buf.st_size;
+    stream->pos  = 0;
+    stream->base = (unsigned char *)mmap( NULL,
+                                          stream->size,
+                                          PROT_READ,
+                                          MAP_FILE | MAP_PRIVATE,
+                                          file,
+                                          0 );
+
+    if ( (long)stream->base == -1 )
+    {
+      FT_ERROR(( "FT_New_Stream:" ));
+      FT_ERROR(( " could not `mmap' file `%s'\n", filepathname ));
+      goto Fail_Map;
+    }
+
+    close( file );
+
+    stream->descriptor.pointer = stream->base;
+    stream->pathname.pointer   = (char*)filepathname;
+
+    stream->close = ft_close_stream;
+    stream->read  = 0;
+
+    FT_TRACE1(( "FT_New_Stream:" ));
+    FT_TRACE1(( " opened `%s' (%d bytes) successfully\n",
+                filepathname, stream->size ));
+
+    return FT_Err_Ok;
+
+  Fail_Map:
+    close( file );
+
+    stream->base = NULL;
+    stream->size = 0;
+    stream->pos  = 0;
+
+    return FT_Err_Cannot_Open_Stream;
+  }
+
+
+  /* documentation is in ftobjs.h */
+
+  FT_EXPORT_DEF( FT_Memory )  FT_New_Memory( void )
+  {
+    FT_Memory  memory;
+
+
+    memory = (FT_Memory)malloc( sizeof ( *memory ) );
+    if ( memory )
+    {
+      memory->user    = 0;
+      memory->alloc   = ft_alloc;
+      memory->realloc = ft_realloc;
+      memory->free    = ft_free;
+    }
+
+    return memory;
+  }
+
+
+  /* documentation is in ftobjs.h */
+
+  FT_EXPORT_DEF( void )  FT_Done_Memory( FT_Memory  memory )
+  {
+    memory->free( memory, memory );
+  }
+
+
+/* END */