/* _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)); }
/* _unix_dir_arch(): resolve directory to old style arch. */ static u2_noun _unix_dir_arch(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 arc = _unix_dir_arch(dis_u); // uL(fprintf(uH, "dir %s\n", u2_cr_string(pre))); pam = u2_ckd_by_put(pam, pre, arc); } 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 has = u2_do("sham", u2k(baw)); u2_noun fil = u2nt(u2_yes, has, baw); if ( u2_no == u2du(wib) ) { // uL(fprintf(uH, "file %s\n", u2_cr_string(wib))); pam = u2_ckd_by_put(pam, wib, fil); } else { u2_weak ole = u2_ckd_by_get(u2k(pam), u2k(u2h(wib))); u2_noun arc, rac; // uL(fprintf(uH, "file %s.%s\n", u2_cr_string(u2h(wib)), // u2_cr_string(u2t(wib)))); if ( u2_none == ole ) { arc = u2nc(u2_no, u2_nul); } else if ( u2_yes == u2h(ole) ) { u2z(ole); arc = u2nc(u2_no, u2_nul); } else arc = ole; rac = u2nc(u2_no, u2_ckd_by_put(u2k(u2t(arc)), u2k(u2t(wib)), fil)); pam = u2_ckd_by_put(pam, u2k(u2h(wib)), rac); u2z(wib); u2z(arc); } } return u2nc(u2_no, pam); }
/* _unix_desk_sync_tofu(): sync out file install. */ static void _unix_desk_sync_tofu(u2_udir* dir_u, u2_noun pre, u2_noun ext, u2_noun mis) { c3_c* pox_c = _unix_file_form(dir_u, u2k(pre), u2_no, u2k(ext)); c3_c* pux_c = _unix_file_form(dir_u, u2k(pre), u2_yes, u2k(ext)); u2_ufil** fil_u; // uL(fprintf(uH, "tofu pox_c %s op %s\n", pox_c, u2_cr_string(u2h(mis)))); fil_u = &(dir_u->fil_u); while ( 1 ) { // XX crude! if ( !*fil_u || !strcmp((*fil_u)->pax_c, pox_c) || !strcmp((*fil_u)->pax_c, pux_c) ) { break; } else fil_u = &((*fil_u)->nex_u); } if ( *fil_u && (c3__del == u2h(mis)) ) { u2_ufil* ded_u = *fil_u; *fil_u = ded_u->nex_u; _unix_unlink(ded_u->pax_c); _unix_file_free(ded_u); free(ded_u); free(pox_c); free(pux_c); } else { u2_noun god, oat; c3_c* pax_c; if ( *fil_u ) { u2_noun old = _unix_file_load(*fil_u); c3_assert(c3__mut == u2h(mis)); god = _unix_desk_sync_udon(u2k(u2t(mis)), old); _unix_unlink((*fil_u)->pax_c); free((*fil_u)->pax_c); } else { c3_assert(c3__ins == u2h(mis)); god = u2k(u2t(mis)); } if ( u2_yes == u2du(god) ) { oat = u2_cke_jam(god); pax_c = pux_c; free(pox_c); } else { oat = god; pax_c = pox_c; free(pux_c); } if ( *fil_u ) { (*fil_u)->dot_c = (pax_c + ((*fil_u)->dot_c - (*fil_u)->pax_c)); (*fil_u)->pax_c = pax_c; mpz_clear((*fil_u)->mod_mp); u2_cr_mp((*fil_u)->mod_mp, u2A->now); } else { mpz_t mod_mp; u2_cr_mp(mod_mp, u2A->now); *fil_u = malloc(sizeof(u2_ufil)); _unix_file_watch(*fil_u, dir_u, pax_c, mod_mp); mpz_clear(mod_mp); } _unix_save((*fil_u)->pax_c, oat); } u2z(pre); u2z(ext); u2z(mis); }
/* _unix_desk_sync_tofu(): sync out file install. */ static void _unix_desk_sync_tofu(u2_udir* dir_u, u2_noun pre, u2_noun ext, u2_noun mis) { c3_c* pox_c = _unix_file_form(dir_u, u2k(pre), u2_no, u2k(ext)); c3_c* pux_c = _unix_file_form(dir_u, u2k(pre), u2_yes, u2k(ext)); u2_ufil** fil_u; // uL(fprintf(uH, "tofu pox_c %s op %s\n", pox_c, u2_cr_string(u2h(mis)))); #ifdef SYNCLOG c3_w slot = u2_Host.unx_u.lot_w++ % 1024; free(u2_Host.unx_u.sylo[slot].pax_c); u2_Host.unx_u.sylo[slot].pax_c = 0; #endif fil_u = &(dir_u->fil_u); while ( 1 ) { // XX crude! if ( !*fil_u || !strcmp((*fil_u)->pax_c, pox_c) || !strcmp((*fil_u)->pax_c, pux_c) ) { break; } else fil_u = &((*fil_u)->nex_u); } if ( *fil_u && (c3__del == u2h(mis)) ) { u2_ufil* ded_u = *fil_u; #ifdef SYNCLOG u2_Host.unx_u.sylo[slot].unx = u2_no; u2_Host.unx_u.sylo[slot].wer_m = c3_s4('t','o','f','u'); u2_Host.unx_u.sylo[slot].wot_m = c3__del; u2_Host.unx_u.sylo[slot].pax_c = strdup(ded_u->pax_c); #endif *fil_u = ded_u->nex_u; _unix_unlink(ded_u->pax_c); _unix_file_free(ded_u); free(pox_c); free(pux_c); } else { u2_noun god, oat; c3_c* pax_c; if ( *fil_u ) { u2_noun old = _unix_file_load(*fil_u); c3_assert(c3__mut == u2h(mis)); god = _unix_desk_sync_udon(u2k(u2t(mis)), old); _unix_unlink((*fil_u)->pax_c); free((*fil_u)->pax_c); } else { c3_assert(c3__ins == u2h(mis)); god = u2k(u2t(mis)); } if ( u2_yes == u2du(god) ) { oat = u2_cke_jam(god); pax_c = pux_c; free(pox_c); } else { oat = god; pax_c = pox_c; free(pux_c); } #ifdef SYNCLOG u2_Host.unx_u.sylo[slot].unx = u2_no; u2_Host.unx_u.sylo[slot].wer_m = c3_s4('t','o','f','u'); u2_Host.unx_u.sylo[slot].wot_m = u2h(mis); u2_Host.unx_u.sylo[slot].pax_c = strdup(pax_c); #endif _unix_save(pax_c, oat); if ( *fil_u ) { (*fil_u)->dot_c = (pax_c + ((*fil_u)->dot_c - (*fil_u)->pax_c)); (*fil_u)->pax_c = pax_c; mpz_clear((*fil_u)->mod_mp); u2_cr_mp((*fil_u)->mod_mp, u2A->now); } else { mpz_t mod_mp; u2_cr_mp(mod_mp, u2A->now); *fil_u = c3_malloc(sizeof(u2_ufil)); _unix_file_watch(*fil_u, dir_u, pax_c, mod_mp); mpz_clear(mod_mp); } } u2z(pre); u2z(ext); u2z(mis); }
/* _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); } } 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); u2_weak ole; if ( u2_no == u2du(wib) ) { ole = u2_ckd_by_get(u2k(pam), u2k(wib)); if ( u2_none == ole ) { ole = u2_do("cosh", u2nt(0, woz, u2_nul)); } else { u2_noun elo; elo = u2_do("cosh", u2nt(0, woz, u2k(u2t(u2t(ole))))); u2z(ole); ole = elo; } pam = u2_ckd_by_put(pam, wib, ole); } else { u2_noun fid = u2h(wib); u2_noun har = u2t(wib); ole = u2_ckd_by_get(u2k(pam), u2k(fid)); if ( u2_none == ole ) { ole = u2nt (0, u2_nul, u2_ckd_by_put(u2_nul, u2k(har), u2_do("cosh", u2nt(0, woz, u2_nul)))); ole = u2_do("cosh", ole); } else { u2_noun roo = u2t(u2t(ole)); u2_weak tup = u2_ckd_by_get(u2k(roo), u2k(har)); u2_noun oor, elo; if ( u2_none == tup ) { tup = u2_do("cosh", u2nt(0, woz, u2_nul)); } else { u2_noun upt; upt = u2_do("cosh", u2nt(0, woz, u2k(u2t(u2t(tup))))); u2z(tup); tup = upt; } oor = u2_ckd_by_put(u2k(roo), u2k(har), tup); elo = u2_do("cosh", u2nt(0, u2k(u2h(u2t(ole))), oor)); u2z(ole); ole = elo; } pam = u2_ckd_by_put(pam, u2k(fid), ole); u2z(wib); } } return u2_do("cosh", u2nt(0, u2_nul, pam)); }