YouLanjie / C-head

我的c头文件(Linux)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

一个简单的工程

C-head

我想说的

这个仓库的名字其实是不太合适的,因为这个仓库本来是储存我编写C语言程序时用于方便 地引用一些头文件与使用一些所有程序都能用的功能。

注:该库中的程序均只能在Linux环境下运行

使用方法

要使用本仓库的工具仅需要在程序内引用 include 目录下的 tools.h 文件,并且在编 译程序时传入编译器该仓库下的所有 *.c 文件以及链接ncurses库即可,抑或者可以将该 仓库中的内容编译为静态库或者动态库文件再编译,这里提供一些参考命令:

# 编译为静态库文件 libtools.a
gcc -c `find ./src -name "*.c"`
ar -rv libtools.a *.o
rm *.o

仓库功能

注意!本README文件内容可能会跟不上代码翻新的速度,具体功能请以实际代码为准

附注:大多数功能需要使用 ctools_init 函数返回的值为接口使用,例如:

定义了Linux标准库没有的特殊输入函数

  • _getch() 不回显的输入函数,可供实现 等待用户输入,输入后无需回车确认 让程序继续并且不显示输入的字符 的功能(返回整数值作为字符值)(即输入不回显, 无行缓冲)。
  • kbhit() 可以判断当且是否有输入(返回整数值,1有,0无)。
  • kbhitGetchar() 基于 kbhit 函数的基础上加上一些修改能够顺便获取输入的 字符,且无需等待输入,不会阻止程序的继续运行。

自行编写的工具

个人认为最有用的——menu菜单功能 cmenu

该功能能够在Linux环境下实现屏幕大小对齐(过小的终端不可用)。提供可视化选择。并 且可以为选项添加描述,充当半个帮助。选项、描述采用滚动设计,若光标移动到了显示上 限但还有选项时会让选项上滚,描述也同理,都是可以翻动的,并且描述还使用了白底黑字 做显示颜色(可能有的终端会显示成黑底黑色),选中项则做反色处理

功能介绍:接口一览

在使用菜单时需要定义一个 cmenu 型的变量并调用 cmenu_create 函数为变量初始化。 以下是对各个函数的说明:

  • ctools_ncurses_init() 初始化ncurses
  • cmenu_create() 初始化数据指针
  • cmenu_set_title() 设置界面标题
  • cmenu_set_type 设置菜单类型,可选项如下: Key: “normal”, “main_only”, “help”, “setting”, “help_only”
    • normal 正常模式
    • main_only 仅打印菜单框架(样式)
    • help 帮助模式,大半白底黑字
    • setting 设置模式,在正常模式基础上增加变量的显示和设置功能
    • help_only 仅打印帮助模式下的菜单框架
  • cmenu_set_type() 设置菜单的类型,类型列表:
    1. normal 默认
    2. main_only 仅显示主界面
    3. help 帮助模式
    4. setting 设置模式
    5. help_only 仅显示帮助界面,无输入处理
  • cmenu_add_text() 添加菜单选项,其选项解释如下:
    1. id 菜单项应被插入的位置(插入后),若值为0则插入在最后,若值大于列表长度 则也插入在最后
    2. text 菜单项显示的文字
    3. describe 菜单项对应的描述信息
    4. func 选择菜单项后执行的函数
    5. varsetting 类型菜单中显示、更改的变量指针
    6. typesetting 类型菜单中菜单项的类型,可选值如下:
      • number 设置类型为数字的参数(可选参数部分)
      • button 设置类型为按钮/开关
    7. footsetting number 设定下变量变化的步长
    8. maxsetting number 设定下变量变化的上限,与下限相等时采用默认值
    9. mixsetting number 设定下变量变化的下限,与上限相等时采用默认值
  • cmenu_set_text() 添加菜单选项,其选项解释如下:
    1. id 同上
    2. tag 指定要更改的变量,可选值具体含义参上。所有可选值如下 Key: “text”, “describe”, “func”, “var”, “type”, “foot”, “max”, “min”
    3. value 赋值内容
  • cmenu_show() 显示菜单程序,返回经过处理的输入
    • 输入与返回值对照
      • 数字 => int型数字
      • 空格/回车 => 对应选项的序号
      • 部分字符 => int型字符ASCII
      • q / ESC => 0
实际使用

参考使用代码:

#include "/path/to/file/tools.h"    //引用头文件

int var = 0;

static void func()
{
        endwin();
        printf("Exit safety\nThe var is:%d\n", var);
        exit(0);
}

int main()
{
        cmenu menu = cmenu_create();
        cmenu_set_title(menu, "This is title");
        cmenu_add_text(menu, 0, "text", "describe", func, &var, "number", 0, 0, 0);
        cmenu_add_text(menu, 0, "Second", "describe 2", NULL, NULL, NULL, 0, 0, 0);
        cmenu_add_text(menu, 0, "Third", NULL, NULL, NULL, NULL, 0, 0, 0);
        cmenu_add_text(menu, 0, "Fourth", NULL, NULL, NULL, NULL, 0, 0, 0);
        cmenu_add_text(menu, 2, "Should be 2nd", "describe 2", NULL, NULL, NULL, 0, 0, 0);
        cmenu_add_text(menu, 3, "setting", "setting or normal?", NULL, NULL, NULL, 0, 0, 0);
        cmenu_add_text(menu, 4, "normal", "normal!", NULL, NULL, NULL, 0, 0, 0);

        ctools_ncurses_init();
        while(1) {
                int in = cmenu_show(menu);
                if (in == 3) cmenu_set_type(menu, "setting");
                else if (in == 4) cmenu_set_type(menu, "normal");
        }
        endwin();
        return 0;
}
操作介绍

移动按键支持三套:

  • WASD
  • hjkl(Vim的键位)
  • 直接使用方向键

使用 Tab 键在选项与描述间跳转

使用空格或者回车确认选项或者输入对应的数字

使用 Esc, q, 0 键可以退出菜单(会返回整型的0)

在设置页中,光标在数值型选项上时使用 +=或 == 增加或使用 - 减少指定的 foot 变量值(默认为1)。在开关型选项上使用空格或者回车控制选项的状态为开或者关

在默认界面中,按下非操作键外的字符按键会返回字符,其他的均只返回数字(主要是防范 出现了非单数的编号的内容选项导致选择不了)

配置文件解读程序

懒了,不想写了,自己看 include/tools.h 最后面的部分内容

About

我的c头文件(Linux)

License:MIT License


Languages

Language:C 100.0%