Pcgame 版 (精华区)

发信人: bell (花开时是冷冷月光), 信区: Pcgame
标  题: Allegro 中译文档
发信站: 紫 丁 香 (Tue May  4 13:56:56 1999), 转信

【 以下文字转载自 bell 的信箱 】
【 原文由 bell 所发表 】
      set_config_file
      set_config_data
      override_config_file
      override_config_data
      push_config_state
      pop_config_state
      get_config_string
      get_config_int
      get_config_hex
      get_config_float
      get_config_argv
      set_config_string
      set_config_int
      set_config_hex
      set_config_float



Allegro 中可变的部分, 例如声音例程和 load_joystick_data() 函数, 需要一些设置信
息. 这些 数据被储存在一个文本文件的 '变量=值' 这样的行中, 注解被写在以 '#' 开头
的行,知道行末. 设置文件可以被任意的分成几个部分(section), 每个部分以 "[这部分的
名字]" 这样一行开始. 每部分有唯一的名字空间, 这样是避免名字的冲突,但是只要不在同
一部分, 每个变量都可以同时出现在所有的部分了.

缺省时设置数据是从一个叫 allegro.cfg 或 sound.cfg 的文件里读入的, 这个文件将在和
程序所处的目录下寻找, 或者放在 ALLEGRO 环境变量指向的目录里. 如果你不喜欢这中方
式,你可以镇定任何一个你喜欢的文件名,或者 使用你自己程序规定的一块二进制设置数据
(比如可以从数据文件里载入).

你可以在设置文件里储存你喜欢的任何配置信息, 就象 Allegro 使用的基本变量那样 (见
后面).

void set_config_file(char *filename);
设置设置文件名,以被附随的所有设置函数使用. 如果你没有调用这个函数, Allegro 将使
用缺省的 allegro.cfg 这个文件,首先在和执行程序所在的目录下寻找, 然后在 ALLEGRO
环境变量指向的目录下寻找.

void set_config_data(char *data, int length);
指定一个已经被载入内存的数据块来被所有的附随设置函数使用, (可以是一个你自己的复
杂数据类型,或者 从 grabber 数据文件里载入的数据). 这个例程 将信息作了备份,所以你
在调用它后可以安全的释放掉数据占的内存.


void override_config_file(char *filename);
指定一个包含了优先设置的文件名,这些设置 将被用在主设置文件的参数附加信息上,当一
个 变量在两个文件中均被提及,则这个版本中的变量将被优先采用. 这些可以被应用程序的
程序员在他们的代码中优先使用一些设置, 然后依旧将主设置文件留给用户配置. 例如, 你
可以指定一个 特别的样本频率和 IBK 乐器(instrument)文件,但是用户还是 可以用
sound.cfg 或 allegro.cfg 文件来指定端口设置和 IRQ 数值.

void override_config_data(char *data, int length);
override_config_file() 的使用内存数据块版本.


void push_config_state();
将当前的设置状态(文件名,变量值,等)压入一个内部栈 , 使你可以选择其它的设置, 然后
可以调用 pop_config_state() 来恢复当前的设置. 这个函数是被设计成其它库函数内部使
用的, 比如当你为 save_joystick_data() 指定一个设置文件名, 它在切换到你指定的文件
前就将设置状态压栈.


void pop_config_state();
将前面用 push_config_state() 储存的设置状态弹出, 用它来替换掉当前的设置.

char *get_config_string(char *section, char *name, char *def);
从当前的设置文件里得到一个字符串.如果变量名 没有被找到,则返回缺省值. section 名
可以被设为 NULL 来从任意的部分中寻找值,或者用来 控制你感兴趣的参数集合 (例如
sound 或 joystick).


int get_config_int(char *section, char *name, int def);
从当前的设置文件里读一个整数值. 见 get_config_string() 的注解.

int get_config_hex(char *section, char *name, int def);
以十六进制读取当前设置文件里的一个整数值. 见 get_config_string() 的注解.

float get_config_float(char *section, char *name, float def);
从当前设置文件里读取一个浮点值. 见 get_config_string() 的注解.

char **get_config_argv(char *section, char *name, int *argc);
从当前设置文件里读取一个标记列表 (用空格分开的单词), 返回一个 argv 类型的列表,
将 argc 设置为标记的个数 (不象 argc.argv, 这个表是从 0 开始的). 如果变量没有提
供,返回 NULL 并将 argc 设为 0. 标记列表被储存在一个临时缓冲区,数据将被下次调用
get_config_argv() 摧毁, 所以数据不会长期保留.

void set_config_string(char *section, char *name, char *val);
向当前的设置文件写一个字符串数据,覆盖掉原来的任何 可能存在的数据,如果 val 是
NULL 的话则移去这个变量. section 名字可以为空,以用来将数据写在文件的根部分, 或者
用来控制有这个变量的 section. 这个被改变的文件将放在内存缓冲, 直到你调用
allegro_exit() 才真正写入磁盘. 注意,用这个方法你只能写文件, 所以如果当前设置源是
被 set_config_data() 指定的话,函数将不起效果. (只对 set_config_file() 指定)

void set_config_int(char *section, char *name, int val);
向当前设置文件写一个整数值. 见 set_config_string() 的注解.

void set_config_hex(char *section, char *name, int val);
以十六进制格式向当前的设置文件写一个整数. 见 set_config_string() 的注解.

void set_config_float(char *section, char *name, float val);
向当前设置文件写一个浮点数值. 见 set_config_string() 的注解.



Allegro 在设置文件了使用了以下这些基本变量:

      gfx_card = x
      指定当程序以 GFX_AUTODETECT 检测时使用的图形驱动器. 可以用额外行 "gfx_car2
      = x", "gfx_card3 = x" 等来给出多个驱动器的建议. 驱动器的 ID 必须是下面值中
      的一个:

            1  = VGA mode 13h          2  = Mode-X
            3  = VESA 1.x              4  = VBE 2.0 (banked)
            5  = VBE 2.0 (linear)      6  = VBE 3.0
            7  = VBE/AF                8  = Xtended mode
            9  = ATI 18800/28800       10 = ATI mach64
            11 = Cirrus 64xx           12 = Cirrus 54xx
            13 = Paradise              14 = S3
            15 = Trident               16 = Tseng ET3000
            17 = Tseng ET4000          18 = Tseng ET6000
            19 = Video-7

      vbeaf_driver = x
      指定在哪儿寻找 VBE/AF 驱动程序 (vbeaf.drv). 如果这个 变量没有设置, Allegro
      将在程序同一目录下查找, 然后在标准位置寻找 (c:\, 或 VBEAF_PATH 环境变量指�
      的目录).

      keyboard = x
      指定一个键盘布局来使用. 参数是一个 用键盘设置工具生成的键盘映射文件名,这可
      以是 一个合格的含路径文件名或是象 "us" 或 "uk" 这样的基本名. 之后, Allegro
      将首先查找这个指定的文件 (比如 "uk.cfg"), 然后查找 keyboard.dat 文件里的同
      名对象 (比如 "UK_CFG"). 这个配置文件或 keyboard.dat 文件可以放在程序的同一
      目录, 或者是 ALLEGRO 环境变量所指向的目录. 在 keyboard.dat 文件里看哪一种�
      盘映射可用: 这时有以下选择:

            BE       - 比利时
            DE       - 德国
            DK       - 丹麦
            DVORAK   - Dvorak
            ES       - 西班牙
            FI       - 芬兰
            FR       - 法国
            IT       - 意大利
            NO       - 挪威
            PT       - 葡萄牙
            SE       - 瑞士
            UK       - 英国
            US       - 美国

      mouse = x
      鼠标类型 (Microsodt, Logitech, 或 NT). 任何一种方式都 可以运行在任何系统�,
      但是 Microsoft 代码可能更可信点. 一些 Logitech 驱动器有个小 bug,使鼠标已 8
      倍速移动, 所以,如果你碰到这种问题时就要使用 Logitech 的设置.


      [sound] (声音)
      这部分包含了声音设置信息,使用了这些变量:

            digi_card = x
            设置播放采样声音的驱动器, x 可以是这些值:

                  0 = none                   1 = SB (自动检测类型)
                  2 = SB 1.0                 3 = SB 1.5
                  4 = SB 2.0                 5 = SB Pro
                  6 = SB16                   7 = GUS (未完成)
                  8 = ESS AudioDrive

            midi_card = x
            设置播放 MIDI 音乐的驱动器, x 可以是这些值:

                  0 = 无                     1 = Adlib (自动检测 OPL 版本)
                  2 = OPL2                   3 = 双(Dual) OPL2 (SB Pro-1)
                  4 = OPL3                   5 = SB MIDI 界面
                  6 = MPU-401                7 = GUS (未完成)
                  8 = DIGMID                 9 = AWE32

            digi_input_card = x
            设置数字采样输入驱动程序, 和 digi_card 变量格式相同. 它经常可以留空

            midi_input_card = x
            设置 MIDI 数据输入驱动程序, 和 midi_card 变量格式相同. 它经常可以留.

            digi_voices = x
            指定为数字声音驱动器保留的最少声音数量. 多少可能依赖于驱动器.

            midi_voices = x
            指定为 MIDI 声音驱动器保留的最少声音数量. 多少依赖于驱动器.

            flip_pan = x
            将其设为 0 或 1 来反转采样声音的左/右声道, 这个功能有时是必要的,因涡
            些 SB 卡 (包括我的 :-) 的立体声的方向错了.


            sb_port = x
            设置 SB 的端口地址 (一般是 220).

            sb_dma = x
            设置 SB 的 DMA 通道 (一般是 1).

            sb_irq = x
            设置 SB 的 IRQ (一般是 7).

            sb_freq = x
            设置采样声音的频率, 缺省值为 16129. 可能的值有: 11906 - 任何 SB 都棵
            16129 - 任何 SB 都可用 22727 - 工作在 SB 2.0 及以上版本 45454 - 只膜
            作在 SB 2.0 或 SB16 上 (不能用在 stereo SB Pro)

            fm_port = x
            设置 OPL synth 的端口地址 (一般是 388).

            mpu_port = x
            设置 MPU-401 MIDI 界面的端口地址 (一般是 330).

            mpu_irq = x
            设置 MPU-401 的 IRQ (它通常和 sb_irq 相同).

            digi_volume = x
            设置数字采样声音播放时的音量, 可以从 0 到 255.

            midi_volume = x
            设置 midi 音乐播放时的音量, 可以从 0 到 255.

            ibk_file = x
            指定 .IBK 文件的名字, 它将取代 基本 Adlib patch.

            ibk_drum_file = x
            指定 .IBK 文件的名字,它将取代 基本 Adlib percussion patches.

            patches = x
            指定从何处寻找 DIGMID 驱动器的采样设置. 这可以是一个 Gravis 格式的艾
           一些 .pat 文件和一个 default.cfg 索引的目录, 或是用 pat2dat 工具建聊
          Allegro 数据文件. 如果这个变量没有被设置, Allegro 将查找 default.cfg
          和 patches.dat 文件, 它们可以放在和程序相同的目录下, ALLEGRO 环境变�
           指向的目录, ULTRASND 环境变量指向的基本 GUS 目录.

      [midimap]
     如果你在使用 SB MIDI 输出或 一个有外部合成器但不是 General MIDI 兼容的
    MPU-401 驱动器, 你可以使用设置文件中的 midimap 部分去指定一个映射表(mappig
    table)补丁来 将 GM 补丁项转换成任何其它的组合(bank), 程序变更消息(program
    change messages)将在你的 synth(合成)上选择合适的声音. 这真的有点自我放纵.
    我有一块 Yamaha TG500, 它有一些很棒的声音 但是没有 GM 补丁设置, 我刚才使它
      莫名其妙的工作起来...

      这个部分由一组下面这样格式的行组成:

            p<n> = bank0 bank1 prog pitch
          这里, n 是 GM 程序改变数字 (1-128), bank0 和 bank1 是要送到你的 synh
          (合成) 的两个变更消息库(控制器 #0 和 #32), prog 是要送到你的 synth �
          成) 的程序变更消息, pitch 是用那个声音播放时需要移动的半音的个数. 介
          合(bank)变更数设为 -1 将 防止它们被送出.

  
            p36 = 0 34 9 12

            指定当 GM 的 36 号程序(program) (发生一个 fretless bass) 被选择,
            Allegro 将发送参数为 0 的组合(bank)变更消息 #0, 参数为 34 的组合(ba)
            变更消息 #32, 参数为 9 的程序(program) 变更消息, 然后将所有的声音 踢
            八度.

      [joystick] (游戏杆)
      这个部分包含了一组由 save_joystick_data() 和 load_joystick_data() 使用的变
      量.

--
http://www.cfido.net/cloud
http://computer.igd.edu.cn/~cloud
http://linux.cqi.com.cn/~cloud
http://www.nease.net/~cloudwu (暂时不能更新)
E-mail: cloudwu@263.net

        举个例子,下面这行:
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: jxjd.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:213.413毫秒