425 lines
13 KiB
C
425 lines
13 KiB
C
/* 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 <HTUtils.h>
|
|
#endif
|
|
|
|
#include <HTVMS_WaisUI.h>
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* 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 function 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 <HTUtils.h>
|
|
#endif
|
|
|
|
#include <HTVMS_WaisUI.h>
|
|
|
|
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; /* <sp>=no compression, 'u'=unix compress */
|
|
char encoding; /* <sp>=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 */
|