|
|
1.1 root 1: /*
2: Hatari tool: Magic Shadow Archiver - hmsa.c
3:
4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
6: */
7:
8: #include <stdio.h>
9: #include <stdlib.h>
10: #include <stdarg.h>
11: #include <string.h>
12:
13: #include "hmsa.h"
14: #include "file.h"
15: #include "msa.h"
16:
17:
18: /**
19: * Output string to log file
20: */
21: void Log_Printf(int nType, const char *psFormat, ...)
22: {
23: va_list argptr;
24:
25: if (nType <= 4)
26: {
27: va_start(argptr, psFormat);
28: vfprintf(stdout, psFormat, argptr);
29: va_end(argptr);
30: }
31: }
32:
33:
34: /**
35: * Query user
36: */
37: int DlgAlert_Query(const char *text)
38: {
39: puts(text);
40: return TRUE;
41: }
42:
43:
44: /**
45: * Output string to log file
46: */
47: int main(int argc, char *argv[])
48: {
49: long nImageBytes;
50: int retval;
51: unsigned char *diskBuffer;
52: char *sourceFileName;
53: char *targetFileName;
54:
55: if(argc!=2 || argv[1][0]=='-')
56: {
57: printf("\rHatari Magic Shadow (Un-)Archiver version 0.2.1.\n\n"
58: "Usage: %s FILENAME\n\n"
59: "This program converts a MSA disk image into a ST disk image and vice versa.\n\n"
60: "This software is distributed under the GNU Public License, version 2 or at your\n"
61: "option any later version. Please read the file gpl.txt for details.\n",
62: argv[0]);
63: return 0;
64: }
65:
66: if(strlen(argv[1]) < 4)
67: {
68: fprintf(stderr,"Invalid file name %s\n", argv[1]);
69: return -1;
70: }
71:
72: sourceFileName = argv[1];
73: targetFileName = malloc(strlen(sourceFileName) + 6);
74:
75: if (targetFileName == NULL)
76: {
77: fprintf(stderr,"Not enough memory\n");
78: return -1;
79: }
80:
81: if (strcasecmp(&sourceFileName[strlen(sourceFileName)-3], "msa") == 0)
82: {
83: /* Convert MSA to ST disk image */
84:
85: /* Read the source disk image */
86: diskBuffer = MSA_ReadDisk(sourceFileName, &nImageBytes);
87: if (!diskBuffer || nImageBytes < 512*8)
88: {
89: fprintf(stderr,"Could not read MSA disk!\n");
90: return -1;
91: }
92:
93: strcpy(targetFileName, sourceFileName);
94: if (targetFileName[strlen(targetFileName)-4] == '.')
95: targetFileName[strlen(targetFileName)-4] = 0; /* Strip MSA extension */
96: strcat(targetFileName, ".st");
97:
98: printf("Converting %s to %s (%li Bytes)\n", sourceFileName, targetFileName, nImageBytes);
99:
100: retval = File_Save(targetFileName, diskBuffer, nImageBytes, FALSE);
101: }
102: else
103: {
104: /* Convert ST to MSA disk image */
105: nImageBytes = 0;
106:
107: /* Read the source disk image: Just load directly into buffer */
108: diskBuffer = File_Read(sourceFileName, &nImageBytes, NULL);
109: if (!diskBuffer || nImageBytes < 512*8)
110: {
111: fprintf(stderr,"Could not read ST disk!\n");
112: return -1;
113: }
114:
115: strcpy(targetFileName, sourceFileName);
116: if (targetFileName[strlen(targetFileName)-3] == '.')
117: targetFileName[strlen(targetFileName)-3] = 0; /* Strip ST extension */
118: strcat(targetFileName, ".msa");
119:
120: printf("Converting %s to %s (%li Bytes)\n", sourceFileName, targetFileName, nImageBytes);
121:
122: retval = MSA_WriteDisk(targetFileName, diskBuffer, nImageBytes);
123: }
124:
125: free(targetFileName);
126: free(diskBuffer);
127:
128: return retval;
129: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.