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

📄 fiscal.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
字号:
///////////////////////////////////////////////////////////////////////////////
// 									fiscal.c
//
// Copyright (c) 2004, WeiHua Technology Co., Ltd.
// All rights reserved.
//
// Created by:		Chen Huahai		2004-10-15
//
// Desription: NE-2 (Turkey) fiscal operation
///////////////////////////////////////////////////////////////////////////////
#include "ECRSYS.h"
#include "ftype.h"
#include "data.h"
#include "sysdata.h"

#if	SW_VER == SW_NE2
#define	FIRM_CODE_BASE			1
#define	FIRM_CODE_LEN			12
#define	FIRM_CODE_EMPTY		0xff

// only for debug
#define	TURKEY_CHAR_MAX		10
const byte m_TurkeyCharacterTable[TURKEY_CHAR_MAX] = {
	0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a
	};

///////////////////////////////////////////////////////////////////////////////
// Descript:	check fm exist and fm head & tail
// Return:		true / false
///////////////////////////////////////////////////////////////////////////////
bool CheckFmExist(void)
{
	if (Fm_Exist() == true)
	{
		if ((Fm_ReadByte(FM_HEAD_ADDR) == FM_HEAD_INFO) && 
			 (Fm_ReadByte(FM_TAIL_ADDR) == FM_TAIL_INFO))
		{
			return true;
		}
	}
	return false;
}

///////////////////////////////////////////////////////////////////////////////
// Descript:	check firm code whether not preset
// Return:		true / false
///////////////////////////////////////////////////////////////////////////////
bool CheckFirmCodeNotPreset(void)
{
	dword addr;

	for (addr = FIRM_CODE_BASE; addr < (FIRM_CODE_BASE + FIRM_CODE_LEN); addr++)
	{
		if (Fm_ReadByte(addr) != FIRM_CODE_EMPTY)
		{
			return false;
		}
	}
	return true;
}

///////////////////////////////////////////////////////////////////////////////
// Descript:	check the front of firm code(Turkey Characters) that user input
//					whether valid
// In para:		byte* userInput
// Return:		true / false
///////////////////////////////////////////////////////////////////////////////
bool CheckFrontOfFirmCodeValid(byte* userInput)
{
	byte turkeyChar1, turkeyChar2;
	byte i;
	
	if (numcnt == 4)
	{
		bool turkeyChar1Valid = false;
		bool turkeyChar2Valid = false;
		
		turkeyChar1 = (userInput[0] << 4) + userInput[1];
		turkeyChar2 = (userInput[2] << 4) + userInput[3];
		for (i=0; i<TURKEY_CHAR_MAX; i++)
		{
			if (m_TurkeyCharacterTable[i] == turkeyChar1)
			{
				turkeyChar1Valid = true;
			}
			if (m_TurkeyCharacterTable[i] == turkeyChar2)
			{
				turkeyChar2Valid = true;
			}
		}
		if ((turkeyChar1Valid == true) && (turkeyChar2Valid == true))
		{
			return true;
		}
	}
	return false;
}

///////////////////////////////////////////////////////////////////////////////
// Descript:	firm code (serial number) program
// 	[P] - [ABCD] - [PO] - [DDDDDDDD] - [SUBTTL] - [CHECK] - [SUBTTL/CASH]
//		ABCD:	the code for characters, use the Turkey character table.
///////////////////////////////////////////////////////////////////////////////
void FirmCodeProgram(void)
{
	byte firmCode[FIRM_CODE_LEN+1];
	
	if (CheckFmExist() != true)
	{
		errorType(ERR_FM_NOT_EXIST);
		return;
	}
	if (CheckFirmCodeNotPreset() != true)
	{
		errorType(ERR_FIRM_CODE_PRESET);
		return;
	}
	if (numcnt != 4)
	{
		errorType(ERR_INPUT_DIGIT);
		return;
	}
	if (CheckFrontOfFirmCodeValid(In_Buff) != true)
	{
		errorType(ERR_INVALID_TURKEY_CHAR);
		return;
	}
	firmCode[0] = (In_Buff[0] << 4) + In_Buff[1];
	firmCode[1] = (In_Buff[2] << 4) + In_Buff[3];
	firmCode[2] = ' ';
	firmCode[3] = ' ';

	// wait user input 8 digit and check it
	while (true)
	{
		if (GetIn() == NG)
		{
			continue;
		}
     	// check user whether quit
      if ((GetMainMode() != CurrMode) || (InCmd == KD_CASH))
      {
      	return;
      }
      switch (InCmd)
      {
      case KD_SUBTTL:
      	if ((numcnt == 8) && (lnum == 0))
      	{
      		errorType(ERR_FIRM_CODE_ZERO);
      	}
      	else if (numcnt == 8)
      	{
      		byte i;
      		for (i=0; i<8; i++)
      		{
      			firmCode[4+i] = In_Buff[i] + '0';
      		}
      		firmCode[FIRM_CODE_LEN] = '\0';

				// print it and wait user affirm
      		Prn_InsStr("FIS NO: ", 1, NM_FONT_PRN, FLUSH_LEFT);
      		Prn_InsStr(firmCode, MAX_PRN_LEN, NM_FONT_PRN, FLUSH_RIGHT);
      		Prn_Str(1);
      		Prn_InsStr("Are you Sure ?", MAX_PRN_LEN/2, NM_FONT_PRN, FLUSH_MID);
      		Prn_Str(1);
				prn_Stamp();
				
				while (Key_Poll_Chk() == FALSE);
				if (GetKey() == KD_CHECK)
				{
					// write to fm, print and display result.
					if (Fm_WriteStr(FIRM_CODE_BASE, firmCode, FIRM_CODE_LEN) == OK)
					{
		      		Prn_InsStr("FIS NO Setup Success!", 1, NM_FONT_PRN, FLUSH_LEFT);
		      		Prn_Str(1);
		      		Prn_InsStr("FIS NO: ", 1, NM_FONT_PRN, FLUSH_LEFT);
		      		Prn_InsStr(firmCode, MAX_PRN_LEN, NM_FONT_PRN, FLUSH_RIGHT);
		      		Prn_Str(1);
						prn_Stamp();
						Clr_Dsp_Data();
						disp_Char_Str("FIS NO OK!", 0);	// only for debug
						bellcnt = 0xfe;
						while (Key_Poll_Chk() == FALSE);
						GetKey();
					}
					else
					{
						errorType(ERR_FM_WRITE);
					}
				}
				return;
      	}
      	else
      	{
				errorType(ERR_INPUT_DIGIT);
      	}
      	break;
      default:
      	bellcnt = 100;
      	break;
     	}
	   Clr_Dsp_Data();
	   RightDisp(0L, 0);
	}
}

///////////////////////////////////////////////////////////////////////////////
// Descript:	preset fm head & tail
// Return:		true / false
///////////////////////////////////////////////////////////////////////////////
bool PresetFmHeadTail(void)
{
	if (Fm_Exist() == true)
	{
		if ((Fm_WriteByte(FM_HEAD_ADDR, FM_HEAD_INFO) == OK) && 
			 (Fm_WriteByte(FM_TAIL_ADDR, FM_TAIL_INFO) == OK))
		{
			if (CheckFmExist() == true)
			{
				return true;
			}
		}
	}
	return false;
}

///////////////////////////////////////////////////////////////////////////////
// Descript:	read firm code from fm
// Out Param:	byte* firmCode (FIRM_CODE_LEN)
// Return:		true / false
///////////////////////////////////////////////////////////////////////////////
bool ReadFirmCode(byte* firmCode)
{
	if (CheckFmExist() == true)
	{
		Fm_ReadStr(firmCode, FIRM_CODE_BASE, FIRM_CODE_LEN);
		return true;
	}
	return false;
}

///////////////////////////////////////////////////////////////////////////////
// Descript:	enter fiscal mode
///////////////////////////////////////////////////////////////////////////////
void FiscalStart(void)
{
	if (CheckFmExist() != true)
	{
		errorType(ERR_FM_NOT_EXIST);
		return;
	}
	if (CheckFirmCodeNotPreset() == true)
	{
		errorType(ERR_FIRM_CODE_NOT_PRESET);
		return;
	}
	// check whether fiscal mode now
	// check fm fiscal mode area whether blank
	// prompt and wait user assure
	// write fm fiscal mode area (need write "code info" ???)	// only for debug
	// prompt user fiscal start success
}
#endif

⌨️ 快捷键说明

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