UNIXForm

所属分类:Windows编程
开发工具:Unix_Linux
文件大小:1738KB
下载次数:9
上传日期:2007-05-24 16:53:04
上 传 者sunnyzxx
说明:  功能∶ 用于UNIX上做画面、菜单、查询、输入、修改;可操作数据库。 设计思路∶ 将人机对话,可分为基本的输入与输出两大类,在此前提下,为了不同的需要把域分作 多种类型;对涉及数据库的域指明有关的表名、字段名,以进行数据库的读写。将这些 不同功能的域有机的组合在一个FORM中,来实现一个功能模块。将FORM编号,按一定的 结构以二进制的形式存入文件,在使用时,系统按编号读入FORM的数据,按步实现预定 的功能。
(function : for UNIX done screen, menu, query, import, modify; Operational databases. Design : Man-machine dialogue, it can be divided into the basic input and output of two categories, in this premise, To different jurisdictions need to be divided into various types; of the domain database involves specifying the name of the table and field names, Database to write. These different functions of the composition of the organic domain in a FORM, to achieve a functional module. No. of FORM, according to a binary structure deposited in the form of documents, when used, System under the symbol FORM Reading into the data-by-step realization of predetermined functions.)

文件列表:
wForm\ftp注意事项.txt (47, 2003-04-07)
wForm\wform.tar.z (1852961, 2003-04-09)
wForm (0, 2007-05-24)

前 言 当前WINDODS 上的编程工具日新月异,推陈出新;然而因UNIX运用的局限性,其编程工 具十分贫乏。在UNIX上要做画面、菜单、查询、输入,编程者往往要从底层入手,重复劳动 ,效率极低。笔者为了解决这个问题而尽点力,将本系统介绍给您,如您能读完本文,收获 一定不少。 软件的安装 (一)建立用户wform;按INFORMIX的要求设置环境变量 (二)将软件包wform.tar.Z 拷贝至硬盘∶tar x6v wform.tar.Z (三)软件解压∶uncompress wform.tar; tar xfv wform.tar; (四)建立演示数据库∶ cd /usr/wform; dbimport demo -lbuffered; dbimport test -lbuffered; 一。系统介简 (一)实现功能∶ 用于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语句、数据库表名、字段名等。 四。实例讲解 结合demo.from(注意不是test.form)的实例讲解FORM的用法。 (一)关于菜单制作: FROM的驱动方式∶M,域的类型均为∶i 主菜单横向排列,子菜单纵向排列. 主菜单的起始坐标由其第一项的坐标确定,如横坐标为零,主菜单在屏幕的中间。 主菜单与子菜单的制作完全相同,函数SetMenu首先被调用的菜单即为主菜单,子菜单 由SetMenu内部调用。 主菜单与子菜单的关系由交易号的值确立, 子菜单交易号值=主菜单交易号值 * 10 + x,(第 x项,x<=9). 例∶ 如图1.1 所示∶ 主菜单的交易号是1 第一层菜单的第一项交易号是11 第二层菜单的第二项交易号是112 主菜单[1] ┌─────────┬───┴────┬─────────┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ [10] [11] [12] [13] │ ┌───┬─┴─┬───┐ │ │ │ │ │ │ │ │ [110] [111] [112] [113] │ ┌───┼───┐ │ │ │ │ │ │ [1120] [1121] [1122] ------------ 图 1.2 ------------ ┏━━━━━━━━━< 1>━━━━━━━━━━━━━┓ ┃ 柜员__0 ** 打印__1 查询__2 录入__3 ┃ ┗━━━━━━┏━━<11>━━┓━━━━━━━━━━┛ ┃ 日报_____0┃ ┃ 月报_____1┃ ┃**年报_____2┏━━━< 112>━━━┓ ┃ 流水清单_3┃ 资金表_______0 ┃ ┗━━━━━━┃ 余额积数表___1 ┃ ┃ 业务量统计表_2 ┃ ┗━━━━━━━━━┛ ------------ 图 1.2 ------------ 执行mkform,选择全屏幕编辑,用命令'g' 可得到以下内容∶ 交易号为 1的FORM内容∶ [命令] g [交易号] 1 [连接交易] 0 [驱动方式] M [索引项] 0 [序] [类型][长度][坐标][嵌入函数] [ 复 合 域 ] 0 i 0 300 0 柜员 1 t 0 0 0 增加、取消、修改、查询柜员 2 i 0 0 0 打印 3 i 0 0 0 查询 4 i 0 0 0 录入 交易号为 11的FORM内容∶ [命令] g [交易号] 11 [连接交易] 0 [驱动方式] M [索引项] 0 [序] [类型][长度][坐标][嵌入函数] [ 复 合 域 ] 0 i 0 0 0 日报 1 i 0 0 0 月报 2 i 0 0 0 年报 3 i 0 0 0 流水清单 交易号为112的FORM内容∶ [命令] g [交易号] 112 [连接交易] 0 [驱动方式] M [索引项] 0 [序] [类型][长度][坐标][嵌入函数] [ 复 合 域 ] 0 i 0 0 0 资金表 1 i 0 0 0 余额积数表 2 i 0 0 0 业务量统计表 对菜单而言, 连接交易、驱动方式、索引项、长度、嵌入函数无意义。 坐标仅对第一层菜单的序号为0的域有意义,以确定主菜单在的屏幕中行数。 1.如何选中菜单项∶ (1)用光标移到你要的项,再敲回车。 (2)按菜单项的序号选择。 菜单项数有一位数(小于11项),敲单个数字键即可选中; 菜单项数有两位数(大于10,小于100),敲两个数字键即可选中; 例∶选第 5项,敲入"05"两个字符。 (3)按菜单项的第一个字符选择。 在调用菜单前,须调用 SetFormPara(PATTERNFRONT, 1); 2.菜单格式: (1)在配置文件定义。 (2)可用'f'类型来特定一种格式,用其坐标表示。 2.菜单提示: 't'类型用于解释该菜单的功能。 例∶交易号为 1的FORM中第 1项。 (二)关于普通FORM的制作: 1.交易号为 100的FORM内容∶ [命令] g [交易号] 100 [连接交易] 0 [驱动方式] D [索引项] 1 [序] [类型][长度][坐标][嵌入函数] [ 复 合 域 ] 0 C 4 1240 0 operate.no 1 P 6 1440 0 operate.passwd 2 - 0 0 0 and stat !='9' 3 w 0 0 0 密码错 !! 4 c 8 1***0 0 operate.name 5 l 0 1228 0 操作员: 6 l 0 1428 0 密 码: 7 l 0 1628 0 姓 名: 8 l 0 0 0 签 到 9 W 0 0 0 根据坐标及长度建立WINDOW (图 2) 所示∶ ┏━━ <100> 签 到 ━━┓ ┃操作员: [0101] ┃ ┃ ┃ ┃密 码: [******] ┃ ┃ ┃ ┃姓 名: 王光红 ┃ ┗━━━━━━━━━━━┛ ------------ 图 2 ------------ 驱动方式∶ D 完成后将WINDOW删除. 索引项∶1 序号<=1的第 0,1项的字段( oper.no, oper.passwd)为查询条件。 第 0项∶类型'C',长度4,复合域说明有关的表及字段。 作用∶接受 4位长的字符串(操作员号)。 第 1项∶类型'P',长度6,复合域的前四位是坐标,以后是提示符号, 效果同第7、8项. 作用∶接受 6位长的字符串(密码),不回显。 第 2项∶类型'-',复合域说明where子句追加的条件。 作用∶使stat=9 的操作员不能签到。 SQL: select * from operate where no='01' and stat !='9' and passwd='xxxxxxxx'; 第 3项∶类型'w',复合域说明警告的信息。 作用∶向不符合条件的操作员发出警告(即前项的SQL不成功)。 第 4项∶类型'c',长度6,复合域说明有关的表及字段。 作用∶显示 8位长的字符串(姓名)。 SQL: select name from operate where no='01' and stat !='9' and passwd='xxxxxxxx'; 第 5-7项∶类型'l',复合域说明提示的符号。 作用∶在规定的坐标后显示标题。 第 8项∶类型'l',复合域说明提示的符号。 作用∶在FORM上方显示标题。 第 9项∶类型'W'. 作用∶等待直至收到发送键才继续。 2.交易号为102的FORM内容∶ [命令] g [交易号] 102 [连接交易] 0 [驱动方式] D [索引项] 1 [序] [类型][长度][坐标][嵌入函数] [ 复 合 域 ] 0 C 4 1240 0 operate.no 1 P 6 1440 0 operate.passwd 2 - 0 0 0 and stat !='9' 3 w 0 0 0 密码错 !! 4 c 8 1***0 0 operate.name 5 P 6 1840 0 1828新密码: 6 l 0 1228 0 操作员: 7 l 0 1428 0 原密码: 8 l 0 1628 0 姓 名: 9 l 0 0 0 更改密码 10 x 0 0 0 update operate set passwd=$C3 ┏━━<102> 更改密码━━┓ ┃操作员: [0101] ┃ ┃ ┃ ┃原密码: [******] ┃ ┃ ┃ ┃姓 名: 王光红 ┃ ┃ ┃ ┃新密码: [******] ┃ ┗━━━━━━━━━━━┛ ------------ 图 3 ------------ 第 10项∶类型'x',复合域说明SQL语句。 复合域中的$C3,$标志符,'C'字符类,3字符类内存序号。 $C3是第 5域的字符串(PASSWD). 第 0域的字符串(no) 是$C0。 第 1域的字符串(passwd) 是$C1。 第 4域的字符串(name) 是$C2。 3.交易号为103的FORM内容∶ [命令] g [交易号] 103 [连接交易] 0 [驱动方式] [索引项] 0 [序] [类型][长度][坐标][嵌入函数] [ 复 合 域 ] 0 C 4 844 0 !oprate.no 1 B 0 0 0 2 i 0 0 0 [0,3] 3 i 0 0 0 9[0,1]?2 4 H 10 1044 0 1028姓名: 5 P 6 1244 0 1228口令: 6 F 1 1444 0 008 10 D 6 1***4 0 1628起用日期: 11 l 0 0 0 增加操作员 12 l 0 744 0 13 l 0 1744 0 14 l 0 1428 0 级别∶ 15 x 0 0 0 insert into operate values 16 - 0 0 0 ($C0, $C1, $C2, $C3, '1', $D0) 17 l 0 828 0 操作员号: ┏━━━<103> 增加操作员━━━┓ ┃ ┏━━值域━━━┓ ┃操作员号: [4302┃ [0,3]____(0)┃ ┃ ┃ 9[0,1]?2_(1)┃ ┃姓名: [ ┗━━━━━━━┛ ┃ ┃ ┃口令: [ ] ┃ ┃ ┃ ┃级别: [ ] ┃ ┃ ┃ ┃起用日期: [ ] ┃ ┃ ┃ ┗━━━━━━━━━━━━━━┛ ------------ 图 4.1 ------------ ┏━━━<103> 增加操作员━━━┓ ┃ ┃ ┃操作员号: [03] ┃ ┃ ┃ ┃姓名: [张德名 ] ┃ ┃ ┃ ┃口令: [******] ┃ ┃ ┏━━━━━━━━┓ ┃级别: [A]┃ A 业务管理_(0)┃ ┃ ┃ B 系统管理_(1)┃ ┃起用日期: [ ┃ C 操作员___(2)┃ ┃ ┗━━━━━━━━┛ ┗━━━━━━━━━━━━━━┛ ------------ 图 4.2 ------------ ┏━━━<103> 增加操作员━━━┓ ┃ ┃ ┃操作员号: [03] ┃ ┃ ┃ ┃姓名: [张德名 ] ┃ ┃ ┃ ┃口令: [******] ┃ ┃ ┃ ┃级别: [A] ┃ ┃ ┃ ┃起用日期: [***0509] ┃ ┃ ┃ ┗━━━━━━━━━━━━━━┛ ------------ 图 4 ------------ 第 0 项∶ 如你想先检查数据是否存在,以防重复,可在表名前加 '!'号,不存在为真。 第 1 项∶类型'B',控制前项(即第 0项)的值。 第 2, 3项∶类型'i',是第1项的附属项,复合域是字符串的模板。 输入的字符串须经过模板的检验,合法才能通过。 第 2项复合域 '[0,3]': 字符串的第1位的值域[0,3] 。 其他位不控制。 第 3项复合域 '9[0,1]?2': 字符串的第1位的值=9。 字符串的第2位的值域[0,1] 。 字符串的第3位任意。 字符串的第4位的值=2 。 符合以上模板之一,这里的操作员号才能通过。非法则弹出模板如图4.1所示. 第 4 项∶ H 汉字(在汉字终端上转入配置文件中指定汉字输入法) 第 6 项∶类型'F': 帮助项. 根据文本 /usr/wform/etc/form_msg.dat中与复合域所指定的类型(008) 相同的数据∶ A 业务管理 B 系统管理 C 操作员 组成菜单,当程序执行到第 6项时,就弹出菜单供你选择,如图4.2所示. 长度表示取数据的前几位的长度。 本例的长度为 1,仅取A、B、C三个字母之一。 第 9、10项∶类型'l'. 为了把窗口加大。 第 12、13项∶类型'x',复合域说明SQL语句。 第 0域的字符串(no) 是$C0。 第 4域的字符串(name 是 ... ...

近期下载者

相关文件


收藏者