/* _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); } }
/* _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_desk_sync_ergo(): sync desk changes to unix. */ static void _unix_desk_sync_ergo(u2_noun hox, u2_noun syd, u2_noun lok, u2_uhot* hot_u) { u2_udir** dir_u = _unix_pdir(&(hot_u->dir_u), syd); u2_noun xun; #if 0 uL(fprintf(uH, "ergo %s %s %s\n", u2_cr_string(hox), u2_cr_string(syd), u2_cr_string(lok))); #endif if ( !*dir_u ) { *dir_u = c3_malloc(sizeof(u2_udir)); xun = u2nt(0, u2_nul, u2_nul); _unix_dir_forge(*dir_u, &(hot_u->dir_u), u2k(syd)); } else { xun = _unix_dir_ankh(*dir_u); } { u2_noun bur = _unix_desk_peek(hox, syd, lok); if ( u2_no == u2_sing(xun, bur) ) { u2_noun doz = u2_dc("cost", bur, xun); _unix_desk_sync_soba(*dir_u, doz); } else { u2z(xun); u2z(bur); } } }
/* _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)); }