/* 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_ #ifndef HTUTILS_H #include #endif #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(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(any *aDocID, char *type); DocObj *makeDocObjUsingBytes(any *aDocID, char *type, long start, long end); DocObj *makeDocObjUsingLines(any *aDocID, char *type, long start, long end); DocObj *makeDocObjUsingParagraphs(any *aDocID, char *type, any *start, any *end); void freeDocObj(DocObj *doc); WAISInitResponse *makeWAISInitResponse(long chunkCode, long chunkIDLen, char *chunkMarker, char *highlightMarker, char *deHighlightMarker, char *newLineChars); void freeWAISInitResponse(WAISInitResponse *init); WAISSearch *makeWAISSearch(char *seedWords, DocObj **docs, char **textList, long dateFactor, char *beginDateRange, char *endDateRange, long maxDocsRetrieved); void freeWAISSearch(WAISSearch *query); WAISDocumentHeader *makeWAISDocumentHeader(any *aDocID, long versionNumber, long score, long bestMatch, long docLen, long lines, char **types, char *source, char *date, char *headline, char *originCity); void freeWAISDocumentHeader(WAISDocumentHeader *header); char *writeWAISDocumentHeader(WAISDocumentHeader *header, char *buffer, long *len); char *readWAISDocumentHeader(WAISDocumentHeader **header, char *buffer); WAISDocumentShortHeader *makeWAISDocumentShortHeader(any *aDocID, long versionNumber, long score, long bestMatch, long docLen, long lines); void freeWAISDocumentShortHeader(WAISDocumentShortHeader *header); char *writeWAISDocumentShortHeader(WAISDocumentShortHeader *header, char *buffer, long *len); char *readWAISDocumentShortHeader(WAISDocumentShortHeader **header, char *buffer); WAISDocumentLongHeader *makeWAISDocumentLongHeader(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(WAISDocumentLongHeader *header); char *writeWAISDocumentLongHeader(WAISDocumentLongHeader *header, char *buffer, long *len); char *readWAISDocumentLongHeader(WAISDocumentLongHeader **header, char *buffer); WAISSearchResponse *makeWAISSearchResponse(char *seedWordsUsed, WAISDocumentHeader **docHeaders, WAISDocumentShortHeader **shortHeaders, WAISDocumentLongHeader **longHeaders, WAISDocumentText **text, WAISDocumentHeadlines **headlines, WAISDocumentCodes **codes, diagnosticRecord ** diagnostics); void freeWAISSearchResponse(WAISSearchResponse * response); WAISDocumentText *makeWAISDocumentText(any *aDocID, long versionNumber, any *documentText); void freeWAISDocumentText(WAISDocumentText *docText); char *writeWAISDocumentText(WAISDocumentText *docText, char *buffer, long *len); char *readWAISDocumentText(WAISDocumentText **docText, char *buffer); WAISDocumentHeadlines *makeWAISDocumentHeadlines(any *aDocID, long versionNumber, char *source, char *date, char *headline, char *originCity); void freeWAISDocumentHeadlines(WAISDocumentHeadlines *docHeadline); char *writeWAISDocumentHeadlines(WAISDocumentHeadlines *docHeadline, char *buffer, long *len); char *readWAISDocumentHeadlines(WAISDocumentHeadlines **docHeadline, char *buffer); WAISDocumentCodes *makeWAISDocumentCodes(any *aDocID, long versionNumber, char *stockCodes, char *companyCodes, char *industryCodes); void freeWAISDocumentCodes(WAISDocumentCodes *docCodes); char *writeWAISDocumentCodes(WAISDocumentCodes *docCodes, char *buffer, long *len); char *readWAISDocumentCodes(WAISDocumentCodes **docCodes, char *buffer); any *makeWAISTextQuery(DocObj **docs); DocObj **readWAISTextQuery(any *terms); void CSTFreeWAISInitResponse(WAISInitResponse *init); void CSTFreeWAISSearch(WAISSearch *query); void CSTFreeDocObj(DocObj *doc); void CSTFreeWAISDocumentHeader(WAISDocumentHeader *header); void CSTFreeWAISDocumentShortHeader(WAISDocumentShortHeader *header); void CSTFreeWAISDocumentLongHeader(WAISDocumentLongHeader *header); void CSTFreeWAISSearchResponse(WAISSearchResponse * response); void CSTFreeWAISDocumentText(WAISDocumentText *docText); void CSTFreeWAISDocHeadlines(WAISDocumentHeadlines *docHeadline); void CSTFreeWAISDocumentCodes(WAISDocumentCodes *docCodes); void CSTFreeWAISTextQuery(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 #ifndef HTUTILS_H #include #endif #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(char *msgBuffer, WAISMessage * header_struct); long getWAISPacketLength(WAISMessage * header); void writeWAISPacketHeader(char *header, long dataLen, long type, char *server, long compression, long encoding, long version); #endif /* ndef WMESSAGE_H */