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

📄 poskb.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 3 页
字号:
//	{
//		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 + -