亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? apinames.c

?? 這是一個開放源代碼的與WINNT/WIN2K/WIN2003兼容的操作系統(tǒng)
?? C
字號:
/*
 * This little program is used to parse the FreeType headers and
 * find the declaration of all public APIs.  This is easy, because
 * they all look like the following:
 *
 *   FT_EXPORT( return_type )
 *   function_name( function arguments );
 *
 * You must pass the list of header files as arguments.  Wildcards are
 * accepted if you are using GCC for compilation (and probably by
 * other compilers too).
 *
 * Author: David Turner, 2005, 2006
 *
 * This code is explicitly placed into the public domain.
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define  PROGRAM_NAME     "apinames"
#define  PROGRAM_VERSION  "0.1"

#define  LINEBUFF_SIZE  1024

typedef enum
{
  OUTPUT_LIST = 0,      /* output the list of names, one per line             */
  OUTPUT_WINDOWS_DEF,   /* output a Windows .DEF file for Visual C++ or Mingw */
  OUTPUT_BORLAND_DEF,   /* output a Windows .DEF file for Borland C++         */
  OUTPUT_WATCOM_LBC     /* output a Watcom Linker Command File                */

} OutputFormat;


static void
panic( const char*  message )
{
  fprintf( stderr, "PANIC: %s\n", message );
  exit(2);
}


typedef struct
{
  char*         name;
  unsigned int  hash;

} NameRec, *Name;

static Name  the_names;
static int   num_names;
static int   max_names;

static void
names_add( const char*  name,
           const char*  end )
{
  int   nn, len, h;
  Name  nm;

  if ( end <= name )
    return;

  /* compute hash value */
  len = (int)(end - name);
  h   = 0;
  for ( nn = 0; nn < len; nn++ )
    h = h*33 + name[nn];

  /* check for an pre-existing name */
  for ( nn = 0; nn < num_names; nn++ )
  {
    nm = the_names + nn;

    if ( (int)nm->hash                 == h &&
         memcmp( name, nm->name, len ) == 0 &&
         nm->name[len]                 == 0 )
      return;
  }

  /* add new name */
  if ( num_names >= max_names )
  {
    max_names += (max_names >> 1) + 4;
    the_names  = (NameRec*)realloc( the_names, sizeof(the_names[0])*max_names );
    if ( the_names == NULL )
      panic( "not enough memory" );
  }
  nm = &the_names[num_names++];

  nm->hash = h;
  nm->name = (char*)malloc( len+1 );
  if ( nm->name == NULL )
    panic( "not enough memory" );

  memcpy( nm->name, name, len );
  nm->name[len] = 0;
}


static int
name_compare( const void*  name1,
              const void*  name2 )
{
  Name  n1 = (Name)name1;
  Name  n2 = (Name)name2;

  return strcmp( n1->name, n2->name );
}

static void
names_sort( void )
{
  qsort( the_names, (size_t)num_names, sizeof(the_names[0]), name_compare );
}


static void
names_dump( FILE*         out,
            OutputFormat  format,
            const char*   dll_name )
{
  int  nn;

  switch ( format )
  {
    case OUTPUT_WINDOWS_DEF:
      if ( dll_name )
        fprintf( out, "LIBRARY %s\n", dll_name );

      fprintf( out, "DESCRIPTION  FreeType 2 DLL\n" );
      fprintf( out, "EXPORTS\n" );
      for ( nn = 0; nn < num_names; nn++ )
        fprintf( out, "  %s\n", the_names[nn].name );
      break;

    case OUTPUT_BORLAND_DEF:
      if ( dll_name )
        fprintf( out, "LIBRARY %s\n", dll_name );

      fprintf( out, "DESCRIPTION  FreeType 2 DLL\n" );
      fprintf( out, "EXPORTS\n" );
      for ( nn = 0; nn < num_names; nn++ )
        fprintf( out, "  _%s\n", the_names[nn].name );
      break;

    case OUTPUT_WATCOM_LBC:
      {
        /* we must omit the .dll suffix from the library name */
        char   temp[512];
        char*  dot;

        if ( dll_name == NULL )
        {
          fprintf( stderr,
                   "you must provide a DLL name with the -d option !!\n" );
          exit(4);
        }

        dot = strchr( dll_name, '.' );
        if ( dot != NULL )
        {
          int  len = (dot - dll_name);
          if ( len > (int)(sizeof(temp)-1) )
            len = sizeof(temp)-1;

          memcpy( temp, dll_name, len );
          temp[len] = 0;

          dll_name = (const char*)temp;
        }

        for ( nn = 0; nn < num_names; nn++ )
          fprintf( out, "++_%s.%s.%s\n", the_names[nn].name, dll_name,
                        the_names[nn].name );
      }
      break;

    default:  /* LIST */
      for ( nn = 0; nn < num_names; nn++ )
        fprintf( out, "%s\n", the_names[nn].name );
  }
}




/* states of the line parser */

typedef enum
{
  STATE_START = 0,  /* waiting for FT_EXPORT keyword and return type */
  STATE_TYPE        /* type was read, waiting for function name      */

} State;

static int
read_header_file( FILE*  file, int  verbose )
{
  static char  buff[ LINEBUFF_SIZE+1 ];
  State        state = STATE_START;

  while ( !feof( file ) )
  {
    char*  p;

    if ( !fgets( buff, LINEBUFF_SIZE, file ) )
      break;

    p = buff;

    while ( *p && (*p == ' ' || *p == '\\') )  /* skip leading whitespace */
      p++;

    if ( *p == '\n' || *p == '\r' )  /* skip empty lines */
      continue;

    switch ( state )
    {
      case STATE_START:
        {
          if ( memcmp( p, "FT_EXPORT(", 10 ) != 0 )
            break;

          p += 10;
          for (;;)
          {
            if ( *p == 0 || *p == '\n' || *p == '\r' )
              goto NextLine;

            if ( *p == ')' )
            {
              p++;
              break;
            }

            p++;
          }

          state = STATE_TYPE;

         /* sometimes, the name is just after the FT_EXPORT(...), so
          * skip whitespace, and fall-through if we find an alphanumeric
          * character
          */
          while ( *p == ' ' || *p == '\t' )
            p++;

          if ( !isalpha(*p) )
            break;
        }
        /* fall-through */

      case STATE_TYPE:
        {
          char*   name = p;

          while ( isalnum(*p) || *p == '_' )
            p++;

          if ( p > name )
          {
            if ( verbose )
              fprintf( stderr, ">>> %.*s\n", p-name, name );

            names_add( name, p );
          }

          state = STATE_START;
        }
        break;

      default:
        ;
    }

  NextLine:
    ;
  }

  return 0;
}


static void
usage( void )
{
  static const char* const  format =
   "%s %s: extract FreeType API names from header files\n\n"
   "this program is used to extract the list of public FreeType API\n"
   "functions. It receives the list of header files as argument and\n"
   "generates a sorted list of unique identifiers\n\n"

   "usage: %s header1 [options] [header2 ...]\n\n"

   "options:   -      : parse the content of stdin, ignore arguments\n"
   "           -v     : verbose mode, output sent to standard error\n"
   "           -oFILE : write output to FILE instead of standard output\n"
   "           -dNAME : indicate DLL file name, 'freetype.dll' by default\n"
   "           -w     : output .DEF file for Visual C++ and Mingw\n"
   "           -wB    : output .DEF file for Borland C++\n"
   "           -wW    : output Watcom Linker Response File\n"
   "\n";

  fprintf( stderr,
           format,
           PROGRAM_NAME,
           PROGRAM_VERSION,
           PROGRAM_NAME
           );
  exit(1);
}


int  main( int argc, const char* const*  argv )
{
  int           from_stdin = 0;
  int           verbose = 0;
  OutputFormat  format = OUTPUT_LIST;  /* the default */
  FILE*         out    = stdout;
  const char*   library_name = NULL;

  if ( argc < 2 )
    usage();

  /* '-' used as a single argument means read source file from stdin */
  while ( argc > 1 && argv[1][0] == '-' )
  {
    const char*  arg = argv[1];

    switch ( arg[1] )
    {
      case 'v':
        verbose = 1;
        break;

      case 'o':
        if ( arg[2] == 0 )
        {
          if ( argc < 2 )
            usage();

          arg = argv[2];
          argv++;
          argc--;
        }
        else
          arg += 2;

        out = fopen( arg, "wt" );
        if ( out == NULL )
        {
          fprintf( stderr, "could not open '%s' for writing\n", argv[2] );
          exit(3);
        }
        break;

      case 'd':
        if ( arg[2] == 0 )
        {
          if ( argc < 2 )
            usage();

          arg = argv[2];
          argv++;
          argc--;
        }
        else
          arg += 2;

        library_name = arg;
        break;

      case 'w':
        format = OUTPUT_WINDOWS_DEF;
        switch ( arg[2] )
        {
          case 'B':
            format = OUTPUT_BORLAND_DEF;
            break;

          case 'W':
            format = OUTPUT_WATCOM_LBC;
            break;

          case 0:
            break;

          default:
            usage();
        }
        break;

      case 0:
        from_stdin = 1;
        break;

      default:
        usage();
    }

    argc--;
    argv++;
  }

  if ( from_stdin )
  {
    read_header_file( stdin, verbose );
  }
  else
  {
    for ( --argc, argv++; argc > 0; argc--, argv++ )
    {
      FILE*  file = fopen( argv[0], "rb" );

      if ( file == NULL )
        fprintf( stderr, "unable to open '%s'\n", argv[0] );
      else
      {
        if ( verbose )
          fprintf( stderr, "opening '%s'\n", argv[0] );

        read_header_file( file, verbose );
        fclose( file );
      }
    }
  }

  if ( num_names == 0 )
    panic( "could not find exported functions !!\n" );

  names_sort();
  names_dump( out, format, library_name );

  if ( out != stdout )
    fclose( out );

  return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国精品**一区二区三区在线蜜桃| ...xxx性欧美| 亚洲综合免费观看高清完整版在线 | 欧美自拍丝袜亚洲| 亚洲国产成人午夜在线一区| 久久精品国产成人一区二区三区| 精品视频资源站| 亚洲色图在线看| 91在线观看美女| 国产精品嫩草影院com| 国产精品一区二区三区99| 日韩一区二区三免费高清| 亚洲人亚洲人成电影网站色| 国产一区激情在线| 91在线精品秘密一区二区| 国产精品伦理在线| 不卡一卡二卡三乱码免费网站| 2021久久国产精品不只是精品| 琪琪一区二区三区| 3d动漫精品啪啪1区2区免费| 视频在线观看一区| 日本精品视频一区二区三区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 精品一区二区三区的国产在线播放| 91精品久久久久久久99蜜桃 | 日本一区二区三区电影| 日韩中文字幕av电影| 在线播放国产精品二区一二区四区| 亚洲综合激情小说| 欧美日韩国产小视频在线观看| 亚洲综合一区二区三区| 7799精品视频| 五月天亚洲婷婷| 精品久久国产97色综合| 国产在线精品视频| 亚洲精品在线电影| 成人激情综合网站| 一区二区三区在线免费| 欧美羞羞免费网站| 日韩成人av影视| 国产校园另类小说区| 成人av在线资源网站| 伊人色综合久久天天人手人婷| 欧美女孩性生活视频| 久久国产生活片100| 国产精品理论片| 欧美三级电影在线看| 精品无人码麻豆乱码1区2区| 欧美变态口味重另类| 丁香婷婷深情五月亚洲| 亚洲视频电影在线| 欧美一级爆毛片| 国产盗摄一区二区| 亚洲成av人片| 欧美精品一区二区三区蜜桃视频| 成人激情午夜影院| 久久精品免费观看| 亚洲精品免费看| 亚洲精品在线电影| 欧美精品在线观看播放| av不卡免费在线观看| 日韩av中文字幕一区二区三区| 欧美tickling网站挠脚心| 91同城在线观看| 男女视频一区二区| 伊人色综合久久天天| 91精品国产高清一区二区三区| 久久99国内精品| 亚洲成人免费影院| 亚洲日本一区二区三区| 国产日韩精品视频一区| 日韩情涩欧美日韩视频| eeuss鲁一区二区三区| 久久99精品国产.久久久久久| 国产精品久久久久精k8| 精品国产91乱码一区二区三区| 成人国产电影网| 成人av在线资源网| 青青草国产成人av片免费| 1000精品久久久久久久久| 欧美放荡的少妇| 色呦呦国产精品| 成人综合婷婷国产精品久久| 丝袜美腿亚洲综合| 一区二区三区四区在线免费观看 | 欧美日韩国产综合一区二区三区| 国产传媒日韩欧美成人| 亚洲国产一区二区三区| 国产欧美在线观看一区| 日韩欧美国产高清| 欧美午夜理伦三级在线观看| 99九九99九九九视频精品| 日韩激情av在线| 亚洲激情五月婷婷| 国产精品欧美极品| 国产日韩欧美高清| 久久久99免费| 欧美一区二区美女| 欧美日韩国产系列| 91福利社在线观看| 成人动漫一区二区三区| 粉嫩久久99精品久久久久久夜| 久久精品噜噜噜成人av农村| 亚洲一区二区视频在线| 中文字幕一区在线观看视频| 亚洲国产精品ⅴa在线观看| 久久久久久夜精品精品免费| 日韩欧美视频在线| 欧美日韩精品一区二区天天拍小说| 91精品福利视频| 色婷婷亚洲精品| 97久久超碰国产精品| 99r精品视频| 91一区一区三区| 不卡在线观看av| 国产91精品入口| 粉嫩aⅴ一区二区三区四区| av激情综合网| 成人国产精品免费观看动漫 | 美女在线一区二区| 久久超碰97中文字幕| 国产一区二区主播在线| 成人精品gif动图一区| 在线免费观看不卡av| 欧美二区三区91| ww亚洲ww在线观看国产| 国产精品久久久久四虎| 一区二区三区美女| 日本在线观看不卡视频| 国产美女久久久久| 97久久超碰国产精品| 欧美精品久久久久久久久老牛影院| 欧美电视剧免费观看| 国产欧美日韩不卡免费| 亚洲综合在线第一页| 国内精品写真在线观看| 色综合天天视频在线观看| 日韩欧美中文字幕精品| 久久精品在这里| 亚洲成a天堂v人片| 国产伦精品一区二区三区视频青涩 | 欧洲另类一二三四区| 欧美成人一区二区三区片免费| 国产精品久久久久影院| 亚洲大片在线观看| 国产成人av电影在线| 欧美自拍偷拍一区| 久久久精品国产99久久精品芒果| 依依成人综合视频| 日韩影院在线观看| 成人性生交大片| 欧美日韩国产综合久久| 欧美精品一区二区在线播放| 亚洲一区二区三区美女| 国产乱人伦精品一区二区在线观看 | 色欧美片视频在线观看| 久久久国产精品午夜一区ai换脸| 麻豆精品蜜桃视频网站| 欧美日韩国产免费一区二区| 一区二区在线电影| 91视频一区二区| 国产精品久久久久影院老司| 国产99一区视频免费| 久久综合久久综合九色| 黄色小说综合网站| 精品国产一二三| 精品在线你懂的| 精品日韩一区二区| 精品一区二区在线视频| 精品国产免费人成在线观看| 免费人成网站在线观看欧美高清| 欧美裸体bbwbbwbbw| 亚洲国产精品精华液网站| 欧美在线免费播放| 亚洲国产美女搞黄色| 欧美三级电影网站| 日本va欧美va瓶| 精品区一区二区| 国产乱码字幕精品高清av| 337p粉嫩大胆色噜噜噜噜亚洲| 另类小说色综合网站| 久久色在线视频| 成人激情开心网| 亚洲激情图片小说视频| 欧美三级日韩在线| 日本在线不卡一区| 久久在线观看免费| 粉嫩aⅴ一区二区三区四区 | 日本精品视频一区二区三区| 一区二区在线电影| 在线播放欧美女士性生活| 久久99精品视频| 国产欧美精品区一区二区三区| www.亚洲色图.com| 亚洲精品v日韩精品| 欧美一卡二卡在线| 福利91精品一区二区三区| 亚洲欧洲制服丝袜| 日韩一级高清毛片| 丁香婷婷综合五月|