static int Bcompare(lua_State *L) { mpi *a=Bget(L,1); mpi *b=Bget(L,2); lua_pushinteger(L,mpi_cmp_mpi(a,b)); return 1; }
static int Blt(lua_State *L) { M_APM a=Bget(L,1); M_APM b=Bget(L,2); lua_pushboolean(L,m_apm_compare(a,b)<0); return 1; }
static int Bcompare(lua_State *L) /** compare(x,y) */ { M_APM a=Bget(L,1); M_APM b=Bget(L,2); lua_pushinteger(L,m_apm_compare(a,b)); return 1; }
static int Blt(lua_State *L) { mpi *a=Bget(L,1); mpi *b=Bget(L,2); lua_pushboolean(L, mpi_cmp_mpi(a,b)<0); return 1; }
static int Binvmod(lua_State *L) { mpi *a=Bget(L,1); mpi *m=Bget(L,2); mpi *c=Bnew(L); mpi_inv_mod(c,a,m); return 1; }
static int Bmul(lua_State *L) { mpi *a=Bget(L,1); mpi *b=Bget(L,2); mpi *c=Bnew(L); mpi_mul_mpi(c,a,b); return 1; }
static int Bgcd(lua_State *L) { mpi *a=Bget(L,1); mpi *b=Bget(L,2); mpi *c=Bnew(L); mpi_gcd(c,a,b); return 1; }
static int Bdo2(lua_State *L, void (*f)(M_APM z, M_APM x, M_APM y)) { M_APM a=Bget(L,1); M_APM b=Bget(L,2); M_APM c=Bnew(L); f(c,a,b); return 1; }
static int Bidiv(lua_State *L) /** idiv(x,y) */ { M_APM a=Bget(L,1); M_APM b=Bget(L,2); M_APM q=Bnew(L); M_APM r=Bnew(L); m_apm_integer_div_rem(q,r,a,b); return 2; }
static int Bdo3(lua_State *L, void (*f)(M_APM z, int n, M_APM x, M_APM y)) { int n=luaL_optint(L,3,DIGITS); M_APM a=Bget(L,1); M_APM b=Bget(L,2); M_APM c=Bnew(L); f(c,n,a,b); return 1; }
static int Bdivmod(lua_State *L) { mpi *a=Bget(L,1); mpi *b=Bget(L,2); mpi *q=Bnew(L); mpi *r=Bnew(L); mpi_div_mpi(q,r,a,b); return 2; }
static int Bpowmod(lua_State *L) { mpi *a=Bget(L,1); mpi *b=Bget(L,2); mpi *m=Bget(L,3); mpi RR; mpi *rr=&RR; mpi_init(rr); mpi *c=Bnew(L); mpi_exp_mod(c,a,b,m,rr); mpi_free(rr); return 1; }
static int Bdo0(lua_State *L, void (*f)(M_APM y, M_APM x)) { M_APM a=Bget(L,1); M_APM c=Bnew(L); f(c,a); return 1; }
static int Bgc(lua_State *L) { M_APM a=Bget(L,1); m_apm_free(a); lua_pushnil(L); lua_setmetatable(L,1); return 0; }
static int Bdo1(lua_State *L, void (*f)(M_APM y, int n, M_APM x)) { int n=luaL_optint(L,2,DIGITS); M_APM a=Bget(L,1); M_APM c=Bnew(L); f(c,n,a); return 1; }
static int Bsincos(lua_State *L) /** sincos(x) */ { int n=luaL_optint(L,2,DIGITS); M_APM a=Bget(L,1); M_APM s=Bnew(L); M_APM c=Bnew(L); m_apm_sin_cos(s,c,n,a); return 2; }
static int Bneg(lua_State *L) { mpi A; mpi *a = &A; mpi *b=Bget(L,1); mpi *c=Bnew(L); mpi_init(a); mpi_sub_mpi(c, a, b); mpi_free(a); return 1; }
static int Btohex(lua_State *L) { mpi *a=Bget(L,1); int n = mpi_msb(a); size_t numChars = 3 + n/4; char *s = (char *) malloc(numChars); /*for radix 16, we are safe with one char for every 4 bits with one extra for the terminating 0*/ mpi_write_string(a, 16, s, &numChars); lua_pushstring(L,s); free(s); return 1; }
static int Btotext(lua_State *L) { mpi *a = Bget(L,1); int n = mpi_size(a); unsigned char *s = (unsigned char *) malloc(n); if (s == NULL) return 0; mpi_write_binary(a, s, n); lua_pushlstring(L, (const char *) s, n); free(s); return 1; }
/** * Call the client process monitor with command * @return */ private int call_cpm(char *svcnm, char *cmd, char *tag, char *subsect) { UBFH *p_ub = (UBFH *)tpalloc("UBF", NULL, CPM_DEF_BUFFER_SZ); int ret=SUCCEED; long rsplen; char output[CPM_OUTPUT_SIZE]; /* Setup the call buffer... */ if (NULL==p_ub) { NDRX_LOG(log_error, "Failed to alloc FB!"); FAIL_OUT(ret); } if (SUCCEED!=Bchg(p_ub, EX_CPMTAG, 0, tag, 0L)) { NDRX_LOG(log_error, "Failed to set EX_CPMCOMMAND to %s!", tag); FAIL_OUT(ret); } if (SUCCEED!=Bchg(p_ub, EX_CPMSUBSECT, 0, subsect, 0L)) { NDRX_LOG(log_error, "Failed to set EX_CPMSUBSECT to %s!", subsect); FAIL_OUT(ret); } if (SUCCEED!=Bchg(p_ub, EX_CPMCOMMAND, 0, cmd, 0L)) { NDRX_LOG(log_error, "Failed to set EX_CPMCOMMAND to %s!", cmd); FAIL_OUT(ret); } /* Call the client admin */ if (FAIL==(ret=tpcall(svcnm, (char *)p_ub, 0L, (char **)&p_ub, &rsplen, 0L))) { fprintf(stderr, "%s\n", tpstrerror(tperrno)); } /* print the stuff we got from CPM. */ if (SUCCEED==Bget(p_ub, EX_CPMOUTPUT, 0, (char *)output, 0L)) { fprintf(stdout, "%s\n", output); } out: if (NULL!=p_ub) { tpfree((char *)p_ub); } return ret; }
static int Babs(lua_State *L) { mpi *b=Bget(L,1); if (mpi_cmp_int(b,0)<0) { mpi A; mpi *a=&A; mpi *c=Bnew(L); mpi_init(a); mpi_sub_mpi(c,a,b); mpi_free(a); } else lua_settop(L,1); return 1; }
static int Btostring(lua_State *L) /** tostring(x,[n,exp]) */ { char *s; M_APM a=Bget(L,1); int n=luaL_optint(L,2,DIGITS); if (lua_toboolean(L,3)) { int m=(n<0) ? m_apm_significant_digits(a) : n; s=malloc(m+16); if (s!=NULL) m_apm_to_string(s,n,a); } else s=m_apm_to_fixpt_stringexp(n,a,'.',0,0); lua_pushstring(L,s); if (s!=NULL) free(s); return 1; }
void RUNTX(TPSVCINFO *p_svc) { int first=1; UBFH *p_ub = (UBFH *)p_svc->data; char buf[1024]; p_ub = (UBFH *)tprealloc ((char *)p_ub, Bsizeof (p_ub) + 4096); if (SUCCEED!=Bget(p_ub, T_STRING_FLD, 0, buf, 0)) { NDRX_LOG(log_error, "TESTERROR: Failed to get T_STRING_FLD: %s", Bstrerror(Berror)); tpreturn (TPFAIL, 0L, NULL, 0L, 0L); } if (SUCCEED!=__write_to_tx_file(buf)) { NDRX_LOG(log_error, "TESTERROR: Failed to call __write_to_tx_file()"); tpreturn (TPFAIL, 0L, NULL, 0L, 0L); } /* Return OK */ tpreturn (TPSUCCESS, 0L, (char *)p_ub, 0L, 0L); }
void test_update_data_2(UBFH *p_ub) { short s; long l; char c; float f; double d; char buf[100]; BFLDLEN len; char carr[] = "CARRAY1 TEST STRING DATA1 --- SOME --- LONG - STUFF"; /* OCC 0 */ assert_equal(Bget(p_ub, T_SHORT_FLD, 0, (char *)&s, 0), SUCCEED); assert_equal(s, 881); assert_equal(Bget(p_ub, T_LONG_FLD, 0, (char *)&l, 0), SUCCEED); assert_equal(l, -10211); assert_equal(Bget(p_ub, T_CHAR_FLD, 0, (char *)&c, 0), SUCCEED); assert_equal(c, '1'); assert_equal(Bget(p_ub, T_FLOAT_FLD, 0, (char *)&f, 0), SUCCEED); assert_double_equal(f, 117.31); assert_equal(Bget(p_ub, T_DOUBLE_FLD, 0, (char *)&d, 0), SUCCEED); assert_double_equal(d, 112312.1111); assert_equal(Bget(p_ub, T_STRING_FLD, 0, (char *)buf, 0), SUCCEED); assert_string_equal(buf, "TEST STR VAL1M THIS IS LOGN STRING"); len = sizeof(buf); assert_equal(Bget(p_ub, T_CARRAY_FLD, 0, (char *)buf, &len), SUCCEED); assert_equal(strncmp(buf, carr, strlen(carr)), 0); /* OCC 1 */ assert_equal(Bget(p_ub, T_SHORT_FLD, 6, (char *)&s, 0), SUCCEED); assert_equal(s, 81); assert_equal(Bget(p_ub, T_LONG_FLD, 6, (char *)&l, 0), SUCCEED); assert_equal(l, -211); assert_equal(Bget(p_ub, T_CHAR_FLD, 6, (char *)&c, 0), SUCCEED); assert_equal(c, '.'); assert_equal(Bget(p_ub, T_FLOAT_FLD, 6, (char *)&f, 0), SUCCEED); assert_double_equal(f, 11.31); assert_equal(Bget(p_ub, T_DOUBLE_FLD, 6, (char *)&d, 0), SUCCEED); assert_double_equal(d, 11231.1111); assert_equal(Bget(p_ub, T_STRING_FLD, 6, (char *)buf, 0), SUCCEED); assert_string_equal(buf, "3EST STRING ARRAY2 THIS IS EVEN MORE LONGER"); len = sizeof(buf); carr[0] = '2'; assert_equal(Bget(p_ub, T_CARRAY_FLD, 6, (char *)buf, &len), SUCCEED); assert_equal(strncmp(buf, carr, strlen(carr)), 0); /* Test FLD2 */ assert_equal(Bget(p_ub, T_SHORT_2_FLD, 1, (char *)&s, 0), SUCCEED); assert_equal(s, 2121); assert_equal(Bget(p_ub, T_LONG_2_FLD, 1, (char *)&l, 0), SUCCEED); assert_equal(l, 2121); assert_equal(Bget(p_ub, T_CHAR_2_FLD, 1, (char *)&c, 0), SUCCEED); assert_equal(c, 'c'); assert_equal(Bget(p_ub, T_FLOAT_2_FLD, 1, (char *)&f, 0), SUCCEED); assert_double_equal(f, 1227); assert_equal(Bget(p_ub, T_DOUBLE_2_FLD, 1, (char *)&d, 0), SUCCEED); assert_double_equal(d, 1232.1); assert_equal(Bget(p_ub, T_STRING_2_FLD, 1, (char *)buf, 0), SUCCEED); assert_string_equal(buf, "XTEST STR VAL"); len = sizeof(buf); carr[0] = 'G'; assert_equal(Bget(p_ub, T_CARRAY_2_FLD, 1, (char *)buf, &len), SUCCEED); assert_equal(strncmp(buf, carr, strlen(carr)), 0); }
void test_update_data_1(UBFH *p_ub) { short s; long l; char c; float f; double d; char buf[100]; BFLDLEN len; char carr[] = "CARRAY1 TEST STRING DATA"; /* OCC 0 */ assert_equal(Bget(p_ub, T_SHORT_FLD, 0, (char *)&s, 0), SUCCEED); assert_equal(s, 88); assert_equal(Bget(p_ub, T_LONG_FLD, 0, (char *)&l, 0), SUCCEED); assert_equal(l, -1021); assert_equal(Bget(p_ub, T_CHAR_FLD, 0, (char *)&c, 0), SUCCEED); assert_equal(c, 'c'); assert_equal(Bget(p_ub, T_FLOAT_FLD, 0, (char *)&f, 0), SUCCEED); assert_double_equal(f, 17.31); assert_equal(Bget(p_ub, T_DOUBLE_FLD, 0, (char *)&d, 0), SUCCEED); assert_double_equal(d, 12312.1111); assert_equal(Bget(p_ub, T_STRING_FLD, 0, (char *)buf, 0), SUCCEED); assert_string_equal(buf, "TEST STR VAL"); len = sizeof(buf); assert_equal(Bget(p_ub, T_CARRAY_FLD, 0, (char *)buf, &len), SUCCEED); assert_equal(strncmp(buf, carr, strlen(carr)), 0); /* OCC 1 */ assert_equal(Bget(p_ub, T_SHORT_FLD, 5, (char *)&s, 0), SUCCEED); assert_equal(s, 8); assert_equal(Bget(p_ub, T_LONG_FLD, 5, (char *)&l, 0), SUCCEED); assert_equal(l, -21); assert_equal(Bget(p_ub, T_CHAR_FLD, 5, (char *)&c, 0), SUCCEED); assert_equal(c, '.'); assert_equal(Bget(p_ub, T_FLOAT_FLD, 5, (char *)&f, 0), SUCCEED); assert_double_equal(f, 1.31); assert_equal(Bget(p_ub, T_DOUBLE_FLD, 5, (char *)&d, 0), SUCCEED); assert_double_equal(d, 1231.1111); assert_equal(Bget(p_ub, T_STRING_FLD, 5, (char *)buf, 0), SUCCEED); assert_string_equal(buf, "TEST STRING ARRAY2"); len = sizeof(buf); carr[0] = 'Y'; assert_equal(Bget(p_ub, T_CARRAY_FLD, 5, (char *)buf, &len), SUCCEED); assert_equal(strncmp(buf, carr, strlen(carr)), 0); /* Test FLD2 */ assert_equal(Bget(p_ub, T_SHORT_2_FLD, 8, (char *)&s, 0), SUCCEED); assert_equal(s, 212); assert_equal(Bget(p_ub, T_LONG_2_FLD, 8, (char *)&l, 0), SUCCEED); assert_equal(l, 212); assert_equal(Bget(p_ub, T_CHAR_2_FLD, 8, (char *)&c, 0), SUCCEED); assert_equal(c, 'b'); assert_equal(Bget(p_ub, T_FLOAT_2_FLD, 8, (char *)&f, 0), SUCCEED); assert_double_equal(f, 12127); assert_equal(Bget(p_ub, T_DOUBLE_2_FLD, 8, (char *)&d, 0), SUCCEED); assert_double_equal(d, 1231232.1); assert_equal(Bget(p_ub, T_STRING_2_FLD, 8, (char *)buf, 0), SUCCEED); assert_string_equal(buf, "XTEST STR VAL"); len = sizeof(buf); carr[0] = 'X'; assert_equal(Bget(p_ub, T_CARRAY_2_FLD, 8, (char *)buf, &len), SUCCEED); assert_equal(strncmp(buf, carr, strlen(carr)), 0); }
static int Bdigitsin(lua_State *L) /** digitsin(x) */ { M_APM a=Bget(L,1); lua_pushinteger(L,m_apm_significant_digits(a)); return 1; }
static int Biszero(lua_State *L) { mpi *a=Bget(L,1); lua_pushboolean(L, mpi_cmp_int(a,0)==0); return 1; }
static int Bisodd(lua_State *L) { mpi *a=Bget(L,1); lua_pushboolean(L, mpi_get_bit(a,0)); return 1; }
static int Bnumber(lua_State *L) { Bget(L,1); lua_settop(L,1); return 1; }
static int Bbits(lua_State *L) { mpi *a=Bget(L,1); lua_pushinteger(L, mpi_msb(a)); return 1; }