⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winputsf.c

📁 详细介绍了一篇关于pci开发的接口芯片
💻 C
字号:
/*  CXL - Copyright (c) 1987-1989 by Mike Smedley - All Rights Reserved  */
/*  WINPUTSF.C       - inputs a string from the keyboard within a window     */

#include <conio.h>
#include <ctype.h>
#include "cxldef.h"
#include "cxlkey.h"
#include "cxlstr.h"
#include "cxlvid.h"
#include "cxlwin.h"

int winputsf(char *str,char *fmt)
{
    char ch;
    char *dest,*src,*temp,*start=0;
    int valid=NO,mixed=NO,upper=NO,endfmt=NO,retkey=YES,lower=NO;
    int done=NO,copy=NO,password=NO;

    if(!_winfo.total) return(_winfo.errno=W_NOACTIVE);

    /* initialize pointers */
    src=fmt;                                    
    dest=str;

    for(;;) {
        if(!(*src)) endfmt=YES;
        switch(*src) {
            case ' ':                           /*  check for space          */
                src++;
                break;
            case 39:                            /*  check for start quote    */
            case 34:
                ch=*src;
                src++;
                while(*src!=ch) {               /*  find end quote           */
                    if(*src==0) {               /*  end of string?           */
                        *str=0;
                        return(_winfo.errno=W_INVFORMT);
                    }
                    wputc(*src);                /*  display character        */
                    if(copy) *dest++=*src;      /*  copy char to output      */
                    src++;
                }
                src++;
                break;
            case '!':                           /*  check for start point    */
                src++;
                while(*src!='!') {              /*  find end excl. point     */
                    if(*src==0) {               /*  end of string?           */
                        *str=0;
                        return(_winfo.errno=W_INVFORMT);
                    }
                    switch(*src) {              /*  check for valid chars    */
                        case '-':               /*  decrease attribute       */
                            _winfo.active->attr--;
                            _winfo.active->attr=mapattr(_winfo.active->attr);
                            break;
                        case '+':               /*  increase attribute       */
                            _winfo.active->attr++;
                            _winfo.active->attr=mapattr(_winfo.active->attr);
                            break;
                        case 'C':               /*  toggle copy to output    */
                            copy^=1;
                            break;
                        case 'E':               /*  toggle Escape checking   */
                            _winfo.esc^=1;
                            break;
                        case 'L':               /*  toggle lower-case conv   */
                            lower^=1;
                            break;
                        case 'M':               /*  toggle mixed-case conv   */
                            mixed^=1;
                            break;
                        case 'P':               /*  toggle password (echo)   */
                            password^=1;
                            break;
                        case 'R':               /*  toggle return key check  */
                            retkey^=1;
                            break;
                        case 'U':               /*  toggle upper-case conv   */
                            upper^=1;
                            break;
                        default:
                            *str='\0';
                            return(_winfo.errno=W_INVFORMT);
                    }
                    src++;
                }
                src++;
                break;
            default:

                for(;;) {
                    ch=(char)(getxch()&0x00ff); /*  get key from keyboard    */
                    if(!ch) break;              /*  check for extended code  */
                    if(!start) start=dest;      /*  save start of input      */
                    if(ch==ESC) {               /*  is it the Escape key?    */
                        if(!_winfo.esc) {       /*  is Esc checking off?     */
                        }                       /*  yes, ignore              */
                        else {
                            *str=0;             /*  null string & quit       */
                            return(_winfo.errno=W_ESCPRESS);
                        }
                        break;
                    }
                    if(ch==CR) {                /*  is it the return key?    */
                                                /*  is return disabled?      */
                        if((!retkey)&&(!endfmt)) {
                        }
                        else {
                            *dest=0;            /*  add term null to string  */
                            return(_winfo.errno=W_NOERROR);
                        }
                        break;
                    }
                    if(ch==BS) {                /*  is it Backspace key?     */
                        if(dest!=str) {
                            if(dest==start) break;
                            wputc('\b');
                            wputc(' ');
                            wputc('\b');
                            dest--;
                            src--;
                            endfmt=NO;
                            done=NO;
                            while(!done) {
                                switch(*src) {
                                    case ' ':
                                        src--;
                                        break;
                                    case 39:
                                    case 34:
                                        ch=*src;
                                        src--;
                                                /*  find start quote         */
                                        while(*src!=ch) {
                                            wputc('\b');
                                            wputc(' ');
                                            wputc('\b');
                                                /*  decrease output ptr      */
                                            if(copy) dest--;
                                            src--;
                                        }
                                        src--;
                                        break;
                                    case '!':
                                        src--;
                                                /*  find start excl point    */
                                        while(*src!='!') {
                                                /*  toggle found switches    */
                                            switch(*src) {
                                                case '-':
                                                /*  increase attribute       */
                                                    _winfo.active->attr++;
                                                    _winfo.active->attr=
                                                        mapattr(_winfo.active->attr);
                                                    break;
                                                case '+':
                                                /*  decrease attribute       */
                                                    _winfo.active->attr--;
                                                    _winfo.active->attr=
                                                        mapattr(_winfo.active->attr);
                                                    break;
                                                case 'C':
                                                /*  togggle copy to output   */
                                                    copy^=1;
                                                    break;
                                                case 'E':
                                                /*  toggle Escape checking   */
                                                    _winfo.esc^=1;
                                                    break;
                                                case 'L':
                                                /*  toggle lower-case conv   */
                                                    lower^=1;
                                                    break;
                                                case 'M':
                                                /*  toggle mixed-case conv   */
                                                    mixed^=1;
                                                    break;
                                                /*  toggle password (echo)   */
                                                case 'P':
                                                    password^=1;
                                                    break;
                                                case 'R':
                                                /*  toggle return key check  */
                                                    retkey^=1;
                                                    break;
                                                case 'U':
                                                /*  toggle upper-case conv   */
                                                    upper^=1;
                                                    break;
                                            }
                                            src--;
                                        }
                                        src--;
                                        break;
                                    case '>':
                                        src--;
                                                /*  find start bracket       */
                                        while(*src!='<') src--;
                                        break;
                                    case ']':
                                        src--;
                                                /*  find start bracket       */
                                        while(*src!='[') src--;
                                        break;
                                    default:
                                        done=YES;
                                }
                            }
                        }
                        break;
                    }
                    if(!endfmt) {               /*  end of format string?    */
                        if(mixed)               /*  mixed-case switch on?    */
                            ch=touplow(str,dest,ch);
                        if(lower)               /*  lower case switch on?    */
                            ch=tolower(ch);
                        if(upper)               /*  upper-case switch on?    */
                            ch=toupper(ch);
                        valid=NO;
                        switch(*src) {          /*  test format character    */
                            case '<':           /*  is it in valid list?     */
                                temp=src;
                                src++;
                                                /*  check all chars in list  */
                                while(*src!='>') {
                                                /*  end of string?           */
                                    if(*src=='\0') {
                                        *str='\0';
                                                /*  invalid format string    */
                                        return(_winfo.errno=W_INVFORMT);
                                    }
                                    if(ch==*src) valid=YES;
                                    src++;
                                }
                                if(!valid) src=temp;
                                break;
                            case '[':           /*  is it in invalid list?   */
                                valid=YES;
                                temp=src;
                                src++;
                                                /*  check all chars in list  */
                                while(*src!=']') {
                                                /*  end of string?           */
                                    if(*src=='\0') {
                                        *str='\0';
                                                /*  invalid format string    */
                                        return(_winfo.errno=W_INVFORMT);
                                    }
                                    if(ch==*src) valid=NO;
                                    src++;
                                }
                                if(!valid) src=temp;
                                break;
                            default:
                                valid=cvaltype(ch,*src);
                                if(valid==-1) {
                                    *str='\0';
                                    return(_winfo.errno=W_INVFORMT);
                                }
                                switch(*src) {
                                    case 'L':
                                        ch=tolower(ch);
                                        break;
                                    case 'M':
                                        ch=touplow(str,dest,ch);
                                        break;
                                    case 'U':
                                        ch=toupper(ch);
                                        break;
                                }
                        }
                        if(valid) {             /*  input character valid?   */
                                                /*  yes, display it          */
                            wputc(password||*src=='P'?' ':ch);
                            *dest++=ch;
                            src++;
                            break;
                        }
                    }
                }

        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -