frodo-wii/Src/1541t64.h
2008-12-31 16:16:24 +00:00

63 lines
1.8 KiB
C++

/*
* 1541t64.h - 1541 emulation in .t64/LYNX file
*
* Frodo (C) 1994-1997,2002 Christian Bauer
*/
#ifndef _1541T64_H
#define _1541T64_H
#include "IEC.h"
// Information for file inside a .t64 file
typedef struct {
char name[17]; // File name, PETSCII
uint8 type; // File type
uint8 sa_lo, sa_hi; // Start address
int offset; // Offset of first byte in .t64 file
int length; // Length of file
} FileInfo;
class T64Drive : public Drive {
public:
T64Drive(IEC *iec, char *filepath);
virtual ~T64Drive();
virtual uint8 Open(int channel, char *filename);
virtual uint8 Close(int channel);
virtual uint8 Read(int channel, uint8 *byte);
virtual uint8 Write(int channel, uint8 byte, bool eoi);
virtual void Reset(void);
private:
void open_close_t64_file(char *t64name);
bool parse_t64_file(void);
bool parse_lynx_file(void);
uint8 open_file(int channel, char *filename);
uint8 open_directory(int channel, char *filename);
void convert_filename(char *srcname, char *destname, int *filemode, int *filetype);
bool find_first_file(char *name, int type, int *num);
void close_all_channels(void);
void execute_command(char *command);
void cht64_cmd(char *t64path);
uint8 conv_from_64(uint8 c, bool map_slash);
FILE *the_file; // File pointer for .t64 file
bool is_lynx; // Flag: .t64 file is really a LYNX archive
char orig_t64_name[256]; // Original path of .t64 file
char dir_title[16]; // Directory title
FILE *file[16]; // File pointers for each of the 16 channels (all temporary files)
int num_files; // Number of files in .t64 file and in file_info array
FileInfo *file_info; // Pointer to array of file information structs for each file
char cmd_buffer[44]; // Buffer for incoming command strings
int cmd_len; // Length of received command
uint8 read_char[16]; // Buffers for one-byte read-ahead
};
#endif