fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

atari/midi: Don't automatically open new midi files after delays

+40 -84
+1 -1
src/arch/atarist/atarist.c
··· 394 394 if (smf != NULL) { 395 395 pce_log_tag (MSG_INF, "MIDI-SMF:", "file=%s\n", smf); 396 396 397 - if (st_smf_set_auto (&sim->smf, smf)) { 397 + if (st_smf_set_file (&sim->smf, smf)) { 398 398 pce_log (MSG_ERR, "*** can't open smf file (%s)\n", smf); 399 399 } 400 400 }
+38 -79
src/arch/atarist/smf.c
··· 47 47 { 48 48 unsigned char buf[16]; 49 49 50 + if (smf->fp == NULL) { 51 + return (1); 52 + } 53 + 50 54 if (fseek (smf->fp, smf->mthd_ofs, SEEK_SET)) { 51 55 return (1); 52 56 } ··· 86 90 return (0); 87 91 } 88 92 93 + /* end of track */ 89 94 smf_put_meta (smf, 0x2f, NULL, 0); 90 95 91 96 if (smf_write_header (smf)) { ··· 93 98 } 94 99 95 100 fclose (smf->fp); 101 + 96 102 smf->fp = NULL; 103 + smf->status = 0; 104 + smf->buf_idx = 0; 105 + smf->buf_cnt = 0; 97 106 98 107 return (0); 99 108 } ··· 112 121 smf->mthd_ofs = 0; 113 122 smf->mtrk_ofs = 14; 114 123 smf->mtrk_size = 0; 124 + 125 + smf->status = 0; 126 + smf->buf_idx = 0; 127 + smf->buf_cnt = 0; 128 + 129 + smf->clock_inited = 0; 115 130 116 131 if (smf_write_header (smf)) { 117 132 smf->fp = NULL; 118 133 return (1); 119 134 } 120 135 121 - str = "Created by pce-atarist version " PCE_VERSION_STR; 136 + str = "Created by pce-atarist " PCE_VERSION_STR; 122 137 123 138 smf_put_meta (smf, 0x01, str, strlen (str)); 124 139 ··· 126 141 } 127 142 128 143 static 129 - int smf_auto_open (st_smf_t *smf) 130 - { 131 - unsigned i; 132 - unsigned val; 133 - char str[256]; 134 - 135 - if (smf->auto_name == NULL) { 136 - return (smf->fp == NULL); 137 - } 138 - 139 - i = 0; 140 - while (smf->auto_name[i] != 0) { 141 - str[i] = smf->auto_name[i]; 142 - i += 1; 143 - } 144 - 145 - str[i] = 0; 146 - 147 - val = ++smf->auto_index; 148 - 149 - while (i > 0) { 150 - i -= 1; 151 - 152 - if (str[i] == '#') { 153 - str[i] = '0' + (val % 10); 154 - val = val / 10; 155 - } 156 - } 157 - 158 - return (st_smf_set_file (smf, str)); 159 - } 160 - 161 - static 162 144 void smf_put_varint (st_smf_t *smf, unsigned long val) 163 145 { 164 146 unsigned i; 165 147 unsigned char buf[16]; 148 + 149 + if (smf->fp == NULL) { 150 + return; 151 + } 166 152 167 153 i = 0; 168 154 ··· 185 171 unsigned i; 186 172 unsigned long delta; 187 173 174 + if (smf->fp == NULL) { 175 + return; 176 + } 177 + 188 178 if (smf->clock_inited) { 189 179 delta = (smf->evt_clk - smf->clock) / (SMF_CLOCK / SMF_TICKS / 2); 190 180 } ··· 192 182 delta = 0; 193 183 } 194 184 195 - if ((smf->fp == NULL) || (delta > (15 * 2 * SMF_TICKS))) { 196 - if (smf_auto_open (smf)) { 197 - return; 198 - } 199 - 200 - delta = 0; 201 - } 202 - 203 185 smf->clock = smf->evt_clk; 204 186 smf->clock_inited = 1; 205 187 ··· 226 208 unsigned i; 227 209 const unsigned char *tmp; 228 210 211 + if (smf->fp == NULL) { 212 + return; 213 + } 214 + 229 215 tmp = buf; 230 216 231 217 fputc (0, smf->fp); ··· 247 233 248 234 void st_smf_set_uint8 (st_smf_t *smf, unsigned char val, unsigned long clk) 249 235 { 236 + if (smf->fp == NULL) { 237 + return; 238 + } 239 + 250 240 if (smf->status == 0xf0) { 251 241 if (smf->buf_idx >= sizeof (smf->buf)) { 252 242 return; ··· 321 311 { 322 312 smf->fp = NULL; 323 313 324 - smf->auto_name = NULL; 325 - smf->auto_index = 0; 326 - 327 314 smf->status = 0; 328 315 smf->buf_idx = 0; 329 316 smf->buf_cnt = 0; 317 + 318 + smf->clock_inited = 0; 330 319 } 331 320 332 321 void st_smf_free (st_smf_t *smf) ··· 340 329 341 330 smf_close (smf); 342 331 332 + if ((fname == NULL) || (*fname == 0)) { 333 + return (0); 334 + } 335 + 343 336 if ((fp = fopen (fname, "wb")) == NULL) { 344 337 return (1); 345 338 } ··· 351 344 352 345 return (0); 353 346 } 354 - 355 - int st_smf_set_auto (st_smf_t *smf, const char *fname) 356 - { 357 - int ok; 358 - unsigned n; 359 - 360 - if (smf->auto_name != NULL) { 361 - free (smf->auto_name); 362 - smf->auto_name = NULL; 363 - } 364 - 365 - ok = 0; 366 - 367 - n = 0; 368 - while (fname[n] != 0) { 369 - if (fname[n] == '#') { 370 - ok = 1; 371 - } 372 - 373 - n += 1; 374 - } 375 - 376 - if (ok == 0) { 377 - return (st_smf_set_file (smf, fname)); 378 - } 379 - 380 - if ((smf->auto_name = malloc (n + 1)) == NULL) { 381 - return (1); 382 - } 383 - 384 - strcpy (smf->auto_name, fname); 385 - 386 - return (0); 387 - }
+1 -4
src/arch/atarist/smf.h
··· 5 5 /***************************************************************************** 6 6 * File name: src/arch/atarist/smf.h * 7 7 * Created: 2013-06-23 by Hampa Hug <hampa@hampa.ch> * 8 - * Copyright: (C) 2011-2013 Hampa Hug <hampa@hampa.ch> * 8 + * Copyright: (C) 2013-2016 Hampa Hug <hampa@hampa.ch> * 9 9 *****************************************************************************/ 10 10 11 11 /***************************************************************************** ··· 29 29 30 30 typedef struct { 31 31 FILE *fp; 32 - char *auto_name; 33 - unsigned auto_index; 34 32 35 33 unsigned long mthd_ofs; 36 34 unsigned long mtrk_ofs; ··· 51 49 void st_smf_free (st_smf_t *smf); 52 50 53 51 int st_smf_set_file (st_smf_t *smf, const char *fname); 54 - int st_smf_set_auto (st_smf_t *smf, const char *fname); 55 52 56 53 void st_smf_set_uint8 (st_smf_t *smf, unsigned char val, unsigned long clk); 57 54