/* HTVMS_WAISProt.h ** ** Adaptation for Lynx by F.Macrides (macrides@sci.wfeb.edu) ** ** 31-May-1994 FM Initial version. ** **----------------------------------------------------------------------*/ /* ** Routines originally from WProt.h -- FM ** **----------------------------------------------------------------------*/ /* WIDE AREA INFORMATION SERVER SOFTWARE: No guarantees or restrictions. See the readme file for the full standard disclaimer. 3.26.90 Harry Morris, morris@think.com 3.30.90 Harry Morris - removed chunk code from WAISSearchAPDU, - added makeWAISQueryType1Query() and readWAISType1Query() which replace makeWAISQueryTerms() and makeWAISQueryDocs(). 4.11.90 HWM - added definitions of wais element set names 4.14.90 HWM - changed symbol for relevance feedback query from QT_3 to QT_RelevanceFeedbackQuery added QT_TextRetrievalQuery as a synonym for QT_BooleanQuery - renamed makeWAISType1Query() to makeWAISTextQuery() renamed readWAISType1Query() to readWAISTextQuery() 5.29.90 TS - added CSTFreeWAISFoo functions */ #ifndef _H_WAIS_protocol_ #define _H_WAIS_protocol_ #include #include /*----------------------------------------------------------------------*/ /* Data types / constants */ /* date factor constants */ #define DF_INDEPENDENT 1 #define DF_LATER 2 #define DF_EARLIER 3 #define DF_SPECIFIED_RANGE 4 /* chunk types */ #define CT_document 0 #define CT_byte 1 #define CT_line 2 #define CT_paragraph 3 /* relevance feedback query */ #define QT_RelevanceFeedbackQuery "3" #define QT_TextRetrievalQuery QT_BooleanQuery /* new data tags */ #define DT_UserInformationLength (data_tag)99 #define DT_ChunkCode (data_tag)100 #define DT_ChunkIDLength (data_tag)101 #define DT_ChunkMarker (data_tag)102 #define DT_HighlightMarker (data_tag)103 #define DT_DeHighlightMarker (data_tag)104 #define DT_NewlineCharacters (data_tag)105 #define DT_SeedWords (data_tag)106 #define DT_DocumentIDChunk (data_tag)107 #define DT_ChunkStartID (data_tag)108 #define DT_ChunkEndID (data_tag)109 #define DT_TextList (data_tag)110 #define DT_DateFactor (data_tag)111 #define DT_BeginDateRange (data_tag)112 #define DT_EndDateRange (data_tag)113 #define DT_MaxDocumentsRetrieved (data_tag)114 #define DT_SeedWordsUsed (data_tag)115 #define DT_DocumentID (data_tag)116 #define DT_VersionNumber (data_tag)117 #define DT_Score (data_tag)118 #define DT_BestMatch (data_tag)119 #define DT_DocumentLength (data_tag)120 #define DT_Source (data_tag)121 #define DT_Date (data_tag)122 #define DT_Headline (data_tag)123 #define DT_OriginCity (data_tag)124 #define DT_PresentStartByte (data_tag)125 #define DT_TextLength (data_tag)126 #define DT_DocumentText (data_tag)127 #define DT_StockCodes (data_tag)128 #define DT_CompanyCodes (data_tag)129 #define DT_IndustryCodes (data_tag)130 /* added by harry */ #define DT_DocumentHeaderGroup (data_tag)150 #define DT_DocumentShortHeaderGroup (data_tag)151 #define DT_DocumentLongHeaderGroup (data_tag)152 #define DT_DocumentTextGroup (data_tag)153 #define DT_DocumentHeadlineGroup (data_tag)154 #define DT_DocumentCodeGroup (data_tag)155 #define DT_Lines (data_tag)131 #define DT_TYPE_BLOCK (data_tag)132 #define DT_TYPE (data_tag)133 /* wais element sets */ #define ES_DocumentHeader "Document Header" #define ES_DocumentShortHeader "Document Short Header" #define ES_DocumentLongHeader "Document Long Header" #define ES_DocumentText "Document Text" #define ES_DocumentHeadline "Document Headline" #define ES_DocumentCodes "Document Codes" typedef struct DocObj { /* specifies a section of a document */ any* DocumentID; char* Type; long ChunkCode; union { long Pos; any* ID; } ChunkStart; union { long Pos; any* ID; } ChunkEnd; } DocObj; /*----------------------------------------------------------------------*/ /* WAIS APDU extensions */ typedef struct WAISInitResponse { long ChunkCode; long ChunkIDLength; char* ChunkMarker; char* HighlightMarker; char* DeHighlightMarker; char* NewlineCharacters; /* XXX need to add UpdateFrequency and Update Time */ } WAISInitResponse; typedef struct WAISSearch { char* SeedWords; DocObj** Docs; char** TextList; long DateFactor; char* BeginDateRange; char* EndDateRange; long MaxDocumentsRetrieved; } WAISSearch; typedef struct WAISDocumentHeader { any* DocumentID; long VersionNumber; long Score; long BestMatch; long DocumentLength; long Lines; char** Types; char* Source; char* Date; char* Headline; char* OriginCity; } WAISDocumentHeader; typedef struct WAISDocumentShortHeader { any* DocumentID; long VersionNumber; long Score; long BestMatch; long DocumentLength; long Lines; } WAISDocumentShortHeader; typedef struct WAISDocumentLongHeader { any* DocumentID; long VersionNumber; long Score; long BestMatch; long DocumentLength; long Lines; char** Types; char* Source; char* Date; char* Headline; char* OriginCity; char* StockCodes; char* CompanyCodes; char* IndustryCodes; } WAISDocumentLongHeader; typedef struct WAISDocumentText { any* DocumentID; long VersionNumber; any* DocumentText; } WAISDocumentText; typedef struct WAISDocumentHeadlines { any* DocumentID; long VersionNumber; char* Source; char* Date; char* Headline; char* OriginCity; } WAISDocumentHeadlines; typedef struct WAISDocumentCodes { any* DocumentID; long VersionNumber; char* StockCodes; char* CompanyCodes; char* IndustryCodes; } WAISDocumentCodes; typedef struct WAISSearchResponse { char* SeedWordsUsed; WAISDocumentHeader** DocHeaders; WAISDocumentShortHeader** ShortHeaders; WAISDocumentLongHeader** LongHeaders; WAISDocumentText** Text; WAISDocumentHeadlines** Headlines; WAISDocumentCodes** Codes; diagnosticRecord** Diagnostics; } WAISSearchResponse; /*----------------------------------------------------------------------*/ /* Functions */ char * generate_search_apdu PARAMS((char* buff, /* buffer to hold the apdu */ long *buff_len, /* number of bytes written to the buffer */ char *seed_words, /* string of the seed words */ char *database_name, DocObj** docobjs, long maxDocsRetrieved )); DocObj* makeDocObjUsingWholeDocument PARAMS((any* aDocID,char* type)); DocObj* makeDocObjUsingBytes PARAMS((any* aDocID,char* type,long start,long end)); DocObj* makeDocObjUsingLines PARAMS((any* aDocID,char* type,long start,long end)); DocObj* makeDocObjUsingParagraphs PARAMS((any* aDocID,char* type,any* start,any* end)); void freeDocObj PARAMS((DocObj* doc)); WAISInitResponse* makeWAISInitResponse PARAMS((long chunkCode,long chunkIDLen, char* chunkMarker,char* highlightMarker, char* deHighlightMarker,char* newLineChars)); void freeWAISInitResponse PARAMS((WAISInitResponse* init)); WAISSearch* makeWAISSearch PARAMS(( char* seedWords,DocObj** docs,char** textList, long dateFactor,char* beginDateRange,char* endDateRange, long maxDocsRetrieved)); void freeWAISSearch PARAMS((WAISSearch* query)); WAISDocumentHeader* makeWAISDocumentHeader PARAMS(( any* aDocID,long versionNumber,long score,long bestMatch,long docLen, long lines,char** types,char* source,char* date,char* headline,char* originCity)); void freeWAISDocumentHeader PARAMS((WAISDocumentHeader* header)); char* writeWAISDocumentHeader PARAMS((WAISDocumentHeader* header,char* buffer,long* len)); char* readWAISDocumentHeader PARAMS((WAISDocumentHeader** header,char* buffer)); WAISDocumentShortHeader* makeWAISDocumentShortHeader PARAMS(( any* aDocID,long versionNumber,long score,long bestMatch,long docLen,long lines)); void freeWAISDocumentShortHeader PARAMS((WAISDocumentShortHeader* header)); char* writeWAISDocumentShortHeader PARAMS((WAISDocumentShortHeader* header, char* buffer,long* len)); char* readWAISDocumentShortHeader PARAMS((WAISDocumentShortHeader** header,char* buffer)); WAISDocumentLongHeader* makeWAISDocumentLongHeader PARAMS(( any* aDocID,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)); void freeWAISDocumentLongHeader PARAMS((WAISDocumentLongHeader* header)); char* writeWAISDocumentLongHeader PARAMS((WAISDocumentLongHeader* header,char* buffer,long* len)); char* readWAISDocumentLongHeader PARAMS((WAISDocumentLongHeader** header,char* buffer)); WAISSearchResponse* makeWAISSearchResponse PARAMS(( char* seedWordsUsed,WAISDocumentHeader** docHeaders, WAISDocumentShortHeader** shortHeaders, WAISDocumentLongHeader** longHeaders, WAISDocumentText** text,WAISDocumentHeadlines** headlines, WAISDocumentCodes** codes, diagnosticRecord** diagnostics)); void freeWAISSearchResponse PARAMS((WAISSearchResponse* response)); WAISDocumentText* makeWAISDocumentText PARAMS((any* aDocID,long versionNumber, any* documentText)); void freeWAISDocumentText PARAMS((WAISDocumentText* docText)); char* writeWAISDocumentText PARAMS((WAISDocumentText* docText,char* buffer,long* len)); char* readWAISDocumentText PARAMS((WAISDocumentText** docText,char* buffer)); WAISDocumentHeadlines* makeWAISDocumentHeadlines PARAMS(( any* aDocID,long versionNumber,char* source,char* date,char* headline, char* originCity)); void freeWAISDocumentHeadlines PARAMS((WAISDocumentHeadlines* docHeadline)); char* writeWAISDocumentHeadlines PARAMS((WAISDocumentHeadlines* docHeadline,char* buffer,long* len)); char* readWAISDocumentHeadlines PARAMS((WAISDocumentHeadlines** docHeadline,char* buffer)); WAISDocumentCodes* makeWAISDocumentCodes PARAMS(( any* aDocID,long versionNumber,char* stockCodes,char* companyCodes, char* industryCodes)); void freeWAISDocumentCodes PARAMS((WAISDocumentCodes* docCodes)); char* writeWAISDocumentCodes PARAMS((WAISDocumentCodes* docCodes,char* buffer,long* len)); char* readWAISDocumentCodes PARAMS((WAISDocumentCodes** docCodes,char* buffer)); any* makeWAISTextQuery PARAMS((DocObj** docs)); DocObj** readWAISTextQuery PARAMS((any* terms)); void CSTFreeWAISInitResponse PARAMS((WAISInitResponse* init)); void CSTFreeWAISSearch PARAMS((WAISSearch* query)); void CSTFreeDocObj PARAMS((DocObj* doc)); void CSTFreeWAISDocumentHeader PARAMS((WAISDocumentHeader* header)); void CSTFreeWAISDocumentShortHeader PARAMS((WAISDocumentShortHeader* header)); void CSTFreeWAISDocumentLongHeader PARAMS((WAISDocumentLongHeader* header)); void CSTFreeWAISSearchResponse PARAMS((WAISSearchResponse* response)); void CSTFreeWAISDocumentText PARAMS((WAISDocumentText* docText)); void CSTFreeWAISDocHeadlines PARAMS((WAISDocumentHeadlines* docHeadline)); void CSTFreeWAISDocumentCodes PARAMS((WAISDocumentCodes* docCodes)); void CSTFreeWAISTextQuery PARAMS(( any* query)); /*----------------------------------------------------------------------*/ #endif /* ndef _H_WAIS_protocol_ */ /* ** Routines originally from WMessage.h -- FM ** **----------------------------------------------------------------------*/ /* WIDE AREA INFORMATION SERVER SOFTWARE No guarantees or restrictions. See the readme file for the full standard disclaimer. 3.26.90 */ /* wais-message.h * * This is the header outside of WAIS Z39.50 messages. The header will be * printable ascii, so as to be transportable. This header will precede each * Z39.50 APDU, or zero-length message if it is an ACK or NACK. Be sure to * change hdr_vers current value if you change the structure of the header. * * The characters in the header are case insensitive so that the systems from * the past that only handle one case can at least read the header. * * 7.5.90 HWM - added constants * 7/5/90 brewster added funtion prototypes and comments * 11/30/90 HWM - went to version 2 (inits and typed retrieval) */ #ifndef WMESSAGE_H #define WMESSAGE_H #include #include typedef struct wais_header { char msg_len[10]; /* length in bytes of following message */ char msg_type; /* type of message: 'z'=Z39.50 APDU, 'a'=ACK, 'n'=NACK */ char hdr_vers; /* version of this header, currently = '2' */ char server[10]; /* name or address of server */ char compression; /* =no compression, 'u'=unix compress */ char encoding; /* =no encoding, 'h'=hexize, 'u'=uuencode */ char msg_checksum; /* XOR of every byte of message */ } WAISMessage; #define HEADER_LENGTH 25 /* number of bytes needed to write a wais-header (not sizeof(wais_header)) */ #define HEADER_VERSION (long)'2' /* message type */ #define Z3950 'z' #define ACK 'a' #define NAK 'n' /* compression */ #define NO_COMPRESSION ' ' #define UNIX_COMPRESSION 'u' /* encoding */ #define NO_ENCODING ' ' #define HEX_ENCODING 'h' /* Swartz 4/3 encoding */ #define IBM_HEXCODING 'i' /* same as h but uses characters acceptable for IBM mainframes */ #define UUENCODE 'u' void readWAISPacketHeader PARAMS((char* msgBuffer,WAISMessage *header_struct)); long getWAISPacketLength PARAMS((WAISMessage* header)); void writeWAISPacketHeader PARAMS((char* header,long dataLen,long type, char* server,long compression, long encoding,long version)); #endif /* ndef WMESSAGE_H */