version 1.39, 2010/07/01 20:30:05 |
version 1.40, 2010/07/01 21:28:01 |
|
|
unlink(copyname); |
unlink(copyname); |
return; |
return; |
} |
} |
transfer(buf, sfd, value(EOFREAD)); |
transfer(buf, sfd, vgetstr(EOFREAD)); |
} |
} |
|
|
/* |
/* |
|
|
sig_t f; |
sig_t f; |
char r; |
char r; |
|
|
if (number(value(FRAMESIZE)) > BUFSIZ || number(value(FRAMESIZE)) < 1) { |
if (vgetnum(FRAMESIZE) > BUFSIZ || vgetnum(FRAMESIZE) < 1) { |
printf("framesize must be >= 1 and <= %d\r\n", BUFSIZ); |
printf("framesize must be >= 1 and <= %d\r\n", BUFSIZ); |
close(fd); |
close(fd); |
return; |
return; |
|
|
continue; |
continue; |
*p++ = c; |
*p++ = c; |
|
|
if (c == '\n' && boolean(value(VERBOSE))) |
if (c == '\n' && vgetnum(VERBOSE)) |
printf("\r%d", ++ct); |
printf("\r%d", ++ct); |
if ((cnt = (p-buffer)) == number(value(FRAMESIZE))) { |
if ((cnt = (p-buffer)) == vgetnum(FRAMESIZE)) { |
if (write(fd, buffer, cnt) != cnt) { |
if (write(fd, buffer, cnt) != cnt) { |
printf("\r\nwrite error\r\n"); |
printf("\r\nwrite error\r\n"); |
quit = 1; |
quit = 1; |
|
|
if (write(fd, buffer, cnt) != cnt) |
if (write(fd, buffer, cnt) != cnt) |
printf("\r\nwrite error\r\n"); |
printf("\r\nwrite error\r\n"); |
|
|
if (boolean(value(VERBOSE))) |
if (vgetnum(VERBOSE)) |
prtime(" lines transferred in ", time(0)-start); |
prtime(" lines transferred in ", time(0)-start); |
tcsetattr(0, TCSAFLUSH, &term); |
tcsetattr(0, TCSAFLUSH, &term); |
write(tipout_fd, (char *)&ccc, 1); |
write(tipout_fd, (char *)&ccc, 1); |
|
|
} else { |
} else { |
close(pdes[0]); |
close(pdes[0]); |
signal(SIGPIPE, intcopy); |
signal(SIGPIPE, intcopy); |
transfer(buf, pdes[1], value(EOFREAD)); |
transfer(buf, pdes[1], vgetstr(EOFREAD)); |
signal(SIGPIPE, SIG_DFL); |
signal(SIGPIPE, SIG_DFL); |
while ((p = wait(&status)) > 0 && p != cpid) |
while ((p = wait(&status)) > 0 && p != cpid) |
; |
; |
|
|
printf("%s: cannot open\r\n", fname); |
printf("%s: cannot open\r\n", fname); |
return; |
return; |
} |
} |
transmit(fp, value(EOFWRITE), NULL); |
transmit(fp, vgetstr(EOFWRITE), NULL); |
if (!boolean(value(ECHOCHECK))) |
if (!vgetnum(ECHOCHECK)) |
tcdrain(FD); |
tcdrain(FD); |
} |
} |
|
|
|
|
if (command != NULL) { |
if (command != NULL) { |
for (pc = command; *pc; pc++) |
for (pc = command; *pc; pc++) |
send(*pc); |
send(*pc); |
if (boolean(value(ECHOCHECK))) |
if (vgetnum(ECHOCHECK)) |
read(FD, (char *)&c, 1); /* trailing \n */ |
read(FD, (char *)&c, 1); /* trailing \n */ |
else { |
else { |
tcdrain(FD); |
tcdrain(FD); |
|
|
goto out; |
goto out; |
if (c == EOF) |
if (c == EOF) |
goto out; |
goto out; |
if (c == 0177 && !boolean(value(RAWFTP))) |
if (c == 0177 && !vgetnum(RAWFTP)) |
continue; |
continue; |
lastc = c; |
lastc = c; |
if (c < 040) { |
if (c < 040) { |
if (c == '\n') { |
if (c == '\n') { |
if (!boolean(value(RAWFTP))) |
if (!vgetnum(RAWFTP)) |
c = '\r'; |
c = '\r'; |
} else if (c == '\t') { |
} else if (c == '\t') { |
if (!boolean(value(RAWFTP))) { |
if (!vgetnum(RAWFTP)) { |
if (boolean(value(TABEXPAND))) { |
if (vgetnum(TABEXPAND)) { |
send(' '); |
send(' '); |
while ((++ccount % 8) != 0) |
while ((++ccount % 8) != 0) |
send(' '); |
send(' '); |
|
|
} |
} |
} |
} |
} else |
} else |
if (!boolean(value(RAWFTP))) |
if (!vgetnum(RAWFTP)) |
continue; |
continue; |
} |
} |
send(c); |
send(c); |
} while (c != '\r' && !boolean(value(RAWFTP))); |
} while (c != '\r' && !vgetnum(RAWFTP)); |
if (boolean(value(VERBOSE))) |
if (vgetnum(VERBOSE)) |
printf("\r%d", ++lcount); |
printf("\r%d", ++lcount); |
if (boolean(value(ECHOCHECK))) { |
if (vgetnum(ECHOCHECK)) { |
timedout = 0; |
timedout = 0; |
alarm((unsigned int)number(value(ETIMEOUT))); |
alarm((unsigned int)vgetnum(ETIMEOUT)); |
do { /* wait for prompt */ |
do { /* wait for prompt */ |
read(FD, (char *)&c, 1); |
read(FD, (char *)&c, 1); |
if (timedout || stop) { |
if (timedout || stop) { |
|
|
alarm(0); |
alarm(0); |
goto out; |
goto out; |
} |
} |
} while ((c&STRIP_PAR) != character(value(PROMPT))); |
} while ((c&STRIP_PAR) != vgetnum(PROMPT)); |
alarm(0); |
alarm(0); |
} |
} |
} |
} |
out: |
out: |
if (lastc != '\n' && !boolean(value(RAWFTP))) |
if (lastc != '\n' && !vgetnum(RAWFTP)) |
send('\r'); |
send('\r'); |
if (eofchars) { |
if (eofchars) { |
for (pc = eofchars; *pc; pc++) |
for (pc = eofchars; *pc; pc++) |
|
|
stop_t = time(0); |
stop_t = time(0); |
fclose(fp); |
fclose(fp); |
signal(SIGINT, f); |
signal(SIGINT, f); |
if (boolean(value(VERBOSE))) { |
if (vgetnum(VERBOSE)) { |
if (boolean(value(RAWFTP))) |
if (vgetnum(RAWFTP)) |
prtime(" chars transferred in ", stop_t-start_t); |
prtime(" chars transferred in ", stop_t-start_t); |
else |
else |
prtime(" lines transferred in ", stop_t-start_t); |
prtime(" lines transferred in ", stop_t-start_t); |
|
|
printf("%s: cannot open\r\n", copynamex); |
printf("%s: cannot open\r\n", copynamex); |
return; |
return; |
} |
} |
if (boolean(value(ECHOCHECK))) |
if (vgetnum(ECHOCHECK)) |
(void)snprintf(line, sizeof(line), "cat>%s\r", argv[1]); |
(void)snprintf(line, sizeof(line), "cat>%s\r", argv[1]); |
else |
else |
(void)snprintf(line, sizeof(line), |
(void)snprintf(line, sizeof(line), |
|
|
|
|
cc = c; |
cc = c; |
parwrite(FD, &cc, 1); |
parwrite(FD, &cc, 1); |
if (number(value(CDELAY)) > 0 && c != '\r') |
if (vgetnum(CDELAY) > 0 && c != '\r') |
usleep(number(value(CDELAY))); |
usleep(vgetnum(CDELAY)); |
if (!boolean(value(ECHOCHECK))) { |
if (!vgetnum(ECHOCHECK)) { |
if (number(value(LDELAY)) > 0 && c == '\r') |
if (vgetnum(LDELAY) > 0 && c == '\r') |
usleep(number(value(LDELAY))); |
usleep(vgetnum(LDELAY)); |
return; |
return; |
} |
} |
tryagain: |
tryagain: |
timedout = 0; |
timedout = 0; |
alarm((unsigned int)number(value(ETIMEOUT))); |
alarm((unsigned int)vgetnum(ETIMEOUT)); |
read(FD, &cc, 1); |
read(FD, &cc, 1); |
alarm(0); |
alarm(0); |
if (timedout) { |
if (timedout) { |
|
|
printf("can't find `%s'\r\n", buf); |
printf("can't find `%s'\r\n", buf); |
exit(0); |
exit(0); |
} |
} |
if (boolean(value(VERBOSE))) |
if (vgetnum(VERBOSE)) |
prtime("away for ", time(0)-start); |
prtime("away for ", time(0)-start); |
write(tipout_fd, (char *)&ccc, 1); |
write(tipout_fd, (char *)&ccc, 1); |
tcsetattr(0, TCSAFLUSH, &term); |
tcsetattr(0, TCSAFLUSH, &term); |
|
|
printf("can't find `%s'\r\n", buf); |
printf("can't find `%s'\r\n", buf); |
exit(0); |
exit(0); |
} |
} |
if (boolean(value(VERBOSE))) |
if (vgetnum(VERBOSE)) |
prtime("away for ", time(0)-start); |
prtime("away for ", time(0)-start); |
write(tipout_fd, (char *)&ccc, 1); |
write(tipout_fd, (char *)&ccc, 1); |
tcsetattr(0, TCSAFLUSH, &term); |
tcsetattr(0, TCSAFLUSH, &term); |
|
|
} else { |
} else { |
signal(SIGQUIT, SIG_DFL); |
signal(SIGQUIT, SIG_DFL); |
signal(SIGINT, SIG_DFL); |
signal(SIGINT, SIG_DFL); |
if ((cp = strrchr(value(SHELL), '/')) == NULL) |
if ((cp = strrchr(vgetstr(SHELL), '/')) == NULL) |
cp = value(SHELL); |
cp = vgetstr(SHELL); |
else |
else |
cp++; |
cp++; |
execl(value(SHELL), cp, (char *)NULL); |
execl(vgetstr(SHELL), cp, (char *)NULL); |
printf("\r\ncan't execl!\r\n"); |
printf("\r\ncan't execl!\r\n"); |
exit(1); |
exit(1); |
} |
} |
|
|
* enable TIPOUT side for dialogue |
* enable TIPOUT side for dialogue |
*/ |
*/ |
write(tipout_fd, "S", 1); |
write(tipout_fd, "S", 1); |
if (boolean(value(SCRIPT))) |
if (vgetnum(SCRIPT)) |
write(tipout_fd, value(RECORD), size(value(RECORD))); |
write(tipout_fd, vgetstr(RECORD), size(vgetstr(RECORD))); |
write(tipout_fd, "\n", 1); |
write(tipout_fd, "\n", 1); |
/* |
/* |
* wait for TIPOUT to finish |
* wait for TIPOUT to finish |
*/ |
*/ |
read(tipout_fd, &c, 1); |
read(tipout_fd, &c, 1); |
if (c == 'n') |
if (c == 'n') |
printf("can't create %s\r\n", value(RECORD)); |
printf("can't create %s\r\n", vgetstr(RECORD)); |
} |
} |
|
|
/* |
/* |
|
|
if (prompt("[cd] ", dirname, sizeof(dirname))) { |
if (prompt("[cd] ", dirname, sizeof(dirname))) { |
if (stoprompt) |
if (stoprompt) |
return; |
return; |
cp = value(HOME); |
cp = vgetstr(HOME); |
} |
} |
if (chdir(cp) < 0) |
if (chdir(cp) < 0) |
printf("%s: bad directory\r\n", cp); |
printf("%s: bad directory\r\n", cp); |
|
|
{ |
{ |
signal(SIGTERM, SIG_IGN); |
signal(SIGTERM, SIG_IGN); |
kill(tipout_pid, SIGTERM); |
kill(tipout_pid, SIGTERM); |
logent(value(HOST), value(DEVICE), "call terminated"); |
logent(vgetstr(HOST), vgetstr(DEVICE), "call terminated"); |
if (msg != NULL) |
if (msg != NULL) |
printf("\r\n%s", msg); |
printf("\r\n%s", msg); |
printf("\r\n[EOT]\r\n"); |
printf("\r\n[EOT]\r\n"); |
|
|
{ |
{ |
char *dismsg; |
char *dismsg; |
|
|
if ((dismsg = value(DISCONNECT)) != NULL) { |
if ((dismsg = vgetstr(DISCONNECT)) != NULL) { |
write(FD, dismsg, strlen(dismsg)); |
write(FD, dismsg, strlen(dismsg)); |
sleep(5); |
sleep(5); |
} |
} |
|
|
{ |
{ |
char *cp; |
char *cp; |
|
|
if ((cp = strrchr(value(SHELL), '/')) == NULL) |
if ((cp = strrchr(vgetstr(SHELL), '/')) == NULL) |
cp = value(SHELL); |
cp = vgetstr(SHELL); |
else |
else |
cp++; |
cp++; |
execl(value(SHELL), cp, "-c", s, (char *)NULL); |
execl(vgetstr(SHELL), cp, "-c", s, (char *)NULL); |
} |
} |
|
|
static int |
static int |
|
|
} |
} |
if (vtable[RECORD].v_flags & V_CHANGED) { |
if (vtable[RECORD].v_flags & V_CHANGED) { |
vtable[RECORD].v_flags &= ~V_CHANGED; |
vtable[RECORD].v_flags &= ~V_CHANGED; |
if (boolean(value(SCRIPT))) |
if (vgetnum(SCRIPT)) |
setscript(); |
setscript(); |
} |
} |
if (vtable[TAND].v_flags & V_CHANGED) { |
if (vtable[TAND].v_flags & V_CHANGED) { |
vtable[TAND].v_flags &= ~V_CHANGED; |
vtable[TAND].v_flags &= ~V_CHANGED; |
if (boolean(value(TAND))) |
if (vgetnum(TAND)) |
tandem("on"); |
tandem("on"); |
else |
else |
tandem("off"); |
tandem("off"); |
} |
} |
if (vtable[LECHO].v_flags & V_CHANGED) { |
if (vtable[LECHO].v_flags & V_CHANGED) { |
vtable[LECHO].v_flags &= ~V_CHANGED; |
vtable[LECHO].v_flags &= ~V_CHANGED; |
setboolean(value(HALFDUPLEX), boolean(value(LECHO))); |
vsetnum(HALFDUPLEX, vgetnum(LECHO)); |
} |
} |
if (vtable[PARITY].v_flags & V_CHANGED) { |
if (vtable[PARITY].v_flags & V_CHANGED) { |
vtable[PARITY].v_flags &= ~V_CHANGED; |
vtable[PARITY].v_flags &= ~V_CHANGED; |
|
|
} |
} |
if (vtable[HARDWAREFLOW].v_flags & V_CHANGED) { |
if (vtable[HARDWAREFLOW].v_flags & V_CHANGED) { |
vtable[HARDWAREFLOW].v_flags &= ~V_CHANGED; |
vtable[HARDWAREFLOW].v_flags &= ~V_CHANGED; |
if (boolean(value(HARDWAREFLOW))) |
if (vgetnum(HARDWAREFLOW)) |
hardwareflow("on"); |
hardwareflow("on"); |
else |
else |
hardwareflow("off"); |
hardwareflow("off"); |
|
|
putchar('\n'); |
putchar('\n'); |
break; |
break; |
case V_NUMBER: |
case V_NUMBER: |
printf(" %ld\r\n", number(p->v_value)); |
printf(" %ld\r\n", (long)p->v_value); |
break; |
break; |
case V_BOOL: |
case V_BOOL: |
printf(" %s\r\n", |
printf(" %s\r\n", p->v_value ? "true" : "false"); |
!boolean(p->v_value) ? "false" : "true"); |
|
break; |
break; |
case V_CHAR: |
case V_CHAR: |
vis(buf, character(p->v_value), VIS_WHITE|VIS_OCTAL, 0); |
vis(buf, (int)(long)p->v_value, VIS_WHITE|VIS_OCTAL, 0); |
printf(" %s\r\n", buf); |
printf(" %s\r\n", buf); |
break; |
break; |
} |
} |
|
|
void |
void |
linedisc(char *option) |
linedisc(char *option) |
{ |
{ |
int ld = (int)value(LINEDISC); |
int ld = (int)vgetnum(LINEDISC); |
|
|
ioctl(FD, TIOCSETD, &ld); |
ioctl(FD, TIOCSETD, &ld); |
} |
} |
|
|
} |
} |
(void)snprintf(cmdbuf, sizeof(cmdbuf), "echo %s", name); |
(void)snprintf(cmdbuf, sizeof(cmdbuf), "echo %s", name); |
if ((pid = vfork()) == 0) { |
if ((pid = vfork()) == 0) { |
Shell = value(SHELL); |
Shell = vgetstr(SHELL); |
if (Shell == NULL) |
if (Shell == NULL) |
Shell = _PATH_BSHELL; |
Shell = _PATH_BSHELL; |
close(pivec[0]); |
close(pivec[0]); |