+ m_num_databaseNames = 0;
+ m_databaseNames = 0;
+ m_recordSyntax = VAL_NONE;
+}
+
+void MyClient::set_databaseNames (int num, char **list)
+{
+ int i;
+ for (i = 0; i<m_num_databaseNames; i++)
+ delete m_databaseNames[i];
+ delete m_databaseNames;
+ m_databaseNames = 0;
+ m_num_databaseNames = num;
+ m_databaseNames = new (char*) [num];
+ for (i = 0; i<m_num_databaseNames; i++)
+ {
+ m_databaseNames[i] = new char[strlen(list[i])+1];
+ strcpy (m_databaseNames[i], list[i]);
+ }
+}
+
+void MyClient::set_syntax (const char *syntax)
+{
+ m_recordSyntax = VAL_NONE;
+ if (syntax && *syntax)
+ m_recordSyntax = oid_getvalbyname (syntax);
+}
+
+void MyClient::set_elementSetName (const char *elementSetName)
+{
+ if (m_elementSetNames)
+ delete [] m_elementSetNames->u.generic;
+ delete m_elementSetNames;
+ m_elementSetNames = 0;
+ if (elementSetName && *elementSetName)
+ {
+ m_elementSetNames = new Z_ElementSetNames;
+ m_elementSetNames->which = Z_ElementSetNames_generic;
+ m_elementSetNames->u.generic = new char[strlen(elementSetName)+1];
+ strcpy (m_elementSetNames->u.generic, elementSetName);
+ }
+}
+
+void MyClient::search(Yaz_Z_Query *query)
+{
+ Z_APDU *apdu = create_Z_PDU(Z_APDU_searchRequest);
+ Z_SearchRequest *req = apdu->u.searchRequest;
+
+ req->num_databaseNames = m_num_databaseNames;
+ req->databaseNames = m_databaseNames;
+ req->query = query->get_Z_Query();
+
+ int oid_syntax[OID_SIZE];
+ oident prefsyn;
+ if (m_recordSyntax != VAL_NONE)
+ {
+ prefsyn.proto = PROTO_Z3950;
+ prefsyn.oclass = CLASS_RECSYN;
+ prefsyn.value = (enum oid_value) m_recordSyntax;
+ oid_ent_to_oid(&prefsyn, oid_syntax);
+ req->preferredRecordSyntax = oid_syntax;
+ }
+ send_Z_PDU(apdu);
+}
+
+void MyClient::present(int start, int number)
+{
+ Z_APDU *apdu = create_Z_PDU(Z_APDU_presentRequest);
+ Z_PresentRequest *req = apdu->u.presentRequest;
+
+ req->resultSetStartPoint = &start;
+ req->numberOfRecordsRequested = &number;
+
+ int oid_syntax[OID_SIZE];
+ oident prefsyn;
+ if (m_recordSyntax != VAL_NONE)
+ {
+ prefsyn.proto = PROTO_Z3950;
+ prefsyn.oclass = CLASS_RECSYN;
+ prefsyn.value = (enum oid_value) m_recordSyntax;
+ oid_ent_to_oid(&prefsyn, oid_syntax);
+ req->preferredRecordSyntax = oid_syntax;
+ }
+ Z_RecordComposition compo;
+ if (m_elementSetNames)
+ {
+ req->recordComposition = &compo;
+ compo.which = Z_RecordComp_simple;
+ compo.u.simple = m_elementSetNames;
+ }
+ send_Z_PDU(apdu);