server/get2.cxx File Reference

Udanax input routines - file #2 - no front end version. More...

#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
#include "udanax.h"

Include dependency graph for get2.cxx:

Include dependency graph

Go to the source code of this file.

Functions

bool getspecset (Session *sess, typespecset *specsetptr)
 ???

void prompt (Session *sess, char *string)
 ???

bool getisa (Session *sess, IStreamAddr *isaptr)
 ???

bool getvsa (Session *sess, Tumbler *vsaptr)
 ???

bool gettextset (Session *sess, typetextset *textsetptr)
 ???

bool getnumber (Session *sess, int *numptr)
 ???

bool getcutseq (Session *sess, typecutseq *cutseqptr)
 ???

bool getspanset (Session *sess, typespanset *spansetptr, typeitemid id)
 ???

bool getspan (Session *sess, typespan *spanptr, typeitemid id)
 ???

bool gettumbler (Session *sess, Tumbler *tumblerptr)
 parse a tumbler value from the input stream

bool validaccount (Session *sess, IStreamAddr *accountptr)
 ???

void error (Session *sess, char *string)
 ???

bool gettext (Session *sess, typetext *textptr)
 ???

bool getvspec (Session *sess, typevspec *vspecptr)
 ???

bool validrequest (Session *sess, typerequest request)
 ???

bool getnum (Session *sess, int *numptr)
 ???

bool eatchar (Session *sess, char c)
 if specified char is at front of input stream, grab and discard; else leave it alone

bool needchar (Session *sess, char c)
 ???

bool getbool (Session *sess, bool *boolptr)
 ???

bool getrequest (Session *sess, typerequest *requestptr)
 ???

bool getboolset (Session *sess, typeboolsetnode **boolsetptr)
 ???


Detailed Description

Udanax input routines - file #2 - no front end version.

(to be defined)

Definition in file get2.cxx.


Function Documentation

bool eatchar Session sess,
char  c
 

if specified char is at front of input stream, grab and discard; else leave it alone

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 157 of file get2.cxx.

References Session::inp, and metachar.

00158                                : User's session context
00159     char     c)
00160 {
00161     metachar m;
00162 
00163     if ((m = getc(sess->inp)) != c) {
00164         ungetc(m, sess->inp);
00165         return false;
00166     } else
00167         return true;
00168 }

void error Session session,
char *  string
 

???

(to be defined)

Parameters:
session  Input: User's session context

Definition at line 113 of file put.cxx.

00114                                : User's session context
00115     char    *string)
00116 {
00117     fprintf(sess->errp, "%s", string);
00118 }

bool getbool Session sess,
bool *  boolptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 263 of file get2.cxx.

References eatchar(), error(), Session::inp, and prompt().

Referenced by getboolset(), getcutseq(), getspanset(), and getspecset().

00264                                : User's session context
00265     bool    *boolptr)
00266 {
00267     prompt(sess, "(y/n) ");
00268     int c = getc(sess->inp);
00269     if (isupper(c))
00270         c = tolower(c);
00271 
00272     eatchar(sess, '\n');
00273 
00274     if (c == 'y') {
00275         *boolptr = true;
00276         return true;
00277 
00278     } else if (c == 'n') {
00279         *boolptr = false;
00280         return true;
00281 
00282     } else {
00283         error(sess, "need 'y' or 'n'");
00284         return false;
00285     }
00286 }

bool getboolset Session sess,
typeboolsetnode **  boolsetptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 606 of file get2.cxx.

References getbool(), getspanset(), ISPANID, typeboolsetnode::itemid, typeboolsetnode::next, NODEID, NULL, prompt(), and typeboolsetnode::val.

00607                                        : User's session context
00608     typeboolsetnode **boolsetptr)
00609 {
00610     bool disjunct;
00611     typeboolsetnode *boolset;
00612 
00613     for (;;) {
00614         prompt(sess, "any disjunctions? ");
00615         if (!getbool(sess, &disjunct))
00616             return false;
00617 
00618         if (!disjunct) {
00619             *boolsetptr = NULL;
00620             return true;
00621         }
00622 
00623         boolset = new(sess) typeboolsetnode;
00624 //        boolset = (typeboolsetnode *) sess->alloc(sizeof(typeboolsetnode));
00625 
00626         prompt(sess, "enter disjunction=> ");
00627         if (!getspanset(sess, &boolset->val, ISPANID))
00628             return false;
00629 
00630 /* zzz & zzz */
00631         boolset->itemid = NODEID;
00632         *boolsetptr     = boolset;
00633         boolsetptr      = &boolset->next;
00634     }
00635 }

bool getcutseq Session sess,
typecutseq cutseqptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 432 of file get2fe.cxx.

References typecutseq::cutsarray, getnumber(), gettumbler(), and typecutseq::numberofcuts.

Referenced by getrearrange().

00433                                   : User's session context
00434     typecutseq *cutseqptr)
00435 {
00436     int ncuts, i;
00437 
00438 /* fprintf (logfile, " cutseq"); */
00439     if (!(getnumber(sess, &ncuts) && (ncuts == 3 || ncuts == 4)))
00440         return false;
00441 
00442 /* fprintf (logfile, " {"); */
00443     cutseqptr->numberofcuts = ncuts;
00444 
00445     for (i = 0; i < ncuts; ++i) {
00446         if (!gettumbler(sess, &cutseqptr->cutsarray[i]))
00447             return false;
00448     }
00449 /* fprintf (logfile, " }"); */
00450     return true;
00451 }

bool getisa Session sess,
IStreamAddr isaptr
 

???

(to be defined)

Referenced by getcopy(), getcreatelink(), getcreatenewversion(), getdeletevspan(), getfindnextnlinksfromtothree(), getfollowlink(), getinsert(), getrearrange(), getretrievedocvspan(), getretrievedocvspanset(), getspan(), and getvspec().

bool getnum Session sess,
int *  numptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 120 of file get2.cxx.

References Session::errp, Session::inp, and metachar.

Referenced by getnumber(), gettdigit(), and gettumbler().

00121                                : User's session context
00122     int     *numptr)
00123 {                                      /* inside temporary */
00124     metachar c;
00125     int num;
00126 
00127     bool flag = false;                 /* should check for minus */
00128     for (num = 0; (c = getc(sess->inp)) != EOF && isdigit(c);) {
00129         num = num * 10 + c - '0';
00130         flag = true;
00131     }
00132 
00133     if (!flag) {
00134         fprintf(sess->errp, "no number\n");
00135 #ifndef DISTRIBUTION
00136         if (c == '?' || c == 'h') {
00137             system("cat /usr3/xu/requests.j");
00138         } else if (c == '!') {
00139             system("csh");
00140         }
00141 #endif
00142     } else {
00143         ungetc(c, sess->inp);
00144         *numptr = num;
00145     }
00146     return flag;
00147 }

bool getnumber Session sess,
int *  numptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 266 of file get2fe.cxx.

References pullc(), and WORDELIM.

Referenced by getcutseq(), getfindnextnlinksfromtothree(), getfollowlink(), getopen(), getrequest(), getspecset(), gettextset(), and setdebug().

00267                                : User's session context
00268     int     *numptr)
00269 {
00270     int num = 0;
00271     bool flag = false;
00272 
00273     char c;
00274     while ((c = pullc(sess)) && isdigit(c)) {
00275         num = num * 10 + c - '0';
00276         flag = true;
00277     }
00278     *numptr = num;
00279 /* fprintf (logfile, " %d", *numptr); */
00280     return flag && (c == WORDELIM || c == '\n');
00281 }

bool getrequest Session sess,
typerequest *  requestptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 326 of file get2.cxx.

00327                                    : User's session context
00328     typerequest *requestptr)
00329 {
00330     prompt(sess, "\nrequest? ");
00331     int c = getc(sess->inp);
00332     if ((int) c == EOF) {
00333         L("endfile\n");
00334         sess->inp = stdin;
00335     }                                  /* else if (c == ':') { while ((c = * getc (sess->inp)) != '\n'); * return
00336                                         * (false); } */
00337     ungetc(c, sess->inp);
00338     return getnumber(sess, requestptr) && validrequest(sess, *requestptr);
00339 }

bool getspan Session sess,
typespan spanptr,
typeitemid  id
 

???

(to be defined)

bool getspanset Session sess,
typespanset spansetptr,
typeitemid  id
 

???

(to be defined)

bool getspecset Session sess,
typespecset specsetptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 312 of file get2fe.cxx.

References getnumber(), getspan(), getvspec(), ISPANID, NULL, pullc(), SPANFLAG, typespecset, VSPECFLAG, and WORDELIM.

Referenced by getcopy(), getcreatelink(), getfinddocscontaining(), getfindlinksfromtothree(), getretrieveendsets(), getretrievev(), and getshowrelationof2versions().

00313                                    : User's session context
00314     typespecset *specsetptr)
00315 {
00316     int num;
00317     char c, c1;
00318     typespecset specset;
00319 
00320     *specsetptr = NULL;
00321     if (!getnumber(sess, &num))
00322         return false;
00323 
00324     if (num == 0)
00325         return true;
00326 
00327     while (num--) {
00328         c = pullc(sess);
00329         if ((c != SPANFLAG) && (c != VSPECFLAG))
00330             return false;
00331 
00332 /* mightn't work */ if ((c1 = pullc(sess)) != WORDELIM && c1 != '\n')
00333             return false;
00334 
00335         if (c == SPANFLAG) {
00336             specset = (typespecset) new(sess) typespan;
00337 //            specset = (typespecset) sess->alloc(sizeof(typespan));
00338             if (!getspan(sess, (typespan *) specset, ISPANID))
00339                 return false;
00340         } else {
00341             specset = (typespecset) new(sess) typevspec;
00342 //            specset = (typespecset) sess->alloc(sizeof(typevspec));
00343             if (!getvspec(sess, (typevspec *) specset))
00344                 return false;
00345         }
00346 
00347         *specsetptr = specset;
00348         specsetptr = (typespecset *) & ((typeitemheader *) specset)->next;
00349     }
00350     return true;
00351 }

bool gettext Session sess,
typetext textptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 540 of file get2.cxx.

References GRANTEXTLENGTH, Session::inp, typetext::itemid, typetext::length, typetext::string, and TEXTID.

00541                                 : User's session context
00542     typetext *textptr)
00543 {
00544     if (!fgets(textptr->string, GRANTEXTLENGTH, sess->inp)) {
00545         textptr->length = 0;
00546         return false;
00547     }
00548 
00549     textptr->length = strlen(textptr->string);
00550     if (textptr->length <= 1)
00551         return false;
00552 
00553 /* remove newlines */
00554 /* 
00555  * if (textptr->string[textptr->length - 1] == '\n')
00556  * textptr->string[--textptr->length] = '\0'; */
00557 
00558     textptr->itemid = TEXTID;
00559     return true;
00560 }

bool gettextset Session sess,
typetextset textsetptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 461 of file get2fe.cxx.

References getnumber(), gettext(), typetext::next, NULL, and typetextset.

Referenced by getinsert().

00462                                    : User's session context
00463     typetextset *textsetptr)
00464 {
00465     typetextset textset;
00466     int num;
00467 
00468 /* fprintf (logfile, " textset"); fprintf (sess->errp, "X gettextset\n"); */
00469     *textsetptr = NULL;
00470     if (!getnumber(sess, &num))
00471         return false;
00472 
00473 /* fprintf (sess->errp, "X number of texts is %d\n", num); fprintf (logfile, " {"); */
00474     while (num--) {
00475         textset = (typetextset) new(sess) typetext;
00476 //        textset = (typetextset) sess->alloc(sizeof(typetext));
00477         if (!gettext(sess, textset))
00478             return false;
00479 
00480         *textsetptr = textset;
00481         textsetptr = &textset->next;
00482     }
00483 /* fprintf (logfile, " }"); */
00484     return true;
00485 }

bool gettumbler Session sess,
Tumbler tumblerptr
 

parse a tumbler value from the input stream

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 187 of file get2fe.cxx.

References error(), Tumbler::exp, getnum(), gettdigit(), Tumbler::mantissa, NPLACES, pullc(), tumblerclear, and WORDELIM.

Referenced by getclose(), getcopy(), getcreatelink(), getcreatenewversion(), getcreatenode_or_account(), getcutseq(), getdeletevspan(), getfindnextnlinksfromtothree(), getfollowlink(), getinsert(), getisa(), getopen(), getrearrange(), getretrievedocvspan(), getretrievedocvspanset(), getvsa(), getxaccount(), and showorgl().

00188                                : User's session context
00189     Tumbler *tumblerptr)
00190 {
00191     char c;
00192     int i, num, value;
00193 
00194 /* fprintf(sess->errp,"X gettumbler\n"); */
00195     tumblerclear(tumblerptr);
00196     getnum(sess, &num);
00197     tumblerptr->exp = -num;
00198 
00199     for (i = 0; gettdigit(sess, &value); i++) {
00200         if (i > NPLACES) {
00201             error(sess, "gettumbler overflow\n");
00202             return false;
00203         }
00204         tumblerptr->mantissa[i] = value;
00205     }
00206 /* fprintf (logfile, " "); puttumbler (logfile, tumblerptr); */
00207     return (c = pullc(sess)) == WORDELIM || c == '\n';
00208 }

bool getvsa Session sess,
Tumbler vsaptr
 

???

(to be defined)

Referenced by getcopy(), getcutseq(), and getinsert().

bool getvspec Session sess,
typevspec vspecptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 429 of file get2.cxx.

References typevspec::docisa, getisa(), getspanset(), typevspec::itemid, typevspec::next, NULL, prompt(), VSPANID, typevspec::vspanset, and VSPECID.

00430                                  : User's session context
00431     typevspec *vspecptr)
00432 {
00433     vspecptr->itemid = VSPECID;
00434     vspecptr->next   = NULL;
00435 
00436     prompt(sess, "document=> ");
00437     if (!(getisa(sess, &vspecptr->docisa) && getspanset(sess, &vspecptr->vspanset, VSPANID)))
00438         return false;
00439 
00440     return true;
00441 }

bool needchar Session sess,
char  c
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 178 of file get2.cxx.

References eatchar(), and Session::errp.

Referenced by getnumber(), and gettumbler().

00179                                : User's session context
00180     char     c)
00181 {
00182     if (!eatchar(sess, c)) {
00183         fprintf(sess->errp, "needed a ");
00184 
00185         if (c == '\n')
00186             fprintf(sess->errp, "newline\n");
00187         else
00188             fprintf(sess->errp, "%c\n", c);
00189 
00190         return false;
00191     }
00192     return true;
00193 }

void prompt Session session,
char *  string
 

???

(to be defined)

Parameters:
session  Input: User's session context

Definition at line 98 of file put.cxx.

00099                                : User's session context
00100     char    *string)
00101 {
00102     fprintf(sess->outp, "%s", string);
00103 }

bool validaccount Session sess,
IStreamAddr accountptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 587 of file get2fe.cxx.

Referenced by getxaccount().

00588                                    : User's session context
00589     IStreamAddr *accountptr)
00590 {
00591     return true;
00592 }

bool validrequest Session sess,
typerequest  request
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 349 of file get2.cxx.

References Session::errp, NREQUESTS, NULL, and requestfns.

00350                                    : User's session context
00351     typerequest  request)
00352 {
00353     if (request >= 0 && request < NREQUESTS && requestfns[request] != NULL)
00354         return true;
00355 
00356     fprintf(sess->errp, "invalid request: %d\n", request);
00357     return false;
00358 }


Generated on Sun Aug 21 04:18:44 2005 for Udanax-Green by doxygen1.3.4