dictmgr.cxx

来自「管理项目进度工具的原代码」· CXX 代码 · 共 127 行

CXX
127
字号
#include <cstdlib>#include <cstring>#include <cctype>#include <cstdio>#include "dictmgr.hxx"//using namespace std;#pragma warning(disable:4706)
// some utility functionsextern void mychomp(char * s);extern char * mystrdup(const char * s);extern char * mystrsep(char ** stringp, const char delim);DictMgr::DictMgr(const char * dictpath, const char * etype) {  // load list of etype entries  numdict = 0;  pdentry = (dictentry *)malloc(MAXDICTIONARIES*sizeof(struct dictentry));  if (pdentry) {     if (parse_file(dictpath, etype)) {        numdict = 0;        // no dictionary.lst found is okay     }  } else {     numdict = 0;  }}DictMgr::~DictMgr() {  dictentry * pdict = NULL;  if (pdentry) {     pdict = pdentry;     for (int i=0;i<numdict;i++) {        if (pdict->lang) {            free(pdict->lang);            pdict->lang = NULL;        }        if (pdict->region) {            free(pdict->region);            pdict->region=NULL;        }        if (pdict->filename) {            free(pdict->filename);            pdict->filename = NULL;        }        pdict++;     }     free(pdentry);     pdentry = NULL;     pdict = NULL;  }  numdict = 0;}// read in list of etype entries and build up structure to describe themint  DictMgr::parse_file(const char * dictpath, const char * etype){    int i;    char line[MAXDICTENTRYLEN+1];    dictentry * pdict = pdentry;    // open the dictionary list file    FILE * dictlst;    dictlst = fopen(dictpath,"r");    if (!dictlst) {      return 1;    }    // step one is to parse the dictionary list building up the     // descriptive structures    // read in each line ignoring any that dont start with etype    while (fgets(line,MAXDICTENTRYLEN,dictlst)) {       mychomp(line);       /* parse in a dictionary entry */       if (strncmp(line,etype,4) == 0) {	  if (numdict < MAXDICTIONARIES) {             char * tp = line;             char * piece;             i = 0;             while ((piece=mystrsep(&tp,' '))) {                if (*piece != '\0') {                    switch(i) {                       case 0: break;		       case 1: pdict->lang = mystrdup(piece); break;                       case 2: if (strcmp (piece, "ANY") == 0)				 pdict->region = mystrdup("");			       else				 pdict->region = mystrdup(piece);			       break;                       case 3: pdict->filename = mystrdup(piece); break;		       default: break;                    }                    i++;                }                free(piece);	     }             if (i == 4) {                 numdict++;                 pdict++;	     } else {                 fprintf(stderr,"dictionary list corruption in line \"%s\"\n",line);                 fflush(stderr);	     }	  }       }    }    fclose(dictlst);    return 0;}// return text encoding of dictionaryint DictMgr::get_list(dictentry ** ppentry){  *ppentry = pdentry;  return numdict;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?