outform.c
上传用户:yuppie_zhu
上传日期:2007-01-08
资源大小:535k
文件大小:2k
源码类别:

编译器/解释器

开发平台:

C/C++

  1. /* outform.c manages a list of output formats, and associates
  2.  *  them with their relevant drivers. Also has a
  3.  *  routine to find the correct driver given a name
  4.  *  for it
  5.  *
  6.  * The Netwide Assembler is copyright (C) 1996 Simon Tatham and
  7.  * Julian Hall. All rights reserved. The software is
  8.  * redistributable under the licence given in the file "Licence"
  9.  * distributed in the NASM archive.
  10.  */
  11. #include <stdio.h>
  12. #include <string.h>
  13. #define BUILD_DRIVERS_ARRAY
  14. #include "outform.h"
  15. static int ndrivers = 0;
  16. struct ofmt *ofmt_find(char *name)     /* find driver */
  17. {
  18.     int i;
  19.     for (i=0; i<ndrivers; i++)
  20. if (!strcmp(name,drivers[i]->shortname))
  21.     return drivers[i];
  22.     return NULL;
  23. }
  24. struct dfmt *dfmt_find(struct ofmt *ofmt, char *name)     /* find driver */
  25. {
  26.     struct dfmt **dfmt = ofmt->debug_formats;
  27.     while (*dfmt) {
  28. if (!strcmp(name, (*dfmt)->shortname))
  29. return (*dfmt);
  30. dfmt++;
  31.     }
  32.     return NULL;
  33. }
  34. void ofmt_list(struct ofmt *deffmt, FILE *fp)
  35. {
  36.     int i;
  37.     for (i=0; i<ndrivers; i++)
  38. fprintf(fp, "  %c %-10s%sn",
  39. drivers[i] == deffmt ? '*' : ' ',
  40. drivers[i]->shortname,
  41. drivers[i]->fullname);
  42. }
  43. void dfmt_list(struct ofmt *ofmt, FILE *fp)
  44. {
  45.     struct dfmt ** drivers = ofmt->debug_formats;
  46.     while (*drivers) {
  47. fprintf(fp, "  %c %-10s%sn",
  48. drivers[0] == ofmt->current_dfmt ? '*' : ' ',
  49. drivers[0]->shortname,
  50. drivers[0]->fullname);
  51. drivers++;
  52.     }
  53. }
  54. struct ofmt *ofmt_register (efunc error) {
  55.     for (ndrivers=0; drivers[ndrivers] != NULL; ndrivers++);
  56.     if (ndrivers==0)
  57.     {
  58.         error(ERR_PANIC | ERR_NOFILE,
  59.       "No output drivers given at compile time");
  60.     }
  61.     return (&OF_DEFAULT);
  62. }