home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 January
/
usenetsourcesnewsgroupsinfomagicjanuary1994.iso
/
sources
/
misc
/
volume32
/
xbbs
/
part08
/
bbsczip.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-09-08
|
5KB
|
225 lines
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "bbscdef.h"
char save_old_m[99];
extern int user_priv, last_msg_read, read_flag, read_number, reply_sw;
extern int first_msg_in, blocked_m;
int cont_read;
int contin;
int zip;
parse_zip(string)
char *string;
{
register char *file_ptr, *xptr;
register int i;
strcpy(m_pathname, ORGPATH);
file_ptr = (m_pathname + strlen(m_pathname));
xptr = who_am_I;
i = 0;
while (string[i] != ' ') {
*file_ptr = string[i];
*xptr = string[i];
++xptr;
++file_ptr;
++i;
}
*file_ptr = '/';
++file_ptr;
*file_ptr = '\0';
*xptr = '\0';
}
cmd_z()
{
FILE *fpt, *fopen();
char *fgets(), *getenv();
char choice[4];
#ifndef SYSV
char dir_priv_ascii[7];
#endif
#ifdef SYSV
char dir_priv_ascii[20];
#endif
char *buf_ptr, *file_ptr, *char_ptr;
int line_cnt, ret, i;
int index_value, ptr;
int length, strl, ii;
int read_type;
int ret_type;
strcpy(buf128, MSGS);
strcpy(save_old_m, m_pathname);
first_msg_in = TRUE;
read_type = 0;
stop_that = FALSE;
zip = TRUE;
portsout("\n\r\n\rY(our messages) or N(ew messages) Y/n? ");
portsin(choice, 1);
portsout(CRLF);
if (choice[0] == 'n' || choice[0] == 'N') {
read_type = 1;
cont_read = 0;
portsout("C(ontinous read) or S(ingle at a time) c/S? ");
portsin(choice, 1);
portsout(CRLF);
if (choice[0] == 'c' || choice[0] == 'C') {
cont_read = 1;
contin = TRUE;
}
}
if ((fpt = fopen(buf128, "r")) == NULL) {
portsout("\n\rError Opening File Area List: Notify Sysop!\n\r");
zip = FALSE;
return (-1);
}
line_cnt = 0;
while (fpt) {
zfl(f_lines[line_cnt], 81);
if ((fgets(f_lines[line_cnt], 80, fpt)) == NULL) {
if (line_cnt == 0) {
portsout("\n\rEOF Unexpected in Message Area List: Notify Sysop!\n\r");
zip = FALSE;
return (-1);
}
break; /* if not 1st line */
} /* end of if ((fgets)) */
if (line_cnt > 0) {
length = strlen(f_lines[line_cnt]);
length -= 57;
if (length > 6)
length = 6;
substr(f_lines[line_cnt], dir_priv_ascii, 57, length);
strl = strlen(dir_priv_ascii);
if (strl == 0) {
portsout("\n\rError reading privilege level\n\r");
exit(1);
}
dir_priv[line_cnt] = atoi(dir_priv_ascii);
if (dir_priv[line_cnt] > user_priv)
goto next_read;
strcpy(who_am_i, f_lines[line_cnt]);
buf_ptr = who_am_i;
buf_ptr += 56;
for (ptr = 0; ptr < 5; ptr++)
*buf_ptr++ = ' ';
*buf_ptr = '\0';
sprintf(buf128, "%2d) %s", line_cnt, who_am_i);
}
next_read:
++line_cnt;
} /* end of while (fpt) */
fclose(fpt);
if (line_cnt <= 1) {
zip = FALSE;
return;
}
for (index_value = 1; index_value < line_cnt; index_value++) {
if (dir_priv[index_value] <= user_priv) {
if (stop_that)
goto dats_all;
parse_zip(f_lines[index_value]);
hdrread();
portsout("\n\rSwitching to area '");
portsout(who_am_I);
portsout("'\n\r");
ret_type = 1;
if (!read_type)
cmd_y();
else
ret_type = new_msgs();
if (ret_type == 0 || ret_type == ERROR)
goto dats_all;
portsout("\n\r*************************************************\n\r");
}
}
dats_all:
strcpy(m_pathname, save_old_m);
i = strlen(m_pathname);
if (i > 0) {
hdrread();
set_first_read();
}
if (contin == TRUE && cont_read == 1)
contin = FALSE;
stop_that = FALSE;
zip = FALSE;
}
int
new_msgs()
{
int rc, fd, q_msg;
int t1;
char chr[2];
int new_msg;
int how;
set_first_read();
new_msg = last_msg_read + 1;
q_msg = new_msg;
read_flag = TRUE;
if ((fd = msgopen(0)) == ERROR) {
zip = FALSE;
return (ERROR);
}
how = 1;
while ((rc = msgreadx(fd, q_msg++)) != ERROR) {
if (rc == 0 || rc == -10) {
continue;
}
read_number = atoi(msg_no);
cmd_r();
last_msg_read = read_number;
set_write();
if (cont_read == 1)
goto cont_rd;
if (user_priv >= mpE) {
portsout("\n\rDo you wish to reply to this message? (y/N): ");
portsin(chr, 1);
portsout(CRLF);
if (chr[0] == 'Y' || chr[0] == 'y') {
portsout("\n\rDo you wish to use blocked (right justified) format? (y/N: ");
portsin(chr, 1);
portsout(CRLF);
if (chr[0] == 'y' || chr[0] == 'Y')
blocked_m = 1;
else
blocked_m = 0;
reply_sw = TRUE;
strcpy(msg_to, msg_from);
strcpy(x_pathandfile, "(R) ");
strcat(x_pathandfile, msg_subject);
substr(x_pathandfile, msg_subject, 1, 20);
cmd_e();
reply_sw = FALSE;
}
}
portsout("\n\r\n\rContinue reading messages within this message base? (Y/n): ");
portsin(chr, 1);
portsout(CRLF);
if (chr[0] == 'n' || chr[0] == 'N')
break;
cont_rd: if (stop_that) {
stop_that = FALSE;
read_flag = FALSE;
how = 0;
break;
}
if (cont_read == 1) {
portsout(CRLF);
portsout("----------------------------------------");
}
portsout(CRLF);
}
read_flag = FALSE;
msgclose(fd);
return (how);
}