/* _unix_ship_update(): update top level ship. */ static void _unix_ship_update(u2_uhot* hot_u) { u2_udir* dir_u = &(hot_u->dir_u); DIR* rid_u = _unix_opendir(dir_u->pax_c); if ( u2_yes == _unix_dir_update(dir_u, rid_u) ) { u2_udir* dis_u; u2_noun who, hox; { mpz_t who_mp; mpz_init_set(who_mp, hot_u->who_mp); who = u2_ci_mp(who_mp); hox = u2_dc("scot", 'p', u2k(who)); } for ( dis_u = dir_u->dis_u; dis_u; dis_u = dis_u->nex_u ) { u2_noun syd = _unix_dir_name(dis_u); // uL(fprintf(uH, "sync %s %s\n", u2_cr_string(hox), u2_cr_string(syd))); _unix_desk_sync_into(u2k(who), u2k(hox), syd, dis_u); } u2z(hox); u2z(who); } }
/* _unix_desk_sync_miso(): sync out change. */ static void _unix_desk_sync_miso(u2_udir* dir_u, u2_noun pax, u2_noun mis) { if ( (u2_no == u2du(pax)) || u2_no == u2du(u2t(pax)) ) { c3_assert(0); u2z(pax); u2z(mis); } else { u2_noun i_pax = u2h(pax); u2_noun t_pax = u2t(pax); u2_noun it_pax = u2h(t_pax); u2_noun tt_pax = u2t(t_pax); if ( u2_nul == tt_pax ) { _unix_desk_sync_tofu(dir_u, u2k(i_pax), u2k(it_pax), mis); } else { u2_udir** dis_u = _unix_pdir(dir_u, u2k(i_pax)); if ( !*dis_u ) { *dis_u = malloc(sizeof(u2_udir)); _unix_dir_forge(*dis_u, dir_u, u2k(i_pax)); } _unix_desk_sync_miso(*dis_u, u2k(t_pax), mis); } } u2z(pax); }
/* _unix_desk_sync_into(): sync external changes to desk. */ static void _unix_desk_sync_into(u2_noun who, u2_noun hox, u2_noun syd, u2_udir* dir_u) { u2_noun xun, bur, doz, fav, pax; xun = _unix_dir_ankh(dir_u); bur = _unix_desk_peek(hox, u2k(syd), u2k(u2A->wen)); if ( (u2_no == u2_sing(u2h(xun), u2h(bur)))) //&& // (u2_no == _unix_ankh_sing(xun, bur)) ) { doz = u2_dc("cost", xun, bur); pax = u2nq(u2_blip, c3__sync, u2k(u2A->sen), u2_nul); fav = u2nq(c3__into, who, syd, u2nc(u2_yes, doz)); u2_reck_plan(u2A, pax, fav); } else { u2z(who); u2z(syd); u2z(xun); u2z(bur); } }
/* u2_unix_io_poll(): update unix IO state. */ void u2_unix_io_poll(void) { u2_unix* unx_u = &u2_Host.unx_u; u2_noun wen = u2_reck_keep(u2A, u2nt(u2_blip, c3__clay, u2_nul)); if ( (u2_nul != wen) && (u2_yes == u2du(wen)) && (u2_yes == u2ud(u2t(wen))) ) { c3_d gap_d = u2_time_gap_ms(u2k(u2A->now), u2k(u2t(wen))); if ( u2_yes == unx_u->alm ) { uv_timer_stop(&unx_u->tim_u); } else unx_u->alm = u2_yes; if ( gap_d < 1000 ) { gap_d = 1000; } // band-aid on an unknown clay timer bug uv_timer_start(&unx_u->tim_u, _unix_time_cb, gap_d, 0); } else { if ( u2_yes == unx_u->alm ) { uv_timer_stop(&unx_u->tim_u); } unx_u->alm = u2_no; } u2z(wen); }
/* u2_term_ef_boil(): initial effects for loaded servers. */ void u2_term_ef_boil(c3_l ono_l) { if ( ono_l ) { u2_noun tid_l; for ( tid_l = 2; tid_l <= ono_l; tid_l++ ) { u2_noun tin = u2_dc("scot", c3__ud, tid_l); u2_noun pax = u2nq(c3__gold, c3__term, tin, u2_nul); u2_noun hud = u2nc(c3__wipe, u2_nul); u2_reck_plan(u2A, pax, hud); } } { u2_noun pax = u2nq(c3__gold, c3__term, '1', u2_nul); // u2_reck_plan(u2A, u2k(pax), u2nc(c3__init, u2k(u2h(u2A->own)))); u2_reck_plan(u2A, u2k(pax), u2nc(c3__blew, u2_term_get_blew(1))); u2_reck_plan(u2A, u2k(pax), u2nc(c3__hail, u2_nul)); u2z(pax); } }
/* u2_unix_io_poll(): update unix IO state. */ void u2_unix_io_poll(void) { u2_unix* unx_u = &u2_Host.unx_u; u2_noun wen = u2_reck_keep(u2A, u2nt(c3__gold, c3__clay, u2_nul)); if ( (u2_nul != wen) && (u2_yes == u2du(wen)) && (u2_yes == u2ud(u2t(wen))) ) { c3_d gap_d = u2_time_gap_ms(u2k(u2A->now), u2k(u2t(wen))); if ( u2_yes == unx_u->alm ) { uv_timer_stop(&unx_u->tim_u); } else unx_u->alm = u2_yes; uv_timer_start(&unx_u->tim_u, _unix_time_cb, gap_d, 0); } else { if ( u2_yes == unx_u->alm ) { uv_timer_stop(&unx_u->tim_u); } unx_u->alm = u2_no; } u2z(wen); }
/* u2_batz_io_poll(): update batz IO state. */ void u2_batz_io_poll(void) { u2_batz* beh_u = &u2_Host.beh_u; u2_noun wen = u2_reck_keep(u2A, u2nt(c3__gold, c3__batz, u2_nul)); if ( (u2_nul != wen) && (u2_yes == u2du(wen)) && (u2_yes == u2ud(u2t(wen))) ) { c3_d gap_d = u2_time_gap_ms(u2k(u2A->now), u2k(u2t(wen))); if ( u2_yes == beh_u->alm ) { uv_timer_stop(&beh_u->tim_u); } else beh_u->alm = u2_yes; uv_timer_start(&beh_u->tim_u, _batz_time_cb, gap_d, 0); } else { if ( u2_yes == beh_u->alm ) { uv_timer_stop(&beh_u->tim_u); } beh_u->alm = u2_no; } u2z(wen); }
/* u2_unix_ef_init(): update filesystem for new acquisition. */ void u2_unix_ef_init(u2_noun who) { _unix_hot_gain(u2k(who), u2_yes); u2_reck_plan(u2A, u2nq(c3__gold, c3__sync, u2k(u2A->sen), u2_nul), u2nq(c3__into, who, u2_blip, u2nc(u2_yes, u2_nul))); }
static u2_noun _walk_ok(u2_reck* rec_u, u2_noun nod) { u2_noun don = u2_cn_mung(u2k(rec_u->toy.arch), u2k(nod)); if ( u2_no == u2_sing(nod, don) ) { c3_assert(0); } u2z(don); return nod; }
/* u2_term_ef_bake(): initial effects for new terminal. */ void u2_term_ef_bake(u2_noun fav) { u2_noun pax = u2nq(c3__gold, c3__term, '1', u2_nul); u2_reck_plan(u2A, u2k(pax), u2nc(c3__boot, fav)); u2_reck_plan(u2A, u2k(pax), u2nc(c3__blew, u2_term_get_blew(1))); u2_reck_plan(u2A, u2k(pax), u2nc(c3__hail, u2_nul)); u2z(pax); }
/* _unix_desk_sync_soba(): sync computed changes. */ static void _unix_desk_sync_soba(u2_udir* dir_u, u2_noun doz) { u2_noun zod = doz; while ( u2_nul != zod ) { _unix_desk_sync_miso(dir_u, u2k(u2h(u2h(zod))), u2k(u2t(u2h(zod)))); zod = u2t(zod); } u2z(doz); }
/* u2_term_ef_boil(): initial effects for loaded servers. */ void u2_term_ef_boil(void) { { u2_noun pax = u2nq(u2_blip, c3__term, '1', u2_nul); // u2_proc_plan(u2A, u2k(pax), u2nc(c3__init, u2k(u2h(u2A->own)))); u2_proc_plan(u2A, u2k(pax), u2nc(c3__harm, u2_nul)); u2_proc_plan(u2A, u2k(pax), u2nc(c3__blew, u2_term_get_blew(1))); u2_proc_plan(u2A, u2k(pax), u2nc(c3__hail, u2_nul)); u2z(pax); } }
/* u2_unix_ef_ergo(): update filesystem, outbound. */ void u2_unix_ef_ergo(u2_noun who, u2_noun syd, u2_noun rel) { u2_noun hox = u2_dc("scot", 'p', u2k(who)); u2_noun lok = u2_dc("scot", c3__ud, rel); u2_uhot* hot_u; hot_u = _unix_home(u2k(who)); if ( 0 != hot_u ) { _unix_desk_sync_ergo(who, hox, syd, lok, hot_u); } }
/* u2_cm_rind(): open and produce a new jump buffer. */ void* u2_cm_rind() { u2_ray kit_r = u2_rl_ralloc(u2_Wire, c3_wiseof(u2_loom_kite)); u2_kite_par_r(kit_r) = u2_wire_kit_r(u2_Wire); u2_wire_kit_r(u2_Wire) = kit_r; // Save the old stack and actions. // u2_kite_tax(kit_r) = u2k(u2_wire_tax(u2_Wire)); u2_kite_don(kit_r) = u2k(u2_wrac_at(u2_Wire, duz.don)); return u2_at_cord(u2_kite_buf_r(kit_r), c3_wiseof(jmp_buf)); }
/* u2_walk_save(): save file or bail. */ void u2_walk_save(c3_c* pas_c, u2_noun tim, u2_atom pad) { c3_i fid_i = open(pas_c, O_WRONLY | O_CREAT | O_TRUNC, 0666); c3_w fln_w, rit_w; c3_y* pad_y; if ( fid_i < 0 ) { uL(fprintf(uH, "%s: %s\n", pas_c, strerror(errno))); u2_cm_bail(c3__fail); } fln_w = u2_met(3, pad); pad_y = malloc(fln_w); u2_cr_bytes(0, fln_w, pad_y, pad); u2z(pad); rit_w = write(fid_i, pad_y, fln_w); close(fid_i); free(pad_y); if ( rit_w != fln_w ) { uL(fprintf(uH, "%s: %s\n", pas_c, strerror(errno))); u2_cm_bail(c3__fail); } if ( 0 != tim ) { struct timeval tim_tv[2]; u2_time_out_tv(&tim_tv[0], u2k(tim)); u2_time_out_tv(&tim_tv[1], tim); utimes(pas_c, tim_tv); } }
/* _unix_hot_gain(): gain ship. */ static void _unix_hot_gain(u2_noun who, u2_bean mek) { u2_noun hox = u2_dc("scot", 'p', u2k(who)); c3_c* hox_c = u2_cr_string(hox); c3_c* pax_c = _unix_down(u2_Host.cpu_c, hox_c + 1); DIR* rid_u = opendir(pax_c); if ( !rid_u ) { if ( u2_yes == mek ) { _unix_mkdir(pax_c); } else { u2z(who); u2z(hox); return; } } else closedir(rid_u); // uL(fprintf(uH, "GAIN %s\n", pax_c)); free(hox_c); u2z(hox); u2_unix_acquire(pax_c); { u2_uhot* hot_u = c3_malloc(sizeof(u2_uhot)); _unix_dir_watch(&hot_u->dir_u, 0, pax_c); u2_cr_mp(hot_u->who_mp, who); u2z(who); hot_u->nex_u = u2_Host.unx_u.hot_u; u2_Host.unx_u.hot_u = hot_u; } }
/* u2_cn_mink(): logical virtual nock. */ u2_noun u2_cn_mink(u2_noun bus, u2_noun fol, u2_noun fly) { u2_noun res; u2_bean bit; bit = u2_tx_sys_bit(u2_Wire, u2_no); c3_assert(bit == u2_yes); bit = u2_tx_glu_bit(u2_Wire, u2_yes); { u2_noun lad; lad = u2_hevn_at(lad); u2_hevn_at(lad) = u2nc(fly, u2k(lad)); { res = _nock_moog(bus, fol); } // c3_assert(lad == u2ft(u2_hevn_at(lad))); u2z(u2_hevn_at(lad)); u2_hevn_at(lad) = lad; } u2_tx_sys_bit(u2_Wire, u2_yes); u2_tx_glu_bit(u2_Wire, bit); return res; }
void u2_http_ef_bake(void) { u2_noun pax = u2nq(c3__gold, c3__http, u2k(u2A->sen), u2_nul); u2_reck_plan(u2A, pax, u2nc(c3__born, u2_nul)); }
/* _lo_hard(): standard hard wrapper. Produces result and/or asserts. */ static u2_noun _lo_hard(u2_reck* rec_u, u2_funk fun_f, u2_noun arg) { u2_noun pro = u2_lo_soft(rec_u, 0, fun_f, arg); if ( u2_blip == u2h(pro) ) { u2_noun poo = u2k(u2t(pro)); u2z(pro); return poo; } else { u2_lo_punt(2, u2k(u2t(pro))); u2z(pro); c3_assert(0); } }
/* _term_close_cb(): free terminal. */ static void _term_close_cb(uv_handle_t* han_t) { u2_utty* tty_u = (void*) han_t; if ( u2_Host.uty_u == tty_u ) { u2_Host.uty_u = tty_u->nex_u; } else { u2_utty* uty_u; for (uty_u = u2_Host.uty_u; uty_u; uty_u = uty_u->nex_u ) { if ( uty_u->nex_u == tty_u ) { uty_u->nex_u = tty_u->nex_u; break; } } } { u2_noun tid = u2_dc("scot", c3__ud, tty_u->tid_l); u2_noun pax = u2nq(u2_blip, c3__term, tid, u2_nul); u2_proc_plan(u2A, u2k(pax), u2nc(c3__hook, u2_nul)); u2z(pax); } free(tty_u); }
/* u2_lo_sway(): print trace. */ void u2_lo_sway(c3_l tab_l, u2_noun tax) { u2_noun mok = u2_dc("mook", 2, tax); u2_lo_punt(tab_l, u2k(u2t(mok))); u2z(mok); }
/* _unix_dir_ankh(): resolve directory to new style ankh. */ static u2_noun _unix_dir_ankh(u2_udir* dir_u) { u2_udir* dis_u; u2_ufil* fil_u; u2_noun pam = u2_nul; for ( dis_u = dir_u->dis_u; dis_u; dis_u = dis_u->nex_u ) { u2_noun pre = _unix_dir_name(dis_u); u2_noun ank = _unix_dir_ankh(dis_u); // uL(fprintf(uH, "dir %s\n", u2_cr_string(pre))); if ( 0 != u2h(ank) ) { pam = u2_ckd_by_put(pam, pre, ank); } } if ( !dir_u->par_u->par_u ) { // toplevel for ( fil_u = dir_u->par_u->fil_u; fil_u; fil_u = fil_u->nex_u ) { // uL(fprintf(uH, "top %s\n", fil_u->pax_c)); u2_noun wib = _unix_file_tame(fil_u); if ( u2_none == wib ) continue; u2_noun dur = _unix_dir_name(dir_u); if ( u2_no == u2_sing(dur, u2h(wib)) ) { // wrong desk u2z(wib); u2z(dur); continue; } u2_noun baw = _unix_file_load(fil_u); u2_noun woz = u2nt(u2_nul, u2_do("sham", u2k(baw)), baw); u2z(dur); pam = _unix_dir_ankh_file(pam, u2k(u2t(wib)), baw, woz); u2z(wib); } } for ( fil_u = dir_u->fil_u; fil_u; fil_u = fil_u->nex_u ) { u2_noun wib = _unix_file_name(fil_u); u2_noun baw = _unix_file_load(fil_u); u2_noun woz = u2nt(u2_nul, u2_do("sham", u2k(baw)), baw); pam = _unix_dir_ankh_file(pam, wib, baw, woz); } return u2_do("cosh", u2nt(0, u2_nul, pam)); }
/* nock_molg(): function call (mung) with kode. Arguments transferred. */ static u2_noun _nock_molg(u2_noun gat, u2_noun sam, u2_kode* pon) { if ( (u2_no == u2du(gat)) || (u2_no == u2du(u2t(gat))) ) { *pon = 2; return u2_cm_wail(); } else { u2_noun cor, fol; cor = u2nc(u2k(u2h(gat)), u2nc(sam, u2k(u2t(u2t(gat))))); fol = u2k(u2h(gat)); u2z(gat); // XX try to chip with u2_ds_find? but a rare case... return _nock_mool(cor, fol, pon); } }
/* bend */ u2_noun // produce j2_mcx(Pt5, bend, fun)(u2_wire wir_r, u2_noun raq, // retain u2_noun vex, // retain u2_noun sab) // retain { u2_noun p_vex, q_vex; u2_bi_cell(wir_r, vex, &p_vex, &q_vex); if ( u2_no == u2_dust(q_vex) ) { return u2_rx(wir_r, vex); } else { u2_noun uq_vex = u2_t(q_vex); u2_noun puq_vex, quq_vex; u2_noun yit, yur; u2_noun p_yit, q_yit; u2_noun ret; u2_bi_cell(wir_r, uq_vex, &puq_vex, &quq_vex); yit = u2_bl_good(wir_r, u2_nk_mong(wir_r, sab, u2_rx(wir_r, quq_vex))); u2_bi_cell(wir_r, yit, &p_yit, &q_yit); yur = _last(wir_r, p_vex, p_yit); if ( u2_no == u2_dust(q_yit) ) { ret = u2_bc(wir_r, yur, u2_rx(wir_r, q_vex)); } else { u2_noun uq_yit = u2_t(q_yit); u2_noun puq_yit, quq_yit; u2_noun vux; u2_bi_cell(wir_r, uq_yit, &puq_yit, &quq_yit); vux = u2_bl_good (wir_r, u2_nk_mong (wir_r, raq, u2_bc(wir_r, u2_rx(wir_r, puq_vex), u2_rx(wir_r, puq_yit)))); if ( u2_nul == vux ) { ret = u2_bc(wir_r, yur, u2_rx(wir_r, q_vex)); } else { ret = u2_bq(wir_r, yur, u2_nul, u2k(u2t(vux)), u2_rx(wir_r, quq_yit)); u2z(vux); } } u2_rz(wir_r, yit); return ret; } }
// _lo_bench_dec(): benchmark decrement. // static void _lo_bench_dec(c3_w num_w) { c3_w i_w; for ( i_w = 0; i_w < num_w; i_w++ ) { u2_noun soc = u2_do("dec", u2k(u2A->now)); u2z(soc); } }
// _lo_bench_scot_ud(): benchmark prettyprint. // static void _lo_bench_scot_ud(c3_w num_w) { c3_w i_w; for ( i_w = 0; i_w < num_w; i_w++ ) { u2_noun soc = u2_dc("scot", c3__ud, u2k(u2A->now)); u2z(soc); } }
// _lo_bench_slay_p(): benchmark prettyprint. // static void _lo_bench_slay_p(c3_w num_w) { c3_w i_w; for ( i_w = 0; i_w < num_w; i_w++ ) { u2_noun soc = u2_dc("scot", 'p', u2k(u2A->now)); u2_noun dub = u2_do("slay", soc); u2z(dub); } }
/* _unix_desk_sync_into(): sync external changes to desk. */ static void _unix_desk_sync_into(u2_noun who, u2_noun hox, u2_noun syd, u2_udir* dir_u) { u2_noun xun, bur, doz, fav, pax; xun = _unix_dir_arch(dir_u); bur = _unix_desk_peek(u2k(who), hox, syd, u2k(u2A->wen)); if ( u2_no == u2_sing(xun, bur) ) { doz = u2_dc("cyst", xun, bur); pax = u2nq(c3__gold, c3__sync, u2k(u2A->sen), u2_nul); fav = u2nq(c3__into, who, syd, u2nc(u2_yes, doz)); u2_reck_plan(u2A, pax, fav); } else { u2z(xun); u2z(bur); } }
/* _nock_moog(): u2_cn_mink() with fly set. */ static u2_noun _nock_moog(u2_noun bus, u2_noun fol) { u2_noun res; u2_kode pon; pon = 0; { u2_noun hoe; if ( 0 != (hoe = u2_cm_trap()) ) { if ( u2h(hoe) == c3__exit ) { res = u2nc(2, u2k(u2t(hoe))); c3_assert(0); u2z(hoe); } else if ( u2h(hoe) == c3__need ) { res = u2nc(1, u2k(u2t(hoe))); u2z(hoe); } else { u2_noun wac = u2k(u2h(hoe)); u2z(hoe); return u2_cm_bail(wac); } } else { u2_noun pro = _nock_mool(bus, fol, &pon); u2_cm_done(); res = u2nc(pon, pro); } } return res; }
/* _http_new_response(): create http response structure. */ static u2_hrep* _http_new_response(c3_l sev_l, c3_l coq_l, c3_l seq_l, u2_noun rep) { u2_noun p_rep, q_rep, r_rep; if ( u2_no == u2_cr_trel(rep, &p_rep, &q_rep, &r_rep) ) { uL(fprintf(uH, "strange response\n")); return 0; } else { u2_hrep* rep_u = c3_malloc(sizeof(u2_hrep)); rep_u->sev_l = sev_l; rep_u->coq_l = coq_l; rep_u->seq_l = seq_l; rep_u->sas_w = p_rep; rep_u->hed_u = _http_list_to_heds(u2k(q_rep)); rep_u->bod_u = (u2_nul == r_rep) ? 0 : _http_octs_to_bod(u2k(u2t(r_rep))); u2z(rep); return rep_u; } }