Merge pull request #4 from proboardbbs-com/REL222

Rel222
This commit is contained in:
Lawrence Stockman 2019-09-24 16:08:38 -05:00 committed by GitHub
commit 819a52e491
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
200 changed files with 188746 additions and 140 deletions

View File

@ -1186,14 +1186,14 @@ bool check_trashcan( char *username )
void show_intro()
{
char *notregstr = " [UNREGISTERED] Ä Node %d\nCopyright (c) 1990-1999 TeleGrafix Communications, Inc. All Rights Reserved\n";
char *notregstr = " [FREEWARE] Ä Node %d\nCopyright (c) 1990-2019 ProBoard Development Ninja Team. All Rights Reserved\n";
// char *notregstr = " [UNREGISTERED] Ä Node %d Ä Copyright (c) 1990,99 TeleGrafix Communications\n\n";
// char *notregstr = " [UNREGISTERED] ÄÄ Node %d ÄÄ (c) 1990-1997 Philippe Leybaert\n\n";
long checksum = 0;
int i;
for ( i = 0; i < strlen( notregstr ); i++ )
/*for ( i = 0; i < strlen( notregstr ); i++ )
{
checksum += notregstr[ i ];
}
@ -1205,7 +1205,7 @@ void show_intro()
if ( checksum != 8235 )
{
exit_proboard();
}
}*/
io << "\x1b[5n\x1b[!\r";

BIN
LOGIN.OBJ

Binary file not shown.

View File

@ -241,7 +241,7 @@ do_modem(modem_response *response)
}
tsw_centerline( 4,
"Copyright (c) 1990-1999 TeleGrafix Communications, Inc.",
"Copyright (c) 1990-2019 ProBoard Development Ninja Team",
TITLE_COLOR );
tsw_centerline( 5,

BIN
MODEM.OBJ

Binary file not shown.

Binary file not shown.

View File

@ -453,3 +453,4 @@
01-May-97 21:47:43 Sysop hung up
19-May-99 18:14:50 Fatal error: Error accessing file I:\CPP\PB\PROBOARD\CONFIG.PRO (2 - File not found)
19-May-99 18:15:01 Fatal error: Error accessing file I:\CPP\PB\PROBOARD\CONFIG.PRO (2 - File not found)
24-Sep-19 11:36:19 Fatal error: Error accessing file D:\CPP\PB\PB222\CONFIG.PRO (2 - File not found)

View File

@ -143,115 +143,115 @@
1A830H 1A854H 00025H STRISTR_TEXT STUBSEG
1A860H 1A884H 00025H STROCPY_TEXT STUBSEG
1A890H 1A8B9H 0002AH TRAIL_TEXT STUBSEG
1A8C0H 21A97H 071D8H _DATA DATA
21A98H 21A99H 00002H _CVTSEG DATA
21A9AH 21A9FH 00006H _SCNSEG DATA
21AA0H 21AA0H 00000H _CONST CONST
21AA0H 21B11H 00072H _INIT_ INITDATA
21B12H 21B12H 00000H _INITEND_ INITDATA
21B12H 21B71H 00060H _EXIT_ EXITDATA
21B72H 21B72H 00000H _EXITEND_ EXITDATA
21B72H 25A25H 03EB4H _BSS BSS
25A26H 25A26H 00000H _BSSEND BSSEND
25A30H 25AAFH 00080H _STACK STACK
25AC0H 27827H 01D68H MENU_TEXT :OVY
279B0H 281F3H 00844H CHAT_TEXT :OVY
282D0H 2A75DH 0248EH SHELL_TEXT :OVY
2AA40H 2CBE6H 021A7H LOGIN_TEXT :OVY
2CF20H 2D17EH 0025FH PBUSER_TEXT :OVY
2D1B0H 2FC28H 02A79H READMSG_TEXT :OVY
2FF20H 307EEH 008CFH MAILCHK_TEXT :OVY
308B0H 31B37H 01288H MSG_TEXT :OVY
31C20H 3279BH 00B7CH ZIP_TEXT :OVY
32860H 33DCAH 0156BH WRITEMSG_TEXT :OVY
33F90H 343F8H 00469H TOPS_TEXT :OVY
34440H 34920H 004E1H FORWARD_TEXT :OVY
34990H 35A42H 010B3H REPLYMSG_TEXT :OVY
35B50H 36116H 005C7H TIMESTAT_TEXT :OVY
361C0H 3622FH 00070H MSGDEL_TEXT :OVY
36240H 367A3H 00564H COMBINED_TEXT :OVY
36820H 37138H 00919H QUESTION_TEXT :OVY
371D0H 372D4H 00105H AKA_TEXT :OVY
372F0H 38337H 01048H QSCANMSG_TEXT :OVY
38450H 39699H 0124AH SHOWMSG_TEXT :OVY
39800H 3A892H 01093H SCANMSG_TEXT :OVY
3A9B0H 3AB96H 001E7H VERSION_TEXT :OVY
3ABE0H 3AE2FH 00250H RAWDIR_TEXT :OVY
3AE70H 3C053H 011E4H MSGED_TEXT :OVY
3C1A0H 406D6H 04537H DL_TEXT :OVY
40B60H 40C87H 00128H VIEWFILE_TEXT :OVY
40CB0H 40D0FH 00060H LASTCALL_TEXT :OVY
40D20H 40D53H 00034H DESQVIEW_TEXT :OVY
40D60H 40E12H 000B3H STACKING_TEXT :OVY
40E20H 41298H 00479H CLEANUP_TEXT :OVY
41310H 4183EH 0052FH SYSOPKEY_TEXT :OVY
418B0H 41B0DH 0025EH MSGFIND_TEXT :OVY
41B20H 41E45H 00326H BINLOG_TEXT :OVY
41E90H 422DDH 0044EH PROTOCOL_TEXT :OVY
42340H 45383H 03044H LISTFILE_TEXT :OVY
456C0H 4814DH 02A8EH UL_TEXT :OVY
484C0H 48863H 003A4H TAG_TEXT :OVY
488D0H 48DC5H 004F6H SELLANG_TEXT :OVY
48E40H 4A8DAH 01A9BH PROBOARD_TEXT :OVY
4AB30H 4B4A3H 00974H NODELIST_TEXT :OVY
4B530H 4BD0DH 007DEH ONLINE_TEXT :OVY
4BDA0H 4BF74H 001D5H MSGMOVE_TEXT :OVY
4BFA0H 4C5F9H 0065AH CDROM_TEXT :OVY
4C6B0H 4D1E6H 00B37H REGIS_TEXT :OVY
4D220H 4DD7CH 00B5DH MCHAT_TEXT :OVY
4DE70H 4F25DH 013EEH SETAREA_TEXT :OVY
4F3E0H 4F7A4H 003C5H USERED_TEXT :OVY
4F7F0H 4FCFEH 0050FH DECKEY_TEXT :OVY
4FD10H 5010BH 003FCH MUSIC_TEXT :OVY
50160H 5053EH 003DFH GIF_TEXT :OVY
505A0H 51206H 00C67H MSGEXPRT_TEXT :OVY
512D0H 51681H 003B2H HELP_TEXT :OVY
516C0H 516F5H 00036H EGA_TEXT :OVY
51700H 51964H 00265H EVENT_TEXT :OVY
51990H 5217FH 007F0H FILEAREA_TEXT :OVY
521F0H 528DBH 006ECH MSGAREA_TEXT :OVY
52920H 52C5BH 0033CH TIMELOG_TEXT :OVY
52CA0H 52D5DH 000BEH WORDWRAP_TEXT :OVY
52D70H 52FA4H 00235H SHOWANS_TEXT :OVY
52FD0H 54F2BH 01F5CH USERSET_TEXT :OVY
55140H 551FFH 000C0H USAGE_TEXT :OVY
55210H 596E9H 044DAH LOADPEX_TEXT :OVY
59BB0H 59CC8H 00119H IMAGE_TEXT :OVY
59CE0H 59F66H 00287H POSTMSG_TEXT :OVY
59FA0H 59FC7H 00028H PEXCALL_TEXT :OVY
59FD0H 5AAD1H 00B02H STRVARS_TEXT :OVY
5AB70H 5B15EH 005EFH USERWIN_TEXT :OVY
5B1E0H 5B3A2H 001C3H BULLETIN_TEXT :OVY
5B3D0H 5D36EH 01F9FH MODEM_TEXT :OVY
5D590H 5D594H 00005H EXECHECK_TEXT :OVY
5D5A0H 5DDBCH 0081DH LANGUAGE_TEXT :OVY
5DE40H 5E248H 00409H FUZZY_TEXT :OVY
5E260H 5E519H 002BAH TERMINAL_TEXT :OVY
5E550H 60967H 02418H SQUISH_TEXT :OVY
60A90H 63477H 029E8H HUDSON_TEXT :OVY
636E0H 639FCH 0031DH MSGBASE_TEXT :OVY
63A10H 64171H 00762H MARK_TEXT :OVY
641B0H 65248H 01099H RIP_TEXT :OVY
65360H 67C80H 02921H JAM_TEXT :OVY
67E10H 67FF7H 001E8H INPDATE_TEXT :OVY
68020H 68371H 00352H TAG_RW_TEXT :OVY
683C0H 6852BH 0016CH 1STCHAR_TEXT :OVY
68540H 68CA1H 00762H MSGAPI_TEXT :OVY
68D00H 6A99AH 01C9BH API_SDM_TEXT :OVY
6AAA0H 6E010H 03571H API_SQ_TEXT :OVY
6E170H 6E1BBH 0004CH SQASM_TEXT :OVY
6E1D0H 6E3CCH 001FDH CVTDATE_TEXT :OVY
6E3E0H 6E627H 00248H DATE2BIN_TEXT :OVY
6E640H 6E67DH 0003EH DOSDATE_TEXT :OVY
6E690H 6E81FH 00190H FEXIST_TEXT :OVY
6E840H 6E8E9H 000AAH FFIND_TEXT :OVY
6E900H 6E915H 00016H FLUSHA_TEXT :OVY
6E920H 6E920H 00000H MONTHS_TEXT :OVY
6E930H 6EC30H 00301H PARSENN_TEXT :OVY
6EC60H 6ED84H 00125H QKSORT_TEXT :OVY
6ED90H 6EE9CH 0010DH STRISTR_TEXT :OVY
6EEB0H 6EEECH 0003DH STROCPY_TEXT :OVY
6EF00H 6EF97H 00098H TRAIL_TEXT :OVY
1A8C0H 21A09H 0714AH _DATA DATA
21A0AH 21A0BH 00002H _CVTSEG DATA
21A0CH 21A11H 00006H _SCNSEG DATA
21A12H 21A12H 00000H _CONST CONST
21A12H 21A83H 00072H _INIT_ INITDATA
21A84H 21A84H 00000H _INITEND_ INITDATA
21A84H 21AE3H 00060H _EXIT_ EXITDATA
21AE4H 21AE4H 00000H _EXITEND_ EXITDATA
21AE4H 25997H 03EB4H _BSS BSS
25998H 25998H 00000H _BSSEND BSSEND
259A0H 25A1FH 00080H _STACK STACK
25A30H 27797H 01D68H MENU_TEXT :OVY
27920H 28163H 00844H CHAT_TEXT :OVY
28240H 2A6CDH 0248EH SHELL_TEXT :OVY
2A9B0H 2CB1AH 0216BH LOGIN_TEXT :OVY
2CE50H 2D0AEH 0025FH PBUSER_TEXT :OVY
2D0E0H 2FB58H 02A79H READMSG_TEXT :OVY
2FE50H 3071EH 008CFH MAILCHK_TEXT :OVY
307E0H 31A67H 01288H MSG_TEXT :OVY
31B50H 326CBH 00B7CH ZIP_TEXT :OVY
32790H 33CFAH 0156BH WRITEMSG_TEXT :OVY
33EC0H 34328H 00469H TOPS_TEXT :OVY
34370H 34850H 004E1H FORWARD_TEXT :OVY
348C0H 35972H 010B3H REPLYMSG_TEXT :OVY
35A80H 36046H 005C7H TIMESTAT_TEXT :OVY
360F0H 3615FH 00070H MSGDEL_TEXT :OVY
36170H 366D3H 00564H COMBINED_TEXT :OVY
36750H 37068H 00919H QUESTION_TEXT :OVY
37100H 37204H 00105H AKA_TEXT :OVY
37220H 38267H 01048H QSCANMSG_TEXT :OVY
38380H 395C9H 0124AH SHOWMSG_TEXT :OVY
39730H 3A7C2H 01093H SCANMSG_TEXT :OVY
3A8E0H 3AA3EH 0015FH VERSION_TEXT :OVY
3AA70H 3ACBFH 00250H RAWDIR_TEXT :OVY
3AD00H 3BEE3H 011E4H MSGED_TEXT :OVY
3C030H 40566H 04537H DL_TEXT :OVY
409F0H 40B17H 00128H VIEWFILE_TEXT :OVY
40B40H 40B9FH 00060H LASTCALL_TEXT :OVY
40BB0H 40BE3H 00034H DESQVIEW_TEXT :OVY
40BF0H 40CA2H 000B3H STACKING_TEXT :OVY
40CB0H 41128H 00479H CLEANUP_TEXT :OVY
411A0H 416CEH 0052FH SYSOPKEY_TEXT :OVY
41740H 4199DH 0025EH MSGFIND_TEXT :OVY
419B0H 41CD5H 00326H BINLOG_TEXT :OVY
41D20H 4216DH 0044EH PROTOCOL_TEXT :OVY
421D0H 45213H 03044H LISTFILE_TEXT :OVY
45550H 47FDDH 02A8EH UL_TEXT :OVY
48350H 486F3H 003A4H TAG_TEXT :OVY
48760H 48C55H 004F6H SELLANG_TEXT :OVY
48CD0H 4A76AH 01A9BH PROBOARD_TEXT :OVY
4A9C0H 4B333H 00974H NODELIST_TEXT :OVY
4B3C0H 4BB9DH 007DEH ONLINE_TEXT :OVY
4BC30H 4BE04H 001D5H MSGMOVE_TEXT :OVY
4BE30H 4C489H 0065AH CDROM_TEXT :OVY
4C540H 4D076H 00B37H REGIS_TEXT :OVY
4D0B0H 4DC0CH 00B5DH MCHAT_TEXT :OVY
4DD00H 4F0EDH 013EEH SETAREA_TEXT :OVY
4F270H 4F634H 003C5H USERED_TEXT :OVY
4F680H 4FB8EH 0050FH DECKEY_TEXT :OVY
4FBA0H 4FF9BH 003FCH MUSIC_TEXT :OVY
4FFF0H 503CEH 003DFH GIF_TEXT :OVY
50430H 51096H 00C67H MSGEXPRT_TEXT :OVY
51160H 51511H 003B2H HELP_TEXT :OVY
51550H 51585H 00036H EGA_TEXT :OVY
51590H 517F4H 00265H EVENT_TEXT :OVY
51820H 5200FH 007F0H FILEAREA_TEXT :OVY
52080H 5276BH 006ECH MSGAREA_TEXT :OVY
527B0H 52AEBH 0033CH TIMELOG_TEXT :OVY
52B30H 52BEDH 000BEH WORDWRAP_TEXT :OVY
52C00H 52E34H 00235H SHOWANS_TEXT :OVY
52E60H 54DBBH 01F5CH USERSET_TEXT :OVY
54FD0H 5508FH 000C0H USAGE_TEXT :OVY
550A0H 59579H 044DAH LOADPEX_TEXT :OVY
59A40H 59B58H 00119H IMAGE_TEXT :OVY
59B70H 59DF6H 00287H POSTMSG_TEXT :OVY
59E30H 59E57H 00028H PEXCALL_TEXT :OVY
59E60H 5A961H 00B02H STRVARS_TEXT :OVY
5AA00H 5AFEEH 005EFH USERWIN_TEXT :OVY
5B070H 5B232H 001C3H BULLETIN_TEXT :OVY
5B260H 5D1FEH 01F9FH MODEM_TEXT :OVY
5D420H 5D424H 00005H EXECHECK_TEXT :OVY
5D430H 5DC4CH 0081DH LANGUAGE_TEXT :OVY
5DCD0H 5E0D8H 00409H FUZZY_TEXT :OVY
5E0F0H 5E3A9H 002BAH TERMINAL_TEXT :OVY
5E3E0H 607F7H 02418H SQUISH_TEXT :OVY
60920H 63307H 029E8H HUDSON_TEXT :OVY
63570H 6388CH 0031DH MSGBASE_TEXT :OVY
638A0H 64001H 00762H MARK_TEXT :OVY
64040H 650D8H 01099H RIP_TEXT :OVY
651F0H 67B10H 02921H JAM_TEXT :OVY
67CA0H 67E87H 001E8H INPDATE_TEXT :OVY
67EB0H 68201H 00352H TAG_RW_TEXT :OVY
68250H 683BBH 0016CH 1STCHAR_TEXT :OVY
683D0H 68B31H 00762H MSGAPI_TEXT :OVY
68B90H 6A82AH 01C9BH API_SDM_TEXT :OVY
6A930H 6DEA0H 03571H API_SQ_TEXT :OVY
6E000H 6E04BH 0004CH SQASM_TEXT :OVY
6E060H 6E25CH 001FDH CVTDATE_TEXT :OVY
6E270H 6E4B7H 00248H DATE2BIN_TEXT :OVY
6E4D0H 6E50DH 0003EH DOSDATE_TEXT :OVY
6E520H 6E6AFH 00190H FEXIST_TEXT :OVY
6E6D0H 6E779H 000AAH FFIND_TEXT :OVY
6E790H 6E7A5H 00016H FLUSHA_TEXT :OVY
6E7B0H 6E7B0H 00000H MONTHS_TEXT :OVY
6E7C0H 6EAC0H 00301H PARSENN_TEXT :OVY
6EAF0H 6EC14H 00125H QKSORT_TEXT :OVY
6EC20H 6ED2CH 0010DH STRISTR_TEXT :OVY
6ED40H 6ED7CH 0003DH STROCPY_TEXT :OVY
6ED90H 6EE27H 00098H TRAIL_TEXT :OVY
Program entry point at 0000:0000

View File

@ -6,24 +6,19 @@ version_info(char *)
{
LOG(2,"Version info requested");
io << "\f\n\7"
" ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n"
" ³ ProBoard version " VERSION;
io << "\f\n\7"
" ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n"
" ³ ProBoard version " VERSION;
for(int i=0;i<54-strlen(VERSION);i++) io << ' ';
io << "³\n"
//io << "\1(c) 1990-1996 Philippe Leybaert \7³\n"
io << "\7 ³ ³\n";
io << "\7 ³ Originally written by \3Philippe Leybaert\7 ³\n";
io << "\7 ³ Copyright (c) 1990-2019 \3John Riley, Sr.\7 of \3SLASHER BBS\7 ³\n";
io << "\7 ³ Lead Programmer since ProBoard 2.22: \3Lawrence Stockman\7 ³\n";
io << "\7 ³ All Rights Reserved ³\n";
io << "\7 ³ ProBoard is now Open Sourced! Free Private and Commercial use Granted! ³\n";
io << "\7 ³ ProBoard updates: \3http://rileypcmd.com\3 or \3http://proboardbbs.com\7 ³\n";
io << "\7 ³ GNU General Public License v3.0 ³\n";
io << "\7 ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij\n"
"\7 ³ ³\n";
io << "³\n";
io << " ³ \1(c) 2019 John Riley\7 ³\n";
io << " ³ \1(c) Originally Developed by Philippe Leybaert\7 ³\n";
" ³ ³\n";
io << "\7 ³ Copyright (c) 1990-2019 ProBoard Developmment Ninja Team ³\n";
io << "\7 ³ All Rights Reserved ³\n";
//io << "\7 ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij\n"
"\7 ³ ³\n";
//----------------------------
@ -49,24 +44,21 @@ version_info(char *)
software_serial_number(),
max_node_count ) );
}
io << "\7 ³ \7Registered to:\6 " << form("%-36s",registered_user_name() ) << "\7 ³\n"
"\7 ³ \6" << form("%-36s",cfg.bbsname ) << "\7 ³\n"
"\7 ³ \7Serial number:\6 " << form("%-48.48s", buf ) << "\7 ³\n"
"\7 ³ ³\n";
}
else
{
io << " ³ \6UNREGISTERED EVALUATION VERSION ³\n"
"\7 ³ ³\n";
io << " ³ \6UNREGISTERED EVALUATION VERSION ³\n"
"\7 ³ ³\n";
}
io << "\7 ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij\n";
io << "\7 ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄij\n";
io << " ³ JAM(mbp) - Copyright 1993 Joaquim Homrighausen, Andrew Milner, ³\n"
" ³ Mats Birch, Mats Wallin. ³\n"
" ³ ALL RIGHTS RESERVED. ³\n";
io << "\7 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\n\n "
io << " ³ JAM(mbp) - Copyright 1993 Joaquim Homrighausen, Andrew Milner, ³\n"
" ³ Mats Birch, Mats Wallin. ³\n"
" ³ ALL RIGHTS RESERVED. ³\n";
io << "\7 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\n\n "
<< S_PRESS_ENTER_TO_CONTINUE;
}

Binary file not shown.

252
procfg/AREA.CPP Normal file
View File

@ -0,0 +1,252 @@
#define Use_DynamicArrayFile
#include <string.h>
#include <tswin.hpp>
#include "procfg.hpp"
#include "area.hpp"
_MsgArea
MsgArea::fEmpty(long r)
{
_MsgArea ma;
CLEAR_OBJECT(ma);
ma.areaNum = r+1;
return ma;
}
void
MsgArea::fMove(long /*r1*/,long r2,_MsgArea& ma)
{
ma.areaNum = r2+1;
}
_FileArea
FileArea::fEmpty(long)
{
_FileArea fa;
CLEAR_OBJECT(fa);
return fa;
}
static int
MsgArea_sortfunc(_MsgArea& ma1,_MsgArea& ma2)
{
return stricmp(ma2.name,ma1.name);
}
static int
FileArea_sortfunc(_FileArea& fa1,_FileArea& fa2)
{
return stricmp(fa2.name,fa1.name);
}
int Area::selected_start = -1;
int Area::selected_end = -1;
int MsgArea::file_count = 0;
File MsgArea::f;
DynamicArrayFile<_MsgArea> *MsgArea::df = NULL;
int FileArea::file_count = 0;
File FileArea::f;
DynamicArrayFile<_FileArea> *FileArea::df = NULL;
MsgArea::MsgArea()
{
if(file_count <= 0)
{
f.open(FileName(syspath,"MESSAGES.PB"),fmode_rw | fmode_copen);
file_count = 0;
if(!f.opened()) return;
df = new DynamicArrayFile<_MsgArea>(f);
df->setEmptyFunc(fEmpty);
df->setMoveFunc(fMove);
selStart(-1);
selEnd(-1);
}
file_count++;
}
MsgArea::~MsgArea()
{
if(file_count <= 1 && f.opened())
{
delete df;
f.close();
file_count = 1;
}
file_count--;
}
bool
MsgArea::read(int rec)
{
return df->read(rec-1,*this);
}
bool
MsgArea::write(int rec)
{
areaNum = rec;
return df->write(rec-1,*this);
}
bool
MsgArea::clear(int rec)
{
CLEAR_OBJECT(*((_MsgArea *)this));
return write(rec);
}
int
MsgArea::numAreas()
{
return int(df->numRecords());
}
bool
MsgArea::insert(int rec)
{
return df->insert(rec-1);
}
bool
MsgArea::remove(int rec)
{
return df->remove(rec-1);
}
dword
MsgArea::crc()
{
return crc32(this,sizeof(_MsgArea));
}
bool
MsgArea::sort(int from,int to)
{
return df->sort(from,to,MsgArea_sortfunc);
}
bool
MsgArea::move(int start,int end,int to)
{
return df->move(start,end,to);
}
FileArea::FileArea()
{
if(file_count <= 0)
{
f.open(FileName(syspath,"FILECFG.PRO"),fmode_rw | fmode_copen);
file_count = 0;
if(!f.opened()) return;
df = new DynamicArrayFile<_FileArea>(f);
df->setEmptyFunc(fEmpty);
selStart(-1);
selEnd(-1);
}
file_count++;
}
FileArea::~FileArea()
{
if(file_count <= 1 && f.opened())
{
delete df;
f.close();
file_count = 1;
}
file_count--;
}
bool
FileArea::read(int rec)
{
areaNum = rec;
return df->read(rec-1,*this);
}
bool
FileArea::write(int rec)
{
areaNum = rec;
return df->write(rec-1,*this);
}
bool
FileArea::clear(int rec)
{
CLEAR_OBJECT(*((_FileArea *)this));
return write(rec);
}
int
FileArea::numAreas()
{
return int(df->numRecords());
}
bool
FileArea::insert(int rec)
{
return df->insert(rec-1);
}
bool
FileArea::remove(int rec)
{
return df->remove(rec-1);
}
dword
FileArea::crc()
{
return crc32(this,sizeof(_FileArea));
}
bool
FileArea::sort(int from,int to)
{
return df->sort(from,to,FileArea_sortfunc);
}
bool
FileArea::move(int start,int end,int to)
{
return df->move(start,end,to);
}

105
procfg/AREA.HPP Normal file
View File

@ -0,0 +1,105 @@
class Area
{
static int selected_start;
static int selected_end;
public:
virtual ~Area() {}
virtual bool read(int) = 0;
virtual bool write(int) = 0;
virtual bool clear(int) = 0;
virtual bool insert(int) = 0;
virtual bool remove(int) = 0;
virtual int numAreas() = 0;
virtual KEY edit() = 0;
virtual int selStart(int i = -20000)
{
if(i != -20000)
selected_start = i;
return selected_start;
}
virtual int selEnd (int i = -20000)
{
if(i != -20000)
selected_end = i;
return selected_end;
}
virtual void listFunc(int,int,int) = 0;
virtual dword crc() = 0;
virtual bool sort(int,int) = 0;
virtual bool move(int,int,int) = 0;
};
class MsgArea : public _MsgArea , public Area
{
static File f;
static DynamicArrayFile<_MsgArea> *df;
static int file_count;
static _MsgArea fEmpty(long);
static void fMove(long,long,_MsgArea&);
public:
MsgArea();
~MsgArea();
bool read(int);
bool write(int);
bool clear(int);
bool insert(int);
bool remove(int);
int numAreas();
KEY edit();
void listFunc(int,int x,int y);
dword crc();
bool sort(int,int);
bool move(int,int,int);
};
class FileArea : public _FileArea , public Area
{
static File f;
static DynamicArrayFile<_FileArea> *df;
static int file_count;
static _FileArea fEmpty(long);
int areaNum;
public:
FileArea();
~FileArea();
bool read(int);
bool write(int);
bool clear(int);
bool insert(int);
bool remove(int);
int numAreas();
KEY edit();
void listFunc(int,int x,int y);
dword crc();
bool sort(int,int);
bool move(int,int,int);
};

107
procfg/AREA.I Normal file
View File

@ -0,0 +1,107 @@
area.hpp 1: class Area
area.hpp 2: {
area.hpp 3: static int selected_start;
area.hpp 4: static int selected_end;
area.hpp 5: public:
area.hpp 6: virtual ~Area() {}
area.hpp 7:
area.hpp 8: virtual bool read(int) = 0;
area.hpp 9: virtual bool write(int) = 0;
area.hpp 10: virtual bool clear(int) = 0;
area.hpp 11:
area.hpp 12: virtual bool insert(int) = 0;
area.hpp 13: virtual bool remove(int) = 0;
area.hpp 14:
area.hpp 15: virtual int numAreas() = 0;
area.hpp 16:
area.hpp 17: virtual KEY edit() = 0;
area.hpp 18:
area.hpp 19: virtual int selStart(int i = -20000)
area.hpp 20: {
area.hpp 21: if(i != -20000)
area.hpp 22: selected_start = i;
area.hpp 23:
area.hpp 24: return selected_start;
area.hpp 25: }
area.hpp 26: virtual int selEnd (int i = -20000)
area.hpp 27: {
area.hpp 28: if(i != -20000)
area.hpp 29: selected_end = i;
area.hpp 30:
area.hpp 31: return selected_end;
area.hpp 32: }
area.hpp 33: virtual void listFunc(int,int,int) = 0;
area.hpp 34: virtual dword crc() = 0;
area.hpp 35:
area.hpp 36: virtual bool sort(int,int) = 0;
area.hpp 37: virtual bool move(int,int,int) = 0;
area.hpp 38: };
area.hpp 39:
area.hpp 40:
area.hpp 41: class MsgArea : public _MsgArea , public Area
area.hpp 42: {
area.hpp 43: static File f;
area.hpp 44: static DynamicArrayFile<_MsgArea> *df;
area.hpp 45: static int file_count;
area.hpp 46:
area.hpp 47: static _MsgArea fEmpty(long);
area.hpp 48: static void fMove(long,long,_MsgArea&);
area.hpp 49: public:
area.hpp 50:
area.hpp 51:
area.hpp 52: MsgArea();
area.hpp 53: ~MsgArea();
area.hpp 54:
area.hpp 55: bool read(int);
area.hpp 56: bool write(int);
area.hpp 57: bool clear(int);
area.hpp 58:
area.hpp 59: bool insert(int);
area.hpp 60: bool remove(int);
area.hpp 61:
area.hpp 62: int numAreas();
area.hpp 63:
area.hpp 64: KEY edit();
area.hpp 65:
area.hpp 66: void listFunc(int,int x,int y);
area.hpp 67:
area.hpp 68: dword crc();
area.hpp 69:
area.hpp 70: bool sort(int,int);
area.hpp 71: bool move(int,int,int);
area.hpp 72: };
area.hpp 73:
area.hpp 74: class FileArea : public _FileArea , public Area
area.hpp 75: {
area.hpp 76: static File f;
area.hpp 77: static DynamicArrayFile<_FileArea> *df;
area.hpp 78: static int file_count;
area.hpp 79:
area.hpp 80: static _FileArea fEmpty(long);
area.hpp 81:
area.hpp 82: int areaNum;
area.hpp 83:
area.hpp 84: public:
area.hpp 85: FileArea();
area.hpp 86: ~FileArea();
area.hpp 87:
area.hpp 88: bool read(int);
area.hpp 89: bool write(int);
area.hpp 90: bool clear(int);
area.hpp 91:
area.hpp 92: bool insert(int);
area.hpp 93: bool remove(int);
area.hpp 94:
area.hpp 95: int numAreas();
area.hpp 96:
area.hpp 97: KEY edit();
area.hpp 98:
area.hpp 99: void listFunc(int,int x,int y);
area.hpp 100:
area.hpp 101: dword crc();
area.hpp 102:
area.hpp 103: bool sort(int,int);
area.hpp 104: bool move(int,int,int);
area.hpp 105: };
area.hpp 106:
area.hpp 107:

BIN
procfg/AREA.OBJ Normal file

Binary file not shown.

103
procfg/EDITAKA.CPP Normal file
View File

@ -0,0 +1,103 @@
#include <string.h>
#include <tswin.hpp>
#include "procfg.hpp"
void
edit_akas()
{
KEY hotkeys[]={ KEY_INS, KEY_DEL, 0 };
Field frm[]=
{
{ FRM_INT , 0, 0,0, 0, 5 , 6 , 10,2 },
{ FRM_INT , 0, 0,0, 0, 5 , 6 , 10,3 },
{ FRM_INT , 0, 0,0, 0, 5 , 6 , 10,4 },
{ FRM_INT , 0, 0,0, 0, 5 , 6 , 10,5 }
};
SelectWindow sw( num_aka,
0x70,
aka_select_func,
0,
NULL,
hotkeys );
sw.open( 37,
8,
62,
20,
0x5F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x5D,
NULL,
0x51 );
sw.title( "Matrix Addresses", 0x5E );
for(;;)
{
tsw_showfooter("\x1<Del>\x1 - Delete Aka \x1<Ins>\x1 - Add Aka \x1<Enter>\x1 - Edit", BAR_NORM, BAR_HIGH );
sw.redefine(num_aka);
int choice = sw.process();
if(choice==SL_ESC) break;
if(choice==SL_HOTKEY)
switch(sw.hotkey)
{
case KEY_INS:
{
memset(&akas[num_aka],0,sizeof(aka));
choice=num_aka++;
sw.current=choice;
}
break;
case KEY_DEL:
{
for(int i=sw.current;i<num_aka-1;i++)
akas[i] = akas[i+1];
if(num_aka)
num_aka--;
continue;
}
}
FormWindow w( 31,
8,
51,
15,
0x3F,
SHADOW | EXPLODE | BRACKETS,
CHISEL_BORDER,
0x3B,
NULL,
0x38 );
w.define( frm,
4,
0x31,
0x4E );
w.open();
w.title( "Edit AKA", 0x3F );
w.attrib( 0x3F );
w << "\n Zone:\n Net:\n Node:\n Point:";
frm[0].value=&akas[choice].zone;
frm[1].value=&akas[choice].net;
frm[2].value=&akas[choice].node;
frm[3].value=&akas[choice].point;
CursorState _cursor(TRUE);
w.process();
}
}

BIN
procfg/EDITAKA.OBJ Normal file

Binary file not shown.

801
procfg/EDITAREA.CPP Normal file
View File

@ -0,0 +1,801 @@
#define Use_DynamicArrayFile
#include <stdio.h>
#include <string.h>
#include <tswin.hpp>
#include "procfg.hpp"
#include "area.hpp"
static void list_func(int i,int x,int y);
Area *area;
void
edit_areas(int fa)
{
if(fa)
area = new FileArea;
else
area = new MsgArea;
int num_areas = area->numAreas();
KEY hotkeys[]={ ' ','1','2','3','4','5','6','7','8','9',KEY_INS, KEY_DEL , KEY_ALTC, KEY_ALTA, KEY_ALTD, KEY_ALTS, KEY_ALTM, KEY_ALTU, NULL };
SelectWindow sw;
sw.open( 1,
1,
tsw_hsize,
tsw_vsize - 3,
0x70,
BRACKETS,
CHISEL_BORDER,
0x7F,
NULL,
0x78 );
sw.define( num_areas + 1,
0x1E,
list_func,
0,
NULL,
hotkeys );
if(fa)
{
sw.title( "Select file area", 0x70);
sw.direct( 10, 0, 0x7F, 'Â' );
sw.direct( 10, tsw_vsize - 6, 0x78, 'Á' );
}
else
{
sw.title( "Select Message Area", 0x70 );
sw.direct( 10, 0, 0x7F, 'Â' );
sw.direct( 29, tsw_vsize-6, 0x78, 'Á' );
sw.direct( 10, tsw_vsize-6, 0x78, 'Á' );
}
int choice = 0;
bool reselect = TRUE;
for(;;)
{
if(reselect)
{
Window footwin;
footwin.open( 1,
tsw_vsize - 2,
tsw_hsize,
tsw_vsize,
BAR_COLOR,
NOBORDER );
KeyItem( footwin,
10,
1,
0x4E,
"<Ins>",
0x4F,
"Insert area" );
KeyItem( footwin,
10,
2,
0x4E,
"<AltS>",
0x4F,
"Sort marked areas" );
KeyItem( footwin,
10,
3,
0x4E,
"<AltU>",
0x4F,
"Untag all areas" );
KeyItem( footwin,
40,
1,
0x4E,
"<Del>",
0x4F,
"Delete area(s)" );
KeyItem( footwin,
40,
2,
0x4E,
"<AltM>",
0x4F,
"Move area(s)" );
KeyItem( footwin,
40,
3,
0x4E,
"<Space>",
0x4F,
"Mark range" );
KeyItem( footwin,
66,
1,
0x4E,
"<AltA>",
0x4F,
"Add area" );
KeyItem( footwin,
66,
2,
0x4E,
"<AltC>",
0x4F,
"Clear area(s)" );
KeyItem( footwin,
66,
3,
0x4E,
"<Enter>",
0x4F,
"Edit" );
choice=sw.process();
if(choice==SL_ESC) break;
if(choice==SL_HOTKEY)
{
switch(sw.hotkey)
{
case ' ':
{
if(sw.current >= num_areas)
continue;
if(area->selStart() < 0)
{
area->selStart(sw.current);
area->selEnd (sw.current);
}
else
{
if(sw.current == area->selStart()-1)
{
area->selStart(sw.current);
}
else
if(sw.current == area->selEnd()+1)
{
area->selEnd(sw.current);
}
else
if(sw.current < area->selStart() || sw.current > area->selEnd())
{
area->selStart(sw.current);
area->selEnd (sw.current);
}
}
if(sw.current < num_areas-1)
KB.push(KEY_DN);
continue;
}
case KEY_ALTU:
{
area->selStart(-1);
area->selEnd(-1);
continue;
}
case KEY_INS:
{
area->insert(sw.current+1);
num_areas = area->numAreas();
sw.redefine(num_areas+1);
continue;
}
case KEY_DEL:
{
if(area->selStart() >= 0)
{
if(!ask_confirm("Delete all marked areas?"))
continue;
for(;;)
{
area->remove(area->selStart()+1);
if(area->selStart() == area->selEnd())
break;
area->selEnd(area->selEnd()-1);
}
area->selStart(-1);
area->selEnd(-1);
}
else
{
if(sw.current >= num_areas)
{
tsw_beep();
continue;
}
if(ask_confirm("Delete current area?"))
{
area->remove(sw.current+1);
}
}
num_areas = area->numAreas();
sw.redefine(num_areas+1);
continue;
}
case KEY_ALTC:
{
if(area->selStart() >= 0)
{
if(!ask_confirm("Clear all marked areas?"))
continue;
for(int i=area->selStart();i<=area->selEnd();i++)
area->clear(i+1);
}
else
{
if(num_areas < 1 || !area->read(sw.current+1))
{
tsw_beep();
continue;
}
if(ask_confirm("Clear this area?") > 0)
area->clear(sw.current+1);
}
continue;
}
case KEY_ALTS:
{
ShowBusy("Sorting Areas");
if(area->selStart() >= 0 && (area->selEnd()-area->selStart()))
{
area->sort(area->selStart(),area->selEnd());
}
HideBusy();
continue;
}
case KEY_ALTM:
{
ShowBusy("Moving Areas");
if(area->selStart() >= 0)
{
if(!area->move(area->selStart(),area->selEnd(),sw.current))
tsw_beep();
}
HideBusy();
area->selStart(-1);
area->selEnd (-1);
continue;
}
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': KB.push((KEY)(char)sw.hotkey);
case KEY_ALTA:
{
int newareanum = num_areas+1;
Window w( 10,
5,
40,
7,
0x3F,
SHADOW,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.open();
w << " New area number: ";
tsw_cursoron();
w.attrib(0x3E);
w.scan(newareanum,5,6);
tsw_cursoroff();
if(newareanum > MAX_MSGAREA || newareanum < 1) continue;
if(newareanum > num_areas)
{
for(int i=num_areas+1;i<=newareanum;i++)
area->clear(i);
num_areas = newareanum;
sw.redefine(num_areas+1);
}
choice = newareanum - 1;
sw.show(choice);
}
}
}
}
if(sw.current == num_areas)
{
area->clear(sw.current+1);
num_areas++;
sw.redefine(num_areas+1);
}
if(!area->read(choice+1))
{
tsw_beep();
choice = -1;
continue;
}
dword crcvalue = area->crc();
KEY retval = area->edit();
if(crcvalue != area->crc())
{
if(ask_save() == 0)
area->write(choice+1);
}
if(retval == KEY_PGUP && choice > 0)
{
choice--;
reselect = FALSE;
}
if(retval == KEY_PGDN && choice < num_areas-1)
{
choice++;
reselect = FALSE;
}
if(retval == KEY_ESC)
reselect = TRUE;
}
delete area;
}
static void
ma_help(int i)
{
char *txt[]=
{
"Name to use for this message area",
"Squish: Full filename of message area ÄÄÄ *.MSG: directory for .MSG files",
"Kind of message area (Local/NetMail/EchoMail/Pvt EchoMail)",
"Type of messages allowed (Private and/or Public)",
"Can users write messages using an alias name?",
"Type of message base (Squish/Hudson/*.MSG)",
"Level needed to read messages in this area",
"Flags needed to read messages in this area",
"Level needed to write messages in this area",
"Flags needed to write messages in this area",
"Level needed to be allowed all operations on messages in this area",
"Flags needed to be allowed all operations on messages in this area",
"Origin line to use for this area (leave blank for default origin line)",
"Press [Enter] to select an AKA address to use for this area",
"Echomail tag name (only for \"Echomail\" type areas)",
"QWK Area Name (limited to 12 characters)",
"Area number where replies will be posted",
"Sysop name for this area",
"Group #1 this area belongs to",
"Group #2 this area belongs to",
"Group #3 this area belongs to",
"Group #4 this area belongs to",
"Does this message area belong to all groups?",
"Messages will be killed after specified number of days",
"Messages will be killed when received for specified number of days",
"Maximum number of messages allowed in this area"
};
tsw_showfooter(txt[i], BAR_COLOR);
}
static void
fa_help(int i)
{
char *txt[]=
{
"Name/description of this file area",
"Directory where files are located",
"Full path and filename of file listing for this area",
"Flags needed to download from this area (<Enter>=Edit)",
"Level needed to download from this area",
"Use CD-ROM specific listing format?",
"Include files from this area in TOPFILES.A??",
"Free area?",
"Group #1 this area belongs to",
"Group #2 this area belongs to",
"Group #3 this area belongs to",
"Group #4 this area belongs to",
"Does this area belong to all groups?",
"Maximum number of downloaded files per day for this area (0=unlimited)",
"Maximum number of downloaded Kbytes per day for this area (0=unlimited)",
"The date format that is used in FILES.BBS for this area (if listed)"
};
tsw_showfooter(txt[i], BAR_COLOR);
}
KEY
MsgArea::edit()
{
static char *msgkind[] = { "Local" , "NetMail" , "EchoMail" , "Pvt EchoMail",NULL};
static char *msgtype[] = { "Private/Public" , "Private Only" , "Public Only" , "To-All" , NULL };
static char *msgaccess[] = { "Real Names Only" , "Free Alias" , "Fixed Alias (or real name)" ,"Fixed Alias (enforced)",NULL};
static char *msgbasetype[] = { "Hudson" , "Squish" , "Fido *.MSG", "JAM", NULL};
Field frm[]=
{
{ FRM_STRING , 0 , 0,0 , 0 , 80 ,32 , 17,2 },
{ FRM_STRING , 0 , 0,0 , FRM_UPPER , 80 ,32 , 17,3 },
{ FRM_CHOICE , 0 , msgkind,0 , 0 , 12, 12, 17,4 },
{ FRM_CHOICE , 0 , msgtype,0 , 0 , 14, 14, 17,5 },
{ FRM_CHOICE , 0 , msgaccess,0 , 0 , 26, 26, 17,6 },
{ FRM_CHOICE , 0 , msgbasetype,0,0 , 10, 10, 17,7 },
{ FRM_UNSIGNED, 0 , 0,0 , 0 , 5, 6, 17,9 },
{ FRM_FUNCTION, 0 , 0,flagonoff_select,0 , 26, 26, 38,9 },
{ FRM_UNSIGNED, 0 , 0,0 , 0 , 5, 6, 17,10 },
{ FRM_FUNCTION, 0 , 0,flagonoff_select,0 , 26, 26, 38,10 },
{ FRM_UNSIGNED, 0 , 0,0 , 0 , 5, 6, 17,11 },
{ FRM_FUNCTION, 0 , 0,flagonoff_select,0 , 26, 26, 38,11 },
{ FRM_STRING , 0 , 0,0,0 , 61, 54, 17,13 },
{ FRM_FUNCTION, 0 , 0,aka_select ,0 , 20, 20, 17,14 },
{ FRM_STRING , 0 , 0,0 , FRM_UPPER , 60, 25, 17,15 },
{ FRM_STRING , 0 , 0,0 , FRM_UPPER , 12, 13, 17,16 },
{ FRM_INT , 0 , 0,0 , 0 , 3, 4, 17,17 },
{ FRM_STRING , 0 , 0,0 , 0 , 35 ,36 , 17,18 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3, 4, 61,2 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3, 4, 61,3 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3, 4, 61,4 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3, 4, 61,5 },
{ FRM_YESNO , 0 , 0,0 , 0 , 3, 3, 61,7 },
{ FRM_INT , 0 , 0,0 , 0 , 3 , 4 , 60,15 },
{ FRM_INT , 0 , 0,0 , 0 , 3 , 4 , 60,16 },
{ FRM_INT , 0 , 0,0 , 0 , 4 , 5 , 60,17 }
};
if(!name[0])
{
readLevel = 1;
writeLevel = 1;
sysopLevel = 32000;
msgKillDays = 30;
rcvKillDays = 14;
maxMsgs = 500;
}
AccessFlags *readflags[2];
AccessFlags *writeflags[2];
AccessFlags *sysopflags[2];
readflags[0] = &readFlags;
readflags[1] = &readFlagsNot;
writeflags[0] = &writeFlags;
writeflags[1] = &writeFlagsNot;
sysopflags[0] = &sysopFlags;
sysopflags[1] = &sysopFlagsNot;
frm[0].value = name;
frm[1].value = path;
frm[2].value = &msgKind;
frm[3].value = &msgType;
frm[4].value = &flags;
frm[5].value = &msgBaseType;
frm[6].value = &readLevel;
frm[7].value = readflags;
frm[8].value = &writeLevel;
frm[9].value = writeflags;
frm[10].value = &sysopLevel;
frm[11].value = sysopflags;
frm[12].value = origin;
frm[13].value = &aka;
frm[14].value = tag;
frm[15].value = qwkname;
frm[16].value = &replyBoard;
frm[17].value = sysop;
frm[18].value = &groups[0];
frm[19].value = &groups[1];
frm[20].value = &groups[2];
frm[21].value = &groups[3];
frm[22].value = &allGroups;
frm[23].value = &msgKillDays;
frm[24].value = &rcvKillDays;
frm[25].value = &maxMsgs;
KEY form_keys[] = { KEY_PGUP , KEY_PGDN, 0 };
FormWindow w( 2,
3,
77,
23,
0x1F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x19,
NULL,
0x10 );
w.define( frm,
26,
0x1B,
0x4E,
form_keys,
ma_help );
w.open();
w.title(form( "Message Area #%d", areaNum ), 0x1E );
w.attrib( 0x1F );
w << "\n Name: Group #1:\n"
" Path: Group #2:\n"
" Message Kind: Group #3:\n"
" Message Type: Group #4:\n"
" Name Options:\n"
" Message Base: All groups:\n"
"\n"
" Read Level: Read Flags:\n"
" Write Level: Write Flags:\n"
" Sysop Level: Sysop Flags:\n\n"
" Origin Line:\n"
" Use AKA:\n"
" EchoMail Tag: Kill after days\n"
" QWK Area Name: Kill rcvd after days\n"
" Reply Area: Max msgs\n"
" Sysop:\n";
w.direct( 3,20,0x1E," <PgUp> Previous Area ");
w.direct(53,20,0x1E," <PgDn> Next Area ");
tsw_cursoron();
int retval = w.process();
tsw_cursoroff();
if(retval == ED_HOT)
return w.scanHotKey;
else
return KEY_ESC;
}
KEY
FileArea::edit()
{
char *dateFormats[] =
{
"MM/DD/YY", "YY/MM/DD", "DD/MM/YY",
NULL
};
Field frm[]=
{
{ FRM_STRING , 0 , 0,0 , 0 , 79 , 45, 17,2 },
{ FRM_STRING , 0 , 0,0 , FRM_UPPER , 79 , 45, 17,4 },
{ FRM_STRING , 0 , 0,0 , FRM_UPPER , 79 , 45, 17,5 },
{ FRM_FUNCTION, 0 , 0,flagonoff_select ,0, 26 , 26, 17,7 },
{ FRM_UNSIGNED, 0 , 0,0 , 0 , 5 , 6 , 17,8 },
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,10 },
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,11 },
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,12 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3 , 4 , 17,14 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3 , 4 , 17,15 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3 , 4 , 17,16 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3 , 4 , 17,17 },
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,18 },
{ FRM_INT , 0 , 0,0 , 0 , 5 , 6 , 54,10 },
{ FRM_INT , 0 , 0,0 , 0 , 5 , 6 , 54,11 },
{ FRM_CHOICE , 0 ,dateFormats,0,0 , 8 , 8 , 54,13 }
};
AccessFlags *fl[2];
fl[0] = &flags;
fl[1] = &flagsNot;
int tops = (notops) ? 0 : 1;
frm[0].value = name;
frm[1].value = filepath;
frm[2].value = listpath;
frm[3].value = fl;
frm[4].value = &level;
frm[5].value = &cdrom;
frm[6].value = &tops;
frm[7].value = &free;
frm[8].value = &groups[0];
frm[9].value = &groups[1];
frm[10].value = &groups[2];
frm[11].value = &groups[3];
frm[12].value = &allGroups;
frm[13].value = &maxfiles;
frm[14].value = &maxkb;
frm[15].value = &dateFormat;
KEY form_keys[] = { KEY_PGUP , KEY_PGDN, 0 };
FormWindow w( 6,
3,
71,
23,
0x1F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x19,
NULL,
0x10 );
w.define( frm,
16,
0x1B,
0x4E,
form_keys,
fa_help );
w.open();
w.title( form( "File Area #%d", areaNum ), 0x1E );
w.attrib(0x1F);
w << "\n Area name:\n\n"
" File Location:\n"
" Listing file:\n\n"
" Access Flags:\n"
" Access Level:\n\n"
" Copy local: Max files:\n"
" In TOPFILES: Max Kb:\n"
" Free Area:\n"
" FILES.BBS Date Format:\n"
" Group #1:\n"
" Group #2:\n"
" Group #3:\n"
" Group #4:\n"
" All Groups:";
w.direct( 2,20,0x1E," <PgUp> Previous Area ");
w.direct(44,20,0x1E," <PgDn> Next Area ");
CursorState _cursor(TRUE);
int retval = w.process();
notops = (tops) ? 0 : 1;
if(!listpath[0] && filepath[0])
{
strcpy(listpath , filepath);
append_backspace(listpath);
strcat(listpath , "FILES.BBS");
}
if(retval == ED_HOT)
return w.scanHotKey;
else
return KEY_ESC;
}
static void
list_func(int i,int x,int y)
{
area->listFunc(i,x,y);
}
void
MsgArea::listFunc(int i,int x,int y)
{
MsgArea ma;
char *ptr;
if(!ma.read(i+1))
ptr = form(" <end> ł ł");
else
if(!ma.name[0])
ptr = form(" %5d ł úúúúúúúúúúúúúúúú ł úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú",i+1);
else
ptr = form(" %5d ł %-16.16s ł %s",i+1,ma.tag,ma.name);
if(strlen(ptr)>62) ptr[62]=0;
tsw_maputs(x,y,0x7F,ptr);
if(i == ma.selStart())
tsw_maputs(x,y,0x7E,"Ú>");
if(i == ma.selEnd())
tsw_maputs(x,y,0x7E,"Ŕ>");
if(i == ma.selEnd() && i == ma.selStart())
tsw_maputs(x,y,0x7E,"Ä>");
if(i > ma.selStart() && i < ma.selEnd())
tsw_maputs(x,y,0x7F,"ł");
tsw_maputc(x+9,y,0x7F,'ł');
tsw_maputc(x+28,y,0x7F,'ł');
}
void
FileArea::listFunc(int i,int x,int y)
{
FileArea fa;
char *ptr;
if(!fa.read(i+1))
ptr = form(" <end> ł ł ");
else
if(!fa.name[0])
ptr = form(" %5d ł úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú ł úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú",i+1);
else
ptr = form(" %5d ł %-32.32s ł %s",i+1,fa.name,fa.filepath);
if(strlen(ptr)>75) ptr[75]=0;
tsw_maputs(x,y,0x7F,ptr);
if(i == fa.selStart())
tsw_maputs(x,y,0x7E,"Ú>");
if(i == fa.selEnd())
tsw_maputs(x,y,0x7E,"Ŕ>");
if(i == fa.selEnd() && i == fa.selStart())
tsw_maputs(x,y,0x7E,"Ä>");
if(i > fa.selStart() && i < fa.selEnd())
tsw_maputs(x,y,0x7E,"ł");
tsw_maputc(x+9,y,0x7F,'ł');
tsw_maputc(x+44,y,0x7F,'ł');
}

BIN
procfg/EDITAREA.OBJ Normal file

Binary file not shown.

365
procfg/EDITFILE.CPP Normal file
View File

@ -0,0 +1,365 @@
#include <stdio.h>
#include <string.h>
#include <tswin.hpp>
#include "procfg.hpp"
struct FileArea : _FileArea
{
static File f;
static int file_count;
public:
FileArea();
~FileArea();
bool read(int);
bool write(int);
bool clear(int);
int numAreas();
void truncate();
};
int FileArea::file_count = 0;
File FileArea::f;
FileArea::FileArea()
{
if(file_count <= 0)
{
f.open(FileName(syspath,"FILECFG.PRO"),fmode_rw | fmode_copen);
file_count = 0;
}
file_count++;
}
FileArea::~FileArea()
{
if(file_count <= 1)
{
f.close();
file_count = 1;
}
file_count--;
}
bool
FileArea::read(int rec)
{
f.seek(long(rec-1) * sizeof(_FileArea));
return (f.read(this,sizeof(*this)) == sizeof(*this)) ? TRUE : FALSE;
}
bool
FileArea::write(int rec)
{
f.seek(long(rec-1) * sizeof(_FileArea));
return (f.write(this,sizeof(*this)) == sizeof(*this)) ? TRUE : FALSE;
}
bool
FileArea::clear(int rec)
{
CLEAR_OBJECT(*this);
return write(rec);
}
int
FileArea::numAreas()
{
return int(f.len() / sizeof(_FileArea));
}
void
FileArea::truncate()
{
FileArea fa;
int i = numAreas();
for(;i>0;i--)
{
if(!fa.read(i)) continue;
if(fa.name[0])
{
f.seek(long(i) * sizeof(_FileArea));
f.cut();
break;
}
}
if(!i)
{
f.seek(0);
f.cut();
}
}
static void
farea_list_func(int i,int x,int y)
{
FileArea fa;
char *ptr;
if(!fa.read(i+1) || !fa.name[0])
ptr = form("%5d úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú",i+1);
else
ptr = form("%5d %s",i+1,fa.name);
if(strlen(ptr)>43) ptr[43]=0;
tsw_maputs(x,y,0x5F,ptr);
tsw_maputc(x+6,y,0x5E,'³');
}
static void
helpfunction(int i)
{
char *txt[]=
{
"Name/description of this file area",
"Directory where files are located",
"Full path and filename of file listing for this area",
"Flags needed to download from this area (<Enter>=Edit)",
"Level needed to download from this area",
"Use CD-ROM specific listing format?",
"Include files from this area in TOPFILES.A??",
"Free area?",
"Group #1 this area belongs to",
"Group #2 this area belongs to",
"Group #3 this area belongs to",
"Group #4 this area belongs to",
"Does this area belong to all groups?",
"Maximum number of downloaded files per day for this area (0=unlimited)",
"Maximum number of downloaded Kbytes per day for this area (0=unlimited)",
"The date format that is used in FILES.BBS for this area (if listed)"
};
tsw_showfooter(txt[i], BAR_COLOR);
}
void
edit_files()
{
char *dateFormats[] =
{
"MM/DD/YY", "YY/MM/DD", "DD/MM/YY",
NULL
};
Field frm[]=
{
{ FRM_STRING , 0 , 0,0 , 0 , 79 , 45, 17,2 },
{ FRM_STRING , 0 , 0,0 , FRM_UPPER , 79 , 45, 17,4 },
{ FRM_STRING , 0 , 0,0 , FRM_UPPER , 79 , 45, 17,5 },
{ FRM_FUNCTION, 0 , 0,flagonoff_select ,0, 26 , 26, 17,7 },
{ FRM_UNSIGNED, 0 , 0,0 , 0 , 5 , 6 , 17,8 },
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,10 },
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,11 },
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,12 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3 , 4 , 17,14 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3 , 4 , 17,15 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3 , 4 , 17,16 },
{ FRM_SHORT , 0 , 0,0 , 0 , 3 , 4 , 17,17 },
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,18 },
{ FRM_INT , 0 , 0,0 , 0 , 5 , 6 , 54,10 },
{ FRM_INT , 0 , 0,0 , 0 , 5 , 6 , 54,11 },
{ FRM_CHOICE , 0 ,dateFormats,0,0 , 8 , 8 , 54,13 }
};
FileArea fa;
int num_areas = fa.numAreas();
KEY hotkeys[]={ '1','2','3','4','5','6','7','8','9',KEY_INS, KEY_DEL , NULL };
SelectWindow sw;
sw.open(3,3,50,tsw_vsize-3,0x5E,SHADOW);
sw.title(" Select File Area ",0x5F);
sw.define(num_areas,0x70,farea_list_func,0,NULL,hotkeys);
sw.direct(7,0,'Ñ');
sw.direct(7 ,tsw_vsize-6,'Ï');
bool reselect = TRUE;
int choice;
for(;;)
{
if(reselect)
{
tsw_showfooter("\001<Ins>\001 - Add Area \001<Del>\001 - Delete Area \001<Enter>\001 - Edit Area", BAR_NORM, BAR_HIGH);
choice=sw.process();
if(choice==SL_ESC) break;
if(choice==SL_HOTKEY)
{
switch(sw.hotkey)
{
case KEY_DEL:
{
if(!fa.read(sw.current+1))
{
tsw_beep();
continue;
}
if(fa.name[0])
if(ask_save() == 0)
fa.clear(sw.current+1);
continue;
}
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': KB.push((KEY)(char)sw.hotkey);
case KEY_INS:
{
CursorState _cursor(TRUE);
int newareanum = num_areas+1;
Window w(10,5,40,7,0x3F);
w.open();
w << " New area number: ";
w.attrib(0x3E);
w.scan(newareanum,5,6);
if(newareanum > MAX_FILEAREA || newareanum < 1) continue;
if(newareanum > num_areas)
{
for(int i=num_areas+1;i<=newareanum;i++) fa.clear(i);
num_areas = newareanum;
sw.redefine(num_areas);
}
choice = newareanum - 1;
sw.show(choice);
}
}
}
}
if(!fa.read(choice+1))
{
tsw_beep();
continue;
}
word crcvalue = crc(&fa,sizeof(fa));
if(!fa.name[0])
{
memset(&fa,0,sizeof(fa));
fa.level = 1;
}
AccessFlags *flags[2];
flags[0] = &fa.flags;
flags[1] = &fa.flagsNot;
int tops = (fa.notops) ? 0 : 1;
frm[0].value = fa.name;
frm[1].value = fa.filepath;
frm[2].value = fa.listpath;
frm[3].value = flags;
frm[4].value = &fa.level;
frm[5].value = &fa.cdrom;
frm[6].value = &tops;
frm[7].value = &fa.free;
frm[8].value = &fa.groups[0];
frm[9].value = &fa.groups[1];
frm[10].value = &fa.groups[2];
frm[11].value = &fa.groups[3];
frm[12].value = &fa.allGroups;
frm[13].value = &fa.maxfiles;
frm[14].value = &fa.maxkb;
frm[15].value = &fa.dateFormat;
KEY form_keys[] = { KEY_PGUP , KEY_PGDN, 0 };
FormWindow w(6,3,71,23,0x1F,SHADOW);
w.define(frm,16,0x1F,0x70,form_keys,helpfunction);
w.open();
w.title(form(" File Area #%d ",choice+1),0x1E);
w.attrib(0x1E);
w << "\n Area name :\n\n"
" File Location:\n"
" Listing file :\n\n"
" Access Flags :\n"
" Access Level :\n\n"
" Copy local : Max files:\n"
" In TOPFILES : Max Kb :\n"
" Free Area :\n"
" FILES.BBS Date Format:\n"
" Group #1 :\n"
" Group #2 :\n"
" Group #3 :\n"
" Group #4 :\n"
" All Groups :";
w.direct( 2,20,0x1B," <PgUp> Previous Area ");
w.direct(44,20,0x1B," <PgDn> Next Area ");
CursorState _cursor(TRUE);
int retval = w.process();
fa.notops = (tops) ? 0 : 1;
if(!fa.listpath[0] && fa.filepath[0])
{
strcpy(fa.listpath , fa.filepath);
append_backspace(fa.listpath);
strcat(fa.listpath , "FILES.BBS");
}
if(crcvalue != crc(&fa,sizeof(fa)) && fa.name[0])
{
if(ask_save() == 0)
{
fa.write(choice+1);
}
}
if(retval == ED_HOT)
{
if(w.scanHotKey == KEY_PGUP && choice > 0)
choice--;
if(w.scanHotKey == KEY_PGDN && choice < num_areas-1)
choice++;
reselect = FALSE;
}
else
reselect = TRUE;
}
if(fa.read(num_areas))
{
if(!fa.name[0])
fa.truncate();
}
}

BIN
procfg/EDITFILE.OBJ Normal file

Binary file not shown.

428
procfg/EDITGRP.CPP Normal file
View File

@ -0,0 +1,428 @@
#include <stdio.h>
#include <string.h>
#include <tswin.hpp>
#include "procfg.hpp"
const int MAX_GROUPS = 255;
struct AreaGroup : _AreaGroup
{
static File f;
static int file_count;
static String fName;
public:
AreaGroup();
~AreaGroup();
static void setFname(char *n)
{
fName = n;
}
bool read(int);
bool write(int);
bool clear(int);
int numGroups();
void truncate();
};
int AreaGroup::file_count = 0;
File AreaGroup::f;
String AreaGroup::fName;
AreaGroup::AreaGroup()
{
if(file_count <= 0)
{
f.open(FileName(syspath,fName),fmode_rw | fmode_copen);
file_count = 0;
}
file_count++;
}
AreaGroup::~AreaGroup()
{
if(file_count <= 1)
{
f.close();
file_count = 1;
}
file_count--;
}
bool AreaGroup::read(int rec)
{
f.seek(long(rec-1) * sizeof(_AreaGroup));
return (f.read(this,sizeof(*this)) == sizeof(*this)) ? TRUE : FALSE;
}
bool AreaGroup::write(int rec)
{
f.seek(long(rec-1) * sizeof(_AreaGroup));
return (f.write(this,sizeof(*this)) == sizeof(*this)) ? TRUE : FALSE;
}
bool AreaGroup::clear(int rec)
{
CLEAR_OBJECT(*this);
return write(rec);
}
int AreaGroup::numGroups()
{
return f.len() / sizeof(_AreaGroup);
}
void AreaGroup::truncate()
{
AreaGroup fa;
int i = numGroups();
for(;i>0;i--)
{
if(!fa.read(i)) continue;
if(fa.name[0])
{
f.seek(long(i) * sizeof(_AreaGroup));
f.cut();
break;
}
}
if(!i)
{
f.seek(0);
f.cut();
}
}
static
void farea_list_func(int i,int x,int y)
{
AreaGroup fa;
char *ptr;
if(!fa.read(i+1) || !fa.name[0])
{
ptr = form("%5d úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú",i+1);
}
else
{
ptr = form("%5d %s",i+1,fa.name);
}
if(strlen(ptr)>43)
{
ptr[43]=0;
}
tsw_maputs( x, y, 0x3F, ptr );
tsw_maputc( x + 6, y, 0x3F, 'ł' );
}
static
void helpfunction(int i)
{
char *txt[] = {
"Name/description of this group",
"Level needed to access this group",
"Flags needed to access this group"
};
tsw_showfooter(txt[i], BAR_COLOR);
}
void edit_groups( bool filegroups )
{
Field frm[] =
{
{ FRM_STRING , 0 , 0,0 , 0 , 79 , 45, 17,2 },
{ FRM_UNSIGNED, 0 , 0,0 , 0 , 5 , 6 , 17,4 },
{ FRM_FUNCTION, 0 , 0,flagonoff_select ,0, 26 , 26, 17,5 }
};
AreaGroup::setFname(filegroups ? "FGROUPS.PB" : "MGROUPS.PB");
AreaGroup fa;
int num_areas = fa.numGroups();
KEY hotkeys[]={ '1','2','3','4','5','6','7','8','9',KEY_INS, KEY_DEL , NULL };
SelectWindow sw;
sw.open( 3,
3,
50,
tsw_vsize - 3,
0x30,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x3F,
NULL,
0x38 );
sw.title( filegroups ? "Select File Area Group"
: "Select Message Area Group",
0x30 );
sw.define(num_areas,0x1F,farea_list_func,0,NULL,hotkeys);
sw.direct(7, 0, 0x3F, 'Â');
sw.direct(7, tsw_vsize - 6, 0x38, 'Á');
again:
for(;;)
{
int alias;
tsw_showfooter( "\x1<Ins>\x1 - Add Area \x1<Del>\x1 - Delete Area \x1<Enter>\x1 - Edit Area",
BAR_NORM,
BAR_HIGH );
int choice=sw.process();
if(choice==SL_ESC)
{
break;
}
if(choice==SL_HOTKEY)
{
switch ( sw.hotkey )
{
case KEY_DEL:
{
if(!fa.read(sw.current+1))
{
tsw_beep();
continue;
}
if(fa.name[0])
{
if(ask_save() == 0)
{
fa.clear(sw.current+1);
}
}
continue;
}
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
KB.push((KEY)(char)sw.hotkey);
case KEY_INS:
{
int newareanum = num_areas+1;
Window w( 10,
5,
40,
7,
0x70,
SHADOW,
CHISEL_BORDER,
0x7F,
NULL,
0x71 );
w.open();
w << " New group number: ";
tsw_cursoron();
w.attrib(0x1E);
w.scan(newareanum,5,6);
tsw_cursoroff();
if ( newareanum > MAX_GROUPS ||
newareanum < 1 )
{
continue;
}
if ( newareanum > num_areas )
{
for ( int i = num_areas + 1;
i <= newareanum;
i++ )
{
fa.clear( i );
}
num_areas = newareanum;
sw.redefine(num_areas);
}
choice = newareanum - 1;
sw.show(choice);
}
}
}
if ( ! fa.read( choice + 1 ) )
{
tsw_beep();
continue;
}
unsigned crcvalue = crc(&fa,sizeof(fa));
if ( ! fa.name[ 0 ] )
{
memset(&fa,0,sizeof(fa));
fa.level = 1;
}
AccessFlags *flags[2];
flags[0] = &fa.flags;
flags[1] = &fa.flagsNot;
frm[0].value = fa.name;
frm[1].value = &fa.level;
frm[2].value = flags;
FormWindow w( 8,
6,
73,
13,
0x70,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x7F,
NULL,
0x78 );
w.define( frm,
3,
0x71,
0x1E,
NULL,
helpfunction );
w.open();
w.title( form( filegroups
? " File Area Group #%d "
: " Message Area Group #%d ",
choice + 1 ),
0x70 );
w.attrib( 0x70 );
w << "\n Area name:\n\n"
" Access Level:\n"
" Access Flags:";
tsw_cursoron();
w.process();
tsw_cursoroff();
if ( crcvalue != crc( & fa, sizeof( fa ) ) &&
fa.name[ 0 ] )
{
if ( ask_save() == 0)
{
fa.write(choice+1);
}
}
}
if(fa.read(num_areas))
{
if( ! fa.name[ 0 ] )
{
fa.truncate();
}
}
}
void edit_fgroups()
{
edit_groups(TRUE);
}
void edit_mgroups()
{
edit_groups(FALSE);
}

BIN
procfg/EDITGRP.OBJ Normal file

Binary file not shown.

111
procfg/EDITLCOL.CPP Normal file
View File

@ -0,0 +1,111 @@
#include "procfg.hpp"
void
EditListColors()
{
Window sample_w( 3,
16,
78,
23,
0x7,
0,
CHISEL_BORDER,
0x07,
NULL,
0x08 );
sample_w.open();
menu_item savemenu[]=
{
{ 'T', 12,12," File Tag " },
{ 'N', 7,7, " File Name" },
{ 'S', 7,7, " File Size" },
{ 'D', 7,7, " File Date" },
{ 'C', 7,7, " File Counter" },
{ 'E', 8,8, " File Description" },
{ 'X', 3,3, " Extended descriptions & seperators" },
{ 'M', 2,2, " Missing files" },
{ 'H', 2,2, " Hide/Show File Counter" },
{ 0 , 0,0, NULL }
};
PopMenu menu( savemenu,
0x70,
0x3E );
menu.open( 20,
3,
61,
13,
0x3F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
menu.title( "File List Format", 0x3E );
for(;;)
{
sample_w.attrib(7);
sample_w.clear();
sample_w << "" << cfg.listColorTag << "A ";
sample_w << "" << cfg.listColorFileName << "PB_200.ZIP ";
sample_w << "" << cfg.listColorDate << "01/02/1994 ";
sample_w << "" << cfg.listColorSize << " 450k ";
if(!cfg.hideFileCounter)
sample_w << "" << cfg.listColorCounter << "[14] ";
sample_w << "" << cfg.listColorDesc << "ProBoard v2.00 BBS Software\n";
sample_w.moveCursor(37-5*cfg.hideFileCounter,0);
sample_w << "" << cfg.listColorDesc << "\"The Choice of Professionals\"\n";
sample_w << "" << cfg.listColorSeperator << "-----------------------------------------------------------------------\n";
sample_w << "" << cfg.listColorTag << "B ";
sample_w << "" << cfg.listColorFileName << "PB_ESP.ZIP ";
sample_w << "" << cfg.listColorDate << "18/04/1994 ";
sample_w << "" << cfg.listColorSize << " 10k ";
if(!cfg.hideFileCounter)
sample_w << "" << cfg.listColorCounter << "[04] ";
sample_w << "" << cfg.listColorDesc << "Spanish language file for ProBoard\n";
sample_w.moveCursor(37-5*cfg.hideFileCounter,0);
sample_w << "" << cfg.listColorDesc << "v2.00 or higher\n";
sample_w << "" << cfg.listColorTag << " ";
sample_w << "" << cfg.listColorFileName << "PB_DUT.ZIP ";
sample_w << "" << cfg.listColorMissing << " <MISSING> ";
if(!cfg.hideFileCounter)
sample_w << "" << cfg.listColorCounter << "[00] ";
sample_w << "" << cfg.listColorDesc << "Dutch language file for ProBoard";
int choice = menu.process();
byte *colorPtr;
if(choice < 1)
break;
switch(choice)
{
case 1: colorPtr = &cfg.listColorTag;
break;
case 2: colorPtr = &cfg.listColorFileName;
break;
case 3: colorPtr = &cfg.listColorSize;
break;
case 4: colorPtr = &cfg.listColorDate;
break;
case 5: colorPtr = &cfg.listColorCounter;
break;
case 6: colorPtr = &cfg.listColorDesc;
break;
case 7: colorPtr = &cfg.listColorSeperator;
break;
case 8: colorPtr = &cfg.listColorMissing;
break;
case 9: cfg.hideFileCounter = !cfg.hideFileCounter;
continue;
}
edit_color(1,menu,7,5,menu.attrib(),colorPtr);
}
}

BIN
procfg/EDITLCOL.OBJ Normal file

Binary file not shown.

209
procfg/EDITLIM.CPP Normal file
View File

@ -0,0 +1,209 @@
#include <string.h>
#include <tswin.hpp>
#include "procfg.hpp"
static
void limit_select(int i,int x,int y)
{
tsw_maputs( x,
y,
0x3E,
form( " %-5s ³ %5u ³%5d' ³%5u ³%4d' ºº%5d ³ %2d%% ³%3d ³ %5d ³%5d ",
limit[i].id,
limit[i].level,
limit[i].timelimit,
limit[i].daily_klimit,
limit[i].pre_download,
limit[i].free,
limit[i].factor,
limit[i].msgfactor,
limit[i].max_download,
limit[i].fallto ) );
tsw_maputc(x+7 ,y,0x3F,'³');
tsw_maputc(x+15,y,0x3F,'³');
tsw_maputc(x+23,y,0x3F,'³');
tsw_maputc(x+30,y,0x3F,'³');
tsw_maputs(x+37,y,0x3F,"ºº");
tsw_maputc(x+45,y,0x3F,'³');
tsw_maputc(x+51,y,0x3F,'³');
tsw_maputc(x+56,y,0x3F,'³');
tsw_maputc(x+64,y,0x3F,'³');
}
static
void limit_clear( int x,
int y )
{
tsw_maputs( x,
y,
0x3F,
" ³ ³ ³ ³ ºº ³ ³ ³ ³ ");
}
void edit_limits()
{
KEY hotkeys[] = { KEY_INS, KEY_DEL, 0 };
Field frm[] = {
{ FRM_UNSIGNED, 0, 0,0, 0, 5 , 6 ,23,1 },
{ FRM_INT , 0, 0,0, 0, 3 , 6 ,23,2 },
{ FRM_UNSIGNED, 0, 0,0, 0, 5 , 6 ,23,3 },
{ FRM_INT , 0, 0,0, 0, 3 , 6 ,23,4 },
{ FRM_STRING , 0, 0,0, 0, 5 , 6 ,23,6 },
{ FRM_UNSIGNED, 0, 0,0, 0, 5 , 6 ,23,9 },
{ FRM_SHORT , 0, 0,0, 0, 2 , 6 ,23,10 },
{ FRM_UNSIGNED, 0, 0,0, 0, 3 , 6 ,23,11 },
{ FRM_UNSIGNED, 0, 0,0, 0, 5 , 6 ,23,12 },
{ FRM_UNSIGNED, 0, 0,0, 0, 5 , 6 ,23,13 }
};
SelectWindow sw( num_limits,
0x1F,
limit_select,
0,
NULL,
hotkeys,
NULLFUNC,
limit_clear );
sw.open( 2,
10,
77,
21,
0x30,
SHADOW,
CHISEL_BORDER,
0x3F,
NULL,
0x38 );
sw.title( "ÄIDÄÄÄÂÄLevelÄÂTmLimitÂDailyKÂPre-DLÒÒÄFreeÄÂFactrÂMsgKÂÄMaxKbÄÂFallTo");
sw.direct( 1,
11,
0x38,
"ÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÐÐÄÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÁÄÄÄÄÄÄÄÁ" );
for(;;)
{
for(int i=0;i<num_limits-1;i++)
{
for(int j=i+1;j<num_limits;j++)
{
if(limit[i].level<limit[j].level)
{
limits temp = limit[i];
limit[i] = limit[j];
limit[j] = temp;
}
}
}
tsw_showfooter("\x1<Del>\x1 - Delete \x1<Ins>\x1 - Add \x1<Enter>\x1 - Edit", BAR_NORM, BAR_HIGH);
sw.redefine(num_limits);
int choice=sw.process();
if(choice==SL_ESC)
{
break;
}
if(choice==SL_HOTKEY)
{
switch(sw.hotkey)
{
case KEY_INS:
{
memset(&limit[num_limits],0,sizeof(*limit));
choice=num_limits++;
sw.current=choice;
}
break;
case KEY_DEL:
for(int i=sw.current;i<num_limits-1;i++)
{
limit[i]=limit[i+1];
}
if(num_limits)
{
num_limits--;
}
continue;
}
}
FormWindow w( 9,
4,
49,
18,
0x3F,
SHADOW | EXPLODE,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.define( frm,
10,
0x31,
0x4E );
w.open();
w.attrib( 0x3F );
w << " Security Level:\n"
" Time per day: min\n"
" Kb Download per day: Kbytes\n"
" Download delay: min\n\n"
" Usergroup ID:\n\n\n"
" Free Download: Kbytes\n"
" Upload needed: %\n"
" Free download/msg: Kbytes\n"
" Maximum download: Kbytes\n"
" Fall to level:";
frm[0].value=&limit[choice].level;
frm[1].value=&limit[choice].timelimit;
frm[2].value=&limit[choice].daily_klimit;
frm[3].value=&limit[choice].pre_download;
frm[4].value=limit[choice].id;
frm[5].value=&limit[choice].free;
frm[6].value=&limit[choice].factor;
frm[7].value=&limit[choice].msgfactor;
frm[8].value=&limit[choice].max_download;
frm[9].value=&limit[choice].fallto;
tsw_cursoron();
w.process();
tsw_cursoroff();
// if(limit[choice].daily_klimit < 0)
// {
// limit[choice].daily_klimit = 0;
// }
}
}

BIN
procfg/EDITLIM.OBJ Normal file

Binary file not shown.

57
procfg/EDITMAC.CPP Normal file
View File

@ -0,0 +1,57 @@
#include <string.h>
#include <tswin.hpp>
#include "procfg.hpp"
void
edit_macros()
{
Field frm[]=
{
{ FRM_STRING , cfg.sysopkeys[0] , 0,0 , 0 , 59 , 40 , 11,2 },
{ FRM_STRING , cfg.sysopkeys[1] , 0,0 , 0 , 59 , 40 , 11,3 },
{ FRM_STRING , cfg.sysopkeys[2] , 0,0 , 0 , 59 , 40 , 11,4 },
{ FRM_STRING , cfg.sysopkeys[3] , 0,0 , 0 , 59 , 40 , 11,5 },
{ FRM_STRING , cfg.sysopkeys[4] , 0,0 , 0 , 59 , 40 , 11,6 },
{ FRM_STRING , cfg.sysopkeys[5] , 0,0 , 0 , 59 , 40 , 11,7 },
{ FRM_STRING , cfg.sysopkeys[6] , 0,0 , 0 , 59 , 40 , 11,8 },
{ FRM_STRING , cfg.sysopkeys[7] , 0,0 , 0 , 59 , 40 , 11,9 },
{ FRM_STRING , cfg.sysopkeys[8] , 0,0 , 0 , 59 , 40 , 11,10 },
{ FRM_STRING , cfg.sysopkeys[9] , 0,0 , 0 , 59 , 40 , 11,11 },
};
FormWindow w( 23,
8,
78,
21,
0x5F,
SHADOW | BRACKETS | CENTERED_X,
CHISEL_BORDER,
0x5D,
NULL,
0x51 );
w.define( frm,
10,
0x5E,
0x4E );
w.open();
w.attrib( 0x5F );
w.title("Sysop Macros", 0x5E );
w << "\n Alt-F1:\n"
" Alt-F2:\n"
" Alt-F3:\n"
" Alt-F4:\n"
" Alt-F5:\n"
" Alt-F6:\n"
" Alt-F7:\n"
" Alt-F8:\n"
" Alt-F9:\n"
" Alt-F10:\n";
tsw_showfooter("Enter \"\001@<doscommand>\001\" OR \"\001<keystrokes>\001\" ('\001|\001'=Enter , '\001^\001'=Esc)", BAR_NORM, BAR_HIGH );
tsw_cursoron();
w.process();
tsw_cursoroff();
}

BIN
procfg/EDITMAC.OBJ Normal file

Binary file not shown.

908
procfg/EDITMENU.CPP Normal file
View File

@ -0,0 +1,908 @@
#include <dos.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <tswin.hpp>
#include "procfg.hpp"
struct MenuItem : _MenuItem
{
MenuItem()
{
CLEAR_OBJECT(*this);
access.timeFrame.setAll();
access.terminals = 0xFF;
}
};
struct MenuFile : _MenuFile {};
typedef MenuItem *pMenuItem;
#define MAX_MENU_ITEMS 255
static char menunames[200][13];
KEY
colorselect(int mode,Window& ww,int x,int y,char attr,void *data)
{
char *colnames[]={ "Black","Blue","Green","Cyan","Red","Magenta","Yellow","White"};
char cols[]={0,4,2,6,1,5,3,7};
char col=*((char *)data);
char fg=col&0x7;
char bg=(col&0x70)>>4;
char dark=(col&0x8)>>3;
fg=cols[fg];
bg=cols[bg];
col=(bg<<4)|fg;
if(!dark) col|=0x8;
if(!mode)
{
String s;
if(!dark) s="Bright ";
s << form("%s on %s",colnames[fg],colnames[bg]);
ww.direct(x,y,attr,form("%-25.25s",(char *)s));
ww.direct(x+26,y,col," Example Text ");
return 0;
}
int starty = ww.minY+y-7;
if(starty<1)
starty = 1;
Window w( ww.minX + x + 2,
starty,
ww.minX + x + 23,
starty + 11,
0xF,
EXPLODE | BRACKETS,
CHISEL_BORDER,
0x07,
NULL,
0x08 );
w.open();
w.title("Edit Color",0xE);
int curx=fg,cury=bg;
if(!dark) curx|=8;
for(;;)
{
for(byte i=0;i<0x80;i++)
{
w.direct(i%16+2,i/16+2,i,'X');
}
w.direct(curx+1,cury+2,0xf,'³');
w.direct(curx+1,cury+1,0xf,"ÚÄ¿");
w.direct(curx+3,cury+2,0xf,'³');
w.direct(curx+1,cury+3,0xf,"ÀÄÙ");
KEY k=KB.get();
if(k==KEY_ESC) return 0;
if(k==KEY_RET) break;
w.direct(curx+1,cury+2,0xf,' ');
w.direct(curx+1,cury+1,0xf," ");
w.direct(curx+3,cury+2,0xf,' ');
w.direct(curx+1,cury+3,0xf," ");
switch(k)
{
case KEY_UP: if(cury) cury--; break;
case KEY_DN: if(cury<7) cury++; break;
case KEY_LT: if(curx) curx--; break;
case KEY_RT: if(curx<15) curx++; break;
}
}
fg=cols[curx&7];
bg=cols[cury];
dark=curx&8;
col=(bg<<4)|fg;
if(!dark) col|=8;
*((char *)data)=col;
return 0;
}
static void
menu_select_func(int i,int x,int y)
{
tsw_maputs(x+1,y,0x5F,menunames[i]);
}
static LanguageFile far langheader;
void
menu_editor(int n,char *args[])
{
File lf;
String langfile = select_language(FALSE);
if(!langfile.len())
return;
if(langfile != "*")
{
if(!lf.open(FileName(syspath,langfile,".PBL")))
{
tsw_beep();
tsw_beep();
tsw_beep();
tsw_beep();
tsw_beep();
return;
}
lf.read(&langheader , sizeof(LanguageFile));
lf.close();
if(langheader.menuPath[0] == '\0')
strcpy(langheader.menuPath,cfg.mnupath);
if(langheader.txtPath[0] == '\0')
strcpy(langheader.txtPath,cfg.txtpath);
}
else
{
strcpy(langheader.menuPath,cfg.mnupath);
strcpy(langheader.txtPath,cfg.txtpath);
}
String searchpath(langheader.menuPath);
searchpath << "*.PBM";
int num_menus;
if(n >= 1)
{
edit_menu(args[0]);
return;
}
else
{
DirScan f(searchpath);
for(int i=0;int(f);i++)
{
FileName fn(f.name());
fn.stripExt();
strcpy(menunames[i],fn);
f++;
};
num_menus=i;
qsort(menunames,num_menus,13,(int (*)(const void *,const void *))stricmp);
}
KEY hotkeys[]={ KEY_INS , 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
KEY_DEL , 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'1','2','3','4','5','6','7','8','9','0','_','-', 8 , NULL };
SelectWindow sw( num_menus,
0x70,
menu_select_func,
0,
NULL,
hotkeys );
sw.open( 3,
3,
18,
22,
0x50,
SHADOW | EXPLODE | BRACKETS,
CHISEL_BORDER,
0x5F,
NULL,
0x58 );
sw.title( "Select", 0x5E );
int index = 0;
int found = -1;
String cur_title;
for(;;)
{
tsw_showfooter("\x1<Ins>\x1 - Create Menu \x1<Enter>\x1 - Edit Menu", BAR_NORM, BAR_HIGH );
sw.redefine(num_menus);
int choice=sw.process();
if(choice==SL_HOTKEY)
{
if(sw.hotkey == KEY_INS)
{
Window w( 10,
10,
32,
12,
0x3F,
SHADOW | EXPLODE,
CHISEL_BORDER,
0x3F,
NULL,
0x38 );
w.open();
w.attrib(0x3E);
w << " Create: ";
w.attrib(0x31);
tsw_cursoron();
w.scan(menunames[num_menus],8U,9U,SCAN_UPPER);
tsw_cursoroff();
if(!menunames[num_menus][0]) continue;
choice=num_menus++;
sw.current=choice;
}
else if(sw.hotkey == KEY_DEL)
{
Window w( 1,
1,
40,
3,
0x4F,
SHADOW | EXPLODE | CENTERED_X | CENTERED_Y,
CHISEL_BORDER,
0x4C,
NULL,
0x40 );
w.open();
char *s = menunames[sw.current];
w.centerLine(1,form("Delete menu '%s' ? [y/N]",s),0x4E);
if(toupper(KB.get())=='Y')
{
FileName fn(langheader.menuPath,s,".PBM");
unlink(fn);
}
continue;
}
else
{
if((sw.hotkey<0x0100 && isalnum(toupper(char(sw.hotkey)))) || sw.hotkey == '_' || sw.hotkey == '-')
{
if(sw.current != found)
{
cur_title = "";
index = 0;
found = -1;
}
String tmp_str = cur_title + String(char(toupper(char(sw.hotkey))));
for(int i = 0 ; i < num_menus ; i++)
if(strlen(menunames[i]) >= tmp_str.len() && !strnicmp(tmp_str,menunames[i],tmp_str.len()))
{
found = i;
sw.show(found);
cur_title = tmp_str;
index++;
break;
}
if(i == num_menus) tsw_beep();
}
else
{
found = -1;
index = 0;
cur_title = "";
}
sw.title(cur_title,0x5e);
continue;
}
}
if(choice<0) break;
edit_menu(menunames[choice]);
}
}
struct m_item
{
union {
char type;
char highlight;
};
unsigned level;
AccessFlags flags;
char string[76];
char key;
char data[81];
char color;
byte attr;
};
const byte MNU_RIP_SHOW_REMOTE = 1;
const byte MNU_RIP_HIDE_LOCAL = 2;
const byte MNU_RIP_NO_RESET = 4;
static MenuItem **mitem;
static MenuFile *mfile;
static int num_mitems;
char *menufunctions[]=
{
" 0 - Display only",
" 1 - Goto menu",
" 2 - Gosub menu",
" 3 - Goto previous menu",
" 4 - Clear stack and goto menu",
" 5 - Show ANS/ASC file",
" 6 - Change State",
" 7 - Shell",
" 8 - Version information",
" 9 - Logoff",
"10 - System usage graph by hour",
"11 - Chat request",
"12 - Execute Questionnaire",
"13 - User list",
"14 - Time info",
"15 - Show .A??-file & wait",
"16 - Change City",
"17 - Change Password",
"18 - Change Screen Size",
"19 - Toggle Clearscreen",
"20 - Toggle More Prompt",
"21 - Toggle ANSI graphics",
"22 - Check for mail & files",
"23 - Read messages",
"24 - Scan messages",
"25 - Qscan messages",
"26 - System usage graph by day",
"27 - Write a message",
"28 - Combined boards select",
"29 - System usage graph per week",
"30 - Show directory",
"31 - List files",
"32 - Download a file",
"33 - Upload a file",
"34 - View archive",
"35 - Keyword search",
"36 - Filename search",
"37 - Show new files",
"38 - View a file",
"39 - View a named file",
"40 - Display .A?? file w/hotkeys",
"41 - Toggle fullscreen-editor",
"42 - Toggle hotkeys",
"43 - Clear marked messages",
"44 - Global boards selection",
"45 - Display textfile & wait",
"46 - Change User's level/flags",
"47 - Make a log entry",
"48 - Display user hitparade",
"49 - Select New MsgArea",
"50 - Show users online",
"51 - List last callers",
"52 - Remote User Editor",
"53 - Multi-line chat",
"54 - Select New FileArea",
"55 - View GIF-file type",
"56 - Toggle IBM characters",
"57 - Change Phone #",
"58 - Change Data/Fax Phone #",
"59 - Change Alias",
"60 - Run ProBoard PEX File",
"61 - Display Bulletin Menu",
"62 - Toggle AVATAR",
"63 - Toggle AVT/0+",
"64 - Show graph (general)",
"65 - Display A??/RIP file w/hotkeys",
"66 - Change RIPscrip font",
"67 - Toggle RIPscrip graphics",
"68 - Edit Tagged Files",
"69 - Select a new language",
"70 - Change date format" ,
"71 - Change mailing address" ,
"72 - Change fax number",
"73 - Change country",
"74 - Change default protocol",
"75 - Select message area group",
"76 - Select file area group"
};
static void simulate();
static void
mitem_select_func(int i,int x,int y)
{
if(i>=num_mitems) return;
char *s = mitem[i]->text;
while(*s==' ') s++;
if(mitem[i]->function)
tsw_maputs(x+1,y,0x1E,form("%c ³ %-22.22s³ %-25.25s³ %-20.20s",mitem[i]->hotKey,s,&menufunctions[mitem[i]->function][5],mitem[i]->data));
else
tsw_maputs(x+1,y,0x1E,form(" ³ %-22.22s³ ³",s,mitem[i]->data));
}
void
menufunc_select_func(int i,int x,int y)
{
tsw_maputs(x+1,y,0x3E,menufunctions[i]);
}
KEY
func_select(int mode,Window& w,int x,int y,char attr,void *data)
{
char *func=(char *)data;
if(!mode)
w.direct(x,y,attr,form("%-30.30s",menufunctions[*func]));
else
{
SelectWindow sw( 77,
0x70,
menufunc_select_func );
sw.open( 17,
2,
63,
23,
0x3F,
SHADOW | EXPLODE | BRACKETS,
CHISEL_BORDER,
0x3F,
NULL,
0x38 );
sw.title( "Select a function" );
sw.show(*func);
int i=sw.process();
if(i<0) return 0;
*func=i;
}
return 0;
}
void
edit_menu(char *menu)
{
int i;
static int runcount=0;
static MenuItem copy_mitem;
if(!runcount++) CLEAR_OBJECT(copy_mitem);
FileName fn(langheader.menuPath,menu);
fn << ".PBM";
mitem = new pMenuItem[MAX_MENU_ITEMS];
for(i=0;i<MAX_MENU_ITEMS;i++)
mitem[i] = new MenuItem;
mfile = new MenuFile;
CLEAR_OBJECT(*mfile);
File f(fn);
if(!f.opened())
{
strcpy(mfile->prompt,"Select: ");
mfile->color=7;
mfile->highlight=3;
num_mitems=0;
}
else
{
f.read(mfile,sizeof(*mfile));
for(num_mitems=0;num_mitems<MAX_MENU_ITEMS;num_mitems++)
if(f.read(mitem[num_mitems],sizeof(MenuItem)) != sizeof(MenuItem))
break;
f.close();
}
word crc = 0;
for(i=0;i<num_mitems;i++)
crc += word(i+1) * ::crc(mitem[i],sizeof(MenuItem));
crc += ::crc(mfile,sizeof(*mfile));
KEY hotkeys[]={ KEY_INS, KEY_DEL, KEY_ALTP, KEY_ALTS, KEY_ALTC, KEY_CTLP, NULL };
SelectWindow sw( num_mitems + 1,
0x4E,
mitem_select_func,
0,
NULL,
hotkeys );
sw.open( 1,
1,
80,
24,
0x1F,
EXPLODE | BRACKETS,
CHISEL_BORDER,
0x19,
NULL,
0x10 );
sw.title( menu, 0x1E );
for(;;)
{
tsw_showfooter("\001AltC\001-Copy \001CtrlP\001-Paste \001AltP\001-Prompt/RIP \001Ins\001-Insert \001Del\001-Delete \001AltS\001-Show", BAR_NORM, BAR_HIGH );
sw.redefine(num_mitems+1);
int choice=sw.process();
if(choice==SL_ESC)
{
word newcrc = 0;
for(i=0;i<num_mitems;i++)
newcrc += word(i+1) * ::crc(mitem[i],sizeof(MenuItem));
newcrc += ::crc(mfile,sizeof(*mfile));
if(crc != newcrc)
{
int choice = ask_save();
if(choice>=0)
{
if(choice == 0)
{
File f;
f.open(fn,fmode_create);
if(f.opened())
{
f.write(mfile,sizeof(*mfile));
for(i=0;i<num_mitems;i++)
f.write(mitem[i],sizeof(MenuItem));
f.close();
}
}
break;
}
continue;
}
break;
}
if(choice==SL_HOTKEY)
{
switch(sw.hotkey)
{
case KEY_ALTC: {
if(!num_mitems || sw.current>=num_mitems) continue;
copy_mitem = *mitem[sw.current];
continue;
}
case KEY_CTLP: {
if(sw.current<0) sw.current = 0;
for(i=num_mitems-1;i>=sw.current;i--) *mitem[i+1] = *mitem[i];
*mitem[sw.current] = copy_mitem;
num_mitems++;
continue;
}
case KEY_INS: {
if(sw.current<0) sw.current=0;
for(i=num_mitems-1;i>=sw.current;i--) *mitem[i+1] = *mitem[i];
delete mitem[sw.current];
mitem[sw.current] = new MenuItem;
num_mitems++;
continue;
}
case KEY_DEL: {
if(!num_mitems || sw.current>=num_mitems) continue;
for(i=sw.current;i<num_mitems-1;i++) *mitem[i]=*mitem[i+1];
num_mitems--;
continue;
}
case KEY_ALTP:{
FormWindow w( 7,
4,
74,
13,
0x3F,
SHADOW | EXPLODE | BRACKETS | SHADOW,
CHISEL_BORDER,
0x3F,
NULL,
0x38 );
w.open();
w.title( "Prompt", 0x3E );
w << "\n Prompt:\n"
"\n Color:"
"\n Highlight:\n"
"\n RIP Menu: (Name: )";
Field frm[]={
{ FRM_STRING, 0, 0,0, 0, 50, 50, 13,2 },
{ FRM_FUNCTION, 0, 0,colorselect,0, 25, 25, 13,4 },
{ FRM_FUNCTION, 0, 0,colorselect,0, 25, 25, 13,5 },
{ FRM_YESNO, 0, 0,0 ,0, 3,3 , 13,7 },
{ FRM_STRING, 0, 0,0,FRM_UPPER,8,9,25,7}
};
frm[0].value=mfile->prompt;
frm[1].value=&mfile->color;
frm[2].value=&mfile->highlight;
frm[3].value=&mfile->attr;
frm[4].value=mfile->RIPname;
//if(strlen(mitem->data) > 8 || !mitem->attr) mitem->data[0]='\0';
w.define( frm,
5,
0x31,
0x4E );
tsw_cursoron();
w.process();
tsw_cursoroff();
continue;
}
case KEY_ALTS: simulate();
continue;
}
}
if(choice>=num_mitems)
{
num_mitems++;
delete mitem[choice];
mitem[choice] = new MenuItem;
}
char *sex_choices[] = { "Don't Care" , "Male Only" , "Female Only" , NULL };
Field frm[]={
{ FRM_STRING , 0, 0, 0, 0, 159, 74 , 2,3 },
{ FRM_FUNCTION, 0, 0, colorselect , 0, 25,25,13,5},
{ FRM_CHAR , 0, 0, 0, FRM_UPPER, 1, 1, 13,7 },
{ FRM_FUNCTION, 0, 0, func_select, 0, 30, 30 , 13,8 },
{ FRM_STRING , 0, 0, 0, 0, 159, 60, 13,9 },
{ FRM_UNSIGNED, 0, 0, 0, 0, 5 , 6, 13,11},
{ FRM_UNSIGNED, 0, 0, 0, 0, 5 , 6, 13,12},
{ FRM_FUNCTION, 0, 0,flagonoff_select,0,32,32,13,13},
{ FRM_SHORT , 0, 0, 0, 0, 3 , 4, 13,14},
{ FRM_SHORT , 0, 0, 0, 0, 3 , 4, 13,15},
{ FRM_CHOICE , 0, sex_choices,0,0,11,11,13,16 },
{ FRM_UNSIGNED, 0, 0, 0, 0, 5 , 6, 13,17},
{ FRM_UNSIGNED, 0, 0, 0, 0, 5 , 6, 13,18},
{ FRM_FUNCTION, 0, 0,edit_timeframe,0,20,20, 13 ,19 },
{ FRM_LONG , 0, 0, 0, 0, 5 , 6, 13,20},
{ FRM_LONG , 0, 0, 0, 0, 5 , 6, 13,21},
{ FRM_FUNCTION, 0, 0,edit_nodes,0,20,20, 52 ,11 },
{ FRM_YESNO , 0, 0,0,0,3,3,52,14},
{ FRM_STRING , 0, 0, 0, 0, 15, 16 , 52,15 },
{ FRM_YESNO , 0, 0,0,0,3,3,56,18},
{ FRM_YESNO , 0, 0,0,0,3,3,56,19},
{ FRM_YESNO , 0, 0,0,0,3,3,56,20}
};
if(!mitem[choice]->text[0])
{
mitem[choice]->color = 0x0F;
}
byte rip_remoteshow = (mitem[choice]->attr & MNU_RIP_SHOW_REMOTE) ? 1 : 0;
byte rip_localshow = (mitem[choice]->attr & MNU_RIP_HIDE_LOCAL ) ? 0 : 1;
byte rip_reset = (mitem[choice]->attr & MNU_RIP_NO_RESET ) ? 0 : 1;
byte password_req = (mitem[choice]->attr & MENU_PASSWORD ) ? 1 : 0;
AccessFlags *flags[2];
flags[0] = &mitem[choice]->access.flags;
flags[1] = &mitem[choice]->access.flagsNot;
frm[0 ].value = mitem[choice]->text;
frm[1 ].value = &mitem[choice]->color;
frm[2 ].value = &mitem[choice]->hotKey;
frm[3 ].value = &mitem[choice]->function;
frm[4 ].value = mitem[choice]->data;
frm[5 ].value = &mitem[choice]->access.minLevel;
frm[6 ].value = &mitem[choice]->access.maxLevel;
frm[7 ].value = flags;
frm[8 ].value = &mitem[choice]->access.minAge;
frm[9 ].value = &mitem[choice]->access.maxAge;
frm[10].value = &mitem[choice]->access.sex;
frm[11].value = &mitem[choice]->access.minTimeLeft;
frm[12].value = &mitem[choice]->access.minTimeOnline;
frm[13].value = &mitem[choice]->access.timeFrame;
frm[14].value = &mitem[choice]->access.minSpeed;
frm[15].value = &mitem[choice]->access.maxSpeed;
frm[16].value = mitem[choice]->access.nodes;
frm[17].value = &password_req;
frm[18].value = mitem[choice]->password;
frm[19].value = &rip_remoteshow;
frm[20].value = &rip_localshow;
frm[21].value = &rip_reset;
FormWindow w( 1,
1,
80,
24,
0x7F,
EXPLODE | BRACKETS,
CHISEL_BORDER,
0x7F,
NULL,
0x78 );
w.define( frm,
22,
0x71,
0x4E );
w.open();
w.title( menu, 0x7E );
w << " 0 1 2 3 4 5 6 7\n"
" 12345678901234567890123456789012345678901234567890123456789012345678901234\n\n"
"\n Color:\n"
"\n Hotkey:"
"\n Function:"
"\n Data:\n"
"\n Min.Level: Nodes:"
"\n Max.Level:"
"\n Flags:"
"\n Min. Age: Password required:"
"\n Max. Age: Password:"
"\n Sex:"
"\n Time Left: ÚÄRIPÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
"\n Time Onl.: ³ Show remote: ³"
"\n Timeframe: ³ Show local: ³"
"\n Min.Speed: ³ Reset screen: ³"
"\n Max.Speed: ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ";
tsw_cursoron();
w.process();
tsw_cursoroff();
mitem[choice]->attr = rip_remoteshow ? MNU_RIP_SHOW_REMOTE : 0;
mitem[choice]->attr |= rip_localshow ? 0 : MNU_RIP_HIDE_LOCAL ;
mitem[choice]->attr |= rip_reset ? 0 : MNU_RIP_NO_RESET ;
mitem[choice]->attr |= password_req ? MENU_PASSWORD : 0;
}
for(i=0;i<MAX_MENU_ITEMS;i++)
delete mitem[i];
delete [] mitem;
delete mfile;
}
static void
simulate()
{
char cols[] = { 0,4,2,6,1,5,3,7 };
tsw_showfooter("Press any key to return", BAR_COLOR);
Window w;
w.open( 1,
1,
tsw_hsize,
tsw_vsize - 1,
0xF,
NOBORDER | EXPLODE );
char hl_att = cols[mfile->highlight & 0x7]
| (cols[(mfile->highlight & 0x70 )>>4] << 4)
| (((mfile->highlight & 0x8 )>>3)?0x00:0x08);
for(int i=0;i<=num_mitems;i++)
{
char x[160];
MenuItem mi = *mitem[i];
if(i==num_mitems)
{
w << '\n';
CLEAR_OBJECT(mi);
strcpy(mi.text,mfile->prompt);
mi.color = mfile->color;
}
char att = cols[mi.color&0x7] | (cols[(mi.color&0x70)>>4] << 4) | (((mi.color&0x8)>>3)?0x00:0x08);
strcpy(x,mi.text);
w.attrib(att);
if(x[strlen(x)-1] == ';')
{
x[strlen(x)-1] = '\0';
}
else
{
x[strlen(x)+1] = '\0';
x[strlen(x)] = '\n';
}
bool highlight = FALSE;
for(int j=0;j<strlen(x);j++)
{
switch(x[j])
{
case '^' :
{
highlight = !highlight;
if(highlight)
w.attrib(hl_att);
else
w.attrib(att);
}
break;
case '\\':
{
switch(x[j+1])
{
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7': w.attrib(cols[x[j+1]-'0'] | 0x8);
j++;
break;
case '0': w.attrib(att);
j++;
break;
default : w << '\\';
}
}
break;
default : w << x[j];
break;
}
}
if(mi.hotKey == 1)
{
if(mi.function==40)
{
append_backspace(langheader.txtPath);
FileName fn(langheader.txtPath,mi.data,".ANS");
File f(fn,fmode_read,5000);
if(f.opened())
{
char c;
for(;;)
{
if(f.read(&c,1) != 1) break;
w << c;
}
}
}
}
}
KB.get();
}

BIN
procfg/EDITMENU.OBJ Normal file

Binary file not shown.

121
procfg/EDITNODE.CPP Normal file
View File

@ -0,0 +1,121 @@
#include <stdio.h>
#include "procfg.hpp"
BitArray *gn;
static void
show_node(int n,int x,int y)
{
char str[20];
sprintf(str,"[ ] Node #%-3d",n+1);
if((*gn)[n+1])
str[1] = 'û';
tsw_mputs(x+1,y,str);
}
KEY
edit_nodes(int mode,Window& ww,int x,int y,char attr,void *data)
{
int i;
int totalcleared = 0;
byte *arr = (byte *)data;
BitArray nodes(255,1);
gn = &nodes;
for(i=1;i<=cfg.numnodes;i++)
nodes.set(i);
for(i=0;i<cfg.numnodes;i++)
{
if(arr[i/8] & (1 << (i & 7)))
{
nodes.clear(i+1);
totalcleared++;
}
}
if(!mode)
{
String str;
if(!totalcleared)
{
str = "All nodes";
}
else
{
if(totalcleared == cfg.numnodes)
{
str = "None";
}
else
{
for(i=1 ; i<=cfg.numnodes;i++)
if(nodes[i])
{
if(str.len() > 16)
{
str.delLast();
str << "....";
break;
}
else
{
str << form("%d,",i);
}
}
str.delLast();
}
}
ww.direct(x,y,attr,form("%-20.20s",(char *)str));
return 0;
}
int starty = ww.minY+y-cfg.numnodes/2;
if(starty<2)
starty = 2;
int endy = starty + cfg.numnodes+1;
if(endy > 22)
endy = 22;
SelectWindow w(cfg.numnodes,0x70,show_node);
w.open(ww.minX+x-6,starty,ww.minX+x+14,endy,0x3F,SHADOW);
//w.title(" Edit Color ",0xE);
tsw_cursoroff();
for(;;)
{
int x = w.process();
if(x < 0)
break;
if(nodes[x+1])
nodes.clear(x+1);
else
nodes.set(x+1);
}
tsw_cursoron();
for(i=0;i<32;i++)
arr[i] = 0;
for(i=1;i<=cfg.numnodes;i++)
if(!nodes[i])
arr[(i-1)/8] |= (1 << ((i-1) & 7));
return 0;
}

BIN
procfg/EDITNODE.OBJ Normal file

Binary file not shown.

477
procfg/EDITPB.CPP Normal file
View File

@ -0,0 +1,477 @@
#include <string.h>
#include <stdio.h>
#include <tswin.hpp>
#include "procfg.hpp"
void edit_modem(int node);
static void
edit_connect()
{
Field frm[]=
{
{ FRM_STRING , pbcfg.msgCon300 , 0,0 , 0 , 79 , 20, 19,2 },
{ FRM_STRING , pbcfg.msgCon1200 , 0,0 , 0 , 79 , 20, 19,3 },
{ FRM_STRING , pbcfg.msgCon1275 , 0,0 , 0 , 79 , 20, 19,4 },
{ FRM_STRING , pbcfg.msgCon2400 , 0,0 , 0 , 79 , 20, 19,5 },
{ FRM_STRING , pbcfg.msgCon4800 , 0,0 , 0 , 79 , 20, 19,6 },
{ FRM_STRING , pbcfg.msgCon7200 , 0,0 , 0 , 79 , 20, 19,7 },
{ FRM_STRING , pbcfg.msgCon9600 , 0,0 , 0 , 79 , 20, 19,8 },
{ FRM_STRING , pbcfg.msgCon12000 , 0,0 , 0 , 79 , 20, 19,9 },
{ FRM_STRING , pbcfg.msgCon14400 , 0,0 , 0 , 79 , 20, 19,10 },
{ FRM_STRING , pbcfg.msgCon16800 , 0,0 , 0 , 79 , 20, 19,11 },
{ FRM_STRING , pbcfg.msgCon19200 , 0,0 , 0 , 79 , 20, 19,12 },
{ FRM_STRING , pbcfg.msgCon21600 , 0,0 , 0 , 79 , 20, 19,13 },
{ FRM_STRING , pbcfg.msgCon24000 , 0,0 , 0 , 79 , 20, 19,14 },
{ FRM_STRING , pbcfg.msgCon26400 , 0,0 , 0 , 79 , 20, 19,15 },
{ FRM_STRING , pbcfg.msgCon28800 , 0,0 , 0 , 79 , 20, 57,2 },
{ FRM_STRING , pbcfg.msgCon31200 , 0,0 , 0 , 79 , 20, 57,3 },
{ FRM_STRING , pbcfg.msgCon33600 , 0,0 , 0 , 79 , 20, 57,4 },
{ FRM_STRING , pbcfg.msgCon36000 , 0,0 , 0 , 79 , 20, 57,5 },
{ FRM_STRING , pbcfg.msgCon38400 , 0,0 , 0 , 79 , 20, 57,6 },
{ FRM_STRING , pbcfg.msgCon57600 , 0,0 , 0 , 79 , 20, 57,7 },
{ FRM_STRING , pbcfg.msgCon64000 , 0,0 , 0 , 79 , 20, 57,8 },
{ FRM_STRING , pbcfg.msgCon115200 , 0,0 , 0 , 79 , 20, 57,9 },
{ FRM_LONG , &pbcfg.userConBps1 , 0,0 , 0 , 5 , 6, 40,10 },
{ FRM_STRING , pbcfg.msgConUser1 , 0,0 , 0 , 79 , 20, 57,10 },
{ FRM_LONG , &pbcfg.userConBps2 , 0,0 , 0 , 5 , 6, 40,11 },
{ FRM_STRING , pbcfg.msgConUser2 , 0,0 , 0 , 79 , 20, 57,11 },
{ FRM_LONG , &pbcfg.userConBps3 , 0,0 , 0 , 5 , 6, 40,12 },
{ FRM_STRING , pbcfg.msgConUser3 , 0,0 , 0 , 79 , 20, 57,12 },
{ FRM_LONG , &pbcfg.userConBps4 , 0,0 , 0 , 5 , 6, 40,13 },
{ FRM_STRING , pbcfg.msgConUser4 , 0,0 , 0 , 79 , 20, 57,13 },
{ FRM_LONG , &pbcfg.userConBps5 , 0,0 , 0 , 5 , 6, 40,14 },
{ FRM_STRING , pbcfg.msgConUser5 , 0,0 , 0 , 79 , 20, 57,14 },
{ FRM_LONG , &pbcfg.userConBps6 , 0,0 , 0 , 5 , 6, 40,15 },
{ FRM_STRING , pbcfg.msgConUser6 , 0,0 , 0 , 79 , 20, 57,15 }
};
FormWindow w( 1,
5,
80,
22,
0x3F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.open();
w.title( "Connect Result Strings", 0x3E );
w.attrib(0x3F);
w << "\n 300 bps call: 28800 bps call:\n"
" 1200 bps call: 31200 bps call:\n"
"1200/75 bps call: 33600 bps call:\n"
" 2400 bps call: 36000 bps call:\n"
" 4800 bps call: 38400 bps call:\n"
" 7200 bps call: 57600 bps call:\n"
" 9600 bps call: 64000 bps call:\n"
" 12000 bps call: 115200 bps call:\n"
" 14400 bps call: bps call:\n"
" 16800 bps call: bps call:\n"
" 19200 bps call: bps call:\n"
" 21600 bps call: bps call:\n"
" 24000 bps call: bps call:\n"
" 26400 bps call: bps call:\n";
w.define( frm,
34,
0x31,
0x4E );
tsw_cursoron();
w.process();
tsw_cursoroff();
}
static void
edit_commands()
{
bool manual_answer = !!(pbcfg.flags & MODEM_MANUAL_ANSWER);
Field frm[]=
{
{ FRM_STRING , pbcfg.cmdInit1 , 0,0 , 0 , 79 , 30, 21,2 },
{ FRM_STRING , pbcfg.cmdInit2 , 0,0 , 0 , 79 , 30, 21,3 },
{ FRM_STRING , pbcfg.cmdInit3 , 0,0 , 0 , 79 , 30, 21,4 },
{ FRM_STRING , pbcfg.msgOk , 0,0 , 0 , 79 , 30, 21,6 },
{ FRM_STRING , pbcfg.cmdOffHook , 0,0 , 0 , 79 , 30, 21,7 },
{ FRM_STRING , pbcfg.cmdDown , 0,0 , 0 , 79 , 30, 21,8 },
{ FRM_YESNO , &manual_answer , 0,0 , 0 , 3 , 3 , 21,10 },
{ FRM_STRING , pbcfg.msgRing , 0,0 , 0 , 79 , 30, 21,11 },
{ FRM_STRING , pbcfg.cmdAnswer , 0,0 , 0 , 79 , 30, 21,12 },
{ FRM_STRING , pbcfg.msgConExternal , 0,0 , 0 , 79 , 30, 21,14 },
{ FRM_INT , &pbcfg.externalErrorLevel,0,0,0 , 3 , 4 , 21,15 }
};
FormWindow w( 4,
6,
60,
22,
0x3F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.open();
w.title( "Command/Message Strings", 0x3E);
w.attrib(0x3F);
w << "\n Init Command 1:\n"
" Init Command 2:\n"
" Init Command 3:\n\n"
" Ok Message:\n"
" Off Hook Command:\n"
" Down Command:\n\n"
" Manual Answer:\n"
" RING Message:\n"
" Answer Command:\n\n"
" External/Fax Msg:\n"
" ÀÄ>Errorlevel:";
w.define( frm,
11,
0x31,
0x4E );
tsw_cursoron();
w.process();
tsw_cursoroff();
if(manual_answer)
pbcfg.flags |= MODEM_MANUAL_ANSWER;
else
pbcfg.flags &= ~MODEM_MANUAL_ANSWER;
}
static void
edit_hardware()
{
bool locked = !!(pbcfg.flags & MODEM_LOCKED);
Field frm[]=
{
{ FRM_INT , &pbcfg.port , 0,0 , 0 , 1 , 2 , 18,2 },
{ FRM_YESNO , &locked , 0,0 , 0 , 3 , 3 , 18,4 },
{ FRM_LONG , &pbcfg.maxBps , 0,0 , 0 , 6 , 7 , 18,5 },
{ FRM_INT , &pbcfg.commandDelay , 0,0 , 0 , 2 , 2 , 18,7 },
{ FRM_INT , &pbcfg.answerDelay , 0,0 , 0 , 2 , 2 , 18,8 }
};
FormWindow w( 24,
7,
55,
17,
0x3F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.open();
w.title( "Modem Hardware Setup", 0x3E );
w.attrib(0x30);
w << "\n COM Port:\n"
"\n"
" Locked Speed:\n"
" Max Bps Rate:\n"
"\n"
" Modem Delay:\n"
" Answer Delay:\n";
w.define( frm,
5,
0x31,
0x4E );
tsw_cursoron();
w.process();
tsw_cursoroff();
if(locked)
pbcfg.flags |= MODEM_LOCKED;
else
pbcfg.flags &= ~MODEM_LOCKED;
}
/*
static void
edit_other()
{
Field frm[]=
{
{ FRM_STRING , pbcfg.ext_connect1 , 0,0 , 0 , 39 , 30, 18,1 },
{ FRM_INT , &pbcfg.ext_errlevel1 , 0,0 , 0 , 3 , 4, 62,1 },
{ FRM_STRING , pbcfg.ext_connect2 , 0,0 , 0 , 39 , 30, 18,2 },
{ FRM_INT , &pbcfg.ext_errlevel2 , 0,0 , 0 , 3 , 4, 62,2 }
};
FormWindow w(4,6,73,9,0x3F,SHADOW|EXPLODE);
w.open();
w.title(" External Mail Result Strings ",0x3E);
w.attrib(0x3F);
w << " Match String 1: Errorlevel:\n"
" Match String 2: Errorlevel:";
w.define(frm,4,0x3E,0x70);
tsw_cursoron();
w.process();
tsw_cursoroff();
}
*/
/*
void
edit_pb()
{
Field frm[]=
{
{ FRM_UNSIGNED, &pbcfg.baud , 0,0 , 0 , 5 , 6 , 18,2 },
{ FRM_INT , &pbcfg.port , 0,0 , 0 , 1 , 2 , 18,3 },
{ FRM_INT , &pbcfg.blanktime , 0,0 , 0 , 4 , 4 , 18,4 },
{ FRM_INT , &pbcfg.delay , 0,0 , 0 , 2 , 2 , 18,5 },
{ FRM_STRING , pbcfg.initstring , 0,0 , 0 , 69 , 30, 18,6 },
{ FRM_STRING , pbcfg.initok , 0,0 , 0 , 39 , 30, 18,7 },
{ FRM_STRING , pbcfg.busystring , 0,0 , 0 , 69 , 30, 18,8 },
{ FRM_YESNO , &pbcfg.forceanswer , 0,0 , 0 , 3 , 3 , 18,9 },
{ FRM_STRING , pbcfg.ring , 0,0 , 0 , 39 , 30, 18,10 },
{ FRM_STRING , pbcfg.answer , 0,0 , 0 , 39 , 30, 18,11 },
{ FRM_STRING , pbcfg.connect300 , 0,0 , 0 , 39 , 30, 18,13 },
{ FRM_STRING , pbcfg.connect1200 , 0,0 , 0 , 39 , 30, 18,14 },
{ FRM_STRING , pbcfg.connect2400 , 0,0 , 0 , 39 , 30, 18,15 },
{ FRM_STRING , pbcfg.connect4800 , 0,0 , 0 , 39 , 30, 18,16 },
{ FRM_STRING , pbcfg.connect7200 , 0,0 , 0 , 39 , 30, 18,17 },
{ FRM_STRING , pbcfg.connect9600 , 0,0 , 0 , 39 , 30, 18,18 },
{ FRM_STRING , pbcfg.connect12000 , 0,0 , 0 , 39 , 30, 18,19 },
{ FRM_STRING , pbcfg.connect14400 , 0,0 , 0 , 39 , 30, 18,20 },
{ FRM_STRING , pbcfg.connect19200 , 0,0 , 0 , 39 , 30, 18,21 },
{ FRM_STRING , pbcfg.connect38400 , 0,0 , 0 , 39 , 30, 18,22 }
};
FormWindow w(4,1,55,25,0x3F,SHADOW|EXPLODE);
w.open();
w.title(" Modem Parameters ",0x3E);
w.attrib(0x3F);
w << "\n Max Baud Rate :\n"
" Com-port :\n"
" Blanktime (s) :\n"
" Modem delay :\n"
" Init string :\n"
" Init response :\n"
" Busy string :\n"
" Manual Answer :\n"
" RING string :\n"
" Answer string :\n\n"
" 300 bps call:\n"
" 1200 bps call:\n"
" 2400 bps call:\n"
" 4800 bps call:\n"
" 7200 bps call:\n"
" 9600 bps call:\n"
" 12000 bps call:\n"
" 14400 bps call:\n"
" 19200 bps call:\n"
" 38400 bps call:";
w.define(frm,20,0x3E,0x70);
tsw_cursoron();
w.process();
tsw_cursoroff();
}
*/
void
edit_pb()
{
menu_item menuitems[]=
{
{ 'D', 8,8, " Default" },
{ 'N', 5,5, " Node Specific" },
{ 0,0,0,NULL }
};
PopMenu menu( menuitems,
0x70,
0x5E );
menu.open( 45,
15,
70,
18,
0x5F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x5D,
NULL,
0x51 );
//menu.border(0x5E);
menu.title( "Modem Parameters", 0x5E );
for(;;)
{
tsw_showfooter("", BAR_COLOR);
int choice=menu.process();
if(choice<1) break;
switch(choice)
{
case 1: edit_modem(0); break;
case 2:
{
int n = 1;
tsw_cursoron();
Window w( 40,
17,
65,
19,
0x30,
SHADOW,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.open();
w << " Enter Node #: ";
w.attrib(0x31);
w.scan(n,3,4);
tsw_cursoroff();
if(n < 1 || n > cfg.numnodes)
tsw_beep();
else
{
w.close();
edit_modem(n);
}
}
break;
}
}
}
void
edit_modem(int node)
{
FileName fn,fn2;
menu_item menuitems[]=
{
{ 'H', 2,2, " Hardware Setup" },
{ 'M', 4,4, " coMmand Strings" },
{ 'N', 4,4, " coNnect Strings" },
{ 0,0,0,NULL }
};
PopMenu menu( menuitems,
0x70,
0x5E );
menu.open( 45,
15,
70,
19,
0x5F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x5D,
NULL,
0x51 );
//menu.border(0x5F);
if(node)
menu.title( form( "Setup #%d", node ), 0x5E );
else
menu.title( "Default Setup", 0x5E );
if(node)
fn(syspath,form("MODEM%03d.PB",node));
else
fn(syspath,"MODEM.PB");
File f;
word crc;
memset(&pbcfg,0,sizeof(pbcfg));
if(!f.open(fn))
f.open(FileName(syspath,"MODEM.PB"));
if(f.opened())
{
f.read(&pbcfg,sizeof(pbcfg));
f.close();
crc = ::crc(&pbcfg,sizeof(pbcfg));
}
else
{
crc=0xFFFF;
}
again:
for(;;)
{
tsw_showfooter("", BAR_COLOR);
int choice=menu.process();
if(choice<1) break;
switch(choice)
{
case 1: edit_hardware(); break;
case 2: edit_commands(); break;
case 3: edit_connect(); break;
// case 4: edit_other(); break;
}
}
if(crc != ::crc(&pbcfg,sizeof(pbcfg)))
{
int save_choice = ask_save();
if(save_choice < 0)
goto again;
if(save_choice == 0 )
{
fn2 = fn;
fn2.changeExt("BAK");
unlink(fn2);
rename(fn,fn2);
f.open(fn,fmode_create);
f.write(&pbcfg,sizeof(pbcfg));
f.close();
}
}
}

BIN
procfg/EDITPB.OBJ Normal file

Binary file not shown.

174
procfg/EDITPROT.CPP Normal file
View File

@ -0,0 +1,174 @@
#include <string.h>
#include <tswin.hpp>
#include "procfg.hpp"
static void
prot_list_func(int i,int x,int y)
{
char str[81];
strcpy(str,p[i].name);
if(strlen(str)>32) str[30]=0;
tsw_maputs(x+1,y,0x30,str);
}
void
edit_protocol()
{
Field frm[]=
{
{ FRM_STRING , 0 , 0,0 , 0 , 49 , 49, 17,2 }, // Protocol name
{ FRM_CHAR , 0 , 0,0 , FRM_UPPER , 1 , 1 , 17,4 }, // Protocol key
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,5 }, // batch
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,6 }, // enabled
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,7 }, // both
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 3 , 17,8 }, // bimodem
{ FRM_STRING , 0 , 0,0 , FRM_UPPER , 12 , 12, 17,9 }, // Protocol logfile
{ FRM_STRING , 0 , 0,0 , FRM_UPPER , 12 , 12, 17,10 }, // Protocol ctlfile
{ FRM_STRING , 0 , 0,0 , 0 , 127, 59, 17,12 }, // Download command
{ FRM_STRING , 0 , 0,0 , 0 , 127, 59, 17,14 }, // Upload command
{ FRM_STRING , 0 , 0,0 , 0 , 79 , 59, 17,16 }, // Download string
{ FRM_STRING , 0 , 0,0 , 0 , 79 , 59, 17,17 }, // Upload string
{ FRM_STRING , 0 , 0,0 , 0 , 39 , 39, 17,19 }, // Download keyword
{ FRM_STRING , 0 , 0,0 , 0 , 39 , 39, 17,20 }, // Upload keyword
{ FRM_INT , 0 , 0,0 , 0 , 2 , 3 , 17,22 }, // Upload keyword
{ FRM_UNSIGNED, 0 , 0,0 , 0 , 3 , 4 , 65,5 },
{ FRM_YESNO , 0 , 0,0 , 0 , 3 , 4 , 65,7 }
};
SelectWindow sw;
sw.open( 40,
5,
75,
17,
0x30,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x3F,
NULL,
0x38 );
sw.title( "Select Protocol", 0x3E );
sw.define( num_proto,
0x1E,
prot_list_func,
0,
NULL,
select_hotkeys );
for(;;)
{
int batch,both,enabled,bimodem,loconly;
tsw_showfooter( "\x1<Del>\x1 - Delete Protocol \x1<Ins>\x1 - Add Protocol \x1<Enter>\x1 - Edit",
BAR_NORM,
BAR_HIGH );
sw.redefine(num_proto);
int choice=sw.process();
if(choice==SL_ESC) break;
if(choice==SL_HOTKEY)
{
switch(sw.hotkey)
{
case KEY_INS: memset(&p[num_proto],0,sizeof(protocol));
choice=num_proto++;
sw.current=choice;
break;
case KEY_DEL: for(int i=sw.current;i<num_proto-1;i++) p[i]=p[i+1];
if(num_proto) num_proto--;
continue;
break;
}
}
if(!p[choice].name[0])
{
p[choice].flags = PROT_ENABLED | PROT_BATCH;
strcpy(p[choice].logfile,"DSZLOG.TXT");
strcpy(p[choice].ctlfile,"DSZCTL.TXT");
strcpy(p[choice].dlstring,"#");
strcpy(p[choice].dlkeyword,"S");
strcpy(p[choice].ulkeyword,"R");
p[choice].wordnr = 10;
p[choice].eff = 95;
}
if(p[choice].eff>100 || p[choice].eff<50) p[choice].eff=90;
batch =(p[choice].flags&PROT_BATCH )?1:0;
both =(p[choice].flags&PROT_BOTH )?1:0;
enabled=(p[choice].flags&PROT_ENABLED)?1:0;
bimodem=(p[choice].flags&PROT_BIM )?1:0;
loconly=(p[choice].flags&PROT_LOCAL )?1:0;
frm[0].value=p[choice].name;
frm[1].value=&p[choice].key;
frm[2].value=&batch;
frm[3].value=&enabled;
frm[4].value=&both;
frm[5].value=&bimodem;
frm[6].value=p[choice].logfile;
frm[7].value=p[choice].ctlfile;
frm[8].value=p[choice].dlcom;
frm[9].value=p[choice].ulcom;
frm[10].value=p[choice].dlstring;
frm[11].value=p[choice].ulstring;
frm[12].value=p[choice].dlkeyword;
frm[13].value=p[choice].ulkeyword;
frm[14].value=&p[choice].wordnr;
frm[15].value=&p[choice].eff;
frm[16].value=&loconly;
FormWindow w( 1,
1,
80,
25,
0x1F,
BRACKETS,
CHISEL_BORDER,
0x19,
NULL,
0x10 );
w.open();
w.title( "Protocol Configuration", 0x1E );
w.attrib( 0x1F );
w << "\n Protocol Name:\n\n"
" Hotkey:\n"
" Batch: Efficiency: %\n"
" Enabled:\n"
" Both-way: Local only:\n"
" Bimodem:\n"
" Log-file:\n"
" Control-file:\n\n"
" Download cmd:\n\n"
" Upload cmd:\n\n"
" Downl. string:\n"
" Upload string:\n\n"
" Downl. keyw.:\n"
" Upload keyw.:\n\n"
" File word nr:";
w.define( frm,
17,
0x1B,
0x4E );
tsw_cursoron();
w.process();
tsw_cursoroff();
p[choice].flags=0;
if(batch) p[choice].flags |= PROT_BATCH;
if(both) p[choice].flags |= PROT_BOTH;
if(enabled) p[choice].flags |= PROT_ENABLED;
if(bimodem) p[choice].flags |= PROT_BIM;
if(loconly) p[choice].flags |= PROT_LOCAL;
}
}

BIN
procfg/EDITPROT.OBJ Normal file

Binary file not shown.

440
procfg/EDITPVT.CPP Normal file
View File

@ -0,0 +1,440 @@
/* ------------------------------------------------------------
* Filename ............... EditPvt.Cpp
*
* General Purpose ........ Edit private files settings
* ------------------------------------------------------------
* First date ............. 19 dec 1993
*
* First in version ....... 2.00
*
* Written by ............. Alain Schellinck
* ------------------------------------------------------------
* Revisions:
* ----------
*
* Date | By | Purpose |
* ---------+----+--------------------------------------------+
* | | |
* | | |
* | | |
*/
/*-------------------------------------------------------------------------*/
#include <io.h>
#include <stdlib.h>
#include <string.h>
#define Use_LinkedList
#include <TsWin.Hpp>
#define Uses_PbUsersIdx
#define Uses_PbUsersPb
#define Uses_PbUsersBbs
#include "ThProCfg.Hpp"
#include "Template.Hpp"
struct FileEntry
{
FileName fname;
LngT size;
Date date;
Time time;
};
LinkedList<_PrivateFile> far pvtfiles;
LinkedList<FileEntry> far filelist;
/*--] Code [-------------------------------------] sortedFileList [--------*/
/*
* Routine : compare()
* Purpose : compare two objects from the linked list
* ------------------------------------------------------------------------
* Parameters: pointer to 2 objects
* Return : return code from stricmp()
*
*/
int
CompareFileEntry(FileEntry& e1,FileEntry& e2)
{
return stricmp(e1.fname, e2.fname);
}
/*--] Code [-------------------------------------] File pick functions [---*/
/*
* Routine : listFile()
* Purpose : list the specified private file record
* ------------------------------------------------------------------------
* Parameters: record number, X and Y coordinates
* Return : None
*
*/
LCL void listFile(IntT recno, IntT x, IntT y)
{
ChrT c = '+';
char lp = '(';
char rp = ')';
FileName fn(pvtfiles[recno].fname);
if(strchr(fn,'\\'))
{
if(access(fn,0))
c = '-';
}
else
{
lp = rp = ' ';
if(access(FileName(cfg.pvtuploadpath, fn), 0))
c = '-';
}
fn.stripPath();
String keep_kill;
if(pvtfiles[recno].attr & PVTFILE_KEEP)
keep_kill = "KEEP";
else
keep_kill = "KILL";
tsw_maputs(x + 1, y, setFBColor(hYellow, nMagenta), form("[%c] %s %c%-12s%c - %-28.28s [%4s]",
c,
ChrP(pvtfiles[recno].date.format("DD MMM YY")),
lp,(char *)fn,rp,
pvtfiles[recno].to,
(char *)keep_kill
)
);
}
/*
* Routine : listFileEntry()
* Purpose : list the specified file from private files directory
* ------------------------------------------------------------------------
* Parameters: record number, X and Y coordinates
* Return : None
*
*/
LCL void listFileEntry(IntT recno, IntT x, IntT y)
{
FileEntry entry = filelist[recno];
tsw_maputs(x + 1, y, setFBColor(hYellow, nBlue), form("%-12.12s %s %s %6lu",
(char *)entry.fname,
(char *)entry.date.format("DD MMM CCYY"),
(char *)entry.time.format("HH:MM.SS"),
entry.size
)
);
}
/*
* Routine : editPvtFile()
* Purpose : edit private files
* ------------------------------------------------------------------------
* Parameters: None
* Return : None
*
*/
void editPvtFile()
{
KEY hotkeys[] =
{
KEY_INS,
KEY_DEL,
0
};
Field frm[]=
{
/* TYPE dataPtr choices hookFunc flags len width x y */
/* ------------------------------------------------------------------------------------------------------- */
{ FRM_STRING ,0 ,0 ,0 ,FRM_UPPER ,79 ,50 ,13 ,2 },
{ FRM_STRING ,0 ,0 ,0 ,0 ,35 ,36 ,13 ,4 },
{ FRM_STRING ,0 ,0 ,0 ,0 ,35 ,36 ,13 ,5 },
{ FRM_YESNO ,0 ,0 ,0 ,0 ,3 ,3 ,13 ,7 }
};
pvtfiles.kill();
File f;
if(f.open(FileName(syspath,"PVTFILES.PB")))
{
for(;;)
{
_PrivateFile tmp;
if(f.read(&tmp,sizeof(tmp)) != sizeof(tmp))
break;
if(tmp.fname[0])
pvtfiles.add(tmp);
}
f.close();
}
SelectWindow sw( pvtfiles.count(),
0x70,
listFile,
0,
NULL,
hotkeys );
sw.open( 3,
4,
77,
21,
0x5F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x5D,
NULL,
0x51 );
sw.title( "Personal Files", 0x5E );
for(;;)
{
tsw_showfooter( "\x1<Del>\x1 - Delete \x1<Ins>\x1 - Add \x1<Enter>\x1 - Edit", BAR_NORM, BAR_HIGH );
sw.redefine(pvtfiles.count());
ShrtT choice = sw.process();
if(choice == SL_ESC)
break;
if(choice == SL_HOTKEY)
{
switch(sw.hotkey)
{
case KEY_INS:
{
_PrivateFile tmp;
CLEAR_OBJECT(tmp);
choice = pvtfiles.count();
sw.current = choice;
tmp.date.today();
strcpy(tmp.from,cfg.sysopname);
pvtfiles.add(tmp);
}
break;
case KEY_DEL:
{
if(!pvtfiles.count())
{
tsw_beep();
continue;
}
FileName fn(cfg.pvtuploadpath,pvtfiles[sw.current].fname);
if(!access(fn,0))
if(askYesNo(form("Delete file %s ?",pvtfiles[sw.current].fname)) == TRUE)
unlink(fn);
pvtfiles.get(sw.current);
pvtfiles.remove();
continue;
}
}
}
ShrtT recno = choice;
KEY pickkeys[]=
{
KEY_ALTL , // list
NULL
};
FormWindow w( 7,
8,
74,
17,
0x3F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.define( frm,
4,
0x31,
0x4E,
pickkeys,
NULL );
w.open();
w.title( "Edit Personal File", 0x3E );
w.attrib( 0x3F );
w << "\n FileName:\n"
"\n From user:"
"\n To user:\n"
"\n Delete?:";
bool kill_file = !(pvtfiles[recno].attr & PVTFILE_KEEP);
frm[0].value = pvtfiles[recno].fname;
frm[1].value = pvtfiles[recno].from;
frm[2].value = pvtfiles[recno].to;
frm[3].value = &kill_file;
for(;;)
{
tsw_showfooter("[\001ALT-L\001] Show file- or userlist", BAR_NORM, BAR_HIGH );
tsw_cursoron();
ShrtT choice = w.process();
if(choice == ED_ESC)
break;
if(choice == ED_HOT)
{
switch(w.scanHotKey)
{
case KEY_ALTL:
{
User user;
User::setDir(cfg.msgpath);
NumUsers = ShrtT(User::numUsers());
userFilter filter;
fillUserList(filter);
CLEAR_OBJECT(usrFind);
switch(w.getField())
{
case 0: // filename
{
FileName mask(cfg.pvtuploadpath);
mask.appendBS();
mask << "*.*";
filelist.kill();
{
DirScan find;
int status = find.first(mask);
while(status == TRUE)
{
FileEntry entry;
entry.fname = find.name();
entry.size = find.size();
entry.date = find.date();
entry.time = find.time();
filelist.add(entry);
status = find.next();
}
}
if(filelist.count() != 0)
{
filelist.sort(CompareFileEntry);
SelectWindow sw( filelist.count(),
0x70,
listFileEntry,
0,
NULL,
NULL );
sw.open( 13,
6,
67,
19,
0x17,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x19,
NULL,
0x10 );
sw.title( ChrP( mask ), 0x1E );
tsw_cursoroff();
int fileno = sw.process();
if(fileno != SL_ESC)
{
strcpy(pvtfiles[recno].fname, filelist[fileno].fname);
}
}
continue;
}
case 1: // from user
{
ShrtT userno = pickUser(0);
if(userno != -1)
{
user.read(getDiskRecNo(userno));
strcpy(pvtfiles[recno].from, user.name);
}
continue;
}
case 2: // to user
{
ShrtT userno = pickUser(0);
if(userno != -1)
{
user.read(getDiskRecNo(userno));
strcpy(pvtfiles[recno].to, user.name);
}
continue;
}
}
}
}
}
}
pvtfiles[choice].attr = 0;
if(!kill_file)
pvtfiles[choice].attr |= PVTFILE_KEEP;
}
if(f.open(FileName(syspath,"PVTFILES.PB"),fmode_create))
{
for(pvtfiles.rewind(); !pvtfiles.eol();pvtfiles++)
{
if(f.write(&pvtfiles.get(),sizeof(_PrivateFile)) != sizeof(_PrivateFile))
break;
}
f.close();
}
tsw_cursoroff();
}
/*---------------------------] END OF THE CODE [---------------------------*/

BIN
procfg/EDITPVT.OBJ Normal file

Binary file not shown.

213
procfg/EDITSTAT.CPP Normal file
View File

@ -0,0 +1,213 @@
#include <tswin.hpp>
#include "procfg.hpp"
void edit_hourly();
void edit_weekly();
void
edit_stats()
{
menu_item mi[] = {
{ 'H' , 2,2, " Hourly Usage" },
// { 'D' , 2,2, " Daily Usage" },
{ 'W' , 2,2, " Weekly Usage" },
{ 0 , 0,0, NULL }
};
PopMenu pm(mi,0x70,0x5E);
pm.open(40,18,65,22,0x5F,SHADOW);
pm.title(" Edit Statistics ");
for(;;)
{
int item = pm.process();
switch(item)
{
case 1: edit_hourly(); break;
// case 2: edit_daily(); break;
case 2: edit_weekly(); break;
default: return;
}
}
}
struct timelog
{
int numdays;
Date lastdate;
long hours[24];
long days[7];
long weeks[53];
long totalcalls;
int daysactive;
byte extra[100];
};
static timelog tl;
static int
read_timelog()
{
File f;
if(!f.open(FileName(syspath,"TIMELOG.PRO"),fmode_read)) return -1;
f.read(&tl,sizeof(tl));
return 0;
}
static void
write_timelog()
{
File f;
f.open(FileName(syspath,"TIMELOG.PRO"),fmode_create);
f.write(&tl,sizeof(tl));
}
void
edit_hourly()
{
if(read_timelog()<0)
{
tsw_beep();
return;
}
Field fld[] = {
{ FRM_LONG, &tl.hours[0] , 0,0 , 0 , 7 , 8 , 16,2 },
{ FRM_LONG, &tl.hours[1] , 0,0 , 0 , 7 , 8 , 16,3 },
{ FRM_LONG, &tl.hours[2] , 0,0 , 0 , 7 , 8 , 16,4 },
{ FRM_LONG, &tl.hours[3] , 0,0 , 0 , 7 , 8 , 16,5 },
{ FRM_LONG, &tl.hours[4] , 0,0 , 0 , 7 , 8 , 16,6 },
{ FRM_LONG, &tl.hours[5] , 0,0 , 0 , 7 , 8 , 16,7 },
{ FRM_LONG, &tl.hours[6] , 0,0 , 0 , 7 , 8 , 16,8 },
{ FRM_LONG, &tl.hours[7] , 0,0 , 0 , 7 , 8 , 16,9 },
{ FRM_LONG, &tl.hours[8] , 0,0 , 0 , 7 , 8 , 16,10 },
{ FRM_LONG, &tl.hours[9] , 0,0 , 0 , 7 , 8 , 16,11 },
{ FRM_LONG, &tl.hours[10] , 0,0 , 0 , 7 , 8 , 16,12 },
{ FRM_LONG, &tl.hours[11] , 0,0 , 0 , 7 , 8 , 16,13 },
{ FRM_LONG, &tl.hours[12] , 0,0 , 0 , 7 , 8 , 41,2 },
{ FRM_LONG, &tl.hours[13] , 0,0 , 0 , 7 , 8 , 41,3 },
{ FRM_LONG, &tl.hours[14] , 0,0 , 0 , 7 , 8 , 41,4 },
{ FRM_LONG, &tl.hours[15] , 0,0 , 0 , 7 , 8 , 41,5 },
{ FRM_LONG, &tl.hours[16] , 0,0 , 0 , 7 , 8 , 41,6 },
{ FRM_LONG, &tl.hours[17] , 0,0 , 0 , 7 , 8 , 41,7 },
{ FRM_LONG, &tl.hours[18] , 0,0 , 0 , 7 , 8 , 41,8 },
{ FRM_LONG, &tl.hours[19] , 0,0 , 0 , 7 , 8 , 41,9 },
{ FRM_LONG, &tl.hours[20] , 0,0 , 0 , 7 , 8 , 41,10 },
{ FRM_LONG, &tl.hours[21] , 0,0 , 0 , 7 , 8 , 41,11 },
{ FRM_LONG, &tl.hours[22] , 0,0 , 0 , 7 , 8 , 41,12 },
{ FRM_LONG, &tl.hours[23] , 0,0 , 0 , 7 , 8 , 41,13 },
{ FRM_LONG, &tl.totalcalls , 0,0 , 0 , 7 , 8 , 34,15 }
};
FormWindow w(9,3,62,20,0x3F,SHADOW);
w.open();
w.title(form(" Hourly System Usage (%d days) ",tl.numdays));
w << "\n";
for(int i=0;i<12;i++) w << form(" %02d:00-%02d:59 : %02d:00-%02d:59 :\n",i,i,i+12,i+12);
w << "\n Total # remote calls :";
w.define(fld,25,0x3E);
tsw_cursoron();
w.process();
tsw_cursoroff();
write_timelog();
}
void
edit_weekly()
{
if(read_timelog()<0)
{
tsw_beep();
return;
}
Field fld[] = {
{ FRM_LONG, &tl.weeks[0] , 0,0 , 0 , 5 , 6 , 7, 2 },
{ FRM_LONG, &tl.weeks[1] , 0,0 , 0 , 5 , 6 , 7, 3 },
{ FRM_LONG, &tl.weeks[2] , 0,0 , 0 , 5 , 6 , 7, 4 },
{ FRM_LONG, &tl.weeks[3] , 0,0 , 0 , 5 , 6 , 7, 5 },
{ FRM_LONG, &tl.weeks[4] , 0,0 , 0 , 5 , 6 , 7, 6 },
{ FRM_LONG, &tl.weeks[5] , 0,0 , 0 , 5 , 6 , 7, 7 },
{ FRM_LONG, &tl.weeks[6] , 0,0 , 0 , 5 , 6 , 7, 8 },
{ FRM_LONG, &tl.weeks[7] , 0,0 , 0 , 5 , 6 , 7, 9 },
{ FRM_LONG, &tl.weeks[8] , 0,0 , 0 , 5 , 6 , 7,10 },
{ FRM_LONG, &tl.weeks[9] , 0,0 , 0 , 5 , 6 , 7,11 },
{ FRM_LONG, &tl.weeks[10] , 0,0 , 0 , 5 , 6 , 7,12 },
{ FRM_LONG, &tl.weeks[11] , 0,0 , 0 , 5 , 6 , 19, 2 },
{ FRM_LONG, &tl.weeks[12] , 0,0 , 0 , 5 , 6 , 19, 3 },
{ FRM_LONG, &tl.weeks[13] , 0,0 , 0 , 5 , 6 , 19, 4 },
{ FRM_LONG, &tl.weeks[14] , 0,0 , 0 , 5 , 6 , 19, 5 },
{ FRM_LONG, &tl.weeks[15] , 0,0 , 0 , 5 , 6 , 19, 6 },
{ FRM_LONG, &tl.weeks[16] , 0,0 , 0 , 5 , 6 , 19, 7 },
{ FRM_LONG, &tl.weeks[17] , 0,0 , 0 , 5 , 6 , 19, 8 },
{ FRM_LONG, &tl.weeks[18] , 0,0 , 0 , 5 , 6 , 19, 9 },
{ FRM_LONG, &tl.weeks[19] , 0,0 , 0 , 5 , 6 , 19,10 },
{ FRM_LONG, &tl.weeks[20] , 0,0 , 0 , 5 , 6 , 19,11 },
{ FRM_LONG, &tl.weeks[21] , 0,0 , 0 , 5 , 6 , 19,12 },
{ FRM_LONG, &tl.weeks[22] , 0,0 , 0 , 5 , 6 , 31, 2 },
{ FRM_LONG, &tl.weeks[23] , 0,0 , 0 , 5 , 6 , 31, 3 },
{ FRM_LONG, &tl.weeks[24] , 0,0 , 0 , 5 , 6 , 31, 4 },
{ FRM_LONG, &tl.weeks[25] , 0,0 , 0 , 5 , 6 , 31, 5 },
{ FRM_LONG, &tl.weeks[26] , 0,0 , 0 , 5 , 6 , 31, 6 },
{ FRM_LONG, &tl.weeks[27] , 0,0 , 0 , 5 , 6 , 31, 7 },
{ FRM_LONG, &tl.weeks[28] , 0,0 , 0 , 5 , 6 , 31, 8 },
{ FRM_LONG, &tl.weeks[29] , 0,0 , 0 , 5 , 6 , 31, 9 },
{ FRM_LONG, &tl.weeks[30] , 0,0 , 0 , 5 , 6 , 31,10 },
{ FRM_LONG, &tl.weeks[31] , 0,0 , 0 , 5 , 6 , 31,11 },
{ FRM_LONG, &tl.weeks[32] , 0,0 , 0 , 5 , 6 , 31,12 },
{ FRM_LONG, &tl.weeks[33] , 0,0 , 0 , 5 , 6 , 43, 2 },
{ FRM_LONG, &tl.weeks[34] , 0,0 , 0 , 5 , 6 , 43, 3 },
{ FRM_LONG, &tl.weeks[35] , 0,0 , 0 , 5 , 6 , 43, 4 },
{ FRM_LONG, &tl.weeks[36] , 0,0 , 0 , 5 , 6 , 43, 5 },
{ FRM_LONG, &tl.weeks[37] , 0,0 , 0 , 5 , 6 , 43, 6 },
{ FRM_LONG, &tl.weeks[38] , 0,0 , 0 , 5 , 6 , 43, 7 },
{ FRM_LONG, &tl.weeks[39] , 0,0 , 0 , 5 , 6 , 43, 8 },
{ FRM_LONG, &tl.weeks[40] , 0,0 , 0 , 5 , 6 , 43, 9 },
{ FRM_LONG, &tl.weeks[41] , 0,0 , 0 , 5 , 6 , 43,10 },
{ FRM_LONG, &tl.weeks[42] , 0,0 , 0 , 5 , 6 , 43,11 },
{ FRM_LONG, &tl.weeks[43] , 0,0 , 0 , 5 , 6 , 43,12 },
{ FRM_LONG, &tl.weeks[44] , 0,0 , 0 , 5 , 6 , 55, 2 },
{ FRM_LONG, &tl.weeks[45] , 0,0 , 0 , 5 , 6 , 55, 3 },
{ FRM_LONG, &tl.weeks[46] , 0,0 , 0 , 5 , 6 , 55, 4 },
{ FRM_LONG, &tl.weeks[47] , 0,0 , 0 , 5 , 6 , 55, 5 },
{ FRM_LONG, &tl.weeks[48] , 0,0 , 0 , 5 , 6 , 55, 6 },
{ FRM_LONG, &tl.weeks[49] , 0,0 , 0 , 5 , 6 , 55, 7 },
{ FRM_LONG, &tl.weeks[50] , 0,0 , 0 , 5 , 6 , 55, 8 },
{ FRM_LONG, &tl.weeks[51] , 0,0 , 0 , 5 , 6 , 55, 9 },
{ FRM_LONG, &tl.weeks[52] , 0,0 , 0 , 5 , 6 , 55,10 },
{ FRM_LONG, &tl.totalcalls , 0,0 , 0 , 5 , 6 , 40,14 }
};
FormWindow w(8,5,72,20,0x1F,SHADOW);
w.open();
w.title(" Weekly System Usage ");
w << "\n";
for(int i=1;i<=11;i++) w << form(" %2d : %2d : %2d : %2d : %2d :\n",i,i+11,i+22,i+33,i+44);
w.attrib(0x1B);
w << "\n Total # remote calls :";
w.define(fld,54,0x1E);
tsw_cursoron();
w.process();
tsw_cursoroff();
write_timelog();
}

1240
procfg/EDITSYS.CPP Normal file

File diff suppressed because it is too large Load Diff

BIN
procfg/EDITSYS.OBJ Normal file

Binary file not shown.

1404
procfg/EDITUSER.CPP Normal file

File diff suppressed because it is too large Load Diff

BIN
procfg/EDITUSER.OBJ Normal file

Binary file not shown.

771
procfg/EDITVTPL.CPP Normal file
View File

@ -0,0 +1,771 @@
/* ------------------------------------------------------------
* Filename ............... EditVTpl.Cpp
*
* General Purpose ........ Edit validate templates
* ------------------------------------------------------------
* First date ............. 6 november 1993
*
* First in version ....... 2.00
*
* Written by ............. Alain Schellinck
* ------------------------------------------------------------
* Revisions:
* ----------
*
* Date | By | Purpose |
* ---------+----+--------------------------------------------+
* | | |
* | | |
* | | |
*/
/*-------------------------------------------------------------------------*/
#include <string.h>
#define Uses_MultiRecIO
#include "ThProCfg.Hpp"
#include "Template.Hpp"
/*-------------------------------------------------------------------------*/
TemplateIOP tpl = NULL;
ChrT tplFind[80];
/*--] Code [-------------------------------------] search functions [------*/
/*
* Routine : searchTemplate()
* Purpose : search the whole template database for a selected template
* ------------------------------------------------------------------------
* Parameters: record number to start on (-1 for 1st search)
* Return : record number or -1 if not found
*
*/
LCL ShrtT searchTemplate(ShrtT startRec)
{
ShrtT max_rec = tpl->count();
if(max_rec < 2)
return(-1);
Window w;
if(startRec == -1)
{
w.open( 10,
7,
62,
9,
0x3F,
SHADOW,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
CLEAR_OBJECT(tplFind);
w << " Search for: ";
w.attrib( 0x3E );
tsw_cursoron();
if(w.scan(tplFind, 60, 35, SCAN_UPPER) == SF_ESC)
return(-1);
w.close();
}
tsw_cursoroff();
if(strlen(tplFind) == 0)
return(-1);
if(startRec + 1 >= max_rec)
return(-1);
w.open( 11,
10,
70,
12,
0x3F,
BRACKETS,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.title( "Searching (Press <Esc> to cancel)", 0x3E );
ShrtT found = -1;
w.gauge( 2, 1, setFBColor(hWhite, nBlack), 54, 0, max_rec - 1, TRUE);
for(ShrtT cnt = startRec + 1; cnt < max_rec && found == -1; cnt++)
{
w.gauge( 2, 1, setFBColor(hWhite, nBlack), 54, cnt, max_rec - 1, FALSE);
if(KB.hit() && KB.get() == KEY_ESC)
break;
tpl->read(cnt);
String desc(tpl->desc);
if(desc.fuzzySearch(tplFind, cfg.fuzzyRate) >= cfg.fuzzyRate)
found = cnt;
}
return(found);
}
/*--] Code [-------------------------------------] pick functions [--------*/
/*
* Routine : listTemplate()
* Purpose : list the specified template
* ------------------------------------------------------------------------
* Parameters: template number, X and Y coordinates
* Return : None
*
*/
LCL void listTemplate(IntT recno, IntT x, IntT y)
{
String txt = form(" ³ %5d ³ ............................................................", recno + 1);
if(tpl->read(recno) == TRUE)
if(tpl->inUse() == TRUE)
txt = form(" %c ³ %5d ³ %s", (tpl->deleted ? 'þ' : ' '), recno + 1, tpl->desc);
if(txt.len() > 72)
txt.del(72, 0);
tsw_maputs(x , y, 0x3F, txt);
}
/*
* Routine : pickTemplate
* Purpose : Let the user pick another template
* ------------------------------------------------------------------------
* Parameters: current record number
* Return : selected record number or -1 to cancel
*
*/
ShrtT pickTemplate(ShrtT curRecNo)
{
ShrtT ret_val = -1;
LCL ChrP pickHelp[] =
{
" 5EPage Up: 5BGo to previous page",
" 5EPage Down: 5BGo to next page",
" 5EHome: 5BGo to first record",
" 5EEnd: 5BGo to last record",
" 5EEscape: 5BEnd",
"50ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ",
" 5E1..9: 5BStart typing record number to go to",
" 5EA..Z: 5BStart typing record number to search",
" 5EALT-G: 5BGo to another record",
" 5EALT-S: 5BSearch record by description",
" 5EALT-N: 5BSearch next record",
NULL
};
KEY hotkeys[]=
{
'1','2','3','4','5','6','7','8','9', // GOTO
'A','B','C','D','E','F','G','H','I', // SEARCH
'J','K','L','M','N','O','P','Q','R',
'S','T','U','V','W','X','Y','Z',
KEY_ALTG, // GOTO
KEY_ALTN, // SEARCH NEXT
KEY_ALTS, // SEARCH
KEY_F1 , // SHOW HELP
NULL
};
ShrtT maxRec = tpl->count();
SelectWindow sw;
sw.open( 2,
3,
78,
tsw_vsize - 2,
0x3F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
sw.title( "Select Template", 0x3E );
sw.define( maxRec,
0x1E,
listTemplate,
0,
NULL,
hotkeys );
sw.direct( 4,0 ,0x3B, 'Â'); sw.direct(12,0 ,0x3B, 'Â');
sw.direct( 4,tsw_vsize - 5, 0x31, 'Á'); sw.direct(12,tsw_vsize - 5,0x31, 'Á');
sw.show(curRecNo);
FlgT pickLoop = TRUE;
while(pickLoop)
{
tsw_showfooter("Press [\001F1\001] to see the help screen", BAR_NORM, BAR_HIGH);
tsw_cursoroff();
ShrtT choice = sw.process();
tsw_cursoron ();
switch(choice)
{
case SL_ESC:
{
pickLoop = FALSE;
}
break;
case SL_HOTKEY:
{
switch(sw.hotkey)
{
case KEY_F1 :
{
showHelp( pickHelp, "Pick Template Help" );
}
break;
case '1': case '2': case '3':
case '4': case '5': case '6':
case '7': case '8': case '9':
{
KB.push((KEY)(char)sw.hotkey);
} // NO BREAK!!!
case KEY_ALTG :
{
IntT tplNo = 1;
Window w(10, 5, 36, 7, setFBColor(hWhite, nCyan));
w.open();
w << " Goto template: ";
tsw_cursoron();
w.attrib(setFBColor(hYellow, nCyan));
if(w.scan(tplNo, 5, 6) == SF_ESC)
tplNo = -1;
tsw_cursoroff();
if((tplNo <= maxTemplates) && (tplNo >= 1) )
{
pickLoop = FALSE;
ret_val = tplNo - 1;
sw.show(ret_val);
}
}
break;
case KEY_ALTN:
{
ShrtT tplNo = searchTemplate(sw.current);
if(tplNo != -1)
{
sw.show(tplNo);
}
else
tsw_beep();
}
break;
case 'A': case 'B': case 'C': case 'D':
case 'E': case 'F': case 'G': case 'H':
case 'I': case 'J': case 'K': case 'L':
case 'M': case 'N': case 'O': case 'P':
case 'Q': case 'R': case 'S': case 'T':
case 'U': case 'V': case 'W': case 'X':
case 'Y': case 'Z':
{
KB.push((KEY)(char)sw.hotkey);
}
case KEY_ALTS:
{
ShrtT tplNo = searchTemplate(-1);
if(tplNo != -1)
{
sw.show(tplNo);
}
else
tsw_beep();
}
break;
}
}
break;
default:
{
ret_val = choice;
pickLoop = FALSE;
}
break;
}
}
return(ret_val);
}
/*--] Code [-------------------------------------] Edit functions [--------*/
/*
* Routine : helpFunction()
* Purpose : show the online help for each field
* ------------------------------------------------------------------------
* Parameters: field number
* Return : None
*
*/
LCL void helpFunction(IntT helpNo)
{
ChrP txt[]=
{
"Description for this template.",
"The security level the user will get when validated with this template.",
"How many days he/she will get the new security level.",
"The expiration level for this template.",
"Deposit an amount of time in the user's time bank account.",
"Deposit an amount of kbytes in the user's time bank account.",
"The netmail credit a user can use.",
"Name of the file containing the validation text (for TheUser).",
"Flags to turn on when validating a user.",
"Flags to turn off when validating a user.",
"Flags to turn on when a user's level is expired.",
"Flags to turn off when a user's level is expired.",
"Comment to place in a user's record.",
"The new log level for the user after validation.",
"",
"",
"",
"",
"",
"Template marked for deletion?",
};
if(strlen(txt[helpNo]) != 0)
tsw_showfooter(txt[helpNo], BAR_COLOR);
else
tsw_showfooter("Press [\001F1\001] to see the help screen", BAR_NORM, BAR_HIGH);
}
/*
* Routine : editTemplate()
* Purpose : edit a selected template
* ------------------------------------------------------------------------
* Parameters: system path
* Return : None
*
*/
void editTemplate(ChrP sysPath)
{
LCL ChrP editHelp[] =
{
" 5EPage Up: 5BGo to previous record",
" 5EPage Down: 5BGo to next record",
" 5ECTRL-Page Up: 5BGo to first record",
" 5ECTRL-Page Down: 5BGo to last record",
" 5EEscape: 5BEnd",
"50ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ",
" 5EALT-A: 5BAdd a record",
" 5EALT-D: 5BDelete / Undelete the current template",
" 5EALT-F: 5BShow flag description",
" 5EALT-L: 5BList all records",
" 5EALT-S: 5BSearch record by description",
" 5EALT-N: 5BSearch next record",
NULL
};
CLEAR_OBJECT(tplFind);
LCL ChrP LogLevels[] =
{
"Friend" , "Normal" , "Suspicious" , "Extensive" , "Ignore",
NULL
};
LCL ChrP YesNo[] =
{
"No", "Yes",
NULL
};
LCL ChrP YesNoIgnore[] =
{
"No", "Yes", "Ignore",
NULL
};
tpl = new TemplateIO(sysPath);
if(tpl->open(fmode_rw|fmode_copen)== FALSE)
{
tsw_beep();
return;
}
Field frm[]=
{
/* TYPE dataPtr choices hookFunc flags len width x y */
/* -------------------------------------------------------------------------------------------------- */
{ FRM_STRING , tpl->desc ,0 ,0 ,0 ,60 ,53 ,19 ,2 }, // description
{ FRM_UNSIGNED ,&tpl->secLevel ,0 ,0 ,0 ,5 ,6 ,19 ,3 }, // securiy level
{ FRM_UNSIGNED ,&tpl->subscribe ,0 ,0 ,0 ,5 ,6 ,19 ,5 }, // subscribe
{ FRM_UNSIGNED ,&tpl->expLevel ,0 ,0 ,0 ,5 ,6 ,19 ,6 }, // expiration level
{ FRM_UNSIGNED ,&tpl->tbTime ,0 ,0 ,0 ,5 ,6 ,19 ,8 }, // timebank time
{ FRM_UNSIGNED ,&tpl->tbKbyte ,0 ,0 ,0 ,5 ,6 ,19 ,9 }, // timebank kbyte
{ FRM_UNSIGNED ,&tpl->netCredit ,0 ,0 ,0 ,5 ,6 ,19 ,10 }, // netmail credit
{ FRM_STRING , tpl->valMsg ,0 ,0 ,0 ,8 ,9 ,19 ,11 }, // validate message
{ FRM_FUNCTION ,&tpl->valFlagsOn ,0 ,flag_select ,0 ,26 ,26 ,19 ,13 }, // flags on
{ FRM_FUNCTION ,&tpl->valFlagsOff,0 ,flag_select ,0 ,26 ,26 ,19 ,14 }, // flags off
{ FRM_FUNCTION ,&tpl->expFlagsOn ,0 ,flag_select ,0 ,26 ,26 ,19 ,15 }, // flags on
{ FRM_FUNCTION ,&tpl->expFlagsOff,0 ,flag_select ,0 ,26 ,26 ,19 ,16 }, // flags off
{ FRM_STRING , tpl->comment ,0 ,0 ,0 ,80 ,53 ,19 ,18 }, // comment
{ FRM_CHOICE ,&tpl->logLevel ,LogLevels ,0 ,0 ,10 ,10 ,57 ,3 }, // loglevels
{ FRM_CHOICE ,&tpl->hidden ,YesNoIgnore,0 ,0 ,6 ,6 ,57 ,5 }, // hidden
{ FRM_CHOICE ,&tpl->noTops ,YesNoIgnore,0 ,0 ,6 ,6 ,57 ,6 }, // in tops
{ FRM_CHOICE ,&tpl->atten ,YesNoIgnore,0 ,0 ,6 ,6 ,57 ,7 }, // attention
{ FRM_CHOICE ,&tpl->noKill ,YesNoIgnore,0 ,0 ,6 ,6 ,57 ,8 }, // no kill
{ FRM_CHOICE ,&tpl->ignDld ,YesNoIgnore,0 ,0 ,6 ,6 ,57 ,9 }, // ignore dl
{ FRM_CHOICE ,&tpl->deleted ,YesNo ,0 ,0 ,6 ,6 ,57 ,11 }, // template deleted?
};
FormWindow w( 2,
3,
77,
23,
0x1F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x19,
NULL,
0x10 );
w.open();
w.attrib( 0x1F );
w << "\n"
" Description:\n"
" Security level: Loglevel:\n"
"\n"
" Subscribe: Hidden:\n"
" Expir. level: NoTops:\n"
" Attention:\n"
" Time bank time: NoKill:\n"
" Time bank KB: IgnoreDL:\n"
" Netmail credit:\n"
" Validate Msg: Deleted:\n"
"\n"
" Val. Flags ON:\n"
" Val. Flags OFF:\n"
" Exp. Flags ON:\n"
" Exp. Flags OFF:\n"
"\n"
" Comment:";
KEY hotkeys[]=
{
KEY_PGUP , // next
KEY_PGDN , // previous
KEY_CPGUP, // first
KEY_CPGDN, // last
KEY_ALTA , // add
KEY_ALTD , // delete / undelete
KEY_ALTF , // show flags-info
KEY_ALTL , // list
KEY_ALTN , // search next
KEY_ALTS , // search
KEY_F1 , // help
NULL
};
w.define( frm,
20,
0x1B,
0x4E,
hotkeys, helpFunction);
ShrtT maxRec = tpl->count();
if(maxRec == 0)
{
tpl->clear();
tpl->write(0);
maxRec++;
}
ShrtT curRecNo = 0;
ShrtT nextRecNo = curRecNo;
FlgT readRequired = TRUE;
tpl->clear();
tsw_cursoron();
WrdT crcVal;
FlgT editLoop = TRUE;
while(editLoop)
{
FlgT forcedSave = FALSE;
if(curRecNo != nextRecNo)
{
curRecNo = nextRecNo;
readRequired = TRUE;
}
if(readRequired == TRUE)
{
readRequired = FALSE;
tpl->read(curRecNo);
crcVal = crc(tpl, sizeof(template_data));
}
w.title( form( "Record %d/%d", curRecNo + 1, maxRec), 0x1E );
IntT ret_code = w.process();
switch(ret_code)
{
case ED_HOT:
{
switch(w.scanHotKey)
{
case KEY_F1 :
{
showHelp( editHelp, "Edit Template Help" );
continue;
}
case KEY_ALTD :
{
if(tpl->inUse())
tpl->deleted = (tpl->deleted ? FALSE : TRUE);
forcedSave = TRUE;
}
break;
case KEY_ALTF :
{
tsw_cursoroff();
show_flags();
tsw_cursoron();
continue;
}
}
}
break;
}
FlgT isChanged = FALSE;
if(tpl->inUse())
{
if(crcVal != crc(tpl, sizeof(template_data)))
{
ShrtT stat;
isChanged = TRUE;
if(forcedSave == FALSE)
stat = ask_save();
else
stat = 1;
if(stat == 0)
{
tpl->write(curRecNo);
readRequired = TRUE;
}
}
}
switch(ret_code)
{
case ED_HOT :
{
switch(w.scanHotKey)
{
case KEY_PGDN :
{
if(curRecNo + 1 < maxRec)
nextRecNo = curRecNo + 1;
}
break;
case KEY_PGUP :
{
if(curRecNo > 0)
nextRecNo = curRecNo - 1;
}
break;
case KEY_CPGUP :
{
if(curRecNo != 0)
nextRecNo = 0;
}
break;
case KEY_CPGDN :
{
if(curRecNo + 1 < maxRec)
nextRecNo = maxRec - 1;
}
break;
case KEY_ALTA :
{
IntT tplNo = tpl->count() + 1;
Window w( 10,
5,
36,
7,
0x3F,
SHADOW,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.open();
w << " New template: ";
tsw_cursoron();
w.attrib( 0x3E );
if(w.scan(tplNo, 5, 6) == SF_ESC)
tplNo = -1;
tsw_cursoroff();
if((tplNo <= maxTemplates) && (tplNo > 1) )
{
if(tplNo > maxRec)
{
tpl->clear();
for(ShrtT cnt = maxRec; cnt < tplNo; cnt++)
tpl->write(cnt);
}
nextRecNo = tplNo - 1;
}
maxRec = tpl->count();
}
break;
case KEY_ALTL :
{
nextRecNo = pickTemplate(curRecNo);
if(nextRecNo == -1)
{
nextRecNo = curRecNo;
readRequired = TRUE;
}
if(nextRecNo > maxRec - 1)
{
tpl->clear();
for(ShrtT cnt = maxRec; cnt <= nextRecNo; cnt++)
tpl->write(cnt);
}
maxRec = tpl->count();
}
break;
case KEY_ALTN :
{
nextRecNo = searchTemplate(curRecNo);
if(nextRecNo == -1)
{
tsw_beep();
nextRecNo = curRecNo;
readRequired = TRUE;
}
}
break;
case KEY_ALTS:
{
nextRecNo = searchTemplate(-1);
if(nextRecNo == -1)
{
tsw_beep();
nextRecNo = curRecNo;
readRequired = TRUE;
}
}
break;
}
}
break;
case ED_ESC :
{
if((isChanged == FALSE) || (askYesNo("Exit template editor?") == TRUE))
editLoop = FALSE;
}
break;
}
}
maxRec = tpl->count();
FlgT found = FALSE; // search deleted records
for(ShrtT cnt = 0; cnt < maxRec && found == FALSE; cnt++)
if(tpl->read(cnt) == TRUE)
if(tpl->deleted == TRUE)
found = TRUE;
if(found == TRUE) // clear deleted records
if(askYesNo("Clear deleted records?") == TRUE)
for(ShrtT cnt = 0; cnt < maxRec; cnt++)
if(tpl->read(cnt) == TRUE)
if(tpl->deleted == TRUE)
{
tpl->clear();
tpl->write(cnt);
}
ShrtT lastUsed = -1; // search last used record
for(cnt = maxRec - 1; cnt >= 0 && lastUsed == -1; cnt--)
if(tpl->read(cnt) == TRUE)
if(tpl->inUse() == TRUE)
lastUsed = cnt;
if(lastUsed + 1 != maxRec)
{
tpl->pos(lastUsed + 1); // cut all other records
tpl->cut();
}
delete(tpl);
tsw_cursoroff();
}
/*---------------------------] END OF THE CODE [---------------------------*/

BIN
procfg/EDITVTPL.OBJ Normal file

Binary file not shown.

288
procfg/EVENTS.CPP Normal file
View File

@ -0,0 +1,288 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tswin.hpp>
#include "procfg.hpp"
/*
_AccessEvent ev[27];
void
event_show(int i,int x,int y)
{
Dstring s;
s << (i ? char('A'+i-1) : '@') << '³';
for(int j = 0 ; j < 48 ; j++)
{
if(ev[i].hoursActive[j]) s << 'þ';
else s << ' ';
if((j & 1) && j < 47) s << '³';
}
tsw_mputs(x+1,y,s);
}
void
edit_accessevents()
{
KEY hotkeys[]={ KEY_INS, KEY_DEL, 0 };
memset(ev,0,sizeof(ev));
memset(ev[0].hoursActive,1,48);
ev[1].hoursActive[20] = TRUE;
ev[1].hoursActive[21] = TRUE;
ev[1].hoursActive[22] = TRUE;
ev[2].hoursActive[12] = TRUE;
ev[2].hoursActive[23] = TRUE;
ev[2].hoursActive[24] = TRUE;
ev[2].hoursActive[25] = TRUE;
SelectWindow sw( 27,
0x70,
event_show,
0,
NULL,
hotkeys );
sw.open( 2,
10,
79,
21,
0x3F,
EXPLODE );
sw.title( "ÍÍÑ00Ñ01Ñ02Ñ03Ñ04Ñ05Ñ06Ñ07Ñ08Ñ09Ñ10Ñ11Ñ12Ñ13Ñ14Ñ15Ñ16Ñ17Ñ18Ñ19Ñ20Ñ21Ñ22Ñ23");
sw.direct(1,11,"ÍÍÏ00Ï01Ï02Ï03Ï04Ï05Ï06Ï07Ï08Ï09Ï10Ï11Ï12Ï13Ï14Ï15Ï16Ï17Ï18Ï19Ï20Ï21Ï22Ï23");
for(;;)
{
tsw_showfooter("\001<Del>\001 - Delete \001<Ins>\001 - Add \001<Enter>\001 - Edit", BAR_NORM, BAR_HIGH);
int choice=sw.process();
if(choice==SL_ESC) break;
}
}
*/
KEY
days_select(int mode,Window& w,int x,int y,char attr,void *data)
{
byte *days=(byte *)data;
int mon=0,tue=0,wed=0,thu=0,fri=0,sat=0,sun=0;
if(mode)
{
FormWindow ww( x + w.minX - 4,
y + w.minY - 3,
x + w.minX + 18,
y + w.minY + 7,
0xF,
EXPLODE | BRACKETS,
CHISEL_BORDER,
0x07,
NULL,
0x08 );
ww.open();
ww.title( "Days", 0xE );
Field frm[]=
{
{ FRM_YESNO , 0, 0,0, 0, 3 , 3 ,15,2 },
{ FRM_YESNO , 0, 0,0, 0, 3 , 3 ,15,3 },
{ FRM_YESNO , 0, 0,0, 0, 3 , 3 ,15,4 },
{ FRM_YESNO , 0, 0,0, 0, 3 , 3 ,15,5 },
{ FRM_YESNO , 0, 0,0, 0, 3 , 3 ,15,6 },
{ FRM_YESNO , 0, 0,0, 0, 3 , 3 ,15,7 },
{ FRM_YESNO , 0, 0,0, 0, 3 , 3 ,15,8 }
};
ww.define( frm,
7,
0xE );
mon=(*days&1)?1:0;
tue=(*days&2)?1:0;
wed=(*days&4)?1:0;
thu=(*days&8)?1:0;
fri=(*days&16)?1:0;
sat=(*days&32)?1:0;
sun=(*days&64)?1:0;
frm[0].value=&mon;
frm[1].value=&tue;
frm[2].value=&wed;
frm[3].value=&thu;
frm[4].value=&fri;
frm[5].value=&sat;
frm[6].value=&sun;
ww << "\n"
" Monday:\n"
" Tuesday:\n"
" Wednesday:\n"
" Thursday:\n"
" Friday:\n"
" Saturday:\n"
" Sunday:";
ww.process();
*days=0;
if(mon) *days|=1;
if(tue) *days|=2;
if(wed) *days|=4;
if(thu) *days|=8;
if(fri) *days|=16;
if(sat) *days|=32;
if(sun) *days|=64;
}
else
{
String s("MTWTFSS");
for(int i=0;i<7;i++) if(!((*days)&(1<<i))) s[i]='-';
w.direct(x,y,(byte)attr,s);
}
return 0;
}
void
event_select(int i,int x,int y)
{
String s("MTWTFSS");
for(int d=0;d<7;d++) if(!(events[i].days&(1<<d))) s[d]='-';
tsw_maputs(x+1,y,0x5E,form("[%c] On %s, at %02d:%02d on node %d for %2d minutes",events[i].enabled?'+':'-',(char *)s,events[i].start[0],events[i].start[1],events[i].node,events[i].duration));
}
static char *types[]={ "Errorlevel","Command",NULL};
void
edit_events()
{
//edit_accessevents();
KEY hotkeys[]={ KEY_INS, KEY_DEL, 0 };
Field frm[]=
{
{ FRM_YESNO , 0, 0,0, 0, 3 , 3 ,15,1 },
{ FRM_FUNCTION, 0, 0,days_select,0 , 7, 7, 15,3 },
{ FRM_STRING , 0, 0,0, 0, 5 , 6 ,15,4 },
{ FRM_INT , 0, 0,0, 0, 3 , 4 ,15,5 },
{ FRM_CHOICE , 0, types,0,0,10,10,15,7 },
{ FRM_INT , 0, 0,0, 0, 4 , 5 ,15,9 },
{ FRM_STRING , 0, 0,0, 0, 79 , 20 ,15,10 },
{ FRM_SHORT , 0, 0,0, 0, 3 , 4 ,15,12 }
};
SelectWindow sw( num_events,
0x70,
event_select,
0,
NULL,
hotkeys );
sw.open( 12,
10,
67,
21,
0x5F,
SHADOW | EXPLODE | BRACKETS,
CHISEL_BORDER,
0x5D,
NULL,
0x51 );
sw.title( "Events", 0x5E );
for(;;)
{
tsw_showfooter("\x1<Del>\x1 - Delete \x1<Ins>\x1 - Add \x1<Enter>\x1 - Edit", BAR_NORM, BAR_HIGH );
sw.redefine(num_events);
int choice=sw.process();
if(choice==SL_ESC) break;
if(choice==SL_HOTKEY)
switch(sw.hotkey)
{
case KEY_INS: {
memset(&events[num_events],0,sizeof(event));
choice=num_events++;
sw.current=choice;
events[choice].node=1;
} break;
case KEY_DEL: for(int i=sw.current;i<num_events-1;i++) events[i]=events[i+1];
if(num_events) num_events--;
continue;
}
FormWindow w( 9,
4,
47,
17,
0x3F,
SHADOW | EXPLODE | BRACKETS,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.open();
w.attrib( 0x3F );
w << " Enabled:\n\n"
" Active days:\n"
" Event Time:\n"
" Duration: min.\n\n"
" Event type:\n\n"
" Errorlevel:\n"
" DOS-Command:\n\n"
" Node number:";
char time[6];
sprintf(time,"%02d:%02d",events[choice].start[0],events[choice].start[1]);
frm[0].value=&events[choice].enabled;
frm[1].value=&events[choice].days;
frm[2].value=time;
frm[3].value=&events[choice].duration;
frm[4].value=&events[choice].type;
frm[5].value=&events[choice].errorlevel;
frm[6].value=events[choice].command;
frm[7].value=&events[choice].node;
w.define( frm,
8,
0x31,
0x4E );
tsw_cursoron();
w.process();
tsw_cursoroff();
events[choice].start[0]=atoi(strtok(time,":"));
events[choice].start[1]=atoi(strtok(NULL,":"));
for(int i=0;i<num_events-1;i++)
for(int j=i+1;j<num_events;j++)
if(events[i].start>events[j].start)
{
event temp;
temp=events[i];
events[i]=events[j];
events[j]=temp;
}
}
}

BIN
procfg/EVENTS.OBJ Normal file

Binary file not shown.

360
procfg/EXTSEL.CPP Normal file
View File

@ -0,0 +1,360 @@
#ifdef PEX
#define NO_KEY_DEF
#include <pb_sdk.h>
#else
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#endif
#include <tswin.hpp>
#include "extsel.hpp"
#define max(a,b) ( (a)>(b) ? (a) : (b) )
#define min(a,b) ( (a)<(b) ? (a) : (b) )
void
ExtSelectWindow::recalc(int order)
{
int i,y;
int height = maxY - minY + 1;
if(end >= numEntries)
{
end = numEntries-1;
for(i=1,y=height - (*func)(*this,end) ; y>0 ; i++)
{
y -= (*func)(*this,end-i);
}
start = end - i + 1;
for(i = start ; y < height; i++)
{
offset[i-start] = y;
y += (*func)(*this,i);
}
}
else
{
for(i = start , y = 0; y < height; i++)
{
if(i >= numEntries)
{
end = numEntries;
recalc();
return;
}
offset[i-start] = y;
y += (*func)(*this,i);
}
end = i-1;
}
}
void
ExtSelectWindow::scrollUp(int n)
{
end++;
int left = offset[0] + (*func)(*this,start); // # lines of 1st item on screen
int new_offset = offset[0];
int i = n;
while( i >= left)
{
new_offset += (*func)(*this,start);
start++;
i -= (*func)(*this,start);
}
offset[0] = new_offset - n;
for(i = start+1 ; i <= end ; i++)
{
offset[i-start] = offset[i-start-1] + (*func)(*this,i-1);
}
}
void
ExtSelectWindow::scrollDown(int)
{
start--;
recalc();
}
void
ExtSelectWindow::redraw(int n)
{
if(n >= 0)
{
(*func)(*this,n,offset[n-start] + 1,maxY - minY - offset[n-start] + 1);
}
else
{
clear();
for(int i=start; i <= end ; i++)
{
(*func)(*this,i,offset[i-start] + 1,maxY - minY - offset[i-start] + 1);
}
}
}
void
ExtSelectWindow::keyDown()
{
if(current >= numEntries-1)
return;
previous = current++;
int height = (maxY-minY+1);
if( current == end
&& offset[end-start]+(*func)(*this,current) > height)
{
int n = offset[end-start] + (*func)(*this,current) - height;
tsw_scroll(UP,minX,minY,maxX,maxY,n,attr);
scrollUp(n);
redraw(current);
}
if(current > end)
{
int n = (*func)(*this,current);
tsw_scroll(UP,minX,minY,maxX,maxY,n,attr);
scrollUp(n);
redraw(current);
}
}
void
ExtSelectWindow::keyUp()
{
}
int
ExtSelectWindow::process()
{
previous = current;
if(!end)
{
recalc();
redraw();
}
for(;;)
{
int ofs;
if(previous >= start && previous <= end)
{
ofs = offset[previous-start];
tsw_selbar(max(ofs,0)+minY,minX,maxX,attr,(*func)(*this,previous)+((ofs < 0)?ofs:0));
redraw(previous);
}
ofs = offset[current-start];
tsw_selbar(max(ofs,0)+minY,minX,maxX,barAttr,(*func)(*this,current)+((ofs < 0) ? ofs:0));
if(action!=NULLFUNC && numEntries) (*action)(current);
KB.clear();
KEY k = KB.uget();
if(hotKeys!=NULL)
for(int i=0 ; hotKeys[i] ; i++)
if(k == hotKeys[i])
{
hotkey = k;
return SL_HOTKEY;
}
if(k == KEY_ESC)
{
return SL_ESC;
}
if(k == 13)
{
return current;
}
switch(k)
{
case KEY_DN: keyDown();
break;
case KEY_UP:
{
if(current <= 0)
break;
previous = current--;
if(current == start && offset[0] < 0)
{
tsw_scroll(DOWN,minX,minY,maxX,maxY,-offset[0],attr);
recalc();
redraw(current);
}
if(current < start)
{
int n = (*func)(*this,current);
tsw_scroll(DOWN,minX,minY,maxX,maxY,n,attr);
scrollDown(n);
redraw(current);
}
}
break;
case KEY_PGUP:
{
if(start == 0)
{
previous = current;
current = 0;
break;
}
int n = 0;
int y = offset[current-start];
for(int i = start;i>0 && n<(maxY-minY+1);i--)
{
n += (*func)(*this,i);
}
start = i;
recalc();
current = start;
for(i=start;i<=end;i++)
{
if(offset[i-start] >= y)
{
current = i;
break;
}
}
redraw();
}
break;
case KEY_PGDN:
{
if(end == numEntries-1)
{
previous = current;
current = end;
break;
}
int y = offset[current-start];
start = end+1;
recalc();
previous = current;
current = start;
for(int i=start;i<=end;i++)
{
if(offset[i-start] >= y)
{
current = i;
break;
}
}
redraw();
}
break;
case KEY_HOME:
{
start = 0;
current = previous = 0;
recalc();
redraw();
}
break;
case KEY_END:
{
if(current == numEntries-1)
break;
//start = numEntries-2;
end = numEntries;
current = numEntries-1;
recalc();
redraw();
}
break;
}
}
}
void
ExtSelectWindow::show(int n)
{
start = n;
current = previous = n;
recalc();
redraw();
}
ExtSelectWindow::ExtSelectWindow(int num,ATTR battr,int(*f)(ExtSelectWindow&,int,int,int),KEY *hot,void(*actionf)(int))
{
barAttr = battr;
numEntries = num;
hotKeys = hot;
func = f;
action = actionf;
current = 0;
previous = 0;
start = 0;
end = 0;
}
void
ExtSelectWindow::define(int num,ATTR battr,int(*f)(ExtSelectWindow&,int,int,int),KEY *hot,void(*actionf)(int))
{
barAttr = battr;
numEntries = num;
hotKeys = hot;
func = f;
action = actionf;
current = 0;
previous = 0;
start = 0;
end = 0;
}
void
ExtSelectWindow::reDefine(int num)
{
}

40
procfg/EXTSEL.HPP Normal file
View File

@ -0,0 +1,40 @@
class ExtSelectWindow : public Window
{
int start,
end,
previous;
KEY *hotKeys;
int (*func)(ExtSelectWindow&,int n,int y=0,int maxheight=0);
void (*action)(int);
ATTR barAttr;
int numEntries;
int offset[100];
void recalc(int order = 1);
void redraw(int = -1);
void scrollUp(int n);
void scrollDown(int n);
void keyDown();
void keyUp();
void keyPgUp();
void keyPgDn();
void keyHome();
void keyEnd();
public:
int current;
KEY hotkey;
ExtSelectWindow () { }
ExtSelectWindow (int num,ATTR battr,int (*f)(ExtSelectWindow&,int,int,int),KEY *hot=NULL,void(*actionf)(int)=NULLFUNC);
void define (int num,ATTR battr,int (*f)(ExtSelectWindow&,int,int,int),KEY *hot=NULL,void(*actionf)(int)=NULLFUNC);
void reDefine (int num);
int process();
void show(int n);
void showLast() { show(numEntries-1); }
void showFirst() { show(0); }
};

42
procfg/EXTSEL.I Normal file
View File

@ -0,0 +1,42 @@
extsel.hpp 1: class ExtSelectWindow : public Window
extsel.hpp 2: {
extsel.hpp 3: int start,
extsel.hpp 4: end,
extsel.hpp 5: previous;
extsel.hpp 6: KEY *hotKeys;
extsel.hpp 7: int (*func)(ExtSelectWindow&,int n,int y=0,int maxheight=0);
extsel.hpp 8: void (*action)(int);
extsel.hpp 9: ATTR barAttr;
extsel.hpp 10: int numEntries;
extsel.hpp 11: int offset[100];
extsel.hpp 12:
extsel.hpp 13: void recalc(int order = 1);
extsel.hpp 14: void redraw(int = -1);
extsel.hpp 15: void scrollUp(int n);
extsel.hpp 16: void scrollDown(int n);
extsel.hpp 17:
extsel.hpp 18: void keyDown();
extsel.hpp 19: void keyUp();
extsel.hpp 20: void keyPgUp();
extsel.hpp 21: void keyPgDn();
extsel.hpp 22: void keyHome();
extsel.hpp 23: void keyEnd();
extsel.hpp 24:
extsel.hpp 25: public:
extsel.hpp 26: int current;
extsel.hpp 27: KEY hotkey;
extsel.hpp 28:
extsel.hpp 29: ExtSelectWindow () { }
extsel.hpp 30: ExtSelectWindow (int num,ATTR battr,int (*f)(ExtSelectWindow&,int,int,int),KEY *hot=NULL,void(*actionf)(int)=NULLFUNC);
extsel.hpp 31:
extsel.hpp 32: void define (int num,ATTR battr,int (*f)(ExtSelectWindow&,int,int,int),KEY *hot=NULL,void(*actionf)(int)=NULLFUNC);
extsel.hpp 33: void reDefine (int num);
extsel.hpp 34:
extsel.hpp 35: int process();
extsel.hpp 36:
extsel.hpp 37: void show(int n);
extsel.hpp 38: void showLast() { show(numEntries-1); }
extsel.hpp 39: void showFirst() { show(0); }
extsel.hpp 40: };
extsel.hpp 41:
extsel.hpp 42:

BIN
procfg/EXTSEL.OBJ Normal file

Binary file not shown.

119
procfg/FLAGS.CPP Normal file
View File

@ -0,0 +1,119 @@
#include <ctype.h>
#include "procfg.hpp"
KEY
flagonoff_select(int mode,Window& w,int x,int y,char attr,void *data)
{
AccessFlags *af_on=((AccessFlags **)data)[0];
AccessFlags *af_off=((AccessFlags **)data)[1];
tsw_cursoroff();
if(mode)
{
Window ww( x + w.minX - 1,
y + w.minY - 2,
x + w.minX + 36,
y + w.minY,
0xF,
BRACKETS,
CHISEL_BORDER,
0x07,
NULL,
0x08 );
ww.open();
ww.title( "Press A..Z , 1..6 to toggle", 0xE );
ww.direct( 9,
2,
0xE,
" [F1] - Flag Help " );
for(;;)
{
int x = 2;
for(int i=1;i<=32;i++)
{
char c = (i<=26) ? ('A'+i-1) : ('0'+i-26);
if(af_on->getflag(i))
{
ww.direct(x++,1,0xF,c);
}
else
if(af_off->getflag(i))
{
ww.direct(x++,1,0x70,c);
}
else
{
ww.direct(x++,1,0xF,'-');
}
}
KEY k=KB.get();
if(k == KEY_F1) show_flags();
if(k==27 || k==13) return 0;
if(isalpha(k))
{
k = toupper(k)-'A'+1;
}
else
if(k>='1' && k<='6')
{
k -= '1'-27;
}
else
k = 0;
if(k)
{
if(af_on->getflag(k))
{
af_on->clearflag(k);
af_off->setflag(k);
}
else
if(af_off->getflag(k))
{
af_on->clearflag(k);
af_off->clearflag(k);
}
else
{
af_on->setflag(k);
af_off->clearflag(k);
}
}
}
}
for(int i=1;i<=32;i++)
{
char c = (i<=26) ? ('A'+i-1) : ('0'+i-26);
if(af_on->getflag(i))
{
w.direct(x++,y,attr,c);
}
else
if(af_off->getflag(i))
{
w.direct(x++,y,0x70,c);
}
else
{
w.direct(x++,y,attr,'-');
}
}
tsw_cursoron();
return 0;
}

BIN
procfg/FLAGS.OBJ Normal file

Binary file not shown.

640
procfg/LANGUAGE.CPP Normal file
View File

@ -0,0 +1,640 @@
#include <ctype.h>
#include <string.h>
#include "procfg.hpp"
//#include <deflang.hpp>
#include "extsel.hpp"
static void edit_properties();
static bool read_default_language();
typedef _LanguageString LanguageString;
const int MAX_LSTRINGS = 400;
static LanguageFile far lang_file;
static LanguageString *lstrings;
static LanguageString *default_lstrings;
static word num_lstrings;
static void edit_language_string( LanguageString& l );
static int
list_func(ExtSelectWindow& w , int i,int y,int maxheight)
{
char *s = lstrings[i].s;
int count = 0;
if(y <= 0)
{
for( ; *s ; s++)
if(*s == '\n')
count++;
return count + 1;
}
bool highlight = FALSE;
int old_x,old_y;
byte old_attr;
old_attr = w.attrib();
w.getPos(old_x,old_y);
w.setPos(1,y);
w.attrib(lstrings[i].color);
tsw_clearrect(w.minX,w.minY+y-1,w.maxX,w.minY+y-1,w.attrib());
for(;*s;s++)
{
byte c = 0;
c = *s;
if(w.inEscape())
{
w << c;
continue;
}
if(c == '\\')
{
char c = *(++s);
if(c == '\\')
{
w << '\\';
s++;
continue;
}
else
{
byte col = 0;
if(isxdigit(c))
{
for( int i = 0; i < 2 ; i++ , s++)
{
c = *s;
if(isdigit(c))
col = col * 16 + c - '0';
else
col = col * 16 + toupper(c) - 'A' + 10;
}
w.attrib(col);
s--;
continue;
}
if(c == 'H' || c == 'L')
{
switch(*(++s))
{
case 'B': col = 1;
break;
case 'G': col = 2;
break;
case 'C': col = 3;
break;
case 'R': col = 4;
break;
case 'P': col = 5;
break;
case 'Y': col = 6;
break;
case 'W': col = 7;
break;
}
if(c == 'H') col |= 8;
}
w.attrib(col);
continue;
}
}
if(c == '^')
{
highlight = !highlight;
if(highlight)
w.attrib(lstrings[i].highlight);
else
w.attrib(lstrings[i].color);
continue;
}
if(c == '\n')
{
if(++count >= maxheight)
break;
tsw_clearrect(w.minX,w.minY+w.getY(),w.maxX,w.minY+w.getY(),w.attrib());
}
if(c != '\f')
w << c;
}
w.setPos(old_x,old_y);
w.attrib(old_attr);
return count+1;
}
static void
action_func(int i)
{
tsw_clearrect( 1, tsw_vsize , tsw_hsize , tsw_vsize , BAR_COLOR );
tsw_mputs( 2, tsw_vsize , default_lstrings[i].s );
tsw_maputs(2,2, 0x1B, form("Prompt #%-4d",i+1));
}
void
edit_language(char *langname)
{
ScreenRestore restore;
tsw_clearrect(1,1,tsw_hsize,2,0x1E);
tsw_centerline(1,"[Alt-D] Restore default [Alt-P] Language Properties [Alt-S] Search");
KEY hotkeys[] = { KEY_ALTD , KEY_ALTP , KEY_ALTS, KEY_ALTN, 0 };
ExtSelectWindow sw;
sw.open( 1,
3,
tsw_hsize,
tsw_vsize - 1,
0x0F,
NOBORDER | NOSAVE );
File f;
int i;
CLEAR_OBJECT(lang_file);
default_lstrings = new LanguageString[ MAX_LSTRINGS ];
if(!read_default_language())
{
tsw_beep();
return;
}
lstrings = new LanguageString[ MAX_LSTRINGS ];
for( i=0 ; default_lstrings[i].len ; i++ )
{
lstrings[i] = default_lstrings[i];
}
num_lstrings = i;
if(f.open(FileName(syspath,langname,".PBL")))
{
f.read(&lang_file , sizeof(LanguageFile));
word numinfile;
f >> numinfile;
for(i=0;i<numinfile;i++)
{
if(!lstrings[i].read(f))
break;
}
for( ; default_lstrings[i].len ; i++ )
{
lstrings[i] = default_lstrings[i];
}
num_lstrings = i;
f.close();
}
else
{
delete [] lstrings;
delete [] default_lstrings;
return;
}
sw.define(num_lstrings,0x70,list_func,hotkeys,action_func);
String search_spec;
int last_search_num;
bool state = tsw_cursorstate;
tsw_cursoroff();
for(;;)
{
int choice = sw.process();
if(choice == SL_HOTKEY)
{
switch(sw.hotkey)
{
case KEY_ALTS:
{
char s[80];
Window w;
w.open( 10,
7,
60,
9,
0x3F,
SHADOW,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
s[0] = '\0';
w << " Search for : ";
tsw_cursoron();
w.attrib(0x31);
if(w.scan(s, 35, 32, SCAN_UPPER) == SF_ESC)
{
tsw_cursoroff();
continue;
}
search_spec = s;
tsw_cursoroff();
w.close();
for(int i=0;i<num_lstrings;i++)
{
String s = lstrings[i].s;
if(s.find(search_spec) >= 0)
{
sw.show(i);
break;
}
}
if(i == num_lstrings)
{
tsw_beep();
tsw_beep();
}
else
last_search_num = i;
}
continue;
case KEY_ALTN:
{
if(search_spec.len() < 2)
continue;
for(int i=last_search_num+1;i<num_lstrings;i++)
{
String s = lstrings[i].s;
if(s.find(search_spec) >= 0)
{
sw.show(i);
break;
}
}
if(i == num_lstrings)
{
tsw_beep();
tsw_beep();
}
else
last_search_num = i;
}
continue;
case KEY_ALTD:
{
lstrings[sw.current] = default_lstrings[sw.current];
}
continue;
case KEY_ALTP:
{
edit_properties();
}
continue;
}
}
if(choice<0) break;
int prevlines = list_func(sw,choice,0,0);
edit_language_string( lstrings[choice] );
if(prevlines != list_func(sw,choice,0,0)) sw.show(choice);
}
if(state)
tsw_cursoron();
f.open(FileName(syspath,langname,".PBL") , fmode_create , 4096);
f.write(&lang_file,sizeof(LanguageFile));
f << num_lstrings;
for(i=0 ; i<num_lstrings ; i++)
{
lstrings[i].write(f);
}
delete [] lstrings;
delete [] default_lstrings;
tsw_fillrect(1,1,tsw_hsize,1,'°',0x70);
}
static void
edit_language_string( LanguageString& l )
{
Field frm_all[]=
{
{ FRM_STRING , 0 , 0,0 , 0 , 200, 55, 14,2 },
{ FRM_STRING , 0 , 0,0 , 0 , 200, 55, 14,3 },
{ FRM_STRING , 0 , 0,0 , 0 , 200, 55, 14,4 },
{ FRM_STRING , 0 , 0,0 , 0 , 200, 55, 14,5 },
{ FRM_STRING , 0 , 0,0 , 0 , 200, 55, 14,6 },
{ FRM_STRING , 0 , 0,0 , 0 , 200, 55, 14,7 },
{ FRM_STRING , 0 , 0,0 , 0 , 200, 55, 14,8 },
{ FRM_STRING , 0 , 0,0 , 0 , 200, 55, 14,9 },
{ FRM_STRING , 0 , 0,0 , 0 , 49 , 50, 14,11 },
{ FRM_FUNCTION, 0 , 0,edit_color , 0 , 20 , 20, 14,13 },
{ FRM_FUNCTION, 0 , 0,edit_color , 0 , 20 , 20, 14,14 },
{ FRM_FUNCTION, 0 , 0,edit_color , 0 , 20 , 20, 14,15 }
};
char *ss[8] =
{
new char[201] ,
new char[201] ,
new char[201] ,
new char[201] ,
new char[201] ,
new char[201] ,
new char[201] ,
new char[201]
};
dword crc = 0;
crc += crc32(l.s);
crc += crc32(l.hotkeys);
crc += crc32(&l.color,1);
crc += crc32(&l,sizeof(l));
*ss[0] = '\0';
*ss[1] = '\0';
*ss[2] = '\0';
*ss[3] = '\0';
*ss[4] = '\0';
*ss[5] = '\0';
*ss[6] = '\0';
*ss[7] = '\0';
char *s = l.s;
for( int i = 0 , j = 0; *s && i < 8 ; s++)
{
if(*s == '\n')
{
ss[i++][j] = '\0';
j = 0;
continue;
}
ss[i][j++] = *s;
}
ss[i][j] = '\0';
char *hk = new char[50];
strcpy(hk,l.hotkeys);
Field frm[12];
int n_frm = 0;
frm[n_frm++] = frm_all[0];
frm[n_frm++] = frm_all[1];
frm[n_frm++] = frm_all[2];
frm[n_frm++] = frm_all[3];
frm[n_frm++] = frm_all[4];
frm[n_frm++] = frm_all[5];
frm[n_frm++] = frm_all[6];
frm[n_frm++] = frm_all[7];
if(l.numHotkeys)
{
frm[n_frm ] = frm_all[8];
frm[n_frm++].value = hk;
}
if(!(l.flags & LANG_NOCOLOR))
{
frm[n_frm ] = frm_all[ 9];
frm[n_frm++].value = &l.color;
frm[n_frm ] = frm_all[10];
frm[n_frm++].value = &l.highlight;
}
if(l.flags & LANG_PROMPT)
{
frm[n_frm ] = frm_all[11];
frm[n_frm++].value = &l.promptcolor;
}
frm[0].value = ss[0];
frm[1].value = ss[1];
frm[2].value = ss[2];
frm[3].value = ss[3];
frm[4].value = ss[4];
frm[5].value = ss[5];
frm[6].value = ss[6];
frm[7].value = ss[7];
FormWindow fw( 4,
5,
77,
22,
0x1F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x19,
NULL,
0x10 );
fw.open();
fw.title( "Edit Language String", 0x1E );
fw.attrib(0x1B);
fw << "\n String #1:"
"\n String #2:"
"\n String #3:"
"\n String #4:"
"\n String #5:"
"\n String #6:"
"\n String #7:"
"\n String #8:\n"
"\n Hotkeys: n/a\n"
"\n Color: n/a"
"\n Highlight: n/a"
"\n Prompt Col: n/a";
fw.define( frm,
n_frm,
0x1B,
0x4E );
tsw_cursoron();
fw.process();
tsw_cursoroff();
for(j=7;j>=0;j--) if(ss[j][0]) break;
String result = ss[0];
if(j > 0) result << '\n' << ss[1];
if(j > 1) result << '\n' << ss[2];
if(j > 2) result << '\n' << ss[3];
if(j > 3) result << '\n' << ss[4];
if(j > 4) result << '\n' << ss[5];
if(j > 5) result << '\n' << ss[6];
if(j > 6) result << '\n' << ss[7];
if( crc32(result)+crc32(hk)+crc32(&l.color,1)+crc32(&l,sizeof(l)) != crc)
{
if(ask_save() == 0)
l = LanguageString(result,hk,l.color,l.highlight,l.flags,l.promptcolor);
}
delete [] ss[0];
delete [] ss[1];
delete [] ss[2];
delete [] ss[3];
delete [] ss[4];
delete [] ss[5];
delete [] ss[6];
delete [] ss[7];
delete [] hk;
}
static void
edit_properties()
{
Field frm[]=
{
{ FRM_STRING , lang_file.name , 0,0 , 0 , 40 , 41, 17,2 },
{ FRM_YESNO , &lang_file.avail , 0,0 , 0 , 3 , 3 , 17,4 },
{ FRM_UNSIGNED, &lang_file.level , 0,0 , 0 , 5 , 6 , 17,6 },
{ FRM_FUNCTION, &lang_file.flags , 0,flag_select ,0, 26 , 26, 17,7 },
{ FRM_STRING , lang_file.menuPath, 0,0 , FRM_UPPER , 60 , 45, 17,9 },
{ FRM_STRING , lang_file.txtPath, 0,0 , FRM_UPPER , 60 , 45, 17,10 },
{ FRM_STRING , lang_file.questPath, 0,0 , FRM_UPPER , 60 , 45, 17,11 }
//{ FRM_STRING , lang_file.copyright , 0,0 , 0 , 80 , 45, 17,13 }
};
FormWindow w( 6,
7,
75,
20,
0x3F,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x3B,
NULL,
0x31 );
w.define( frm,
7,
0x31,
0x4E );
w.open();
w.title( "Language Properties", 0x3E );
w.attrib(0x3F);
w << "\n Description:\n\n"
" Available:\n\n"
" Level:\n"
" Flags:\n\n"
" Menu Path:\n"
" Text Path:\n"
" Quest. Path:";
//" Copyright:";
tsw_cursoron();
w.process();
tsw_cursoroff();
if(strlen(lang_file.menuPath) >= 3)
append_backspace(lang_file.menuPath);
else
lang_file.menuPath[0] = '\0';
if(strlen(lang_file.txtPath) >= 3)
append_backspace(lang_file.txtPath);
else
lang_file.txtPath[0] = '\0';
if(strlen(lang_file.questPath) >= 3)
append_backspace(lang_file.questPath);
else
lang_file.questPath[0] = '\0';
}
static bool
read_default_language()
{
File f;
if(!f.open(FileName(syspath,"DEFLANG.PB") , fmode_read , 4096))
return FALSE;
f.seek(long(sizeof(LanguageFile) + 2));
for(int i=0;;i++)
{
if(!default_lstrings[i].read(f)) break;
}
default_lstrings[i].len = 0;
return TRUE;
}

BIN
procfg/LANGUAGE.OBJ Normal file

Binary file not shown.

3
procfg/MAKEALL.BAT Normal file
View File

@ -0,0 +1,3 @@
@echo off
call mc.bat *.cpp

22
procfg/MAKEFILE Normal file
View File

@ -0,0 +1,22 @@
## Makefile for ProCFG
OBJS = procfg.obj editaka.obj editlim.obj editmac.obj \
editmenu.obj editarea.obj editpb.obj editprot.obj editsys.obj \
edituser.obj events.obj editpvt.obj language.obj sel_lang.obj \
extsel.obj flags.obj promisc.obj editvtpl.obj template.obj \
editgrp.obj editlcol.obj editnode.obj area.obj misc.obj
MODEL = LARGE
OVERLAY = 1
OVLOBJS = $(OBJS,Ntemplate\.obj,Nedituser\.obj,Narea\.obj)
TSLIB = 1
TSWIN = 1
PBLIB = 1
LIBS = \cpp\lib\pb\proboard.lib \cpp\lib\th\thehouse.lib
CFLAGS = -I\cpp\lib\pb -I\cpp\lib\th
ProCFG.EXE: $(OBJS)

5
procfg/MC.BAT Normal file
View File

@ -0,0 +1,5 @@
@echo off
echo Compiling %1 %2 %3 %4 %5 %6 %7 %8 %9
bcc @mc.cfg %1 %2 %3 %4 %5 %6 %7 %8 %9

17
procfg/MC.CFG Normal file
View File

@ -0,0 +1,17 @@
-P-cpp
-c
-ml
-Y
-w-par
-w-aus
-w-use
-w-inl
-w-pin
-w-amb
-w-asm
-w-def
-w-nod
-w-pro
-w-stv
-w-pre
-w-sig

65
procfg/MISC.CPP Normal file
View File

@ -0,0 +1,65 @@
#include <string.h>
#include "procfg.hpp"
static Window *busywin = NULL;
void
ShowBusy(char *msg)
{
if(busywin)
return;
busywin = new Window;
int len = strlen(msg);
len += 10;
if(len > tsw_hsize-6)
len = tsw_hsize-6;
busywin->open( 1,
1,
len,
5,
0x0F,
CENTERED_X | CENTERED_Y | SHADOW,
CHISEL_BORDER,
0x07,
NULL,
0x08 );
busywin->centerLine( 2,
msg,
0x0E );
}
void
HideBusy()
{
if(busywin)
delete busywin;
busywin = NULL;
}
void KeyItem( Window &w,
int x,
int y,
ATTR iKeyColor,
char *pKey,
ATTR iDescColor,
char *pDesc )
{
w.direct( x - strlen( pKey ) - 1,
y,
iKeyColor,
pKey );
w.direct( x,
y,
iDescColor,
pDesc );
}

BIN
procfg/MISC.OBJ Normal file

Binary file not shown.

717
procfg/PROBOARD.HPP Normal file
View File

@ -0,0 +1,717 @@
#ifndef PROBOARD_HPP
#define PROBOARD_HPP
#include <tslib.hpp>
#include <time.h>
#define VERSION "2.22"
#define TEARVERSION "2.22"
#define PID_STRING "ProBoard 2.22"
#define PID_STRING_HUDSON PID_STRING " H"
#define PID_STRING_SQUISH PID_STRING " S"
#define PID_STRING_JAM PID_STRING " J"
#define PORT_VALUE 10
#define MAX_UNREG_NODES 255
#define MAX_UNREG_USERS 100000
#define VER_NUM 222
const word VER_WORD = 0x0220;
const word VER_BETA = 0xFFFF; // 0000-EFFF = beta
// F000-FEEE = gamma
// FFFF = release
//--------------------------------------------
// Color of the status bar on the main console
//--------------------------------------------
#define BAR_COLOR 0x4E
#include <pb_lib.hpp>
#ifndef MSGAPI
class MSG;
#endif
#ifdef Use_MsgBase
#include "msgbase.hpp"
#else
class Message;
class MsgBase;
class MsgBaseList;
class SquishMsgBase;
class HudsonMsgBase;
class JamMsgBase;
#endif
extern String S_PRESS_ENTER_TO_CONTINUE;
const int MAX_PEX_HANDLERS = 100;
const int BUFSIZE_FAST = 2048;
const int BUFSIZE_SLOW = 512;
#ifdef RELEASE
inline void SCRAMBLE()
{
*((dword _far *)12) = *((dword _far *)0x46C);
}
#else
#define SCRAMBLE() ;
#endif
/*
struct User : _User
{
int Read(int rec); // Read record from recnr 'rec'
int Write(int rec); // Write record to recnr 'rec' (-1 = add)
int Find(char *username); // Find user with name 'username'
int FindAlias(char *alias); // Find user with alias 'alias'
void list(char *); // Generate user list
void gentops(); // Generate top-statistics
int FindFirstMatch(char *str,bool fuzzy);
int FindNextMatch (char *str,bool fuzzy);
};
*/
struct User : _User
{
void list(char *,bool aliases=FALSE); // Generate user list
//void gentops(); // Generate top-statistics
};
struct Config : _Config {};
struct LanguageString : _LanguageString {};
struct AreaGroup : _AreaGroup {};
struct FileArea : _FileArea
{
static File f;
static int lastAreaNum;
static FileArea *lastArea;
static int numAreas;
static void open();
public:
int areaNum;
bool read(int);
static void close();
static int highAreaNum();
};
struct timelog : _TimeLog
{
void read();
void update();
};
struct dl_today
{
int files;
int kb;
};
struct BinLog
{
Date date; // 3
Time timeIn; // 3
Time timeOut; // 3
char name[36]; // 36
char city[26]; // 26
char country[26]; // 26
long baud; // 4
word node; // 2
long kbDown; // 4
long kbUp; // 4
word yells; // 2
word level; // 2
dword uflags; // 4
char alias[36]; // 36
byte extra[45];
BinLog();
bool append();
};
struct user_online
{
char name[36];
char city[16];
unsigned baud;
int status;
byte extra[8];
void read(int = 0);
void write();
void clear();
int chatreq(int); // 0->Chat Granted 1->Timeout 2->Not Avail
int check_chat(); // 0->No (>0)->node
void setstatus(int stat,int node=0);
int getstatus(int node=0);
};
#define UO_OFFLINE -2
#define UO_BROWSING 0
#define UO_SHELLING -3
#define UO_BUSY -4
#define UO_CHATTING -1
struct limits
{
unsigned level;
int timelimit;
int daily_klimit;
int pre_download;
char id[6];
unsigned free; // Free upload in Kb.
unsigned char factor; // Percentage upload required
unsigned max_download; // Max download for this level
unsigned fallto; // Fall to level x when max. reached
int msgfactor; // # Kbytes granted per message written
int sessionlimit; // Time limit per session
byte extra[3];
};
struct topentry
{
char name[36];
dword n;
};
struct aka
{
int zone;
int net;
int node;
int point;
int read(int n);
};
class usertimer
{
time_t started;
time_t suspend_start;
int suspendedtime;
bool suspended;
int fixedtime;
time_t inactivity_start;
public:
usertimer();
void start(int minutes);
void increase();
void decrease();
void changeleft(int);
void suspend();
void restart();
int timesuspended() { return suspendedtime; }
int left();
int online();
int used();
void check();
void clearinactivity();
void checkinactivity();
};
#define READMODE_ALL 0
#define READMODE_UPFIRST 1
#define READMODE_UPALL 2
#define READMODE_DIGITS 3
#define READMODE_PWD 64
#define READMODE_NOFIELD 128
class command_stack
{
int sp;
char buf[100];
public:
command_stack() { sp=0; }
void parse(char *);
void clear() { sp=0; }
char getnext();
char pollnext();
};
struct fossilio
{
int port; // comport (0=COM1)
long baud; // baud rate
int external; // 1 if key received from com-port
int stopenabled;
bool show_local;
bool show_remote;
command_stack inputbuffer;
int (*more_func)();
byte *outputBuffer;
int bufferPtr;
void init(int port,long baud);
fossilio() { baud = 65535L; outputBuffer = NULL; }
~fossilio();
void flush();
byte readkey();
byte wait();
byte wait(char *);
void wait(char);
fossilio& operator<<(char);
fossilio& operator<<(char*);
byte send(char *str,char *hotkeys=NULL);
byte sendfile(char *filename,char *hotkeys=NULL);
void drawfield(int len);
void read(char *s,int max,byte mode=READMODE_ALL);
int read(int& i,int max=5);
int read(long&, int max=7);
void readpass(char *s);
void hangup();
int ask(int def=1);
void cooldown();
void heatup();
void color(byte);
void fullcolor(byte);
void move(int x,int y);
void clreol();
void cls();
void enablestop();
void disablestop();
void clearinput();
};
struct node_entry
{
byte type;
int zone,region,net,node;
int cost;
char name[50];
char city[50];
int read(char *);
};
struct KeyData
{
Date createDate;
Time createTime;
char createdBy[36];
char sysopName[36];
char bbsName[36];
bool alpha;
bool beta;
bool gamma;
bool distSite;
bool regSite;
bool commercial;
Date expirDate;
word expirVersion;
byte extra[2];
};
#define NODE_ZONE 1
#define NODE_REGION 2
#define NODE_HOST 3
#define NODE_HUB 4
struct event
{
int type; // Errorlevel or DOS command
int errorlevel; // Errorlevel to use (>5)
char command[80]; // DOS Command to execute
Time start; // Time of the event
int duration; // Duration of the event (min).
byte empty;
byte days; // Bits 0-6 -> days of the week
byte node; // Node number to execute the event on
byte enabled; // Enabled?
int minutesleft(); // Minutes until this event
int nextday(); // Day of this event
};
struct pvt_file
{
Date date;
char fname[13];
char username[36];
char from[36];
};
struct modem_response
{
long baud;
int port;
};
struct protocol
{
char name[50]; // Name of protocol
char key; // Hotkey for Protocol
char flags; // Protocol behavior
char logfile[60]; // Logfile from protocol
char ctlfile[60]; // Control file (redirection file)
char dlcom[126]; // Download command line
unsigned efficiency; // Throughput efficiency
char ulcom[128]; // Upload command line
char dlstring[80]; // String to place in download control file
char ulstring[80]; // String to place in upload control file
char dlkeyword[40]; // Download keyword to search for in logfile
char ulkeyword[40]; // Upload keyword to search for in logfile
int wordnr; // File name word nr after keyword (1-..)
bool read(int n);
};
#define PROT_BATCH 1
#define PROT_ENABLED 2
#define PROT_BOTH 4
#define PROT_BIM 8
#define PROT_LOCAL 16
extern byte current_color;
extern bool chatflag;
extern bool noyell_flag;
extern int num_yells;
extern bool stopped;
extern char user_firstname[];
extern char mypath[];
extern char syspath[];
extern char curmenu[];
extern char page_reason[];
extern bool menuchanged;
extern bool updatemenu;
extern long totalcalls;
extern bool password_ok;
extern int num_users;
extern int time_limit;
extern int event_due;
extern int time_removed;
extern int download_limit;
extern int download_delay;
extern word free_download;
extern word upload_needed;
extern int node_number;
extern bool desqview;
extern int num_limits;
extern int returnvalue;
extern bool quiet;
extern bool net_entered,echo_entered;
extern bool registered;
extern word max_node_count;
extern int display_mode;
extern bool ega_43;
extern bool use_ems;
extern byte org_videomode;
extern word org_numlines;
extern bool ignore_carrier;
extern bool reliable;
extern bool fatal;
extern bool no_hangup;
extern word min_level;
extern bool rip_detected;
extern bool sysop_next;
extern int rip_screenlines;
extern int pastFirstUse;
extern bool newFilesChecked;
extern User user;
extern int user_recnr;
extern Config far cfg;
extern limits limit[];
extern command_stack comstack;
extern KeyData regis;
extern fossilio io;
extern event nextevent;
extern LanguageFile pb_curlang;
extern LanguageString *pb_lang;
extern int pb_num_lang;
extern BinLog lastcaller;
#ifdef Use_TagList
extern LinkedList<FilesIdx> taglist;
#endif
struct PEXhandle
{
void *func;
unsigned ds;
};
//extern PEXhandle pex_handlers[];
extern "C" int CallPEX(PEXhandle * ...);
//extern "C" void add_fhandles();
#ifdef Use_Handlers
extern LinkedList<PEXhandle> sysopkey_handlers;
extern LinkedList<PEXhandle> hangup_handlers;
#endif
/*
#define PEX_IO_INIT (&pex_handlers[0])
#define PEX_IO_STATUS (&pex_handlers[1])
#define PEX_IO_HANGUP (&pex_handlers[2])
#define PEX_IO_READBYTE (&pex_handlers[3])
#define PEX_IO_SENDBYTE (&pex_handlers[4])
#define PEX_IO_SENDBLOCK (&pex_handlers[5])
#define PEX_SYSOPKEY (&pex_handlers[6])
#define PEX_HANGUP (&pex_handlers[7])
*/
/*
extern
File f_users,
f_usersxi,
f_usersidx,
f_userspb;
*/
extern char *noregmsg;
extern Date login_date;
extern Time login_time;
void chat();
void LOG(char * ...);
void LOG(int level, char * ...);
void fatalerror(char *s);
void file_error(int fn , int errno = 0); // <0 -> Return, >0 -> Exit
void file_error (char *fn , int errno = 0);
void file_warning(char *fn , int errno = 0);
int login();
void menu_processor();
void shell (char * = NULL), combined_clear (char * = NULL),
showansasc (char * = NULL), clearmarked (char * = NULL),
pagesysop (char * = NULL), qscan_msg (char * = NULL),
writemsg (char * = NULL), scan_msg (char * = NULL),
readmsg (char * = NULL), usage_graph (char * ),
city_change (char * = NULL), days_graph (char * ),
change_state (char * = NULL), weeks_graph (char * ),
password_change (char * = NULL), version_info (char * = NULL),
lines_change (char * = NULL), raw_dir (char * = NULL),
ansi_toggle (char * = NULL), list_files (char * = NULL),
cls_toggle (char * = NULL), new_files (char * = NULL),
pause_toggle (char * = NULL), keyword_search (char * = NULL),
set_filearea (char * = NULL), filename_search (char * = NULL),
fsed_toggle (char * = NULL), download (char * = NULL),
hotkey_toggle (char * = NULL), upload (char * = NULL),
user_list (char * = NULL), view_named_file (char * = NULL),
questionnaire (char * = NULL), view_file (char * = NULL),
mailcheck (char * = NULL), view_file_wait (char * = NULL),
list_archive (char * = NULL), lastcallers (char * = NULL),
time_stat (char * = NULL), logentry (char * = NULL),
combined_select (char * = NULL), logoff (char * = NULL),
change_access (char * = NULL), view_gif (char * = NULL),
tops (char * = NULL), ibm_toggle (char * = NULL),
show_users_online (char * = NULL), phone_change (char * = NULL),
multichat (char * = NULL), dataphone_change (char * = NULL),
set_msgarea (char * = NULL), handle_change (char * = NULL),
view_ans_wait (char * = NULL), usereditor (char * = NULL),
bulletin (char * = NULL), toggle_avatar (char * = NULL),
toggle_avtplus (char * = NULL), show_graph (char * ),
ripfont_change (char * = NULL), select_language (char * = NULL),
rip_toggle (char * = NULL), edit_taglist (char * = NULL),
change_dateformat (char * = NULL), change_faxphone (char * = NULL),
change_address (char * = NULL), change_country (char * = NULL),
change_default_protocol(char * = NULL),
select_msggroup (char * = NULL), select_filegroup (char * = NULL);
int run_sdkfile (char * = NULL);
char showansascrip (char *);
extern void (*menufunctions[])(char *);
void parse_date(Date& d,char *s,int format);
void multilinechat(int);
char *strstrl(char *,char *);
int check_access(unsigned,AccessFlags); // 0 -> Denied
int check_access(unsigned,AccessFlags,AccessFlags); // 0 -> Denied
int linecounter(int = -1);
void sysopkey(word);
void replymsg(Message&);
int matchstring(char *s,char *d); // 1->ok, 0->not ok
int matchstring(char *s,char *d,int l); // 1->ok, 0->not ok
int matchfile(char *search,char *file);
char *findmatch(char *,char *);
void strip_path(char *);
void strip_fname(char *);
void msged();
char showansasc(char *file,char *hotkeys);
bool show_rip( char *file , bool reset = FALSE);
void rip_send( char *s);
void rip_query( char *cmd);
void rip_reset();
void rip_textmode();
void rip_nomore();
void rip_kill_mouse_fields();
void rip_bar(int,int,int,int);
void rip_color(int);
void rip_fill_color(int,int);
void rip_send_icons();
void rip_button(int x1,int y1,int x2,int y2,int hotkey,bool def,char *icon,char *text,char *hostcmd);
void rip_start_dialog(char *prompt,int max);
void rip_end_dialog();
void rip_start_yesno_dialog( char *prompt , bool);
void rip_clear_status();
void rip_show_more();
void rip_show_more_tag();
void rip_show_enter();
#define rip_save_textwindow() rip_query("$STW$")
#define rip_restore_textwindow() rip_query("$RTW$")
#define rip_save_mouse_fields() rip_query("$SMF$")
#define rip_restore_mouse_fields() rip_query("$RMF$")
#define rip_paste_clipboard() rip_query("$PCB$")
#define rip_doorway_on() rip_query("$DWAYON$")
#define rip_doorway_off() rip_query("$DWAYOFF$")
#define rip_cursor_on() rip_query("$CON$")
#define rip_cursor_off() rip_query("$COFF$")
String meganum(word);
void readconfig();
int parse_data(char *s,String *param); // ret=number of params
void create_arealist(String param[],int numpara,BitArray& arealist,bool msgareas = FALSE);
void adjust_limits();
void deltrailspaces(char *);
int wordwrap(char *,String&,int max);
char playsong(char *name,char *keys,int length);
void toggle_userinfo();
void toggle_help();
void toggle_macrohelp();
void edit_user();
void screen_image();
void update_user_window();
void update_display();
long post_message(char *from,char *to,char *subj,int area,int pvt);
long post_netmail_message(char *from,char *to,char *subj,int area,int zone,int net,int node,int point,bool crash,bool attach,bool kill);
void write_msgtmp(char *s);
void edit_message();
void write_msginf( char *from , char *to , char *subj , long num , char *area , char *pvt);
String replace_stringvars(char *s);
void show_intro();
void check_exe(char *);
int fuzzy_search(char *,char *,int);
int intimewindow(Time t1,Time t2);
char *dos_error_message(int errno);
bool select_protocol(protocol& p , char protocol_key = '\0' , bool seldef = FALSE);
String fullcolor_string(byte color);
void remove_tag(char *name , int area);
bool is_tagged(char *name , int area);
void write_taglist();
void read_taglist();
void InputDate( Date &d,
byte iDateFormat );
void rip_text_window( int x0, int y0 , int x1 , int y1 , int font );
extern "C"
{
void set43();
void set25();
void setvideomode(unsigned);
unsigned getvideomode();
}
void exit_proboard(int level = 0);
extern char *months_short[];
extern char *months_full [];
extern char *days_short [];
extern char *days_full [];
extern char *date_formats[];
extern char *date_formats_long[];
extern usertimer timer;
extern FileName FN_BINLOG_PB,
FN_TIMELOG_PRO,
FN_ONLINE_PRO,
FN_MSGAREAS_PRO,
FN_PVTFILES_PB;
const int ERR_BINLOG_PB = 6;
const int ERR_TIMELOG_PRO = 7;
const int ERR_ONLINE_PRO = 9;
const int ERR_AKA_PRO = 10;
const int ERR_USERS_BBS = 11;
const int ERR_USERSXI_BBS = 12;
const int ERR_USERSIDX_BBS = 13;
const int ERR_USERSPB_BBS = 14;
const int ERR_LASTREAD_BBS = 15;
extern char *EMPTY_STRING;
#define COLOR_RED 1
#define COLOR_GREEN 2
#define COLOR_YELLOW 3
#define COLOR_BLUE 4
#define COLOR_MAGENTA 5
#define COLOR_CYAN 6
#define COLOR_WHITE 7
#define COLOR_BLINK 0x80
#define ERRLVL_FATALERR 1
#define READMSG_ALL 1
#define READMSG_FWD 1
#define READMSG_REV 2
#define READMSG_SEL 3
#define READMSG_SEARCH 4
#define READMSG_NEW 5
#define READMSG_INDIV 6
#define READMSG_MARKED 7
#define ANS_OK 0 // showansasc retval if ok
#define ANS_STOP 1 // showansasc retval if file stopped
#define ANS_NOFILE 2 // showansasc retval if no file
#define ansi_mode (user.uFlags & UFLAG_ANSI)
#define cls_mode (user.uFlags & UFLAG_CLEAR)
#define pause_mode (user.uFlags & UFLAG_PAUSE)
#define fsed_mode (user.uFlags & UFLAG_FSED)
#define rip_mode (rip_detected && !(user.uFlags & UFLAG_NORIP))
#define stack_mode (!(user.uFlags & UFLAG_HOTKEYS))
#define no_ibm (user.uFlags & UFLAG_NOIBM)
#define avatar (user.uFlags & UFLAG_AVATAR)
#define avtplus (user.uFlags & UFLAG_AVTPLUS)
struct DownloadFile
{
int area;
long size;
bool free;
bool copy;
String name;
};
#include "prompts.hpp"
bool ReadLanguage( char *langname );
char wait_language_hotkeys(char *hk, bool enter = TRUE);
int language_string_length( char *str );
#include "reg.hpp"
#endif

1097
procfg/PROCFG.CPP Normal file

File diff suppressed because it is too large Load Diff

BIN
procfg/PROCFG.EXE Normal file

Binary file not shown.

222
procfg/PROCFG.HPP Normal file
View File

@ -0,0 +1,222 @@
/* ------------------------------------------------------------
* Filename ............... ProCfg.Hpp
*
* General Purpose ........ main include file
* ------------------------------------------------------------
* First date ............. long time ago ;-)
*
* First in version ....... 0.00 alpha 1 ?
*
* Written by ............. P. Leybaert & A. Schellinck
* ------------------------------------------------------------
* Revisions:
* ----------
*
* Date | By | Purpose |
* ---------+----+--------------------------------------------+
* 08/05/99 | JR | Updated to v2.2 |
* | | |
* | | |
*/
/*--] Include files [------------------------------------------------------*/
#include <tslib.hpp>
#include <tswin.hpp>
#include <pb_lib.hpp>
/*--] Defines [------------------------------------------------------------*/
//----------------------------------
// Color of status bar at the bottom
//----------------------------------
#define BAR_COLOR 0x4E // Generic color
#define BAR_HIGH 0x4E // Status bar highlight color
#define BAR_NORM 0x4F // Status bar normal color
#define PROT_BATCH 1
#define PROT_ENABLED 2
#define PROT_BOTH 4
#define PROT_BIM 8
#define PROT_LOCAL 16
#define MAX_AKA 50
#define MAX_FILEAREA 10000
#define MAX_MSGAREA 10000
#define MAX_PVTFILE 100
#define MAX_LIMITS 50
#define MAX_PROTOCOL 20
#define MAX_EVENT 30
/*--] version control [----------------------------------------------------*/
#define VERSION "2.22"
/*--] Structure definitions [----------------------------------------------*/
struct filearea : _FileArea {};
struct Config : _Config {};
struct pbconfig : _ModemConfig {};
/*--] Structures [-------------------------------] aka [-------------------*/
struct aka
{
int zone;
int net;
int node;
int point;
};
/*--] Structures [-------------------------------] protocol [--------------*/
struct protocol
{
char name[50]; // Name of protocol
char key; // Hotkey for Protocol
char flags; // Protocol behavior
char logfile[60]; // Logfile from protocol
char ctlfile[60]; // Control file (redirection file)
char dlcom[126]; // Download command line
unsigned eff;
char ulcom[128]; // Upload command line
char dlstring[80]; // String to place in download control file
char ulstring[80]; // String to place in upload control file
char dlkeyword[40]; // Download keyword to search for in logfile
char ulkeyword[40]; // Upload keyword to search for in logfile
int wordnr; // File name word nr after keyword (1-..)
};
/*--] Structures [-------------------------------] limits [----------------*/
struct limits
{
unsigned level;
int timelimit;
int daily_klimit;
int pre_download;
char id[6];
unsigned free; // Free upload in Kb.
unsigned char factor; // Percentage upload required
unsigned max_download; // Max download for this level
int fallto; // Fall to level x when max. reached
int msgfactor; // # Kbytes granted per message written
byte extra[5];
};
/*--] Structures [-------------------------------] topentry [--------------*/
struct topentry
{
char name[36];
unsigned n;
};
/*--] Structures [-------------------------------] event [-----------------*/
struct event
{
int type; // Errorlevel or DOS command
int errorlevel; // Errorlevel to use (>5)
char command[80]; // DOS Command to execute
Time start; // Start time for event
int duration; // Duration (min)
byte empty;
byte days; // Bits 0-6 -> days of the week
byte node; // Node number to execute the event on
byte enabled; // Enabled?
};
/*--] Structures [-------------------------------] pvt_files [-------------*/
struct pvt_file
{
Date date;
char fname[13];
char username[36];
char from[36];
};
/*--] Structures [-------------------------------] User [------------------*/
struct User : _User
{
};
/*--] Prototypes [---------------------------------------------------------*/
int ask_save ( );
int ask_confirm ( char *title );
KEY aka_select ( int, Window&, int, int ,char, void* );
void aka_select_func ( int i,int x,int y );
void append_backspace ( char * );
void editPvtFile ( );
void editSysParam ( );
void editTemplate ( char *sysPath );
void editUser ( char *syspath, int, char *[] );
void edit_akas ( );
KEY edit_color ( int, Window&, int, int ,char, void* );
void edit_events ( );
void edit_fgroups ( );
void edit_mgroups ( );
void edit_language ( char * );
void edit_limits ( );
void edit_macros ( );
void edit_menu ( char * );
void edit_areas ( int fa );
void edit_pb ( );
void edit_protocol ( );
void edit_stats ( );
KEY edit_timeframe ( int, Window&, int, int ,char, void* );
KEY edit_nodes ( int, Window& ,int ,int ,char, void* );
void EditListColors ( );
KEY flag_select ( int, Window&, int, int ,char, void* );
KEY flagonoff_select ( int, Window&, int, int ,char, void* );
void menu_editor ( int, char *[] );
String select_language ( bool edit );
void show_flags ( );
void showAbout ( );
void ShowBusy(char *msg);
void HideBusy();
/*--] Global variables [---------------------------------------------------*/
extern protocol *p;
extern Config far cfg;
extern pbconfig far pbcfg;
extern limits *limit;
extern aka *akas;
extern event *events;
//extern pvt_file *pvtfiles;
extern int num_proto;
extern int num_msgareas;
extern int num_limits;
extern int num_aka;
extern int num_events;
//extern int num_pvtfiles;
extern KEY select_hotkeys[];
extern char *loglevels[];
extern char *months_short[];
extern char *days_short[];
extern char *yesnoask[];
extern char syspath[];
void KeyItem( Window &w,
int x,
int y,
ATTR iKeyColor,
char *pKey,
ATTR iDescColor,
char *pDesc );
/*---------------------------] END OF THE CODE [---------------------------*/

3697
procfg/PROCFG.I Normal file

File diff suppressed because it is too large Load Diff

113
procfg/PROCFG.MAP Normal file
View File

@ -0,0 +1,113 @@
Start Stop Length Name Class
00000H 04013H 04014H _TEXT CODE
04014H 057B5H 017A2H EDITAREA_TEXT CODE
057B6H 08366H 02BB1H EDITUSER_TEXT CODE
08367H 08565H 001FFH TEMPLATE_TEXT CODE
08566H 0AF22H 029BDH AREA_TEXT CODE
0AF23H 0B246H 00324H MISC_TEXT CODE
0B247H 0B354H 0010EH PB_BOARD_TEXT CODE
0B355H 0B688H 00334H PB_FLAGS_TEXT CODE
0B689H 0B7CFH 00147H PB_MISC_TEXT CODE
0B7D0H 0BAF0H 00321H TH_RECIO_TEXT CODE
0BAF1H 0C433H 00943H _OVRTEXT_ CODE
0C434H 0CB0BH 006D8H PB_LIB_TEXT CODE
0CB0CH 0D2ECH 007E1H LANG_TEXT CODE
0D2EDH 0FBE3H 028F7H USER_TEXT CODE
0FBE4H 1111AH 01537H DATE_TEXT CODE
1111BH 11398H 0027EH DIRSCAN_TEXT CODE
1139AH 113D1H 00038H FIND_TEXT CODE
113D2H 1234FH 00F7EH DSTRING_TEXT CODE
12350H 124F0H 001A1H BITARRAY_TEXT CODE
124F1H 1256AH 0007AH SOUND_TEXT CODE
1256BH 1263EH 000D4H CRC16_TEXT CODE
1263FH 12783H 00145H CRC32_TEXT CODE
12784H 12B8DH 0040AH FUZZY_TEXT CODE
12B8EH 146A5H 01B18H FORM_TEXT CODE
146A6H 147BFH 0011AH MSDOS_TEXT CODE
147C0H 14CDEH 0051FH FNAME_TEXT CODE
14CDFH 16010H 01332H FILE_TEXT CODE
16011H 16696H 00686H DIRFUNC_TEXT CODE
16697H 167F9H 00163H INIT_TEXT CODE
167FAH 1694DH 00154H KEYBOARD_TEXT CODE
1694EH 16F0FH 005C2H POPMENU_TEXT CODE
16F10H 173B5H 004A6H RECTANG_TEXT CODE
173B6H 17EC9H 00B14H SCAN_TEXT CODE
17ECAH 18AEBH 00C22H SELECT_TEXT CODE
18AECH 1A6C7H 01BDCH WINDOW_TEXT CODE
1A6C8H 1AB78H 004B1H PWS_ASM_TEXT CODE
1AB79H 1AC95H 0011DH RESTORE_TEXT CODE
1AC96H 1AD43H 000AEH GAUGE_TEXT CODE
1AD44H 1AF58H 00215H SAVEBUF_TEXT CODE
1AF59H 1B115H 001BDH MSGBOX_TEXT CODE
1B116H 1B3A4H 0028FH SELBOX_TEXT CODE
1B3A5H 1B430H 0008CH TSW_ASM_TEXT CODE
1B440H 1B440H 00000H _FARDATA FAR_DATA
1B440H 1CBB5H 01776H PROCFG5_DATA FAR_DATA
1CBC0H 1CEECH 0032DH EDITMENU5_DATA FAR_DATA
1CEF0H 1CEFFH 00010H EDITPVT5_DATA FAR_DATA
1CF00H 1D22CH 0032DH LANGUAGE5_DATA FAR_DATA
1D230H 1D230H 00000H _FARBSS FAR_BSS
1D230H 1D230H 00000H _OVERLAY_ OVRINFO
1D230H 1D2C6H 00097H _OVRDATA_ OVRINFO
1D2D0H 1D2EFH 00020H _STUB_ OVRINFO
1D2F0H 1D2F0H 00000H _EXTSEG_ OVRINFO
1D2F0H 1D2F0H 00000H _EMSSEG_ OVRINFO
1D2F0H 1D2F0H 00000H _VDISKSEG_ OVRINFO
1D2F0H 1D5B7H 002C8H _EXEINFO_ OVRINFO
1D5C0H 1D5C0H 00000H _1STUB_ STUBSEG
1D5C0H 1D616H 00057H PROCFG_TEXT STUBSEG
1D620H 1D644H 00025H EDITAKA_TEXT STUBSEG
1D650H 1D67EH 0002FH EDITLIM_TEXT STUBSEG
1D680H 1D6A4H 00025H EDITMAC_TEXT STUBSEG
1D6B0H 1D6FCH 0004DH EDITMENU_TEXT STUBSEG
1D700H 1D729H 0002AH EDITPB_TEXT STUBSEG
1D730H 1D759H 0002AH EDITPROT_TEXT STUBSEG
1D760H 1D7BBH 0005CH EDITSYS_TEXT STUBSEG
1D7C0H 1D7EEH 0002FH EVENTS_TEXT STUBSEG
1D7F0H 1D8B9H 000CAH EDITPVT_TEXT STUBSEG
1D8C0H 1D902H 00043H LANGUAGE_TEXT STUBSEG
1D910H 1D948H 00039H SEL_LANG_TEXT STUBSEG
1D950H 1D9A6H 00057H EXTSEL_TEXT STUBSEG
1D9B0H 1D9D4H 00025H FLAGS_TEXT STUBSEG
1D9E0H 1DA1DH 0003EH PROMISC_TEXT STUBSEG
1DA20H 1DA53H 00034H EDITVTPL_TEXT STUBSEG
1DA60H 1DAC5H 00066H EDITGRP_TEXT STUBSEG
1DAD0H 1DAF4H 00025H EDITLCOL_TEXT STUBSEG
1DB00H 1DB29H 0002AH EDITNODE_TEXT STUBSEG
1DB30H 1DB5EH 0002FH MISC_TEXT STUBSEG
1DB60H 29AF9H 0BF9AH _DATA DATA
29AFAH 29AFBH 00002H _CVTSEG DATA
29AFCH 29B01H 00006H _SCNSEG DATA
29B02H 29B02H 00000H _CONST CONST
29B02H 29B61H 00060H _INIT_ INITDATA
29B62H 29B62H 00000H _INITEND_ INITDATA
29B62H 29B8BH 0002AH _EXIT_ EXITDATA
29B8CH 29B8CH 00000H _EXITEND_ EXITDATA
29B8CH 2B6B5H 01B2AH _BSS BSS
2B6B6H 2B6B6H 00000H _BSSEND BSSEND
2B6C0H 2B73FH 00080H _STACK STACK
2B750H 2DBEDH 0249EH PROCFG_TEXT :OVY
2DF00H 2E1EAH 002EBH EDITAKA_TEXT :OVY
2E220H 2E83AH 0061BH EDITLIM_TEXT :OVY
2E890H 2E994H 00105H EDITMAC_TEXT :OVY
2E9B0H 319FDH 0304EH EDITMENU_TEXT :OVY
31C40H 324F0H 008B1H EDITPB_TEXT :OVY
325C0H 32C71H 006B2H EDITPROT_TEXT :OVY
32CB0H 344D7H 01828H EDITSYS_TEXT :OVY
34740H 353AEH 00C6FH EVENTS_TEXT :OVY
35430H 375F6H 021C7H EDITPVT_TEXT :OVY
37820H 38E70H 01651H LANGUAGE_TEXT :OVY
39010H 3967CH 0066DH SEL_LANG_TEXT :OVY
39700H 3A3CDH 00CCEH EXTSEL_TEXT :OVY
3A3F0H 3A6FAH 0030BH FLAGS_TEXT :OVY
3A730H 3AF33H 00804H PROMISC_TEXT :OVY
3AFB0H 3C037H 01088H EDITVTPL_TEXT :OVY
3C150H 3CA92H 00943H EDITGRP_TEXT :OVY
3CB30H 3D1F2H 006C3H EDITLCOL_TEXT :OVY
3D2D0H 3D6D5H 00406H EDITNODE_TEXT :OVY
3D730H 3D87EH 0014FH MISC_TEXT :OVY
Program entry point at 0000:0000

BIN
procfg/PROCFG.OBJ Normal file

Binary file not shown.

498
procfg/PROMISC.CPP Normal file
View File

@ -0,0 +1,498 @@
/* ------------------------------------------------------------
* Filename ............... ProMisc.Cpp
*
* General Purpose ........ some miscellaneous functions
* ------------------------------------------------------------
* First date ............. 15 dec 1993
*
* First in version ....... 2.00
*
* Written by ............. Alain Schellinck
* ------------------------------------------------------------
* Revisions:
* ----------
*
* Date | By | Purpose |
* ---------+----+--------------------------------------------+
* | | |
* | | |
* | | |
*/
/*-------------------------------------------------------------------------*/
#include <ctype.h>
#include <string.h>
#include "ThProCfg.Hpp"
/*-------------------------------------------------------------------------*/
/*
* Routine : enterPwd
* Purpose : let the user enter a password
* ------------------------------------------------------------------------
* Parameters: None
* Return : None
*
*/
KEY
enterPwd(IntT mode, Window& w, IntT x, IntT y, ChrT attr, AnyP data)
{
User *user = (User *) data;
tsw_cursoroff();
if(mode == TRUE)
{
Window w(10, 5, 40, 7, setFBColor(hWhite, nMagenta));
w.open();
w << " Password: ";
w.attrib(setFBColor(hYellow, nMagenta));
tsw_cursoron();
ChrT buffer[16];
if(user->passWord[0] == '\0')
{
buffer[0] = '\0';
w.scan(buffer, 15, 16);
if(buffer[0])
{
strcpy(user->passWord , buffer);
user->passWordCRC = RaCrc(user->passWord);
}
}
else
{
strcpy(buffer, user->passWord);
w.scan(buffer, 15, 16);
tsw_cursoroff();
strcpy(user->passWord, buffer);
user->passWordCRC = RaCrc(user->passWord);
}
}
else
{
if(user->passWord[0] == '\0')
{
w.direct(x,y,attr,String(cfg.pwdchar,16));
}
else
{
String str(user->passWord);
if(cfg.hidePassword == TRUE)
str = String(cfg.pwdchar, strlen(user->passWord));
str.justify(String::left, 16);
w.direct(x, y, attr, str);
}
}
tsw_cursoron();
return 0;
}
/*
* Routine : askYesNo()
* Purpose : ask YES or NO
* ------------------------------------------------------------------------
* Parameters: Title
* Return : -1 = ESC, TRUE = YES, FALSE = NO
*
*/
ShrtT askYesNo(ChrP title)
{
ShrtT ret_val = -1;
Window w(16, 9, 65, 16, setFBColor(hWhite, nBlack), SHADOW|CENTERED_X);
w.open();
w.centerLine(2, title, setFBColor(hYellow, nBlack));
menu_item yesNoMenu[]=
{
{ 'Y', 18,18, " YES " },
{ 'N', 17,17, " NO " },
{ 0 , 0,0, NULL }
};
PopMenu menu(yesNoMenu, setFBColor(nBlack, nWhite), setFBColor(hWhite, nBlack));
menu.open(18, 13, 63, 14, setFBColor(nWhite, nBlack), NOBORDER|CENTERED_X);
tsw_cursoroff();
ShrtT choice = menu.process();
if(choice > 0)
ret_val = 2 - choice;
return(ret_val);
}
//**************************************************************************
//
// Calculate the raw string width of a help line, without color codes
//
// Prototype: int CalcHelpWidth( char *pData );
//
// Parameters: pData ... Help data to calculate the length of
//
// Returns: The length, without any color codes
//
// Remarks:
//
// This routine takes a help line, and calculates how long it is without any
// color codes. A color code is a three byte sequence starting with 0x01,
// then two hex-encoded digits (i.e., "71" would indicate blue on a gray
// background.)
//
// -------------------------------------------------------------------------
//
// Created on: 08/06/99 (Jeff Reeder)
// Last modified: 08/06/99 (Jeff Reeder) Created
//
//**************************************************************************
int CalcHelpWidth( char *pData )
{
int cLength = 0;
while ( pData &&
*pData )
{
if ( *pData == 0x01 )
{
pData++;
if ( *pData &&
isxdigit( *pData ) )
{
pData++;
if ( *pData &&
isxdigit( *pData ) )
{
pData++;
}
}
}
else
{
cLength++;
pData++;
}
}
return cLength;
}
//**************************************************************************
//
// Converts a single hex character to a numerical value from 0-15
//
// Prototype: int HexCharToInt( char iChar );
//
// Parameters: iChar ... Hex value to convert
//
// Returns: A value from 0 through 15.
//
// Remarks:
//
// If the character value is not a valid hex digit, then a value of 0 is
// returned.
//
// -------------------------------------------------------------------------
//
// Created on: 08/06/99 (Jeff Reeder)
// Last modified: 08/06/99 (Jeff Reeder) Created
//
//**************************************************************************
int HexCharToInt( char iChar )
{
if ( isxdigit( iChar ) )
{
if ( iChar >= '0' &&
iChar <= '9' )
{
return iChar - '0';
}
else
{
return toupper( iChar ) - 'A' + 10;
}
}
else
{
//------------------
// Invalid hex digit
//------------------
return 0;
}
}
//**************************************************************************
//
//
//
// Prototype: void helpShowLine( Window &w, int iLine, char *pText );
//
// Parameters: w ... Window to show line of help text in
// iLine ... Line number in window to receive the text
// iDefAttr ... Default color attribute
// pText ... Text to show
//
// Returns: Nothing
//
// Remarks:
//
// This routine displays a single line of text to the help window. It
// properly handles all color codes, and displays data appropriately.
//
// If the help line doesn't contain any color codes, then it is displayed in
// the default color attribute <iDefAttr>.
//
// -------------------------------------------------------------------------
//
// Created on: 08/06/99 (Jeff Reeder)
// Last modified: 08/06/99 (Jeff Reeder) Created
//
//**************************************************************************
static
void helpShowLine( Window &w,
int iLine,
ATTR iDefAttr,
char *pText )
{
int iPos = 0;
int cLength = strlen( pText );
ATTR iCurAttr = iDefAttr;
for ( int i = 0; i < cLength; i++ )
{
if ( pText[ i ] == 0x01 )
{
//------------------------
// Looks like a color code
//------------------------
if ( isxdigit( pText[ i + 1 ] ) &&
isxdigit( pText[ i + 2 ] ) )
{
//----------------------------
// We have a valid color code!
//----------------------------
int iBack;
int iFore;
//-----------------------------------------
// Get the foreground and background colors
//-----------------------------------------
iBack = HexCharToInt( pText[ i + 1 ] );
iFore = HexCharToInt( pText[ i + 2 ] );
iCurAttr = ( ( iBack & 0x0F ) << 4 ) |
( iFore & 0x0F );
i += 2;
}
}
else
{
tsw_maputc( w.minX + iPos,
w.minY + iLine - 1,
iCurAttr,
pText[ i ] );
iPos++;
}
}
}
//**************************************************************************
//
// Display a help message
//
// Prototype: void showHelp( ChrP hlp[], char *pTitle, FlgT center );
//
// Parameters: hlp ... An array of help lines to display
// pTitle ... Help window title
// center ... TRUE to center each line, FALSE otherwise
//
// Returns: Nothing
//
// Remarks:
//
//
//
// -------------------------------------------------------------------------
//
// Created on: ??/??/???? (Philippe Leybaert)
// Last modified: 08/06/1999 (Jeff Reeder) Modified to support custom
// color codes in individual lines in the message
//
//**************************************************************************
void showHelp( ChrP hlp[],
char *pTitle,
FlgT center )
{
int bHasCodes = 0;
tsw_cursoroff();
ShrtT lines = 0;
ShrtT width = 0;
while ( hlp[ lines ] != NULL )
{
if ( strchr( hlp[ lines ], 0x01 ) )
{
bHasCodes = 1;
}
width = max( width,
CalcHelpWidth( hlp[ lines ] ) + ( center * 4 ) );
lines++;
}
ShrtT hFree = tsw_hsize - ( width + 3 );
ShrtT vFree = tsw_vsize - ( lines + 1 );
ShrtT ux = hFree / 2;
ShrtT uy = vFree / 2;
Window w( ux,
uy,
ux + width + 3,
uy + lines + 1,
0x5F,
( pTitle && *pTitle )
? ( SHADOW | BRACKETS )
: SHADOW,
CHISEL_BORDER,
0x5D,
NULL,
0x50 );
w.open();
if ( pTitle &&
*pTitle )
{
w.title( pTitle, 0x5F );
}
for ( ShrtT cnt = 0; cnt < lines; cnt++ )
{
if ( bHasCodes )
{
helpShowLine( w,
cnt + 1,
0x5F,
hlp[ cnt ] );
}
else
{
String txt( hlp[ cnt ] );
if ( center == TRUE )
{
txt.justify( String::centered, width );
txt.rtrim();
}
w << ChrP( txt );
if (
( cnt + 1 != lines ) &&
( txt.len() < width )
)
{
w << "\n";
}
}
}
tsw_showfooter( "Press any key to continue.", BAR_NORM );
KB.get();
}
/*
* Routine : showAbout()
* Purpose : show the about screen
* ------------------------------------------------------------------------
* Parameters: None
* Return : None
*
*/
void showAbout()
{
LCL ChrP aboutText[] =
{
" ",
" 5EProBoard v" VERSION " Configuration Utility",
" ",
" Copyright (c) 2019 John Riley ",
" All Rights Reserved ",
" ",
" Developed by the ProBoard Development Ninja Team ",
" ",
" 5DPortions written by Alain Schellinck ",
" ",
NULL
};
showHelp( aboutText, "About ProBoard" );
}
/*---------------------------] END OF THE CODE [---------------------------*/

BIN
procfg/PROMISC.OBJ Normal file

Binary file not shown.

132
procfg/SEL_LANG.CPP Normal file
View File

@ -0,0 +1,132 @@
#include <string.h>
#include "procfg.hpp"
static String fn_languages [100];
static String desc_languages [100];
static int num_languages;
static int show_def;
void
list_func(int i , int x , int y)
{
if(show_def && i==0)
{
tsw_maputs( x, y , 0x5F , " ³ (default)");
}
else
{
if(show_def)
i--;
tsw_maputs( x,
y ,
0x5F ,
form(" %-8s ³ %-38.38s",(char *)fn_languages[i],(char *)desc_languages[i]));
}
tsw_maputc(x+10,y,0x5D,'³');
}
void
line_clear(int x,int y)
{
tsw_maputc(x+10,y,0x5D,'³');
}
String
select_language( bool edit )
{
SelectWindow sw;
sw.open( 3,
3,
56,
tsw_vsize - 3,
0x5E,
SHADOW | BRACKETS,
CHISEL_BORDER,
0x5D,
NULL,
0x51 );
sw.title( edit
? "Select language to edit"
: "Select language for menus",
0x5E );
DirScan scan(FileName(syspath,"*.PBL"));
for(num_languages=0;int(scan);scan++)
{
File f;
if(f.open(FileName(syspath,scan.name())))
{
LanguageFile *lf = new LanguageFile;
f.read(lf,sizeof(*lf));
FileName fn(scan.name());
fn.stripExt();
fn_languages[num_languages] = fn;
desc_languages[num_languages] = lf->name;
f.close();
if(fn != "_DEFAULT" && (lf->menuPath[0] || edit))
num_languages++;
delete lf;
}
}
int i,j;
for(i=0;i<num_languages-1;i++)
for(j=i+1;j<num_languages;j++)
{
if(stricmp(desc_languages[i],desc_languages[j]) > 0)
{
String tmp;
tmp = desc_languages[i];
desc_languages[i] = desc_languages[j];
desc_languages[j] = tmp;
tmp = fn_languages[i];
fn_languages[i] = fn_languages[j];
fn_languages[j] = tmp;
}
}
if(num_languages == 0 && !edit)
return "*";
KEY hotkeys[] = { 0 };
sw.define( num_languages + (edit ? 0:1),0x70,list_func,0,NULL,hotkeys,NULLFUNC,line_clear);
sw.direct(11,0,0x5D, 'Â');
sw.direct(11 ,tsw_vsize-6,0x51, 'Á');
show_def = !edit;
CursorState _cursor(FALSE);
for(;;)
{
i = sw.process();
if(i<0)
break;
if(edit)
edit_language(fn_languages[i]);
else
return (i ? (char *)fn_languages[i-1] : "*");
}
return "";
}

BIN
procfg/SEL_LANG.OBJ Normal file

Binary file not shown.

131
procfg/TEMPLATE.CPP Normal file
View File

@ -0,0 +1,131 @@
/* ------------------------------------------------------------
* Filename ............... Template.Cpp
*
* General Purpose ........ Template IO functions
* ------------------------------------------------------------
* First date ............. 6 november 1993
*
* First in version ....... 2.00
*
* Written by ............. Alain Schellinck
* ------------------------------------------------------------
* Revisions:
* ----------
*
* Date | By | Purpose |
* ---------+----+--------------------------------------------+
* | | |
* | | |
* | | |
*/
/*-------------------------------------------------------------------------*/
#include <string.h>
#define Uses_MultiRecIO
#include <ProBoard.Hpp>
#include "Template.Hpp"
/*--] Code [-------------------------------------] TemplateIO class [------*/
/*
* Routine : TemplateIO()
* Purpose : The constructor
* ------------------------------------------------------------------------
* Parameters: ProBoard pex path, filename
* Return : None
*
*/
TemplateIO::TemplateIO(ChrP path, ChrP fn)
{
setFname(path, fn);
}
/*
* Routine : readRec()
* Purpose : read a record from the current file
* ------------------------------------------------------------------------
* Parameters: None
* Return : TRUE if OK, FALSE if NOT
*
*/
FlgT TemplateIO::readRec()
{
return(File::read(this, recLen()) == recLen());
}
/*
* Routine : writeRec()
* Purpose : write a record to the current file
* ------------------------------------------------------------------------
* Parameters: None
* Return : TRUE if OK, FALSE if NOT
*
*/
FlgT TemplateIO::writeRec()
{
return(File::write(this, recLen()) == recLen());
}
/*
* Routine : recLen()
* Purpose : return the record length
* ------------------------------------------------------------------------
* Parameters: None
* Return : record length
*
*/
ShrtT TemplateIO::recLen()
{
return(SIZ(template_data));
}
/*
* Routine : clear()
* Purpose : clear the current record
* ------------------------------------------------------------------------
* Parameters: None
* Return : None
*
*/
void TemplateIO::clear()
{
memset(this, 0, recLen());
}
/*
* Routine : inUse()
* Purpose : check if a record is in use
* ------------------------------------------------------------------------
* Parameters: None
* Return : TRUE if in use, FALSE if NOT
*
*/
FlgT TemplateIO::inUse()
{
return((strlen(desc) > 0) ? TRUE : FALSE);
}
/*
* Routine : copy()
* Purpose : Copy the data from another object (of the same type !)
* ------------------------------------------------------------------------
* Parameters: pointer to the other object
* Return : None
*
*/
void TemplateIO::copy(TemplateIOP orig)
{
memcpy(this, orig, recLen());
}
/*---------------------------] END OF THE CODE [---------------------------*/

70
procfg/TEMPLATE.HPP Normal file
View File

@ -0,0 +1,70 @@
/* ------------------------------------------------------------
* Filename ............... Template.Hpp
*
* General Purpose ........ include file with template class
* ------------------------------------------------------------
* First date ............. 15 dec 1993
*
* First in version ....... 2.00
*
* Written by ............. Alain Schellinck
* ------------------------------------------------------------
* Revisions:
* ----------
*
* Date | By | Purpose |
* ---------+----+--------------------------------------------+
* | | |
* | | |
* | | |
*/
/*--] Classes [----------------------------------] TemplateIO [------------*/
const ShrtT maxTemplates = 256;
_StructType(template_data)
struct template_data
{
ChrT desc [ 61]; // description
ChrT comment [ 81]; // comment
ChrT valMsg [ 9]; // message to send when validating
WrdT secLevel; // security level
WrdT subscribe; // subscribe period in days
WrdT expLevel; // expiration level
WrdT tbTime; // time to add on the timebank
WrdT tbKbyte; // kbyte to add on the timebank
WrdT netCredit; // netmail credit
IntT logLevel; // his/her loglevel
FlgT hidden; // some UFLAGS_xxx booleans
FlgT noTops;
FlgT atten;
FlgT noKill;
FlgT ignDld;
FlgT deleted; // is this template deleted ?
ChrT reserved [99]; // reserved for the future
PbFlags valFlagsOn; // access flags to switch on (validated)
PbFlags valFlagsOff; // access flags to switch off (validated)
PbFlags expFlagsOn; // access flags to switch on (expired)
PbFlags expFlagsOff; // access flags to switch off (expired)
};
_ClassType(TemplateIO)
class TemplateIO : public template_data, public MultiRecIO
{
public:
TemplateIO ( ChrP path, ChrP fn = "Template.Pb" );
FlgT readRec ( );
FlgT writeRec ( );
ShrtT recLen ( );
void clear ( );
void copy ( TemplateIOP orig );
FlgT inUse ( );
};
extern TemplateIOP tpl;
/*---------------------------] END OF THE CODE [---------------------------*/

72
procfg/TEMPLATE.I Normal file
View File

@ -0,0 +1,72 @@
template.hpp 1:
template.hpp 2:
template.hpp 3:
template.hpp 4:
template.hpp 5:
template.hpp 6:
template.hpp 7:
template.hpp 8:
template.hpp 9:
template.hpp 10:
template.hpp 11:
template.hpp 12:
template.hpp 13:
template.hpp 14:
template.hpp 15:
template.hpp 16:
template.hpp 17:
template.hpp 18:
template.hpp 19:
template.hpp 20:
template.hpp 21:
template.hpp 22:
template.hpp 23:
template.hpp 24:
template.hpp 25: const ShrtT maxTemplates = 256;
template.hpp 26:
template.hpp 27: _StructType(template_data)
template.hpp 28: struct template_data
template.hpp 29: {
template.hpp 30: ChrT desc [ 61];
template.hpp 31: ChrT comment [ 81];
template.hpp 32: ChrT valMsg [ 9];
template.hpp 33: WrdT secLevel;
template.hpp 34: WrdT subscribe;
template.hpp 35: WrdT expLevel;
template.hpp 36: WrdT tbTime;
template.hpp 37: WrdT tbKbyte;
template.hpp 38: WrdT netCredit;
template.hpp 39: IntT logLevel;
template.hpp 40: FlgT hidden;
template.hpp 41: FlgT noTops;
template.hpp 42: FlgT atten;
template.hpp 43: FlgT noKill;
template.hpp 44: FlgT ignDld;
template.hpp 45: FlgT deleted;
template.hpp 46: ChrT reserved [99];
template.hpp 47: PbFlags valFlagsOn;
template.hpp 48: PbFlags valFlagsOff;
template.hpp 49: PbFlags expFlagsOn;
template.hpp 50: PbFlags expFlagsOff;
template.hpp 51: };
template.hpp 52:
template.hpp 53: _ClassType(TemplateIO)
template.hpp 54: class TemplateIO : public template_data, public MultiRecIO
template.hpp 55: {
template.hpp 56: public:
template.hpp 57: TemplateIO ( ChrP path, ChrP fn = "Template.Pb" );
template.hpp 58:
template.hpp 59: FlgT readRec ( );
template.hpp 60: FlgT writeRec ( );
template.hpp 61: ShrtT recLen ( );
template.hpp 62: void clear ( );
template.hpp 63: void copy ( TemplateIOP orig );
template.hpp 64:
template.hpp 65: FlgT inUse ( );
template.hpp 66: };
template.hpp 67:
template.hpp 68: extern TemplateIOP tpl;
template.hpp 69:
template.hpp 70:
template.hpp 71:
template.hpp 72:

BIN
procfg/TEMPLATE.OBJ Normal file

Binary file not shown.

166
procfg/THPROCFG.HPP Normal file
View File

@ -0,0 +1,166 @@
/* ------------------------------------------------------------
* Filename ............... ThProCfg.Hpp
*
* General Purpose ........ main include file
* ------------------------------------------------------------
* First date ............. 15 dec 1993
*
* First in version ....... 2.00
*
* Written by ............. Alain Schellinck
* ------------------------------------------------------------
* Revisions:
* ----------
*
* Date | By | Purpose |
* ---------+----+--------------------------------------------+
* | | |
* | | |
* | | |
*/
/*-------------------------------------------------------------------------*/
#include <ProBoard.Hpp>
#include "ProCfg.Hpp"
/*-------------------------------------------------------------------------*/
const BytT nBlack = 0; const BytT hBlack = 8;
const BytT nBlue = 1; const BytT hBlue = 9;
const BytT nGreen = 2; const BytT hGreen = 10;
const BytT nCyan = 3; const BytT hCyan = 11;
const BytT nRed = 4; const BytT hRed = 12;
const BytT nMagenta = 5; const BytT hMagenta = 13;
const BytT nYellow = 6; const BytT hYellow = 14;
const BytT nWhite = 7; const BytT hWhite = 15;
inline setFBColor(BytT fg, BytT bg)
{
return((bg << 4) + fg);
}
/*--] Structures [-------------------------------] userFilter [------------*/
_StructType(userFilter)
struct userFilter
{
ChrT name[36];
ChrT location[26];
PbFlags flagsOn;
PbFlags flagsOff;
WrdT lowerLevel;
WrdT higherLevel;
userFilter ( )
{
clear();
}
void clear ( )
{
CLEAR_OBJECT(name);
CLEAR_OBJECT(location);
flagsOn = "";
flagsOff = "";
lowerLevel = 0;
higherLevel = WrdT(65535L);
}
};
/*--] Structures [-------------------------------] globalChange [----------*/
_StructType(globalChange)
struct globalChange
{
enum what
{
chExpFlagsOn, // expiration flags on
chExpFlagsOff, // expiration flags off
chSecFlags, // security flags
chSecLevel, // security level
chExpLevel, // expiration level
chNetCredit // netmail credit
};
enum who
{
chEqualTo, // equal to specified level
chLessThan, // less than specified level
chGreaterThan, // greater than specified level
chAllUsers // all users
};
ShrtT changeWhat;
ShrtT changeWho;
UShrtT changeLevel;
PbFlags expFlagsOn;
PbFlags expFlagsOff;
PbFlags secFlags;
UShrtT secLevel;
UShrtT expLevel;
LngT netCredit;
globalChange ( )
{
changeWhat = chSecLevel;
changeWho = chAllUsers;
changeLevel = 0;
expFlagsOn = "";
expFlagsOff = "";
secFlags = "";
secLevel = 0;
expLevel = 0;
netCredit = 0;
}
};
/*--] Classes [----------------------------------] fileEntry [-------------*/
_ClassType(fileEntry)
class fileEntry : public Object
{
public:
FileName fname;
LngT size;
Date date;
Time time;
virtual ~fileEntry ( )
{
}
};
/*--] External variables [-------------------------------------------------*/
extern ChrT usrFind[80];
extern LngP userList;
extern UShrtT userListCount;
extern UShrtT NumUsers;
/*--] prototypes [-------------------------------] EditUser.Cpp [----------*/
void clearUserList ( );
ShrtT fillUserList ( userFilter& filter );
ShrtT getDiskRecNo ( ShrtT recno );
ShrtT getListRecNo ( ShrtT recno );
ShrtT filterUser ( );
ShrtT searchUser ( ShrtT startRec );
void listUser ( IntT recno, IntT x, IntT y );
ShrtT pickUser ( ShrtT curRecNo );
/*--] prototypes [-------------------------------] EditVTpl.Cpp [----------*/
ShrtT pickTemplate ( ShrtT curRecNo = 0 );
/*--] prototypes [-------------------------------] ProMisc.Cpp [-----------*/
KEY enterPwd ( IntT mode, Window& w, IntT x, IntT y, ChrT attr,
AnyP data );
ShrtT askYesNo ( ChrP title );
void showHelp ( ChrP hlp[], char *pTitle=NULL, FlgT center = FALSE );
/*--] prototypes [---------------------------------------------------------*/
/*---------------------------] END OF THE CODE [---------------------------*/

15
procfg/TURBOC.CFG Normal file
View File

@ -0,0 +1,15 @@
-wbbf
-weas
-wpin
-wamp
-wasm
-wdef
-wnod
-wpro
-wstv
-wcln
-wpre
-w-inl
-w-par
-w-rch
-I\BC31\INCLUDE;\CPP\LIB\TSLIB;\CPP\LIB\TSWIN;\CPP\PB\LIB -X

1
procfg/Z.BAT Normal file
View File

@ -0,0 +1 @@
path=d:\windows;d:\windows\command;d:\4dos602;d:\opus;c:\;d:\util;d:\brief;d:\bc31\bin

7
procfg/a.txt Normal file
View File

@ -0,0 +1,7 @@
EDITAREA CPP 23,162 01-01-00 6:41p EDITAREA.CPP
EDITFILE CPP 9,105 01-01-00 6:41p EDITFILE.CPP
EDITGRP CPP 8,984 01-01-00 6:41p EDITGRP.CPP
EDITMENU CPP 25,155 01-01-00 6:42p EDITMENU.CPP
EDITPB CPP 14,860 01-01-00 6:42p EDITPB.CPP
LANGUAGE CPP 14,510 01-01-00 6:42p LANGUAGE.CPP
PROCFG CPP 28,660 01-01-00 6:42p PROCFG.CPP

7
procfg/b.txt Normal file
View File

@ -0,0 +1,7 @@
EDITAREA CPP 23,157 08-09-99 4:46a EDITAREA.CPP
EDITFILE CPP 9,099 08-09-99 4:55a EDITFILE.CPP
EDITGRP CPP 8,979 08-06-99 2:26a EDITGRP.CPP
EDITMENU CPP 25,150 08-09-99 2:51a EDITMENU.CPP
EDITPB CPP 14,854 08-09-99 3:08a EDITPB.CPP
LANGUAGE CPP 14,505 08-09-99 3:55a LANGUAGE.CPP
PROCFG CPP 28,660 08-09-99 5:05a PROCFG.CPP

1
procfg/c.bat Normal file
View File

@ -0,0 +1 @@
copy procfg.exe \bbs

2
procfg/d.bat Normal file
View File

@ -0,0 +1,2 @@
@echo off
del procfg.exe

BIN
procfg/obj/AREA.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITAKA.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITAREA.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITGRP.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITLCOL.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITLIM.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITMAC.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITMENU.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITNODE.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITPB.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITPROT.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITPVT.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITSYS.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITUSER.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EDITVTPL.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EVENTS.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/EXTSEL.OBJ Normal file

Binary file not shown.

BIN
procfg/obj/FLAGS.OBJ Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More