1/***************************************************************************/
2/*                                                                         */
3/*  pshpic.c                                                               */
4/*                                                                         */
5/*    The FreeType position independent code services for pshinter module. */
6/*                                                                         */
7/*  Copyright 2009, 2010, 2012, 2013 by                                    */
8/*  Oran Agra and Mickey Gabel.                                            */
9/*                                                                         */
10/*  This file is part of the FreeType project, and may only be used,       */
11/*  modified, and distributed under the terms of the FreeType project      */
12/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13/*  this file you indicate that you have read the license and              */
14/*  understand and accept it fully.                                        */
15/*                                                                         */
16/***************************************************************************/
17
18
19#include "../../include/ft2build.h"
20#include "../../include/freetype/freetype.h"
21#include "../../include/freetype/internal/ftobjs.h"
22#include "pshpic.h"
23#include "pshnterr.h"
24
25
26#ifdef FT_CONFIG_OPTION_PIC
27
28  /* forward declaration of PIC init functions from pshmod.c */
29  void
30  FT_Init_Class_pshinter_interface( FT_Library           library,
31                                    PSHinter_Interface*  clazz );
32
33  void
34  pshinter_module_class_pic_free( FT_Library  library )
35  {
36    FT_PIC_Container*  pic_container = &library->pic_container;
37    FT_Memory          memory        = library->memory;
38
39
40    if ( pic_container->pshinter )
41    {
42      FT_FREE( pic_container->pshinter );
43      pic_container->pshinter = NULL;
44    }
45  }
46
47
48  FT_Error
49  pshinter_module_class_pic_init( FT_Library  library )
50  {
51    FT_PIC_Container*  pic_container = &library->pic_container;
52    FT_Error           error         = FT_Err_Ok;
53    PSHinterPIC*       container     = NULL;
54    FT_Memory          memory        = library->memory;
55
56
57    /* allocate pointer, clear and set global container pointer */
58    if ( FT_ALLOC( container, sizeof ( *container ) ) )
59      return error;
60    FT_MEM_SET( container, 0, sizeof ( *container ) );
61    pic_container->pshinter = container;
62
63    /* add call to initialization function when you add new scripts */
64    FT_Init_Class_pshinter_interface(
65      library, &container->pshinter_interface );
66
67    if ( error )
68      pshinter_module_class_pic_free( library );
69
70    return error;
71  }
72
73#endif /* FT_CONFIG_OPTION_PIC */
74
75
76/* END */
77