summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h
diff options
context:
space:
mode:
authorMats O Jansson <maja@cvs.openbsd.org>1998-03-11 17:48:09 +0000
committerMats O Jansson <maja@cvs.openbsd.org>1998-03-11 17:48:09 +0000
commit69de3a9e357327c17caa3b7bb058035e263573bc (patch)
treef6260f228c4d949b174128d017a7e323c7122f32 /gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h
parentb81973f175db7d3f4c763069b191dd57f4bd83d3 (diff)
Lynx 2.8
Diffstat (limited to 'gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h')
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h674
1 files changed, 674 insertions, 0 deletions
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h
new file mode 100644
index 00000000000..6f492b878e4
--- /dev/null
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h
@@ -0,0 +1,674 @@
+/* HTVMS_WAISUI.h
+**
+** Adaptation for Lynx by F.Macrides (macrides@sci.wfeb.edu)
+**
+** 31-May-1994 FM Initial version.
+*/
+
+#ifndef HTVMSWAIS_H
+#define HTVMSWAIS_H
+
+#ifndef __STDLIB_LOADED
+#include <stdlib.h>
+#endif /* __STDLIB_LOADED */
+
+#define _AP(args) ()
+
+void log_write _AP((char *));
+
+/*
+** Routines originally from Panic.h -- FM
+**
+**----------------------------------------------------------------------*/
+
+void panic (char* format,...);
+
+/*----------------------------------------------------------------------*/
+
+
+/*
+** Routines originally from CUtil.h -- FM
+**
+**----------------------------------------------------------------------*/
+
+/* types and constants */
+
+#ifndef boolean
+#define boolean unsigned long
+#endif /* boolean */
+
+#ifndef true
+#define true (boolean)1L
+#endif /* true */
+
+#ifndef false
+#define false (boolean)0L /* used to be (!true), but broke
+ some compilers */
+#endif /* false */
+
+#ifndef TRUE
+#define TRUE true
+#endif /* TRUE */
+
+#ifndef FALSE
+#define FALSE false
+#endif /* FALSE */
+
+/*----------------------------------------------------------------------*/
+/* functions */
+
+/* enhanced memory handling functions - don't call them directly, use the
+ macros below */
+void fs_checkPtr _AP((void* ptr));
+void* fs_malloc _AP((size_t size));
+void* fs_realloc _AP((void* ptr,size_t size));
+void fs_free _AP((void* ptr));
+char* fs_strncat _AP((char* dst,char* src,size_t maxToAdd,size_t maxTotal));
+
+/* macros for memory functions. call these in your program. */
+#define s_checkPtr(ptr) fs_checkPtr(ptr)
+#define s_malloc(size) fs_malloc(size)
+#define s_realloc(ptr,size) fs_realloc((ptr),(size))
+#define s_free(ptr) { fs_free((char*)ptr); ptr = NULL; }
+#define s_strncat(dst,src,maxToAdd,maxTotal) fs_strncat((dst),(src),(maxToAdd),(maxTotal))
+
+char* s_strdup _AP((char* s));
+
+#define IS_DELIMITER 1
+#define NOT_DELIMITER !IS_DELIMITER
+
+char char_downcase _AP((unsigned long ch));
+char *string_downcase _AP((char* word));
+
+/*----------------------------------------------------------------------*/
+
+
+
+/*
+** Routines originally from ZUtil.c -- FM
+**
+**----------------------------------------------------------------------*/
+
+/* Data types / constants */
+
+/* bytes to leave for the header size info */
+#define HEADER_LEN (size_t)2
+
+typedef long pdu_type;
+
+#define initAPDU (pdu_type)20
+#define initResponseAPDU (pdu_type)21
+#define searchAPDU (pdu_type)22
+#define searchResponseAPDU (pdu_type)23
+#define presentAPDU (pdu_type)24
+#define presentResponseAPDU (pdu_type)25
+#define deteteAPDU (pdu_type)26
+#define deleteResponseAPDU (pdu_type)27
+#define accessControlAPDU (pdu_type)28
+#define accessControlResponseAPDU (pdu_type)29
+#define resourceControlAPDU (pdu_type)30
+#define resourceControlResponseAPDU (pdu_type)31
+
+typedef struct any { /* an any is a non-ascii string of characters */
+ unsigned long size;
+ char* bytes;
+ } any;
+
+typedef any bit_map; /* a bit_map is a group of packed bits */
+
+typedef unsigned long data_tag;
+
+#define DT_PDUType (data_tag)1
+#define DT_ReferenceID (data_tag)2
+#define DT_ProtocolVersion (data_tag)3
+#define DT_Options (data_tag)4
+#define DT_PreferredMessageSize (data_tag)5
+#define DT_MaximumRecordSize (data_tag)6
+#define DT_IDAuthentication (data_tag)7
+#define DT_ImplementationID (data_tag)8
+#define DT_ImplementationName (data_tag)9
+#define DT_ImplementationVersion (data_tag)10
+#define DT_UserInformationField (data_tag)11
+#define DT_Result (data_tag)12
+#define DT_SmallSetUpperBound (data_tag)13
+#define DT_LargeSetLowerBound (data_tag)14
+#define DT_MediumSetPresentNumber (data_tag)15
+#define DT_ReplaceIndicator (data_tag)16
+#define DT_ResultSetName (data_tag)17
+#define DT_DatabaseNames (data_tag)18
+#define DT_ElementSetNames (data_tag)19
+#define DT_QueryType (data_tag)20
+#define DT_Query (data_tag)21
+#define DT_SearchStatus (data_tag)22
+#define DT_ResultCount (data_tag)23
+#define DT_NumberOfRecordsReturned (data_tag)24
+#define DT_NextResultSetPosition (data_tag)25
+#define DT_ResultSetStatus (data_tag)26
+#define DT_PresentStatus (data_tag)27
+#define DT_DatabaseDiagnosticRecords (data_tag)28
+#define DT_NumberOfRecordsRequested (data_tag)29
+#define DT_ResultSetStartPosition (data_tag)30
+#define DT_ResultSetID (data_tag)31
+#define DT_DeleteOperation (data_tag)32
+#define DT_DeleteStatus (data_tag)33
+#define DT_NumberNotDeleted (data_tag)34
+#define DT_BulkStatuses (data_tag)35
+#define DT_DeleteMSG (data_tag)36
+#define DT_SecurityChallenge (data_tag)37
+#define DT_SecurityChallengeResponse (data_tag)38
+#define DT_SuspendedFlag (data_tag)39
+#define DT_ResourceReport (data_tag)40
+#define DT_PartialResultsAvailable (data_tag)41
+#define DT_ContinueFlag (data_tag)42
+#define DT_ResultSetWanted (data_tag)43
+
+#define UNUSED -1
+
+/* number of bytes required to represent the following sizes in compressed
+ integer format
+ */
+#define CompressedInt1Byte 128 /* 2 ^ 7 */
+#define CompressedInt2Byte 16384 /* 2 ^ 14 */
+#define CompressedInt3Byte 2097152 /* 2 ^ 21 */
+/* others may follow ... */
+
+/* types of query */
+#define QT_0 "0" /* query whose non-standard format has been agreed upon
+ client and server */
+/* values for InitAPDU option element */
+#define WILL_USE TRUE
+#define WILL_NOT_USE FALSE
+#define WILL_SUPPORT TRUE
+#define WILL_NOT_SUPPORT FALSE
+
+/* values for InitResponseAPDU result element */
+#define ACCEPT TRUE
+#define REJECT FALSE
+
+/* values for SearchAPDU replace indicator element */
+#define ON TRUE
+#define OFF FALSE
+
+/* values for SearchResponseAPDU search status element */
+#define SUCCESS 0 /* intuitive huh? */
+#define FAILURE 1
+
+/* values for SearchResponseAPDU result set status element */
+#define SUBSET 1
+#define INTERIM 2
+#define NONE 3
+
+/* values for SearchResponseAPDU present status element */
+/* SUCCESS already defined */
+#define PARTIAL_1 1
+#define PARTIAL_2 2
+#define PARTIAL_3 3
+#define PARTIAL_4 4
+#define PS_NONE 5 /* can't use NONE since it was used by result
+ set status */
+
+#define DIAGNOSTIC_CODE_SIZE (size_t)3
+
+typedef struct diagnosticRecord
+ { boolean SURROGATE;
+ char DIAG[DIAGNOSTIC_CODE_SIZE];
+ char* ADDINFO;
+ } diagnosticRecord;
+
+#define D_PermanentSystemError "S1"
+#define D_TemporarySystemError "S2"
+#define D_UnsupportedSearch "S3"
+#define D_TermsOnlyStopWords "S5"
+#define D_TooManyArgumentWords "S6"
+#define D_TooManyBooleanOperators "S7"
+#define D_TooManyTruncatedWords "S8"
+#define D_TooMany IncompleteSubfields "S9"
+#define D_TruncatedWordsTooShort "SA"
+#define D_InvalidFormatForRecordNumber "SB"
+#define D_TooManyCharactersInSearch "SC"
+#define D_TooManyRecordsRetrieved "SD"
+#define D_PresentRequestOutOfRange "SF"
+#define D_SystemErrorInPresentRecords "SG"
+#define D_RecordNotAuthorizedToBeSent "SH"
+#define D_RecordExceedsPrefMessageSize "SI"
+#define D_RecordExceedsMaxRecordSize "SJ"
+#define D_ResultSetNotSuppAsSearchTerm "SK"
+#define D_OnlyOneRsltSetAsSrchTermSupp "SL"
+#define D_OnlyANDingOfASnglRsltSetSupp "SM"
+#define D_RsltSetExistsNoReplace "SN"
+#define D_ResultSetNamingNotSupported "SO"
+#define D_CombinationDatabasesNotSupp "SP"
+#define D_ElementSetNamesNotSupported "SQ"
+#define D_ElementSetNameNotValid "SR"
+#define D_OnlyASingleElmntSetNameSupp "SS"
+#define D_ResultSetDeletedByTarget "ST"
+#define D_ResultSetIsInUse "SU"
+#define D_DatabasesIsLocked "SV"
+#define D_TerminatedByNoContinueResp "SW"
+#define D_ResultSetDoesNotExist "SX"
+#define D_ResExNoResultsAvailable "SY"
+#define D_ResExUnpredictableResults "SZ"
+#define D_ResExValidSubsetOfResults "T1"
+#define D_AccessControlFailure "T2"
+#define D_SecurityNotIssuedReqTerm "T3"
+#define D_SecurityNotBeIssuedRecNotInc "T4"
+
+/*----------------------------------------------------------------------*/
+
+/* for internal error handling */
+
+extern char* readErrorPosition; /* pos where buf stoped making sense */
+
+/* the following are macros so that they can return OUT of the function
+ which calls them
+ */
+
+#define RETURN_ON_NULL(var) \
+ if (var == NULL) \
+ return(NULL); /* jump out of caller */
+
+#define REPORT_READ_ERROR(pos) \
+ { readErrorPosition = (pos); \
+ return(NULL); /* jump out of caller */ \
+ }
+
+#define CHECK_FOR_SPACE_LEFT(spaceNeeded,spaceLeft) \
+ { if (*spaceLeft >= spaceNeeded) \
+ (*spaceLeft) -= spaceNeeded; \
+ else \
+ { *spaceLeft = 0; \
+ return(NULL); /* jump out of the caller */ \
+ } \
+ }
+
+/*----------------------------------------------------------------------*/
+
+diagnosticRecord* makeDiag _AP((boolean surrogate,char* code,char* addInfo));
+void freeDiag _AP((diagnosticRecord* diag));
+char* writeDiag _AP((diagnosticRecord* diag,char* buffer,long* len));
+char* readDiag _AP((diagnosticRecord** diag,char* buffer));
+
+char* writeCompressedInteger _AP((unsigned long num,char* buf,long* len));
+char* readCompressedInteger _AP((unsigned long *num,char* buf));
+char* writeCompressedIntWithPadding _AP((unsigned long num,unsigned long size,
+ char* buffer,long* len));
+unsigned long writtenCompressedIntSize _AP((unsigned long num));
+
+char* writeTag _AP((data_tag tag,char* buf,long* len));
+char* readTag _AP((data_tag* tag,char* buf));
+data_tag peekTag _AP((char* buf));
+unsigned long writtenTagSize _AP((data_tag tag));
+
+any* makeAny _AP((unsigned long size,char* data));
+void freeAny _AP((any* a));
+any* duplicateAny _AP((any* a));
+char* writeAny _AP((any* a,data_tag tag,char* buffer,long* len));
+char* readAny _AP((any** anAny,char* buffer));
+unsigned long writtenAnySize _AP((data_tag tag,any* a));
+
+any* stringToAny _AP((char* s));
+char* anyToString _AP((any* a));
+unsigned long writtenStringSize _AP((data_tag tag,char* s));
+
+any* longToAny _AP((long Num));
+long anyToLong _AP((any* a));
+
+char* writeString _AP((char* s,data_tag tag,char* buffer,long* len));
+char* readString _AP((char** s,char* buffer));
+
+bit_map* makeBitMap (unsigned long numBits,...);
+
+void freeBitMap _AP((bit_map* bm));
+boolean bitAtPos _AP((long pos,bit_map* bm));
+char* writeBitMap _AP((bit_map* bm,data_tag tag,char* buffer,long* len));
+char* readBitMap _AP((bit_map** bm,char* buffer));
+
+char* writeByte _AP((unsigned long byte,char* buf,long* len));
+char* readByte _AP((unsigned char* byte,char* buf));
+
+char* writeBoolean _AP((boolean flag,char* buf,long* len));
+char* readBoolean _AP((boolean* flag,char* buf));
+
+char* writePDUType _AP((pdu_type pduType,char* buf,long* len));
+char* readPDUType _AP((pdu_type* pduType,char* buf));
+pdu_type peekPDUType _AP((char* buf));
+
+char* writeBinaryInteger _AP((long num,unsigned long size,
+ char* buf,long* len));
+char* readBinaryInteger _AP((long* num,unsigned long size,char* buf));
+unsigned long writtenCompressedBinIntSize _AP((long num));
+
+char* writeNum _AP((long num,data_tag tag,char* buffer,long* len));
+char* readNum _AP((long* num,char* buffer));
+unsigned long writtenNumSize _AP((data_tag tag,long num));
+
+void doList _AP((void** list,void (*func)()));
+
+char* writeProtocolVersion _AP((char* buf,long* len));
+char* defaultImplementationID _AP((void));
+char* defaultImplementationName _AP((void));
+char* defaultImplementationVersion _AP((void));
+
+/*----------------------------------------------------------------------*/
+
+
+/*
+** Routines originally from ZType1.c -- FM
+**
+**----------------------------------------------------------------------*/
+
+/* This file implements the type 1 query defined in appendices B & C
+ of the SR 1 spec.
+ */
+
+/*----------------------------------------------------------------------*/
+/* types and constants */
+
+/* new data tags */
+#define DT_AttributeList (data_tag)44
+#define DT_Term (data_tag)45
+#define DT_Operator (data_tag)46
+
+#define QT_BooleanQuery "1" /* standard boolean query */
+
+/* general attribute code - use in place of any attribute */
+#define IGNORE "ig"
+
+/* use value codes */
+#define UV_ISBN "ub"
+#define CORPORATE_NAME "uc"
+#define ISSN "us"
+#define PERSONAL_NAME "up"
+#define SUBJECT "uj"
+#define TITLE "ut"
+#define GEOGRAPHIC_NAME "ug"
+#define CODEN "ud"
+#define SUBJECT_SUBDIVISION "ue"
+#define SERIES_TITLE "uf"
+#define MICROFORM_GENERATION "uh"
+#define PLACE_OF_PUBLICATION "ui"
+#define NUC_CODE "uk"
+#define LANGUAGE "ul"
+#define COMBINATION_OF_USE_VALUES "um"
+#define SYSTEM_CONTROL_NUMBER "un"
+#define DATE "uo"
+#define LC_CONTROL_NUMBER "ur"
+#define MUSIC_PUBLISHERS_NUMBER "uu"
+#define GOVERNMENT_DOCUMENTS_NUMBER "uv"
+#define SUBJECT_CLASSIFICATION "uw"
+#define RECORD_TYPE "uy"
+
+/* relation value codes */
+#define EQUAL "re"
+#define GREATER_THAN "rg"
+#define GREATER_THAN_OR_EQUAL "ro"
+#define LESS_THAN "rl"
+#define LESS_THAN_OR_EQUAL "rp"
+#define NOT_EQUAL "rn"
+
+/* position value codes */
+#define FIRST_IN_FIELD "pf"
+#define FIRST_IN_SUBFIELD "ps"
+#define FIRST_IN_A_SUBFIELD "pa"
+#define FIRST_IN_NOT_A_SUBFIELD "pt"
+#define ANY_POSITION_IN_FIELD "py"
+
+/* structure value codes */
+#define PHRASE "sp"
+#define WORD "sw"
+#define KEY "sk"
+#define WORD_LIST "sl"
+
+/* truncation value codes */
+#define NO_TRUNCATION "tn"
+#define RIGHT_TRUNCATION "tr"
+#define PROC_NUM_INCLUDED_IN_SEARCH_ARG "ti"
+
+/* completeness value codes */
+#define INCOMPLETE_SUBFIELD "ci"
+#define COMPLETE_SUBFIELD "cs"
+#define COMPLETEFIELD "cf"
+
+/* operator codes */
+#define AND "a"
+#define OR "o"
+#define AND_NOT "n"
+
+/* term types */
+#define TT_Attribute 1
+#define TT_ResultSetID 2
+#define TT_Operator 3
+
+#define ATTRIBUTE_SIZE 3
+#define OPERATOR_SIZE 2
+
+typedef struct query_term {
+ /* type */
+ long TermType;
+ /* for term */
+ char Use[ATTRIBUTE_SIZE];
+ char Relation[ATTRIBUTE_SIZE];
+ char Position[ATTRIBUTE_SIZE];
+ char Structure[ATTRIBUTE_SIZE];
+ char Truncation[ATTRIBUTE_SIZE];
+ char Completeness[ATTRIBUTE_SIZE];
+ any* Term;
+ /* for result set */
+ any* ResultSetID;
+ /* for operator */
+ char Operator[OPERATOR_SIZE];
+} query_term;
+
+/*----------------------------------------------------------------------*/
+/* functions */
+
+query_term* makeAttributeTerm _AP((
+ char* use,char* relation,char* position,char* structure,
+ char* truncation,char* completeness,any* term));
+query_term* makeResultSetTerm _AP((any* resultSet));
+query_term* makeOperatorTerm _AP((char* operatorCode));
+void freeTerm _AP((query_term* qt));
+char* writeQueryTerm _AP((query_term* qt,char* buffer,long* len));
+char* readQueryTerm _AP((query_term** qt,char* buffer));
+any* writeQuery _AP((query_term** terms));
+query_term** readQuery _AP((any* info));
+
+/*----------------------------------------------------------------------*/
+
+
+/*
+** Routines originally from UI.c -- FM
+**
+**----------------------------------------------------------------------*/
+
+char *
+generate_search_apdu _AP((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
+ ));
+
+char *
+generate_retrieval_apdu _AP((char *buff,
+ long *buff_len,
+ any *docID,
+ long chunk_type,
+ long start_line, long end_line,
+ char *type,
+ char *database_name));
+
+
+long
+interpret_message _AP((char *request_message,
+ long request_length,
+ char *response_message,
+ long response_buffer_length, /* length of the buffer (modified)*/
+ FILE *connection,
+ boolean verbose));
+
+
+void
+display_text_record_completely _AP((WAISDocumentText *record,
+ boolean quote_string_quotes));
+
+char *trim_junk _AP((char *headline));
+
+
+
+/*
+** Routines originally from ZProt.c -- FM
+**
+**----------------------------------------------------------------------*/
+
+/* APDU types */
+
+typedef struct InitAPDU {
+ pdu_type PDUType;
+ boolean willSearch,willPresent,willDelete;
+ boolean supportAccessControl,supportResourceControl;
+ long PreferredMessageSize;
+ long MaximumRecordSize;
+ char* IDAuthentication;
+ char* ImplementationID;
+ char* ImplementationName;
+ char* ImplementationVersion;
+ any* ReferenceID;
+ void* UserInformationField;
+ } InitAPDU;
+
+typedef struct InitResponseAPDU {
+ pdu_type PDUType;
+ boolean Result;
+ boolean willSearch,willPresent,willDelete;
+ boolean supportAccessControl,supportResourceControl;
+ long PreferredMessageSize;
+ long MaximumRecordSize;
+ char* IDAuthentication;
+ char* ImplementationID;
+ char* ImplementationName;
+ char* ImplementationVersion;
+ any* ReferenceID;
+ void* UserInformationField;
+ } InitResponseAPDU;
+
+typedef struct SearchAPDU {
+ pdu_type PDUType;
+ long SmallSetUpperBound;
+ long LargeSetLowerBound;
+ long MediumSetPresentNumber;
+ boolean ReplaceIndicator;
+ char* ResultSetName;
+ char** DatabaseNames;
+ char* QueryType;
+ char** ElementSetNames;
+ any* ReferenceID;
+ void* Query;
+ } SearchAPDU;
+
+typedef struct SearchResponseAPDU {
+ pdu_type PDUType;
+ long SearchStatus;
+ long ResultCount;
+ long NumberOfRecordsReturned;
+ long NextResultSetPosition;
+ long ResultSetStatus;
+ long PresentStatus;
+ any* ReferenceID;
+ void* DatabaseDiagnosticRecords;
+ } SearchResponseAPDU;
+
+typedef struct PresentAPDU {
+ pdu_type PDUType;
+ long NumberOfRecordsRequested;
+ long ResultSetStartPosition;
+ char* ResultSetID;
+ char* ElementSetNames;
+ any* ReferenceID;
+ void* PresentInfo;
+ } PresentAPDU;
+
+typedef struct PresentResponseAPDU {
+ pdu_type PDUType;
+ boolean PresentStatus;
+ long NumberOfRecordsReturned;
+ long NextResultSetPosition;
+ any* ReferenceID;
+ void* DatabaseDiagnosticRecords;
+ } PresentResponseAPDU;
+
+/*----------------------------------------------------------------------*/
+/* Functions */
+
+InitAPDU* makeInitAPDU _AP((boolean search,boolean present,boolean deleteIt,
+ boolean accessControl,boolean resourceControl,
+ long prefMsgSize,long maxMsgSize,
+ char* auth,char* id,char* name, char* version,
+ any* refID,void* userInfo));
+void freeInitAPDU _AP((InitAPDU* init));
+char* writeInitAPDU _AP((InitAPDU* init,char* buffer,long* len));
+char* readInitAPDU _AP((InitAPDU** init,char* buffer));
+
+InitResponseAPDU* makeInitResponseAPDU _AP((boolean result,
+ boolean search,boolean present,boolean deleteIt,
+ boolean accessControl,boolean resourceControl,
+ long prefMsgSize,long maxMsgSize,
+ char* auth,char* id,char* name, char* version,
+ any* refID,void* userInfo));
+void freeInitResponseAPDU _AP((InitResponseAPDU* init));
+char* writeInitResponseAPDU _AP((InitResponseAPDU* init,char* buffer,long* len));
+char* readInitResponseAPDU _AP((InitResponseAPDU** init,char* buffer));
+InitResponseAPDU* replyToInitAPDU _AP((InitAPDU* init,boolean result,void* userInfo));
+
+SearchAPDU* makeSearchAPDU _AP((long small,long large, long medium,
+ boolean replace,char* name,char** databases,
+ char* type,char** elements,any* refID,void* queryInfo));
+void freeSearchAPDU _AP((SearchAPDU* query));
+char* writeSearchAPDU _AP((SearchAPDU* query,char* buffer,long* len));
+char* readSearchAPDU _AP((SearchAPDU** query,char* buffer));
+
+SearchResponseAPDU* makeSearchResponseAPDU _AP((long result,long count,
+ long recordsReturned,long nextPos,
+ long resultStatus,long presentStatus,
+ any* refID,void* records));
+void freeSearchResponseAPDU _AP((SearchResponseAPDU* queryResponse));
+char* writeSearchResponseAPDU _AP((SearchResponseAPDU* queryResponse,char* buffer,long* len));
+char* readSearchResponseAPDU _AP((SearchResponseAPDU** queryResponse,char* buffer));
+
+PresentAPDU* makePresentAPDU _AP((long recsReq, long startPos,
+ char* resultID,any* refID,void* info));
+void freePresentAPDU _AP((PresentAPDU* present));
+char* writePresentAPDU _AP((PresentAPDU* present,char* buffer,long* len));
+char* readPresentAPDU _AP((PresentAPDU** present,char* buffer));
+
+PresentResponseAPDU* makePresentResponseAPDU _AP((boolean status,long recsRet,
+ long nextPos,any* refID,
+ void* records));
+void freePresentResponseAPDU _AP((PresentResponseAPDU* present));
+char* writePresentResponseAPDU _AP((PresentResponseAPDU* present,char* buffer,long* len));
+char* readPresentResponseAPDU _AP((PresentResponseAPDU** present,char* buffer));
+
+/*----------------------------------------------------------------------*/
+/* user extension hooks: */
+
+extern char* writeInitInfo _AP((InitAPDU* init,char* buffer,long* len));
+extern char* readInitInfo _AP((void** info,char* buffer));
+
+extern char* writeInitResponseInfo _AP((InitResponseAPDU* init,char* buffer,long* len));
+extern char* readInitResponseInfo _AP((void** info,char* buffer));
+
+extern char* writeSearchInfo _AP((SearchAPDU* query,char* buffer,long* len));
+extern char* readSearchInfo _AP((void** info,char* buffer));
+
+extern char* writeSearchResponseInfo _AP((SearchResponseAPDU* query,char* buffer,long* len));
+extern char* readSearchResponseInfo _AP((void** info,char* buffer));
+
+extern char* writePresentInfo _AP((PresentAPDU* present,char* buffer,long* len));
+extern char* readPresentInfo _AP((void** info,char* buffer));
+
+extern char* writePresentResponseInfo _AP((PresentResponseAPDU* present,char* buffer,long* len));
+extern char* readPresentResponseInfo _AP((void** info,char* buffer));
+
+
+#endif /* HTVMSWAIS_H */