📄 dos.h
字号:
/* * (C) Copyright 2002 * St鋟bli Faverges - <www.staubli.com> * Pierre AUBERT p.aubert@staubli.com * * See file CREDITS for list of people who contributed to this * project. * * 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; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */#ifndef _DOS_H_#define _DOS_H_/* Definitions for Dos diskettes *//* General definitions */#define SZ_STD_SECTOR 512 /* Standard sector size */#define MDIR_SIZE 32 /* Direntry size */#define FAT_BITS 12 /* Diskette use 12 bits fat */#define MAX_PATH 128 /* Max size of the MSDOS PATH */#define MAX_DIR_SECS 64 /* Taille max d'un repertoire (en */ /* secteurs) *//* Misc. definitions */#define DELMARK '\xe5'#define EXTENDED_BOOT (0x29)#define MEDIA_STD (0xf0)#define JUMP_0_1 (0xe9)#define JUMP_0_2 (0xeb)/* Boot size is 256 bytes, but we need to read almost a sector, then assume bootsize is 512 */#define BOOTSIZE 512/* Fat definitions for 12 bits fat */#define FAT12_MAX_NB 4086#define FAT12_LAST 0x0ff6#define FAT12_END 0x0fff/* file attributes */#define ATTR_READONLY 0x01#define ATTR_HIDDEN 0x02#define ATTR_SYSTEM 0x04#define ATTR_VOLUME 0x08#define ATTR_DIRECTORY 0x10#define ATTR_ARCHIVE 0x20#define ATTR_VSE 0x0f/* Name format */#define EXTCASE 0x10#define BASECASE 0x8/* Definition of the boot sector */#define BANNER_LG 8#define LABEL_LG 11typedef struct bootsector{ unsigned char jump [3]; /* 0 Jump to boot code */ char banner [BANNER_LG]; /* 3 OEM name & version */ unsigned short secsiz; /* 11 Bytes per sector hopefully 512 */ unsigned char clsiz; /* 13 Cluster size in sectors */ unsigned short nrsvsect; /* 14 Number of reserved (boot) sectors */ unsigned char nfat; /* 16 Number of FAT tables hopefully 2 */ unsigned short dirents; /* 17 Number of directory slots */ unsigned short psect; /* 19 Total sectors on disk */ unsigned char descr; /* 21 Media descriptor=first byte of FAT */ unsigned short fatlen; /* 22 Sectors in FAT */ unsigned short nsect; /* 24 Sectors/track */ unsigned short nheads; /* 26 Heads */ unsigned int nhs; /* 28 number of hidden sectors */ unsigned int bigsect; /* 32 big total sectors */ unsigned char physdrive; /* 36 physical drive ? */ unsigned char reserved; /* 37 reserved */ unsigned char dos4; /* 38 dos > 4.0 diskette */ unsigned int serial; /* 39 serial number */ char label [LABEL_LG]; /* 43 disk label */ char fat_type [8]; /* 54 FAT type */ unsigned char res_2m; /* 62 reserved by 2M */ unsigned char CheckSum; /* 63 2M checksum (not used) */ unsigned char fmt_2mf; /* 64 2MF format version */ unsigned char wt; /* 65 1 if write track after format */ unsigned char rate_0; /* 66 data transfer rate on track 0 */ unsigned char rate_any; /* 67 data transfer rate on track<>0 */ unsigned short BootP; /* 68 offset to boot program */ unsigned short Infp0; /* 70 T1: information for track 0 */ unsigned short InfpX; /* 72 T2: information for track<>0 */ unsigned short InfTm; /* 74 T3: track sectors size table */ unsigned short DateF; /* 76 Format date */ unsigned short TimeF; /* 78 Format time */ unsigned char junk [BOOTSIZE - 80]; /* 80 remaining data */} __attribute__ ((packed)) BootSector_t;/* Structure d'une entree de repertoire */typedef struct directory { char name [8]; /* file name */ char ext [3]; /* file extension */ unsigned char attr; /* attribute byte */ unsigned char Case; /* case of short filename */ unsigned char reserved [9]; /* ?? */ unsigned char time [2]; /* time stamp */ unsigned char date [2]; /* date stamp */ unsigned short start; /* starting cluster number */ unsigned int size; /* size of the file */} __attribute__ ((packed)) Directory_t;#define MAX_VFAT_SUBENTRIES 20#define VSE_NAMELEN 13#define VSE1SIZE 5#define VSE2SIZE 6#define VSE3SIZE 2#define VBUFSIZE ((MAX_VFAT_SUBENTRIES * VSE_NAMELEN) + 1)#define MAX_VNAMELEN (255)#define VSE_PRESENT 0x01#define VSE_LAST 0x40#define VSE_MASK 0x1f/* Flag used by vfat_lookup */#define DO_OPEN 1#define ACCEPT_PLAIN 0x20#define ACCEPT_DIR 0x10#define ACCEPT_LABEL 0x08#define SINGLE 2#define MATCH_ANY 0x40struct vfat_subentry { unsigned char id; /* VSE_LAST pour la fin, VSE_MASK */ /* pour un VSE */ char text1 [VSE1SIZE * 2]; /* Caracteres encodes sur 16 bits */ unsigned char attribute; /* 0x0f pour les VFAT */ unsigned char hash1; /* toujours 0 */ unsigned char sum; /* Checksum du nom court */ char text2 [VSE2SIZE * 2]; /* Caracteres encodes sur 16 bits */ unsigned char sector_l; /* 0 pour les VFAT */ unsigned char sector_u; /* 0 pour les VFAT */ char text3 [VSE3SIZE * 2]; /* Caracteres encodes sur 16 bits */} __attribute__ ((packed)) ;struct vfat_state { char name [VBUFSIZE]; int status; /* is now a bit map of 32 bits */ int subentries; unsigned char sum; /* no need to remember the sum for each */ /* entry, it is the same anyways */} __attribute__ ((packed)) ;/* Conversion macros */#define DOS_YEAR(dir) (((dir)->date[1] >> 1) + 1980)#define DOS_MONTH(dir) (((((dir)->date[1]&0x1) << 3) + ((dir)->date[0] >> 5)))#define DOS_DAY(dir) ((dir)->date[0] & 0x1f)#define DOS_HOUR(dir) ((dir)->time[1] >> 3)#define DOS_MINUTE(dir) (((((dir)->time[1]&0x7) << 3) + ((dir)->time[0] >> 5)))#define DOS_SEC(dir) (((dir)->time[0] & 0x1f) * 2)#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -