Annotation of 42BSD/ingres/source/libq/IIw_left.c, revision 1.1

1.1     ! root        1: # include      <ingres.h>
        !             2: # undef MAXNAME
        !             3: # include      "../equel/constants.h"
        !             4: # include      "IIglobals.h"
        !             5: # include      <sccs.h>
        !             6: 
        !             7: SCCSID(@(#)IIw_left.c  7.2     10/27/81)
        !             8: 
        !             9: /*
        !            10: **     IIw_left -- writes down a "tupret's" target list.
        !            11: **             
        !            12: **     Parameters:
        !            13: **             string -- a char * to a string containing everything
        !            14: **                     inside the equivalent "retrieve" statement,
        !            15: **                     but instead of result domain names, the string
        !            16: **                     should have '%<ingres_type>', where <ingres_type>
        !            17: **                     is the ingres type of the resulting C variable.
        !            18: **                     To escape a '%' use 2 ("%%").
        !            19: **                     'String' is left unchanged after the call.
        !            20: **             argv -- a vector of pointers to the 
        !            21: **                     corresponding C variables.
        !            22: **
        !            23: **     Usage:
        !            24: **             argv [0] = &double_var;
        !            25: **             argv [1] = &int_var;
        !            26: **             IIw_left("%f8 = i.double, %i2=i.ifield", argv);
        !            27: **
        !            28: **     Required by:
        !            29: **             parametrized retrieves without a target relation
        !            30: **
        !            31: **     Requires:
        !            32: **             Uses the ret_sym array IIretsym, and the old equel
        !            33: **             method for doing tuprets. NOTE that this does not
        !            34: **             allow dynamic (before each tuple) resolution of 
        !            35: **             the result C variables as does the new tupret method.
        !            36: **
        !            37: **     Error numbers:
        !            38: **             1003 -- 1 parameter, the erroneous string.
        !            39: **                     "Bad format for a domain in a param retrieve
        !            40: **                     without a result relation"
        !            41: */
        !            42: 
        !            43: 
        !            44: IIw_left(string, argv)
        !            45: char   *string;
        !            46: char   **argv;
        !            47: {
        !            48:        register char   *b_st, *e_st;
        !            49:        register char   **av;
        !            50:        int             type;
        !            51:        char            *IIitos();
        !            52: 
        !            53:        if (IIdebug)
        !            54:                printf("ent IIw_left : string \"%s\"\n",
        !            55:                string);
        !            56:        av = argv;
        !            57:        for (b_st = e_st = string; *e_st; )
        !            58:        {
        !            59:                if (*e_st != '%')
        !            60:                {
        !            61:                        e_st++;
        !            62:                        continue;
        !            63:                }
        !            64: 
        !            65:                /* provide escape method */
        !            66:                if (e_st [1] == '%')
        !            67:                {
        !            68:                        e_st [1] = '\0';
        !            69:                        IIwrite(b_st);
        !            70:                        /* leave string intact */
        !            71:                        e_st [1] = '%';
        !            72:                        b_st = e_st = &e_st [2];
        !            73:                        continue;
        !            74:                }
        !            75:                *e_st = '\0';
        !            76:                IIwrite(b_st);
        !            77:                *e_st++ = '%';
        !            78:                IIwrite(" RET_VAR ");
        !            79: 
        !            80:                switch (*e_st)
        !            81:                {
        !            82: 
        !            83:                  case 'f' :
        !            84:                        switch (*++e_st)
        !            85:                        {
        !            86: 
        !            87:                          case '8' :
        !            88:                                type = opDOUBLE;
        !            89:                                break;
        !            90: 
        !            91:                          case '4' :
        !            92:                                type = opFLOAT;
        !            93:                                break;
        !            94: 
        !            95:                          default :
        !            96:                                goto error_label;
        !            97:                        }
        !            98:                        break;
        !            99: 
        !           100:                  case 'i' :
        !           101:                        switch (*++e_st)
        !           102:                        {
        !           103: 
        !           104:                          case '4' :
        !           105:                                type = opLONG;
        !           106:                                break;
        !           107: 
        !           108:                          case '2' :
        !           109:                                type = opSHORT;
        !           110:                                break;
        !           111: 
        !           112:                          default :
        !           113:                                goto error_label;
        !           114:                        }
        !           115:                        break;
        !           116: 
        !           117:                  case 'c' :
        !           118:                        type = opSTRING;
        !           119:                        break;
        !           120:                }
        !           121:                IIretrieve(*av++, type);
        !           122:                b_st = ++e_st;
        !           123:        }
        !           124:        IIwrite(b_st);
        !           125:        return;
        !           126: 
        !           127: 
        !           128: error_label :
        !           129:        IIerror(1003, 1, &string); 
        !           130:        IIerrflag = 1003;
        !           131:        /* make sure that part already written down will
        !           132:         * cause an error, and ignore that error
        !           133:         */
        !           134:        IIwrite(",");
        !           135:        IIo_print = IIprint_err;
        !           136:        IIprint_err = IIno_err;
        !           137: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.