/* cso.c
*
* Part of the Internet Gopher program, copyright (C) 1991
* University of Minnesota Microcomputer Workstation and Networks Center
*
* Option to conduct simple queries of cso nameservers.
*/
#include "gopher.h"
/* Options are what gets displayed, sFields are the names used for queries */
char *Option[] = { "Name", "Phone", "E-Mail", "Address", 0};
char *sField[] = { "name", "phone", "email", "address", 0 };
void do_cso(ZeGopher)
GopherStruct *ZeGopher;
{
int i, iLen, iCount; /* Index variables */
int iSock, iFieldCount; /* Socket number, number of fields */
char sQuery[MAXSTR]; /* Build query string here */
char sErrMsg[MAXSTR]; /* Error line on screen */
char Response[MAXRESP][MAXSTR];/* Receive responses here */
bzero(sQuery, MAXSTR); /* initialize */
bzero(sErrMsg, MAXSTR);
for (i = 0; i < MAXRESP; bzero(Response[i++], MAXSTR));
(ZeGopher->sPath)[0] = '\0';
iLen = 1;
iCount = 0;
i = strlen(sField[0]);
iFieldCount = 4; /* need to make a counter to count the fields in sField */
while (iCount == 0) {
Get_Options(ZeGopher->sTitle, sErrMsg, iFieldCount, Option, Response);
for (i = 0;i < MAXRESP; i++) /* count responses */
if (Response[i]) iCount++;
if (iCount == 0) /* if none, do nothing */
return;
else
iCount = 0; /* if some, reset for next check */
for(i = 0; i < 3; i++) /* kludgy: lines 1-3 are mandatory*/
if (Response[i][0] != '\0') iCount++;
if (iCount == 0)
strcpy(sErrMsg, "Data for Lines 1, 2, or 3 REQUIRED");
else
bzero(sErrMsg, MAXSTR);
}
strcpy(sQuery, "query");
for (i = 0; i < iFieldCount; i++) /* If there's a response to */
if (Response[i][0] != '\0') { /* process, add it to the query */
sprintf(sErrMsg, " %s=%s", sField[i], Response[i]);
strcat(sQuery, sErrMsg);
}
strcat(sQuery, "\n");
strcpy(ZeGopher->sPath, sQuery);
showfile(ZeGopher, NULL); /* Receive response as a file, exit */