home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-09-25 | 35.4 KB | 1,553 lines |
- case US_dbmnycmp:
- if ((items > 3) || (items < 2 ))
- {
- fatal("Usage: &dbmnycmp($dbproc, $m1, $m2)");
- }
- else
- {
- int retval, off1, off2;
- DBMONEY m1, m2;
-
- if(items == 3)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- off2 = 3;
- }
- else
- {
- inx = 0;
- off1 = 1;
- off2 = 2;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE*)&m1, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnycmp $m1 parameter");
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off2]), (DBINT)-1,
- SYBMONEY, (BYTE*)&m2, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnycmp $m2 parameter");
- }
-
- retval = dbmnycmp(dbProc[inx].dbproc, &m1, &m2);
-
- str_numset(STACK(sp)[0], (double)retval);
- }
- break;
- case US_dbmnydivide:
- if ((items > 3) || (items < 2 ))
- {
- fatal("Usage: @arr = &dbmnydivide($dbproc, $m1, $m2)");
- }
- else
- {
- int retval, off1, off2;
- DBMONEY m1, m2, mresult;
- DBCHAR mnybuf[40];
-
- if(items == 3)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- off2 = 3;
- }
- else
- {
- inx = 0;
- off1 = 1;
- off2 = 2;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE*)&m1, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnydivide $m1 parameter");
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off2]), (DBINT)-1,
- SYBMONEY, (BYTE*)&m2, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnydivide $m2 parameter");
- }
-
- retval = dbmnydivide(dbProc[inx].dbproc, &m1, &m2, &mresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- }
- break;
- case US_dbmnyminus:
- if ((items > 2) || (items < 1 ))
- {
- fatal("Usage: @arr = &dbmnyminus($dbproc, $m1)");
- }
- else
- {
- int retval, off1;
- DBMONEY m1, mresult;
- DBCHAR mnybuf[40];
-
- if(items == 2)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- }
- else
- {
- inx = 0;
- off1 = 1;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE*)&m1, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnyminus $m1 parameter");
- }
-
- retval = dbmnyminus(dbProc[inx].dbproc, &m1, &mresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- }
- break;
- case US_dbmnymul:
- if ((items > 3) || (items < 2 ))
- {
- fatal("Usage: @arr = &dbmnymul($dbproc, $m1, $m2)");
- }
- else
- {
- int retval, off1, off2;
- DBMONEY m1, m2, mresult;
- DBCHAR mnybuf[40];
-
- if(items == 3)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- off2 = 3;
- }
- else
- {
- inx = 0;
- off1 = 1;
- off2 = 2;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE*)&m1, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnymul $m1 parameter");
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off2]), (DBINT)-1,
- SYBMONEY, (BYTE*)&m2, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnymul $m2 parameter");
- }
-
- retval = dbmnymul(dbProc[inx].dbproc, &m1, &m2, &mresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- }
- break;
- case US_dbmnysub:
- if ((items > 3) || (items < 2 ))
- {
- fatal("Usage: @arr = &dbmnysub($dbproc, $m1, $m2)");
- }
- else
- {
- int retval, off1, off2;
- DBMONEY m1, m2, mresult;
- DBCHAR mnybuf[40];
-
- if(items == 3)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- off2 = 3;
- }
- else
- {
- inx = 0;
- off1 = 1;
- off2 = 2;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE*)&m1, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnysub $m1 parameter");
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off2]), (DBINT)-1,
- SYBMONEY, (BYTE*)&m2, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnysub $m2 parameter");
- }
-
- retval = dbmnysub(dbProc[inx].dbproc, &m1, &m2, &mresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- }
- break;
- case US_dbmnyzero:
- if (items > 1)
- {
- fatal("Usage: @arr = &dbmnyzero($dbproc)");
- }
- else
- {
- int retval;
- DBMONEY mresult;
- DBCHAR mnybuf[40];
-
- if(items == 1)
- {
- inx = getDbProc(STACK(sp)[1]);
- }
- else
- {
- inx = 0;
- }
-
- retval = dbmnyzero(dbProc[inx].dbproc, &mresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- }
- break;
- case US_dbmnydec:
- if ((items > 2) || (items < 1 ))
- {
- fatal("Usage: @arr = &dbmnydec($dbproc, $m1)");
- }
- else
- {
- int retval, off1;
- DBMONEY mresult;
- DBCHAR mnybuf[40];
-
- if(items == 2)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- }
- else
- {
- inx = 0;
- off1 = 1;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE *)&mresult, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnydec $m1 parameter");
- }
-
- retval = dbmnydec(dbProc[inx].dbproc, &mresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- }
- break;
- case US_dbmnydown:
- if ((items > 3) || (items < 2 ))
- {
- fatal("Usage: @arr = &dbmnydown($dbproc, $m1, $i1)");
- }
- else
- {
- int retval, off1, off2;
- int i1, iresult = 0;
- DBMONEY mresult;
- DBCHAR mnybuf[40];
-
- if(items == 3)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- off2 = 3;
- }
- else
- {
- inx = 0;
- off1 = 1;
- off2 = 2;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE*)&mresult, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnydown $m1 parameter");
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off2]), (DBINT)-1,
- SYBINT4, (BYTE*)&i1, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnydown $i1 parameter");
- }
-
- retval = dbmnydown(dbProc[inx].dbproc, &mresult, i1, &iresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)iresult)));
- }
- break;
- case US_dbmnyinc:
- if ((items > 2) || (items < 1 ))
- {
- fatal("Usage: @arr = &dbmnyinc($dbproc, $m1)");
- }
- else
- {
- int retval, off1;
- DBMONEY mresult;
- DBCHAR mnybuf[40];
-
- if(items == 2)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- }
- else
- {
- inx = 0;
- off1 = 1;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE*)&mresult, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnyinc $m1 parameter");
- }
-
- retval = dbmnyinc(dbProc[inx].dbproc, &mresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- }
- break;
- case US_dbmnyinit:
- if ((items > 3) || (items < 2 ))
- {
- fatal("Usage: @arr = &dbmnyinit($dbproc, $m1, $i1)");
- }
- else
- {
- int retval, off1, off2;
- DBINT i1, iresult;
- DBMONEY mresult;
- DBBOOL bresult = (DBBOOL)FALSE;
- DBCHAR mnybuf[40];
-
- if(items == 3)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- off2 = 3;
- }
- else
- {
- inx = 0;
- off1 = 1;
- off2 = 2;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE*)&mresult, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnyinit $m1 parameter");
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off2]), (DBINT)-1,
- SYBINT4, (BYTE*)&i1, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnyinit $i1 parameter");
- }
-
- retval = dbmnyinit(dbProc[inx].dbproc, &mresult, i1, &bresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- iresult = (DBINT)bresult;
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)iresult)));
- }
- break;
- case US_dbmnymaxneg:
- if (items > 1)
- {
- fatal("Usage: @arr = &dbmnymaxneg($dbproc)");
- }
- else
- {
- int retval;
- DBMONEY mresult;
- DBCHAR mnybuf[40];
-
- if(items == 1)
- {
- inx = getDbProc(STACK(sp)[1]);
- }
- else
- {
- inx = 0;
- }
-
- retval = dbmnymaxneg(dbProc[inx].dbproc, &mresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- }
- break;
- case US_dbmnymaxpos:
- if (items > 1)
- {
- fatal("Usage: @arr = &dbmnymaxpos($dbproc)");
- }
- else
- {
- int retval;
- DBMONEY mresult;
- DBCHAR mnybuf[40];
-
- if(items == 1)
- {
- inx = getDbProc(STACK(sp)[1]);
- }
- else
- {
- inx = 0;
- }
-
- retval = dbmnymaxpos(dbProc[inx].dbproc, &mresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- }
- break;
- case US_dbmnyndigit:
- if ((items > 2) || (items < 1 ))
- {
- fatal("Usage: @arr = &dbmnyndigit($dbproc, $m1)");
- }
- else
- {
- int retval, off1;
- DBMONEY mresult;
- DBINT iresult;
- DBBOOL bresult = (DBBOOL)FALSE;
- DBCHAR mnybuf[40], dgtbuf[ 10 ];
-
- if(items == 2)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- }
- else
- {
- inx = 0;
- off1 = 1;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE*)&mresult, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnyndigit $m1 parameter");
- }
-
- retval = dbmnyndigit(dbProc[inx].dbproc, &mresult, dgtbuf, &bresult);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- iresult = (DBINT)bresult;
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- (void)astore(ary,++sp,str_2mortal(str_make(dgtbuf, 0)));
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)iresult)));
- }
- break;
- case US_dbmnyscale:
- if ((items > 4) || (items < 3 ))
- {
- fatal("Usage: @arr = &dbmnyscale($dbproc, $m1, $i1, $i2)");
- }
- else
- {
- int retval, off1, off2, off3;
- DBINT i1, i2;
- DBMONEY mresult;
- DBCHAR mnybuf[40];
-
- if(items == 4)
- {
- inx = getDbProc(STACK(sp)[1]);
- off1 = 2;
- off2 = 3;
- off3 = 4;
- }
- else
- {
- inx = 0;
- off1 = 1;
- off2 = 2;
- off3 = 3;
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off1]), (DBINT)-1,
- SYBMONEY, (BYTE*)&mresult, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnyscale $m1 parameter");
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off2]), (DBINT)-1,
- SYBINT4, (BYTE*)&i1, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnyscale $i1 parameter");
- }
-
- if (dbconvert(dbProc[inx].dbproc, SYBCHAR,
- (char *)str_get(STACK(sp)[off3]), (DBINT)-1,
- SYBINT4, (BYTE*)&i2, (DBINT)-1) == -1)
- {
- fatal("Invalid dbconvert() for &dbmnyscale $i2 parameter");
- }
-
- retval = dbmnyscale(dbProc[inx].dbproc, &mresult, i1, i2);
-
- new_mnytochar(dbProc[inx].dbproc, &mresult, mnybuf);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)retval)));
- (void)astore(ary,++sp,str_2mortal(str_make(mnybuf, 0)));
- }
- break;
- #endif
- case US_dbwritetext:
- if (items != 5)
- fatal ("Usage: dbwritetext($dbproc1,$column,$dbproc2,$col,$text");
- else
- {
- int inx2, wcolnum;
- char *wcolname, *wtext;
- int ret;
-
- inx = getDbProc(STACK(sp)[1]);
- wcolname = str_get(STACK(sp)[2]);
- inx2 = getDbProc(STACK(sp)[3]);
- wcolnum = (int)str_gnum(STACK(sp)[4]);
- wtext = str_get(STACK(sp)[5]);
- ret = dbwritetext (dbProc[inx].dbproc, wcolname, dbtxptr(dbProc[inx2].dbproc, wcolnum),
- DBTXPLEN, dbtxtimestamp(dbProc[inx2].dbproc, wcolnum), 0,
- strlen(wtext), wtext);
- str_numset(STACK(sp)[0], (double) ret);
- }
- break;
- case US_dbnumcols:
- if (items > 1)
- fatal("Usage: $dbnumcols = &dbnumcols($dbproc);");
- else
- {
- int j;
-
- if(items)
- inx = getDbProc(STACK(sp)[1]);
- else
- inx = 0;
-
- j = dbnumcols(dbProc[inx].dbproc);
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
- case US_dbcoltype:
- if (items > 2 || items < 1)
- fatal("Usage: $dbcoltype = &dbcoltype($dbproc, columnid);");
- else
- {
- int j, off;
-
- if(items)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
-
-
- j = dbcoltype(dbProc[inx].dbproc, (int)str_gnum(STACK(sp)[off]));
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
- case US_dbcolname:
- if (items > 2 || items < 1)
- fatal("Usage: $dbcolname = &dbcolname($dbproc, columnid);");
- else
- {
- int j, off;
- char *colname;
-
- if(items)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
-
-
- colname = dbcolname(dbProc[inx].dbproc, (int)str_gnum(STACK(sp)[off]));
- str_set (STACK (sp)[0], colname);
- }
- break;
- case US_dbcollen:
- if (items > 2)
- fatal("Usage: $dbcollen = &dbcollen($dbproc, columnid);");
- else
- {
- int j, off;
-
- if(items)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
-
-
- j = dbcollen(dbProc[inx].dbproc, (int)str_gnum(STACK(sp)[off]));
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
- case US_dbrecftos:
- if (items != 1)
- fatal("Usage: &dbrecftos($filename);");
- else
- {
- dbrecftos((char *)str_get(STACK(sp)[1]));
-
- str_numset(STACK(sp)[0], (double) 0);
- }
- break;
-
- case US_BCP_SETL:
- if (items != 1)
- fatal("Usage: &BCP_SETL($state);");
- else
- {
- BCP_SETL(login, (int)str_gnum(STACK(sp)[1]));
- str_numset(STACK(sp)[0], (double) 0);
- }
- break;
-
- case US_bcp_getl:
- if (items)
- fatal("Usage: $state = &bcp_getl();");
- else
- {
- int ret;
- ret = bcp_getl(login);
- str_numset(STACK(sp)[0], (double) ret);
- }
- break;
-
- case US_bcp_init:
- if (items < 4 || items > 5)
- fatal("Usage: &bcp_init($dbproc, $tblname, $hfile, $errfile, $dir);");
- else
- {
- int j, off;
- char *hfile;
-
- if(items == 5)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
-
- hfile = str_get(STACK(sp)[off+1]);
- if((Str = STACK(sp)[off+1]) == &str_undef ||
- ((hfile = str_get(Str)) && strlen(hfile) == 0))
- hfile = NULL;
- j = bcp_init(dbProc[inx].dbproc, str_get(STACK(sp)[off]),
- hfile,
- str_get(STACK(sp)[off+2]),
- (int)str_gnum(STACK(sp)[off+3]));
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- case US_bcp_meminit:
- if (items < 1 || items > 2)
- fatal("Usage: &bcp_meminit($dbproc, $num_cols);");
- else
- {
- int j, off, numcols;
- BYTE dummy;
-
- if(items == 2)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
- numcols = str_gnum(STACK(sp)[off]);
- for(j = 1; j <= numcols; ++j)
- bcp_bind(dbProc[inx].dbproc, &dummy, 0, -1, "", 1, SYBCHAR, j);
-
- if(dbProc[inx].colPtr) /* avoid a potential memory leak */
- Safefree(dbProc[inx].colPtr);
- New (902, dbProc[inx].colPtr, numcols, BYTE *);
-
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- case US_bcp_sendrow: /* WARNING: the dbproc param is NOT */
- /* optional for this call!!! */
- if (items < 2)
- fatal("Usage: &bcp_sendrow($dbproc, LIST);");
- else
- {
- int j, off;
-
- inx = getDbProc(STACK(sp)[1]);
- for(j = 1; j < items; ++j)
- {
- Str = STACK(sp)[j+1];
- if(Str == &str_undef) /* it's a NULL data value */
- bcp_collen(dbProc[inx].dbproc, 0, j);
- else
- bcp_collen(dbProc[inx].dbproc, -1, j);
- dbProc[inx].colPtr[j] = (BYTE *)str_get(Str);
- bcp_colptr(dbProc[inx].dbproc, dbProc[inx].colPtr[j], j);
- }
- j = bcp_sendrow(dbProc[inx].dbproc);
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- case US_bcp_batch:
- if (items > 1)
- fatal("Usage: $ret = &bcp_batch($dbproc);");
- else
- {
- int j;
-
- if(items)
- inx = getDbProc(STACK(sp)[1]);
- else
- inx = 0;
-
- j = bcp_batch(dbProc[inx].dbproc);
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- case US_bcp_done:
- if (items > 1)
- fatal("Usage: $ret = &bcp_done($dbproc);");
- else
- {
- int j;
-
- if(items)
- inx = getDbProc(STACK(sp)[1]);
- else
- inx = 0;
- if(dbProc[inx].colPtr)
- {
- Safefree(dbProc[inx].colPtr);
- dbProc[inx].colPtr = NULL;
- }
- j = bcp_done(dbProc[inx].dbproc);
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- case US_bcp_control:
- if (items < 2 || items > 3)
- fatal("Usage: $ret = &bcp_control($dbproc, $field, $value);");
- else
- {
- int j, off;
-
- if(items == 3)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
- j = bcp_control(dbProc[inx].dbproc, (int)str_gnum(STACK(sp)[off]),
- (int)str_gnum(STACK(sp)[off+1]));
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- case US_bcp_columns:
- if (items < 1 || items > 2)
- fatal("Usage: $ret = &bcp_columns($dbproc, $host_colcount);");
- else
- {
- int j, off;
-
- if(items == 2)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
- j = bcp_columns(dbProc[inx].dbproc, (int)str_gnum(STACK(sp)[off]));
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- case US_bcp_colfmt:
- if (items < 7 || items > 8)
- fatal("Usage: $ret = &bcp_colfmt($dbproc, $host_colnum, $host_type, $host_prefixlen, $host_collen, $host_term, $host_termlen, $table_colnum);");
- else
- {
- int j, off;
- char *host_term;
-
- if(items == 8)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
-
- if(STACK(sp)[off+4] == &str_undef)
- host_term = NULL;
- else
- host_term = str_get(STACK(sp)[off+4]);
-
- j = bcp_colfmt(dbProc[inx].dbproc, (int)str_gnum(STACK(sp)[off]),
- (int)str_gnum(STACK(sp)[off+1]),
- (int)str_gnum(STACK(sp)[off+2]),
- (int)str_gnum(STACK(sp)[off+3]),
- host_term,
- (int)str_gnum(STACK(sp)[off+5]),
- (int)str_gnum(STACK(sp)[off+6]));
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- case US_bcp_collen:
- if (items < 2 || items > 3)
- fatal("Usage: $ret = &bcp_collen($dbproc, $varlen, $table_column);");
- else
- {
- int j, off;
-
- if(items == 3)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
- j = bcp_collen(dbProc[inx].dbproc, (int)str_gnum(STACK(sp)[off]),
- (int)str_gnum(STACK(sp)[off+1]));
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- case US_bcp_exec:
- if (items > 1)
- fatal("Usage: ($ret, $rows_copied) = &bcp_exec($dbproc);");
- else
- {
- int j;
- DBINT rows;
-
- if(items == 1)
- inx = getDbProc(STACK(sp)[1]);
- else
- inx = 0;
- j = bcp_exec(dbProc[inx].dbproc, &rows);
-
- --sp; /* readjust to get rid of space preallocation */
-
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)j)));
- (void)astore(ary,++sp,str_2mortal(str_nmake((double)rows)));
- }
- break;
-
- case US_bcp_readfmt:
- if (items < 1 || items > 2)
- fatal("Usage: $ret = &bcp_readfmt($dbproc, $filename);");
- else
- {
- int j, off;
-
- if(items == 2)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
- j = bcp_readfmt(dbProc[inx].dbproc, str_get(STACK(sp)[off]));
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- case US_bcp_writefmt:
- if (items < 1 || items > 2)
- fatal("Usage: $ret = &bcp_writefmt($dbproc, $filename);");
- else
- {
- int j, off;
-
- if(items == 2)
- {
- inx = getDbProc(STACK(sp)[1]);
- off = 2;
- }
- else
- inx = 0, off = 1;
- j = bcp_writefmt(dbProc[inx].dbproc, str_get(STACK(sp)[off]));
- str_numset(STACK(sp)[0], (double) j);
- }
- break;
-
- default:
- fatal("Unimplemented user-defined subroutine");
- }
- return sp;
- }
-
- /*
- * Return the value of a userdefined variable. These variables are nearly all
- * READ-ONLY.
- */
- static int
- userval(ix, str)
- int ix;
- STR *str;
- {
- char buff[24];
-
- switch (ix)
- {
- case UV_SUCCEED:
- str_numset(str, (double)SUCCEED);
- break;
- case UV_FAIL:
- str_numset(str, (double)FAIL);
- break;
- case UV_NO_MORE_ROWS:
- str_numset(str, (double)NO_MORE_ROWS);
- break;
- case UV_NO_MORE_RESULTS:
- str_numset(str, (double)NO_MORE_RESULTS);
- break;
- case UV_ComputeId:
- str_numset(str, (double)ComputeId);
- break;
- case UV_SybperlVer:
- sprintf(buff, "%d.%3.3d", VERSION, PATCHLEVEL);
- str_set(str, buff);
- break;
- case UV_DBstatus:
- str_numset(str, (double)DBstatus);
- break;
- #if defined(DBLIB461)
- case UV_STDEXIT:
- str_numset(str, (double)STDEXIT);
- break;
- case UV_ERREXIT:
- str_numset(str, (double)ERREXIT);
- break;
- case UV_INT_EXIT:
- str_numset(str, (double)INT_EXIT);
- break;
- case UV_INT_CONTINUE:
- str_numset(str, (double)INT_CONTINUE);
- break;
- case UV_INT_CANCEL:
- str_numset(str, (double)INT_CANCEL);
- break;
- case UV_INT_TIMEOUT:
- str_numset(str, (double)INT_TIMEOUT);
- break;
- case UV_MORE_ROWS:
- str_numset(str, (double)MORE_ROWS);
- break;
- case UV_REG_ROW:
- str_numset(str, (double)REG_ROW);
- break;
- case UV_BUF_FULL:
- str_numset(str, (double)BUF_FULL);
- break;
- case UV_NO_MORE_PARAMS:
- str_numset(str, (double)NO_MORE_PARAMS);
- break;
- case UV_DBSAVE:
- str_numset(str, (double)DBSAVE);
- break;
- case UV_DBNOSAVE:
- str_numset(str, (double)DBNOSAVE);
- break;
- case UV_DBNOERR:
- str_numset(str, (double)DBNOERR);
- break;
- case UV_DB_PASSTHRU_MORE:
- str_numset(str, (double)DB_PASSTHRU_MORE);
- break;
- case UV_DB_PASSTHRU_EOM:
- str_numset(str, (double)DB_PASSTHRU_EOM);
- break;
- case UV_DBNOPROC:
- str_numset(str, (double)DBNOPROC);
- break;
- case UV_EXCEPTION:
- str_numset(str, (double)EXCEPTION);
- break;
- case UV_EXSIGNAL:
- str_numset(str, (double)EXSIGNAL);
- break;
- case UV_EXSCREENIO:
- str_numset(str, (double)EXSCREENIO);
- break;
- case UV_EXDBLIB:
- str_numset(str, (double)EXDBLIB);
- break;
- case UV_EXFORMS:
- str_numset(str, (double)EXFORMS);
- break;
- case UV_EXCLIPBOARD:
- str_numset(str, (double)EXCLIPBOARD);
- break;
- case UV_EXLOOKUP:
- str_numset(str, (double)EXLOOKUP);
- break;
- case UV_EXINFO:
- str_numset(str, (double)EXINFO);
- break;
- case UV_EXUSER:
- str_numset(str, (double)EXUSER);
- break;
- case UV_EXNONFATAL:
- str_numset(str, (double)EXNONFATAL);
- break;
- case UV_EXCONVERSION:
- str_numset(str, (double)EXCONVERSION);
- break;
- case UV_EXSERVER:
- str_numset(str, (double)EXSERVER);
- break;
- case UV_EXTIME:
- str_numset(str, (double)EXTIME);
- break;
- case UV_EXPROGRAM:
- str_numset(str, (double)EXPROGRAM);
- break;
- case UV_EXRESOURCE:
- str_numset(str, (double)EXRESOURCE);
- break;
- case UV_EXCOMM:
- str_numset(str, (double)EXCOMM);
- break;
- case UV_EXFATAL:
- str_numset(str, (double)EXFATAL);
- break;
- case UV_EXCONSISTENCY:
- str_numset(str, (double)EXCONSISTENCY);
- break;
- #endif
- case UV_DB_IN:
- str_numset(str, (double)DB_IN);
- break;
- case UV_DB_OUT:
- str_numset(str, (double)DB_OUT);
- break;
- case UV_BCPMAXERRS:
- str_numset(str, (double)BCPMAXERRS);
- break;
- case UV_BCPFIRST:
- str_numset(str, (double)BCPFIRST);
- break;
- case UV_BCPLAST:
- str_numset(str, (double)BCPLAST);
- break;
- case UV_BCPBATCH:
- str_numset(str, (double)BCPBATCH);
- break;
- case UV_DBTRUE:
- str_numset(str, (double)TRUE);
- break;
- case UV_DBFALSE:
- str_numset(str, (double)FALSE);
- break;
- #if defined(PACKAGE_BUG)
- case UV_PACKAGE_BUG:
- str_numset(str, 1.0);
- break;
- #endif
- case UV_dbNullIsUndef:
- str_numset(str, (double)dbNullIsUndef);
- break;
- case UV_dbKeepNumeric:
- str_numset(str, (double)dbKeepNumeric);
- break;
- case UV_dbBin0x:
- str_numset(str, (double)dbBin0x);
- break;
- }
- return 0;
- }
-
- static int
- userset(ix, str)
- int ix;
- STR *str;
- {
- switch (ix)
- {
- case UV_dbNullIsUndef:
- dbNullIsUndef = str_gnum(str);
- break;
- case UV_dbKeepNumeric:
- dbKeepNumeric = str_gnum(str);
- break;
- case UV_dbBin0x:
- dbBin0x = str_gnum(str);
- break;
- default:
- #if defined(USERVAL_SET_FATAL)
- fatal("sybperl: trying to write to a read-only variable.");
- #else
- warn("sybperl: trying to write to a read-only variable.");
- #endif
- break;
- }
- return 0;
- }
-
-
- /*ARGSUSED*/
- static int err_handler(db, severity, dberr, oserr, dberrstring, oserrstr)
- DBPROCESS *db;
- int severity;
- int dberr;
- int oserr;
- char *dberrstring;
- char *oserrstr;
- {
- #ifdef HAS_CALLBACK
- /* If we have error handler subroutine, use it. */
- if (err_handler_sub)
- {
- int sp = perl_sp;
- int j;
-
- for(j = 0; j < MAX_DBPROCS; ++j)
- if(db == dbProc[j].dbproc)
- break;
- if(j == MAX_DBPROCS)
- j = 0;
-
- /* Reserve spot for return value. */
- astore (stack, ++ sp, Nullstr);
-
- /* Set up arguments. */
- astore (stack, ++ sp,
- str_2mortal (str_nmake ((double) j)));
- astore (stack, ++ sp, str_2mortal (str_nmake ((double) severity)));
- astore (stack, ++ sp, str_2mortal (str_nmake ((double) dberr)));
- astore (stack, ++ sp, str_2mortal (str_nmake ((double) oserr)));
- if (dberrstring && *dberrstring)
- astore (stack, ++ sp, str_2mortal (str_make (dberrstring, 0)));
- else
- astore (stack, ++ sp, &str_undef);
- if (oserrstr && *oserrstr)
- astore (stack, ++ sp, str_2mortal (str_make (oserrstr, 0)));
- else
- astore (stack, ++ sp, &str_undef);
-
- /* Call it. */
- sp = callback (err_handler_sub, sp, 0, 1, 6);
-
- /* Return whatever it returned. */
- return (int) str_gnum (STACK (sp)[0]);
- }
- #endif /* HAS_CALLBACK */
- if ((db == NULL) || (DBDEAD(db)))
- return(INT_EXIT);
- else
- {
- fprintf(stderr,"DB-Library error:\n\t%s\n", dberrstring);
-
- if (oserr != DBNOERR)
- fprintf(stderr,"Operating-system error:\n\t%s\n", oserrstr);
-
- return(INT_CANCEL);
- }
- }
-
- /*ARGSUSED*/
-
- static int msg_handler(db, msgno, msgstate, severity, msgtext, srvname, procname, line)
- DBPROCESS *db;
- DBINT msgno;
- int msgstate;
- int severity;
- char *msgtext;
- char *srvname;
- char *procname;
- DBUSMALLINT line;
- {
- #ifdef HAS_CALLBACK
- /* If we have message handler subroutine, use it. */
- if (msg_handler_sub)
- {
- int sp = perl_sp;
- int j;
-
- for(j = 0; j < MAX_DBPROCS; ++j)
- if(db == dbProc[j].dbproc)
- break;
- if(j == MAX_DBPROCS)
- j = 0;
-
- /* Reserve spot for return value. */
- astore (stack, ++ sp, Nullstr);
-
- /* Set up arguments. */
- astore (stack, ++ sp,
- str_2mortal (str_nmake ((double) j)));
- astore (stack, ++ sp, str_2mortal (str_nmake ((double) msgno)));
- astore (stack, ++ sp, str_2mortal (str_nmake ((double) msgstate)));
- astore (stack, ++ sp, str_2mortal (str_nmake ((double) severity)));
- if (msgtext && *msgtext)
- astore (stack, ++ sp, str_2mortal (str_make (msgtext, 0)));
- else
- astore (stack, ++ sp, &str_undef);
- if (srvname && *srvname)
- astore (stack, ++ sp, str_2mortal (str_make (srvname, 0)));
- else
- astore (stack, ++ sp, &str_undef);
- if (procname && *procname)
- astore (stack, ++ sp, str_2mortal (str_make (procname, 0)));
- else
- astore (stack, ++ sp, &str_undef);
- astore (stack, ++ sp, str_2mortal (str_nmake ((double) line)));
-
- /* Call it. */
- sp = callback (msg_handler_sub, sp, 0, 1, 8);
-
- /* Return whatever it returned. */
- return (int) str_gnum (STACK (sp)[0]);
- }
- #endif /* HAS_CALLBACK */
- #ifdef OLD_SYBPERL
- if(!severity)
- return 0;
- #endif
- fprintf (stderr,"Msg %ld, Level %d, State %d\n",
- msgno, severity, msgstate);
- if (strlen(srvname) > 0)
- fprintf (stderr,"Server '%s', ", srvname);
- if (strlen(procname) > 0)
- fprintf (stderr,"Procedure '%s', ", procname);
- if (line > 0)
- fprintf (stderr,"Line %d", line);
-
- fprintf(stderr,"\n\t%s\n", msgtext);
-
- return(0);
- }
-
- /*
- * Get the index into the dbproc[] array from a Perl STR datatype.
- * Check that the index is reasonably valid...
- */
- static int
- getDbProc(Str)
- STR *Str;
- {
- int ix;
-
- if (Str == &str_undef || !Str->str_nok) /* This may be getting a bit too */
- /* close with the internals of */
- /* the 'str' workings... */
- warn("The $dbproc parameter has not been properly initialized - it defaults to 0");
-
- ix = (int)str_gnum(Str);
-
- if(ix < 0 || ix >= MAX_DBPROCS)
- fatal("$dbproc parameter is out of range");
- if(dbProc[ix].dbproc == NULL || DBDEAD(dbProc[ix].dbproc))
- fatal("$dbproc parameter is NULL or the connection to the server has been closed");
- return ix;
- }
-
-
- #ifdef HAS_CALLBACK
-
- /* Taken from Perl 4.018 usub/usersub.c. mp. */
-
- /* Be sure to refetch the stack pointer after calling these routines. */
-
- int
- callback(subname, sp, gimme, hasargs, numargs)
- char *subname;
- int sp; /* stack pointer after args are pushed */
- int gimme; /* called in array or scalar context */
- int hasargs; /* whether to create a @_ array for routine */
- int numargs; /* how many args are pushed on the stack */
- {
- static ARG myarg[3]; /* fake syntax tree node */
- int arglast[3];
-
- arglast[2] = sp;
- sp -= numargs;
- arglast[1] = sp--;
- arglast[0] = sp;
-
- if (!myarg[0].arg_ptr.arg_str)
- myarg[0].arg_ptr.arg_str = str_make("",0);
-
- myarg[1].arg_type = A_WORD;
- myarg[1].arg_ptr.arg_stab = stabent(subname, FALSE);
-
- myarg[2].arg_type = hasargs ? A_EXPR : A_NULL;
-
- return do_subr(myarg, gimme, arglast);
- }
-
- #endif /* HAS_CALLBACK */
-
-
- #if defined(DBLIB461)
-
- /* The following routines originate from the OpenClient R4.6.1 reference */
- /* manual, pages 2-165 to 2-168 both inclusive. It has been subsequently */
- /* modified (slightly) to suit local conditions. */
-
- #define PRECISION 4
-
- static void new_mny4tochar(dbproc, mny4ptr, buf_ptr)
- DBPROCESS *dbproc;
- DBMONEY4 *mny4ptr;
- DBCHAR *buf_ptr;
- {
- DBMONEY local_mny;
- DBCHAR value;
- char temp_buf[40];
-
- int bytes_written = 0;
- int i = 0;
- DBBOOL negative = (DBBOOL)FALSE;
- DBBOOL zero = (DBBOOL)FALSE;
-
- if (dbconvert(dbproc, SYBMONEY4, (BYTE*)mny4ptr, (DBINT)-1,
- SYBMONEY, (BYTE*)&local_mny, (DBINT)-1) == -1)
- {
- fatal("dbconvert() failed in routine new_mny4tochar()");
- }
-
- if (dbmnyinit(dbproc, &local_mny, 4 - PRECISION, &negative) == FAIL)
- {
- fatal("dbmnyinit() failed in routine new_mny4tochar()");
- }
-
- while (zero == FALSE)
- {
- if (dbmnyndigit(dbproc, &local_mny, &value, &zero) == FAIL)
- {
- fatal("dbmnyndigit() failed in routine new_mny4tochar()");
- }
-
- temp_buf[bytes_written++] = value;
-
- if (zero == FALSE)
- {
- if (bytes_written == PRECISION)
- {
- temp_buf[bytes_written++] = '.';
- }
- }
- }
-
- while (bytes_written < PRECISION)
- {
- temp_buf[bytes_written++] = '0';
- }
-
- if (bytes_written == PRECISION)
- {
- temp_buf[bytes_written++] = '.';
- temp_buf[bytes_written++] = '0';
- }
-
- if (negative == TRUE)
- {
- buf_ptr[i++] = '-';
- }
-
- while (bytes_written--)
- {
- buf_ptr[i++] = temp_buf[bytes_written];
- }
-
- buf_ptr[i] = '\0';
-
- return;
- }
-
- static void new_mnytochar(dbproc, mnyptr, buf_ptr)
- DBPROCESS *dbproc;
- DBMONEY *mnyptr;
- DBCHAR *buf_ptr;
- {
- DBMONEY local_mny;
- DBCHAR value;
- char temp_buf[40];
-
- int bytes_written = 0;
- int i = 0;
- DBBOOL negative = (DBBOOL)FALSE;
- DBBOOL zero = (DBBOOL)FALSE;
-
- if (dbmnycopy(dbproc, mnyptr, &local_mny) == FAIL)
- {
- fatal("dbmnycopy() failed in routine new_mnytochar()");
- }
-
- if (dbmnyinit(dbproc, &local_mny, 4 - PRECISION, &negative) == FAIL)
- {
- fatal("dbmnyinit() failed in routine new_mnytochar()");
- }
-
- while (zero == FALSE)
- {
- if (dbmnyndigit(dbproc, &local_mny, &value, &zero) == FAIL)
- {
- fatal("dbmnyndigit() failed in routine new_mnytochar()");
- }
-
- temp_buf[bytes_written++] = value;
-
- if (zero == FALSE)
- {
- if (bytes_written == PRECISION)
- {
- temp_buf[bytes_written++] = '.';
- }
- }
- }
-
- while (bytes_written < PRECISION)
- {
- temp_buf[bytes_written++] = '0';
- }
-
- if (bytes_written == PRECISION)
- {
- temp_buf[bytes_written++] = '.';
- temp_buf[bytes_written++] = '0';
- }
-
- if (negative == TRUE)
- {
- buf_ptr[i++] = '-';
- }
-
- while (bytes_written--)
- {
- buf_ptr[i++] = temp_buf[bytes_written];
- }
-
- buf_ptr[i] = '\0';
-
- return;
- }
-
- #endif /* DBLIB461 */
-
-