📄 dt900lib.c
字号:
/***********************************************************************/
/* */
/* 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 + -