Edit

kc3-lang/freetype/src/pshinter/pshmod.c

Branch :

  • Show log

    Commit

  • Author : Oran Agra
    Date : 2009-04-05 18:20:16
    Hash : 4e711be9
    Message : Position Independent Code (PIC) support in pshinter module. * include/freetype/internal/pshints.h add macros to init instances of PSHinter_Interface. * src/pshinter/pshmod.h declare pshinter_module_class using macros from ftmodapi.h, when FT_CONFIG_OPTION_PIC is defined create and destroy functions will be declared. * src/pshinter/pshmod.c when FT_CONFIG_OPTION_PIC is defined pshinter_interface and pshinter_module_class structs will have functions to init or create and destroy them instead of being allocated in the global scope. And macros will be used from pshpic.h in order to access them. New Files: * src/pshinter/pshpic.h declare struct to hold PIC globals for pshinter module and macros to access them. * src/pshinter/pshpic.c implement functions to allocate, destroy and initialize PIC globals for pshinter module. * src/pshinter/pshinter.c add new file to build: pshpic.c. * src/pshinter/jamfile add new files to FT2_MULTI build: pshpic.c.

  • src/pshinter/pshmod.c
  • /***************************************************************************/
    /*                                                                         */
    /*  pshmod.c                                                               */
    /*                                                                         */
    /*    FreeType PostScript hinter module implementation (body).             */
    /*                                                                         */
    /*  Copyright 2001, 2002, 2007 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>
    #include FT_INTERNAL_OBJECTS_H
    #include "pshrec.h"
    #include "pshalgo.h"
    #include "pshpic.h"
    
    
      /* the Postscript Hinter module structure */
      typedef struct  PS_Hinter_Module_Rec_
      {
        FT_ModuleRec          root;
        PS_HintsRec           ps_hints;
    
        PSH_Globals_FuncsRec  globals_funcs;
        T1_Hints_FuncsRec     t1_funcs;
        T2_Hints_FuncsRec     t2_funcs;
    
      } PS_Hinter_ModuleRec, *PS_Hinter_Module;
    
    
      /* finalize module */
      FT_CALLBACK_DEF( void )
      ps_hinter_done( PS_Hinter_Module  module )
      {
        module->t1_funcs.hints = NULL;
        module->t2_funcs.hints = NULL;
    
        ps_hints_done( &module->ps_hints );
      }
    
    
      /* initialize module, create hints recorder and the interface */
      FT_CALLBACK_DEF( FT_Error )
      ps_hinter_init( PS_Hinter_Module  module )
      {
        FT_Memory  memory = module->root.memory;
        void*      ph     = &module->ps_hints;
    
    
        ps_hints_init( &module->ps_hints, memory );
    
        psh_globals_funcs_init( &module->globals_funcs );
    
        t1_hints_funcs_init( &module->t1_funcs );
        module->t1_funcs.hints = (T1_Hints)ph;
    
        t2_hints_funcs_init( &module->t2_funcs );
        module->t2_funcs.hints = (T2_Hints)ph;
    
        return 0;
      }
    
    
      /* returns global hints interface */
      FT_CALLBACK_DEF( PSH_Globals_Funcs )
      pshinter_get_globals_funcs( FT_Module  module )
      {
        return &((PS_Hinter_Module)module)->globals_funcs;
      }
    
    
      /* return Type 1 hints interface */
      FT_CALLBACK_DEF( T1_Hints_Funcs )
      pshinter_get_t1_funcs( FT_Module  module )
      {
        return &((PS_Hinter_Module)module)->t1_funcs;
      }
    
    
      /* return Type 2 hints interface */
      FT_CALLBACK_DEF( T2_Hints_Funcs )
      pshinter_get_t2_funcs( FT_Module  module )
      {
        return &((PS_Hinter_Module)module)->t2_funcs;
      }
    
    
      FT_DEFINE_PSHINTER_INTERFACE(pshinter_interface,
        pshinter_get_globals_funcs,
        pshinter_get_t1_funcs,
        pshinter_get_t2_funcs
      )
    
    
      FT_DEFINE_MODULE(pshinter_module_class,
    
        0,
        sizeof ( PS_Hinter_ModuleRec ),
        "pshinter",
        0x10000L,
        0x20000L,
    
        &FTPSHINTER_INTERFACE_GET,            /* module-specific interface */
    
        (FT_Module_Constructor)ps_hinter_init,
        (FT_Module_Destructor) ps_hinter_done,
        (FT_Module_Requester)  0        /* no additional interface for now */
      )
    
    /* END */