自己看吧,我也不懂
发信人: Beckham (贝克汉姆), 信区: sysop 标 题: [合集]关于menu.ini
发信站: 华工物理电子BBS站 (Thu Apr 08 13:14:53 2004), 站内信件 ★ SYSOP
——————————————————————————————————————
[作者 Beckham (贝克汉姆)] 时间 Mon Apr 05 23:41:18 2004
——————————————————————————————————————
发信人: main (以我为主), 信区: BBSDev
标 题: [合集]关于menu.ini
发信站: 梅陇客栈 (2003年08月29日22:20:24 星期五), 站内信件
发信人: shipping (小平~~~~繁华落尽), 信区: ANSI
标 题: [合集]关于menu.ini
发信站: 日月光华 (2002年06月03日05:14:29 星期一), 站内信件
menu.ini入门到精通
此文写给有志于将AsciiArt与BBS系统完美结合的青老年朋友...
——shipping
btw:文中所说的menu.ini均指Firebird 3.0及以后版本所用,之前版本没有涉及过,不
敢乱说。
Que 1: 什么是menu.ini
Ans 1: menu.ini是搭建BBS的Firebird系统中的一个系统档案,也是供系统管理员调整B
BS界面的一个接口。menu.ini的改动直接反映在BBS的界面上。
Que 2: 如何修改menu.ini
Ans 2: BBS的普通用户当然不可能修改系统档案。一般来说,menu.ini只允许比较高的
权
限比如系统管理员才可以修改。
Que 3: 修改menu.ini需要哪些知识
Ans 3: 首先是要对menu.ini本身结构的了解, 如果能有相当的Ansi功底, 就能够锦上
添花。
Que 4: 学习menu.ini难不难
Ans 4: 明确告诉你, 不难。
没什么好问的了, 我们开始吧。
事先说明一点:因为对一个BBS站点而言, 拥有了修改menu.ini的权限实际上已经拥有
了
最高权限, 所以正规的站点当然不会把menu.ini随便拿来给你修改。因此建议,为了更
好更快地学习menu.ini,可以在自己的电脑上架设一个BBS,Linux下的Firebird和Window
s下的Firebird都可以在网络上获得。
——————————————————————————————————————
[作者 Beckham (贝克汉姆)] 时间 Mon Apr 05 23:42:36 2004
——————————————————————————————————————
发信人: main (以我为主), 信区: BBSDev
标 题: [合集]关于menu.ini
发信站: 梅陇客栈 (2003年08月29日22:25:20 星期五), 站内信件
发信人: shipping (小平~~~~繁华落尽), 信区: ANSI
标 题: [合集]关于menu.ini
发信站: 日月光华 (2002年06月03日05:15:39 星期一), 站内信件
menu.ini整体结构:
menu.ini的内容是由多个块构成,每个块的都是以%开始,以%结束的一段字符。
同时每个块都有自己的名字,可以在其他块当中调用。这很类似编程语言的过程or子程
序
下面具体介绍块的结构。
一个很典型的块:
%S_MAIN
*[42m *[m
*[11;29H*[m┭┴┬┶┳*[1m┵┰┴┰┶┳*[1
*[12;29H*[m┴┬*[0;47m
*[13;29H*[m┭┴*[0;34;47m *[3I*[13;3
*[14;29H*[m┴┮*[0;34;47m *[3I*[14;3
*[15;29H*[m┭┴*[0;34;47m *[3I*[15;3
*[16;29H*[m┴┬*[0;34;47m *[3I*[16;3
*[17;29H*[m┬┴*[0;34;47m *[3I*[17;3
*[18;29H*[m┴┮*[0;34;47m *[3I*[18;3
*[19;29H*[m┬┴*[0;47m *[1;31m▓*[0;34;4
*[20;29H*[m┴┬*[0;30;47m
*[21;29H┭┭┴┬┶┳┵*[1m┰┴┰┶┳┵*[
%
这个块定义了一个背景图案,块的名字叫 S_MAIN。
现在大家明白了,开头的%之后紧跟的字符串就是这个块的名字。
这个块的内容就是从下一行开始到%结束所有的东西。
有什么东西呢? 我们根据内容的性质不同,把所有的块分成两种——菜单块和背景块。
首先需要明白我们所看到的BBS的界面,都是由菜单+背景构成的。那么
顾名思义,菜单块和背景块的含义就不用说明了。
——————————————————————————————————————
[作者 Beckham (贝克汉姆)] 时间 Mon Apr 05 23:43:11 2004
——————————————————————————————————————
发信人: main (以我为主), 信区: BBSDev
标 题: [合集]关于menu.ini
发信站: 梅陇客栈 (2003年08月29日22:27:41 星期五), 站内信件
发信人: shipping (小平~~~~繁华落尽), 信区: ANSI
标 题: [合集]关于menu.ini
发信站: 日月光华 (2002年06月03日05:18:48 星期一), 站内信件
现在我们来分析一行很典型的菜单块语句
!M_EGROUP 10, 5, 0, "EGroup", "E) 分类讨论区"
!M_EGROUP 这表示菜单的这一行是指向下一个菜单也就是分类讨论区的菜单。其实如
果我们往后面看看,就能发现有一个%M_EGROUP %的菜单块,在这里被
引
用。
10,5 表示这一行菜单的标签将在屏幕的第10行第5列显示。——显示什么呢—
—
就是后面双引号里面的“E) 分类讨论区“。
0 , 这个0表示任何用户都能看到这个菜单。 BBS的权限在这里体现。
"EGroup", 这是这个菜单项的英文标签,并不显示出来,但是有一个很重要的用途—
—这个字符串的第一个字母将是这个菜单项的快捷键。没错,不要误以为
后面分类讨论区前面写着 E 就是设定快捷键, 真正的快捷键字母在这里
作为对照,我们来看另外一行语句
@ExecBBSNet 0, 0, PERM_POST, "OBBSNet", " O) 网路连线 "
@ExecBBSNet 这表示这个选项的功能是调用系统的一个叫做"ExecBBSNet"的功能,简
行某一项功能。
0,0, 注意这并不是表示这一行将在0,0的位置显示, 而是表示将在上一行菜
单
子那一行,那么这一行将在11,5的位置显示。这种方法非常有用,后面我
们会说到。
PERM_POST, 这在上面那个例子是0, 很容易知道, 这里就是表示并不是所有的用户
都
能看到这个菜单选项, 哪些用户能够看到呢——拥有PERM_POST权限的用
户才能看到。PERM_POST是BBS系统对于用户权限的一个标志,指的是拥有
发文权限。所以我们现在可以解释为什么一个用户被封禁了全站的发表文
章权限之后,会发现同时也不可以穿梭了——因为他根本看不到这个菜单
选项了。
"OBBSNet", 类似的, 快捷键是 "O" (大小写不敏感)
#----------------------------------------------------------------------------
有了上面的理解, 普通的menu.ini你就应该能够读懂了, 怎么样, 很简单是不是。
※ 来源:·梅陇客栈 bbs.ecust.edu.cn·[FROM: 一切为我]
——————————————————————————————————————
[作者 Beckham (贝克汉姆)] 时间 Mon Apr 05 23:43:39 2004
——————————————————————————————————————
发信人: main (以我为主), 信区: BBSDev
标 题: [合集]关于menu.ini
发信站: 梅陇客栈 (2003年08月29日22:28:48 星期五), 站内信件
发信人: shipping (小平~~~~繁华落尽), 信区: ANSI
标 题: [合集]关于menu.ini
发信站: 日月光华 (2002年06月03日05:20:46 星期一), 站内信件
现在要介绍一些更深层次的东西:
下面是menu的ansi制作的困难点---背景和前景的重叠问题.
我发现系统好像只是很简单的把背景和前景的menu ansi代码重叠到一起然后
解释, 这样, 代码本身在屏幕上的位置也就要考虑不可以互相影响.
上面这一点可以解释为什么我们的菜单选项经过多次调整还是全部放在了左边
而且几乎所有的bbs的菜单都是在左边(如果有稍微复杂的背景的话)----因为菜单
摆在右边的话几乎不可避免地要跟背景左边的代码重叠产生错误(实际上情况比这个
还要复杂一些) .
菜单在左边 看板在右边确实不会发生任何问题
而一旦菜单的左边有看板(or一部分看板),就不能不考虑看板的代码长度问题,
一般稍微多一点着色,代码都会比较长(只要超过了菜单最左边的字符的位置,就算长
), 协调的方法两种:要么压缩代码,(优化代码or取消部分上色),要么
菜单右移。
会出现, 现象如下所示:
> E) 分类讨论区
有时候也可能 E) 分类讨论区 >
实际上>这个东西应该在紧靠E)的地方。
部分解决的方法如下:
如果光标在在菜单右边,就增加菜单的补偿位移(左边有了ansi控制符号之后,
右边的菜单会相应的向左边偏移若干,为了补偿这个偏移量,在菜单项的前面就添加
了相同的空格,我把这个叫做补偿位移)。
如果光标在菜单的右边,就增加相应冗余ansi控制符号,这样可以让菜单向左补偿
达到正确位置。(这个的典型案例请看复旦泉工具箱菜单)
当然,上面说到的实际上是非常耗费功夫的操作,因此把菜单项安排在背景的左边是
很讨巧的选择。
※ 来源:·梅陇客栈 bbs.ecust.edu.cn·[FROM: 一切为我]
——————————————————————————————————————
[作者 Beckham (贝克汉姆)] 时间 Mon Apr 05 23:44:12 2004
——————————————————————————————————————
发信人: main (以我为主), 信区: BBSDev
标 题: [合集]关于menu.ini
发信站: 梅陇客栈 (2003年08月29日22:30:19 星期五), 站内信件
发信人: shipping (小平~~~~繁华落尽), 信区: ANSI
标 题: [合集]关于menu.ini
发信站: 日月光华 (2002年06月03日05:24:59 星期一), 站内信件
menu.ini修改过程中容易出现的问题
1. 菜单修改之后cterm等不支持鼠标点取
这是因为背景上一行末尾少了一个*[m
2. 修改menu之后shift~刷新的时候会吊线
这个需要修改BBS源程序。 具体在 comm_lists.c中的#define SC_BUFSIZE 10240
,将这个数值增大,比如20480。
3. 有些浏览工具比如Telnet, Netterm的用户会发现界面折叠起来像百叶窗
这是因为背景一行代码过长, 请精简代码。 另外Netterm用户窗口本身过窄也会
有这个问题,那是客户端的事情了。
4. 每一行背景会有不同程度偏移
参看上面的“补充位移”。一种解决办法是对背景的每一行用强行定位显示。这
里需要注意的是,虽然使用的是ANSI的绝对定位,但是仍然只能
5. 修改menu.ini之后发现某些菜单不能用了
赶快检查menu, 有可能是引用下级菜单不正确,or下级菜单本身有问题。
最不希望出现的是连admin也进入不了,这往往是某一个块缺少了结束符%,最直接
的后果就是在此之后定义的所有菜单都不可用,并且糟糕的是不能简单修改——
需要登陆主机直接修改menu.ini文件才可以。
※ 来源:·梅陇客栈 bbs.ecust.edu.cn·[FROM: 一切为我]
——————————————————————————————————————
[作者 Beckham (贝克汉姆)] 时间 Mon Apr 05 23:49:31 2004
——————————————————————————————————————
发信人: main (以我为主), 信区: BBSDev
标 题: [合集]关于menu.ini
发信站: 梅陇客栈 (2003年08月29日22:33:29 星期五), 站内信件
发信人: shipping (小平~~~还是书痴), 信区: ANSI
标 题: [合集]关于menu.ini
发信站: 日月光华 (2002年04月27日11:04:00 星期六), 站内信件
%menu TOPMENU
screen 3, 0, S_MAIN
^^^^^^^指定用那个背景,就是背后那幅画
title 0, 0, " 主选单 "
^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^这是每个选单都
欲印出的座标 有的标题
!M_EGROUP 3, 0, 0, "EGroup", "E) 分类讨论区"
^^^^ ^^不限权限皆可用
从 (3,0) 开始印
!M_MAIL 0, 0, PERM_BASIC, "Mail", "M) 私人信件服务"
^^^^^^^ ^^^^^^^^^^要有 BASIC 权限才看的到这个选项
跳到 M_MAIL 选单
!M_TALK 0, 0, PERM_BASIC, "Talk", "T) 进入聊天选单"
^^^^(0,0)表接著上行印
#!M_INFO 0, 0, PERM_BASIC, "Info", "I) 设定个人资料"
以上只简介了大致上的设定方法,
注意!! 修改完 menu.ini 后, 请至 BBS 主选单按 shift + '~'
※ 来源:·梅陇客栈 bbs.ecust.edu.cn·[FROM: 一切为我]
——————————————————————————————————————
[作者 Beckham (贝克汉姆)] 时间 Mon Apr 05 23:50:25 2004
——————————————————————————————————————
——————————————————————————————————————
[作者 Beckham (贝克汉姆)] 时间 Mon Apr 05 23:51:03 2004
——————————————————————————————————————
发信人: main (以我为主), 信区: BBSDev
标 题: [合集]关于menu.ini
发信站: 梅陇客栈 (2003年08月29日22:35:37 星期五), 站内信件
发信人: shiping (小平~~~我不常来的), 信区: ANSI
标 题: [合集]关于menu.ini
发信站: 日月光华 (2003年01月13日20:22:41 星期一), 站内信件
这是《menu.ini入门到精通》的第8篇,也是对第6,7篇的补充和总结,
主要讲的是所谓的menu.ini扩展制作办法的原理以及部分应用。
非常感谢暨南园bbs站美工站长(真不好意思id已经想不起来)在menu.ini方面
对我的启发,使得我能够从更多的角度更高的层次来总结这种方法。
好,我们继续。
首先讲firebird系统对于menu.ini的解释过程。
: 这个过程非常简单,就是用前景代码覆盖背景代码,最终形成界面。
上面这句话中有两个词希望注意,一个是“代码”。在这个阶段,一切图形
文字控制符都是以代码的形式进行处理。换句话说系统并不知道*[31m是要显示
红颜色,而只知道这是5个字符,甚至连汉字也无法辨认,而只知道是两个字符。
(一个汉字两个字符)。我之所以强调这一点,效果会在下面显示出来。
第二个词是“覆盖“。形象地说,系统先把背景代码写在纸上,再把前景代码
”覆盖“上去,而决不会考虑是否破坏背景代码本身。
好,我们来看例子:
比如,这一行的背景代码是
[ abcdefghijkl]
0123456789012345678901234 ——这一行是横坐标尺
相应的前景代码是 10,7,0,“test","*[32m test *[0;1m"
注意,这里,前景的所有代码都会原封不动地覆盖到背景上相应地位置去,而背景上
的abcd...等,都将被覆盖掉。
再来看一个失败的例子,以下我不给出前景的menu代码而直接给出其效果代码,
应当更容易理解。
前景: *[31m test *[0;1m
背景: *[31m test *[0;1m
可以看到,代码是一样的,只是位置差了一点,那么最后得到的代码是怎样呢
结果: *[31m test *[0;1mm
结果是,最后面多出来一个m
反过来,如果
前景: *[31m test *[0;1m
背景 *[31m test *[0;1m
结果: **[31m test *[0;1m
这个结果更加严重一些。
相差再大一点,
前景: *[31m test *[0;1m
背景: *[31m test *[0;1m
结果: *[*[31m test *[0;1m
这样,已经造成了混乱。
上面都是相对失败的例子。下面我们来讲如何合理运用这种覆盖效果使得我们的
menu更加自然。
方法一:全背景方案
这个方案,在本教程的第6章有比较详细的描述,不再重复。
: 优点:对界面的美化有着极大的好处
: 缺点:无法根据权限区分menu
方法二:全前景方案
这个方案,在本教程第7章提到,不过没有说得很详细,这里补叙一下。
实施办法就是背景用空或者用全空格或者在menu中根本不加载背景块,
而所有的menu内容全部加到前景块中,比如
!M_EGROUP 10, 5, 0, "EGroup", "*[42m E) 分类讨论区 *[0;1m !!!"
两个m之间固然是菜单选项,此之后的东西明明就是背景的内容了,现在也
放到前景说明语句中来。
: 优点:能对全背景方案不能解决的权限区分menu的问题作出很好的解决
: 缺点:只能最多控制14行(这是一般bbs背景的上下宽度)。
可能有人问了,上下宽度本来就只有14行,不是正好么,这怎么能算缺点。
下面有个实际的例子,我们希望看到这样的效果,普通权限的人看到的是:
a
b
<=注意这里已经没有菜单选项了
而拥有某种特殊权限的人看到的是
a
b
c
<=这里也没有菜单选项了
这个例子无论采取上面哪一种方案,都不能达到。因此我们来介绍下面的
第三种方案
方案三:背景前景覆盖方案
看得出来,第一和第二个方案都是极端的两个方案,将两个方案结合起来,
自然就能达到更好的效果。这里,就要用到先前介绍的“覆盖”的概念。
先看对于上面这个问题的解决办法
背景:
上面这两行也可以为空
这一行一定要
前景:
!M_EGROUP 10, 5, 0, "a", " a
"
!M_EGROUP 0, 0, 0, "b", "*[42m b
*[0;1m"
!M_EGROUP 0, 0, PERM_SPECIAL4, "c", "*[43m c
*[0;1m"
这样,就能达到所需要的效果了。
为什么呢? 我们来看一下代码,背景第三行已经预设为绿色,也就是说如果不出现
意外,这里将会是一个绿色块。呵呵,当一个拥有PERM_SPECIAL4权限的人来的时候,
意外出现了,系统用 c 正好覆盖掉了背景种的这一段代码,因此这一个位置
就按照前景的代码进行显示了。
这只是一个非常小的例子,实际应用当中,会更复杂一些,对于前景和背景的巧妙
配合,以至于计较每一个字节,都是很正常的事情。
以上说道的三种方案,各有用武之地,并且各有各的技巧,并不是说第三个方案
一定是最好的。
以第二个方案而言,参看暨南园的信件区,普通用户能看到右边有一个信封图案,
而新注册的id则看不到,但是仍然能看到另外的一些图案。仔细观察就能发现,这正是
完整图案去掉了新注册用户看不到的选项行的背景之后剩下的。而这两种图案都很
自然,看不出是裁剪下来的,这正是巧妙选择了背景图案、安排菜单位置以及应用
menu的0,0继承关系所作出来的效果。
上面这么多,仅仅是介绍了扩展制作方法的原理和一些基本技巧,对于这些的
掌握和灵活应用,有待于多加练习,相信我们的menu都能越来越pp!
Enjoy it!
shipping
2003-01-13 @Fudan
PS: 所有文字来源于参研了惠州明月湾,暨南园等BBS的menu作品以及领受了zixiaBBS
众位大虾的指点,在此一并致谢 //bow
【 在 ShuiGongZhu (PPface,169,but don't love me...) 的大作中提到: 】
: 修改了menu.ini后(如上面贴子所述),~后发现主菜单那些出现乱码,活动面板那些的一切正常;于是修改回原先的样子,一模一样,但是再~后也还是乱码,只有用回备份的,然后重启才能搞定...还有就是sysconf.img那个,都说删掉没问题的,但是我一删掉马上登录就会出现自动跳出,无
: ps:我的是FB2000
--
FROM 211.66.17.*