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

📄 smf_fat.h

📁 the test file for GP32 gameboy hack
💻 H
字号:
/**********
 *
 * smf_fat.h: SmartMedia File System FAT part
 *
 * Portable File System designed for SmartMedia
 *
 * Created by Kim Hyung Gi (06/99) - kimhg@mmrnd.sec.samsung.co.kr
 * Samsung Electronics, M/M R&D Center, Visual Communication Group
 *
 **********
 * Modified by Lee Jin Woo (1999/09/02)
 *
 **********/

#ifndef SMF_FAT_H
#define SMF_FAT_H

#include "smf_cmn.h"


#ifdef __cplusplus
extern "C" {
#endif

/**********
 * Variable Ttype Definition
 **********/
typedef long F_HANDLE;	/* MSB is 1, when error. otherwise cluster
						 * number
						 *	(bits 30 - 24: device number (0 - 128))
						 *	(bits 23 - 17: file opened id) =>
						 *		used multi-access mode
						 */

/**********
 * Value Definitions
 * value of sSmInfo.pbr.file_sys_type
 **********/
#define FS_UNKNOWN			0
#define FS_FAT12			1
#define FS_FAT16			2

/* FAT table contents */
#define UNUSED_CLUSTER		0
#define DEFECTIVE_CLUSTER	0xfff7
#define LAST_CLUSTER		0xffff

/* fcreate mode */
#define NOT_IF_EXIST		0
#define ALWAYS_CREATE		1

/* open mode (can be ORed) */
#define OPEN_R				1
#define OPEN_W				2

/* ddel mode */
#define NOT_IF_NOT_EMPTY	0
#define ALWAYS_DELETE		1

/* seek mode */
#define FROM_CURRENT		0
#define FROM_BEGIN			1
#define FROM_END			2

/* path_check mode */
#define PATH_FULL			0
#define PATH_EXCEPT_LAST	1

/* find mode */
#define FIND_FILE_NAME		0
#define FIND_CLUSTER		1
#define FIND_FILE_INDEX		2
#define FIND_SUBDIR_INDEX	3
#define FIND_UNUSED			4
#define FIND_DELETED		5
#define FIND_PREVIOUS		6
#define FIND_FILE_FAT_NAME	7
#define	FIND_NEXT			8

/* file or directory */
#define ENTRY_FILE			0
#define ENTRY_DIR			1

/* format mode */
#define FORMAT_NORMAL		0
#define FORMAT_RESCUE		1

/* callback function id */
#define CALLBACK_CARD_INSERT		0
#define CALLBACK_CARD_EJECT		1

/* File Attribute */
#define ATTRIB_DIR			0x10
#define	ATTRIB_FILE			0x20


/* etc */
#define ROOT_DIR_ENTRY		256
#define MAX_DRIVE_NAME_LEN	10
#define MAX_PATH_NAME_LEN	256
#define MAX_OPENED_FILE_NUM	10
#define ROOT_HANDLE			0
#define	MAX_VERSION_INFO_LENGTH		40

#ifdef LONG_FILE_NAME_ENABLE
	#define MAX_FILE_NAME_LEN	80
#else
	#define	MAX_FILE_NAME_LEN	12
#endif


/**********
 * Structure Type Definitions
 **********/
typedef struct {
	udword def_boot;
	udword start_cyl;
	udword start_head;
	udword start_sector;
	udword pt_type;
	udword end_cyl;
	udword end_head;
	udword end_sector;
	udword start_lba_sector;
	/* total_sectors - start_lba_sector */
	udword total_available_sectors;
} sPARTITION_ENTRY;


typedef struct {
	udword bytes_per_sector;
	udword sectors_per_cluster;
	udword reserved_sectors;
	udword fat_num;
	udword root_entry;
	udword total_sectors;
	udword format_type;
	udword sectors_in_fat;
	udword sectors_per_track;		/* sector / head */
	udword head_num;				/* head / cylinder */
	udword hidden_sectors;
	udword huge_sectors;
} sBPB;


typedef struct {
	sPARTITION_ENTRY partition_entry[4];
	uword signature;
} sMBR;


typedef struct {
	byte oem_name[12];
	sBPB bpb;
	udword drive_num;
	udword reserved;
	udword ext_boot_signature;
	udword vol_id;
	byte vol_label[12];
	udword file_sys_type;
	udword signature;
} sPBR;


typedef struct {
	sMBR mbr;
	sPBR pbr;
} sSM_INFO;


typedef struct {
     uword year;
     ubyte month;
     ubyte day;
     ubyte hour;
     ubyte min;
     ubyte sec;
     ubyte msec;
}sTIME;


/**********
 * attr
 *	7-6 Reserved. Must be 0's.
 *	5: 1 = ARCHIVE file was modified
 *	4: 1 = DIRECTORY, 0 = file
 *	3: 1 = VOLUME label
 *	2: 1 = SYSTEM file or directory
 *	1: 1 = HIDDEN file or directory
 *	0: 1 = READONLY file
 **********/
typedef struct {
	udword attr;
	udword cluster;
	udword size;
	sTIME time;
} sFILE_STAT;


typedef struct {
	udword f_ptr;
	udword count;
	ubyte* p_buf;
} sCACHE;


typedef struct tagOPENED_LIST {
	struct tagOPENED_LIST* prev;
	struct tagOPENED_LIST* next;
	udword cluster;
	F_HANDLE h_parent;
	udword f_ptr;		/* present file pointer */
	udword cur_cluster;	/* cluster in which f_ptr lies in */
	udword old_cur_cluster;	/* previous cur_cluster */
	udword size;		/* file size */
	udword mode;		/* read, write, read_write ... */
	udword id;
#ifndef WRITE_CACHE_DISABLE
	sCACHE cache;
#endif
} sOPENED_LIST;


typedef struct {
	byte name[16];
} sDIR_ENTRY;


typedef struct {
	byte name[16];
	unsigned short long_name[(MAX_FILE_NAME_LEN>>1) + 1];	/* unicode */
	sFILE_STAT stat;
} sDIR_ENTRY_EX;


typedef struct {
	udword total_size;			/* total size of smartmedia */
	udword used_size;			/* total used size */
	udword free_size;			/* available size */
	udword bad_cluster_num;		/* number of FAT bad clusters
								 * (not include physical invalid blocks)
								 */
	udword sector_per_cluster;
	udword sector_size;
} sVOL_INFO;


typedef struct {
	char acInfo[MAX_VERSION_INFO_LENGTH];
	int iMajorVersion;
	int iMinorVersion;
} sVERSION;


/**********
 * Application API
 **********/
SM_EXPORT ERR_CODE smInit(void);
SM_EXPORT ERR_CODE smCreateFile(const smchar* p_file_name, udword fcreate_mode, F_HANDLE* p_handle);
SM_EXPORT ERR_CODE smOpenFile(const smchar* p_file_name, udword fopen_mode, F_HANDLE* p_handle);
SM_EXPORT ERR_CODE smReadFile(F_HANDLE h_file, void* p_buf, udword buf_size, udword* p_read_count);
SM_EXPORT ERR_CODE smWriteFile(F_HANDLE h_file, const void* p_buf, udword count);
SM_EXPORT ERR_CODE smSeekFile(F_HANDLE h_file, udword seek_mode, dword offset, dword* p_old_offset);
SM_EXPORT ERR_CODE smCloseFile(F_HANDLE h_file);
SM_EXPORT ERR_CODE smRemoveFile(const smchar* p_file_name);
SM_EXPORT ERR_CODE smGetSizeFile(const smchar* p_file_name,	udword* p_size);

SM_EXPORT ERR_CODE smCreateDir(const smchar* p_dir_name, udword dcreate_mode);
SM_EXPORT ERR_CODE smRemoveDir(const smchar* p_dir_name, udword ddel_mode);
SM_EXPORT ERR_CODE smGetListNumDir(const smchar* p_dir_name, udword* p_num);
SM_EXPORT ERR_CODE smReadDir(const smchar* p_dir_name, udword entry_start, udword entry_count, sDIR_ENTRY p_buf[], udword* p_read_count);
SM_EXPORT ERR_CODE smReadDirEx(const smchar* p_dir_name, udword entry_start, udword entry_count, sDIR_ENTRY_EX p_buf[], udword* p_read_count);

SM_EXPORT ERR_CODE smReadStat(const smchar* p_name, sFILE_STAT* p_stat);
SM_EXPORT ERR_CODE smWriteStat(const smchar* p_name, const sFILE_STAT* p_stat);

#ifdef	LONG_FILE_NAME_ENABLE
SM_EXPORT ERR_CODE smSetLongName(const smchar* p_file_name, const uword* p_long_name);
SM_EXPORT ERR_CODE smGetLongName(const smchar* p_file_name, uword* p_long_name);
#endif

SM_EXPORT ERR_CODE smGetVolInfo(const smchar* p_vol_name, sVOL_INFO* p_info);
SM_EXPORT ERR_CODE smFormatVol(const smchar* p_vol_name, const smchar* p_label, udword format_id, udword* p_bad_count);
SM_EXPORT ERR_CODE smMountVol(udword drv_no, const smchar* p_vol_name);
SM_EXPORT ERR_CODE smUnmountVol(udword drv_no);

SM_EXPORT ERR_CODE smFileExtend(F_HANDLE h_file, udword size);
SM_EXPORT ERR_CODE smMoveFile(const smchar* oldPath, const smchar* newPath);
SM_EXPORT ERR_CODE smRenameFile(const smchar* old_name, const smchar* new_name);
SM_EXPORT ERR_CODE smNoFATUpdate(const smchar* p_vol_name);
SM_EXPORT ERR_CODE smFATUpdate(const smchar* p_vol_name);

SM_EXPORT ERR_CODE smRegisterCallBack(udword drv_no, udword func_id, void (*pFunc)(udword));
SM_EXPORT ERR_CODE smUnregisterCallBack(udword drv_no, udword func_id);
SM_EXPORT ERR_CODE smGetVersionInfo(sVERSION *p_version);

/*
 * This will call "void appCBCardInserted(udword drv_no)".
 * App must prepare this function
 */
SM_EXPORT void SMCBCardInserted(udword drv_no);
/*
 * This will call "void appCBCardEjected(udword drv_no)".
 * App must prepare this function
 */
SM_EXPORT void SMCBCardEjected(udword drv_no);

/**********
 * extended functions
 **********/
/*
SM_EXPORT ERR_CODE smTruncateFile(F_HANDLE handle, udword size);
SM_EXPORT ERR_CODE smChangeDir(smchar* dir_name);
SM_EXPORT ERR_CODE smCopyFile(smchar* src_file_name, smchar* dst_file_name, udword mode);
SM_EXPORT ERR_CODE smCopyDir(smchar* src_dir_name, smchar* dst_dir_name, udword mode);
SM_EXPORT ERR_CODE smMoveFile(smchar* src_file_name, smchar* dst_file_name, udword mode);
SM_EXPORT ERR_CODE smMoveDir(smchar* src_dir_name, smchar* dst_dir_name, udword mode);
SM_EXPORT ERR_CODE smOptimizeVol(udword drv_no, udword opt_mode);
SM_EXPORT ERR_CODE smCheckVol(udword drv_no, udword chk_mode);
SM_EXPORT ERR_CODE smReadVol(udword drv_no, sSM_INFO* p_sm_info);
SM_EXPORT ERR_CODE smWriteVol(udword drv_no, const sSM_INFO* p_sm_info);
SM_EXPORT ERR_CODE smFlushCache(F_HANDLE h_file);
*/

#ifdef __cplusplus
}
#endif


#endif

⌨️ 快捷键说明

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