Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104613838
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-17 17:19:16

  出处:Unix爱好者家园unix-cd.com   
中创金融系统开发平台(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;
阅读(378) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~