freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Devel] New FreeType error management


From: Werner LEMBERG
Subject: [Devel] New FreeType error management
Date: Thu, 10 May 2001 10:31:55 +0200 (CEST)

Dear friends,


as promised earlier, I've implemented a new error management.
Currently, error codes returned by FreeType are rather erratic.  The
destinction between `core' errors, defined in fterrors.h, and `module'
errors, defined in the (internal!) files tterrors.h, t1errors.h,
etc. is bad for at least two reasons:

  . The user isn't supposed to look into the `internal' subdirectory
    at all to find an error code.

  . The code to build an error message table in fterrors.h fails for
    module errors.

My implementation changes this as follows:

  . All errors will be defined in fterrors.h.  The available slots are
    0x00-0xFF.

  . The upper byte is used to identify the module.  For example, the
    `base' module has offset 0x000, `autohint' has 0x100, ...,
    `TrueType' has 0xB00, etc.  Such offsets doesn't apply to the
    no-error code which is always zero.

This means that an application can mask the returned error value with
0x00FF to get the `real' error code (to be looked up in fterrors.h)
and with 0xFF00 to get the specific module in which the error has
happened (to be looked up in the new file ftmoderr.h).

Internally, each module gets a specific error prefix.  Example:

  FT_Err_Invalid_File_Format  ->  0x003
  TT_Err_Invalid_File_Format  ->  0xB03
  T1_Err_Invalid_File_Format  ->  0xC03

The code in fterrors.h has been slightly modified to handle prefixes
and module offsets.


Before really converting everything to this new scheme I've tested it
with the autohint module (see attached patch).  It seems to work
without problems.  Later on, the files include/internal/*errors.h will
be removed; files like src/autohint/aherrors.h,
src/winfonts/wnerrors.h, etc. will be added, and all error messages
will be moved to fterrors.h.

Please comment.


    Werner
diff -aruN -x CVS -x *.o -x *.a 
freetype2.old/include/freetype/config/ftheader.h 
freetype2/include/freetype/config/ftheader.h
--- freetype2.old/include/freetype/config/ftheader.h    Thu Apr 26 09:28:25 2001
+++ freetype2/include/freetype/config/ftheader.h        Thu May 10 09:58:09 2001
@@ -167,6 +167,18 @@
   /*************************************************************************/
   /*                                                                       */
   /* @macro:                                                               */
+  /*    FT_MODULE_ERRORS_H                                                 */
+  /*                                                                       */
+  /* @description:                                                         */
+  /*    A macro used in #include statements to name the file containing    */
+  /*    the list of FreeType 2 module error offsets (and messages).        */
+  /*                                                                       */
+#define FT_MODULE_ERRORS_H  <freetype/ftmoderr.h>
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* @macro:                                                               */
   /*    FT_SYSTEM_H                                                        */
   /*                                                                       */
   /* @description:                                                         */
diff -aruN -x CVS -x *.o -x *.a freetype2.old/include/freetype/fterrors.h 
freetype2/include/freetype/fterrors.h
--- freetype2.old/include/freetype/fterrors.h   Fri Dec  8 15:51:48 2000
+++ freetype2/include/freetype/fterrors.h       Thu May 10 10:25:44 2001
@@ -19,14 +19,22 @@
   /*************************************************************************/
   /*                                                                       */
   /* This file is used to define the FreeType error enumeration constants. */
+  /*                                                                       */
+  /* The lower byte gives the error code, the higher byte gives the        */
+  /* module.  The base module has error offset 0.  For example, the error  */
+  /* `FT_Err_Invalid_File_Format' has value 0x003, the error               */
+  /* `TT_Err_Invalid_File_Format' has value 0xB03, the error               */
+  /* `T1_Err_Invalid_File_Format' has value 0xC03, etc.                    */
+  /*                                                                       */
   /* It can also be used to create an error message table easily with      */
   /* something like                                                        */
   /*                                                                       */
   /*   {                                                                   */
   /*     #undef __FTERRORS_H__                                             */
-  /*     #define FT_ERRORDEF( e, v, s )  { e, s },                         */
-  /*     #define FT_ERROR_START_LIST  {                                    */
-  /*     #define FT_ERROR_END_LIST    { 0, 0 } };                          */
+  /*     #define FT_ERRORDEF( e, v, s )   { FT_Err_ ## e, s },             */
+  /*     #define FT_NOERRORDEF( e, v, s ) { FT_Err_ ## e, s },             */
+  /*     #define FT_ERROR_START_LIST      {                                */
+  /*     #define FT_ERROR_END_LIST        { 0, 0 } };                      */
   /*                                                                       */
   /*     const struct                                                      */
   /*     {                                                                 */
@@ -37,8 +45,8 @@
   /*     #include FT_ERRORS_H                                              */
   /*   }                                                                   */
   /*                                                                       */
-  /* For C++ it might be necessary to use `extern "C" {' and to define     */
-  /* FT_NEED_EXTERN_C also.                                                */
+  /* To use such a table, all errors must be ANDed with 0x00FF to remove   */
+  /* the module error offset.                                              */
   /*                                                                       */
   /*************************************************************************/
 
@@ -46,15 +54,18 @@
 #ifndef __FTERRORS_H__
 #define __FTERRORS_H__
 
+#include FT_MODULE_ERRORS_H
 
 #undef FT_NEED_EXTERN_C
 
 
 #ifndef FT_ERRORDEF
 
-#define FT_ERRORDEF( e, v, s )  e = v,
-#define FT_ERROR_START_LIST     enum {
-#define FT_ERROR_END_LIST       FT_Err_Max };
+#define FT_ERRORDEF( e, v, s )    FT_Err_ ## e = v + FT_Mod_Err_Base,
+#define FT_NOERRORDEF( e, v, s )  FT_Err_ ## e = v,
+
+#define FT_ERROR_START_LIST       enum {
+#define FT_ERROR_END_LIST         FT_Err_Max };
 
 #ifdef __cplusplus
 #define FT_NEED_EXTERN_C
@@ -68,119 +79,116 @@
   FT_ERROR_START_LIST
 #endif
 
+
   /* generic errors */
 
-  FT_ERRORDEF( FT_Err_Ok,                           0x0000, \
-               "no error" )
-  FT_ERRORDEF( FT_Err_Cannot_Open_Resource,         0x0001, \
+  FT_NOERRORDEF( Ok,                                0x00, \
+                 "no error" )
+
+  FT_ERRORDEF( Cannot_Open_Resource,                0x01, \
                "cannot open resource" )
-  FT_ERRORDEF( FT_Err_Unknown_File_Format,          0x0002, \
+  FT_ERRORDEF( Unknown_File_Format,                 0x02, \
                "unknown file format" )
-  FT_ERRORDEF( FT_Err_Invalid_File_Format,          0x0003, \
+  FT_ERRORDEF( Invalid_File_Format,                 0x03, \
                "broken file" )
-  FT_ERRORDEF( FT_Err_Invalid_Version,              0x0004, \
+  FT_ERRORDEF( Invalid_Version,                     0x04, \
                "invalid FreeType version" )
-  FT_ERRORDEF( FT_Err_Lower_Module_Version,         0x0005, \
+  FT_ERRORDEF( Lower_Module_Version,                0x05, \
                "module version is too low" )
-  FT_ERRORDEF( FT_Err_Invalid_Argument,             0x0006, \
+  FT_ERRORDEF( Invalid_Argument,                    0x06, \
                "invalid argument" )
-  FT_ERRORDEF( FT_Err_Unimplemented_Feature,        0x0007, \
+  FT_ERRORDEF( Unimplemented_Feature,               0x07, \
                "unimplemented feature" )
 
   /* glyph/character errors */
 
-  FT_ERRORDEF( FT_Err_Invalid_Glyph_Index,          0x0010, \
+  FT_ERRORDEF( Invalid_Glyph_Index,                 0x10, \
                "invalid glyph index" )
-  FT_ERRORDEF( FT_Err_Invalid_Character_Code,       0x0011, \
+  FT_ERRORDEF( Invalid_Character_Code,              0x11, \
                "invalid character code" )
-  FT_ERRORDEF( FT_Err_Invalid_Glyph_Format,         0x0012, \
+  FT_ERRORDEF( Invalid_Glyph_Format,                0x12, \
                "unsupported glyph image format" )
-  FT_ERRORDEF( FT_Err_Cannot_Render_Glyph,          0x0013, \
+  FT_ERRORDEF( Cannot_Render_Glyph,                 0x13, \
                "cannot render this glyph format" )
-  FT_ERRORDEF( FT_Err_Invalid_Outline,              0x0014, \
+  FT_ERRORDEF( Invalid_Outline,                     0x14, \
                "invalid outline" )
-  FT_ERRORDEF( FT_Err_Invalid_Composite,            0x0015, \
+  FT_ERRORDEF( Invalid_Composite,                   0x15, \
                "invalid composite glyph" )
-  FT_ERRORDEF( FT_Err_Too_Many_Hints,               0x0016, \
+  FT_ERRORDEF( Too_Many_Hints,                      0x16, \
                "too many hints" )
-  FT_ERRORDEF( FT_Err_Invalid_Pixel_Size,           0x0017, \
+  FT_ERRORDEF( Invalid_Pixel_Size,                  0x17, \
                "invalid pixel size" )
 
   /* handle errors */
 
-  FT_ERRORDEF( FT_Err_Invalid_Handle,               0x0020, \
+  FT_ERRORDEF( Invalid_Handle,                      0x20, \
                "invalid object handle" )
-  FT_ERRORDEF( FT_Err_Invalid_Library_Handle,       0x0021, \
+  FT_ERRORDEF( Invalid_Library_Handle,              0x21, \
                "invalid library handle" )
-  FT_ERRORDEF( FT_Err_Invalid_Driver_Handle,        0x0022, \
+  FT_ERRORDEF( Invalid_Driver_Handle,               0x22, \
                "invalid module handle" )
-  FT_ERRORDEF( FT_Err_Invalid_Face_Handle,          0x0023, \
+  FT_ERRORDEF( Invalid_Face_Handle,                 0x23, \
                "invalid face handle" )
-  FT_ERRORDEF( FT_Err_Invalid_Size_Handle,          0x0024, \
+  FT_ERRORDEF( Invalid_Size_Handle,                 0x24, \
                "invalid size handle" )
-  FT_ERRORDEF( FT_Err_Invalid_Slot_Handle,          0x0025, \
+  FT_ERRORDEF( Invalid_Slot_Handle,                 0x25, \
                "invalid glyph slot handle" )
-  FT_ERRORDEF( FT_Err_Invalid_CharMap_Handle,       0x0026, \
+  FT_ERRORDEF( Invalid_CharMap_Handle,              0x26, \
                "invalid charmap handle" )
-  FT_ERRORDEF( FT_Err_Invalid_Cache_Handle,         0x0027, \
+  FT_ERRORDEF( Invalid_Cache_Handle,                0x27, \
                "invalid cache manager handle" )
-  FT_ERRORDEF( FT_Err_Invalid_Stream_Handle,        0x0028, \
+  FT_ERRORDEF( Invalid_Stream_Handle,               0x28, \
                "invalid stream handle" )
 
   /* driver errors */
 
-  FT_ERRORDEF( FT_Err_Too_Many_Drivers,             0x0030, \
+  FT_ERRORDEF( Too_Many_Drivers,                    0x30, \
                "too many modules" )
-  FT_ERRORDEF( FT_Err_Too_Many_Extensions,          0x0031, \
+  FT_ERRORDEF( Too_Many_Extensions,                 0x31, \
                "too many extensions" )
 
   /* memory errors */
 
-  FT_ERRORDEF( FT_Err_Out_Of_Memory,                0x0040, \
+  FT_ERRORDEF( Out_Of_Memory,                       0x40, \
                "out of memory" )
-  FT_ERRORDEF( FT_Err_Unlisted_Object,              0x0041, \
+  FT_ERRORDEF( Unlisted_Object,                     0x41, \
                "unlisted object" )
 
   /* stream errors */
 
-  FT_ERRORDEF( FT_Err_Cannot_Open_Stream,           0x0051, \
+  FT_ERRORDEF( Cannot_Open_Stream,                  0x51, \
                "cannot open stream" )
-  FT_ERRORDEF( FT_Err_Invalid_Stream_Seek,          0x0052, \
+  FT_ERRORDEF( Invalid_Stream_Seek,                 0x52, \
                "invalid stream seek" )
-  FT_ERRORDEF( FT_Err_Invalid_Stream_Skip,          0x0053, \
+  FT_ERRORDEF( Invalid_Stream_Skip,                 0x53, \
                "invalid stream skip" )
-  FT_ERRORDEF( FT_Err_Invalid_Stream_Read,          0x0054, \
+  FT_ERRORDEF( Invalid_Stream_Read,                 0x54, \
                "invalid stream read" )
-  FT_ERRORDEF( FT_Err_Invalid_Stream_Operation,     0x0055, \
+  FT_ERRORDEF( Invalid_Stream_Operation,            0x55, \
                "invalid stream operation" )
-  FT_ERRORDEF( FT_Err_Invalid_Frame_Operation,      0x0056, \
+  FT_ERRORDEF( Invalid_Frame_Operation,             0x56, \
                "invalid frame operation" )
-  FT_ERRORDEF( FT_Err_Nested_Frame_Access,          0x0057, \
+  FT_ERRORDEF( Nested_Frame_Access,                 0x57, \
                "nested frame access" )
-  FT_ERRORDEF( FT_Err_Invalid_Frame_Read,           0x0058, \
+  FT_ERRORDEF( Invalid_Frame_Read,                  0x58, \
                "invalid frame read" )
 
   /* raster errors */
 
-  FT_ERRORDEF( FT_Err_Raster_Uninitialized,         0x0060, \
+  FT_ERRORDEF( Raster_Uninitialized,                0x60, \
                "raster uninitialized" )
-  FT_ERRORDEF( FT_Err_Raster_Corrupted,             0x0061, \
+  FT_ERRORDEF( Raster_Corrupted,                    0x61, \
                "raster corrupted" )
-  FT_ERRORDEF( FT_Err_Raster_Overflow,              0x0062, \
+  FT_ERRORDEF( Raster_Overflow,                     0x62, \
                "raster overflow" )
-  FT_ERRORDEF( FT_Err_Raster_Negative_Height,       0x0063, \
+  FT_ERRORDEF( Raster_Negative_Height,              0x63, \
                "negative height while rastering" )
 
   /* cache errors */
 
-  FT_ERRORDEF( FT_Err_Too_Many_Caches,              0x0070, \
+  FT_ERRORDEF( Too_Many_Caches,                     0x70, \
                "too many registered caches" )
 
-  /* range 0x400 - 0x4FF is reserved for TrueType specific stuff */
-
-  /* range 0x500 - 0x5FF is reserved for CFF specific stuff */
-
-  /* range 0x600 - 0x6FF is reserved for Type1 specific stuff */
 
 #ifdef FT_ERROR_END_LIST
   FT_ERROR_END_LIST
@@ -190,6 +198,7 @@
 #undef FT_ERROR_START_LIST
 #undef FT_ERROR_END_LIST
 #undef FT_ERRORDEF
+#undef FT_NOERRORDEF
 
 
 #ifdef FT_NEED_EXTERN_C
diff -aruN -x CVS -x *.o -x *.a freetype2.old/include/freetype/ftmoderr.h 
freetype2/include/freetype/ftmoderr.h
--- freetype2.old/include/freetype/ftmoderr.h   Thu Jan  1 01:00:00 1970
+++ freetype2/include/freetype/ftmoderr.h       Thu May 10 10:29:38 2001
@@ -0,0 +1,113 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftmoderr.h                                                             */
+/*                                                                         */
+/*    FreeType module error offsets (specification).                       */
+/*                                                                         */
+/*  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.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This file is used to define the FreeType module error offsets.        */
+  /*                                                                       */
+  /* The lower byte gives the error code, the higher byte gives the        */
+  /* module.  The base module has error offset 0.  For example, the error  */
+  /* `FT_Err_Invalid_File_Format' has value 0x003, the error               */
+  /* `TT_Err_Invalid_File_Format' has value 0xB03, the error               */
+  /* `T1_Err_Invalid_File_Format' has value 0xC03, etc.                    */
+  /*                                                                       */
+  /* It can also be used to create a module error message table easily     */
+  /* with something like                                                   */
+  /*                                                                       */
+  /*   {                                                                   */
+  /*     #undef __FTMODERR_H__                                             */
+  /*     #define FT_MODERRDEF( e, v, s )  { FT_Mod_Err_ ## e, s },         */
+  /*     #define FT_MODERR_START_LIST     {                                */
+  /*     #define FT_MODERR_END_LIST       { 0, 0 } };                      */
+  /*                                                                       */
+  /*     const struct                                                      */
+  /*     {                                                                 */
+  /*       int          mod_err_offset;                                    */
+  /*       const char*  mod_err_msg                                        */
+  /*     } ft_mod_errors[] =                                               */
+  /*                                                                       */
+  /*     #include FT_MODULE_ERRORS_H                                       */
+  /*   }                                                                   */
+  /*                                                                       */
+  /* To use such a table, all errors must be ANDed with 0xFF00 to remove   */
+  /* the error code.                                                       */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTMODERR_H__
+#define __FTMODERR_H__
+
+
+#undef FT_NEED_EXTERN_C
+
+
+#ifndef FT_MODERRDEF
+
+#define FT_MODERRDEF( e, v, s )  FT_Mod_Err_ ## e = v,
+
+#define FT_MODERR_START_LIST     enum {
+#define FT_MODERR_END_LIST       FT_Mod_Err_Max };
+
+#ifdef __cplusplus
+#define FT_NEED_EXTERN_C
+  extern "C" {
+#endif
+
+#endif /* !FT_MODERRDEF */
+
+
+#ifdef FT_MODERR_START_LIST
+  FT_MODERR_START_LIST
+#endif
+
+
+  FT_MODERRDEF( Base,     0x000, "base module" )
+  FT_MODERRDEF( Autohint, 0x100, "autohinter module" )
+  FT_MODERRDEF( Cache,    0x200, "cache module" )
+  FT_MODERRDEF( CFF,      0x300, "CFF module" )
+  FT_MODERRDEF( CID,      0x400, "CID module" )
+  FT_MODERRDEF( PCF,      0x500, "PCF module" )
+  FT_MODERRDEF( Psaux,    0x600, "psaux module" )
+  FT_MODERRDEF( Psnames,  0x700, "psnames module" )
+  FT_MODERRDEF( Raster,   0x800, "raster module" )
+  FT_MODERRDEF( SFNT,     0x900, "SFNT module" )
+  FT_MODERRDEF( Smooth,   0xA00, "smooth raster module" )
+  FT_MODERRDEF( TrueType, 0xB00, "TrueType module" )
+  FT_MODERRDEF( Type1,    0xC00, "Type 1 module" )
+  FT_MODERRDEF( Winfonts, 0xD00, "Windows FON/FNT module" )
+
+
+#ifdef FT_MODERR_END_LIST
+  FT_MODERR_END_LIST
+#endif
+
+
+#undef FT_MODERR_START_LIST
+#undef FT_MODERR_END_LIST
+#undef FT_MODERRDEF
+
+
+#ifdef FT_NEED_EXTERN_C
+  }
+#endif
+
+#endif /* __FTMODERR_H__ */
+
+
+/* END */
diff -aruN -x CVS -x *.o -x *.a freetype2.old/src/autohint/aherrors.h 
freetype2/src/autohint/aherrors.h
--- freetype2.old/src/autohint/aherrors.h       Thu Jan  1 01:00:00 1970
+++ freetype2/src/autohint/aherrors.h   Thu May 10 09:59:11 2001
@@ -0,0 +1,43 @@
+/***************************************************************************/
+/*                                                                         */
+/*  aherrors.h                                                             */
+/*                                                                         */
+/*    Autohinter error codes (specification).                              */
+/*                                                                         */
+/*  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.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This file is used to define the Autohinter error enumeration          */
+  /* constants.                                                            */
+  /*                                                                       */
+  /*************************************************************************/
+
+#ifndef __AHERRORS_H__
+#define __AHERRORS_H__
+
+#include FT_MODULE_ERRORS_H
+
+#undef __FTERRORS_H__
+
+#define FT_ERRORDEF( e, v, s )    AH_Err_ ## e = v + FT_Mod_Err_Autohint,
+#define FT_NOERRORDEF( e, v, s )  AH_Err_ ## e = v,
+
+#define FT_ERROR_START_LIST       enum {
+#define FT_ERROR_END_LIST         AH_Err_Max };
+
+#include FT_ERRORS_H
+
+#endif /* __AHERRORS_H__ */
+
+/* END */
diff -aruN -x CVS -x *.o -x *.a freetype2.old/src/autohint/ahglyph.c 
freetype2/src/autohint/ahglyph.c
--- freetype2.old/src/autohint/ahglyph.c        Tue Mar 20 16:23:15 2001
+++ freetype2/src/autohint/ahglyph.c    Thu May 10 08:40:11 2001
@@ -24,6 +24,7 @@
 #include "ahglyph.h"
 #include "ahangles.h"
 #include "ahglobal.h"
+#include "aherrors.h"
 
 #include <stdio.h>
 
@@ -286,7 +287,7 @@
                              FT_Face      face )
   {
     FT_Memory   memory       = outline->memory;
-    FT_Error    error        = FT_Err_Ok;
+    FT_Error    error        = AH_Err_Ok;
     FT_Outline* source       = &face->glyph->outline;
     FT_Int      num_points   = source->n_points;
     FT_Int      num_contours = source->n_contours;
@@ -297,7 +298,7 @@
     if ( !face                                          ||
          !face->size                                    ||
          face->glyph->format != ft_glyph_format_outline )
-      return FT_Err_Invalid_Argument;
+      return AH_Err_Invalid_Argument;
 
     /* first of all, reallocate the contours array if necessary */
     if ( num_contours > outline->max_contours )
diff -aruN -x CVS -x *.o -x *.a freetype2.old/src/autohint/ahhint.c 
freetype2/src/autohint/ahhint.c
--- freetype2.old/src/autohint/ahhint.c Tue Mar 20 16:23:22 2001
+++ freetype2/src/autohint/ahhint.c     Thu May 10 08:40:28 2001
@@ -23,6 +23,7 @@
 #include "ahhint.h"
 #include "ahglyph.h"
 #include "ahangles.h"
+#include "aherrors.h"
 #include FT_OUTLINE_H
 
 
@@ -1241,7 +1242,7 @@
             if ( start_point + k >= num_base_points          ||
                                l >= (FT_UInt)num_new_points  )
             {
-              error = FT_Err_Invalid_Composite;
+              error = AH_Err_Invalid_Composite;
               goto Exit;
             }
 
@@ -1279,7 +1280,7 @@
 
     default:
       /* we don't support other formats (yet?) */
-      error = FT_Err_Unimplemented_Feature;
+      error = AH_Err_Unimplemented_Feature;
     }
 
   Hint_Metrics:
diff -aruN -x CVS -x *.o -x *.a freetype2.old/src/autohint/rules.mk 
freetype2/src/autohint/rules.mk
--- freetype2.old/src/autohint/rules.mk Tue Mar 20 16:23:23 2001
+++ freetype2/src/autohint/rules.mk     Thu May 10 08:39:13 2001
@@ -39,7 +39,8 @@
 #
 AUTO_DRV_H := $(AUTO_DRV_SRC:%c=%h)  \
               $(AUTO_DIR_)ahloader.h \
-              $(AUTO_DIR_)ahtypes.h
+              $(AUTO_DIR_)ahtypes.h \
+              $(AUTO_DIR_)aherrors.h
 
 
 # AUTO driver object(s)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]