#define VER 0.10
#define DEFAULT_PORT "/dev/cuaa0" /* デフォルト通信ポート(デバイス) */
#define DEFAULT_BPS 19200L /* デフォルト通信速度(bps) */
#define DEFAULT_CAPA 1 /* デフォルト L: 容量
1 -> 容量 128 kB, 5 -> 容量 512 kB */
#define DEFAULT_OUTPUTDIR "." /* デフォルト出力ディレクトリ */
/* カレントディレクトリは "" でも "." */
/* でもよい */
#define ON 1
#define OFF 0
#define DEFAULT_RMODE ON /* ファイル探索モードのデフォルト値 */
/* ON -> 再帰探索する */
/* OFF -> 再帰探索しない */
#define REC_BETA 2
#define REC_DIR 3
#define DEFAULT_MDIR ON /* ファイル読み込み時に L: に */
/* ディレクトリを作成するかどうかの */
/* デフォルト値 */
/* ON -> 作成する */
/* OFF -> 作成しない */
/* (L: のルートにファイルを格納する) */
#define DEFAULT_TAKEIMG OFF /* L: にファイルを取り込む順番の */
/* デフォルト値 */
/* ON -> DOS のディスクイメージ順 */
/* OFF -> 起動時引数に与えた順 */
#define DEFAULT_LOGBUF_LINE 128 /* ログバッファ行数デフォルト値 */
#define DEFAULT_REWRITE 32767 /* ファイルリスト書換え間隔 */
/* ポケコンからのリクエストチェック
空振り回数 */
#define WRI_PRO_W 0x01 /* WRITE PROTECTED file skip 警告 On */
#define DEFAULT_WARN WRI_PRO_W /* デフォルト表示警告 */
#define DEFAULT_WTIMES ON /* デフォルト書き出しファイルタイムスタンプ */
/* ON -> L: でのタイムスタンプを反映する */
/* OFF-> 現在の時刻をタイムスタンプとする */
#define DEFAULT_DELETED_SHOW ON /* 削除痕跡ありファイル表示のデフォルト */
/* ON -> 表示, OFF -> 非表示 */
#define DEFAULT_UPTHISDIR_SHOW OFF /* '.', '..' 表示のデフォルト設定 */
/* ON -> 表示, OFF -> 非表示 */
#define DEFAULT_DIR_INDENT 4 /* ディレクトリ内ファイル表示時の */
/* 字下げ数のデフォルト値 */
#define DEFAULT_ANIM ON /* オープニング Signature animation 表示の */
/* デフォルト値 */
/* ON -> 表示する。OFF -> 表示しない。 */
#define MAX_DIR_LEN 512 /* ディレクトリ名最大文字数 */
#define MAX_FILE_LEN 256 /* ファイル名最大文字数 */
#define MEDIA_DESC 0xf0 /* メディアディスクリプタ */
#define ATTR_OFFS 0x0b /* ファイル属性 dir エントリオフセット */
#define DIR_ATTR 0x10 /* ディレクトリであることを表す属性 */
#define NORM_ATTR 0x20 /* 通常ファイルであることを表す属性 */
#define WRI_PROTECT 0x01 /* 書き込み禁止ファイル属性 bit */
#define INVISIBLE 0x02 /* 不可視ファイル属性 bit */
#define DEVICEDRV 0x04 /* デバイスドライバ属性 bit */
#define OTHERS 0x08 /* その他の常駐プログラム属性 bit */
#define FILESIZE_LL 0x1c /* ファイルサイズ下位バイト dir エントリオフセット */
#define FILESIZE_MM 0x1d /* ファイルサイズ中位バイト dir エントリオフセット */
#define FILESIZE_HH 0x1e /* ファイルサイズ上位バイト dir エントリオフセット */
#define FAT_LL 0x1a /* 先頭セクタ番号下位 8 bit の dir エントリオフセット */
#define FAT_HH 0x1b /* 先頭セクタ番号上位 4 bit の dir エントリオフセット */
#define SECTOR_SIZE 128
/* 容量 128 kB mode 定数 */
#define FAT_SIZE_128 12
#define DIR_SIZE_128 32 /* 32 * 4 = 128 files 格納できる */
#define DATA_SIZE_128 980
/* 容量 512 kB mode 定数 */
#define FAT_SIZE_512 (FAT_SIZE_128 * 4)
#define DIR_SIZE_512 32 /* 32 * 4 = 128 files 格納できる */
#define DATA_SIZE_512 (((FAT_SIZE_128 + DIR_SIZE_128 + DATA_SIZE_128) * 4) \
- FAT_SIZE_512 - DIR_SIZE_512)
#define SECTOR_MAP_Y 6 /* セクタマップを表示しはじめる行(最上行ならば 1) */
#define FAT_MAP_Y SECTOR_MAP_Y
#define DIR_MAP_Y (SECTOR_MAP_Y + 1)
#define DATA_MAP_Y (SECTOR_MAP_Y + 2)
#define SEC_PER_P 16 /* データセクタマップの . 1 個あたりのセクタ数 */
#define ALLOC_COLOR 5 /* メモリを割り当てることができたセクタの色(水色) */
#define BAD_COLOR 2 /* メモリを割り当てることができなかったセクタの色(赤)*/
#define READ_COLOR 6 /* 読み出されているセクタの色(黄色) */
#define WRITE_COLOR 2 /* 書き込まれているセクタの色(赤) */
#define PORT_X 1 /* 接続ポート名を表示する桁(最左桁ならば 1) */
#define PORT_Y 3 /* 接続ポート名を表示する行(最上行ならば 1) */
#define PORT_COLOR 5
#define STAT_X (PORT_X + 22) /* ステータスを表示する桁(最左桁ならば 1) */
#define STAT_Y PORT_Y /* ステータスを表示する行(最上行ならば 1) */
#define ONLINE_COLOR -1 /* Online ステータスの表示色(白) */
#define BPS_X 34 /* 通信速度を表示する桁(最左行ならば 1) */
#define BPS_Y PORT_Y /* 通信速度を表示する行(最上行ならば 1) */
#define BPS_COLOR 4 /* 通信速度を表示する色(白) */
#define CAPA_X 60 /* 容量を表示する桁(最左桁ならば 1) */
#define CAPA_Y PORT_Y /* 容量を表示する行(最上行ならば 1) */
#define CAPA_COLOR 6 /* 容量を表示する色(白) */
#define OUTD_X 1 /* 容量を表示する桁(最左桁ならば 1) */
#define OUTD_Y (PORT_Y + 1) /* 容量を表示する行(最上行ならば 1) */
#define OUTD_COLOR 5 /* 容量を表示する色(白) */
#define LAST_X 1 /* セクタへの最終アクセス状態を表示する桁 */
#define LAST_Y (PORT_Y + 2) /* セクタへの最終アクセス状態を表示する行 */
#define FILENAME_COLOR -1 /* File list でのファイル名表示色 */
#define FILEATTR_COLOR 5 /* File list でのファイル属性表示色 */
#define FILESIZE_COLOR 4 /* File list でのファイルサイズ(
)表示色 */
#define FILEDATE_COLOR 6 /* File list でのファイル作成年月日表示色 */
#define FILETIME_COLOR -1 /* File list でのファイル作成時分秒表示色 */
#define DELETED_COLOR 1 /* File list での削除痕跡のあるファイルの情報の
表示色 */
#define UNCHAIN_COLOR 2 /* メモリを確保できなかったセクタにファイルの
一部があるファイルの情報の表示色 */
#define DEL_UNCHAIN_COLOR 3
/* 削除痕跡のあるファイルで、
メモリを確保できなかったセクタにファイルの
一部があるファイルの情報の表示色 */
#define SFILE_NUM 32
/* DIR エントリ中におけるタイムスタンプ関連定数 */
#define TIME_LL 0x16
#define TIME_HH 0x17
#define DATE_LL 0x18
#define DATE_HH 0x19
#define YEAR_MASK 0xfe00
#define YEAR_SHIFT 9
#define MON_MASK 0x01e0
#define MON_SHIFT 5
#define DAY_MASK 0x001f
#define HOUR_MASK 0xf800
#define HOUR_SHIFT 11
#define MIN_MASK 0x07e0
#define MIN_SHIFT 5
#define SEC_MASK 0x001f
#define ON 1
#define OFF 0
#define SHOWDATE ON
#define SHOWTIME ON
#ifdef UNIX
#define DIR_DELIM '/'
#define DIR_DELIM_STR "/"
#else
#define DIR_DELIM '\\'
#define DIR_DELIM_STR "\\"
#endif
/* 構造体の定義 */
/* FAT の範囲をおぼえておくための構造体 */
typedef struct fat_range{
int start;
int end;
}FAT_RANGE;
/* DIR エントリの範囲をおぼえておくための構造体 */
typedef struct dir_range{
int start;
int end;
}DIR_RANGE;
/* DATA セクタの範囲をおぼえておくための構造体 */
typedef struct data_range{
int start;
int end;
}DATA_RANGE;
#if 0
/* DIR エントリ内の File list を格納するための構造体 */
typedef struct filelist{
char *fullpathname; /* ディレクトリ名を含んだ full-path */
char *dir_name; /* ディレクトリ名 */
char *filename; /* 本当のファイル名 + 拡張子 */
char basename[9]; /* 8 文字以内に縮めたファイル名
(ドットファイルは . 以降の文字列) */
char ext[4]; /* 3 文字以内に縮めたファイル名 */
int attr; /* L: におけるファイル属性 */
}FILELIST;
#endif
typedef struct namelist{
char *org_name;
char *Lname;
struct namelist *next;
}NAMELIST;
/* File list 表示を管理するための構造体(素直に curse を使えばよかったかな) */
typedef struct displist{
char *linebuf;
struct displist *pre;
struct displist *next;
}DISPLIST;
/* 関数プロトタイプ宣言 */
int title(void);
int chk_mode(int argc, char *argv[]);
int set_mode(int mode, FAT_RANGE *fat_range, DIR_RANGE *dir_range, DATA_RANGE *data_range);
int init_sector(unsigned char *fat_buffer[],
unsigned char *dir_buffer[],
unsigned char *data_buffer[],
FAT_RANGE fat_range,
DIR_RANGE dir_range,
DATA_RANGE data_range,
int m_column);
int free_sector(unsigned char *fat_buffer[],
unsigned char *dir_buffer[],
unsigned char *data_buffer[],
FAT_RANGE fat_range,
DIR_RANGE dir_range,
DATA_RANGE data_range);
int set_port_name(int argc, char *argv[], char *port_name);
int open_port(char *port_name, unsigned int bps);
int close_port(void);
/* unsigned int get_port(void); */
unsigned char get_port(void);
unsigned char nowait_get_port(void);
int put_port(unsigned char data);
int put_sector(unsigned char *buffer[], unsigned int sector);
int get_sector(unsigned char *buffer[], unsigned int sector);
int chk_bps(int argc, char *argv[], unsigned int *bps);
int make_filelist(void);
int disp_filelist(unsigned char *fat_buffer[], unsigned char *dir_buffer[],
unsigned char *data_buffer[], DIR_RANGE dir_range,
int deleted, int ut_dir, int dir_indent);
int disp_fileinfo(unsigned char fileinfo[], int deleted_show,
unsigned char parent_dir_name0,
unsigned char *fat_buffer[], unsigned char *data_buffer[]);
int disp_dirinfo(int deleted, int ut_dir, int sec_num,
unsigned char *fat_buffer[], unsigned char *data_buffer[],
int level, int dir_indent, unsigned char parent_dir_name0);
/* takedir.c */
#if 0
int take_file(int rmode, char *fullpathname, FILELIST filelist[],
int nfile, int max_nfile,
unsigned char *fat_buffer[],
unsigned char *dir_buffer[],
unsigned char *data_buffer[],
FAT_RANGE fat_range,
DIR_RANGE dir_range,
DATA_RANGE data_range);
int set_filelist(FILELIST filelist[], int nfile, char *fullpathname);
#endif
int get_drv_dirname(char fullpathname[], char drv[], char dir_name[]);
int get_filename(char *fullpathname, char *filename);
int make_base_ext(char filename[], char basename[], char ext[], int *attr);
int put_fat(int fat_num, int value, unsigned char *fat_buffer[],
FAT_RANGE fat_range);
#if 0
int free_filelist(int max_nfile, FILELIST filelist[]);
#endif
int takedir(char *sdir, int sfile_num, char *sfile[],
unsigned char *fat_buffer[],
unsigned char *dir_buffer[],
unsigned char *data_buffer[],
FAT_RANGE fat_range,
DIR_RANGE dir_range,
DATA_RANGE data_range,
int rmode, int mdir, int timg);
/* int set_dirent_info(unsigned char *direntbuffer, int dirent_bias,
char *fullpathname); */
int set_dirent_info(unsigned char *dirent_buffer, int dirent_bias,
char *basename, char *ext, int attr);
int count_file(char *fullpathname);
int read_file(char *fullpathname,
unsigned char *dirent_buffer, int dirent_ds_bias,
unsigned char *fat_buffer[], unsigned char *data_buffer[],
DATA_RANGE data_range, FAT_RANGE fat_range,
int mdir);
/* chk_rec.c */
int chk_recur(int argc, char *argv[], int *rmode);
int get_winsize(int *m_column, int *m_row);
/* display.c */
int init_displist(int m_column, int m_row, int logbuf_line,
DATA_RANGE data_range);
int alloc_displist(DISPLIST **displist, int m_column);
int displist_c_printf(int c, char *format, ...);
int except_esc_len(char *str, int *loc);
int free_displist(void);
int scrl_up(void);
int scrl_down(void);
int usage(int argc, char *argv[]);
int usage_disp(void);
int set_outdir(int argc, char *argv[], char *output_dir);
int get_filetime(char *fullpathname,
unsigned int *dateword, unsigned int *timeword);
int set_filetime(char *filename, unsigned int dateword, unsigned int timeword);
int epilogue(char *output_dir,
unsigned char *fat_buffer[],
unsigned char *dir_buffer[],
unsigned char *data_buffer[],
DIR_RANGE dir_range,
int wtimes);
int make_name(char *output_dir, unsigned char fileinfo[],
char pathfilename[], char filename[]);
int get_fat(int fat_num, unsigned char *fat_buffer[]);
int write_file(unsigned char fileinfo[], char *output_dir,
unsigned char *fat_buffer[], unsigned char*data_buffer[],
int wtimes);
int write_dir(char *output_dir, unsigned char fileinfo[], int sec_num,
unsigned char *fat_buffer[], unsigned char *data_buffer[],
int wtimes, int *wdir);
int get_fs_num_bias(int fat_loc,
int *fs_num_l, int *fs_bias_l,
int *fs_num_h, int *fs_bias_h);
int chk_w_timestamp(int argc, char *argv[], int *wtimes);
/* keyevent.c */
int key_event(void);
/* bell.c */
int bell(void);
/* execaloc.c */
/* int exec_alloc(int size); */
int exec_alloc(unsigned int size);
int exec_free(void);
/* chainchk.c */
int chain_chk(int sec_num,
unsigned char *fat_buffer[], unsigned char *data_buffer[]);
/* chk_mdir.c */
int chk_makedir(int argc, char *argv[], int *mdir);
/* chk_timg.c */
int chk_takeimg(int argc, char *argv[], int *timg);
/* set_sdf.c */
int set_sdir_sfile(char *argv, char *sdir, char *sfile);
/* cm_dir.c */
long chg_make_dir(char *sdir, int mdir, int *last_fat_num,
DIR_RANGE dir_range, unsigned char *dir_buffer[],
FAT_RANGE fat_range, unsigned char *fat_buffer[],
unsigned char *data_buffer[]);
int get_topdir(char *org_dir, char head[], char *topdir, char *nextdir);
int chk_get_Lname(char org_fullpathname[], char org_name[], char Lname[],
int mdir);
int to_name8(char org_name[], char name8[]);
int to_name_num(char *name8);
int free_namelist(void);
int haveto_chg(char *sdir);
/* sig_anim.c */
int chk_anim(int argc, char *argv[]);
int sig_anim(int anim, int m_colum, int m_row);
int disp_cup(void);
int anim_coffee(void);
int anim_surface(void);
int anim_steam(void);
int disp_noike(void);
int anim_signboard(void);