⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htvms_waisprot.c

📁 用于linux和其他unix下面的
💻 C
📖 第 1 页 / 共 5 页
字号:
    (WAISDocumentShortHeader*)s_malloc((size_t)sizeof(WAISDocumentShortHeader));  header->DocumentID = docID;  header->VersionNumber = versionNumber;  header->Score = score;  header->BestMatch = bestMatch;  header->DocumentLength = docLen;  header->Lines = lines;    return(header);}/*----------------------------------------------------------------------*/voidfreeWAISDocumentShortHeader(header)WAISDocumentShortHeader* header;{  freeAny(header->DocumentID);  s_free(header);}/*----------------------------------------------------------------------*/char*writeWAISDocumentShortHeader(header,buffer,len)WAISDocumentShortHeader* header;char* buffer;long* len;{  unsigned long header_len = userInfoTagSize(DT_DocumentShortHeaderGroup ,					     DefWAISShortHeaderSize);  char* buf = buffer + header_len;  unsigned long size;    RESERVE_SPACE_FOR_WAIS_HEADER(len);     buf = writeAny(header->DocumentID,DT_DocumentID,buf,len);  buf = writeNum(header->VersionNumber,DT_VersionNumber,buf,len);  buf = writeNum(header->Score,DT_Score,buf,len);  buf = writeNum(header->BestMatch,DT_BestMatch,buf,len);  buf = writeNum(header->DocumentLength,DT_DocumentLength,buf,len);  buf = writeNum(header->Lines,DT_Lines,buf,len);    /* now write the header and size */  size = buf - buffer;   buf = writeUserInfoHeader(DT_DocumentShortHeaderGroup,size,header_len,buffer,len);  return(buf);}/*----------------------------------------------------------------------*/char*readWAISDocumentShortHeader(header,buffer)WAISDocumentShortHeader** header;char* buffer;{  char* buf = buffer;  unsigned long size;   unsigned long headerSize;  data_tag tag1;  any* docID = NULL;  long versionNumber,score,bestMatch,docLength,lines;    versionNumber = score = bestMatch = docLength = lines = UNUSED;    buf = readUserInfoHeader(&tag1,&size,buf);  headerSize = buf - buffer;      while (buf < (buffer + size + headerSize))    { data_tag tag = peekTag(buf);      switch (tag)	{ case DT_DocumentID:	    buf = readAny(&docID,buf);	    break;	  case DT_VersionNumber:	    buf = readNum(&versionNumber,buf);	    break;	  case DT_Score:	    buf = readNum(&score,buf);	    break;	  case DT_BestMatch:	    buf = readNum(&bestMatch,buf);	    break;	  case DT_DocumentLength:	    buf = readNum(&docLength,buf);	    break;	  case DT_Lines:	    buf = readNum(&lines,buf);	    break;	  default:	    freeAny(docID);	    REPORT_READ_ERROR(buf);	    break;	  }    }  	    *header = makeWAISDocumentShortHeader(docID,versionNumber,score,bestMatch,					docLength,lines);  return(buf);}/*----------------------------------------------------------------------*/WAISDocumentLongHeader*makeWAISDocumentLongHeader(docID,			   versionNumber,			   score,			   bestMatch,			   docLen,			   lines,			   types,			   source,			   date,			   headline,			   originCity,			   stockCodes,			   companyCodes,			   industryCodes)any* docID;long versionNumber;long score;long bestMatch;long docLen;long lines;char** types;char* source;char* date;char* headline;char* originCity;char* stockCodes;char* companyCodes;char* industryCodes;/* construct a long document header, note that no fields are copied!   if the application needs to save these fields, it should copy them,   or set the field in this object to NULL before freeing it. */{  WAISDocumentLongHeader* header =     (WAISDocumentLongHeader*)s_malloc((size_t)sizeof(WAISDocumentLongHeader));  header->DocumentID = docID;  header->VersionNumber = versionNumber;  header->Score = score;  header->BestMatch = bestMatch;  header->DocumentLength = docLen;  header->Lines = lines;  header->Types = types;  header->Source = source;  header->Date = date;  header->Headline = headline;  header->OriginCity = originCity;  header->StockCodes = stockCodes;  header->CompanyCodes = companyCodes;  header->IndustryCodes = industryCodes;    return(header);}/*----------------------------------------------------------------------*/voidfreeWAISDocumentLongHeader(header)WAISDocumentLongHeader* header;{  freeAny(header->DocumentID);  doList((void**)header->Types,fs_free); /* can't use the macro here! */  s_free(header->Source);  s_free(header->Date);  s_free(header->Headline);  s_free(header->OriginCity);  s_free(header->StockCodes);  s_free(header->CompanyCodes);  s_free(header->IndustryCodes);  s_free(header);}/*----------------------------------------------------------------------*/char*writeWAISDocumentLongHeader(header,buffer,len)WAISDocumentLongHeader* header;char* buffer;long* len;{  unsigned long header_len = userInfoTagSize(DT_DocumentLongHeaderGroup ,					     DefWAISLongHeaderSize);  char* buf = buffer + header_len;  unsigned long size1;    RESERVE_SPACE_FOR_WAIS_HEADER(len);     buf = writeAny(header->DocumentID,DT_DocumentID,buf,len);  buf = writeNum(header->VersionNumber,DT_VersionNumber,buf,len);  buf = writeNum(header->Score,DT_Score,buf,len);  buf = writeNum(header->BestMatch,DT_BestMatch,buf,len);  buf = writeNum(header->DocumentLength,DT_DocumentLength,buf,len);  buf = writeNum(header->Lines,DT_Lines,buf,len);  if (header->Types != NULL)    { long size;      char* ptr = NULL;      long i;      buf = writeTag(DT_TYPE_BLOCK,buf,len);      for (i = 0,size = 0,ptr = header->Types[i]; ptr != NULL; ptr = header->Types[++i])	{ long typeSize = strlen(ptr);	  size += writtenTagSize(DT_TYPE);	  size += writtenCompressedIntSize(typeSize);	  size += typeSize; 	}      buf = writeCompressedInteger((unsigned long)size,buf,len);      for (i = 0,ptr = header->Types[i]; ptr != NULL; ptr = header->Types[++i])	buf = writeString(ptr,DT_TYPE,buf,len);    }  buf = writeString(header->Source,DT_Source,buf,len);  buf = writeString(header->Date,DT_Date,buf,len);  buf = writeString(header->Headline,DT_Headline,buf,len);  buf = writeString(header->OriginCity,DT_OriginCity,buf,len);  buf = writeString(header->StockCodes,DT_StockCodes,buf,len);  buf = writeString(header->CompanyCodes,DT_CompanyCodes,buf,len);  buf = writeString(header->IndustryCodes,DT_IndustryCodes,buf,len);    /* now write the header and size */  size1 = buf - buffer;   buf = writeUserInfoHeader(DT_DocumentLongHeaderGroup,size1,header_len,buffer,len);  return(buf);}/*----------------------------------------------------------------------*/char*readWAISDocumentLongHeader(header,buffer)WAISDocumentLongHeader** header;char* buffer;{  char* buf = buffer;  unsigned long size1;   unsigned long headerSize;  data_tag tag1;  any* docID;  long versionNumber,score,bestMatch,docLength,lines;  char **types;  char *source,*date,*headline,*originCity,*stockCodes,*companyCodes,*industryCodes;    docID = NULL;  versionNumber = score = bestMatch = docLength = lines = UNUSED;  types = NULL;  source = date = headline = originCity = stockCodes = companyCodes = industryCodes = NULL;    buf = readUserInfoHeader(&tag1,&size1,buf);  headerSize = buf - buffer;      while (buf < (buffer + size1 + headerSize))    { data_tag tag = peekTag(buf);      switch (tag)	{ case DT_DocumentID:	    buf = readAny(&docID,buf);	    break;	  case DT_VersionNumber:	    buf = readNum(&versionNumber,buf);	    break;	  case DT_Score:	    buf = readNum(&score,buf);	    break;	  case DT_BestMatch:	    buf = readNum(&bestMatch,buf);	    break;	  case DT_DocumentLength:	    buf = readNum(&docLength,buf);	    break;	  case DT_Lines:	    buf = readNum(&lines,buf);	    break;	  case DT_TYPE_BLOCK:	    { unsigned long size = -1;	      long numTypes = 0;	      buf = readTag(&tag,buf);	      readCompressedInteger(&size,buf);	      while (size > 0)		{ char* type = NULL;		  char* originalBuf = buf;		  buf = readString(&type,buf);		  types = (char**)s_realloc(types,(size_t)(sizeof(char*) * (numTypes + 2)));		  types[numTypes++] = type;		  types[numTypes] = NULL;		  size -= (buf - originalBuf);		}	    }	    /* FALLTHRU */	  case DT_Source:	    buf = readString(&source,buf);	    break;	  case DT_Date:	    buf = readString(&date,buf);	    break;	  case DT_Headline:	    buf = readString(&headline,buf);	    break;	  case DT_OriginCity:	    buf = readString(&originCity,buf);	    break;	  case DT_StockCodes:	    buf = readString(&stockCodes,buf);	    break;	  case DT_CompanyCodes:	    buf = readString(&companyCodes,buf);	    break;	  case DT_IndustryCodes:	    buf = readString(&industryCodes,buf);	    break;	  default:	    freeAny(docID);	    s_free(source);	    s_free(date);	    s_free(headline);	    s_free(originCity);	    s_free(stockCodes);	    s_free(companyCodes);	    s_free(industryCodes);	    REPORT_READ_ERROR(buf);	    break;	  }    }  	    *header = makeWAISDocumentLongHeader(docID,versionNumber,score,bestMatch,				       docLength,lines,types,source,date,headline,				       originCity,stockCodes,companyCodes,				       industryCodes);  return(buf);}/*----------------------------------------------------------------------*/WAISSearchResponse*makeWAISSearchResponse(seedWordsUsed,		       docHeaders,		       shortHeaders,		       longHeaders,		       text,		       headlines,		       codes,		       diagnostics)char* seedWordsUsed;WAISDocumentHeader** docHeaders;WAISDocumentShortHeader** shortHeaders;WAISDocumentLongHeader** longHeaders;WAISDocumentText** text;WAISDocumentHeadlines** headlines;WAISDocumentCodes** codes;diagnosticRecord** diagnostics;{  WAISSearchResponse* response = (WAISSearchResponse*)s_malloc((size_t)sizeof(WAISSearchResponse));    response->SeedWordsUsed = seedWordsUsed;  response->DocHeaders = docHeaders;  response->ShortHeaders = shortHeaders;  response->LongHeaders = longHeaders;  response->Text = text;  response->Headlines = headlines;  response->Codes = codes;  response->Diagnostics = diagnostics;    return(response);}/*----------------------------------------------------------------------*/voidfreeWAISSearchResponse(response)WAISSearchResponse* response;{  void* ptr = NULL;  long i;  s_free(response->SeedWordsUsed);  if (response->DocHeaders != NULL)    for (i = 0,ptr = (void *)response->DocHeaders[i]; ptr != NULL; ptr = (void *)response->DocHeaders[++i])      freeWAISDocumentHeader((WAISDocumentHeader*)ptr);  s_free(response->DocHeaders);     if (response->ShortHeaders != NULL)    for (i = 0,ptr = (void *)response->ShortHeaders[i]; ptr != NULL; ptr = (void *)response->ShortHeaders[++i])      freeWAISDocumentShortHeader((WAISDocumentShortHeader*)ptr);  s_free(response->ShortHeaders);     if (response->LongHeaders != NULL)    for (i = 0,ptr = (void *)response->LongHeaders[i]; ptr != NULL; ptr = (void *)response->LongHeaders[++i])      freeWAISDocumentLongHeader((WAISDocumentLongHeader*)ptr);  s_free(response->LongHeaders);     if (response->Text != NULL)    for (i = 0,ptr = (void *)response->Text[i]; ptr != NULL; ptr = (void *)response->Text[++i])      freeWAISDocumentText((WAISDocumentText*)ptr);  s_free(response->Text);     if (response->Headlines != NULL)    for (i = 0,ptr = (void *)response->Headlines[i]; ptr != NULL; ptr = (void *)response->Headlines[++i])      freeWAISDocumentHeadlines((WAISDocumentHeadlines*)ptr);  s_free(response->Headlines);     if (response->Codes != NULL)    for (i = 0,ptr = (void *)response->Codes[i]; ptr != NULL; ptr = (void *)response->Codes[++i])      freeWAISDocumentCodes((WAISDocumentCodes*)ptr);  s_free(response->Codes);     if (response->Diagnostics != NULL)    for (i = 0,ptr = (void *)response->Diagnostics[i]; ptr != NULL; ptr = (void *)response->Diagnostics[++i])      freeDiag((diagnosticRecord*)ptr);  s_free(response->Diagnostics);    s_free(response);}/*----------------------------------------------------------------------*/char* writeSearchResponseInfo(query,buffer,len)SearchResponseAPDU* query;char* buffer;long* len;{  unsigned long header_len = userInfoTagSize(DT_UserInformationLength,					     DefWAISSearchResponseSize);  char* buf = buffer + header_len;  WAISSearchResponse* info = (WAISSearchResponse*)query->DatabaseDiagnosticRecords;  unsigned long size;  void* header = NULL;  long i;    RESERVE_SPACE_FOR_WAIS_HEADER(len);    buf = writeString(info->SeedWordsUsed,DT_SeedWordsUsed,buf,len);    /* write out all the headers */  if (info->DocHeaders != NULL)    { for (i = 0,header = (void *)info->DocHeaders[i]; header != NULL; header = (void *)info->DocHeaders[++i])	buf = writeWAISDocumentHeader((WAISDocumentHeader*)header,buf,len);      }     if (info->ShortHeaders != NULL)    { for (i = 0,header = (void *)info->ShortHeaders[i]; header != NULL; header = (void *)info->ShortHeaders[++i])	buf = writeWAISDocumentShortHeader((WAISDocumentShortHeader*)header,buf,len);      }  if (info->LongHeaders != NULL)    { for (i = 0,header = (void *)info->LongHeaders[i]; header != NULL; header = (void *)info->LongHeaders[++i])	buf = writeWAISDocumentLongHeader((WAISDocumentLongHeader*)header,buf,len);      }  if (info->Text != NULL)    { for (i = 0,header = (void *)info->Text[i]; header != NULL; header = (void *)info->Text[++i])	buf = writeWAISDocumentText((WAISDocumentText*)header,buf,len);      }  if (info->Headlines != NULL)    { for (i = 0,header = (void *)info->Headlines[i]; header != NULL; header = (void *)info->Headlines[++i])	buf = writeWAISDocumentHeadlines((WAISDocumentHeadlines*)header,buf,len);

⌨️ 快捷键说明

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