48
46
const char *archdep_rsrc_machine_name = "DRIVES";
49
47
void (*archdep_set_leds_callback)(unsigned int, int) = NULL;
52
49
int archdep_init(int *argc, char **argv)
58
54
void archdep_closedown(void)
60
if (defaultLogFile != NULL)
62
fclose(defaultLogFile);
63
defaultLogFile = NULL;
64
remove(defaultLogName);
65
lib_free(defaultLogName);
66
defaultLogName = NULL;
56
if (defaultLogFile != NULL) {
57
fclose(defaultLogFile);
58
defaultLogFile = NULL;
59
remove(defaultLogName);
60
lib_free(defaultLogName);
61
defaultLogName = NULL;
71
65
char *archdep_program_name(void)
75
if (machine_name != NULL)
77
if ((name = (char*)lib_malloc(strlen("Vice") + strlen(machine_name) + 1)) != NULL)
78
sprintf(name, "Vice%s", machine_name);
69
if (machine_name != NULL) {
70
if ((name = lib_malloc(strlen("Vice") + strlen(machine_name) + 1)) != NULL) {
71
sprintf(name, "Vice%s", machine_name);
85
78
FILE *archdep_open_default_log_file(void)
87
const char *name = tmpnam(NULL);
89
if ((defaultLogName = (char*)lib_malloc(strlen(name)+1)) != NULL)
91
strcpy(defaultLogName, name);
92
if ((defaultLogFile = fopen(defaultLogName, "w+")) != NULL)
94
return defaultLogFile;
98
lib_free(defaultLogName);
99
defaultLogName = NULL;
103
return fopen("null:", "w");
80
const char *name = tmpnam(NULL);
82
if ((defaultLogName = lib_malloc(strlen(name) + 1)) != NULL) {
83
strcpy(defaultLogName, name);
84
if ((defaultLogFile = fopen(defaultLogName, "w+")) != NULL) {
85
return defaultLogFile;
87
lib_free(defaultLogName);
88
defaultLogName = NULL;
92
return fopen("null:", "w");
107
95
FILE *archdep_get_default_log_file(void)
109
return defaultLogFile;
97
return defaultLogFile;
113
100
/* Return a malloc'ed backup file name for file `fname'. */
114
101
char *archdep_make_backup_filename(const char *fname)
119
106
char *archdep_default_resource_file_name(void)
122
const char *basename = archdep_rsrc_machine_name;
124
if ((name = (char*)lib_malloc(strlen("Vice:.vicerc") + strlen(basename) + 1)) != NULL)
125
sprintf(name, "Vice:%s.vicerc", basename);
109
const char *basename = archdep_rsrc_machine_name;
111
if ((name = lib_malloc(strlen("Vice:.vicerc") + strlen(basename) + 1)) != NULL) {
112
sprintf(name, "Vice:%s.vicerc", basename);
131
117
char *archdep_default_fliplist_file_name(void)
133
119
return lib_msprintf("Vice:%s.fliplist", machine_name);
122
char *archdep_default_autostart_disk_image_file_name(void)
124
return lib_msprintf("Vice:autostart-%s.d64", machine_name);
137
127
char *archdep_default_save_resource_file_name(void)
139
129
return archdep_default_resource_file_name();
143
132
char *archdep_default_sysfile_pathlist(const char *emu_id)
145
return lib_msprintf("Vice:%s.", emu_id);
134
return lib_msprintf("Vice:%s.", emu_id);
149
137
int archdep_num_text_lines(void)
154
142
int archdep_num_text_columns(void)
160
147
int archdep_path_is_relative(const char *directory)
167
if ((*b == '$') || (*b == ':')) return 1;
153
if ((*b == '$') || (*b == ':')) {
176
#define READLINE_BUFFER 512
161
#define READLINE_BUFFER 512
178
163
static char readbuffer[READLINE_BUFFER];
180
165
/* Readline emulation */
181
166
char *readline(const char *prompt)
186
if (prompt != NULL) printf("%s", prompt);
188
readbuffer[0] = '\0';
189
len = OS_ReadLine(readbuffer, READLINE_BUFFER, 0, 255, 0);
191
if ((len <= 0) || (readbuffer[0] < 32)) return NULL;
192
readbuffer[len] = '\0';
194
retbuf = (char*)lib_malloc(strlen(readbuffer) + 1);
195
strcpy(retbuf, readbuffer);
171
if (prompt != NULL) {
172
printf("%s", prompt);
175
readbuffer[0] = '\0';
176
len = OS_ReadLine(readbuffer, READLINE_BUFFER, 0, 255, 0);
178
if ((len <= 0) || (readbuffer[0] < 32)) {
181
readbuffer[len] = '\0';
183
retbuf = lib_malloc(strlen(readbuffer) + 1);
184
strcpy(retbuf, readbuffer);
201
189
void add_history(const char *p)
206
193
/* Logfile handling */
207
194
FILE *open_logfile(const char *basename)
213
for (number=0; number<16; number++)
215
sprintf(buffer, "%s%d", basename, number);
216
if ((fp = fopen(buffer, "w")) != NULL) return fp;
200
for (number = 0; number < 16; number++) {
201
sprintf(buffer, "%s%d", basename, number);
202
if ((fp = fopen(buffer, "w")) != NULL) {
221
209
int archdep_default_logger(const char *level_string, const char *txt)
283
271
const char *archdep_extract_dir_and_leaf(const char *path)
285
const char *dir, *leaf, *b;
273
const char *dir, *leaf, *b;
287
b = path; leaf = b; dir = b;
290
if ((*b == FSDEV_DIR_SEP_CHR) || (*b == ':'))
292
dir = leaf; leaf = b + 1;
279
if ((*b == FSDEV_DIR_SEP_CHR) || (*b == ':')) {
299
288
int archdep_file_is_gzip(const char *name)
303
292
type = GetFileType(name);
304
293
/* only look at filename if the filetype differs from 0xF89 */
305
if (type != FileType_GZIP)
294
if (type != FileType_GZIP) {
307
295
size_t l = strlen(name);
309
if ((l < 4 || strcasecmp(name + l - 3, FSDEV_EXT_SEP_STR "gz"))
297
if ((l < 4 || strcasecmp(name + l - 3, FSDEV_EXT_SEP_STR "gz"))
310
298
&& (l < 3 || strcasecmp(name + l - 2, FSDEV_EXT_SEP_STR "z"))
311
&& (l < 4 || toupper(name[l - 1]) != 'Z' || name[l - 4] != FSDEV_EXT_SEP_CHR))
299
&& (l < 4 || toupper(name[l - 1]) != 'Z' || name[l - 4] != FSDEV_EXT_SEP_CHR)) {
317
306
int archdep_file_set_gzip(const char *name)
319
if (SetFileType(name, FileType_GZIP) != NULL)
308
if (SetFileType(name, FileType_GZIP) != NULL) {
325
315
int archdep_mkdir(const char *pathname, int mode)