📄 poskb.c
字号:
// {
// dPluLink[i] = i + 1;
// }
//}
//
/////////////////////////////////////////////////////////////////////////////////
//// Descript: check whether need print stamp,if need, call it.
//// In Param: void
//// Out Param: void
//// Return: void
/////////////////////////////////////////////////////////////////////////////////
//void Lib_ChkStampPrn(void)
//{
// if (Flag_Prgm_Head)
// {
// prn_Line('-');
// prn_Stamp();
// Flag_Prgm_Head = 0;
// }
//}
//
/////////////////////////////////////////////////////////////////////////////////
//// Descript: check whether need print head, if need, call it.
//// In Param: *str -- head info
//// Out Param: void
//// Return: void
/////////////////////////////////////////////////////////////////////////////////
//void Lib_ChkHeadPrn(const byte *str)
//{
// if (!Flag_Prgm_Head)
// {
// Flag_Prgm_Head = 1;
// memcpy(prn_Buf+1, str, MAX_PRN_LEN);
// prn_Buf[0] = DB_HEIGT_PRN;
// print();
// Line_Feed(1);
// }
//}
//
/////////////////////////////////////////////////////////////////////////////////
//// Descript: print defined No. Direct PLU information.
//// In Param: num
//// Out Param: void
//// Return: void
/////////////////////////////////////////////////////////////////////////////////
//void DPlu_Prn(word num)
//{
// word linkedPlu;
//
// Lib_ChkHeadPrn("----- Direct PLU Linked PLU ----");
//
// prn_Buf[1] = (num+1)/100%10 + '0';
// prn_Buf[2] = (num+1)/10%10 + '0';
// prn_Buf[3] = (num+1)/1%10 + '0';
//
// linkedPlu = dPluLink[num];
// prn_Buf[PRN_LEN-3] = linkedPlu / 1000 % 10 + '0';
// prn_Buf[PRN_LEN-2] = linkedPlu / 100 % 10 + '0';
// prn_Buf[PRN_LEN-1] = linkedPlu / 10 % 10 + '0';
// prn_Buf[PRN_LEN] = linkedPlu % 10 + '0';
// print();
//}
//
/////////////////////////////////////////////////////////////////////////////////
//// Descript: direct PLU linked PLU program.
//// In Param: num
//// Out Param: void
//// Return: void
/////////////////////////////////////////////////////////////////////////////////
//void Prg_DrPlu(word num)
//{
// // 显示当前DPLU号,及连接的PLU号.
// // 获取用户输入,
// // 若已输入新PLU号,则更新,并打印.
// // 若有其它DPLU键按下,则转到相应DPLU号上.
// // 小计键,则转入下一个DPLU号设置.
// // 现金键,退出.
// // CHECK,打印全部对应表.
// // 控制锁改变,退出.
//
// word linkedPlu;
// word i;
//
// if (num >= MAX_DPLU_CNT)
// {
// num = 0;
// }
// while (1)
// {
// if (num >= MAX_DPLU_CNT)
// {
// num = MAX_DPLU_CNT - 1;
// }
// Clr_Dsp_Data();
// Insert_Num((num+1) / 100 % 10, 0);
// Insert_Num((num+1) / 10 % 10, 1);
// Insert_Num((num+1) % 10, 2);
// linkedPlu = dPluLink[num];
// Insert_Num(linkedPlu / 1000 % 10, 6);
// Insert_Num(linkedPlu / 100 % 10, 7);
// Insert_Num(linkedPlu / 10 % 10, 8);
// Insert_Num(linkedPlu % 10, 9);
// if (GetIn() == NG)
// {
// continue;
// }
// GetMainMode();
// if (MainMode != CurrMode)
// {
// Lib_ChkStampPrn();
// return;
// }
//
// switch (InCmd)
// {
// case KD_CLEAR:
// break;
//
// case KD_SUBTTL:
// if (numcnt)
// {
// if ((lnum != 0) && (lnum <= MAX_PLU_CNT) && (lnum != linkedPlu))
// {
// dPluLink[num] = lnum;
// DPlu_Prn(num);
// }
// else
// {
// continue; // 没有输入合法的新数据.
// }
// }
// num++;
// break;
//
// case KD_CASH:
// Lib_ChkStampPrn();
// return;
//
// case KD_CHECK:
// for (i=0; i<MAX_DPLU_CNT; i++)
// {
// DPlu_Prn(i);
// if (Key_Buff_Chk(KD_CLEAR) == OK)
// {
// memcpy(prn_Buf+1, " Print Interrupt! ", MAX_PRN_LEN);
// print();
// break;
// }
// }
// Lib_ChkStampPrn();
// return;
//
// default:
// if ((InCmd >= KD_DPLU001) && (InCmd <= KD_DPLU120))
// {
// num = InCmd - KD_DPLU001;
// }
// break;
// }
// }
//}
static const word *Bak_Ts_Key_Tab1; /* The current key table */
static const byte *Bak_Ts_Key_Table_Size1;
const word DPLU_Pop_Key_Tabl[MAX_LAYOUT_KEY] =
{
KD_DPLU001, KD_DPLU002, KD_DPLU003, KD_DPLU004, KD_DPLU005, KD_DPLU006,
KD_DPLU007, KD_DPLU008, KD_DPLU009, KD_DPLU010, KD_DPLU011, KD_DPLU012,
KD_DPLU013, KD_DPLU014, KD_DPLU015, KD_DPLU016, KD_DPLU017, KD_DPLU018,
KD_DPLU019, KD_DPLU020, KD_DPLU021, KD_DPLU022, KD_DPLU023, KD_DPLU024,
#if LCD_LAYOUT_VRT_LINE == 13
KD_DPLU007, KD_DPLU008, KD_DPLU009, KD_DPLU010, KD_DPLU011, KD_DPLU012,
KD_DPLU013, KD_DPLU014, KD_DPLU015, KD_DPLU016, KD_DPLU017, KD_DPLU018,
KD_DPLU019, KD_DPLU020, KD_DPLU021, KD_DPLU022, KD_DPLU023, KD_DPLU024,
#endif
KD_DPLU025, KD_DPLU026, KD_DPLU027, KD_DPLU028, KD_DPLUSF, KD_NUM_INPUT,
KD_DPLU029, KD_DPLU030, KD_DPLU031, KD_DPLU032, KD_DPLUSF, KD_NUM_INPUT,
KD_DPLU033, KD_DPLU034, KD_DPLU035, KD_DPLU036, KD_VOID, KD_VOID,
KD_DPLU037, KD_DPLU038, KD_DPLU039, KD_DPLU040, KD_VOID, KD_VOID,
KD_DPLU041, KD_DPLU042, KD_DPLU043, KD_DPLU044, KD_CANCEL, KD_CANCEL,
KD_DPLU045, KD_DPLU046, KD_DPLU047, KD_DPLU048, KD_CANCEL, KD_CANCEL,
};
const byte DPLU_Pop_Key_Tabl_Size[MAX_LAYOUT_KEY] =
{
0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
#if LCD_LAYOUT_VRT_LINE == 13
0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
#endif
0x11, 0x11, 0x11, 0x11, 0x21, 0x21,
0x11, 0x11, 0x11, 0x11, 0x01, 0x01,
0x11, 0x11, 0x11, 0x11, 0x22, 0x10,
0x11, 0x11, 0x11, 0x11, 0x01, 0x00,
0x11, 0x11, 0x11, 0x11, 0x22, 0x10,
0x11, 0x11, 0x11, 0x11, 0x01, 0x00
};
const char Str_Empty_PLU_List[][MAX_TEXT+1] = {
{"Empty PLU List"},
{"Please Set useful PLU first"},
};
/*----------------------------------------------------------------------------*
更新PLU 清单
Idx ------ 当前选中的PLU
Idx_Tbl -- 当前显示屏内的可选PLU的Idx.
mode ----- 0: 向下更新。 1: 向上更新。 2: 跳跃更新
*----------------------------------------------------------------------------*/
int Srch_Next_Used_PLU(int Idx)
{
while((Idx < Max_Plu_No)&&(PLU_Used_Tbl[Idx/8] == 0))
Idx += 8;
while((Idx < Max_Plu_No)&&(!Chk_Idle_PLU(Idx)))
Idx++;
return Idx;
}
/*----------------------------------------------------------------------------*
* 为了避免负数的判断计算,此处对PLU进行了一次增值和一次还原的计算。
*
*
**
*----------------------------------------------------------------------------*/
int Srch_Pre_Used_PLU(int Idx)
{
Idx++;
while((Idx > 0)&&(PLU_Used_Tbl[(Idx-1)/8] == 0))
Idx -= 8;
while((Idx > 0)&&(!Chk_Idle_PLU(Idx-1)))
Idx--;
if(Idx == 0) Idx = Max_Plu_No;
else Idx--;
return Idx;
}
/*----------------------------------------------------------------------------*
*
* mode: 0 --
*
********
*----------------------------------------------------------------------------*/
void Get_Full_PLU_List(int *Idx, int *Idx_Tbl, byte mode)
{
int start_PLU;
byte i;
byte len;
byte CurrLine;
if((mode == 0)||(mode == 2))
{
if((mode == 0)&&(*Idx >= Srch_Pre_Used_PLU(Max_Plu_No-1)))//如果传入的参数<= 第一个有效PLU 的序号, 从最后一个PLU 倒序查找。
*Idx = 0;
memset((byte *)Idx_Tbl,0, DISP_LCD_TEXT_LINE*(sizeof(int)));
start_PLU = *Idx;
for(i = 0; i < DISP_LCD_TEXT_LINE; i++)
{
start_PLU = Srch_Next_Used_PLU(start_PLU);
if(start_PLU >= Max_Plu_No)
break;//说明再没有剩余的有效的PLU
Idx_Tbl[i] = ++start_PLU;
}
CurrLine = 0;
}
else
{
if(*Idx <= Srch_Next_Used_PLU(0))//如果传入的参数<= 第一个有效PLU 的序号, 从最后一个PLU 倒序查找。
*Idx = Max_Plu_No -1;
start_PLU = *Idx;
memset((byte *)Idx_Tbl,0, DISP_LCD_TEXT_LINE*(sizeof(int)));
for(i = DISP_LCD_TEXT_LINE; i > 0; i--)
{
start_PLU = Srch_Pre_Used_PLU(start_PLU);
if(start_PLU >= Max_Plu_No)
break;
Idx_Tbl[i-1] = start_PLU + 1;
if(start_PLU >0)start_PLU--;
else {i--; break;}
}
CurrLine = DISP_LCD_TEXT_LINE - i-1;
if(i > 0)
{
memmove((byte *)Idx_Tbl, (byte *)&Idx_Tbl[i], (DISP_LCD_TEXT_LINE-i)*sizeof(int));
memset((byte *)&Idx_Tbl[(DISP_LCD_TEXT_LINE-i)], 0, i*sizeof(int));
if(*Idx < Max_Plu_No-1)
{
start_PLU = *Idx + 1;
for( i = DISP_LCD_TEXT_LINE-i; i< DISP_LCD_TEXT_LINE; i++)
{
start_PLU = Srch_Next_Used_PLU(start_PLU);
if(start_PLU > Max_Plu_No) break;
Idx_Tbl[i] = ++start_PLU;
}
}
}
}
*Idx = Idx_Tbl[CurrLine]-1;
for (i = 0; i < DISP_LCD_TEXT_LINE; i++)
{
memset(Text_Lcd.text[i], 0x20, MAX_TEXT);
if(Idx_Tbl[i] > 0)
{
len = strlen(Str_PLU_Desc);
memcpy(Text_Lcd.text[i], Str_PLU_Desc, len);
Text_Lcd.text[i][len++] = '#';
Get_Bar_Char( Text_Lcd.text[i]+len, plu[Idx_Tbl[i]-1].barcode);
memcpy(Text_Lcd.text[i]+ (MAX_TEXT-MAX_DESC_LEN_EX-1), plu[Idx_Tbl[i]-1].desc, MAX_DESC_LEN_EX);
}
}
for(i = 0; i < DISP_LCD_TEXT_LINE; i++)
{
if(i == CurrLine)
{
Lcd_Text_Line_Disp(i, TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -