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

📄 simuxmleep.c

📁 开发源代码的CPU卡的COS源程序。
💻 C
字号:
/* ============================================================================   Project Name : jayaCard   Module Name  : proto/hal/simu/simuXMLeep.c   Version : $Id: simuXMLeep.c,v 1.17 2004/01/11 09:56:31 dgil Exp $	Description: Export EEPROM content to XML file.    The Original Code is jayaCard code.    The Initial Developer of the Original Code is Gilles Dumortier.	Portions created by the Initial Developer are Copyright (C) 2002-2004 the    Initial Developer. All Rights Reserved.    Contributor(s):    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; see http://www.gnu.org/licenses/gpl.html   History Rev	Description   072803 dgil	Wrote it from experimental eeprom_xml/eeprom_xml.c   ============================================================================*/#include "precomp.h"/* ============================================================================	Output XML / the context   ========================================================================= */typedef struct tagOutputXMLContext {	FILE*	f;	jbyte	space;	jword	curadr;} OUTPUTXMLCONTEXT,*POUTPUTXMLCONTEXT;void jlog_context( POUTPUTXMLCONTEXT context, char * func_name ) {	jlog("simuXML", "%s - Context adr=%04Xh  space=%d",			func_name,			context->curadr,			context->space			);}/* ============================================================================    Load a file header for dump !   ========================================================================= */BIOS_STREAM streamDump;HEADER_FILE dumpFile;jbool __load_file_header(jword link){    LOG1("simuXML","__load_file_header(): addr=0x%.4X",link);    HAL_CRC_INIT();    BIOS_INIT_STREAM(&streamDump,READ_STREAM|CHKCRC_STREAM|SECURE_STREAM,link,SIZE_HEADER_FILE);    if (BIOS_READ_STREAM((jbyte xdata*)&dumpFile,&streamDump,SIZE_HEADER_FILE)!=JSEC_OK) {        return jfalse;    }    return jtrue;}/* ============================================================================	Endianess   ========================================================================= */#if defined(PLATFORM_LITTLE_ENDIAN)#define blk(w)	(w = ((jword)((((jword)LOBYTE(w))<<8) + ((jword)HIBYTE(w)))))#else#define blk(w)	w#endif/* ============================================================================	Forward decls   ========================================================================= */void xml_output_file(POUTPUTXMLCONTEXT context);void xml_output_DF(POUTPUTXMLCONTEXT context);void xml_output_EF(POUTPUTXMLCONTEXT context);/* ============================================================================	XML output area   ========================================================================= */void xml_output_area(POUTPUTXMLCONTEXT context,jword adr,jword size){	jbyte	n;	jlog("simuXML", "xml_output_area - adr=%04Xh size=%04Xh (%d)", adr, size, size );	jlog_context( context, "xml_output_area" );	for (n=0;n<context->space+2;n++) { fprintf(context->f," "); }	while (size>0) {		fprintf(context->f,"%.2X ",HAL_EEPROM_READ_BYTE(adr));		adr++;		size--;	}}#ifdef JAYA_FILESYSTEM/* ============================================================================	XML output record   ========================================================================= */void xml_output_record(POUTPUTXMLCONTEXT context,jword adr,jword size){	jbyte	n;	jlog("simuXML", "xml_output_record - adr=%04Xh size=%04Xh (%d)", adr, size, size );	jlog_context( context, "xml_output_record" );	for (n=0;n<context->space+1;n++) { fprintf(context->f," "); }	fprintf(context->f,"<record adr=\"%.4X\" size=\"%.4X\" >\n",adr,size);	xml_output_area(context,adr,size);	fprintf(context->f,"\n");	for (n=0;n<context->space+1;n++) { fprintf(context->f," "); }	fprintf(context->f,"</record>\n");}/* ============================================================================	XML output records   ========================================================================= */void xml_output_records(POUTPUTXMLCONTEXT context,jbyte nummax,jbyte size){	jbyte	n;	jlog("simuXML", "xml_output_records - nummax=%d size=%02Xh (%d)",						nummax , size, size );	jlog_context( context, "xml_output_records" );	n = 0;	while (n<nummax) {		xml_output_record(context,context->curadr+(n*size),size);		n++;	}}/* ============================================================================	XML output binary   ========================================================================= */void xml_output_binary(POUTPUTXMLCONTEXT context,jword adr,jword size){	jbyte	n;	jlog("simuXML", "xml_output_binary - adr=%04Xh size=%04Xh (%d)",						adr , size, size );	jlog_context( context, "xml_output_binary" );	for (n=0;n<context->space+1;n++) { fprintf(context->f," "); }	fprintf(context->f,"<binary adr=\"%.4X\" size=\"%.4X\" >\n",adr,size);	xml_output_area(context,adr,size);	fprintf(context->f,"\n");	for (n=0;n<context->space+1;n++) { fprintf(context->f," "); }	fprintf(context->f,"</binary>\n");}/* ============================================================================	XML output a link   ========================================================================= */void xml_output_link(POUTPUTXMLCONTEXT context,jword link,jbool sibling){	POUTPUTXMLCONTEXT	newcontext;	jlog("simuXML", "xml_output_link - link=%04Xh sibling=%d",						link, sibling );	jlog_context( context, "xml_output_link" );	/* embedded file */	newcontext = (POUTPUTXMLCONTEXT)malloc(sizeof(OUTPUTXMLCONTEXT));	if (newcontext==NULL) return;	newcontext->curadr = link;	newcontext->f = context->f;	newcontext->space = context->space+(sibling?0:1);	xml_output_file(newcontext);	free((void*)newcontext);}/* ============================================================================	XML output tag MF   ========================================================================= */void xml_output_MF(POUTPUTXMLCONTEXT context){	jword	first_file;	jword	default_df;	jlog_context( context, "xml_output_MF" );    first_file = HAL_EEPROM_READ_WORD(context->curadr+14); blk(first_file);    default_df = HAL_EEPROM_READ_WORD(context->curadr+10); blk(default_df);    fprintf(context->f,"first_file=\"%.4X\" default_df=\"%.4X\" ",first_file,default_df);	fprintf(context->f,">\n");	if (first_file!=0x0000) xml_output_link(context,first_file,jfalse);}/* ============================================================================	XML output tag DF   ========================================================================= */void xml_output_DF(POUTPUTXMLCONTEXT context){	jword	first_file;	jword	next_file;	jlog_context( context, "xml_output_DF" );    first_file = HAL_EEPROM_READ_WORD(context->curadr+14); blk(first_file);    next_file = HAL_EEPROM_READ_WORD(context->curadr+10); blk(next_file);    fprintf(context->f,"first_file=\"%.4X\" next_file=\"%.4X\" ",first_file,next_file);	fprintf(context->f,">\n");	if (first_file!=0x0000) xml_output_link(context,first_file,jfalse);}/* ============================================================================	XML output tag binary EF   ========================================================================= */void xml_output_binary_EF(POUTPUTXMLCONTEXT context){	jword	body_ef;	jword	filesize;	jword	next_file;	jword	adr;	jlog_context( context, "xml_output_binary_EF" );    next_file = HAL_EEPROM_READ_WORD(context->curadr+10); blk(next_file);    body_ef = HAL_EEPROM_READ_WORD(context->curadr+12); blk(body_ef);    filesize = HAL_EEPROM_READ_WORD(context->curadr+14); blk(filesize);	fprintf(context->f,"body_ef=\"%.4X\" filesize=\"%.4X\" next_file=\"%.4X\" >\n",body_ef,filesize,next_file);	adr = body_ef;	while (filesize>0) {		xml_output_binary(context,adr,MIN(filesize,16));		adr = adr + MIN(filesize,16);		filesize = filesize - MIN(filesize,16);	}}/* ============================================================================	XML output tag record EF   ========================================================================= */void xml_output_record_EF(POUTPUTXMLCONTEXT context){	jbyte	nummax;	jbyte	size;	jbyte	num;	jbyte	top;	jword	body_ef;	jword	next_file;	jlog_context( context, "xml_output_record_EF" );    next_file = HAL_EEPROM_READ_WORD(context->curadr+10); blk(next_file);    body_ef = HAL_EEPROM_READ_WORD(context->curadr+12); blk(body_ef);    nummax = HAL_EEPROM_READ_BYTE(context->curadr+14);    size = HAL_EEPROM_READ_BYTE(context->curadr+15);    num = HAL_EEPROM_READ_BYTE(context->curadr+16);    top = HAL_EEPROM_READ_BYTE(context->curadr+17);	fprintf(context->f,"body_ef=\"%.4X\" nummax=\"%.2X\" size=\"%.2X\" num=\"%.2X\" top=\"%.2X\" next_file=\"%.4X\" >\n",body_ef,nummax,size,num,top,next_file);	xml_output_records(context,nummax,size);}/* ============================================================================	XML output file   ========================================================================= */void xml_output_file(POUTPUTXMLCONTEXT context){	jword	fid;	jbyte	fdesc;	jbyte	sfi;	jword	acs1;	jbyte	acs2;    jword   key1;    jbyte   key2;	jword	crc;	jbyte	n;	char	end[80];	jword	next_file = 0x0000;	jlog_context( context, "xml_output_file" );	fid = HAL_EEPROM_READ_WORD(context->curadr); blk(fid);	acs1 = HAL_EEPROM_READ_WORD(context->curadr+4);	acs2 = HAL_EEPROM_READ_BYTE(context->curadr+6);    key1 = HAL_EEPROM_READ_WORD(context->curadr+7);    key2 = HAL_EEPROM_READ_BYTE(context->curadr+9);	fdesc = HAL_EEPROM_READ_BYTE(context->curadr+2);	sfi = HAL_EEPROM_READ_BYTE(context->curadr+3);    crc = HAL_EEPROM_READ_WORD(context->curadr+18); blk(crc);	fprintf(context->f,"\n");	for (n=0;n<context->space;n++) { fprintf(context->f," "); }	switch (fdesc&FDESC_TYPE_MASK) {		case FDESC_TYPE_DF:			if (fid==0x3F00) {				fprintf(context->f,"<MF");			} else {				fprintf(context->f,"<DF");			}			break;		case FDESC_TYPE_BINARY:			fprintf(context->f,"<EF_BINARY");			break;		case FDESC_TYPE_LINEAR:			fprintf(context->f,"<EF_LINEAR");			break;		case FDESC_TYPE_CYCLIC:			fprintf(context->f,"<EF_CYCLIC");			break;	}    fprintf(context->f," header=\"%.4X\" fid=\"%.4X\" fdesc=\"%.2X\" sfi=\"%.2X\" ac=\"%.4X%.2X\" ac_key=\"%.4X%.2X\" ",context->curadr,fid,fdesc,sfi,acs1,acs2,key1,key2);	fprintf(context->f,"crc=\"%.4X\" ",crc);    /* validate the header file ! */    if (!__load_file_header(context->curadr)) {        fprintf(stderr,"******** xml_output_file(): file header corrupted ! \n");        return;    }	switch (fdesc&FDESC_TYPE_MASK) {		case FDESC_TYPE_DF:			if (fid==0x3F00) {				xml_output_MF(context);				sprintf(end,"</MF>\n");				next_file = 0x0000;			} else {				xml_output_DF(context);				sprintf(end,"</DF>\n");                next_file = HAL_EEPROM_READ_WORD(context->curadr+10); blk(next_file);			}			break;		case FDESC_TYPE_BINARY:			xml_output_binary_EF(context);			sprintf(end,"</EF_BINARY>\n");            next_file = HAL_EEPROM_READ_WORD(context->curadr+10); blk(next_file);			break;		case FDESC_TYPE_LINEAR:			xml_output_record_EF(context);			sprintf(end,"</EF_LINEAR>\n");            next_file = HAL_EEPROM_READ_WORD(context->curadr+10); blk(next_file);			break;		case FDESC_TYPE_CYCLIC:			xml_output_record_EF(context);			sprintf(end,"</EF_CYCLIC>\n");            next_file = HAL_EEPROM_READ_WORD(context->curadr+10); blk(next_file);			break;	}	fprintf(context->f,"\n");	for (n=0;n<context->space;n++) { fprintf(context->f," "); }	fprintf(context->f,end);	if (next_file!=0x0000) xml_output_link(context,next_file,jtrue);}#endif /* defined JAYA_FILESYSTEM*//* ============================================================================	xml_eeprom()	output the eeprom content   ========================================================================= */jbool __simu_save_XML_eeprom(int life){    jbyte   sav_lasterr;	POUTPUTXMLCONTEXT	context;	FILE*	f;	char	szFilename[80];    sav_lasterr = lasterr;	context = (POUTPUTXMLCONTEXT)malloc(sizeof(OUTPUTXMLCONTEXT));	if (context==NULL) return jfalse;	if (life==EEPROM_FILE_LIVE) {		strcpy(szFilename,"eeprom.xml");	} else {		sprintf(szFilename,"eeprom%.3d.xml",life);	}	f = fopen(szFilename,"wt");	if (f==NULL) {		fprintf(stderr,"__simu_save_XML_eeprom(): can't open the '%s' file to write to !\n",szFilename);		free((void*)context);		return jfalse;	}	context->curadr = ADDR_HEADER_MF;	context->f = f;	context->space = 0;	#ifdef JAYA_FILESYSTEM	xml_output_file(context);	#endif	free((void*)context);	fclose(f);	LOG1("EEPROM","Info: '%s' file has been created !",szFilename);    lasterr = sav_lasterr;	return jtrue;}/* =========================================================================	That's all folks !   ========================================================================= */

⌨️ 快捷键说明

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