From: Doug.Hilton%p1.f226.n129.z1@fidonet.org (Doug Hilton) Subject: Re: BBS Development for Linux Date: Tue, 15 Jun 1993 21:52:00 -0500
KR>I have been using xbbs for quite a while now, but it doesn't have
KR>very good handling for downloading files (you have to manually
KR>enter file names into a special index so people can download them).
KR>.....
KR>What kind of features are most bbs operators looking for in a bbs
KR>package? I am most interested in having a basic menu-driven user...
I believe that all a linux bbs really needs is:
a. Handles login and new users, can be used with BinkleyTerm.
b. Runs from some kind of interpreted program, for easy mods.
c. Has hotkeys enabled, to allow use of cursor keys.
d. Can exec anything.
I've been working on a shell script program, but perl sounds like it would be
a bit better suited to the task, if it can run as root.
I would be perfectly comfortable with using perl to handle the bbs
as long as one can embed ANSI escape sequences directly into the text
( I have them all memorized ).
Maybe it would read in uid and password, then su to the account, if
it is a listed user, or create an account otherwise. All users should have a
common home to reduce disk eating. Possible ten or so security levels and
maybe 26 or so flags. These could be read in from a user file and stored in
variables.
Concerning file transfers: I would suggest the elimination of upload download
ratios. They are stupid and create unnecessary problems. A simple time check
should be enough. Most users just upload junk anyways.
Suggestion for file areas: use a FILES.BBS style file.
I would suggest that any linux bbs simply use external editors, external
protocols, external everything. The FILES.BBS reader could be an external
program even. That way one could have [U]UCP as well as [Z]modem. Also, to
reduce the complexity of file transfer accounting, create a temp directory,
copy all files to be DL'd to the dir, make a list, send *, delete everything
on the list, whatever is left is an upload.
Actually, as I think about it, all that is required of a bbs for linux is a
mechanism for creating accounts for new users, and a method of spawning
programs from configurable menus, or else loading other
menus. If hotkeys are active, it would be simple to make pulldown menus, menu
bars, etc; i.e.:
// Sample menu bar, cmd1 cmd2 cmd3 .. could be read from a script.
// All code donated to GNU, for what its worth. ^[ represents ESCAPE //
int type1_menubar(cmd1,cmd2,cmd3,cmd4)
{
prevcmd=1; activecmd=1; waiting=TRUE; // Init a few things.
fflush(stdin); // Whatever. flush input.
display("^[[s^[[1;32;40m %s %s %s %s",cmd1,cmd2,cmd3,cmd4);
// save cursor, print menu bright green on black.
// colors could be configurable easily.
while (waiting) do {
display("^[[u^[[0;32;40m"); // un-save, Bright green on black
switch (prevcmd) { // Restore old inverse bar (if any).
1: display(" %s ",cmd1); break;
2: display("^[[%iC %s ",strlen(cmd1)+2,cmd2); break;
3: display("^[[%iC %s ",strlen(cmd1)+strlen(cmd2)+4,cmd3);
break;
4: etc....
}
display("^[[u^[[0;30;47m"); // Set inverse video
switch (activecmd) { // Make new inverse bar.
1: display(" %s ",cmd1); break;
2: display("^[[%iC %s ",strlen(cmd1)+2,cmd2); break;
3: display("^[[%iC %s ",strlen(cmd1)+strlen(cmd2)+4,cmd3);
break;
4: etc....
}
display("^[[1;32;40m"); // Bright green on black
readin_noecho(hotstring); // Gets what is in buffer
// hotstring should probably be parsed. Omitted in example.
switch (hotstring) {
'^[[C': // Right Arrow
'6': prevcmd=activecmd++; break; // Keypad
'^[[D': // Left Arrow
'4': prevcmd=activecmd--; break; // Keypad
'\r': waiting=FALSE; break; // Pressed Enter
}
if (activecmd>NUM_COMMANDS) { activecmd=1; } // Rollover
elseif (activecmd==0) { activecmd=NUM_COMMANDS; } // Rollback
}
return(activecmd);
}
This will work with any ANSI/bbs terminal and the linux console.
( See how easy this was? ). It makes a very nice horizontal menu that is fast
enough even at 1200 baud.
* Origin: -/\-Havok's-Bunker-/\- (1:129/226.1)