标题: 中创金融系统开发平台(BSDP)手册
dczyqsj
LU新生
Rank: 1



UID 91833
精华 2
积分 12
帖子 15
活跃指数 33
LU金币 236 个
LU金条 0 个
阅读权限 10
注册 2007-6-22
 
发表于 2007-6-22 16:33  资料  个人空间  短消息  加为好友 
中创金融系统开发平台(BSDP)手册

中创金融系统开发平台(BSDP)手册
(桌面控制部分)
Ver 1.0
BSDP字符窗口系统(CWS)
一、概述
    BSDP的字符窗口系统( CWS )是一个基于UNIX环境的字符窗口系统(Chractor Window Systerm)。利用该系统,程序员可以完成读取、保存和重显屏幕缓冲区等基本窗口操作。在此基础上,CWS提供了基本输入/输出、弹出式用户菜单、窗口文本浏览器等实用函数,可以方便地建立友好的用户界面。
二、字符窗口系统(CWS)的API接口约定
    1. 使用时需 #include   "dsdp.h"
    2. 所有的API函数都以 'W' 开头,每个动词的首字母大写
    3. 输出的字符串中不包含'\t','\n' 等其他转义序列。
    4. 输出字符位置(1,1)和(25,80)之内,字符串长度不超过80字符。
    5. 编译联接时使用 -lw
三、API 接口说明
        注: 对应于 WGet 系列函数, XGet 系列为其功能扩展函数, 其调用方式一致, 在此不再说明.
● WHello
[语法]   WHello(x, y, bell, mode, arg ...)
         int x, y, bell;
         char mode;
[说明]   WHello 显示提示.
                (x, y) 左上角位置
                bell   0/1 不/响铃
                mode   显示方式
                arg    显示内容
[返回值] 无 。
● WInitialize
[语法]   int WInitialize()
[说明]   WInitialize 执行窗口初始化操作,完成以下动作:

         -  创建屏幕缓冲区
         -  清屏、设置当前显示方式为白/黑方式,光标停在左上角(1,1)位置。
         -  设置终端操作为 raw 方式
         该函数应在主程序的最初调用.
[返回值] 初始化成功返回 0,否则返回-1
● WConnect
[语法]   int WConnect()
[说明]   WConnect 调用使当前进程取得对当前窗口系统的操作权限,但并不对窗口进行初始化。一般由主程序的子进程在程序开始时调用。
[返回值] 执行成功返回 0,否则返回-1。
●WCloce
[语法]   int WCloce()
[说明]   WCloce撤消窗口系统,主要完成以下操作:
         - 释放屏幕缓冲区。
         - 清屏、光标回到(1,1)。
         - 设置终端操作为cook方式。
         WClose 由主程序在退出前调用。
● WClear
[语法]   WClear()
[说明]   WClear 清整个屏幕 。
[返回值] 无 。
● WSetMode
[语法]   WSetMode(ch)
         char ch;
[说明]   WSetMode 用于设置由ch代表的显示方式
          '0':设置为黑底白字
          '1': 设置为白底黑字
          '2': 设置为红底白字
          '7': 设置为兰底白字
        注意:显示方式的切换必须使用WSetMode完成, 不能使用直接输出控制序列的方式。
[返回值] 无 。
● WMoveTo
[语法]   WMoveTo(x,y)
[说明]   WMoveTo将光标移至(x,y)处
[返回值] 无 。
● WPrintf , WPutChar
[语法]   int Wprintf(format,arg .....)
         cat char format;
         int WPutChar(ch)
         char ch;         
[说明]   WPrintf, WPutChar用法同系统函数pintf,putchar, 但 WPrintf,WPutChar同时更新屏幕缓冲区,并自动执行 fflush(stdout) 。
[返回值] 无 。
● WMovePrintf, WMovePutChar
[语法]   int WMovePrintf(x,y,format,arg...)
         int x,y;
         const char * format;
[说明]   WMovePrintf和WMovePutChar分别是WPrintf和WPutchar与WMoveTo 的组合使用,即先移动光标到(x,y) 再输出字符。
[返回值] 无 。
● WGetText
[语法]   char * WGetText(x,y,dx,dy)
         int x,y,dx,dy;
[说明]   从屏幕上读取(x,y)到(x+dx-1,y+dy-1)矩形区域内的字符及其显示属性,保存在一个暂存缓冲区中,并返回指向该缓冲区的指针。当屏幕上某个矩型区域的内容覆盖后需要重画时,应首先调用该函数予于保存。
[返回值] 返回暂存缓冲区的地址指针。
● WPutText
[语法]   WPutText(buf)
         char * buf
[说明]   WPutText将保存在暂存缓冲区buf中的内容重画,buf应是由WGetText返回暂存缓冲区地址。
[返回值] 无 。
● WSetRaw,  WSetCook
[语法]   WSetRaw()
         Wset Cook()
[说明]   WSetRaw  将终端设置为raw方式 。
         WSetcook 将终端设置为cook方式 。
[返回值] 无 。
● WGetKey
[语法]   WGetKey(flag,chp)
         int   * flag;
         char  * chp;
[说明]   WGetKey 读任意一个键值
         (* flag)   1  表示该键是ESC组合键
                      0  表示该键是普通键
         (* chp )   表示该值的键值  
[返回值] 无。
● WCls(x,y,dx,dy)
[语法]   WCls(x,y,dx,dy)
         int x, y, dx, dy
[说明]   WCls清从(x,y)到(x+dx-1,y+dy-1)之间的短型区域的内容
[返回值] 无 。
● WDrawBox
[语法]   WDrawBox(x,y,dx,dy,s,mode)
         int   x, y, dx, dy;
         char  *s, mode;
[说明]   WDrawBox 画一个左上角(x, y) dx行 dy 列 的矩形框, s是框的标题, mode 决定标题的显示属性 。
[返回值] 无。
● WGetString(x, y, n, p, help, check)
[语法]   WGetString(x, y, n, p, help, check)
         int    x,y,n;
         char   *p;
         int   (*help)(),(* chech)();
[说明]   WGetString 在(x,y)处输入一个长度为n的字符串,在输入过程中按下 TAB 键执行帮助函数help,当输入结束时,调用check函数检查合理性。
             check函数编写格式如下:
             check(buf)
             char *buf;
             {
             }
             help函数编写格式如下:
             help()
             {
             }
             返回 1 表示合法,  WGetString返回,
             返回 0 表示不合法,WGetString不返回,要求继续输入。
         注 意:回车、↑、↓、^C、^D、在输入前端输入←、在末端输入→ 都表示输入结束。除^C,^D处都调用check进行合法性检查。
[返回值] 根据最后一个输入键不同可能返回下列值。
         '^C':   以CTRL-C结束
         '^D':   以CTRL-D结束
         '\n':   以回车键结束
         'A':   ↑键结束
         'B':   ↓键结束
         'C':   →键结束
         'D':   ←结束
[注意]   WGetString 在编辑前先显示 p 的内容, 因此 p 需赋初值。
●  WGetInt
[语法]   int WGetInt(x,y,n,p,help,check)
         int x,y,n;
         int *p,(*help)(),(*check)();
[说明]   WGetInt 在(x,y)处输入一个长度为n的整数,结果存放在(*p)中,其他说明参见WGetString.
             check函数编写格式如下:
             check(n)
             int n;
             {
             }
[返回值] 参见WGetString 。
[注意]   WGetInt 在编辑前先显示 *p 的内容, 因此 *p 需赋初值。
● WGetLong(x,y,n,p,help,check)
[语法]   WGetLong (x,y,n,p,help,check)
         int x,y,n;
         long *p;
         int (*help)(),(* check)().
[说明]   WGetLong 在(x,y)处输入一个长度为n的长整数,结果存放在(*p)中,其他说明参见WGetInt.
             check函数编写格式如下:
             check(l)
             long l;
             {
             }
[返回值] 参见WGetInt
[注意]   WGetLong 在编辑前先显示 *p 的内容, 因此 *p 需赋初值。
● WGetDouble(x,y,m, n,p,help,check)
[语法]   WGetLong (x,y,n,p,help,check)
         int      x,y,m,n;
         double   *p;
         int      (* help)(),( * check)();
[说明]   WGetDouble 在(x,y)处输入一个宽度为m, n个小数位的double 型数,结果存放在(*p) 中,其他说明参见 WGetInt 。
             check函数编写格式如下:
             check(l)
             double d;
             {
             }
[返回值] 参见WGetInt
[注意]   WGetDouble 在编辑前先显示 *p 的内容, 因此 *p 需赋初值。
● WGetDate(x,y, n,p,help,check)
[语法]   WGetDate (x,y,n,p,help,check)
         int      x,y,n;
         char     *p;
         int      (* help)(),( * check)();
[说明]   WGetDate在(x,y)处输入一个宽度为n的日期. 结果存放在(*p) 中,(p中应初始化为YYYY/MM/DD 型字符串),
         其他说明参见 WGetString 。
             check函数编写格式如下:
             check(s)
             char *s;
             {
             }
[返回值] 参见WGetString
[注意]   WGetDate 在编辑前先显示 p 的内容, 因此 p 需赋初值。
● WGetPassword
[语法]   WGetPassword(x,y,n,p,help, check)
         int   x,y,n;
         char  *p;
         int ( * help) (),(* check) ();
[说明]   WGetPassword 在(x,y)处输入一个宽度为n的口令,输出时每个字符显示*,其他事项同WGetString。
             check函数编写格式如下:
             check(s)
             char *s;
             {
             }
[返回值] 参见WGetString.
●  WMenu
[语法]   WMenu(MenuList, FirstID   , MenuHelp)
         MenuIndex      *MenuList;
         char                *FirstID
         int            (* MenuHelp)();
[说明]   在该系统中,程序员按一定的格式描述所有的菜单及其相互关系,WMenu 按下列规则自动执行整个菜单系统。
        - 选择某一菜单项后,如果该项对应一个子菜单,则执 行该子菜单,否则执行相应的函数。
        - 在某一菜单按CTRL-D后返回上层菜单。
        - 在任何时候按TAB键,执行用户定义的菜单帮助函数。有关菜单的数据结构如下:
         每个菜单项的定义:
         typedef struct {
               char     DisplayBar[41];   /*菜单项显示内容*/
               char     HelpInfo[81];     /*对应该菜单项的帮助信息*/
               char     NextMenuID[11];   /*子菜单ID  ,空表示无子菜单*/
               int      (* Action)();     /*无子菜单的菜单项对应的执行函数*/
         }MenuItemType;
         每个菜单的定义:
         typedef struct {
               char    MenuID[11];        /*菜单ID */
               char    Tiltle[41];        /*菜单标题*/
               int     x, y, ItemN, ItemW, Jump, Colomn;
                                          /*(x,y)  菜单的左上角位置*/
                                          /* ItemN 菜单项个数*/
                                          /* IlemW 每个菜单项的宽度*/
                                          /* Jump  0—菜单项之间不隔行
                                                 1—菜单项之间隔一行
                                          /* Clomn菜单的列数 */
                                          /* Position: 初始菜单项*/
              MenuItemTupe MenuIlem [41]; /*每个菜单菜单项*/
        }Menu;
        菜单索引的定义:
        typedef struct {
             char     MenuID[11];         /*菜单ID  */
             Menu     *MenuPointer;       /*菜单指针*/
        } MenuIndex:
        MenuHelp编写格式:
        help(s,c)
        char *s,c;  /* s 菜单ID, c 菜单项首字母 */
        {        
        }
        该函数的使用方法,请参照例子程序 m1.c, m2.c。
● WSetEditTerm,  WEdit , WSetEditTerm2, WEdit2
[语法]   WSetEditTerm(i,x,y,n,p,f,h,c)
         int  i, x, y, n;
         char *p;
         int  (*f) (), (*h), (*c) ();
         WEdit(n)
         int   n;
         WSetEditTerm2(i,x,y,s,n,p,f,h,c)
         int  i, x, y, n;
         char *s;
         int  n;
         char *p;
         int  (*f) (), (*h), (*c) ();
         WEdit2(n)
         int   n;
[说明]   WSetEditTerm 与 WEdit 配合使用可完成全屏幕的字段 输入功能,WSetEditTerm设置每个编辑项, WEdit执行实际的编辑操作。
         i:     编辑项编号,从0连续向后排。
         (x,y): 编辑项的输入位置
         n:     编辑项宽度
         p:     编辑项的存储空间
         f:     编辑函数
         h、c:  编辑函数使用的帮助及检查函数。
         WSetEditTerm2 与 WEdit2 配合使用可完成全屏幕的字段 输入功能,WSetEditTerm2设置每个编辑项, WEdit2执行实际的编辑操作。
         i:     编辑项编号,从0连续向后排。(x,y): 编辑项的输入位置
         s      提示字符串
         n:     编辑项宽度
         p:     编辑项的存储空间
         f:     编辑函数
         h、c:  编辑函数使用的帮助及检查函数。

         实际编辑位置为(x, y+stelen(s) + 2), 编辑域括在[ ]之中。        
        注意:用户定义的编辑函数 f的对外接口及返回值,必须与WGetString等相同。否则将出现不可预 料的结果,上速函数的使用请参照例子 editdemo.c和 editdemo2.c。
● WFileEdit
[语法]   WFileEdit(FileName,StartX, Row,FieldList,FieldN,Permision,TotalCheck,x0,y0)
         char    *FileName;
         int     StartX,Row;
         Field   *FieldList;
         int      FieldN,(* Check)(),(*TotakCheck)();
         int          x0,y0;
[说明]   WFileEdit 用于对文件FileName进行全屏幕编缉, 编缉区从StartX行开始, 共有Row行.FileName文件由FieldN个字段,字段之间由'|'分割,每个字段的属性由FieldList描述.  插入,删除之前调用Permision, 反回 1 表示允须 , 0 不允须
             Permision 的编写格式:
             perm(ch, buf)
             char ch, *buf;
             {
                /*               
                     ch == 'n' 插入
                     ch == 'c' 删除
                buf 指向当前记录
                */
             }
         TotakCheck() 在选存盘退出前调用 ,对输入内容进行全面检查:
                返回值:
                    1 成功:   WFileEdit 结束:
                    0 不成功: WFileEdit 继续:        
         (x0,y0) 是存盘提示的左上角
         TotalCheck 的编写格式:
         totalcheck(base, length, count);
         char        *base;
         int        length, count;
         {
         }
         base 内存中文件基地址:
         length 每个记录长度:
         count  记录个数:
         各字段之间'|' 分隔;
         Field 定义:
         typedef struct {
             int   x , y , Width, w;
             char  Type;        
             int   (* Check)(),( * Help)();
        }Field  
        (x,y) 字段的编缉位置 x =  0 WFieldEdit 自动调整 x != 0 WFieldEdit不调整    Width 字段的宽度
        w     小数位数
        Type  字段的类型
          's':   字符型
          'i':   整型
          'l':   长整型
          'f':   浮点型
          'd':   日期型
          'p':   口令型
          't':   只显型(不能修改)
        Check, Help
              字段的检查和帮助函数
[返回值] 0_不保存  1_保存 。
● WSelectOne
[语法]   WSelectOne(FileName, StartX, Row,FieldList,FieldN,Mode,Act,UserBuf)
         char    *FileName;
         int     StartX,Row;
         Field   *FieldList;
         int     FieldN,Mode;
         int     (* Act)();
         char         *UserBuf;
[说明]   WSelectOne 用于对文件FileName进行全屏幕流览, 流览区 从StartX行开始, 共有Row行.FileName文件由FieldN个字段,字段之间由'|'分割,每个字段的属性由FieldList描述.            
         DispField 定义:
         typedef struct {
             int   x , y , Width, w;
             char  Type;        
        }DispField  
        (x,y)字段的编缉位置 x =  0 WSelectOne 自动调整 x != 0 WFieldEdit 不调整 Width 字段的宽度
        w     小数位数
        Type  字段的类型
          's':   字符型
          'i':   整型
          'l':   长整型
          'f':   浮点型
          'd':   日期型
          'p':   口令型
        按回车键亮条所在当前行拷贝到内部暂存区
         若  Mode :
              0 拷贝暂存区到UserBufWSelectOne返回 .
              1 调用Act ,WSelectOne不返回.
        Act编写格式
        act(buf)
        char *buf;
        {
        }
        见例子 select.c
[返回值]  '\n' 或 '';
● WTextView
[语法]  WTextView(x,y,l,c,v,f, n)
        int x,l,y,c,f, n;
        char *v;
[说明]  用于窗口浏览一个文件
                        x 第x行
                        y 第y列
                        l 共l行
                        c 共c列
                        v 文件名
                        f 标志   1--左右移   0--不可移
                        n 前n行不移动
[返回值] 无 。
● GetOneField
[语法]  int GetOneField(Buffer,n, Field,Seperator)
        char        *Buffer;
        int        n;
        char        *Field, Seperator;
[说明]  GetOneField 从 Buffer 中取第n个字段放入Field中。Buffer中的每个字段以Seperator 为分隔苻。 n 从 1 开始。
[返回值]  当Field为空时返回零,否则返回Field的长度。
● SenON, SemOff
[语法]   int SemOn()
         char *Sem;
         SemOff(fd)
         int fd;   
[说明]   SemOn占用信号灯Sem, 如Sem不存在则建立之,如果Sem  被其他别进程占用则等待,否则占用信号灯Sem,并返 回对应的文件描述符fd;
         SemOff放弃fd所表示的信号灯。
[返回值] SemOn 返回信号灯文件描述字,Semoff无返回值。
● trim
[语法]   trim(s)
         char *s;
[说明]   去掉 s的尾部空格。
[返回值] 无 。
● nstrcpy

[语法]   nstrcpy (s,s2, n)
         char    *s1,s2;
         int     n;
[说明]   拷贝s2的前n个字符到s1,如果s2不足n个,则 在s1的后面补空格。
[返回值] 无 。
● isin  
[语法]   isin(ch ,s )
         char    ch, *s;
[说明]   判断ch 是否在 s 中。
[返回值]  1_是 0_否。
● strrmb
[语法]   strrmb(d,s)
         double d;
         char *s;
[说明]   strrmb将double型数值转换为人民币大写放入 s 中。
[返回值] 无 。
=======================================================
● GetTmpFile(buf)
   char *buf;
● prtctrl(fp, dh, printer)
   File *fp;
   char *dh, *printer;
● chpass(s1,s2,s3,s4,pass)
   char *s1,*s2,*s3,*s4,pass[];
● char *div(p,frm,va_alist)
   char *p,*frm;
   va_dcl
● trstr(s1,s2)
   char *s1, *s2;

顶部
小猪 (onlyOne)
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 90598
精华 14
积分 4622
帖子 8124
活跃指数 384
LU金币 9151 个
LU金条 0 个
阅读权限 200
注册 2007-5-31
来自 LU猪猪盟
 
发表于 2007-6-24 16:03  资料  个人空间  短消息  加为好友  QQ
支持一下。





吼吼...广州上海AIX培训长期招募热群....QQ群22192878.
5月1日广州开课啦.详情请见:http://bbs.loveunix.net/viewthre ... &extra=page%3D1
浙江地区IBM全线硬件产品销售.
顶部
kettyalx
LU圣天使
Rank: 8Rank: 8


UID 76177
精华 4
积分 3151
帖子 4741
活跃指数 345
LU金币 5099 个
LU金条 0 个
阅读权限 160
注册 2007-2-5
 
发表于 2007-6-27 08:02  资料  个人空间  短消息  加为好友 
路过一下





我就像一只趴在玻璃上的苍蝇,前途一片光明,但又找不到出路.
顶部
qiqi1586
LU新生
Rank: 1



UID 112510
精华 0
积分 6
帖子 12
活跃指数 0
LU金币 12 个
LU金条 0 个
阅读权限 10
注册 2008-10-10
 
发表于 2008-10-28 07:48  资料  个人空间  主页 短消息  加为好友  QQ
看帖不顶不厚道~~我顶~~~~


顶部
 



当前时区 GMT+8, 现在时间是 2009-1-9 08:59
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.155029 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver