Lost of changes

This commit is contained in:
Michiel Broek 2004-01-25 10:57:35 +00:00
parent 1382701bd8
commit 5a0e317f23
41 changed files with 762 additions and 604 deletions

View File

@ -8,16 +8,33 @@ v0.39.7 14-Jan-2004
that mbtask didn't exist. It is possible that something is
broken now, please report such situations.
general:
In all sources replaced the usleep function with the msleep
function. The usleep function will become obsolete someday.
libcommon.a:
In execute and execsh on Linux systems sync() is called before
and after running the external program to make sure diskbuffers
are committed.
Added a milliseconds timer.
Before and after execute and execsh a 100 ms pause is inserted
to prevent (un)archiver and other errors.
mbcico:
Removed the check to disable calling points.
Added a check to see if we get a URL to call other systems.
If nodelist info fails, increase error counter in steps of 10.
Merged tmail patches from Przemyslaw Kwiatkowski.
Fixed nodelocks during session handshake after many years. The
problem showed only when mbcico was used together with a mailer
on a different OS. When a aka is busy, the aka is now dropped.
When all akas are busy, a session is impossible and the session
is refused. Thanks to Przemyslaw Kwiatkowski for finding and
documenting this bug.
The total session avg cps is now corrected with the two seconds
session close delay time.
During binkp handshake increased the timer of the receiver to
avoid handshake timeouts.
mbfido:
Removed sync calls that are now in execute.

4
TODO
View File

@ -121,7 +121,9 @@ mbcico:
U: Fix binkp file resume when mbcico silently dies. Check with the new
driver.
U: Check node locking results for EMSI, YooHoo and FTS-0001 sessions.
L: Implement binkp option ND.
L: Implement binkp zlib compression.
mbfile:
L: Add a check to see if the magic filenames are (still) valid.

View File

@ -13,51 +13,58 @@
<LINK rel=stylesheet HREF="../manual.css">
</HEAD>
<BODY>
<PRE>
usleep.doc
<BLOCKQUOTE>
<div align='right'><h5>Last update 23-Jan-2004</h5></div>
<div align='center'><H1>System load and the usleep() call.</H1></div>
At some time when developping MBSE BBS I decided that background utilities
did't need full speed to do their jobs. BBS utilities under DOS needed
to run as fast as possible because you needed to bring the bbs down to run
these programs and users couldn't login during that time.
<p>
Starting with mball, the allfiles creator, I inserted code that does usleep(1)
after each 5 processed files. The 1 microsecond is not really the time the
program pauses, it's probably a lot longer. I think this depends on the
hardware type, (Intel, Sparc, Alpha etc) how long GNU/Linux will really suspends
executing the utility.
<p>
The program speed downgrade at the development machine that mball needed was
3 times the original exection time, while system loading stayed under 30%.
At that time the development machine is an 486DX2-66 with a Seagate ST32151N
SCSI harddisk.
<p>
The extra usleep code is only active if you run these utils with the -quiet
switch and when this is set in mbsetup. See menu 1-&gt;5.
With this switch, the program is mostly run by cron. If you onmit
this switch, this is probably when you start the program manually, it will
then always run at full speed, no matter what the setting in mbsetup is.
<p>
If you have a fast system or don't care that the performance of your system
drops because of background processing, you can turn this future off with
mbsetup in the global section. (menu 1-&gt;5).
<p>
Remember, if you have a PII-400 MMX or so with IDE disks, you may still have
performance problems and need to set that switch to yes. There is only one
way to find out if you need it.
<p>
Well, actually, I tested this on a Dell Latitude PII-266, setting the switch to
yes gave better performance then no. Why? The CPU has more time for the slow
IDE disk. With the slow switch on programs runs even faster then with the switch
off.
off. Modern hardware (PIII and later) may run fine with the slow switch turned
off.
<p>
In januari 2004 the usleep code is replaced by a milliseconds timer written
around the nanosleep system call. This call conforms to POSIX.1b and is written
so that if the timer is interrupted it will resume with the time left to do.
The real minimum time the timer runs is 10 ms on Intel systems, see also <b>man
nanosleep</b> All usleep(1) calls are now msleep(1) calls, in practice these are
pauses of 10 ms.
<P>
Michiel.
</PRE>
<p>
<A HREF="index.htm"><IMG SRC="../images/b_arrow.png" ALT="Back" Border="0">Go Back</A>
</BLOCKQUOTE>
</BODY>
</HTML>

View File

@ -40,7 +40,7 @@ OBJS = ${CLCOMM_OBJS} ${COMMON_OBJS} ${DBASE_OBJS} ${MSGBASE_OBJS} ${MBINET_OBJ
${DIESEL_OBJS} ${NODELIST_OBJS}
HDRS = ${CLCOMM_HDRS} ${COMMON_HDRS} ${DBASE_HDRS} ${MSGBASE_HDRS} ${MBINET_HDRS} \
${DIESEL_HDRS} ${NODELIST_HDRS} ${OTHER_HDRS}
OTHER = Makefile README ftscprod.007 mkprod.awk \
OTHER = Makefile README ftscprod.008 mkprod.awk \
README.diesel README.macro Diesel.doc nodelist.conf
TARGET = libclcomm.a libcommon.a libdbase.a libmsgbase.a libmbinet.a libdiesel.a \
libnodelist.a
@ -137,7 +137,7 @@ proglock.o: ../config.h ../lib/libs.h ../lib/structs.h ../lib/users.h ../lib/rec
dostran.o: ../config.h libs.h structs.h users.h records.h common.h
ftnmsg.o: ../config.h libs.h structs.h common.h clcomm.h
mbfile.o: ../config.h libs.h structs.h clcomm.h common.h
nodelock.o: ../config.h libs.h structs.h clcomm.h common.h
nodelock.o: ../config.h libs.h structs.h users.h records.h clcomm.h common.h
rawio.o: ../config.h libs.h structs.h common.h mberrors.h
strcasestr.o: ../config.h libs.h
execute.o: ../config.h libs.h structs.h clcomm.h mberrors.h common.h
@ -160,7 +160,7 @@ dbmsgs.o: ../config.h libs.h structs.h users.h records.h clcomm.h dbcfg.h dbmsgs
dbnode.o: ../config.h libs.h structs.h common.h users.h records.h clcomm.h dbcfg.h dbnode.h
dbtic.o: ../config.h libs.h structs.h users.h records.h clcomm.h dbcfg.h dbtic.h
dbuser.o: ../config.h libs.h structs.h users.h records.h dbcfg.h dbuser.h
jammsg.o: ../config.h libs.h clcomm.h msgtext.h msg.h jam.h jammsg.h
jammsg.o: ../config.h libs.h clcomm.h msgtext.h structs.h common.h msg.h jam.h jammsg.h
msg.o: ../config.h libs.h msgtext.h msg.h clcomm.h structs.h common.h jammsg.h
msgtext.o: ../config.h libs.h msgtext.h msg.h
nntp.o: ../config.h libs.h structs.h users.h records.h clcomm.h mbinet.h

View File

@ -512,6 +512,8 @@ void gpt_resettimers(void); /* Reset all timers */
int gpt_settimer(int, int); /* Set timer no to time */
int gpt_expired(int); /* Is timer expired */
int gpt_running(int); /* Is timer running */
int msleep(int); /* Milliseconds timer */
#endif

View File

@ -140,7 +140,9 @@ int execute(char *cmd, char *file, char *pkt, char *in, char *out, char *err)
#ifdef __linux__
sync();
#endif
msleep(100);
rc = _execute(cmd, file, pkt, in, out, err);
msleep(100);
#ifdef __linux
sync();
#endif
@ -215,7 +217,9 @@ int execsh(char *cmd, char *in, char *out, char *err)
#ifdef __linux__
sync();
#endif
msleep(100);
rc = _execsh(cmd, in, out, err);
msleep(100);
#ifdef __linux__
sync();
#endif

View File

@ -10,7 +10,7 @@
* MBSE BBS and utilities.
*
*****************************************************************************
* Copyright (C) 1997-2003
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -38,10 +38,13 @@
#include "libs.h"
#include "clcomm.h"
#include "msgtext.h"
#include "structs.h"
#include "common.h"
#include "msg.h"
#include "jam.h"
#include "jammsg.h"
#define MAX_TEXT 2048
int fdHdr = -1;
@ -400,7 +403,7 @@ int JAM_Lock(unsigned long ulTimeout)
WriteError("JAM messagebase is locked by pid %d", fl.l_pid);
return FALSE;
}
usleep(250000);
msleep(250);
Syslog('m', "JAM messagebase lock attempt %d", Tries);
}

View File

@ -4,7 +4,7 @@
* Purpose ...............: Basic File I/O
*
*****************************************************************************
* Copyright (C) 1997-2003
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -193,8 +193,6 @@ long file_crc(char *path, int slow)
do {
bread = fread(line, 1, 32768, fp);
crc = upd_crc32(line, crc, bread);
if (slow)
usleep(1);
Nopper(); // For large files on slow systems.
} while (bread > 0);

View File

@ -381,7 +381,7 @@ int Msg_Link(char *Path, int do_quiet, int slow_util)
i++;
if (slow_util && do_quiet && ((i % 5) == 0))
usleep(1);
msleep(1);
if (((i % 10) == 0) && (!do_quiet)) {
printf("%6d / %6lu\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", i, Total);
@ -414,7 +414,7 @@ int Msg_Link(char *Path, int do_quiet, int slow_util)
}
if (slow_util && do_quiet && ((i % 5) == 0))
usleep(1);
msleep(1);
if (((i % 10) == 0) && (!do_quiet)) {
printf("%6d / %6lu\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", i, Total);

View File

@ -4,7 +4,7 @@
* Purpose ...............: Raw I/O routines.
*
*****************************************************************************
* Copyright (C) 1997-2001
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -238,7 +238,7 @@ int Waitchar(unsigned char *ch, int wtime)
rc = read(ttyfd, ch, 1);
if (rc == 1)
return rc;
usleep(10000);
msleep(10);
}
return rc;
}

View File

@ -4,7 +4,7 @@
* Purpose ...............: General Purpose Timers
*
*****************************************************************************
* Copyright (C) 1997-2003
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -127,3 +127,40 @@ int gpt_running(int tno)
}
/*
* Milliseconds timer, returns 0 on success.
*/
int msleep(int msecs)
{
int rc;
struct timespec req, rem;
rem.tv_sec = 0;
rem.tv_nsec = 0;
req.tv_sec = msecs / 1000;
req.tv_nsec = (msecs % 1000) * 1000000;
while (TRUE) {
rc = nanosleep(&req, &rem);
if (rc == 0)
break;
if ((errno == EINVAL) || (errno == EFAULT)) {
WriteError("$msleep(%d)", msecs);
break;
}
/*
* Error was EINTR, run timer again to complete.
*/
req.tv_sec = rem.tv_sec;
req.tv_nsec = rem.tv_nsec;
rem.tv_sec = 0;
rem.tv_nsec = 0;
}
return rc;
}

View File

@ -306,7 +306,7 @@ SM_NAMES
SM_EDECL
faddr *primary;
char *p, *q, *pwd;
int i, rc = 0, bufl, cmd, dupe, SendPass = FALSE;
int i, rc = 0, bufl, cmd, dupe, SendPass = FALSE, akas = 0;
fa_list **tmp, *tmpa;
faddr *fa, ra;
@ -409,22 +409,35 @@ SM_STATE(WaitAddr)
}
}
free(p);
for (tmpa = remote; tmpa; tmpa = tmpa->next) {
Syslog('+', "Address : %s", ascfnode(tmpa->addr, 0x1f));
if (nodelock(tmpa->addr, mypid)) {
binkp_send_command(MM_BSY, "Address %s locked", ascfnode(tmpa->addr, 0x1f));
SM_ERROR;
}
/*
* With the loaded flag we prevent removing the noderecord
* when the remote presents us an address we don't know about.
*/
if (!Loaded) {
if (noderecord(tmpa->addr))
Loaded = TRUE;
tmp = &remote;
while (*tmp) {
if (nodelock((*tmp)->addr, mypid)) {
Syslog('+', "address : %s is locked, removed from aka list",ascfnode((*tmp)->addr,0x1f));
tmpa=*tmp;
*tmp=(*tmp)->next;
free(tmpa);
} else {
/*
* With the loaded flag we prevent removing the noderecord
* when the remote presents us an address we don't know about.
*/
akas++;
Syslog('+', "address : %s",ascfnode((*tmp)->addr,0x1f));
if (!Loaded) {
if (noderecord((*tmp)->addr))
Loaded = TRUE;
}
tmp = &((*tmp)->next);
}
}
if (akas == 0) {
binkp_send_command(MM_BSY, "All aka's busy");
Syslog('+', "Binkp: abort, all aka's are busy");
SM_ERROR;
}
history.aka.zone = remote->addr->zone;
history.aka.net = remote->addr->net;
history.aka.node = remote->addr->node;
@ -578,7 +591,7 @@ SM_NAMES
(char *)"Opts"
SM_EDECL
char *p, *q, *pw;
int i, rc, bufl, cmd, dupe, we_have_pwd = FALSE;
int i, rc, bufl, cmd, dupe, we_have_pwd = FALSE, akas = 0;
fa_list **tmp, *tmpa;
faddr *fa;
@ -666,23 +679,35 @@ SM_STATE(WaitAddr)
SM_ERROR;
}
}
for (tmpa = remote; tmpa; tmpa = tmpa->next) {
Syslog('+', "Address : %s", ascfnode(tmpa->addr, 0x1f));
if (nodelock(tmpa->addr, mypid)) {
binkp_send_command(MM_BSY, "Address %s locked", ascfnode(tmpa->addr, 0x1f));
SM_ERROR;
}
/*
* With the loaded flag we prevent removing the noderecord
* when the remote presents us an address we don't know about.
*/
if (!Loaded) {
if (noderecord(tmpa->addr))
Loaded = TRUE;
tmp = &remote;
while (*tmp) {
if (nodelock((*tmp)->addr, mypid)) {
Syslog('+', "address : %s is locked, removed from aka list",ascfnode((*tmp)->addr,0x1f));
tmpa=*tmp;
*tmp=(*tmp)->next;
free(tmpa);
} else {
/*
* With the loaded flag we prevent removing the noderecord
* when the remote presents us an address we don't know about.
*/
akas++;
Syslog('+', "address : %s",ascfnode((*tmp)->addr,0x1f));
if (!Loaded) {
if (noderecord((*tmp)->addr))
Loaded = TRUE;
}
tmp = &((*tmp)->next);
}
}
if (akas == 0) {
binkp_send_command(MM_BSY, "All aka's busy");
Syslog('+', "Binkp: abort, all aka's are busy");
SM_ERROR;
}
for (tmpa = remote; tmpa; tmpa = tmpa->next) {
if (((nlent = getnlent(tmpa->addr))) && (nlent->pflag != NL_DUMMY)) {
Syslog('+', "Binkp: remote is a listed system");
@ -874,7 +899,7 @@ int file_transfer(void)
* Nothing done, release
*/
Syslog('b', "Binkp: NOTHING DONE");
usleep(1);
msleep(1);
break;
case Receive: Trc = binkp_receiver();
@ -1626,7 +1651,7 @@ int binkp_recv_command(char *buf, int *len, int *cmd)
if (b0 & 0x80)
*cmd = 1;
b1 = GETCHAR(1);
b1 = GETCHAR(BINKP_TIMEOUT / 2);
if (tty_status)
goto to;
@ -1725,7 +1750,7 @@ int binkp_poll_frame(void)
if (c < 0) {
c = -c;
if (c == STAT_TIMEOUT) {
usleep(1);
msleep(1);
rc = 0;
break;
}

View File

@ -4,7 +4,7 @@
* Purpose ...............: Fidonet mailer - modem chat
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -104,7 +104,7 @@ int send_str(char *str, char *Phone)
case 's': PUTCHAR(' '); *q++ = ' '; break;
case ' ': PUTCHAR(' '); *q++ = ' '; break;
case 'd': sleep(1); *q++ = '\\'; *q++ = 'd'; break;
case 'p': usleep(250000L); *q++ = '\\'; *q++ = 'p'; break;
case 'p': msleep(250); *q++ = '\\'; *q++ = 'p'; break;
case 'D': if (Phone) {
PUTSTR(Phone);
sprintf(q, "%s", Phone);

View File

@ -4,7 +4,7 @@
* Purpose ...............: Fidonet mailer
*
*****************************************************************************
* Copyright (C) 1997-2003
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -70,7 +70,7 @@ int emsi_remote_opts;
char *emsi_local_password = NULL;
char *emsi_remote_password = NULL;
char emsi_remote_comm[4]="8N1";
int emsi_akas = 0;
int rx_emsi(char *data)
@ -448,6 +448,10 @@ SM_STATE(checkdat)
Syslog('+', "Got EMSI_DAT packet \"%s\" with bad crc: %04x/%04x", printable(databuf, 0), lcrc, rcrc);
SM_PROCEED(sendnak);
} if (scanemsidat(databuf + 12) == 0) {
if (emsi_akas == 0) {
Syslog('+', "All akas busy, abort");
SM_ERROR;
}
SM_PROCEED(sendack);
} else {
Syslog('+', "Could not parse EMSI_DAT packet \"%s\"",databuf);

View File

@ -47,6 +47,7 @@
extern int Loaded;
extern int mypid;
extern int emsi_akas;
@ -334,7 +335,7 @@ exit:
int scanemsidat(char *buf)
{
fa_list **tmp,*tmpa;
fa_list **tmp, *tmpa;
faddr *fa;
char *p, *q, *mailer_prod, *mailer_name, *mailer_version, *mailer_serial;
int dupe;
@ -375,24 +376,35 @@ int scanemsidat(char *buf)
}
}
for (tmpa = remote; tmpa; tmpa = tmpa->next) {
Syslog('+', "address : %s",ascfnode(tmpa->addr,0x1f));
(void)nodelock(tmpa->addr, mypid);
/*
* With the loaded flag we prevent removing the noderecord
* when the remote presents us an address we don't know about.
*/
if (!Loaded) {
if (noderecord(tmpa->addr))
Loaded = TRUE;
tmp = &remote;
while (*tmp) {
if (nodelock((*tmp)->addr, mypid)) {
Syslog('+', "address : %s is locked, removed from aka list",ascfnode((*tmp)->addr,0x1f));
tmpa=*tmp;
*tmp=(*tmp)->next;
free(tmpa);
} else {
/*
* With the loaded flag we prevent removing the noderecord
* when the remote presents us an address we don't know about.
*/
emsi_akas++;
Syslog('+', "address : %s",ascfnode((*tmp)->addr,0x1f));
if (!Loaded) {
if (noderecord((*tmp)->addr))
Loaded = TRUE;
}
tmp = &((*tmp)->next);
}
}
history.aka.zone = remote->addr->zone;
history.aka.net = remote->addr->net;
history.aka.node = remote->addr->node;
history.aka.point = remote->addr->point;
sprintf(history.aka.domain, "%s", remote->addr->domain);
if (emsi_akas) { /* Only if any aka's left */
history.aka.zone = remote->addr->zone;
history.aka.net = remote->addr->net;
history.aka.node = remote->addr->node;
history.aka.point = remote->addr->point;
sprintf(history.aka.domain, "%s", remote->addr->domain);
}
if (emsi_remote_password)
free(emsi_remote_password);

View File

@ -4,7 +4,7 @@
* Purpose ...............: Fidonet mailer
*
*****************************************************************************
* Copyright (C) 1997-2003
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -116,95 +116,89 @@ int tx_ftsc(void)
SM_DECL(txftsc,(char *)"txftsc")
SM_STATES
wait_command,
recv_mail,
send_req,
recv_req
wait_command,
recv_mail,
send_req,
recv_req
SM_NAMES
(char *)"wait_command",
(char *)"recv_mail",
(char *)"send_req",
(char *)"recv_req"
(char *)"wait_command",
(char *)"recv_mail",
(char *)"send_req",
(char *)"recv_req"
SM_EDECL
int c,rc;
char *nonhold_mail;
int mailsent = FALSE, mailrcvd = FALSE;
int c,rc, mailsent = FALSE, mailrcvd = FALSE;
char *nonhold_mail;
nonhold_mail = (char *)ALL_MAIL;
tosend = create_filelist(remote,nonhold_mail,2);
nonhold_mail = (char *)ALL_MAIL;
tosend = create_filelist(remote,nonhold_mail,2);
Syslog('s', "txftsc SEND_MAIL");
if ((rc = xmsndfiles(tosend)))
return rc;
mailsent = TRUE;
if ((rc = xmsndfiles(tosend)))
return rc;
mailsent = TRUE;
SM_START(wait_command)
SM_STATE(wait_command)
Syslog('s', "txftsc WAIT_COMMAND");
c = GETCHAR(30);
if (c == TIMEOUT) {
Syslog('+', "timeout waiting for remote action, try receive");
SM_PROCEED(recv_mail);
} else if (c < 0) {
if (mailrcvd && mailsent) {
/*
* Some systems hangup after sending mail, so if we did
* send and receive mail we consider the session OK.
*/
Syslog('+', "Lost carrier, FTS-0001 session looks complete");
SM_SUCCESS;
} else {
Syslog('+', "got error waiting for TSYNC: received %d",c);
SM_ERROR;
}
} else switch (c) {
case TSYNC: SM_PROCEED(recv_mail);
break;
case SYN: SM_PROCEED(recv_req);
break;
case ENQ: SM_PROCEED(send_req);
break;
case 'C':
case NAK: PUTCHAR(EOT);
SM_PROCEED(wait_command);
break;
case CAN: SM_SUCCESS; /* this is not in BT */
break;
default: Syslog('s', "got '%s' waiting command", printablec(c));
PUTCHAR(SUB);
SM_PROCEED(wait_command);
break;
c = GETCHAR(30);
if (c == TIMEOUT) {
Syslog('+', "timeout waiting for remote action, try receive");
SM_PROCEED(recv_mail);
} else if (c < 0) {
if (mailrcvd && mailsent) {
/*
* Some systems hangup after sending mail, so if we did
* send and receive mail we consider the session OK.
*/
Syslog('+', "Lost carrier, FTS-0001 session looks complete");
SM_SUCCESS;
} else {
Syslog('+', "got error waiting for TSYNC: received %d",c);
SM_ERROR;
}
} else switch (c) {
case TSYNC: SM_PROCEED(recv_mail);
break;
case SYN: SM_PROCEED(recv_req);
break;
case ENQ: SM_PROCEED(send_req);
break;
case 'C':
case NAK: PUTCHAR(EOT);
SM_PROCEED(wait_command);
break;
case CAN: SM_SUCCESS; /* this is not in BT */
break;
default: Syslog('s', "got '%s' waiting command", printablec(c));
PUTCHAR(SUB);
SM_PROCEED(wait_command);
break;
}
SM_STATE(recv_mail)
Syslog('s', "txftsc RECV_MAIL");
if (recvfiles()) {
SM_ERROR;
} else {
mailrcvd = TRUE;
SM_PROCEED(wait_command);
}
if (recvfiles()) {
SM_ERROR;
} else {
mailrcvd = TRUE;
SM_PROCEED(wait_command);
}
SM_STATE(send_req)
Syslog('s', "txftsc SEND_BARK");
if (sendbark()) {
SM_ERROR;
} else {
SM_SUCCESS;
}
if (sendbark()) {
SM_ERROR;
} else {
SM_SUCCESS;
}
SM_STATE(recv_req)
Syslog('s', "txftsc RECV_BARK");
if (recvbark()) {
SM_ERROR;
} else {
SM_PROCEED(wait_command);
}
if (recvbark()) {
SM_ERROR;
} else {
SM_PROCEED(wait_command);
}
SM_END
SM_RETURN
@ -213,148 +207,145 @@ SM_RETURN
SM_DECL(rxftsc,(char *)"rxftsc")
SM_STATES
recv_mail,
send_mail,
send_req,
recv_req
recv_mail,
send_mail,
send_req,
recv_req
SM_NAMES
(char *)"recv_mail",
(char *)"send_mail",
(char *)"send_req",
(char *)"recv_req"
(char *)"recv_mail",
(char *)"send_mail",
(char *)"send_req",
(char *)"recv_req"
SM_EDECL
int c, count = 0, didwazoo = FALSE;
int sentmail = FALSE, rcvdmail = FALSE;
file_list *request = NULL, *tmpfl;
int c, count = 0, didwazoo = FALSE, sentmail = FALSE, rcvdmail = FALSE;
file_list *request = NULL, *tmpfl;
SM_START(recv_mail)
SM_STATE(recv_mail)
Syslog('s', "rxftsc RECV_MAIL");
if (recvfiles()) {
SM_ERROR;
} else {
rcvdmail = TRUE;
SM_PROCEED(send_mail);
}
if (recvfiles()) {
SM_ERROR;
} else {
rcvdmail = TRUE;
SM_PROCEED(send_mail);
}
SM_STATE(send_mail)
Syslog('s', "rxftsc SEND_MAIL count=%d", count);
if (count++ > 45) {
SM_ERROR;
}
Syslog('x', "rxftsc SEND_MAIL count=%d", count);
if (count++ > 45) {
SM_ERROR;
}
/*
* If we got a wazoo request, add files now.
*/
request = respond_wazoo();
if (request != NULL) {
didwazoo = TRUE;
tmpfl = tosend;
tosend = request;
for (; request->next; request = request->next);
request->next = tmpfl;
/*
* If we got a wazoo request, add files now.
*/
request = respond_wazoo();
if (request != NULL) {
didwazoo = TRUE;
tmpfl = tosend;
tosend = request;
for (; request->next; request = request->next);
request->next = tmpfl;
request = NULL;
}
request = NULL;
}
if (tosend == NULL) {
count = 0;
SM_PROCEED(send_req);
}
if (tosend == NULL) {
count = 0;
SM_PROCEED(send_req);
}
PUTCHAR(TSYNC);
c = GETCHAR(1);
Syslog('x', "Got char 0x%02x", c);
if (c == TIMEOUT) {
Syslog('x', " timeout");
SM_PROCEED(send_mail);
} else if (c < 0) {
Syslog('+', "got error waiting for NAK: received %d",c);
SM_ERROR;
} else switch (c) {
case 'C':
case NAK: if (xmsndfiles(tosend)) {
SM_ERROR;
} else {
sentmail = TRUE;
count = 0;
SM_PROCEED(send_req);
}
break;
case CAN: Syslog('+', "Remote refused to pickup mail");
SM_SUCCESS;
break;
case EOT: PUTCHAR(ACK);
SM_PROCEED(send_mail);
break;
default: Syslog('s', "Got '%s' waiting NAK", printablec(c));
SM_PROCEED(send_mail);
break;
}
PUTCHAR(TSYNC);
c = GETCHAR(1);
Syslog('x', "Got char 0x%02x", c);
if (c == TIMEOUT) {
Syslog('x', " timeout");
SM_PROCEED(send_mail);
} else if (c < 0) {
Syslog('+', "got error waiting for NAK: received %d",c);
SM_ERROR;
} else switch (c) {
case 'C':
case NAK: if (xmsndfiles(tosend)) {
SM_ERROR;
} else {
sentmail = TRUE;
count = 0;
SM_PROCEED(send_req);
}
break;
case CAN: Syslog('+', "Remote refused to pickup mail");
SM_SUCCESS;
break;
case EOT: PUTCHAR(ACK);
SM_PROCEED(send_mail);
break;
default: Syslog('s', "Got '%s' waiting NAK", printablec(c));
SM_PROCEED(send_mail);
break;
}
SM_STATE(send_req)
Syslog('s', "rxftsc SEND_REQ count=%d", count);
Syslog('x', "rxftsc SEND_REQ count=%d", count);
if (didwazoo) {
SM_SUCCESS;
}
if (didwazoo) {
SM_SUCCESS;
}
if (count > 15) {
SM_ERROR;
}
if (count > 15) {
SM_ERROR;
}
if (!made_request) {
SM_PROCEED(recv_req);
}
if (!made_request) {
SM_PROCEED(recv_req);
}
PUTCHAR(SYN);
c = GETCHAR(5);
Syslog('x', "Got char 0x%02x", c);
count++;
if (c == TIMEOUT) {
Syslog('x', " timeout");
SM_PROCEED(send_req);
} else if (c < 0) {
Syslog('+', "got error waiting for ENQ: received %d",c);
SM_ERROR;
} else switch (c) {
case ENQ: if (sendbark()) {
SM_ERROR;
} else {
SM_PROCEED(recv_req);
}
break;
case CAN: Syslog('+', "Remote refused to accept request");
SM_PROCEED(recv_req);
break;
case 'C':
case NAK: PUTCHAR(EOT);
SM_PROCEED(send_req);
break;
case SUB: SM_PROCEED(send_req);
break;
default: Syslog('s', "got '%s' waiting ENQ", printablec(c));
SM_PROCEED(send_req);
break;
}
PUTCHAR(SYN);
c = GETCHAR(5);
Syslog('x', "Got char 0x%02x", c);
count++;
if (c == TIMEOUT) {
Syslog('x', " timeout");
SM_PROCEED(send_req);
} else if (c < 0) {
Syslog('+', "got error waiting for ENQ: received %d",c);
SM_ERROR;
} else switch (c) {
case ENQ: if (sendbark()) {
SM_ERROR;
} else {
SM_PROCEED(recv_req);
}
break;
case CAN: Syslog('+', "Remote refused to accept request");
SM_PROCEED(recv_req);
break;
case 'C':
case NAK: PUTCHAR(EOT);
SM_PROCEED(send_req);
break;
case SUB: SM_PROCEED(send_req);
break;
default: Syslog('s', "got '%s' waiting ENQ", printablec(c));
SM_PROCEED(send_req);
break;
}
SM_STATE(recv_req)
Syslog('s', "rxftsc RECV_REQ");
if (recvbark()) {
if (sentmail && rcvdmail) {
Syslog('+', "Consider session OK");
SM_SUCCESS;
} else {
SM_ERROR;
}
if (recvbark()) {
if (sentmail && rcvdmail) {
Syslog('+', "Consider session OK");
SM_SUCCESS;
} else {
SM_SUCCESS;
SM_ERROR;
}
} else {
SM_SUCCESS;
}
SM_END
SM_RETURN
@ -420,8 +411,18 @@ SM_STATE(scan_packet)
free(fpath);
SM_ERROR;
case 0:
case 5: Syslog('+', "accepting session");
fclose(fp);
case 5: fclose(fp);
if (nodelock(&f, mypid)) {
/*
* Lock failed, FTSC-0001 allowes only one aka, so abort session.
*/
Syslog('+', "address : %s is locked, abort", ascfnode(&f, 0x1f));
Syslog('s', "Unlink %s rc=%d", fpath, unlink(fpath));
free(fpath);
SM_ERROR;
}
Syslog('+', "accepting session");
for (tmpl = &remote; *tmpl; tmpl = &((*tmpl)->next));
(*tmpl)=(fa_list*)malloc(sizeof(fa_list));
(*tmpl)->next=NULL;
@ -432,12 +433,15 @@ SM_STATE(scan_packet)
(*tmpl)->addr->point=f.point;
(*tmpl)->addr->name=NULL;
(*tmpl)->addr->domain=NULL;
for (tmpl=&remote;*tmpl;tmpl=&((*tmpl)->next)) {
(void)nodelock((*tmpl)->addr, mypid);
/* try lock all remotes, ignore locking result */
if (!Loaded)
if (noderecord((*tmpl)->addr))
Loaded = TRUE;
Syslog('+', "address : %s",ascfnode((*tmpl)->addr,0x1f));
/*
* With the loaded flag we prevent removing the noderecord
* when the remote presents us an address we don't know about.
*/
if (!Loaded) {
if (noderecord((*tmpl)->addr))
Loaded = TRUE;
}
history.aka.zone = remote->addr->zone;

View File

@ -126,8 +126,8 @@ void die(int onsig)
}
if (sentbytes || rcvdbytes) {
total = (int)(c_end - c_start);
if (!total)
total = (int)(c_end - c_start -2);
if (total < 1)
total = 1;
Syslog('+', "Sent %lu bytes, received %lu bytes, avg %d cps", sentbytes, rcvdbytes, (sentbytes + rcvdbytes) / total);
}

View File

@ -19,7 +19,7 @@ int proc(void)\
#define SM_START(x) \
sm_state=x;\
Syslog('S', "SM (%s): Start => %s", sm_name, sm_sname[sm_state]); \
Syslog('s', "SM (%s): Start => %s", sm_name, sm_sname[sm_state]); \
while (!sm_success) switch (sm_state)\
{\
default: WriteError("Statemachine %s error: state=%d",sm_name,sm_state);\
@ -38,16 +38,16 @@ int proc(void)\
#define SM_PROCEED(x) \
if (x != sm_state) {\
Syslog('S', "SM (%s): %s => %s", sm_name, sm_sname[sm_state], sm_sname[x]);\
Syslog('s', "SM (%s): %s => %s", sm_name, sm_sname[sm_state], sm_sname[x]);\
}\
sm_state=x; break;
#define SM_SUCCESS \
Syslog('S', "SM (%s): %s => Success", sm_name, sm_sname[sm_state]);\
Syslog('s', "SM (%s): %s => Success", sm_name, sm_sname[sm_state]);\
sm_success=1; break;
#define SM_ERROR \
Syslog('S', "SM (%s): %s => Error", sm_name, sm_sname[sm_state]);\
Syslog('s', "SM (%s): %s => Error", sm_name, sm_sname[sm_state]);\
sm_success=-1; break;
#endif

View File

@ -87,7 +87,9 @@ static int txyoohoo(void);
static void fillhello(unsigned short,char*);
static int checkhello(void);
static int iscaller;
static int y_akas;
static int iscaller;
static struct _hello {
unsigned char data[128];
unsigned char crc[2];
@ -129,6 +131,7 @@ int rx_yoohoo(void)
char *pwd = NULL;
pwd = NULL;
y_akas = 0;
localcaps = LOCALCAPS;
if (localoptions & NOZMODEM) localcaps &= ~(ZED_ZAPPER|ZED_ZIPPER);
if (localoptions & NOZEDZAP) localcaps &= ~ZED_ZAPPER;
@ -139,6 +142,12 @@ int rx_yoohoo(void)
if ((rc = rxyoohoo()) == 0) {
Loaded = checkhello();
if (y_akas == 0) {
Syslog('+', "All akas busy, abort");
return MBERR_SESSION_ERROR;
}
capabilities = hello2.capabilities;
if (capabilities & WZ_FREQ)
session_flags |= SESSION_WAZOO;
@ -226,6 +235,7 @@ int tx_yoohoo(void)
unsigned short capabilities;
char *pwd;
y_akas = 0;
if (strlen(nodes.Spasswd))
pwd = xstrcpy(nodes.Spasswd);
else
@ -256,6 +266,10 @@ int tx_yoohoo(void)
session_flags &= ~SESSION_WAZOO;
}
if (y_akas == 0) {
Syslog('+', "All akas busy, abort");
return MBERR_SESSION_ERROR;
}
if ((rc == 0) && ((capabilities & LOCALCAPS) == 0)) {
Syslog('+', "No common protocols");
return MBERR_SESSION_ERROR;
@ -286,84 +300,78 @@ int tx_yoohoo(void)
SM_DECL(rxyoohoo,(char *)"rxyoohoo")
SM_STATES
sendenq,
waitchar,
getpacket,
sendnak,
sendack
sendenq,
waitchar,
getpacket,
sendnak,
sendack
SM_NAMES
(char *)"sendenq",
(char *)"waitchar",
(char *)"getpacket",
(char *)"sendnak",
(char *)"sendack"
(char *)"sendenq",
(char *)"waitchar",
(char *)"getpacket",
(char *)"sendnak",
(char *)"sendack"
SM_EDECL
int c;
int count=0;
unsigned short lcrc,rcrc;
int c, count=0;
unsigned short lcrc, rcrc;
SM_START(sendenq)
SM_STATE(sendenq)
Syslog('S', "rxyoohoo SENDENQ");
if (count++ > 12) {
Syslog('+', "Too many tries to get hello packet");
SM_ERROR;
}
PUTCHAR(ENQ);
SM_PROCEED(waitchar)
if (count++ > 12) {
Syslog('+', "Too many tries to get YooHoo hello packet");
SM_ERROR;
}
PUTCHAR(ENQ);
SM_PROCEED(waitchar)
SM_STATE(waitchar)
Syslog('S', "rxyoohoo WAITCHAR");
c=GETCHAR(10);
if (c == TIMEOUT) {
SM_PROCEED(sendenq);
} else if (c < 0) {
SM_ERROR;
} else switch (c) {
case 0x1f: SM_PROCEED(getpacket);
break;
case YOOHOO: SM_PROCEED(sendenq);
break;
default: SM_PROCEED(waitchar);
break;
}
c=GETCHAR(10);
if (c == TIMEOUT) {
SM_PROCEED(sendenq);
} else if (c < 0) {
SM_ERROR;
} else switch (c) {
case 0x1f: SM_PROCEED(getpacket);
break;
case YOOHOO: SM_PROCEED(sendenq);
break;
default: SM_PROCEED(waitchar);
break;
}
SM_STATE(getpacket)
Syslog('S', "rxyoohoo GETPACKET");
GET((char*)&hello, sizeof(hello), 30);
if (STATUS) {
SM_ERROR;
}
GET((char*)&hello, sizeof(hello), 30);
if (STATUS) {
SM_ERROR;
}
lcrc = crc16xmodem((char*)hello.data, sizeof(hello.data));
rcrc = (hello.crc[0] << 8) + hello.crc[1];
if (lcrc != rcrc) {
Syslog('+',"crc does not match in hello packet: %04xh/%04xh", rcrc,lcrc);
SM_PROCEED(sendnak);
} else {
SM_PROCEED(sendack);
}
lcrc = crc16xmodem((char*)hello.data, sizeof(hello.data));
rcrc = (hello.crc[0] << 8) + hello.crc[1];
if (lcrc != rcrc) {
Syslog('+',"crc does not match in YooHoo hello packet: %04xh/%04xh", rcrc,lcrc);
SM_PROCEED(sendnak);
} else {
SM_PROCEED(sendack);
}
SM_STATE(sendnak)
Syslog('S', "rxyoohoo SENDNAK");
if (count++ > 9) {
Syslog('+', "Too many tries to get hello packet");
SM_ERROR;
}
PUTCHAR('?');
SM_PROCEED(waitchar);
if (count++ > 9) {
Syslog('+', "Too many tries to get YooHoo hello packet");
SM_ERROR;
}
PUTCHAR('?');
SM_PROCEED(waitchar);
SM_STATE(sendack)
Syslog('S', "rxyoohoo SENDACK");
PUTCHAR(ACK);
SM_SUCCESS;
PUTCHAR(ACK);
SM_SUCCESS;
SM_END
SM_RETURN
@ -372,268 +380,269 @@ SM_RETURN
SM_DECL(txyoohoo,(char *)"txyoohoo")
SM_STATES
sendyoohoo,
waitenq,
sendpkt,
waitchar
sendyoohoo,
waitenq,
sendpkt,
waitchar
SM_NAMES
(char *)"sendyoohoo",
(char *)"waitenq",
(char *)"sendpkt",
(char *)"waitchar"
(char *)"sendyoohoo",
(char *)"waitenq",
(char *)"sendpkt",
(char *)"waitchar"
SM_EDECL
int c;
int count=0;
int startstate;
unsigned short lcrc;
int c, count = 0, startstate;
unsigned short lcrc;
if (iscaller)
startstate = sendpkt;
else
startstate = sendyoohoo;
if (iscaller)
startstate = sendpkt;
else
startstate = sendyoohoo;
lcrc = crc16xmodem((char*)hello.data, sizeof(hello.data));
hello.crc[0] = lcrc >> 8;
hello.crc[1] = lcrc & 0xff;
Syslog('S', "txyoohoo INIT");
lcrc = crc16xmodem((char*)hello.data, sizeof(hello.data));
hello.crc[0] = lcrc >> 8;
hello.crc[1] = lcrc & 0xff;
SM_START(startstate)
SM_STATE(sendyoohoo)
Syslog('S', "txyoohoo SENDYOOHOO");
PUTCHAR(YOOHOO);
SM_PROCEED(waitenq);
PUTCHAR(YOOHOO);
SM_PROCEED(waitenq);
SM_STATE(waitenq)
Syslog('S', "txyoohoo WAITENQ");
c=GETCHAR(10);
if (c == TIMEOUT) {
if (count++ > 9) {
Syslog('+', "Timeout waiting ENQ");
SM_ERROR;
} else {
SM_PROCEED(sendyoohoo);
}
} else if (c < 0) {
SM_ERROR;
} else switch (c) {
case ENQ: SM_PROCEED(sendpkt);
case YOOHOO: SM_PROCEED(waitenq);
default: Syslog('+',"Got '%s' waiting hello ACK", printablec(c));
SM_PROCEED(waitchar);
break;
c=GETCHAR(10);
if (c == TIMEOUT) {
if (count++ > 9) {
Syslog('+', "Timeout waiting ENQ");
SM_ERROR;
} else {
SM_PROCEED(sendyoohoo);
}
} else if (c < 0) {
SM_ERROR;
} else switch (c) {
case ENQ: SM_PROCEED(sendpkt);
case YOOHOO: SM_PROCEED(waitenq);
default: Syslog('+',"Got '%s' waiting hello ACK", printablec(c));
SM_PROCEED(waitchar);
break;
}
SM_STATE(sendpkt)
Syslog('S', "txyoohoo SENDPKT");
if (count++ > 9) {
Syslog('+', "Too many tries to send hello packet");
SM_ERROR;
}
if (count++ > 9) {
Syslog('+', "Too many tries to send YooHoo hello packet");
SM_ERROR;
}
PUTCHAR(0x1f);
PUT((char*)&hello, sizeof(hello));
if (STATUS) {
SM_ERROR;
}
SM_PROCEED(waitchar);
PUTCHAR(0x1f);
PUT((char*)&hello, sizeof(hello));
if (STATUS) {
SM_ERROR;
}
SM_PROCEED(waitchar);
SM_STATE(waitchar)
Syslog('S', "txyoohoo WAITCHAR");
c=GETCHAR(30);
if (c == TIMEOUT) {
Syslog('+', "Timeout waiting hello ACK");
SM_ERROR;
} else if (c < 0) {
SM_ERROR;
} else switch (c) {
case ACK: Syslog('S', "Handshake successfull");
SM_SUCCESS;
break;
case '?': SM_PROCEED(sendpkt);
break;
case ENQ: SM_PROCEED(sendpkt);
break;
default: SM_PROCEED(waitchar);
break;
}
c=GETCHAR(30);
if (c == TIMEOUT) {
Syslog('+', "Timeout waiting hello ACK");
SM_ERROR;
} else if (c < 0) {
SM_ERROR;
} else switch (c) {
case ACK: SM_SUCCESS;
break;
case '?': SM_PROCEED(sendpkt);
break;
case ENQ: SM_PROCEED(sendpkt);
break;
default: SM_PROCEED(waitchar);
break;
}
SM_END
SM_RETURN
void fillhello(unsigned short capabilities, char *password)
{
faddr *best;
unsigned short majver, minver;
faddr *best;
unsigned short majver, minver;
Syslog('S',"fillhello(0x%04hx)",capabilities);
best = bestaka_s(remote->addr);
sscanf(VERSION,"%hd.%hd", &majver, &minver);
memset(&hello, 0, sizeof(hello));
best = bestaka_s(remote->addr);
hello.data[0] = 'o'; /* signal */
hello.data[2] = 1; /* hello-version */
hello.data[4] = (PRODCODE & 0x00ff); /* product code */
hello.data[5] = (PRODCODE & 0xff00) >> 8; /* product code */
hello.data[6] = (VERSION_MAJOR & 0x00ff); /* prod-ver-major */
hello.data[7] = (VERSION_MAJOR & 0xff00) >> 8; /* prod-ver-major */
hello.data[8] = (VERSION_MINOR & 0x00ff); /* prod-ver-minor */
hello.data[9] = (VERSION_MINOR & 0xff00) >> 8; /* prod-ver-minor */
strncpy((char*)hello.data+10, name?name:"Unavailable",59); /* name */
if (name) {
hello.data[10+strlen(name)] = '\0';
strncpy((char*)hello.data+11 + strlen(name),
best->domain, 58-strlen(name)); /* domain */
} else
strncpy((char*)hello.data + 22, best->domain, 47); /* domain */
strncpy((char*)hello.data+70, CFG.sysop_name,19); /* sysop */
hello.data[90] = best->zone&0xff; /* zone */
hello.data[91] = best->zone>>8; /* zone */
hello.data[92] = best->net&0xff; /* net */
hello.data[93] = best->net>>8; /* net */
hello.data[94] = best->node&0xff; /* node */
hello.data[95] = best->node>>8; /* node */
hello.data[96] = best->point&0xff; /* point */
hello.data[97] = best->point>>8; /* point */
sscanf(VERSION,"%hd.%hd", &majver, &minver);
memset(&hello, 0, sizeof(hello));
hello.data[0] = 'o'; /* signal */
hello.data[2] = 1; /* hello-version */
hello.data[4] = (PRODCODE & 0x00ff); /* product code */
hello.data[5] = (PRODCODE & 0xff00) >> 8; /* product code */
hello.data[6] = (VERSION_MAJOR & 0x00ff); /* prod-ver-major */
hello.data[7] = (VERSION_MAJOR & 0xff00) >> 8; /* prod-ver-major */
hello.data[8] = (VERSION_MINOR & 0x00ff); /* prod-ver-minor */
hello.data[9] = (VERSION_MINOR & 0xff00) >> 8; /* prod-ver-minor */
strncpy((char*)hello.data+10, name?name:"Unavailable",59); /* name */
if (name) {
hello.data[10+strlen(name)] = '\0';
strncpy((char*)hello.data+11 + strlen(name),
best->domain, 58-strlen(name)); /* domain */
} else
strncpy((char*)hello.data + 22, best->domain, 47); /* domain */
strncpy((char*)hello.data+70, CFG.sysop_name,19); /* sysop */
hello.data[90] = best->zone&0xff; /* zone */
hello.data[91] = best->zone>>8; /* zone */
hello.data[92] = best->net&0xff; /* net */
hello.data[93] = best->net>>8; /* net */
hello.data[94] = best->node&0xff; /* node */
hello.data[95] = best->node>>8; /* node */
hello.data[96] = best->point&0xff; /* point */
hello.data[97] = best->point>>8; /* point */
if (password)
strncpy((char*)hello.data + 98, password, 8);
if (password)
strncpy((char*)hello.data + 98, password, 8);
hello.data[114] = capabilities & 0xff; /* capabilities */
hello.data[115] = capabilities >> 8; /* capabilities */
tidy_faddr(best);
Syslog('S',"filled hello \"%s\"",printable((char*)hello.data,128));
hello.data[114] = capabilities & 0xff; /* capabilities */
hello.data[115] = capabilities >> 8; /* capabilities */
tidy_faddr(best);
}
int checkhello(void)
{
unsigned short i, majver = 0, minver = 0;
fa_list **tmpl,*tmpn;
faddr remaddr;
char *prodnm, *q;
int loaded = FALSE;
unsigned short i, majver = 0, minver = 0;
fa_list **tmpl, *tmpa;
faddr remaddr;
char *prodnm, *q;
int loaded = FALSE;
Syslog('S',"check hello \"%s\"",printable((char*)hello.data,128));
Syslog('s',"check hello \"%s\"",printable((char*)hello.data,128));
hello2 = gethello2(hello.data);
hello2 = gethello2(hello.data);
if ((hello2.signal != 0x6f) || (hello2.hello_version != 0x01)) {
Syslog('+', "Got \"%s\" instead of \"o\\000\\001\000\"", printable((char*)hello.data,3));
}
if ((hello2.signal != 0x6f) ||
(hello2.hello_version != 0x01)) {
Syslog('+', "Got \"%s\" instead of \"o\\000\\001\000\"", printable((char*)hello.data,3));
prodnm = xstrcpy((char *)"<unknown program>");
for (i = 0; ftscprod[i].name; i++) {
if (ftscprod[i].code == hello2.product) {
free(prodnm);
prodnm = xstrcpy(ftscprod[i].name);
majver = hello2.product_maj;
minver = hello2.product_min;
break;
}
}
prodnm = xstrcpy((char *)"<unknown program>");
for (i = 0; ftscprod[i].name; i++)
if (ftscprod[i].code == hello2.product) {
free(prodnm);
prodnm = xstrcpy(ftscprod[i].name);
majver = hello2.product_maj;
minver = hello2.product_min;
break;
}
remaddr.zone = hello2.my_zone;
remaddr.net = hello2.my_net;
remaddr.node = hello2.my_node;
remaddr.point = hello2.my_point;
remaddr.name = NULL;
remaddr.zone = hello2.my_zone;
remaddr.net = hello2.my_net;
remaddr.node = hello2.my_node;
remaddr.point = hello2.my_point;
remaddr.name = NULL;
remaddr.domain = NULL;
if (hello2.my_name[0])
remaddr.domain = hello2.my_name + (strlen(hello2.my_name)) + 1;
if (remaddr.domain[0]) {
if ((q = strchr(remaddr.domain, '.')))
*q = '\0';
} else {
remaddr.domain = NULL;
if (hello2.my_name[0])
remaddr.domain = hello2.my_name + (strlen(hello2.my_name)) + 1;
if (remaddr.domain[0]) {
if ((q = strchr(remaddr.domain, '.')))
*q = '\0';
}
if (remote)
Syslog('s',"Remote known address: %s",ascfnode(remote->addr,0x1f));
for (tmpl = &remote; *tmpl; tmpl = &((*tmpl)->next));
if ((remote == NULL) || (metric(remote->addr, &remaddr) != 0)) {
(*tmpl) = (fa_list*)malloc(sizeof(fa_list));
(*tmpl)->next = NULL;
(*tmpl)->addr = (faddr*)malloc(sizeof(faddr));
(*tmpl)->addr->zone = remaddr.zone;
(*tmpl)->addr->net = remaddr.net;
(*tmpl)->addr->node = remaddr.node;
(*tmpl)->addr->point = remaddr.point;
(*tmpl)->addr->domain = xstrcpy(remaddr.domain);
(*tmpl)->addr->name = NULL; /* Added 15-Dec-1998 */
} else {
tmpl=&remote;
Syslog('s',"Using single remote address");
}
tmpl = &remote;
while (*tmpl) {
if (nodelock((*tmpl)->addr, mypid)) {
Syslog('+', " address: %s is locked, removed from aka list",ascfnode((*tmpl)->addr,0x1f));
tmpa = *tmpl;
*tmpl = (*tmpl)->next;
tidy_faddr(tmpa->addr);
free(tmpa);
} else {
remaddr.domain = NULL;
Syslog('+', " address: %s",ascfnode((*tmpl)->addr,0x1f));
y_akas++;
/*
* With the loaded flag we prevent removing the noderecord
* when the remote presents us an address we don't know about.
*/
if (!Loaded) {
if (noderecord((*tmpl)->addr))
Loaded = TRUE;
}
tmpl = &((*tmpl)->next);
}
if (remote)
Syslog('S',"Remote known address: %s",ascfnode(remote->addr,0x1f));
}
for (tmpl = &remote; *tmpl; tmpl = &((*tmpl)->next));
if ((remote == NULL) || (metric(remote->addr, &remaddr) != 0)) {
(*tmpl) = (fa_list*)malloc(sizeof(fa_list));
(*tmpl)->next = NULL;
(*tmpl)->addr = (faddr*)malloc(sizeof(faddr));
(*tmpl)->addr->zone = remaddr.zone;
(*tmpl)->addr->net = remaddr.net;
(*tmpl)->addr->node = remaddr.node;
(*tmpl)->addr->point = remaddr.point;
(*tmpl)->addr->domain = xstrcpy(remaddr.domain);
(*tmpl)->addr->name = NULL; /* Added 15-Dec-1998 */
} else {
tmpl=&remote;
Syslog('S',"Using single remote address");
}
for (tmpn = remote; tmpn; tmpn = tmpn->next) {
(void)nodelock(tmpn->addr, mypid);
/*
* lock all remotes, ignore locking result
*/
if (!loaded)
if (noderecord(tmpn->addr))
loaded = TRUE;
}
Syslog('+', " address: %s",ascfnode(remote->addr,0x1f));
if (y_akas) { /* Only set if we have aka's left */
history.aka.zone = remote->addr->zone;
history.aka.net = remote->addr->net;
history.aka.node = remote->addr->node;
history.aka.point = remote->addr->point;
Syslog('S', "password: %s",(char*)hello2.my_password);
if (hello2.product < 0x0100)
Syslog('+', " uses: %s [%02X] version %d.%d", prodnm, hello2.product, majver, minver);
else
Syslog('+', " uses: %s [%04X] version %d.%d", prodnm, hello2.product, majver, minver);
Syslog('+', " system: %s",(char*)hello2.my_name);
strncpy(history.system_name, hello2.my_name, 35);
Syslog('+', " sysop: %s",(char*)hello2.sysop);
strncpy(history.sysop, hello2.sysop, 35);
sprintf(history.location, "Somewhere");
}
free(prodnm);
return loaded;
if (hello2.product < 0x0100)
Syslog('+', " uses: %s [%02X] version %d.%d", prodnm, hello2.product, majver, minver);
else
Syslog('+', " uses: %s [%04X] version %d.%d", prodnm, hello2.product, majver, minver);
Syslog('+', " system: %s",(char*)hello2.my_name);
strncpy(history.system_name, hello2.my_name, 35);
Syslog('+', " sysop: %s",(char*)hello2.sysop);
strncpy(history.sysop, hello2.sysop, 35);
sprintf(history.location, "Somewhere");
free(prodnm);
return loaded;
}
Hello gethello2(unsigned char Hellop[])
{
int i;
Hello p;
int i;
Hello p;
p.signal=Hellop[0]+(Hellop[1]<<8);
p.hello_version=Hellop[2]+(Hellop[3]<<8);
p.product=Hellop[4]+(Hellop[5]<<8);
p.product_maj=Hellop[6]+(Hellop[7]<<8);
p.product_min=Hellop[8]+(Hellop[9]<<8);
for (i=0;i<60;i++)
p.my_name[i]=Hellop[10+i];
for (i=0;i<20;i++)
p.sysop[i]=Hellop[70+i];
p.my_zone=Hellop[90]+(Hellop[91]<<8);
p.my_net=Hellop[92]+(Hellop[93]<<8);
p.my_node=Hellop[94]+(Hellop[95]<<8);
p.my_point=Hellop[96]+(Hellop[97]<<8);
for (i=0;i<8;i++)
p.my_password[i]=Hellop[98+i];
for (i=0;i<8;i++)
p.reserved2[i]=Hellop[106+i];
p.capabilities=Hellop[114]+(Hellop[115]<<8);
for (i=0;i<12;i++)
p.reserved3[i]=Hellop[116+i];
p.signal=Hellop[0]+(Hellop[1]<<8);
p.hello_version=Hellop[2]+(Hellop[3]<<8);
p.product=Hellop[4]+(Hellop[5]<<8);
p.product_maj=Hellop[6]+(Hellop[7]<<8);
p.product_min=Hellop[8]+(Hellop[9]<<8);
for (i=0;i<60;i++)
p.my_name[i]=Hellop[10+i];
for (i=0;i<20;i++)
p.sysop[i]=Hellop[70+i];
p.my_zone=Hellop[90]+(Hellop[91]<<8);
p.my_net=Hellop[92]+(Hellop[93]<<8);
p.my_node=Hellop[94]+(Hellop[95]<<8);
p.my_point=Hellop[96]+(Hellop[97]<<8);
for (i=0;i<8;i++)
p.my_password[i]=Hellop[98+i];
for (i=0;i<8;i++)
p.reserved2[i]=Hellop[106+i];
p.capabilities=Hellop[114]+(Hellop[115]<<8);
for (i=0;i<12;i++)
p.reserved3[i]=Hellop[116+i];
return p;
return p;
}

View File

@ -89,7 +89,7 @@ static int alias_db_init(void)
while (fcntl(fileno(afp), F_SETLK, &txflock) != 0) {
if (tries > 4)
Syslog('+', "Alias database locked %d errno=%d %s", tries +1, errno, strerror(errno));
usleep(250000);
msleep(250);
if (++tries >= 60) {
fclose(afp);
afp = NULL;

View File

@ -4,7 +4,7 @@
* Purpose ...............: Announce new files and FileFind
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -127,7 +127,7 @@ void Uploads()
i++;
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
if ((area.Available) && strlen(area.NewGroup)) {
@ -321,7 +321,7 @@ long Report(gr_list *ta, long filepos)
if ((!strcmp(T_File.Echo, ta->echo)) && (!strcmp(T_File.Group, ta->group))) {
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
/*
* Report one newfile, first line.

View File

@ -4,7 +4,7 @@
* Purpose ...............: Announce new files and FileFind
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -117,7 +117,7 @@ void ScanArea(ff_list **ffl)
}
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
if (Msg_ReadHeader(Number) == TRUE) {
if (((!strcasecmp(Msg.To, "allfix")) || (!strcasecmp(Msg.To, "filefind"))) && (!Msg.Received)) {
@ -288,7 +288,7 @@ void ScanFiles(ff_list *tmp)
Nopper();
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
if (!do_quiet) {
printf("%6lu / %6lu", areanr, found);

View File

@ -4,7 +4,7 @@
* Purpose: File Database Maintenance - Build index for request processor
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -478,7 +478,7 @@ void ReqIndex(void)
*/
x++;
if (CFG.slow_util && do_quiet && ((x % 3) == 0))
usleep(1);
msleep(1);
for (z = 0; z <= 25; z++) {
if (strlen(file.Desc[z])) {
@ -658,7 +658,7 @@ void HtmlIndex(char *Lang)
TotalHtml++;
aTotal++;
if (CFG.slow_util && do_quiet && ((x % 3) == 0))
usleep(1);
msleep(1);
MacroVars("efghijklm", "ddsssssds", 0, 0, "", "", "", "", "", 0, "");
MacroVars("e", "d", aTotal);

View File

@ -152,7 +152,7 @@ void Marker(void)
* Release system resources when running in the background
*/
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
if (do_quiet)
return;

View File

@ -4,7 +4,7 @@
* Purpose ...............: Nodelist Compiler
*
*****************************************************************************
* Copyright (C) 1997-2003
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -374,10 +374,10 @@ int compile(char *nlname, unsigned short zo, unsigned short ne, unsigned short n
if (CFG.slow_util && do_quiet) {
if (zo) {
usleep(1);
msleep(1);
} else {
if ((lineno % 40) == 0)
usleep(1);
msleep(1);
}
}

View File

@ -4,7 +4,7 @@
* Purpose ...............: Message Base Maintenance
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -475,7 +475,7 @@ void KillArea(char *Path, char *Name, int DaysOld, int MaxMsgs, long Areanr)
do {
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
if ((!do_quiet) && ((Counter % 10L) == 0)) {
printf("%6lu / %6lu\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b", Counter, TotalMsgs);
@ -587,7 +587,7 @@ void PackArea(char *Path, long Areanr)
}
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}

View File

@ -4,7 +4,7 @@
* Purpose ...............: AreaMgr and FileMgr utilities.
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -589,7 +589,7 @@ int Areas(void)
for (tmp = alist; tmp; tmp = tmp->next) {
fseek(fp, msgshdr.hdrsize, SEEK_SET);
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
while (fread(&msgs, msgshdr.recsize, 1, fp) == 1) {
if (msgs.Active && !strcmp(msgs.Group, mgroup.Name) && !strcmp(msgs.Tag, tmp->Name))
tmp->IsPresent = TRUE;
@ -639,7 +639,7 @@ int Areas(void)
}
cmd = xstrcat(cmd, tmp->Name);
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
}
@ -658,7 +658,7 @@ int Areas(void)
fseek(fp, msgshdr.hdrsize, SEEK_SET);
Syslog('m', "Delete %s", tmp->Name);
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
while (fread(&msgs, msgshdr.recsize, 1, fp) == 1) {
if (msgs.Active && !strcmp(msgs.Group, mgroup.Name) && !strcmp(msgs.Tag, tmp->Name)) {
fseek(fp, - msgshdr.recsize, SEEK_CUR);
@ -828,7 +828,7 @@ int Areas(void)
for (tmp = alist; tmp; tmp = tmp->next) {
fseek(fp, tichdr.hdrsize, SEEK_SET);
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
while (fread(&tic, tichdr.recsize, 1, fp) == 1) {
if (tic.Active && !strcmp(tic.Group, fgroup.Name) && !strcmp(tic.Name, tmp->Name))
tmp->IsPresent = TRUE;
@ -886,7 +886,7 @@ int Areas(void)
}
cmd = xstrcat(cmd, tmp->Name);
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
}
@ -907,7 +907,7 @@ int Areas(void)
fseek(fp, tichdr.hdrsize, SEEK_SET);
Syslog('f', "Delete %s", tmp->Name);
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
while (fread(&tic, tichdr.recsize, 1, fp) == 1) {
if (tic.Active && !strcmp(tic.Group, fgroup.Name) && !strcmp(tic.Name, tmp->Name)) {
fseek(fp, - tichdr.recsize, SEEK_CUR);

View File

@ -4,7 +4,7 @@
* Purpose ...............: Statistic rollover util.
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -65,7 +65,7 @@ void RollWeek(statcnt *S)
S->tweek = 0L;
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
@ -158,7 +158,7 @@ void Rollover()
nodes.MailSent.month[Miy] = 0;
nodes.MailRcvd.month[Miy] = 0;
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
fseek(fp, - nodeshdr.recsize, SEEK_CUR);
fwrite(&nodes, nodeshdr.recsize, 1, fp);
@ -199,7 +199,7 @@ void Rollover()
msgs.Received.month[Miy] = 0;
msgs.Posted.month[Miy] = 0;
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
fseek(fp, - msgshdr.recsize, SEEK_CUR);
fwrite(&msgs, msgshdr.recsize, 1, fp);
@ -239,7 +239,7 @@ void Rollover()
mgroup.MsgsRcvd.month[Miy] = 0;
mgroup.MsgsSent.month[Miy] = 0;
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
fseek(fp, - mgrouphdr.recsize, SEEK_CUR);
fwrite(&mgroup, mgrouphdr.recsize, 1, fp);
@ -278,7 +278,7 @@ void Rollover()
tic.Files.month[Miy] = 0;
tic.KBytes.month[Miy] = 0;
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
fseek(fp, - tichdr.recsize, SEEK_CUR);
fwrite(&tic, tichdr.recsize, 1, fp);
@ -318,7 +318,7 @@ void Rollover()
fgroup.Files.month[Miy] = 0;
fgroup.KBytes.month[Miy] = 0;
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
fseek(fp, - fgrouphdr.recsize, SEEK_CUR);
fwrite(&fgroup, fgrouphdr.recsize, 1, fp);
@ -354,7 +354,7 @@ void Rollover()
if (do_month) {
hatch.Hatched.month[Miy] = 0;
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
fseek(fp, - hatchhdr.recsize, SEEK_CUR);
fwrite(&hatch, hatchhdr.recsize, 1, fp);

View File

@ -4,7 +4,7 @@
* Purpose ...............: Scan for outgoing mail.
*
*****************************************************************************
* Copyright (C) 1997-2003
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -182,7 +182,7 @@ void ScanFull()
do {
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
if (((Number % 10) == 0) && (!do_quiet)) {
printf("%6lu\b\b\b\b\b\b", Number);
@ -245,7 +245,7 @@ void ScanFull()
do {
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
if (((Number % 10) == 0) && (!do_quiet)) {
printf("%6lu\b\b\b\b\b\b", Number);

View File

@ -464,7 +464,7 @@ int get_xover(char *grpname, long startnr, long endnr, List **art)
fill_artlist(art, ptr, nr, dupe);
free(p);
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
}
}

View File

@ -4,7 +4,7 @@
* Purpose ...............: Process .tic files
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -169,7 +169,7 @@ int LoadTic(char *inb, char *tfn)
fa_list *sbl = NULL;
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
memset(&RealName, 0, sizeof(RealName));
memset(&TIC, 0, sizeof(TIC));

View File

@ -4,7 +4,7 @@
* Purpose ...............: Toss a single *.pkt file
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -156,7 +156,7 @@ int importmsg(faddr *p_from, faddr *f, faddr *t, char *orig, char *subj, time_t
sysconnect Link;
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
memset(&Link, 0, sizeof(Link));

View File

@ -4,7 +4,7 @@
* Purpose ...............: Common utilities
*
*****************************************************************************
* Copyright (C) 1997-2003
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -514,7 +514,7 @@ int Waitchar(unsigned char *ch, int wtime)
rc = read(ttyfd, ch, 1);
if (rc == 1)
return rc;
usleep(10000);
msleep(10);
}
return rc;
}
@ -862,6 +862,42 @@ void mvprintw(int y, int x, const char *format, ...)
/*
* * Milliseconds timer, returns 0 on success.
* */
int msleep(int msecs)
{
int rc;
struct timespec req, rem;
rem.tv_sec = 0;
rem.tv_nsec = 0;
req.tv_sec = msecs / 1000;
req.tv_nsec = (msecs % 1000) * 1000000;
while (TRUE) {
rc = nanosleep(&req, &rem);
if (rc == 0)
break;
if ((errno == EINVAL) || (errno == EFAULT)) {
Syslog('?', "$msleep(%d)", msecs);
break;
}
/*
* Error was EINTR, run timer again to complete.
*/
req.tv_sec = rem.tv_sec;
req.tv_nsec = rem.tv_nsec;
rem.tv_sec = 0;
rem.tv_nsec = 0;
}
return rc;
}
/*
* Signal handler signal names.
*/

View File

@ -86,7 +86,7 @@ void colour(int, int);
void clear(void);
void locate(int, int);
void mvprintw(int, int, const char *, ...);
int msleep(int);
#endif

View File

@ -4,7 +4,7 @@
* Purpose ...............: Utilities
*
*****************************************************************************
* Copyright (C) 1997-2001
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -531,9 +531,9 @@ void working(int txno, int y, int x)
for (i = 1; i <= 5; i++) {
putchar(7);
fflush(stdout);
usleep(150000);
msleep(150);
}
usleep(550000);
msleep(550);
break;
case 3: mvprintw(4, columns - 14, (char *)"Form inserted");
putchar(7);

View File

@ -4,7 +4,7 @@
* Purpose ...............: Creates allfiles listings
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -350,7 +350,7 @@ void Masterlist()
*/
x++;
if (CFG.slow_util && do_quiet && ((x % 3) == 0))
usleep(1);
msleep(1);
AllFiles++;
AllAreaFiles++;
AllAreaBytes += file.Size;

View File

@ -4,7 +4,7 @@
* Purpose ...............: Change BBS status
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -153,7 +153,6 @@ int main(int argc, char **argv)
pw = getpwuid(getuid());
InitClient(pw->pw_name, (char *)"mbstat", CFG.location, CFG.logfile,
CFG.util_loglevel, CFG.error_log, CFG.mgrlog, CFG.debuglog);
usleep(1);
Syslog(' ', " ");
Syslog(' ', "MBSTAT v%s", VERSION);
@ -186,7 +185,6 @@ int main(int argc, char **argv)
if (!(do_open || do_close || do_wait || do_sema))
Help();
usleep(1);
die(MBERR_OK);
return 0;
}

View File

@ -4,7 +4,7 @@
* Purpose ...............: User Pack Util
*
*****************************************************************************
* Copyright (C) 1997-2003
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -255,7 +255,7 @@ void UserPack(int days, int level, int pack)
fwrite(&usr, sizeof(usr), 1, fout);
memset(&usr, 0, sizeof(usr));
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
Nopper();
}
fclose(fin);
@ -300,7 +300,7 @@ void UserPack(int days, int level, int pack)
fwrite(&usr, sizeof(usr), 1, fout);
}
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
}
Syslog('+', "Marked %d users to delete", delete);
}
@ -314,7 +314,7 @@ void UserPack(int days, int level, int pack)
fseek(fout, sizeof(usrhdr), SEEK_SET);
while (fread(&usr, sizeof(usr), 1, fout) == 1) {
if (CFG.slow_util && do_quiet)
usleep(1);
msleep(1);
Nopper();
if (usr.Deleted) {

View File

@ -4,7 +4,7 @@
* Purpose ...............: Offline Reader
*
*****************************************************************************
* Copyright (C) 1997-2003
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -2693,7 +2693,7 @@ unsigned long QWK_PackArea(unsigned long ulLast, long Area)
fwrite(&Qwk, sizeof(Qwk), 1, fdm);
fseek(fdm, 0L, SEEK_END);
if ((Total % 16L) == 0L)
usleep(1);
msleep(1);
}
if (BarWidth != (unsigned short)((Total * 61L) / TotalPack)) {
@ -2937,7 +2937,7 @@ unsigned long ASCII_PackArea(unsigned long ulLast, long Area)
}
if ((Total % 16L) == 0L)
usleep(1);
msleep(1);
if (BarWidth != (unsigned short)((Total * 61L) / TotalPack)) {
BarWidth = (unsigned short)((Total * 61L) / TotalPack);

View File

@ -4,7 +4,7 @@
* Purpose ...............: Screen functions for setup.
*
*****************************************************************************
* Copyright (C) 1997-2002
* Copyright (C) 1997-2004
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
@ -227,9 +227,9 @@ void working(int txno, int y, int x)
for (i = 1; i <= 5; i++) {
fputc(7, stdout);
fflush(stdout);
usleep(150000);
msleep(150);
}
usleep(550000);
msleep(550);
break;
case 3: mvprintw(4, 66, (char *)"Form inserted");
fputc(7, stdout);

View File

@ -3,8 +3,8 @@
include ../Makefile.global
OTHER = Makefile README maint midnight weekly monthly installinit.sh rc rc.shutdown \
mbse.start mbse.stop bbsdoor.sh rundoor.sh init.Debian init.RedHat \
OTHER = Makefile README maint midnight weekly monthly installinit.sh setup.mbse \
bbsdoor.sh rundoor.sh init.Debian init.RedHat init.FreeBSD init.NetBSD \
init.Slackware init.SuSE init.Gentoo hatch editor.in bbsjoerc bbsjmacsrc
####################################################################################################