前 言
当前WINDODS 上的编程工具日新月异,推陈出新;然而因UNIX运用的局限性,其编程工
具十分贫乏。在UNIX上要做画面、菜单、查询、输入,编程者往往要从底层入手,重复劳动
,效率极低。笔者为了解决这个问题而尽点力,将本系统介绍给您,如您能读完本文,收获
一定不少。
编者:王光红
EMAIL: [email protected]
[email protected]
软件下载:
http://www.csdn.net/cnshare/soft/16/16735.shtm
http://www.ccrun.com/program/down.asp?id=10
一。系统介简
(一)实现功能∶
用于UNIX上做画面、菜单、查询、输入、修改;可操作数据库。
(二)设计思路∶
将人机对话,可分为基本的输入与输出两大类,在此前提下,为了不同的需要把域分作
多种类型;对涉及数据库的域指明有关的表名、字段名,以进行数据库的读写。将这些
不同功能的域有机的组合在一个FORM中,来实现一个功能模块。将FORM编号,按一定的
结构以二进制的形式存入文件,在使用时,系统按编号读入FORM的数据,按步实现预定
的功能。
(三)软件环境∶
1.操作系统SCO UNIX OpenServer 5.0、SCO UNIX OpenServer 3.0、SCO UNIX 3.0。
2.编程语言 C、INFORMIX/ESQL。
说明∶笔者的工作条件仅限于以上环境,如能提供其他的UNIX、SQL数据库(如ORACLE、
SYBASE等), 系统只需略加修改。
二。系统的文件与库
(一)集成开发器执行程序∶
/usr/wform/bin/mkform FORM的定制工具
/usr/wform/bin/netform FORM的定制工具(网络版)
/usr/wform/bin/net_server FORM的数据服务器
(二)配置文件∶
FORM的配置文件的路径由环境变量CONFIGPATH指定,缺省为/usr/wform/etc/form.cfg
文本文件
它规定UNIX编辑器、FORM参数文件的路径;菜单的格式;存储变量的多少;
特殊键的键值。
(三)FORM参数文件∶
FORM参数文件的路径在配置文件中声明。
二进制文件
存放Dialog结构FORM的数据,系统读此文件,按步执行。
mkform(netform)的画面的参数文件是 /usr/wform/etc/form.bin.sys
(四)帮助信息文件:
帮助信息文件的路径由环境变量MSGPATH指定,缺省为 /usr/wform/etc/form_msg.dat
文本文件
(五)系统说明文件:
系统说明文件 /usr/wform/etc/readme.frm
(六)程序库:
/usr/wform/lib/libsetform.a 在SCO UNIX OpenServer 5.0上生成。
/usr/wform/lib/libnetform.a 在SCO UNIX OpenServer 5.0上生成(网络版)。
(七)演示例程∶
1.两个FORM参数文件∶
/usr/wform/data/demo.form
/usr/wform/data/test.form
2.菜单式演示程序∶
/usr/wform/menu/menu
/usr/wform/menu/menu.ec
/usr/wform/menu/print.c
/usr/wform/menu/errhandle.c
/usr/wform/menu/makefile
/usr/wform/menu/mknet 链接libnetform.a的makefile
3.交易式演示程序∶
/usr/wform/trade/trade
/usr/wform/trade/trade.ec
/usr/wform/trade/makefile
/usr/wform/trade/mknet 链接libnetform.a的makefile
4.两个数据库∶
/usr/wform/demo.exp
/usr/wform/test.exp
说明:演示程序menu、trade使用的数据库是test,form参数文件是test.form。
三。系统的基本概念及用途
(一)FORM的结构:
typedef struct _item_st_ {
char flag; //数据类型(或标志)
char len; //数据长度
char seat_y; //纵坐标
short seat_x; //横坐标
char fun; //FORM中嵌入的函数指针编号
char field[41]; //复合域
}Item;
typedef struct tagOfDialog {
unsigned long form_id; //交易号
unsigned long link_form; //连接交易
char mode; //驱动方式
char key; //索引项
short num; //以下Item的个数
Item *f; //FORM中域的结构
}Dialog;
(二)基本概念及用途
1.[交易号] (Dialog.form_id)
FORM的编号,以此为索引。
2.[连接交易] (Dialog.link_form)
FORM结束后调用的另一个FORM的交易号,此值=0,则不调用。
3.[驱动方式] (Dialog.mode)
以确定FORM的性质。
M∶菜单
P∶打印
B∶浏览
E∶结束清域
D∶结束删除WINDOW
S∶屏幕滚动
C∶综合查询
4.[索引项] (Dialog.key)
指定查询条件的字段数, 其值是对应于[序],序号小于等于该值的字段为查询条
件。 仅对查询类FORM有效。
以下为FORM中域的结构(Dialog.f),域的数量可变。
5.[类型] (Dialog.Item->flag)
标志符 用 途 数据类型 SQLDateType
(1) 输入输出项
C、c 普通字符串 char char
H 汉字 char char
R 日期(对字符串进行日期合法性检查) char char
A 帐号(对字符串有复制功能) char char
P 密码(不回显) char char
G 选项 char char
F 帮助项 char char
D、d 日期(自1899.12.31起至今的天数) long char
M、m 金额 double money, float
N、n 数值 long intger, smallint
以上大写的字符是输入项、小写的字符是输出项。
可在复合区指明表名和字段名, 形如table.field
(2) 杂项
t 提示
f 菜单格式
B 值域检查(对上一项值进行检查)
b 数据库(指定远程数据库),形式database@host
l 标题
i 菜单条目
x 执行 SQL语句
- 连接符
| 划线符
# 画背景符
W
当无需指定表和字段时, 复合区前四位存入坐标, 后面的字符可作标题
类型为 'l', 坐标=0, 则作表头用。
6.[长度]
对输出输出项而言是数据长度;对杂项'|','#'是代表颜色。
字符串数据长度<=128。
金额的长度 <=16∶长度是小数点前和小数点后位数总数,小数点后定为二位。
例∶长度=14,
小数点前12位,小数点后2位。
金额的长度 >=20∶
个位是小数点后位数, 个位前是小数点前的位数。
例∶长度=125,
小数点前12位,小数点后5位。
金额的长度 >=17and<20非法.
7.[坐标]
对一般的FORM后二位是横坐标。前面是纵坐标;纵坐标<24。
对于浏览器的坐标有特别规定:
当坐标值大于2499∶ 后三位是横坐标,前面是纵坐标。
横坐标的最大值512.
例∶坐标值5150表示∶ 横坐标=150,纵坐标=5。
8.[嵌入函数]
FORM中嵌入的函数指针编号,当程序执行完该域后,调用一个特定的函数,函数
指针须初始化符值。
9.[复合域]
是多用途的域,可用作写标题、SQL语句、数据库表名、字段名等。
四。实例讲解(略)
五。本系统的函数及运用
(一) 系统的定义∶
宏及FORM结构 wform.h
变量定义 wvai.h
嵌套函数指针 fun.h
(二) 系统函数的调用:
1. 菜单的调用: int SetMenu(long id)
id是主菜单的编号。
返回值是反映程序执行到菜单第几层的第几项,祥见菜单制作.
2. FORM的调用: int SetupForm(long id, short wincode)
id是FORM的编号。
wincode 是窗口的编号(0-9).
如同时用多个窗口,窗口编号须不同,否则会覆盖。