X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain.c;h=89ab3e205894d23576cd708895c22d8e58207d02;hb=cd17f98f32857e5cb547984387239bd86749044e;hp=5fb66a608c69aea223dab6eef0e9fdd15b4985a0;hpb=6478a82a947e3662c31b95682661f2de9952944d;p=oftp diff --git a/src/main.c b/src/main.c index 5fb66a6..89ab3e2 100644 --- a/src/main.c +++ b/src/main.c @@ -1,24 +1,201 @@ -#include +#include +#include +#include +#include +#include +#include #include "tgfx.h" +#include "input.h" +#include "util.h" +#include "tui.h" +#include "ftp.h" -int main(void) +void updateui(void); +int proc_input(void); +int keypress(int key); +int parse_args(int argc, char **argv); + +static struct ftp *ftp; +static struct tui_widget *uilist; + +static char *host = "localhost"; +static int port = 21; + +int main(int argc, char **argv) { - tg_bgchar(' '); - tg_clear(); + int i, numsock, maxfd; + int ftpsock[16]; + fd_set rdset; + struct timeval tv; + + if(parse_args(argc, argv) == -1) { + return 1; + } - tg_bgcolor(1); - tg_rect("Remote", 0, 0, 40, 23, TGFX_FRAME); - tg_rect("Local", 40, 0, 40, 23, TGFX_FRAME); + if(!(ftp = ftp_alloc())) { + return 1; + } + if(ftp_connect(ftp, host, port) == -1) { + ftp_free(ftp); + return 1; + } - tg_fgcolor(7); - tg_text(0, 24, "fooolalala bar"); -/* tg_setcursor(2, 24);*/ + init_input(); - while(getch() != 27); + tg_init(); tg_bgchar(' '); - tg_bgcolor(0); - tg_fgcolor(7); tg_clear(); + + uilist = tui_list("Remote", 0, 0, 40, 23, 0, 0); + tui_add_list_item(uilist, "first item"); + tui_add_list_item(uilist, "second item"); + tui_add_list_item(uilist, "another item"); + tui_add_list_item(uilist, "foo"); + + tg_setcursor(0, 23); + + tui_draw(uilist); + + for(;;) { + FD_ZERO(&rdset); + maxfd = 0; + + numsock = ftp_sockets(ftp, ftpsock, sizeof ftpsock); + for(i=0; i maxfd) maxfd = ftpsock[i]; + } + +#ifdef __unix__ + FD_SET(0, &rdset); + tv.tv_sec = 120; + tv.tv_usec = 0; +#else + tv.tv_sec = tv.tv_usec = 0; +#endif + + if(select(maxfd + 1, &rdset, 0, 0, &tv) == -1 && errno == EINTR) { + continue; + } + +#ifdef __unix__ + if(FD_ISSET(0, &rdset)) { + if(proc_input() == -1) { + break; + } + } +#endif + + for(i=0; imodified) { + updateui(); + ftp->modified = 0; + } + } + + tg_cleanup(); + cleanup_input(); + ftp_close(ftp); + ftp_free(ftp); + return 0; +} + +void updateui(void) +{ + unsigned int upd = 0; + + if(ftp->curdir_rem && strcmp(tui_get_title(uilist), ftp->curdir_rem) != 0) { + tui_set_title(uilist, ftp->curdir_rem); + upd |= 1; + } + + if(upd & 1) { + tui_draw(uilist); + } +} + +int proc_input(void) +{ + union event ev; + + while(poll_input(&ev)) { + switch(ev.type) { + case EV_KEY: + if(keypress(ev.key.key) == -1) { + return -1; + } + break; + + default: + break; + } + } + return 0; +} + +int keypress(int key) +{ + switch(key) { + case 27: + case 'q': + return -1; + + default: + break; + } + return 0; +} + +static const char *usage = "Usage: %s [options] [hostname] [port]\n" + "Options:\n" + " -h: print usage information and exit\n"; + +int parse_args(int argc, char **argv) +{ + int i, argidx = 0; + + for(i=1; i