@@ -93,12 +93,24 @@ catch(std::exception const& e){\
93
93
goto end_error;\
94
94
}
95
95
96
+ #define HANDLE_INIT_ERRORS (ctor_exception )\
97
+ catch (Error const & e){\
98
+ if (!(ctor_exception)) delete card;\
99
+ card = NULL ;\
100
+ e.describe ();\
101
+ error_occured = true ;\
102
+ }\
103
+ catch (std::exception const & e){\
104
+ if (!(ctor_exception)) delete card;\
105
+ card = NULL ;\
106
+ printf (" \x1B [31mAn error occured: %s\x1B [0m\n " , e.what ());\
107
+ error_occured = true ;\
108
+ }
96
109
97
110
int main (void ) {
98
111
mkdir (" sdmc:/TWLSaveTool" , 0777 );
99
112
chdir (" sdmc:/TWLSaveTool" );
100
113
restart:
101
-
102
114
u8 fileNumber = 0 ;
103
115
104
116
bool once = false , error_occured = false ;
@@ -108,9 +120,12 @@ int main(void) {
108
120
109
121
printf (" \x1b [1m\x1b [0;12HTWLSaveTool 1.1 by TuxSH\x1B [0m\n\n\n " );
110
122
123
+ try { card = new TWLCard; }
124
+ HANDLE_INIT_ERRORS (true )
125
+
126
+ if (error_occured) goto main_loop;
127
+
111
128
try {
112
- card = new TWLCard;
113
-
114
129
if (card->isTWL ()) {
115
130
h = card->cardHeader ();
116
131
@@ -131,57 +146,44 @@ int main(void) {
131
146
printf (" Current save file name: %s" , card->generateFileName (fileNumber).c_str ());
132
147
}
133
148
134
- else {
149
+ else {
135
150
delete card;
136
151
card = NULL ;
137
152
printf (" \x1B [31mPlease insert a valid NDS game card!\x1B [0m\n " );
138
153
error_occured = true ;
139
154
}
140
155
}
141
- catch (Error const & e){
142
- delete card;
143
- card = NULL ;
144
- e.describe ();
145
- error_occured = true ;
146
- }
147
- catch (std::exception const & e){
148
- delete card;
149
- card = NULL ;
150
- printf (" \x1B [31mAn error occured: %s\x1B [0m\n " , e.what ());
151
- error_occured = true ;
152
- }
156
+ HANDLE_INIT_ERRORS (false )
153
157
154
-
158
+ main_loop:
155
159
while (aptMainLoop ()) {
156
160
hidScanInput ();
157
161
auto keys = hidKeysDown ();
158
162
159
163
if (keys & KEY_START) break ;
160
- else if (keys & KEY_Y){
161
- // delete card; card = NULL;
164
+ else if (keys & KEY_Y) {
162
165
gfxFlushBuffers ();
163
166
gfxSwapBuffers ();
164
167
gspWaitForVBlank ();
168
+ delete card;
169
+ card = NULL ;
165
170
goto restart;
166
171
}
167
- else if (keys & (KEY_LEFT | KEY_RIGHT)){
172
+ else if (keys & (KEY_LEFT | KEY_RIGHT)) {
168
173
if (keys & KEY_LEFT) --fileNumber;
169
174
else if (keys & KEY_RIGHT) ++fileNumber;
170
175
printf (" \r Current save file name: %s " , card->generateFileName (fileNumber).c_str ());
171
176
goto flush_buffers;
172
177
}
173
178
174
179
if (!once) {
175
- if (error_occured) {
176
- once = true ;
177
- goto end_error;
178
- }
180
+ if (error_occured) goto end_error;
179
181
if (keys & (KEY_B | KEY_A | KEY_X)) {
180
182
std::string fileName = card->generateFileName (fileNumber);
181
183
FILE* f = NULL ;
182
184
printf (" \n\n\n " );
183
185
184
- if (keys & KEY_B){
186
+ if (keys & KEY_B) {
185
187
try {
186
188
f = fopen (fileName.c_str (), " rb" );
187
189
if (f != NULL ){
@@ -198,7 +200,7 @@ int main(void) {
198
200
card->backupSaveFile (fileName, &updateProgressBar);
199
201
printf (" \n " );
200
202
}
201
- HANDLE_ERRORS ();
203
+ HANDLE_ERRORS ()
202
204
}
203
205
204
206
@@ -223,7 +225,7 @@ int main(void) {
223
225
card->restoreSaveFile (fileName, &updateProgressBar);
224
226
printf (" \n " );
225
227
}
226
- HANDLE_ERRORS ();
228
+ HANDLE_ERRORS ()
227
229
}
228
230
229
231
else if (keys & KEY_X) {
@@ -238,7 +240,7 @@ int main(void) {
238
240
card->eraseSaveData (&updateProgressBar);
239
241
printf (" \n " );
240
242
}
241
- HANDLE_ERRORS ();
243
+ HANDLE_ERRORS ()
242
244
}
243
245
244
246
end:
0 commit comments