home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
341b.lha
/
uucp1_v1.03d
/
src
/
uucico
/
uux.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-01-28
|
3KB
|
198 lines
/*
* UUX.C by William Loftus
* Copyright 1988 by William Loftus. All rights reserved.
*
* Example: 1> uux mail-message "burdvax!rmail wpl"
*/
#include <stdio.h>
#include <string.h>
#include "/version.h"
IDENT(".01");
char user[128];
char file_name[128];
char command[128];
char exec_file[128];
char x_exec_file[128];
char command_file[128];
char data_file[128];
int seq;
char path[128];
void read_ctl();
void GetTo();
void GetSubject();
#define TRUE 1
#define FALSE 0
CXBRK()
{
return(0);
}
void
main(argc, argv)
int argc;
char **argv;
{
int error;
getcwd(path,128);
chdir("UUSPOOL:");
read_ctl();
if (argc == 3) {
strcpy(file_name, argv[1]);
strcpy(command, argv[2]);
} else {
printf("Usage: uux file-name command\n");
printf("Example: 1> uux mail-message \"burdvax!rmail wpl\"\n");
chdir(path);
exit(1);
}
seq = GetSequence(4);
if (seq >= 0)
error = Queue();
UnLockFile(exec_file);
UnLockFile(x_exec_file);
UnLockFile(command_file);
UnLockFile(data_file);
chdir(path);
if (seq < 0 || error < 0)
exit(1);
}
Queue()
{
FILE *fp;
char system_name[32];
int bang;
int error;
bang = (int)strchr(command,'!');
bang = bang - (int)command;
strncpy(system_name,command,bang);
system_name[bang] = '\0';
if (!is_in_L_sys_file(system_name)) {
printf ("System \"%s\" not in L.sys file.\n", system_name);
return(-1);
}
system_name[7] = '\0';
sprintf(exec_file,"D.%sX%04d", system_name, seq++);
sprintf(x_exec_file,"X.%sX%04d", system_name, seq++);
sprintf(command_file,"C.%sA%04d", system_name, seq++);
sprintf(data_file,"D.%sB%04d", system_name, seq);
LockFile(exec_file);
LockFile(x_exec_file);
LockFile(command_file);
LockFile(data_file);
fp = fopen(exec_file,"w");
if (fp) {
fprintf(fp,"U %s\n", user);
fprintf(fp,"F %s\n", data_file);
fprintf(fp,"I %s\n", data_file);
fprintf(fp,"C %s\n", (char *)command + bang + 1);
fclose(fp);
} else {
perror(exec_file);
return(-1);
}
fp = fopen(command_file,"w");
if (fp) {
fprintf(fp,"S %s %s %s - %s 0666\n",
data_file,
data_file,
user,
data_file
);
fprintf(fp,"S %s %s %s - %s 0666\n",
exec_file,
x_exec_file,
user,
exec_file
);
fclose(fp);
} else {
perror(command_file);
return(-1);
}
chdir(path);
error = Copy(file_name, data_file);
chdir("UUSPOOL:");
return(error);
}
/*
* Read the control file and grab a few parameters.
*/
#define CTL_DELIM " \t\n\r"
void
read_ctl()
{
FILE *fd;
static char buf[128];
if (! (fd = fopen("UULIB:config", "r"))) {
printf("Can't Find config file");
perror("config");
chdir(path);
exit(3);
}
while (NULL != fgets(buf, sizeof buf, fd)) {
if (strncmp(buf, "UserName", 8) == 0)
strcpy(user, strtok(&buf[9], CTL_DELIM));
}
fclose(fd);
}
Copy(from, to)
char *from;
char *to;
{
FILE *fd;
FILE *td;
int c;
static char to_buf[128];
fd = fopen(from, "r");
if (!fd) {
printf("Could not open %s.\n", from);
perror(from);
return(-1);
}
strcpy(to_buf, "UUSPOOL:");
strcat(to_buf, to);
td = fopen(to_buf, "w");
if (!td) {
printf("Could not open %s.\n", to_buf);
perror(to);
return(-1);
}
while ((c = fgetc(fd)) != EOF) {
fputc((char)c, td);
}
fclose(fd);
fclose(td);
return(1);
}