免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: 背包
打印 上一主题 下一主题

[SCO UNIX] 在sco unix5.05中,如何限制用户按delete键 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2003-02-08 20:16 |只看该作者

在sco unix5.05中,如何限制用户按delete键

rom98老兄,你干嘛钻牛角尖呢?
单位里早就在用unix了,我的那个破Xenix是用做后台复核记帐的,不是用在一线工作的!!!
Xenix是早就该进坟墓了,只是微软还没有!看来只有rom98兄弟来努力了!

论坛徽章:
0
22 [报告]
发表于 2003-02-09 09:54 |只看该作者

在sco unix5.05中,如何限制用户按delete键

我有:
#include <stdio.h>;
#include <fcntl.h>;
#include <time.h>;
#include <stdlib.h>;
#include <string.h>;
#include <termio.h>;
#include "user.h"
#include "term.h"
#include "msr.h"
int Select();
void    Wait();
main()
{
int Choice,mode;
char tr2[38],tr3[108];
int q,ret_code;
int timeout=10;
char pin[10];
do {
Choice=Select();
switch (Choice) {
      case 1:
      case 2:
            printf("lease input PIN:\n";
            if (ret_code==0) printf("\nYour Pin is %s\n",pin);
            else printf("read PIN timeout\n";
            Wait();
            break;
      case 3:
            printf("please input read_mode(1-3):";
            fflush(stdin);
            scanf("%d",&amp;mode);
            fflush(stdin);
            printf("please  read card !\n";
            q=starMsrRead(mode,tr2,tr3,timeout);
            printf("\ntr2=";
            puts(tr2);
            printf("tr3=";
            puts(tr3);
            printf("q=%d\n",q);
            Wait();
            break;
      case 4:
            fflush(stdin);
            printf("\ninput track2 data(no data return)\n";
            gets(tr2);
            fflush(stdin);
            printf("input track3 data(no data return)\n";
            gets(tr3);
            q=starMsrWrite(tr2,tr3,timeout);
            printf("\nq=%d\n",q);
            Wait();
            break;
      }
  }
  while (Choice!=0);
}

int Select()
{
char c;
do {
printf("\033[2J\n";
printf( "\033[8;20H============================================\n";
printf( "\033[9;20H=           \033[7mPinpad &amp; Msr Test\033[0m                  =\n");
printf("\033[10;20H============================================\n");
printf("\033[11;20H=           [1] 绿灯亮读密码               =\n");
printf("\033[12;20H=           [2] 红灯亮读密码               =\n");
printf("\033[13;20H=           [3] Read Card                  =\n");
printf("\033[14;20H=           [4] Write Card                 =\n");
printf("\033[15;20H=           [0] Exit                       =\n");
printf("\033[16;20H============================================\n");
printf("\033[17;20H\n");
fflush(stdin);
c=getchar();
}
while (c<'0' || c>;'4');
return (c-'0');
}

void Wait()
{ char c;   
fflush(stdin);
c=getchar();
}

int starMsrRead(read_mode,track2_data,track3_data,timeout)
int read_mode;
char *track2_data;
char *track3_data;
int timeout;
{        int i,j,k,k1,flag;
        char ch;
        char data[300],state[5];
        int ret_code;
        track2_data[0]=0;
        track3_data[0]=0;
        openPort(MSR_PORT);
        switch(read_mode)
        {        case 2:dataToDevice(MSR_READ2);
                        break;
                case 3:dataToDevice(MSR_READ3);
                        break;
                case 0:
                case 1:
                default:dataToDevice(MSR_READ23);
                         break;
        }
        ret_code=readLeadEndStr(data,MSR_READ_DATA_LEAD,MSR_READ_DATA_END,timeout*10);
        if (ret_code==-1)
        {        dataToDevice(MSR_RESET);
                closePort();
                return -1;
        }
        if (data[0]==MSR102_READ_DATA_LEAD)
        {
                fflush(stdin);
#if MSR102_COMM_SET
                dataToDevice(MSR_STATE);
#endif
                ret_code=readLeadEndStr(state,MSR_RW_STATE_LEAD,MSR_RW_STATE_END,timeout*10);
                if (ret_code==-1)
                {        closePort();
                        return -1;
                }
                if (state[strlen(state)-1]!=MSR_RW_OK)
                {        closePort();
                        return -1;
                }
        }
        closePort();
        j=strlen(data);
        for (i=0;i<j;i++)
        {
                if (strchr(MSR_READ_DATA_END,data)!=NULL)
                {        flag=1;   break;    }
        }
        if (flag==1)
        {        data[i+1]=0;
                j=strlen(data);
        }
        else
        {                return -1;   }
        flag=0;
        k=k1=0;
        for (i=0;i<j-2;i++)
        {
                if (strchr(MSR_READ23_DATA_SEP_CHAR,data)!=NULL)
                {        flag=1;
                        continue;
                }
                if (strchr(MSR_READ_DATA_LEAD,data)!=NULL)
                {
                        continue;
                }
                if ((data<'A')&amp;&amp;(data>;0x20))
                {
                      if (flag==0)
                        {        if(data!='?')       
                                track2_data[k++]=data;
                        }
                        else
                        {        if(data!='?')       
                                track3_data[k1++]=data;
                        }
                }
        }
        track2_data[k]=0;
        track3_data[k1]=0;
        return 0;
}

int starMsrWrite(track2_data,track3_data,timeout)
char *track2_data;
char *track3_data;
int timeout;
{        int i,ret_code;
        char ch;
        char state[5];
        if ((strlen(track2_data)==0)&amp;&amp;(strlen(track3_data)==0)) return -1;
        openPort(MSR_PORT);
#if MSR_FORMAT        dataToDevice(MSR_SET_IBM_FORMAT);
#else                 dataToDevice(MSR_SET_ISO_FORMAT);
#endif
#if MSR_CHARATER_SET         dataToDevice(MSR_SET_IBM_CHARACTER);
#else          dataToDevice(MSR_SET_ISO_CHARACTER);
#endif
#if MSR102_COMM_SET
        dataToDevice(MSR_WRITE_LEAD);
        dataToDevice(track2_data);
        if (strlen(track3_data)!=0)
        {
                dataToDevice(MSR_WRITE23_SEP_STR);
                dataToDevice(track3_data);
        }
        dataToDevice(MSR_WRITE_END);
        dataToDevice(MSR_STATE);
#else
        if ((strlen(track2_data)==0)||(strlen(track3_data)==0))
        {
                if (strlen(track2_data)==0)
                {        dataToDevice(MSR_WRITE3_LEAD);
                        dataToDevice(track3_data);
                        dataToDevice(MSR_WRITE_END);
                }
                else
                {        dataToDevice(MSR_WRITE2_LEAD);
                        dataToDevice(track2_data);
                        dataToDevice(MSR_WRITE_END);
                }
        }
        else
        {        dataToDevice(MSR_WRITE23_LEAD);
                dataToDevice(track2_data);
                dataToDevice(MSR_WRITE23_SEP_STR);
                dataToDevice(track3_data);
                dataToDevice(MSR_WRITE_END);
        }
#endif
        ret_code=readLeadEndStr(state,MSR_RW_STATE_LEAD,MSR_RW_STATE_END,timeout*10);
        if (ret_code==-1)
        {        dataToDevice(MSR_RESET);
                closePort();
                return -1;
        }
        closePort();
        if (state[strlen(state)-1]!=MSR_RW_OK)
        {        return -1;   }
        return 0;
}      /* 返回状态: 0: 正确返回 -1: 出错 */

/*        int setTerm(void);
        设置UNIX通讯口参数
                设成非正则方式
        返回:         -1: 出错 0:  正确返回
*/
static int star_fd=1;
static struct termio oterm_attr,term_attr;
int setTerm()
{
        if(star_fd<0) return -1;
        if(ioctl(star_fd,TCGETA,&amp;oterm_attr)<0) return -1;
        if(ioctl(star_fd,TCGETA,&amp;term_attr)<0) return -1;
        term_attr.c_lflag &amp;=~(ISIG|ECHO|ICANON|NOFLSH|XCLUDE);
        term_attr.c_iflag &amp;=~(IXON|INLCR|IGNCR|ICRNL|ISTRIP);
        term_attr.c_oflag &amp;=~OPOST;
        term_attr.c_cc[VMIN]=0;
        term_attr.c_cc[VTIME]=3;
        term_attr.c_cc[VQUIT]=0x7f;
#if UNIXPC
        term_attr.c_cflag&amp;=~CBAUD;
        term_attr.c_cflag&amp;=~CSIZE;
        term_attr.c_cflag|=B9600;
        term_attr.c_cflag|=CS8;
        term_attr.c_cflag|=(CLOCAL|CREAD);
        term_attr.c_cflag&amp;=~(PARENB|CSTOPB);
#endif
        if(ioctl(star_fd,TCSETAW,&amp;term_attr)<0) return -1;
        return star_fd;
}

int setNowait()
{        if(star_fd<0) return -1;
        if(ioctl(star_fd,TCGETA,&amp;term_attr)<0) return -1;
        term_attr.c_cc[VMIN]=0;
        term_attr.c_cc[VTIME]=1;
        if(ioctl(star_fd,TCSETAW,&amp;term_attr)<0) return -1;
        return 0;
}

int resetNowait()
{        if(star_fd<0) return -1;
        if(ioctl(star_fd,TCGETA,&amp;term_attr)<0) return -1;
        term_attr.c_cc[VMIN]=1;
        term_attr.c_cc[VTIME]=0;
        if(ioctl(star_fd,TCSETAW,&amp;term_attr)<0) return -1;
        return 0;
}

//        int resetTerm(void);
//        恢复UNIX通讯口参数
//        返回:         -1: 出错 0:  正确返回
int resetTerm()
{
        if(star_fd<0) return -1;
        if(ioctl(star_fd,TCSETAW,&amp;oterm_attr)<0) return -1;
        if(star_fd!=0) close(star_fd);
        return 0;
}

/*        打开外设通讯口
        参数: port: 通讯口号
                      连UNIXPC 1: Serial Com 1 2: Serial Com 2
                      连终端   1: Aux 1 2: Aux 2 3: Aux 3
*/
int openPort(port)
int port;
{        int ret_code;
#if UNIXPC
        switch(port){
                case 1:star_fd=open(SERIALCOM1_TTYNAME,O_RDWR);
                        break;
                case 2:star_fd=open(SERIALCOM2_TTYNAME,O_RDWR);
                        break;
                default:
                        return -1;
        }
        if (star_fd<0)
        {
                return -1;
        }
       
#else                star_fd=open((char *)ttyname(1),O_RDWR);
#endif                ret_code=setTerm();
                if (ret_code==-1) return -1;
#if UNIXPC
#else
        switch(port){
                case 1:dataToTerminal(OPEN_AUX1);
                        break;
                case 2:dataToTerminal(OPEN_AUX2);
                        break;
                case 3:dataToTerminal(OPEN_AUX3);
                        break;
                default:
                        return -1;
        }
#endif
        return 0;
}

/*        关闭外设通讯口*/
int closePort()
{        int ret_code;
#if UNIXPC
#else         dataToTerminal(CLOSE_AUX);
#endif
        ret_code=resetTerm();
        return ret_code;
}

/*        数据送往终端        data: 要送往终端的数据*/
int dataToTerminal(data)
char *data;
{
#if UNIXPC        write(star_fd,data,strlen(data));
#else          write(star_fd,data,strlen(data));
#endif
        return 0;
}

/*        int dataToDevice(char *data);
        数据送往外设
        data: 要送往外设的数据
*/
int dataToDevice(data)
char *data;
{
#if UNIXPC        write(star_fd,data,strlen(data));
#else        write(star_fd,AUXLEAD,strlen(AUXLEAD));
        write(star_fd,data,strlen(data));
        write(star_fd,AUXEND,strlen(AUXEND));
#endif        
return 0;
}

//        从外设接收一个字符
//        ch_point: 从外设返回的字符
//        返回值: 0:接收到字符      -1:未接收到字符
int charFromDevice(ch_point)
char *ch_point;
{
        int ret_code;
        ret_code=read(star_fd,ch_point,1);
        if (ret_code==1) return 0;
        return -1;
}

int readChar(ch,timeout)
char *ch;
int timeout;
{
        int i,ret_code;

        for(i=0;i<timeout;i++)
        {
                ret_code=charFromDevice(ch);
                if(ret_code==0) break;
        }
        if (ret_code==0) return 0;
        return -1;
}

/*        读定长度字符串
        string:  返回字符串
        length:  要读的字符串长度
        timeout: 超时时间
*/
int readLenStr(string,length,timeout)
char *string;
int length,timeout;
{
        int i,j,ret_code;
        char ch;
        fflush(stdin);
        for (i=0;i<length;i++)
        {
                for(j=0;j<timeout;j++)
                {
                        ret_code=charFromDevice(&amp;ch);
                        if (ret_code==0) break;
                }
                if (ret_code==-1) break;
                string=ch;
        }
        return ret_code;
}
/*
        读一个有起始与结束字符的字符串
        string:  返回字符串
        lead_char: 起始字符的字符串
        end_char: 结束字符的字符串
        timeout: 超时时间
*/
int readLeadEndStr(string,lead_char,end_char,timeout)
char *string;
char *lead_char,*end_char;
int timeout;
{        int i,j,ret_code;
        char ch;
        do
        {
                for(j=0;j<timeout;j++)
                {
                        ret_code=charFromDevice(&amp;ch);
                        if (ret_code==0) break;
                }
                string[0]=ch;
                if (ret_code==-1) break;
                if (ch==ABORTCHAR) break;
        } while(strchr(lead_char,ch)==NULL);
        if ((ret_code==-1)||(ch==ABORTCHAR))
        {
                return -1;
        }
        i=1;
        do
        {
                for(j=0;j<timeout;j++)
                {
                        ret_code=charFromDevice(&amp;ch);
                        if (ret_code==0) break;
                }
                string[i++]=ch;
                if (ret_code==-1) break;
                if (ch==ABORTCHAR) break;
        } while(strchr(end_char,ch)==NULL);
        if ((ret_code==-1)||(ch==ABORTCHAR))
        {
                return -1;
        }
        string=0;
        return 0;
}

论坛徽章:
0
23 [报告]
发表于 2003-02-09 10:07 |只看该作者

在sco unix5.05中,如何限制用户按delete键

还有几个.h:
msr.h
#ifndef __msr_h__
#define __msr_h__
/*
        msr.h

        STAR Serial MSR Drivers For UNIX
        Author:                Wind
        Version:        V1.0
        Date:                 1998.09.06
        Copyright (c) 1998-2000 START Group Co. Ltd.
        All rights reserved.
*/
/*
        STAR-23MCR
                DIP开关: 1,3,8 ON ,其他 OFF
        STAR-101
                DIP开关: 1,2,3 ON ,4 OFF
        STAR-102
*/
/*Card Standard

#define ISO 0
#define IBM 1
#define MSR_FORMAT ISO                  //磁卡格式:ISO or IBM
#define MSR_FORMAT IBM                  //磁卡格式:IBM
#define MSR_CHARATER_SET ISO            //磁卡可读写字符集: ISO or IBM
#define MSR_CHARATER_SET IBM            //磁卡可读写字符集: IBM

#define ISO 0
#define IBM 1

#define STAR_101_102        0             //STAR-101,102 or STAR33III,23MCR
#define STAR_101        1             //STAR-101 or STAR23MCR
#define STAR_102        2             //STAR-102 or STAR33III
#define MSR_TYPE                STAR_101_102
#define MSR102_COMM_SET         1       //磁卡命令集
#define MSR_FORMAT                 ISO         //磁卡格式:ISO
#define MSR_CHARATER_SET         IBM         //磁卡可读写字符集:IBM
*/
/* MSR102 COMMAND1*/
#define MSR_POWER_RESET                 "\033S"
#define MSR_RESET                         "\0330"

#define MSR_SET_ISO_FORMAT                 "\033B3"
#define MSR_SET_IBM_FORMAT                 "\033B4"
#define MSR_SET_ISO_CHARACTER                 "\033M"
#define MSR_SET_IBM_CHARACTER                 "\033O"
#define MSR_SET_EXTER_CHARACTER         "\033P"
#define MSR_SET_NOEXTER_CHARACTER         "\033C"
#define MSR_SET_HIGH_BPI                 "\033H"
#define MSR_SET_LOW_BPI                 "\033L"

#define MSR_STATE                         "\033j"

#if MSR102_COMM_SET

#define MSR_READ2                 "\033]"
#define MSR_READ3                 "\033T]"
#define MSR_READ23                  "\033B]"

#define MSR_WRITE_LEAD                 "\033t"
#define MSR_WRITE23_SEP_STR         "A"
/*
#define MSR_WRITE_END "\x1d\x1b\x5c"
*/
#define MSR_WRITE_END                 "\035\033\134"

#define MSR_RW_STATE_LEAD         "\033"
#define MSR_RW_STATE_END         "pq"
#define MSR_RW_OK                 'p'

#define MSR_RW2_OK                 "\033rp"
#define MSR_RW3_OK                 "\033Trp"
#define MSR_RW23_OK                 "\033Brp"
#define MSR_RW2_ERR                 "\033rq"
#define MSR_RW3_ERR                 "\033Trq"
#define MSR_RW23_ERR                 "\033Brq"

#else
/* MSR Command 2*/
#define MSR_READ2                 "\033r"
#define MSR_READ3                 "\033p"
#define MSR_READ23                 "\033q"

#define MSR_WRITE2_LEAD         "\033s"
#define MSR_WRITE3_LEAD         "\033u\033t"
#define MSR_WRITE23_LEAD         "\033v\033s"
#define MSR_WRITE23_SEP_STR         "?\033t"
#define MSR_WRITE_END                 "?\034"

#define MSR_RW_STATE_LEAD         "\033"
#define MSR_RW_STATE_END         "0123"
#define MSR_RW_OK                 '0'

#define MSR_RW_OK_STR                 "\0330"
#define MSR_RW2_ERR_STR         "\0331"
#define MSR_RW3_ERR_STR         "\0332"
#define MSR_RW23_ERR_STR         "\0333"

#endif

#define MSR102_READ_DATA_LEAD         0x1b
#define MSR102_READ_DATA_END         0x1c
#define MSR102_READ_DATA_LEAD_LEN 2
#define MSR102_READ_DATA_END_LEN 2
#define MSR102_READ23_DATA_SEP_CHAR 'A'

#define MSR101_READ_DATA_LEAD ';'
#define MSR101_READ_DATA_END  0xd
#define MSR101_READ23_DATA_SEP_CHAR '?'
#define MSR101_READ_DATA_LEAD_LEN 1
#define MSR101_READ_DATA_END_LEN 2

#define MSR_READ_DATA_LEAD         "\033;+"
#define MSR_READ_DATA_END         "\x1c\x0d"
#define MSR_READ23_DATA_SEP_CHAR "A?+"

#endif

term.h
#ifndef __TERM_H__
#define __TERM_H__

#include <stdio.h>;
#include <fcntl.h>;
#include <time.h>;
#include <stdlib.h>;
#include <string.h>;

#include <termio.h>;

/*

#define MSR_PORT 1
#define PINPAD_PORT 2
#define PRT_PORT   1

#define UNIXPC 1

#define SERIALCOM1_TTYNAME "/dev/tty1a"
#define SERIALCOM2_TTYNAME "/dev/tty2a"

#define ABORTCHAR 0x4

#define AUX_EMU                0                   //辅口仿真类型
/*
  0:  star
  1:  cj320
  2:  bp8901
*/

#define ESC        0x1b
#define QUITKEY 0x7f

/*
        终端辅助口控制命令
*/

#define KEYLOCK "\033[2h"
#define KEYUNLOCK "\033[2l"

#define SELECTAUX1 "\033!0;0;0;0Y"
#define SELECTAUX2 "\033!0;0;0;0Z"
#define SELECTAUX3 "\033!0;0;0;0X"
#define OPEN_AUX  "\033[/54l\033[/53h\033[/50h"
#define OPEN_AUX1 "\033!0;0;0;0Y\033[/54l\033[/53h\033[/50h"
#define OPEN_AUX2 "\033!3;0;0;0Z\033[/54l\033[/53h\033[/50h"
#define OPEN_AUX3 "\033!0;0;0;0X\033[/54l\033[/53h\033[/50h"
#define CLOSE_AUX "\033[/51l\033[/50l\033[2l"

#define ALL_TRASFER "\033[/54h"
#define AUXLEAD "\033[/51h"
#define AUXEND        "\033[/51l"

#define ALL_ON "\200"
#define RED_ON "\201"
#define GREEN_ON "\202"
#define ALL_OFF "\203"
#define CHECK_PINPAD "\211"
#endif

user.h
#ifndef __user_h__
#define __user_h__
/*
        user.h

        STAR Serial MSR Drivers For UNIX
        Author:                Wind
        Version:        V1.0
        Date:                 1998.09.06
        Copyright (c) 1998-2000 START Group Co. Ltd.
        All rights reserved.
*/

#define UNIXPC                 0                   //0: 外设连终端
                                            //1: 外设直接连UNIX服务器

#define MSR_PORT         1                   //磁卡机通讯口号
#define PINPAD_PORT         2                   //密码键盘通讯口号
#define PRT_PORT           1                   //打印机通讯口号


#define SERIALCOM1_TTYNAME "/dev/tty1a"     //UNIX服务器串口1串口名
#define SERIALCOM2_TTYNAME "/dev/tty2a"     //UNIX服务器串口2串口名

#define ABORTCHAR 0x71                       //强行退出按键 Ctrl+D

#define ISO 0
#define IBM 1

#define MSR_FORMAT                 ISO         //磁卡格式:ISO
#define MSR_CHARATER_SET         IBM         //磁卡可读写字符集:IBM
#define MSR102_COMM_SET         1           //磁卡命令集


#endif

论坛徽章:
0
24 [报告]
发表于 2003-02-09 15:26 |只看该作者

在sco unix5.05中,如何限制用户按delete键

好多方法:
vi .profile
stty intr '^_'
这样就可以了

论坛徽章:
0
25 [报告]
发表于 2003-02-09 21:24 |只看该作者

在sco unix5.05中,如何限制用户按delete键

谢谢各位,谢谢flybirdxp兄弟、moyuzi 、eczy !
我无以为谢,只寄上我以前写给我兄弟的一首诗,赠给以上的兄弟:

                勉兄小诗
论贤唯德首推兄,自比叔牙与管仲。      
黄鹄岂肯笼中伏,引颈长呼向天冲。
家住江南无所赠,小诗一首聊赠兄。
金有芒而玉有泽,兄岂埋没尘土中。

论坛徽章:
0
26 [报告]
发表于 2003-02-10 12:16 |只看该作者

在sco unix5.05中,如何限制用户按delete键

在.profile文件里没有trap吗?

论坛徽章:
0
27 [报告]
发表于 2003-02-10 17:31 |只看该作者

在sco unix5.05中,如何限制用户按delete键

我都把.profile文件搬上来了,没有就是没有!!!

论坛徽章:
0
28 [报告]
发表于 2003-02-10 17:54 |只看该作者

在sco unix5.05中,如何限制用户按delete键

各位都是建行的吗?我以前是建行的,现在是商行了。

论坛徽章:
0
29 [报告]
发表于 2003-02-10 17:56 |只看该作者

在sco unix5.05中,如何限制用户按delete键

建行的内部网站搞的不错,至今仍怀念ing.还有ficq.以前我的是1840.

论坛徽章:
0
30 [报告]
发表于 2003-02-10 20:55 |只看该作者

在sco unix5.05中,如何限制用户按delete键

建你的头,谁是建行的?就呆呆我一个,还有几个现在没露面!!!
建行网站是不错,你以前的辽宁建行网站更加不错,但那是做给领导看的!
建行宁波分行论谈用的也是雷傲,但人气就......
我觉得wkl兄弟的绥化信合网站做的也不错,还有sdccf最近又改版了,你们也去看看!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP