This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
deb-mbse/mbsetup/m_menu.c

699 lines
21 KiB
C
Raw Normal View History

2001-08-17 05:46:24 +00:00
/*****************************************************************************
*
2001-11-14 21:37:58 +00:00
* $Id$
2001-08-17 05:46:24 +00:00
* Purpose ...............: Edit BBS menus
*
*****************************************************************************
2005-08-29 18:33:33 +00:00
* Copyright (C) 1997-2005
2001-08-17 05:46:24 +00:00
*
* Michiel Broek FIDO: 2:280/2802
* Beekmansbos 10
* 1971 BV IJmuiden
* the Netherlands
*
* This file is part of MBSE BBS.
*
* This BBS is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* MBSE BBS is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MBSE BBS; see the file COPYING. If not, write to the Free
2003-08-15 20:05:34 +00:00
* Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
2001-08-17 05:46:24 +00:00
*****************************************************************************/
2002-06-30 12:48:44 +00:00
#include "../config.h"
2004-02-21 17:22:00 +00:00
#include "../lib/mbselib.h"
2001-08-17 05:46:24 +00:00
#include "mutil.h"
#include "screen.h"
#include "ledit.h"
#include "m_lang.h"
2004-03-28 15:51:29 +00:00
#include "m_global.h"
2001-08-17 05:46:24 +00:00
#include "m_menu.h"
2001-08-17 05:46:24 +00:00
char *select_menurec(int max)
{
2003-09-20 10:38:11 +00:00
static char *menu=(char *)"-";
char help[81];
int pick;
if (max > 10)
2005-08-29 18:33:33 +00:00
snprintf(help, 81, "Rec. (1..%d), ^\"-\"^ Back, ^A^ppend, ^D^elete, ^M^ove, ^P^revious, ^N^ext", max);
2003-09-20 10:38:11 +00:00
else if (max > 1)
2005-08-29 18:33:33 +00:00
snprintf(help, 81, "Rec. (1..%d), ^\"-\"^ Back, ^A^ppend, ^D^elete, ^M^ove", max);
2003-09-20 10:38:11 +00:00
else if (max == 1)
2005-08-29 18:33:33 +00:00
snprintf(help, 81, "Rec. (1..%d), ^\"-\"^ Back, ^A^ppend, ^D^elete", max);
2003-09-20 10:38:11 +00:00
else
2005-08-29 18:33:33 +00:00
snprintf(help, 81, "Select ^\"-\"^ for previous level, ^A^ppend a record");
2001-08-17 05:46:24 +00:00
2003-09-20 10:38:11 +00:00
showhelp(help);
for (;;) {
mbse_mvprintw(LINES - 3, 6, "Enter your choice >");
2003-09-20 10:38:11 +00:00
menu = (char *)"-";
menu = edit_field(LINES - 3, 26, 6, '!', menu);
mbse_locate(LINES -3, 6);
2003-09-20 10:38:11 +00:00
clrtoeol();
if (strncmp(menu, "A", 1) == 0)
break;
if (strncmp(menu, "-", 1) == 0)
break;
if (strncmp(menu, "D", 1) == 0)
break;
if ((max > 1) && (strncmp(menu, "M", 1) == 0))
break;
if (max > 10) {
if (strncmp(menu, "N", 1) == 0)
break;
if (strncmp(menu, "P", 1) == 0)
break;
2001-08-17 05:46:24 +00:00
}
2003-09-20 10:38:11 +00:00
pick = atoi(menu);
if ((pick >= 1) && (pick <= max))
break;
working(2, 0, 0);
}
return menu;
2001-08-17 05:46:24 +00:00
}
void Show_A_Menu(void);
void Show_A_Menu(void)
{
clr_index();
set_color(WHITE, BLACK);
mbse_mvprintw( 5, 2, "8.3. EDIT MENU ITEM");
set_color(CYAN, BLACK);
mbse_mvprintw( 7, 2, "1. Sel. key");
mbse_mvprintw( 8, 2, "2. Type nr.");
mbse_mvprintw( 9, 2, "3. Opt. data");
mbse_mvprintw(11, 2, "4. Display");
mbse_mvprintw(12, 2, "5. Security");
mbse_mvprintw(13, 2, "6. Min. age");
mbse_mvprintw(14, 2, "7. Lo-colors");
mbse_mvprintw(15, 2, "8. Hi-colors");
mbse_mvprintw(16, 2, "9. Autoexec");
if (le_int(menus.MenuType) == 7) {
mbse_mvprintw(17, 2, "10. Door Name");
mbse_mvprintw(18, 2, "11. Y2K style");
mbse_mvprintw(13,42, "12. No door.sys");
mbse_mvprintw(14,42, "13. Use COMport");
mbse_mvprintw(15,42, "14. Run nosuid");
mbse_mvprintw(16,42, "15. No Prompt");
mbse_mvprintw(17,42, "16. Single User");
mbse_mvprintw(18,42, "17. Hidden door");
}
2001-08-17 05:46:24 +00:00
set_color(WHITE, BLACK);
show_str( 7,16, 1, menus.MenuKey);
show_int( 8,16, le_int(menus.MenuType)); show_str( 8, 26,29, menus.TypeDesc);
show_str( 9,16,64, menus.OptionalData);
show_str(10,16,64,(char *)"1234567890123456789012345678901234567890123456789012345678901234");
show_str(11,16,64, menus.Display);
show_sec(12,16, menus.MenuSecurity);
show_int(13,16, le_int(menus.Age));
2003-10-11 21:22:16 +00:00
S_COL(14,16, "Normal display color", le_int(menus.ForeGnd), le_int(menus.BackGnd))
S_COL(15,16, "Bright display color", le_int(menus.HiForeGnd), le_int(menus.HiBackGnd))
set_color(WHITE, BLACK);
2003-10-11 21:22:16 +00:00
show_bool(16,16, menus.AutoExec);
if (le_int(menus.MenuType) == 7) {
2003-10-11 21:22:16 +00:00
show_str(17,16,14, menus.DoorName);
show_bool(18,16, menus.Y2Kdoorsys);
2003-09-20 09:23:28 +00:00
show_bool(13,58, menus.NoDoorsys);
2003-10-11 21:22:16 +00:00
show_bool(14,58, menus.Comport);
show_bool(15,58, menus.NoSuid);
show_bool(16,58, menus.NoPrompt);
show_bool(17,58, menus.SingleUser);
show_bool(18,58, menus.HideDoor);
}
2001-08-17 05:46:24 +00:00
}
int GetSubmenu(int, int);
int GetSubmenu(int Base, int Max)
{
2003-09-20 10:38:11 +00:00
int i, x, y;
char temp[81];
2001-08-17 05:46:24 +00:00
2003-09-20 10:38:11 +00:00
clr_index();
set_color(WHITE, BLACK);
mbse_mvprintw( 4, 2, "8.3 EDIT MENU - SELECT MENUTYPE");
2003-09-20 10:38:11 +00:00
set_color(CYAN, BLACK);
y = 6;
x = 2;
for (i = 1; i <= Max; i++) {
2005-08-29 18:33:33 +00:00
snprintf(temp, 81, "%2d. %s", i, getmenutype(i - 1 + Base));
mbse_mvprintw(y, x, temp);
2003-09-20 10:38:11 +00:00
y++;
if ((i % 13) == 0) {
y = 6;
x = 42;
2001-08-17 05:46:24 +00:00
}
2003-09-20 10:38:11 +00:00
}
i = select_menu(Max);
2001-08-17 05:46:24 +00:00
2003-09-20 10:38:11 +00:00
if (i)
return (i + Base - 1);
else
return 0;
2001-08-17 05:46:24 +00:00
}
int GetMenuType(void);
int GetMenuType(void)
{
clr_index();
set_color(WHITE, BLACK);
mbse_mvprintw( 5, 6, "8.3 EDIT MENU - SELECT MENUTYPE");
set_color(CYAN, BLACK);
mbse_mvprintw( 7, 6, "1. Global system menus");
mbse_mvprintw( 8, 6, "2. File areas menus");
mbse_mvprintw( 9, 6, "3. Message areas menus");
mbse_mvprintw(10, 6, "4. User setting menus");
mbse_mvprintw(11, 6, "5. Oneliner menus");
2004-11-29 19:48:20 +00:00
switch (select_menu(5)) {
2003-04-01 21:41:36 +00:00
case 1: return GetSubmenu(1, 22);
case 2: return GetSubmenu(101, 19);
2003-02-07 20:49:01 +00:00
case 3: return GetSubmenu(201, 21);
2004-02-24 22:09:27 +00:00
case 4: return GetSubmenu(301, 21);
case 5: return GetSubmenu(401, 5);
default: return 0;
}
2001-08-17 05:46:24 +00:00
}
void Edit_A_Menu(void);
void Edit_A_Menu(void)
{
int temp, fg, bg;
Show_A_Menu();
for (;;) {
2003-10-11 21:22:16 +00:00
switch(select_menu(17)) {
case 0: return;
break;
case 1: E_UPS( 7,16, 1, menus.MenuKey, "The ^key^ to select this menu item")
case 2: temp = GetMenuType();
memset(&menus.TypeDesc, 0, sizeof(menus.TypeDesc));
if (temp)
strcpy(menus.TypeDesc, getmenutype(temp));
if (temp == 21)
menus.AutoExec = TRUE;
menus.MenuType = le_int(temp);
Show_A_Menu();
break;
case 3: E_STR( 9,16,64, menus.OptionalData, "The ^optional data^ for this menu item")
case 4: E_STR(11,16,64, menus.Display, "The text to ^display^ for this menu")
case 5: menus.MenuSecurity.level = le_int(menus.MenuSecurity.level);
menus.MenuSecurity = edit_sec(12,16, menus.MenuSecurity, (char *)"8.3.5 MENU ACCESS SECURITY");
menus.MenuSecurity.level = le_int(menus.MenuSecurity.level);
Show_A_Menu();
break;
case 6: temp = le_int(menus.Age);
temp = edit_int(13,16, temp, (char *)"The minimum ^Age^ to select this menu, 0 is don't care");
menus.Age = le_int(temp);
break;
2003-10-11 21:22:16 +00:00
case 7: fg = le_int(menus.ForeGnd);
bg = le_int(menus.BackGnd);
2003-10-11 21:22:16 +00:00
edit_color(&fg, &bg, (char *)"8.3.7 EDIT COLOR", (char *)"normal");
menus.ForeGnd = le_int(fg);
menus.BackGnd = le_int(bg);
Show_A_Menu();
break;
2003-10-11 21:22:16 +00:00
case 8: fg = le_int(menus.HiForeGnd);
bg = le_int(menus.HiBackGnd);
2003-10-11 21:22:16 +00:00
edit_color(&fg, &bg, (char *)"8.3.8 EDIT COLOR", (char *)"bright");
menus.HiForeGnd = le_int(fg);
menus.HiBackGnd = le_int(bg);
Show_A_Menu();
break;
2003-10-11 21:22:16 +00:00
case 9: menus.AutoExec = edit_bool(16,16, menus.AutoExec, (char *)"Is this an ^Autoexecute^ menu item");
break;
case 10:if (le_int(menus.MenuType) == 7) {
E_STR(17,16,14, menus.DoorName, (char *)"The ^name^ of the door to show to the users")
} else {
working(2, 0, 0);
}
2003-02-23 15:55:36 +00:00
break;
2003-02-12 21:12:29 +00:00
case 11:if (le_int(menus.MenuType) == 7) {
2003-10-11 21:22:16 +00:00
menus.Y2Kdoorsys = edit_bool(18,16, menus.Y2Kdoorsys, (char *)"Create ^door.sys^ with 4 digit yearnumbers");
} else {
working(2, 0, 0);
}
break;
2003-02-12 21:12:29 +00:00
case 12:if (le_int(menus.MenuType) == 7) {
2003-10-11 21:22:16 +00:00
menus.NoDoorsys = edit_bool(13,58, menus.NoDoorsys, (char *)"Suppress writing ^door.sys^ dropfile");
} else {
working(2, 0, 0);
}
break;
2003-02-12 21:12:29 +00:00
case 13:if (le_int(menus.MenuType) == 7) {
2003-10-11 21:22:16 +00:00
menus.Comport = edit_bool(14,58, menus.Comport, (char *)"Write real ^COM port^ in door.sys for Vmodem patch");
} else {
working(2, 0, 0);
}
break;
2003-02-12 21:12:29 +00:00
case 14:if (le_int(menus.MenuType) == 7) {
2003-10-11 21:22:16 +00:00
menus.NoSuid = edit_bool(15,58, menus.NoSuid, (char *)"Run the door as ^real user (nosuid)^");
} else {
working(2, 0, 0);
}
break;
2003-02-12 21:12:29 +00:00
case 15:if (le_int(menus.MenuType) == 7) {
2003-10-11 21:22:16 +00:00
menus.NoPrompt = edit_bool(16,58, menus.NoPrompt, (char *)"^Don't display prompt^ when door is finished");
} else {
working(2, 0, 0);
}
break;
case 16:if (le_int(menus.MenuType) == 7) {
menus.SingleUser = edit_bool(17,58, menus.SingleUser, (char *)"Set if door is for ^single user^ only");
} else {
working(2, 0, 0);
}
break;
case 17:if (le_int(menus.MenuType) == 7) {
menus.HideDoor = edit_bool(18,58, menus.HideDoor, (char *)"^Hide door^ from user display lists");
} else {
working(2, 0, 0);
}
break;
2001-08-17 05:46:24 +00:00
}
}
2001-08-17 05:46:24 +00:00
}
void EditMenu(char *);
void EditMenu(char *Name)
{
char mtemp[PATH_MAX], temp[PATH_MAX], pick[12];
FILE *fil, *tmp;
int records = 0, i, o, y, MenuUpdated = FALSE, from, too;
long offset;
unsigned long crc, crc1;
struct menufile tmenus;
2001-08-17 05:46:24 +00:00
clr_index();
IsDoing("Edit Menu");
working(1, 0, 0);
2001-08-17 05:46:24 +00:00
2005-08-29 18:33:33 +00:00
snprintf(mtemp, PATH_MAX, "%s/%s.tmp", lang.MenuPath, Name);
tmp = fopen(mtemp, "w+");
2001-08-17 05:46:24 +00:00
2005-08-29 18:33:33 +00:00
snprintf(temp, PATH_MAX, "%s/%s.mnu", lang.MenuPath, Name);
if ((fil = fopen(temp, "r")) != NULL) {
while (fread(&menus, sizeof(menus), 1, fil) == 1) {
fwrite(&menus, sizeof(menus), 1, tmp);
records++;
2001-08-17 05:46:24 +00:00
}
fclose(fil);
}
2001-08-17 05:46:24 +00:00
o = 0;
for (;;) {
clr_index();
working(1, 0, 0);
2005-08-29 18:33:33 +00:00
snprintf(temp, 81, "8.3 EDIT MENU \"%s\" (%s)", Name, lang.Name);
mbse_mvprintw( 5, 6, tu(temp));
set_color(CYAN, BLACK);
fseek(tmp, 0, SEEK_SET);
if (records) {
y = 7;
for (i = 1; i <= 10; i++) {
if ((o + i) <= records) {
offset = ((o + i) - 1) * sizeof(menus);
fseek(tmp, offset, SEEK_SET);
fread(&menus, sizeof(menus), 1, tmp);
if (menus.MenuKey[0] || menus.AutoExec) {
set_color(CYAN, BLACK);
mbse_mvprintw(y, 5, "%3d. ", o + i);
2003-09-20 09:23:28 +00:00
if (menus.AutoExec) {
set_color(LIGHTRED, BLACK);
mbse_mvprintw(y, 10, "a");
set_color(CYAN, BLACK);
} else {
mbse_mvprintw(y, 10, "%1s", menus.MenuKey);
2001-08-17 05:46:24 +00:00
}
if (le_int(menus.MenuType) == 999 ) {
2005-08-29 18:33:33 +00:00
snprintf(temp, 81, "%-29s %5d %s", menus.TypeDesc,
le_int(menus.MenuSecurity.level), menus.Display);
} else {
2005-08-29 18:33:33 +00:00
snprintf(temp, 81, "%-29s %5d %s", menus.TypeDesc,
le_int(menus.MenuSecurity.level), menus.OptionalData);
2001-08-17 05:46:24 +00:00
}
2003-02-23 15:55:36 +00:00
temp[68] = '\0';
mbse_mvprintw(y, 12, temp);
} else {
set_color(LIGHTBLUE, BLACK);
mbse_mvprintw(y, 5, "%3d.", o + i);
}
y++;
2001-08-17 05:46:24 +00:00
}
}
}
2001-08-17 05:46:24 +00:00
strcpy(pick, select_menurec(records));
if (strncmp(pick, "-", 1) == 0) {
if (MenuUpdated) {
if (yes_no((char *)"Menu is changed, save changes") == 1) {
working(1, 0, 0);
2005-08-29 18:33:33 +00:00
snprintf(temp, PATH_MAX, "%s/%s.mnu", lang.MenuPath, Name);
if ((fil = fopen(temp, "w+")) == NULL) {
working(2, 0, 0);
} else {
Syslog('+', "Updated menu %s (%s)", temp, lang.Name);
fseek(tmp, 0, SEEK_SET);
while (fread(&menus, sizeof(menus), 1, tmp) == 1) {
if (menus.MenuKey[0] || menus.AutoExec)
fwrite(&menus, sizeof(menus), 1, fil);
2001-08-17 05:46:24 +00:00
}
fclose(fil);
chmod(temp, 0640);
2004-02-05 21:05:31 +00:00
working(6, 0, 0);
}
2001-08-17 05:46:24 +00:00
}
}
fclose(tmp);
unlink(mtemp);
return;
}
2001-08-17 05:46:24 +00:00
if (strncmp(pick, "A", 1) == 0) {
working(1, 0, 0);
memset(&menus, 0, sizeof(menus));
menus.ForeGnd = le_int(LIGHTGRAY);
menus.HiForeGnd = le_int(WHITE);
fseek(tmp, 0, SEEK_END);
fwrite(&menus, sizeof(menus), 1, tmp);
records++;
}
2001-08-17 05:46:24 +00:00
if (strncmp(pick, "D", 1) == 0) {
mbse_mvprintw(LINES -3, 6, "Enter menu number (1..%d) to delete >", records);
y = 0;
y = edit_int(LINES -3, 44, y, (char *)"Enter record number");
if ((y > 0) && (y <= records) && yes_no((char *)"Remove record")) {
offset = (y - 1) * sizeof(menus);
fseek(tmp, offset, SEEK_SET);
fread(&menus, sizeof(menus), 1, tmp);
menus.MenuKey[0] = '\0';
menus.AutoExec = FALSE;
fseek(tmp, offset, SEEK_SET);
fwrite(&menus, sizeof(menus), 1, tmp);
MenuUpdated = TRUE;
}
}
2001-08-17 05:46:24 +00:00
if (strncmp(pick, "M", 1) == 0) {
from = too = 0;
mbse_mvprintw(LINES -3, 6, "Enter menu number (1..%d) to move >", records);
from = edit_int(LINES -3, 42, from, (char *)"Enter record number");
mbse_locate(LINES -3, 6);
clrtoeol();
mbse_mvprintw(LINES -3, 6, "Enter new position (1..%d) >", records);
too = edit_int(LINES -3, 36, too, (char *)"Enter destination record number, other will move away");
if ((from == too) || (from == 0) || (too == 0) || (from > records) || (too > records)) {
errmsg("That makes no sense");
} else if (yes_no((char *)"Proceed move")) {
fseek(tmp, (from -1) * sizeof(menus), SEEK_SET);
fread(&tmenus, sizeof(menus), 1, tmp);
if (from > too) {
for (i = from; i > too; i--) {
fseek(tmp, (i -2) * sizeof(menus), SEEK_SET);
2001-08-17 05:46:24 +00:00
fread(&menus, sizeof(menus), 1, tmp);
fseek(tmp, (i -1) * sizeof(menus), SEEK_SET);
fwrite(&menus, sizeof(menus), 1, tmp);
}
} else {
for (i = from; i < too; i++) {
fseek(tmp, i * sizeof(menus), SEEK_SET);
fread(&menus, sizeof(menus), 1, tmp);
fseek(tmp, (i -1) * sizeof(menus), SEEK_SET);
fwrite(&menus, sizeof(menus), 1, tmp);
}
}
fseek(tmp, (too -1) * sizeof(menus), SEEK_SET);
fwrite(&tmenus, sizeof(menus), 1, tmp);
MenuUpdated = TRUE;
}
}
if (strncmp(pick, "N", 1) == 0)
if ((o + 10) < records)
o += 10;
if (strncmp(pick, "P", 1) == 0)
if ((o - 10) >= 0)
o -= 10;
if ((atoi(pick) >= 1) && (atoi(pick) <= records)) {
offset = (atoi(pick) - 1) * sizeof(menus);
fseek(tmp, offset, SEEK_SET);
fread(&menus, sizeof(menus), 1, tmp);
crc = 0xffffffff;
crc = upd_crc32((char *)&menus, crc, sizeof(menus));
Edit_A_Menu();
crc1 = 0xffffffff;
crc1 = upd_crc32((char *)&menus, crc1, sizeof(menus));
if (crc1 != crc) {
if (yes_no((char *)"Record is changed, save") == 1) {
working(1, 0, 0);
fseek(tmp, offset, SEEK_SET);
fwrite(&menus, sizeof(menus), 1, tmp);
MenuUpdated = TRUE;
2004-02-05 21:05:31 +00:00
working(6, 0, 0);
2001-08-17 05:46:24 +00:00
}
}
2001-08-17 05:46:24 +00:00
}
}
2001-08-17 05:46:24 +00:00
}
void EditMenus(void)
{
2003-09-20 10:38:11 +00:00
int Lang, mcount, err, i, x, y;
DIR *dp;
FILE *fil;
struct dirent *de;
char menuname[50][11], temp[81], pick[12], *p;
Syslog('+', "Start menu edit");
memset(&menuname, 0, sizeof(menuname));
Lang = PickLanguage((char *)"8.3");
if (Lang == '\0')
return;
for (;;) {
clr_index();
mcount = 0;
if ((dp = opendir(lang.MenuPath)) != NULL) {
working(1, 0, 0);
2001-08-17 05:46:24 +00:00
2003-09-20 10:38:11 +00:00
while ((de = readdir(dp))) {
if (de->d_name[0] != '.') {
strcpy(menuname[mcount], strtok(de->d_name, "."));
mcount++;
2001-08-17 05:46:24 +00:00
}
2003-09-20 10:38:11 +00:00
}
closedir(dp);
}
2001-08-17 05:46:24 +00:00
2003-09-20 10:38:11 +00:00
set_color(WHITE, BLACK);
mbse_mvprintw( 5, 6, "8.3 MENU EDIT: %s", lang.Name);
2003-09-20 10:38:11 +00:00
set_color(CYAN, BLACK);
2001-08-17 05:46:24 +00:00
2003-09-20 10:38:11 +00:00
if (mcount) {
x = 6;
y = 7;
set_color(CYAN, BLACK);
for (i = 1; i <= mcount; i++) {
2005-08-29 18:33:33 +00:00
snprintf(temp, 81, "%2d. %s", i, menuname[i-1]);
mbse_mvprintw(y, x, temp);
2003-09-20 10:38:11 +00:00
y++;
if ((i % 10) == 0) {
x+=15;
y = 7;
2001-08-17 05:46:24 +00:00
}
2003-09-20 10:38:11 +00:00
}
}
strcpy(pick, select_record(mcount, 50));
2001-08-17 05:46:24 +00:00
2003-09-20 10:38:11 +00:00
if (strncmp(pick, "-", 1) == 0) {
Syslog('+', "Finished menu edit");
return;
}
2001-08-17 05:46:24 +00:00
2003-09-20 10:38:11 +00:00
if (strncmp(pick, "A", 1) == 0) {
set_color(WHITE, BLACK);
mbse_mvprintw(LINES -3, 6, (char *)"New menu name >");
2003-09-20 10:38:11 +00:00
memset(&temp, 0, sizeof(temp));
strcpy(temp, edit_str(LINES -3, 22, 10, temp, (char *)"Enter a new ^menu^ name without extension"));
if (strlen(temp)) {
p = xstrcpy(lang.MenuPath);
p = xstrcat(p, (char *)"/");
p = xstrcat(p, temp);
p = xstrcat(p, (char *)".mnu");
if ((err = file_exist(p, F_OK))) {
if ((fil = fopen(p, "a")) == NULL) {
errmsg("Can't create menu %s", temp);
} else {
fclose(fil);
chmod(p, 0640);
Syslog('+', "Created menufile %s", p);
2004-02-05 21:05:31 +00:00
working(3, 0, 0);
2003-09-20 10:38:11 +00:00
}
} else {
errmsg("Menu %s already exists", temp);
2001-08-17 05:46:24 +00:00
}
2003-09-20 10:38:11 +00:00
free(p);
}
2001-08-17 05:46:24 +00:00
}
2003-09-20 10:38:11 +00:00
if ((atoi(pick) >= 1) && (atoi(pick) <= mcount))
EditMenu(menuname[atoi(pick) -1]);
}
2001-08-17 05:46:24 +00:00
}
int bbs_menu_doc(FILE *fp, FILE *toc, int page)
{
char *temp;
2004-03-28 15:51:29 +00:00
FILE *wp, *ip, *no, *mn;
DIR *dp;
struct dirent *de;
int j;
temp = calloc(PATH_MAX, sizeof(char));
2005-08-29 18:33:33 +00:00
snprintf(temp, PATH_MAX, "%s/etc/language.data", getenv("MBSE_ROOT"));
if ((no = fopen(temp, "r")) == NULL) {
free(temp);
return page;
}
2001-08-17 05:46:24 +00:00
page = newpage(fp, page);
addtoc(fp, toc, 8, 3, page, (char *)"BBS Menus");
fread(&langhdr, sizeof(langhdr), 1, no);
j =0;
2004-03-28 15:51:29 +00:00
ip = open_webdoc((char *)"menus.html", (char *)"BBS Menus", NULL);
fprintf(ip, "<A HREF=\"index.html\">Main</A>\n");
while ((fread(&lang, langhdr.recsize, 1, no)) == 1) {
2004-03-28 15:51:29 +00:00
fprintf(ip, "<H3>BBS Menus for %s</H3>\n", lang.Name);
fprintf(ip, "<UL>\n");
if ((dp = opendir(lang.MenuPath)) != NULL) {
while ((de = readdir(dp))) {
if (de->d_name[0] != '.') {
j = 0;
2004-03-28 15:51:29 +00:00
fprintf(ip, "<LI><A HREF=\"menu_%s_%s.html\">%s</A></LI>\n", lang.LangKey, de->d_name, de->d_name);
2005-08-29 18:33:33 +00:00
snprintf(temp, PATH_MAX, "%s/%s", lang.MenuPath, de->d_name);
fprintf(fp, "\n MENU %s (%s)\n\n", de->d_name, lang.Name);
if ((mn = fopen(temp, "r")) != NULL) {
2005-08-29 18:33:33 +00:00
snprintf(temp, 81, "menu_%s_%s.html", lang.LangKey, de->d_name);
2004-03-28 15:51:29 +00:00
if ((wp = open_webdoc(temp, lang.Name, de->d_name))) {
fprintf(wp, "<A HREF=\"index.html\">Main</A>&nbsp;<A HREF=\"menus.html\">Back</A>\n");
while (fread(&menus, sizeof(menus), 1, mn) == 1) {
fprintf(wp, "<P>\n");
fprintf(wp, "<TABLE width='600' border='0' cellspacing='0' cellpadding='2'>\n");
fprintf(wp, "<COL width='30%%'><COL width='70%%'>\n");
fprintf(wp, "<TBODY>\n");
if (menus.MenuKey[0]) {
fprintf(fp, " Menu select %s\n", menus.MenuKey);
add_webtable(wp, (char *)"Menu select", menus.MenuKey);
}
if (menus.AutoExec) {
fprintf(fp, " Menu select Autoexec\n");
add_webtable(wp, (char *)"Menu select", (char *)"Autoexec");
}
2005-08-29 18:33:33 +00:00
snprintf(temp, 81, "%d %s", le_int(menus.MenuType), menus.TypeDesc);
2004-03-28 15:51:29 +00:00
add_webtable(wp, (char *)"Menu type", temp);
add_webtable(wp, (char *)"Optional data", menus.OptionalData);
add_webtable(wp, (char *)"Display", menus.Display);
web_secflags(wp, (char *)"Security level", menus.MenuSecurity);
add_webdigit(wp, (char *)"Minimum age", menus.Age);
add_colors(wp, (char *)"Normal colors", le_int(menus.ForeGnd), le_int(menus.BackGnd));
add_colors(wp, (char *)"Bright colors", le_int(menus.HiForeGnd), le_int(menus.HiBackGnd));
fprintf(fp, " Type %d %s\n", le_int(menus.MenuType), menus.TypeDesc);
fprintf(fp, " Opt. data %s\n", menus.OptionalData);
fprintf(fp, " Display %s\n", menus.Display);
fprintf(fp, " Security %s\n", get_secstr(menus.MenuSecurity));
fprintf(fp, " Minimum age %d\n", menus.Age);
fprintf(fp, " Lo-colors %s on %s\n",
get_color(le_int(menus.ForeGnd)), get_color(le_int(menus.BackGnd)));
2004-03-28 15:51:29 +00:00
fprintf(fp, " Hi-colors %s on %s\n",
get_color(le_int(menus.HiForeGnd)), get_color(le_int(menus.HiBackGnd)));
2004-03-28 15:51:29 +00:00
if (le_int(menus.MenuType) == 7) {
add_webtable(wp, (char *)"Door Name", menus.DoorName);
add_webtable(wp, (char *)"No door.sys file", getboolean(menus.NoDoorsys));
add_webtable(wp, (char *)"Y2K format in door.sys", getboolean(menus.Y2Kdoorsys));
add_webtable(wp, (char *)"Use COM port", getboolean(menus.Comport));
add_webtable(wp, (char *)"Run nosuid", getboolean(menus.NoSuid));
add_webtable(wp, (char *)"No Prompt after door", getboolean(menus.NoPrompt));
add_webtable(wp, (char *)"Single user door", getboolean(menus.SingleUser));
add_webtable(wp, (char *)"Hidden door", getboolean(menus.HideDoor));
fprintf(fp, " Door Name %s\n", menus.DoorName);
fprintf(fp, " No door.sys %s", getboolean(menus.NoDoorsys));
fprintf(fp, " Y2K door.sys %s", getboolean(menus.Y2Kdoorsys));
fprintf(fp, " Use COM port %s\n", getboolean(menus.Comport));
fprintf(fp, " Run nosuid %s", getboolean(menus.NoSuid));
fprintf(fp, " No Prompt %s", getboolean(menus.NoPrompt));
fprintf(fp, " Single user %s\n", getboolean(menus.SingleUser));
fprintf(fp, " Hidden door %s\n", getboolean(menus.HideDoor));
}
fprintf(fp, "\n\n");
j++;
if (j == 4) {
j = 0;
page = newpage(fp, page);
fprintf(fp, "\n");
}
fprintf(wp, "</TBODY>\n");
fprintf(wp, "</TABLE>\n");
}
2004-03-28 15:51:29 +00:00
close_webdoc(wp);
2001-08-17 05:46:24 +00:00
}
fclose(mn);
}
if (j)
page = newpage(fp, page);
2001-08-17 05:46:24 +00:00
}
}
closedir(dp);
2001-08-17 05:46:24 +00:00
}
2004-03-28 15:51:29 +00:00
fprintf(ip, "</UL>\n");
fprintf(ip, "<HR>\n");
}
2001-08-17 05:46:24 +00:00
2004-03-28 15:51:29 +00:00
close_webdoc(ip);
free(temp);
fclose(no);
return page;
2001-08-17 05:46:24 +00:00
}