Dolda2000 GitWeb
/
doldaconnect.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
c8817ca
)
Added interactive distinction to dsch.
author
Fredrik Tolf
<fredrik@dolda2000.com>
Wed, 13 Feb 2008 23:05:16 +0000
(
00:05
+0100)
committer
Fredrik Tolf
<fredrik@dolda2000.com>
Wed, 13 Feb 2008 23:05:16 +0000
(
00:05
+0100)
clients/tty/dcsh.c
patch
|
blob
|
blame
|
history
diff --git
a/clients/tty/dcsh.c
b/clients/tty/dcsh.c
index
4354acf
..
3627295
100644
(file)
--- a/
clients/tty/dcsh.c
+++ b/
clients/tty/dcsh.c
@@
-33,6
+33,7
@@
#include <doldaconnect/uimisc.h>
#include <doldaconnect/utils.h>
#include <doldaconnect/uimisc.h>
#include <doldaconnect/utils.h>
+int interactive = 0;
int verbose = 0;
int dcfd;
int verbose = 0;
int dcfd;
@@
-41,21
+42,30
@@
struct cmd {
int (*handler)(int argc, wchar_t **argv);
};
int (*handler)(int argc, wchar_t **argv);
};
+void wcslimit(wchar_t *wcs, int limit) {
+ int i;
+
+ if(wcslen(wcs) > limit) {
+ for(i = limit - 3; i < limit; i++)
+ wcs[i] = L'.';
+ wcs[i] = L'\0';
+ }
+}
+
int cmd_lsnodes(int argc, wchar_t **argv)
{
int cmd_lsnodes(int argc, wchar_t **argv)
{
- int i;
struct dc_response *resp;
struct dc_intresp *ires;
resp = dc_gettaggedrespsync(dc_queuecmd(NULL, NULL, L"lsnodes", NULL));
if(resp->code == 200) {
struct dc_response *resp;
struct dc_intresp *ires;
resp = dc_gettaggedrespsync(dc_queuecmd(NULL, NULL, L"lsnodes", NULL));
if(resp->code == 200) {
- printf(" ID NET USERS S NAME\n");
+ if(interactive) {
+ printf(" ID NET USERS S NAME\n");
+ printf("----- ---- ------ - ----------------------------------------------------------\n");
+ }
while((ires = dc_interpret(resp)) != NULL) {
while((ires = dc_interpret(resp)) != NULL) {
- if(wcslen(ires->argv[2].val.str) > 58) {
- for(i = 55; i < 58; i++)
- ires->argv[2].val.str[i] = L'.';
- ires->argv[2].val.str[i] = L'\0';
- }
+ if(interactive)
+ wcslimit(ires->argv[2].val.str, 58);
printf("%5i %4ls %6i %c %ls\n", ires->argv[0].val.num, ires->argv[1].val.str, ires->argv[3].val.num, "SHED"[ires->argv[4].val.num], ires->argv[2].val.str);
dc_freeires(ires);
}
printf("%5i %4ls %6i %c %ls\n", ires->argv[0].val.num, ires->argv[1].val.str, ires->argv[3].val.num, "SHED"[ires->argv[4].val.num], ires->argv[2].val.str);
dc_freeires(ires);
}
@@
-115,6
+125,10
@@
int shell(void)
int cmddata;
struct pollfd pfd[2];
int cmddata;
struct pollfd pfd[2];
+ if(interactive) {
+ fprintf(stderr, "dcsh> ");
+ fflush(stderr);
+ }
cmddata = 0;
while(1) {
pfd[0].fd = dcfd;
cmddata = 0;
while(1) {
pfd[0].fd = dcfd;
@@
-138,6
+152,8
@@
int shell(void)
fprintf(stderr, "dcsh: stdin: %s\n", strerror(errno));
return(1);
} else if(ret == 0) {
fprintf(stderr, "dcsh: stdin: %s\n", strerror(errno));
return(1);
} else if(ret == 0) {
+ if(interactive)
+ fprintf(stderr, "\n");
return(0);
}
cmddata += ret;
return(0);
}
cmddata += ret;
@@
-154,6
+170,10
@@
int shell(void)
dc_freewcsarr(argv);
}
memmove(cmdbuf, p, cmddata -= (p - cmdbuf));
dc_freewcsarr(argv);
}
memmove(cmdbuf, p, cmddata -= (p - cmdbuf));
+ if(interactive) {
+ fprintf(stderr, "dcsh> ");
+ fflush(stderr);
+ }
}
}
}
}
}
}
@@
-207,9
+227,12
@@
int main(int argc, char **argv)
}
if(verbose)
fprintf(stderr, "done\n");
}
if(verbose)
fprintf(stderr, "done\n");
- if(optind < argc)
+ if(optind < argc) {
+ interactive = isatty(1);
rv = runchar(argc - optind, argv + optind);
rv = runchar(argc - optind, argv + optind);
- else
+ } else {
+ interactive = isatty(0);
rv = shell();
rv = shell();
+ }
return(rv);
}
return(rv);
}