home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 January
/
usenetsourcesnewsgroupsinfomagicjanuary1994.iso
/
sources
/
misc
/
volume32
/
xbbs
/
part08
/
bbscbult.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-09-08
|
5KB
|
237 lines
/*------------------------------------------------------------------------
Name: bbscbult.c
Comments: Display file areas and select one
------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include "bbscdef.h"
extern int user_priv;
long atol();
static int indexb[99];
static int first_b_r = 1;
change_bult()
{
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;
int line_cnt, ret, i;
int index_value, ptr;
int j, k;
int length;
if(first_b_r)
{
first_b_r = 0;
for(j=0; j<99; j++)
indexb[j]=0;
}
substr(z_date, z_mm, 1, 2);
substr(z_date, z_dd, 4, 2);
substr(z_date, z_yy, 7, 2);
xmm = atol(z_mm);
xdd = atol(z_dd);
xyy = atol(z_yy);
old_long_date = (xyy*10000L) + (xmm*100L) + xdd;
while (1) {
do_again:
strcpy(buf128, BULLETINS);
if ((fpt = fopen(buf128, "r")) == NULL) {
portsout("\n\r\n\rThere are no bulletins today!\n\r\n\r");
return ;
}
portsout("\n\r\n\r\n\r *******************************\n\r");
portsout(" * Available Bulletins to Read *\n\r");
portsout(" *******************************\n\r\n\r");
portsout("\n\r Bulletin Description \n\r");
portsout(" ============= ========================================== \n\r");
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 Bulletin List: Notify Sysop!\n\r");
return;
}
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);
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);
strip(buf128);
term_space(buf128);
portsout(buf128);
portsout("\n\r");
}
next_read:
++line_cnt;
} /* end of while (fpt) */
if (line_cnt <= 1)
{
portsout("\n\r\n\rThere are no bulletins today!\n\r\n\r");
return;
}
portsout(CRLF);
portsout(" Q) Quit --- exit bulletin section");
portsout(CRLF);
fclose(fpt);
portsout(CRLF);
strcpy(buf128,"The following bulletins are new for you since the last day you called: ");
j = strlen(buf128);
portsout(buf128);
for (index_value=1; index_value<line_cnt; index_value++)
{
if(dir_priv[index_value] <= user_priv)
{
check_new(f_lines[index_value], index_value);
k = strlen(buf128);
j+=k;
if( j >= 72)
{
j = 0;
portsout(CRLF);
}
}
}
portsout(CRLF);
portsout(CRLF);
portsout("Enter Selection ===> ");
portsin_cmp(choice, 2, "Qq");
portsout(CRLF);
*choice = toupper(*choice);
if (*choice == 'Q')
return;
index_value = atoi(choice);
if (index_value > 0 && index_value < line_cnt) {
if (dir_priv[index_value] <= user_priv) {
parse_bul(f_lines[index_value]);
indexb[index_value -1] = 1;
continue;
}
}
}
}
parse_bul(string)
char *string;
{
register char *file_ptr, *xptr;
register int i;
strcpy(buf128, ORGPATH);
file_ptr = (buf128 + strlen(buf128));
i = 0;
while (string[i] != ' ') {
*file_ptr = string[i];
++file_ptr;
++i;
}
*file_ptr = '\0';
cmd_p(buf128);
}
check_new(string, indexer)
char *string;
int indexer;
{
static char *dater[]={ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", };
char timeptr[30];
int result, j, k;
struct stat stater;
register char *file_ptr, *xptr;
register int i;
if(indexb[indexer-1])
{
file_ptr = buf128;
*file_ptr = '\0';
return;
}
strcpy(buf128, ORGPATH);
file_ptr = (buf128 + strlen(buf128));
i = 0;
while (string[i] != ' ') {
*file_ptr = string[i];
++file_ptr;
++i;
}
*file_ptr = '\0';
file_ptr = buf128;
result = stat(buf128, &stater);
if(result)
{
*file_ptr='\0';
return;
}
xmm = stater.st_mtime;
strcpy(timeptr, ctime(&xmm));
substr(timeptr, buf128, 5,3);
substr(timeptr, z_dd, 9, 2);
substr(timeptr, z_yy, 23,2);
xdd = atol(z_dd);
xyy = atol(z_yy);
for ( result =0; result < 12; result++)
{
i = strcmp(buf128, dater[result]);
if(!i)
{
xmm = (long) result +1;
new_long_date = (xyy*10000L) + (xmm*100L) + xdd;
if(new_long_date >= old_long_date)
{
itoa(buf128, indexer);
strcat(buf128, ", ");
portsout(buf128);
}
else
*file_ptr='\0';
return;
}
}
*file_ptr='\0';
}