int clip_DAY(ClipMachine * ClipMachineMemory) { int dd, mm, yy, ww; if (_clip_pardj(ClipMachineMemory, 1) == 0) { _clip_retndp(ClipMachineMemory, 0, 3, 0); return 0; } _clip_pardc(ClipMachineMemory, 1, &yy, &mm, &dd, &ww); _clip_retndp(ClipMachineMemory, dd, 3, 0); return 0; }
int clip_COMPLEMENT(ClipMachine * ClipMachineMemory) { int len, dec; long d1, d2; int t = _clip_parinfo(ClipMachineMemory, 1); switch (t) { case LOGICAL_type_of_ClipVarType: _clip_retl(ClipMachineMemory, _clip_parl(ClipMachineMemory, 1)); break; case NUMERIC_type_of_ClipVarType: _clip_parp(ClipMachineMemory, 1, &len, &dec); _clip_retndp(ClipMachineMemory, 0.00 - _clip_parnd(ClipMachineMemory, 1), len, dec); break; case CHARACTER_type_of_ClipVarType: clip_CHARNOT(ClipMachineMemory); break; case DATE_type_of_ClipVarType: d1 = _clip_jdate(1, 1, 3000); d2 = _clip_pardj(ClipMachineMemory, 1); if (d2 == 0) _clip_retdj(ClipMachineMemory, d1); else _clip_retdj(ClipMachineMemory, d1 - d2 + _clip_jdate(7, 1, 0)); break; } return 0; }
int clip_FLOATVAL(ClipMachine * ClipMachineMemory) { char *s = _clip_parc(ClipMachineMemory, 1); int len = _clip_parni(ClipMachineMemory, 2); int dec = _clip_parni(ClipMachineMemory, 3); if (!s) { _clip_retnd(ClipMachineMemory, 0); return 0; } if (strchr(s, 'e') || strchr(s, 'E')) { struct lconv *lc = localeconv(); char c, *r; if (*lc->decimal_point == '.') c = ','; else c = '.'; r = s; while ((r = strchr(r, c))) *r = *lc->decimal_point; _clip_retndp(ClipMachineMemory, atof(s), len, dec); return 0; } return clip_VAL(ClipMachineMemory); }
int clip_LASTDAYOM(ClipMachine * ClipMachineMemory) { int dd, mm, yy, ww, mm1; struct tm *sysTime; long d; int numpar = _clip_parinfo(ClipMachineMemory, 0); _clip_pardc(ClipMachineMemory, 1, &yy, &mm, &dd, &ww); mm1 = _clip_parni(ClipMachineMemory, 1); if (numpar == 0 || mm1 != 0) { sysTime = _clip_sysdate(); yy = sysTime->tm_year + 1900; mm = sysTime->tm_mon + 1; dd = sysTime->tm_mday; free(sysTime); } if (mm1 != 0) mm = mm1; d = _clip_jdate(1, mm + 1, yy); _clip_cdate(d, &dd, &mm1, &yy, &ww); while (mm != mm1) { d--; _clip_cdate(d, &dd, &mm1, &yy, &ww); } _clip_retndp(ClipMachineMemory, dd, 2, 0); return 0; }
int clip_ABS(ClipMachine * mp) { int len, dec; double d = _clip_parnd(mp, 1); _clip_parp(mp, 1, &len, &dec); _clip_retndp(mp, fabs(d), len, dec); return 0; }
int clip_CEILING(ClipMachine * mp) { int len, dec; double d = _clip_parnd(mp, 1); _clip_parp(mp, 1, &len, &dec); dec = 0; _clip_retndp(mp, ceil(d), len, dec); return 0; }
int clip_FLOOR(ClipMachine * mp) { int len, dec; double d = _clip_parnd(mp, 1); _clip_parp(mp, 1, &len, &dec); dec = 0; _clip_retndp(mp, floor(d), len, dec); return 0; }
int clip_DTOR(ClipMachine * mp) { int len, dec; double d = _clip_parnd(mp, 1); _clip_parp(mp, 1, &len, &dec); dec = mp->decimals; _clip_retndp(mp, M_PI * d / 180, len, dec); return 0; }
int clip_COT(ClipMachine * mp) { int len, dec; double d = _clip_parnd(mp, 1); _clip_parp(mp, 1, &len, &dec); dec = mp->decimals; _clip_retndp(mp, 1 / tan(d), len, dec); return 0; }
int clip_RTOD(ClipMachine * mp) { int len, dec; double d = _clip_parnd(mp, 1); _clip_parp(mp, 1, &len, &dec); dec = mp->decimals; _clip_retndp(mp, d * 180 / M_PI, len, dec); return 0; }
int clip_TIMETOSEC(ClipMachine * ClipMachineMemory) { int l, hour = 0, min = 0, sec = 0, msec = 0; double ret; char *str = _clip_parcl(ClipMachineMemory, 1, &l); if (str == NULL) { _clip_retndp(ClipMachineMemory, _clip_seconds(), 10, 2); return 0; } sscanf(str, "%02d:%02d:%02d:%02d", &hour, &min, &sec, &msec); ret = hour * 3600 + min * 60 + sec; ret = (ret * 100 + msec) / 100; _clip_retndp(ClipMachineMemory, ret, 10, 2); return 0; }
int clip_ASIN(ClipMachine * ClipMachineMemory) { int len, dec; double d = _clip_parnd(ClipMachineMemory, 1); _clip_parp(ClipMachineMemory, 1, &len, &dec); dec = ClipMachineMemory->decimals; _clip_retndp(ClipMachineMemory, asin(d), len, dec); return 0; }
int clip_SQLSETLENDEC(ClipMachine * ClipMachineMemory) { double d = _clip_parnd(ClipMachineMemory, 1); int len = _clip_parni(ClipMachineMemory, 2); int dec = _clip_parni(ClipMachineMemory, 3); _clip_retndp(ClipMachineMemory, d, len, dec); return 0; }
int clip_ATAN2(ClipMachine * mp) { int len1, dec1, len2, dec2; double d1 = _clip_parnd(mp, 1); double d2 = _clip_parnd(mp, 2); _clip_parp(mp, 1, &len1, &dec1); _clip_parp(mp, 2, &len2, &dec2); dec1 = mp->decimals; _clip_retndp(mp, atan2(d1, d2), len1, dec1); return 0; }
int clip_FSTRTON(ClipMachine * ClipMachineMemory) { char *s = _clip_parc(ClipMachineMemory, 1); if (s != NULL) _clip_retndp(ClipMachineMemory, *((float *) s), 0, ClipMachineMemory->decimals); else _clip_retni(ClipMachineMemory, 0); return 0; }
int clip_INT(ClipMachine * mp) { int len, dec; double d = _clip_parnd(mp, 1); _clip_parp(mp, 1, &len, &dec); dec = 0; #ifdef ARCH_i386 (*(long long*)&d)++; #endif _clip_retndp(mp, d - fmod(d,1.00), len, dec); return 0; }
int clip_NEXTKEY(ClipMachine * ClipMachineMemory) { int eventmask = _clip_parni(ClipMachineMemory, 1); if (_clip_parinfo(ClipMachineMemory, 1) != NUMERIC_type_of_ClipVarType) eventmask = ClipMachineMemory->eventmask; _clip_fullscreen(ClipMachineMemory); if (*ClipMachineMemory->kbdptr != ClipMachineMemory->kbdbuf) _clip_retndp(ClipMachineMemory, (*ClipMachineMemory->kbdptr)[-1], 10, 0); else { long key; int ckey, l; key = getWait_Key(ClipMachineMemory->screen->base, 0); if (key) { ckey = key2clip(key, eventmask); if ((l = *ClipMachineMemory->kbdptr - ClipMachineMemory->kbdbuf) >= ClipMachineMemory->typeahead) { ClipMachineMemory->typeahead *= 2; ClipMachineMemory->kbdbuf = (int *) realloc(ClipMachineMemory->kbdbuf, sizeof(int) * ClipMachineMemory->typeahead); *ClipMachineMemory->kbdptr = ClipMachineMemory->kbdbuf + l; } *(*ClipMachineMemory->kbdptr)++ = ckey; _clip_retndp(ClipMachineMemory, ckey, 10, 0); } else _clip_retndp(ClipMachineMemory, 0, 10, 0); } return 0; }
int clip_ATAN2(ClipMachine * ClipMachineMemory) { int len1, dec1, len2, dec2; double d1 = _clip_parnd(ClipMachineMemory, 1); double d2 = _clip_parnd(ClipMachineMemory, 2); _clip_parp(ClipMachineMemory, 1, &len1, &dec1); _clip_parp(ClipMachineMemory, 2, &len2, &dec2); dec1 = ClipMachineMemory->decimals; _clip_retndp(ClipMachineMemory, atan2(d1, d2), len1, dec1); return 0; }
int clip_PG_IN_DOUBLE(ClipMachine* mp){ PG_ROWSET* rowset = (PG_ROWSET*)_clip_fetch_c_item( mp,_clip_parni(mp,1),_C_ITEM_TYPE_SQL); int dec = _clip_parni(mp,3); char* str; int len; if(!rowset){ _clip_trap_err(mp,0,0,0,subsys,ER_NOROWSET,er_norowset); return 1; } if(rowset->binary){ str = _clip_parcl(mp,2,&len); if(str){ _clip_retndp(mp,*((double*)str),0,dec); } } else { str = _clip_parc(mp,2); if(str){ _clip_retndp(mp,_clip_strtod(str,&len),0,dec); } } return 0; }
int clip_FV(ClipMachine * mp) { int len, dec, i; double ret; double sum = _clip_parnd(mp, 1); double prec = 1.00 + _clip_parnd(mp, 2); int per = _clip_parni(mp, 3); _clip_parp(mp, 1, &len, &dec); dec = mp->decimals; for (ret = sum, i = 0; i < per; i++) ret *= prec; _clip_retndp(mp, ret, len, dec); return 0; }
int clip_SQRT(ClipMachine * mp) { int len, dec; double d = _clip_parnd(mp, 1); _clip_parp(mp, 1, &len, &dec); if (mp->flags & FIXED_FLAG) dec = mp->decimals; else dec *= 2; if (dec <= 0) dec = mp->decimals; _clip_retndp(mp, sqrt(d), len, dec); return 0; }
int clip_FACT(ClipMachine * mp) { double ret = 1; int i; int num = _clip_parni(mp, 1); if (num > 21) { _clip_retni(mp, -1); return 0; } for (i = 1; i <= num; i++) ret *= i; _clip_retndp(mp, ret, num, 0); return 0; }
int clip_MOD(ClipMachine * mp) { int len, dec; double d = _clip_parnd(mp, 1); double d2 = _clip_parnd(mp, 2); _clip_parp(mp, 1, &len, &dec); if (mp->flags & FIXED_FLAG) dec = mp->decimals; else dec *= 2; if (dec <= 0) dec = mp->decimals; _clip_retndp(mp, fmod(d, d2), len, dec); return 0; }
int clip_MOD(ClipMachine * ClipMachineMemory) { int len, dec; double d = _clip_parnd(ClipMachineMemory, 1); double d2 = _clip_parnd(ClipMachineMemory, 2); _clip_parp(ClipMachineMemory, 1, &len, &dec); if (ClipMachineMemory->flags & FIXED_FLAG) dec = ClipMachineMemory->decimals; else dec *= 2; if (dec <= 0) dec = ClipMachineMemory->decimals; _clip_retndp(ClipMachineMemory, fmod(d, d2), len, dec); return 0; }
int clip_PG_IN_INT4(ClipMachine* mp){ PG_ROWSET* rowset = (PG_ROWSET*)_clip_fetch_c_item( mp,_clip_parni(mp,1),_C_ITEM_TYPE_SQL); char* str; int len; if(!rowset){ _clip_trap_err(mp,0,0,0,subsys,ER_NOROWSET,er_norowset); return 1; } if(rowset->binary){ str = _clip_parcl(mp,2,&len); if(str){ _clip_retni(mp,*((int*)str)); } } else { str = _clip_parc(mp,2); if(str){ _clip_retndp(mp,(double)atoi(str),strlen(str),0); } } return 0; }
int clip_LASTKEY(ClipMachine * ClipMachineMemory) { _clip_retndp(ClipMachineMemory, ClipMachineMemory->lastkey, 10, 0); return 0; }
int clip_PI(ClipMachine * mp) { _clip_retndp(mp, M_PI, 21, 19); return 0; }
int clip_ROUND(ClipMachine * mp) { #if 1 int len, dec; double d = _clip_parnd(mp, 1); ClipVar *vp=_clip_par(mp,1); int de = _clip_parni(mp, 2); #ifdef ARCH_i386 (*(long long*)&d)++; #endif _clip_parp(mp, 1, &len, &dec); dec = de; if (dec <= 0) dec = 0; if ( vp->t.memo ) { char *tmp=rational_toString(vp->r.r,10,dec,0); _clip_retnr(mp,rational_fromString(tmp),len,dec); free(tmp); return 0; } if( d == 0.0 ) { _clip_retndp(mp, d, len, de); return 0; } if( de == 0 ) { if( d < 0.0 ) d = ceil( d - 0.5 ); else d = floor( d + 0.5 ); _clip_retndp(mp, d, len, dec); return 0; } if( de < 0 ) { double tmp = pow( 10, -de ); if( d < 0.0 ) d = ceil( ( d / tmp ) - 0.5 ); else d = floor( ( d / tmp ) + 0.5 ); d *= tmp; } else { double tmp = pow( 10, de ); if( d < 0.0 ) d = ceil( ( d * tmp ) - 0.5 ); else d = floor( ( d * tmp ) + 0.5 ); d /= tmp; } _clip_retndp(mp, d, len, dec); return 0; #else int len, dec, len1; char buf[33],ch; double ret, d = _clip_parnd(mp, 1); int de = _clip_parni(mp, 2); _clip_parp(mp, 1, &len, &dec); buf[32]=0; if (len > 30 ) len=30; _clip_dtostr(buf, len, de+1, d, 0); len1 = strlen(buf)-1; ch = buf[len1]; if ( ch >='5' ) buf[len1-1] ++; buf[len1] = 0; ret = _clip_strtod(buf, &dec); _clip_retndp(mp, ret, len, de); return 0; #endif }