diff --git a/include/v/vere.h b/include/v/vere.h index 2c6a8f564..e3a5dda72 100644 --- a/include/v/vere.h +++ b/include/v/vere.h @@ -390,7 +390,9 @@ c3_c* hom_c; c3_w kno_w; c3_w fuz_w; + c3_s por_s; u2_bean abo; + u2_bean bat; u2_bean gab; u2_bean dem; u2_bean loh; @@ -696,6 +698,11 @@ /** Main loop, new style. **/ + /* u2_lo_boot(): restore or create pier. + */ + void + u2_lo_boot(void); + /* u2_lo_loop(): enter main event loop. */ void diff --git a/v/ames.c b/v/ames.c index 2f42df157..507aaebd3 100644 --- a/v/ames.c +++ b/v/ames.c @@ -311,7 +311,7 @@ u2_ames_io_init() memset(&add_u, 0, sizeof(add_u)); add_u.sin_family = AF_INET; add_u.sin_addr.s_addr = htonl(INADDR_ANY); - add_u.sin_port = htons(por_s); + add_u.sin_port = htons(u2_Host.ops_u.por_s); if ( uv_udp_bind(&sam_u->wax_u, add_u, 0) != 0 ) { uL(fprintf(uH, "ames: bind: %s\n", diff --git a/v/loop.c b/v/loop.c index 1c0aafdb3..b431fa8ef 100644 --- a/v/loop.c +++ b/v/loop.c @@ -1832,10 +1832,10 @@ _lo_slow() #endif } -/* u2_lo_loop(): begin main event loop. +/* u2_lo_boot(): restore or create pier. */ void -u2_lo_loop(u2_reck* rec_u) +u2_lo_boot() { uv_loop_t* lup_u = uv_default_loop(); @@ -1846,6 +1846,13 @@ u2_lo_loop(u2_reck* rec_u) _lo_init(); _lo_boot(); +} + +/* u2_lo_loop(): begin main event loop. +*/ +void +u2_lo_loop(u2_reck* rec_u) +{ { u2_unix_ef_look(); u2_reck_plan(rec_u, u2nt(c3__gold, c3__ames, u2_nul), @@ -1867,7 +1874,7 @@ u2_lo_loop(u2_reck* rec_u) _lo_slow(); #endif - uv_run(lup_u, UV_RUN_DEFAULT); + uv_run(u2L, UV_RUN_DEFAULT); } /* _lo_mark_reck(): mark a reck. diff --git a/v/main.c b/v/main.c index 53899a36d..d9b3bee5f 100644 --- a/v/main.c +++ b/v/main.c @@ -45,6 +45,7 @@ _main_getopt(c3_i argc, c3_c** argv) c3_i ch_i; u2_Host.ops_u.abo = u2_no; + u2_Host.ops_u.bat = u2_no; u2_Host.ops_u.gab = u2_no; u2_Host.ops_u.loh = u2_no; u2_Host.ops_u.dem = u2_no; @@ -55,21 +56,12 @@ _main_getopt(c3_i argc, c3_c** argv) u2_Host.ops_u.vno = u2_no; u2_Host.ops_u.kno_w = DefaultKernel; u2_Host.ops_u.fuz_w = 0; + u2_Host.ops_u.por_s = 0; - while ( (ch_i = getopt(argc, argv, "k:f:h:I:Lcdsagqv")) != -1 ) { + while ( (ch_i = getopt(argc, argv, "I:f:h:k:p:Labcdgqv")) != -1 ) { switch ( ch_i ) { - case 'L': { u2_Host.ops_u.loh = u2_yes; break; } - case 'a': { u2_Host.ops_u.abo = u2_yes; break; } - case 'c': { u2_Host.ops_u.nuu = u2_yes; break; } - case 'd': { u2_Host.ops_u.dem = u2_yes; break; } - case 'g': { u2_Host.ops_u.gab = u2_yes; break; } - case 'k': { - c3_w arg_w = atoi(optarg); - - if ( (arg_w > 0) && (arg_w < 256) ) { - u2_Host.ops_u.kno_w = arg_w; - } - else return u2_no; + case 'I': { + u2_Host.ops_u.imp_c = strdup(optarg); break; } case 'f': { @@ -81,14 +73,34 @@ _main_getopt(c3_i argc, c3_c** argv) else return u2_no; break; } - case 'I': { - u2_Host.ops_u.imp_c = strdup(optarg); - break; - } case 'h': { u2_Host.ops_u.hom_c = strdup(optarg); break; } + case 'k': { + c3_w arg_w = atoi(optarg); + + if ( (arg_w > 0) && (arg_w < 256) ) { + u2_Host.ops_u.kno_w = arg_w; + } + else return u2_no; + break; + } + case 'p': { + c3_w arg_w = atoi(optarg); + + if ( (arg_w > 0) && (arg_w < 65536) ) { + u2_Host.ops_u.por_s = arg_w; + } + else return u2_no; + break; + } + case 'L': { u2_Host.ops_u.loh = u2_yes; break; } + case 'a': { u2_Host.ops_u.abo = u2_yes; break; } + case 'b': { u2_Host.ops_u.bat = u2_yes; break; } + case 'c': { u2_Host.ops_u.nuu = u2_yes; break; } + case 'd': { u2_Host.ops_u.dem = u2_yes; break; } + case 'g': { u2_Host.ops_u.gab = u2_yes; break; } case 'q': { u2_Host.ops_u.veb = u2_no; break; } case 'v': { u2_Host.ops_u.veb = u2_yes; break; } case 'V': { u2_Host.ops_u.vno = u2_yes; break; } @@ -98,6 +110,11 @@ _main_getopt(c3_i argc, c3_c** argv) } } + if ( u2_yes == u2_Host.ops_u.bat ) { + u2_Host.ops_u.dem = u2_yes; + u2_Host.ops_u.nuu = u2_yes; + } + if ( u2_Host.ops_u.hom_c == 0 ) { u2_Host.ops_u.hom_c = getenv("URBIT_HOME"); @@ -148,7 +165,7 @@ _main_getopt(c3_i argc, c3_c** argv) static void u2_ve_usage(c3_i argc, c3_c** argv) { - fprintf(stderr, "%s: usage: [-v] [-k stage] computer\n", argv[0]); + fprintf(stderr, "%s: usage: [-v] [-k stage] [-p ames_port] computer\n", argv[0]); exit(1); } @@ -218,7 +235,7 @@ main(c3_i argc, } u2_ve_sysopt(); - if ( u2_yes == u2_Host.ops_u.dem ) { + if ( u2_yes == u2_Host.ops_u.dem && u2_no == u2_Host.ops_u.bat ) { printf("Starting daemon\n"); } @@ -337,6 +354,10 @@ main(c3_i argc, u2_lo_grab("main", u2_none); - u2_lo_loop(u2_Host.arv_u); + u2_lo_boot(); + + if ( u2_no == u2_Host.ops_u.bat ) { + u2_lo_loop(u2_Host.arv_u); + } return 0; } diff --git a/v/save.c b/v/save.c index 82e60091d..980fa1eb0 100644 --- a/v/save.c +++ b/v/save.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include diff --git a/v/term.c b/v/term.c index 79c715b0c..8446f6642 100644 --- a/v/term.c +++ b/v/term.c @@ -421,9 +421,16 @@ _term_it_show_clear(u2_utty* uty_u) if ( tat_u->siz.col_l ) { c3_w ful_w = tat_u->mir.cus_w / tat_u->siz.col_l; + if ( 0 != tat_u->mir.cus_w && + ful_w * tat_u->siz.col_l == tat_u->mir.cus_w ) + { + ful_w--; + } + while ( ful_w-- ) { _term_it_write_txt(uty_u, uty_u->ufo_u.out.cuu1_y); } + _term_it_write_str(uty_u, "\r"); _term_it_write_txt(uty_u, uty_u->ufo_u.out.ed_y);