static void io_read (void) { lua_Object o = lua_getparam (1); if (o == LUA_NOOBJECT) /* free format */ read_free(); else /* formatted */ { int m, dummy1, dummy2; switch (getformat(lua_check_string(1, "read"), &dummy1, &m, &dummy2)) { case 's': if (m < 0) read_until_blank(); else read_m(m); lua_pushstring(add_char(0)); break; case 'i': /* can read as float, since it makes no difference to Lua */ case 'f': { double d; int result; if (m < 0) result = fscanf(in, "%lf", &d); else { read_m(m); result = sscanf(add_char(0), "%lf", &d); } if (result == 1) lua_pushnumber(d); else lua_pushnil(); break; } } } }
int main(int argc, char **argv) { if (argc != 3) { fprintf(stderr, "*** Invalid number of parameters\n"); exit(1); } const char *const filename_sg1= argv[1]; const char *const filename_ft= argv[2]; struct sgraph1_reader_a r; if (0 > sgraph1_open_read_a(filename_sg1, &r, 2)) { exit(1); } if (0 > sgraph1_advise_a(&r, MADV_SEQUENTIAL)) { perror(filename_sg1); exit(1); } struct feature_a f; if (0 > feature_open_write_a(filename_ft, &f, r.h->n1 #if FEATURE_N2 , r.h->n2 #endif )) { exit(1); } if (0 > feature_advise_a(&f, MADV_SEQUENTIAL)) { perror(filename_ft); exit(1); } for (ua_ft u= 0; u < r.h->n1; ++u) { const ma_ft beg= read_ma(r.adj_to, u); const ma_ft end= u == r.h->n1 - 1 ? r.len_m : read_ma(r.adj_to, u + 1); assert(beg <= end); assert((ma_ft)(end - beg) < fa_max); writeonzero_fa(f.f1, u, end - beg); } #if FEATURE_N2 for (u_ft v= 0; v < r.h->n2; ++v) { const m_ft beg= read_m(r.adj_from, v); const m_ft end= v == r.h->n2 - 1 ? r.len_m : read_m(r.adj_from, v + 1); assert(end - beg < f_max); writeonzero_f(f.f2, v, end - beg); } #endif if (0 > feature_close_write_a(&f)) { perror(filename_ft); if (0 > unlink(filename_ft)) { perror(filename_ft); } exit(1); } exit(0); }