/* 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 */

    return;
}