...
 
Commits (2)
  • Rob Swindell's avatar
    Spinning cursor over the hardware cursor - disabled. · 2411b2d7
    Rob Swindell authored
    Define SPINNING_CURSOR_OVER_HARDWARE_CURSOR to enable this experimental
    feature. I'm not sure I like it better than the way the spinning cursor
    has been displayed for decades (to the left of the hardware cursor).
    2411b2d7
  • Rob Swindell's avatar
    Improve file copy (fcopy()) performance by more than an order of magnitude. · 914790f5
    Rob Swindell authored
    Using a 256KB read buffer for copying files (rather than one byte at a time).
    Apparently calling fread() is not the same as a bunch of calls to fgetc()
    after all. Or maybe it was the many calls to fputc() being replaced with
    fwrite(). Or maybe it was both. Anyway, decreased the time to copy a 1GB
    file from and to a Samba share over a Gb Ethernet network from 13 minutes
    to less than a minute. This matters when sbbs is backing up your data/mail
    base and the files are big. The mail base is locked while being backed up
    and the longer it takes to back up, the longer the mail base is locked and
    no mail can be received, read or sent during that time.
    914790f5
......@@ -61,19 +61,30 @@ char sbbs_t::getkey(long mode)
mode|=(useron.misc&SPIN);
lncntr=0;
timeout=time(NULL);
#if !defined SPINNING_CURSOR_OVER_HARDWARE_CURSOR
if(mode&K_SPIN)
outchar(' ');
#endif
do {
if(sys_status&SS_ABORT) {
if(mode&K_SPIN) /* back space once if on spinning cursor */
if(mode&K_SPIN) {
#if defined SPINNING_CURSOR_OVER_HARDWARE_CURSOR
bputs(" \b");
#else
backspace();
#endif
}
return(0);
}
if(mode&K_SPIN) {
#if !defined SPINNING_CURSOR_OVER_HARDWARE_CURSOR
outchar('\b');
#endif
outchar(cursor[(c++) % cursors]);
#if defined SPINNING_CURSOR_OVER_HARDWARE_CURSOR
outchar('\b');
#endif
}
ch=inkey(mode,mode&K_SPIN ? 200:1000);
if(sys_status&SS_ABORT)
......@@ -86,8 +97,13 @@ char sbbs_t::getkey(long mode)
continue;
if(mode&K_NOEXASC && ch&0x80)
continue;
if(mode&K_SPIN)
if(mode&K_SPIN) {
#if defined SPINNING_CURSOR_OVER_HARDWARE_CURSOR
bputs(" \b");
#else
backspace();
#endif
}
if(mode&K_COLD && ch>' ' && useron.misc&COLDKEYS) {
if(mode&K_UPPER)
outchar(toupper(ch));
......
......@@ -150,7 +150,7 @@ BOOL fmutex(const char* fname, const char* text, long max_age)
BOOL fcopy(const char* src, const char* dest)
{
int ch;
uint8_t buf[256 * 1024];
ulong count=0;
FILE* in;
FILE* out;
......@@ -164,14 +164,14 @@ BOOL fcopy(const char* src, const char* dest)
}
while(!feof(in)) {
if((ch=fgetc(in))==EOF)
size_t rd = fread(buf, sizeof(uint8_t), sizeof(buf), in);
if(rd < 1)
break;
if(fputc(ch,out)==EOF) {
success=FALSE;
if(fwrite(buf, sizeof(uint8_t), rd, out) != rd) {
success = FALSE;
break;
}
if(((count++)%(32*1024))==0)
MAYBE_YIELD();
MAYBE_YIELD();
}
fclose(in);
......