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

📄 prog_plu.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 2 页
字号:
        if(prg_step == PLU_START_STEP)
            Text_Lcd.FirstLine = MAX_PLU_STEP;
    }
    step++;
    Text_Lcd.CurrLine = prg_step;
    
    // 2:disp play the Name       
    if((mode == 0xff)||(mode == PLU_DESC_STEP))
    {
        memset(Text_Lcd.text[step]+LCD_POSI_NOR2, 0x20, MAX_TEXT-LCD_POSI_NOR2);
        memcpy(Text_Lcd.text[step]+LCD_POSI_NOR2, plu[prg_idx].desc, MAX_DESC_LEN_EX);
    }
    step++;
        
    // 3:display the price1  
    if((mode == 0xff)||(mode == PLU_PRICE_STEP))
    {
        memset(Text_Lcd.text[step]+LCD_POSI_NOR2, 0x20, MAX_TEXT-LCD_POSI_NOR2);
        LnumToTextBuff(Text_Lcd.text[step]+LCD_POSI_NOR2, plu[prg_idx].price, sysflag->sysdots);
    }
    step++;

    // 4:diaplay the pric2
    if((mode == 0xff)||(mode == PLU_PRICE_STEP2))
    {
        memset(Text_Lcd.text[step]+LCD_POSI_NOR2, 0x20, MAX_TEXT-LCD_POSI_NOR2);
        LnumToTextBuff(Text_Lcd.text[step]+LCD_POSI_NOR2, plu[prg_idx].price2, sysflag->sysdots);
    }
    step++;
    
    // 5:displar the pric3
    if((mode == 0xff)||(mode == PLU_PRICE_STEP3))
    {
        memset(Text_Lcd.text[step]+LCD_POSI_NOR2, 0x20, MAX_TEXT-LCD_POSI_NOR2);
        LnumToTextBuff(Text_Lcd.text[step]+LCD_POSI_NOR2, plu[prg_idx].price3, sysflag->sysdots);
    }
    step++;
        
    // 6:Display the link department.
    if((mode == 0xff)||(mode == PLU_PLINK_STEP))
    {
        memset(Text_Lcd.text[step]+LCD_POSI_NOR2, 0x20, MAX_TEXT-LCD_POSI_NOR2);
    	plink = plu[prg_idx].plink;
        DectoAsc(Text_Lcd.text[step]+LCD_POSI_NOR2, plink);
        Text_Lcd.text[step][LCD_POSI_NOR2+2] = '-';
        memcpy(Text_Lcd.text[step]+LCD_POSI_NOR2+3, dept[plink-1].desc, MAX_DESC_LEN_EX);
    }
    step++;
    
    #ifdef PLU_GROUP_FUNC
    // 7: display the plu group 
    if((mode == 0xff)||(mode == PLU_GROUP_STEP))
    {
        memset(Text_Lcd.text[step]+LCD_POSI_NOR2, 0x20, MAX_TEXT-LCD_POSI_NOR2);
        DectoAsc(Text_Lcd.text[step]+LCD_POSI_NOR2, plu[prg_idx].group);
    }

    step++;
    #endif

    #ifdef REST_PLU_FUNC
    // 8:display the plu attribute:  Norrmal  / Gift / descriptive 
    if((mode == 0xff)||(mode == PLU_KIND_STEP))
    {
        memset(Text_Lcd.text[step]+LCD_POSI_NOR2, 0x20, MAX_TEXT-LCD_POSI_NOR2);
        xtr_strcpy(Text_Lcd.text[step]+LCD_POSI_NOR2, Str_Plu_TYPE[plu[prg_idx].attr.mode]);
    }
    step++;

    //9: display the Actice / Not Active    
    if((mode == 0xff)||(mode == PLU_STATE_STEP))
    {
        memset(Text_Lcd.text[step]+LCD_POSI_NOR2, 0x20, MAX_TEXT-LCD_POSI_NOR2);
        if(plu[prg_idx].attr.inht == 1)
            xtr_strcpy(Text_Lcd.text[step]+LCD_POSI_NOR2, Str_Plu_Atv_Yes);
        else
            xtr_strcpy(Text_Lcd.text[step]+LCD_POSI_NOR2, Str_Plu_Atv_No);
    }
    step++;
    #endif

    #ifdef STOCK
    if(sysflag->PLU_Stock_Flag)
    {
        // 10;display the stock qty.
        if((mode == 0xff)||(mode == PLU_STOCK_STEP))
        {
            memset(Text_Lcd.text[step]+LCD_POSI_NOR3, 0x20, MAX_TEXT-LCD_POSI_NOR3);
            Qty_Adjust(plu[prg_idx].inventory);
            LnumToTextBuff(Text_Lcd.text[step]+LCD_POSI_NOR3, adj_num, adj_dots);
        }
        step++;
        
        //11:display the saftly qty
        if((mode == 0xff)||(mode == PLU_SAFT_STOCK))
        {
            memset(Text_Lcd.text[step]+LCD_POSI_NOR3, 0x20, MAX_TEXT-LCD_POSI_NOR3);
            Qty_Adjust(plu[prg_idx].saft_Stock);
            LnumToTextBuff(Text_Lcd.text[step]+LCD_POSI_NOR3, adj_num, adj_dots);
        }
        step++;
    }
  #endif
    if(mode == 0xff)
        Lcd_Reflush_List(0);
    else
        Lcd_Reflush_List(1);

    // 在下面的一个框显示所需要的内容
    if(prg_step > PLU_SCAN_STEP)
    {
        Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[0]);
        Lcd_Disp_Str_Btn(BUF_ID_TL_INPUT, Str_Plu_Prgram[prg_step+1]);
    }

    Last_Prg_Idx = prg_idx;
    Last_Prg_Step = prg_step;

}

/*****************************************************************/
/*-----------------------------------------------------------------*
*              Update the PLU attribute.
*-----------------------------------------------------------------*/
byte Pasc2bin(word prg_idx, byte prg_step)
{
   #ifdef SCANNER 		/* Support the scanner function */
   byte tmp_bar[BAR_BUFF_LEN];
   int old_posi;		/* The PLUs old bar code */
   int new_posi;		/* The PLUs new bar code */
   #endif /* End SCANNER */
   byte i;
   #ifdef	REST_PLU_FUNC
   byte j;
   byte m,n;
   #endif
   #ifdef STOCK
   long tmp_stock = 0;
   #endif
   const char *Str_ptr[3];
   byte len;
   byte Rslt;


   switch(prg_step)
   {
		case PLU_DESC_STEP:                       /* Program the PLUs description */
            Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[1]);
            if(Get_Desc(plu[prg_idx].desc,MAX_DESC_LEN_EX,NO) != OK)
                return NG;
            last_modi_flag = 1;
            modi_flag = 1;
            return OK;

        case PLU_PRICE_STEP:
        case PLU_PRICE_STEP2:
		case PLU_PRICE_STEP3:                       /* Program the PLUs price */
            Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[2]);
            if(Get_Num_Input()!= OK)
                return NG;
            if( lnum > MAX_PLU_PRICE )           /* The max price length is 6 */
            {
                errorType(ERR_DIGIT_ILLEGAL);
                return NG;
            }
            if(prg_step == PLU_PRICE_STEP)
                plu[prg_idx].price = lnum;
            else if(prg_step == PLU_PRICE_STEP2)
                plu[prg_idx].price2 = lnum;
            else //if(prg_step == PLU_PRICE_STEP3)
                plu[prg_idx].price3 = lnum;
            last_modi_flag = 1;
            modi_flag = 1;
            return OK;
            break;
			
      case PLU_PLINK_STEP:
            #ifdef VER_RSNT            /* Support the restaurant function */
            if(Rsnt_ChkSale() == NOTOK)
            {
                errorType(ERR_SALE_NO_END);
                return (NG);
            }
            #endif /* End VER_RSNT */
            Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[2]);
            if(Get_Num_Input() != OK)
                return NG;
            if((lnum > Max_Dept_No) || (lnum == 0))
                {errorType(ERR_DIGIT_ILLEGAL);return NG;}
            plu[prg_idx].plink = lnum;
            last_modi_flag = 1;
            modi_flag = 1;
            return OK;
            
		#ifdef STOCK			/* Support the stock function */
	    case PLU_STOCK_STEP:								/* Program the PLUs inventory */
        case PLU_SAFT_STOCK:
            if(sysflag->PLU_Stock_Flag == 0)
                return OK;
            Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[2]);
            Prog_en_dec_input_flag = 1;
            if(Get_Num_Input() != OK)
            {
                Prog_en_dec_input_flag = 0;
                return NG;
            }
            Prog_en_dec_input_flag = 0;

            if(dec_flag == 0)
            {
                if(lnum > (MAX_STOCK_CNT/1000))
                    {errorType(ERR_DIGIT_OVER);return NG; }
                lnum *= 1000;
            }
            else
            {
                if(lnum > (MAX_STOCK_CNT/getLong(3-dec_cnt)))
                    {errorType(ERR_DIGIT_OVER);return NG; }
                lnum *= getLong(3-dec_cnt);
            }
            if(lnum > MAX_STOCK_CNT)
                {errorType(ERR_DIGIT_OVER);return NG; }
                
            if(prg_step == PLU_SAFT_STOCK)

            {
                plu[prg_idx].saft_Stock = lnum;
                last_modi_flag = 1;
                modi_flag = 1;
                return OK;
            }
            //PLU_Stock_Step
            tmp_stock = lnum;//保存准备输入的库存数据
            if(Get_Btn_Choice_Input((char**)Str_Plu_Stock_Update_Sel, 0x22, 3) != OK)
                return NG;
            if(lnum == 0)//over write
                plu[prg_idx].inventory = tmp_stock;
            else if(lnum == 1)
            {
                if(tmp_stock + plu[prg_idx].inventory > MAX_STOCK_CNT)
                    {errorType(ERR_DIGIT_OVER);return NG;}
                plu[prg_idx].inventory += tmp_stock;
            }
            else if(lnum == 2)
            {
                if(tmp_stock - plu[prg_idx].inventory > MAX_STOCK_CNT)
                    {errorType(ERR_DIGIT_OVER);return NG;}
                plu[prg_idx].inventory -= tmp_stock;
            }
            
            last_modi_flag = 1;
            modi_flag = 1;
            return OK;
	 #endif

     #ifdef	REST_PLU_FUNC
    	case PLU_STATE_STEP:
            Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[3]);
            Str_ptr[0] = Str_Plu_Atv_Yes;
            Str_ptr[1] = Str_Plu_Atv_No;
            if(Get_Btn_Choice_Input_Ex(Str_ptr, 0x22, 2, &Rslt) != OK)
                return NG;
            plu[prg_idx].attr.inht = (Rslt)? 0 : 1;
            last_modi_flag = 1;
            modi_flag = 1;
            return OK;

		case PLU_KIND_STEP:
			//if(In_Buff[0]!= plu[prg_idx].attr.mode )
			{ 
				if((plu[prg_idx].quantity != 0) || (plu[prg_idx].amount != 0)
					#ifdef	PLU_PTD_RPT
					|| (plu[prg_idx].PTD_quantity != 0) || (plu[prg_idx].PTD_amount != 0)
					#endif
					)
				{
					errorType(ERR_RPT_NOT_EMPTY);
					return(NG);
				}
			}
            Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[3]);
            Str_ptr[0] = Str_Plu_TYPE[0];
            Str_ptr[1] = Str_Plu_TYPE[1];
            if(Get_Btn_Choice_Input(Str_ptr, 0x11, 2) == OK)
            {
                if(!numcnt)
                    return OK;
                if(lnum >1)
                    return NG;
                plu[prg_idx].attr.mode = lnum;
                last_modi_flag = 1;
                modi_flag = 1;
                if((plu[prg_idx].attr.mode==PLU_DESC)||(plu[prg_idx].attr.mode==PLU_GIFT))/*turn to desc or gift attr*/
                {
                   for(j=0;j<MAX_PLUTAB_NO;j++)          /*del main plu*/
                   {
                       if(plu_relation_tab[j].mainplu==prg_idx+1)
                       {                                   
                           Del_Main_Slave_PLU(j);
                       }
                   }
                   for(i=0;i<MAX_DPLU_NO;i++)           /*del dplu*/
                   {
                       if(Dplu_Pluno[i]==prg_idx+1)
                       {
                           Dplu_Pluno[i]=0;
                       }
                   }
                   for(m=0;m<MAX_MENU_KEY_CNTR;m++)/*del menu plu*/
                   {
                       for(n=0;n<MAX_MEAL_ITEM;n++)
                       {
                           if(Menu_Table[m].menu_plu[n]==prg_idx+1)
                           {                       
                               Menu_Curr_Delete(m,n);
                           }
                                   
                       }
                   }               
               }
               if(plu[prg_idx].attr.mode==PLU_NORMAL)/*turn to normal*/ 
               {
                   for(j=0;j<MAX_PLUTAB_NO;j++)
                   {
                       if(plu_relation_tab[j].slaveplu==prg_idx+1)
                       {
                           Del_Main_Slave_PLU(j);
                       }
                   }
               }            
                return OK;
            }
    	   	return (NG);
        #endif

     #ifdef PLU_GROUP_FUNC
        case PLU_GROUP_STEP:
            Lcd_Disp_Str_Btn(BUF_ID_TL_SUB, Str_Modify_Step[2]);
            if(Get_Num_Input() != OK)
                return NG;
            if(!numcnt)
                return OK;
            if(lnum < 1 || lnum > PLU_GROUP_NUM)
            {
                errorType(ERR_DIGIT_ILLEGAL);
                continue;
            }
            plu[prg_idx].group = lnum;
            last_modi_flag = 1;
            modi_flag = 1;
            return OK;
      #endif
        case PLU_NEXT_ITEM:
            return OK;
   }
   return (OK);
}

word Srch_Idle_PLU(void)
{
    word i, j = 0xffff;
    for(i = 0; i < MAX_PLU_USED_TBL_CNT; i++)
    {
        if(PLU_Used_Tbl[i] != 0xff)
        {
            for(j =0; j< 8; j++)
            {
                if(((PLU_Used_Tbl[i]>>j)&0x01) == 0)
                    {j += i*8; break;}
            }
            break;
        }
    }
    return j;
    
}

/*----------------------------------------------------------------------------*
*   注意Idx 必须是有效的, 此处没有作保护判断。
*   return: 1 --- This PLU has been in use.
*           0 --- This PLU is Idle PLU
*----------------------------------------------------------------------------*/
BOOL Chk_Idle_PLU(word Idx)
{
    word i;
    byte j;

    i = Idx/8;
    j = (byte)Idx&0x07;

    return ((PLU_Used_Tbl[i]>>j)&0x01);
}

void Set_PLU_Used(word Idx)
{
    word i;
    byte j;

    i = Idx/8;
    j = (byte)Idx&0x07;

    PLU_Used_Tbl[i] |= (1<<j);
}

void Set_PLU_Idle(word Idx)
{
    word i;
    byte j;

    i = Idx/8;
    j = (byte)Idx&0x07;

    PLU_Used_Tbl[i] &= ~(1<<j);
}

⌨️ 快捷键说明

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