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

📄 dt900lib.c

📁 CASIO 手持终端盘点系统源代码——C语言
💻 C
📖 第 1 页 / 共 3 页
字号:

/***********************************************************************/
/*                                                                     */
/*  PROGRA              : CLCE LIB PROGRAM                             */
/*  SYSTEM              : DT-700 VER1.00                               */
/*  FILE                : ClceLib.C                                    */
/*  VERSION             : 1.00                                         */
/*  AUTHOR              : YangDongQing, CLCE                           */
/*  DATE OF GET         : 98/07/01                                     */
/*  DATE OF UPDATE      :                                              */
/*  FUNCTION            :                                              */
/*  HISTORY             :                                              */
/*                                                                     */
/*                                                                     */
/***********************************************************************/
#include 	"cu_multi.h"
#include        "stdio.h"
#include        "itron.h"
#include        "CMNDEF.H"
#include        "bios1mac.h"



void   CR_Check( B *msg, short len );
void   obr_change(int);
int    getkey(void);
int    getkey2(int,int);
void   Dsp_str( B *,H ,H);
void   Dsp_str2( B *,H ,H);
void   Dsp_str3( B *,H ,H);
void   Dsp_str4( B *,H ,H);
void   alert(int);
char   get_ch(void);
void   FNC_Init( void );   /* 1996.11.12 casio */
void   FNC_Update( void );
void   Wait2(UW);
void   dateset(void );
void   IntPrint(int x,int y,B *format,int tp);
void   strsub (B *sdata,B *fint,B *fdecimal);
void   strtake(B *strsub, B *str, H sos, H len);
void   strcmb(B *str, B *strsub, H sos);
void   addspace(B *str,H Keylen);
void   zeroadd(B *str,H len, H KeyLen);
void   addfloat_str(B *str,B *str1,B *str2);
void   str_cut(B *str,B *substr,B *mode);
void   char_change(B *string,char charold,char charnew);
ER     Order_Search(ER fd,W start_adr,H fieldsize,H keypos,H keylen,B *code,B *sdata,W *fpos);

extern H COM;

/**************************************************************************
      ER ercd = dat_F_Search( B *filename , W start_adr , H fieldsize ,
                        H keypos , H keylen , UB *code , UB *sdata,
                        W *fpos );

****************************************************************************/



/******************************************************************************
**     Routine name: read_str                                                **
**     Detail      : 根据指定的模式读入字符串                                **
**     Parameter   : int x,int y:  读入字符的回显位置                        **    
**                   int mode   :  指定读入的模式aal of barocde type         **    
**                                 0: All; 1:scan only; 2:key only           **    
**                   UB *str    :  字符串用来存放读入的字符串                **
**                                 输入的时候可以放入缺省内容                **    
**                   int len    :  读取字符串的长度                          **    
**     Return value:  E_OK : OK;   E_KEY_CLR: clr       2:Error                         **
**     Last Date   :   1998/07/01                                            **
**     Author      : CLCE YangDongQing                                       **
******************************************************************************/
ER read_str(int y,int x,int mode,UB *str,int lenth)
{
	/*** OBR DATA BUFFER ************/
	UB     obr_data[48];
	
	KEY_INPS     key_str;
	KEY_INP	     key_chr;
	ER ret;
        W  Leng;
        UB Lcnt,Len;
        UW Code;
        H csr_x,csr_y,csr_type;
        int i;

        /*** BAR CODE STORE AREA INITIALIZE ***/
        for( i=0; i<48; i++ )
        {
                obr_data[i] = 0x00;
        }
	
	/*
	for(i=0;i<lenth;i++)
	{
		str[i]=0x31;
	}
	str[0]=0x0;
	*/
	
		
        /*** KEY INITIALIZE ROUTINE ***/
        key_str.ext = KEY_OBR_EXT | KEY_CLR_EXT | KEY_INT_EXT;
        key_str.echo = ECHO_ON;
        key_str.font_size = LCD_ANK_STANDARD;
        key_str.type = LCD_ATTR_NORMAL;
        key_str.len=lenth;  /* input lenth */
        key_str.column_pos = x;
        key_str.line_pos = y;
	key_str.column_len=0;
	
	key_chr.ext = KEY_OBR_EXT;
	key_chr.echo = ECHO_OFF;
	key_chr.font_size = LCD_ANK_LIGHT;
	key_chr.type = LCD_ATTR_NORMAL;
	key_chr.column_pos = x;
	key_chr.line_pos = y;

	lcd_csr_get(&csr_x,&csr_y,&csr_type);
	lcd_csr_set(LCD_CSR_UNDER);
	/*OBR_chgbuf(OBR_STOFF);*/
	OBR_chgbuf(OBR_BUFOBR);
	key_clear();
		
	switch(mode) /* 判断工作模式 */
	{
	case 0:   /* BOR and key */
		ret = OBR_open( 0x00000000 );	/* OBR OPEN	  */
		OBR_flush();
		ret = key_string(&key_str,str);
		if(ret==E_OK) 
		{
			break;
		}		
		if(ret==E_KEY_OBR)
		{
			ret = OBR_stat( &Leng, &Lcnt );
			ret = OBR_gets( &obr_data[0], &Code, &Len ); /*  读条码 */
			obr_data[Len]=0x00;
			CR_Check(obr_data,Len);
			for(i=0;i<lenth;i++)
			{
				if(obr_data[i]==0x00) break;
				str[i]=obr_data[i];
			};
			str[i]=0x00;
			ret=E_OK;
			break;
		}
		if(ret==E_KEY_CLR)
		{
			break;
		}
		ret=2;
		break;
	case 1:   /* OBR only  */
		ret = OBR_open( 0x00000000 );	/* OBR OPEN	  */
		OBR_flush();
		while(1)
		{
			ret=key_read(&key_chr);
			if(E_KEY_OBR==ret) break;
			if(0xc==ret) break;
		}
		if(ret==0xc) 
		{
			ret=E_KEY_CLR;
			break;
		}
		ret = OBR_stat( &Leng, &Lcnt );
		ret = OBR_gets( &obr_data[0], &Code, &Len ); /*  读条码 */
		obr_data[Len]=0x00;
		CR_Check(obr_data,Len);
		for(i=0;i<lenth;i++)
		{
			if(obr_data[i]==0x00) break;
			str[i]=obr_data[i];
		};
		str[i]=0x00;
		ret=E_OK;
		break;
	case 2:  /* key only */
	        key_str.ext = KEY_NON_EXT | KEY_CLR_EXT;
	        ret=key_string(&key_str,str);
		break;
	default:  /* error */
		ret=2;
		break;
	}
	
	addspace(str,lenth);
	lcd_csr_set(csr_type);
	OBR_chgbuf(OBR_BUFOBR);
	OBR_close();
	return ret;
}


/********************************************************************************
** 函数名 : read_str1()
** 功能   : 阅读条码,当mode==0或1时,按下<F5>(可根据情形另行设置)键后
**          的返回值是"E_KEY_INT",因此可用来实现"E_KEY_INT"类似的功能.
********************************************************************************/
int read_str1(int y,int x,int mode,UB *str,int lenth)
{
        /*** OBR DATA BUFFER ************/
        UB     obr_data[48];

        KEY_INPS     key_str;
        KEY_INP      key_chr;
        ER ret;
        W  Leng;
        UB Lcnt,Len;
        UW Code;
        H csr_x,csr_y,csr_type;
        int i;


   ER          err;
   UW          ptn;
   ID          fid;
   fid = FL_FK_INT_ID;
   ptn = FL_FK_INT_FNC8;
   err = key_fnc_mode(FNC_MODE_SET,FNC_8,&fid,&ptn);


        /*** BAR CODE STORE AREA INITIALIZE ***/
        for( i=0; i<48; i++ )
        {
                obr_data[i] = 0x00;
        }

        /*** KEY INITIALIZE ROUTINE ***/
        key_str.ext = KEY_OBR_EXT | KEY_CLR_EXT | KEY_INT_EXT; /*设置可识别返回值?*/
        key_str.echo = ECHO_ON;    /*回显,即输入时显示当前输入*/
        key_str.font_size = LCD_ANK_STANDARD;
        key_str.type = LCD_ATTR_NORMAL;
        key_str.len=lenth;  /* input lenth */
        key_str.column_pos = x;
        key_str.line_pos = y;
        key_str.column_len=0;

        key_chr.ext = KEY_OBR_EXT | KEY_INT_EXT;
        key_chr.echo = ECHO_OFF;
        key_chr.font_size = LCD_ANK_LIGHT;
        key_chr.type = LCD_ATTR_NORMAL;
        key_chr.column_pos = x;
        key_chr.line_pos = y;

        lcd_csr_get(&csr_x,&csr_y,&csr_type);
        lcd_csr_set(LCD_CSR_UNDER);
        /*OBR_chgbuf(OBR_STOFF);*/
        OBR_chgbuf(OBR_BUFOBR);
        key_clear();

        switch(mode) /* 判断工作模式 */
        {
        case 0:   /* BOR and key */
                ret = OBR_open( 0x00000000 );   /* OBR OPEN       */
                OBR_flush();
                ret = key_string(&key_str,str);
                if(ret==E_OK)
                {
                        ret=0;
                        break;
                }
                if(ret==E_KEY_OBR)
                {
                        ret = OBR_stat( &Leng, &Lcnt );
                        ret = OBR_gets( &obr_data[0], &Code, &Len ); /*  读条码 */
                        obr_data[Len]=0x00;
                        CR_Check(obr_data,Len);
                        for(i=0;i<lenth;i++)
                        {
                                if(obr_data[i]==0x00) break;
                                str[i]=obr_data[i];
                        };
                        str[i]=0x00;
                        ret=0;
                        break;
                }
                if(ret==E_KEY_CLR)
                {
                        break;
                }
                if(ret==E_KEY_INT) break;
                ret=2;
                break;
        case 1:   /* OBR only  */
                ret = OBR_open( 0x00000000 );   /* OBR OPEN       */
                OBR_flush();
                while(1)
                {
                        ret=key_read(&key_chr);
                        if(ret==E_KEY_INT)break;
                        if(E_KEY_OBR==ret) break;
                        if(0xc==ret) break;
                }
                if(ret==0xc)
                {
                        ret=E_KEY_CLR;
                        break;
                }
                
                if(ret==E_KEY_INT)
                {
                  ret=2;
                  break;	
                }
                else
                {
                	ret = OBR_stat( &Leng, &Lcnt );
                	ret = OBR_gets( &obr_data[0], &Code, &Len ); /*  读条码 */
                	obr_data[Len]=0x00;
                	CR_Check(obr_data,Len);
                	for(i=0;i<lenth;i++)
                	{
	                        if(obr_data[i]==0x00) break;
                        	str[i]=obr_data[i];
                	};
                	str[i]=0x00;
                	ret=0;
                	break;
                } 	
        case 2:  /* key only */
                key_str.ext = KEY_NON_EXT | KEY_CLR_EXT | KEY_INT_EXT;
                ret=key_string(&key_str,str);
                if(ret==E_KEY_INT) break;
                break;
        default:  /* error */
                ret=2;
                break;
        }

   fid = FL_FK_INT_ID;
   ptn = FL_FK_INT_FNC8;
   err = key_fnc_mode(FNC_MODE_CLR,FNC_8,&fid,&ptn);
        lcd_csr_set(csr_type);
        OBR_chgbuf(OBR_BUFOBR);
        OBR_close();
        return ret;
}

/******************************************************************************
**     Routine name: cputstr                                                 **
**     Detail      : display Chinese string                                  **
**     Parameter   :   int attrib :     Display attrib                       **    
**                     B *msg    :     Display message                      **   
**     Return value:   0 : OK                                                **
**     Last Date   :   1998/07/01                                            **
**     Author      : CLCE YangDongQing                                       **
******************************************************************************/
int cputstr(int attrib,unsigned char *string)
{
     	int i;
     	unsigned char strtemp[67],ss0,ss1;

	for(i=0;i<66;i+=2)
	{
		if(string[i]==0)
		{
			break;
		}
		else if(string[i+1]==0)
		{ 
			strtemp[i]=string[i];
			i++;
			break;
		};
		
		if(string[i]<0x80)
		{
			strtemp[i]=string[i];
			if(string[i+1]<0x80)
			{
				strtemp[i+1]=string[i+1];
				continue;
			}
			else
				i++;
		}
		
		if(string[i]==0xa3)
		{
			strtemp[i]=0xe8;
			strtemp[i+1]=string[i+1]-0xa1+0x40+95;
		}
		else
		{
			ss0=string[i]-0xb0;
			ss1=string[i+1]-0xa1+0x40;

			if (ss0<8)
			{
				strtemp[i]=(ss0/2)+0x81;
				if(ss0%2)
				{
					strtemp[i+1]=ss1+95;
				}
				else
				{
					if(ss1>0x7e)
						ss1++;
					strtemp[i+1]=ss1;
				}
				/* continue;*/

			}
			else if(ss0<0x37)
			{
				strtemp[i]=((ss0+1)/2)+0x84;
				if((ss0+1)%2)
				{
					strtemp[i+1]=ss1+95;
				}
				else
				{
					if(ss1>0x7e)
						ss1++;
					strtemp[i+1]=ss1;
				}
			}
			else
			{
				ss0=ss0-0x37;
				strtemp[i]=(ss0/2)+0xe0;
				if(ss0%2)
				{
					strtemp[i+1]=ss1+95;
				}
				else
				{
					if(ss1>0x7e)
						ss1++;
					strtemp[i+1]=ss1;
				}
			} /* else */
		} /* else if */

	}  /* end of for */

	strtemp[i]=0;

	lcd_usrfont(0,"B:\\font6sk.fon");
	lcd_string(LCD_ANK_STANDARD,attrib,(B*)strtemp,LCD_LF_ON);

	return(0);
}
 
/******************************************************************************
**     Routine name: obr_change                                              **
**     Detail      : set the barcode type                                    **
**     Parameter   : int incode :     the serial of barocde type             **    
**     Return value: 0 : OK                                                  **
**     Last Date   :   1998/07/01                                            **
**     Author      : CLCE YangDongQing                                       **
******************************************************************************/
void obr_change(int incode)
{
	/*** OBR USING MODE TABLE ***********************/
	M_TBL   obr_mode;

        /*** OBR_MODE ****/
        obr_mode.Code = OBR_ALL;
        obr_mode.Cd39[0] = 0xff;
        obr_mode.Cd39[1] = 2;
        obr_mode.Cd39[2] = 38;
        obr_mode.Cd39[3] = 1;
        obr_mode.Cd39[4] = 1;
        obr_mode.Cd39[5] = 1;
        obr_mode.Nw7[0] = 0xff;
        obr_mode.Nw7[1] = 2;
        obr_mode.Nw7[2] = 38;
        obr_mode.Nw7[3] = 0;
        obr_mode.Nw7[4] = 0;
        obr_mode.Nw7[5] = 0;
        obr_mode.Wpcea[0] = 0xff;
        obr_mode.Wpcea[1] = 10;
        obr_mode.Wpcea[2] = 18;
        obr_mode.Wpcea[3] = 0;
        obr_mode.Wpcea[4] = 1;
        obr_mode.Wpcea[5] = 1;
        obr_mode.Wpce[0] = 0xff;
        obr_mode.Wpce[1] = 8;
        obr_mode.Wpce[2] = 13;
        obr_mode.Wpce[3] = 0;
        obr_mode.Wpce[4] = 1;
        obr_mode.Wpce[5] = 1;
        obr_mode.Upcea[0] = 0xff;
        obr_mode.Upcea[1] = 9;
        obr_mode.Upcea[2] = 12;
        obr_mode.Upcea[3] = 0;
        obr_mode.Upcea[4] = 1;
        obr_mode.Upcea[5] = 1;
        obr_mode.Upce[0] = 0xff;
        obr_mode.Upce[1] = 7;
        obr_mode.Upce[2] = 7;
        obr_mode.Upce[3] = 1;
        obr_mode.Upce[4] = 1;
        obr_mode.Upce[5] = 1;
        obr_mode.Idsf[0] = 0xff;
        obr_mode.Idsf[1] = 2;
        obr_mode.Idsf[2] = 40;
        obr_mode.Idsf[3] = 0;
        obr_mode.Idsf[4] = 1;
/*        obr_mode.Idsf[5] = 1; */
        obr_mode.Idsf[5] = 0;
        

⌨️ 快捷键说明

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