resolve conflicts.

This commit is contained in:
christos 1999-08-25 02:52:15 +00:00
parent d65a712698
commit 46a65cb807
2 changed files with 79 additions and 21 deletions

View File

@ -1,7 +1,7 @@
.\" $NetBSD: chat.8,v 1.10 1999/01/24 06:27:06 ross Exp $
.\" $NetBSD: chat.8,v 1.11 1999/08/25 02:52:15 christos Exp $
.\" -*- nroff -*-
.\" manual page [] for chat 1.8
.\" Id: chat.8,v 1.7 1998/02/04 01:35:49 paulus Exp
.\" Id: chat.8,v 1.8 1999/05/12 06:13:22 paulus Exp
.\" SH section heading
.\" SS subsection heading
.\" LP paragraph
@ -154,6 +154,16 @@ character, you would have to write something like this:
\'# ' logout
.LP
.SH SENDING DATA FROM A FILE
If the string to send starts with an at sign (@), the rest of the
string is taken to be the name of a file to read to get the string to
send. If the last character of the data read is a newline, it is
removed. The file can be a named pipe (or fifo) instead of a regular
file. This provides a way for \fBchat\fR to communicate with another
program, for example, a program to prompt the user and receive a
password typed in.
.LP
.SH ABORT STRINGS
Many modems will report the status of the call as a string. These
strings may be \fBCONNECTED\fR or \fBNO CARRIER\fR or \fBBUSY\fR. It

View File

@ -1,4 +1,4 @@
/* $NetBSD: chat.c,v 1.16 1999/05/06 08:59:21 jeremy Exp $ */
/* $NetBSD: chat.c,v 1.17 1999/08/25 02:52:15 christos Exp $ */
/*
* Chat -- a program for automatic session establishment (i.e. dial
@ -16,6 +16,9 @@
* This software is in the public domain.
*
* -----------------
* 12-May-99 added a feature to read data to be sent from a file,
* if the send string starts with @. Idea from gpk <gpk@onramp.net>.
*
* added -T and -U option and \T and \U substitution to pass a phone
* number into chat script. Two are needed for some ISDN TA applications.
* Keith Dart <kdart@cisco.com>
@ -76,16 +79,17 @@
* Columbus, OH 43221
* (614)451-1883
*
*
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char rcsid[] = "Id: chat.c,v 1.19 1998/03/24 23:57:48 paulus Exp ";
static char rcsid[] = "Id: chat.c,v 1.24 1999/08/13 06:46:09 paulus Exp ";
#else
__RCSID("$NetBSD: chat.c,v 1.16 1999/05/06 08:59:21 jeremy Exp $");
__RCSID("$NetBSD: chat.c,v 1.17 1999/08/25 02:52:15 christos Exp $");
#endif
#ifndef __STDC__
#define const
#endif
#include <stdio.h>
@ -600,27 +604,32 @@ void break_sequence()
void terminate(status)
int status;
{
static int terminating = 0;
if (terminating)
exit(status);
terminating = 1;
echo_stderr(-1);
if (report_file != (char *) 0 && report_fp != (FILE *) NULL) {
/*
* Allow the last of the report string to be gathered before we terminate.
*/
if (report_gathering) {
int c, rep_len;
if (report_gathering) {
int c, rep_len;
rep_len = strlen(report_buffer);
while (rep_len + 1 <= sizeof(report_buffer)) {
alarm(1);
c = get_char();
alarm(0);
if (c < 0 || iscntrl(c))
break;
report_buffer[rep_len] = c;
++rep_len;
}
report_buffer[rep_len] = 0;
fprintf (report_fp, "chat: %s\n", report_buffer);
rep_len = strlen(report_buffer);
while (rep_len + 1 <= sizeof(report_buffer)) {
alarm(1);
c = get_char();
alarm(0);
if (c < 0 || iscntrl(c))
break;
report_buffer[rep_len] = c;
++rep_len;
}
report_buffer[rep_len] = 0;
fprintf (report_fp, "chat: %s\n", report_buffer);
}
if (report_file != (char *) 0 && report_fp != (FILE *) NULL) {
if (verbose)
fprintf (report_fp, "Closing \"%s\".\n", report_file);
fclose (report_fp);
@ -960,6 +969,8 @@ int c;
void chat_send (s)
register char *s;
{
char file_data[STR_LEN];
if (say_next) {
say_next = 0;
s = clean(s,0);
@ -1098,6 +1109,43 @@ register char *s;
return;
}
/*
* The syntax @filename means read the string to send from the
* file `filename'.
*/
if (s[0] == '@') {
/* skip the @ and any following white-space */
char *fn = s;
while (*++fn == ' ' || *fn == '\t')
;
if (*fn != 0) {
FILE *f;
int n = 0;
/* open the file and read until STR_LEN-1 bytes or end-of-file */
f = fopen(fn, "r");
if (f == NULL)
fatal(1, "%s -- open failed: %m", fn);
while (n < STR_LEN - 1) {
int nr = fread(&file_data[n], 1, STR_LEN - 1 - n, f);
if (nr < 0)
fatal(1, "%s -- read error", fn);
if (nr == 0)
break;
n += nr;
}
fclose(f);
/* use the string we got as the string to send,
but trim off the final newline if any. */
if (n > 0 && file_data[n-1] == '\n')
--n;
file_data[n] = 0;
s = file_data;
}
}
if (strcmp(s, "EOT") == 0)
s = "^D\\c";
else if (strcmp(s, "BREAK") == 0)