1
0
mirror of https://github.com/rcornwell/sims.git synced 2026-01-13 23:35:30 +00:00

SIM_CARD: Updated to new interface.

This commit is contained in:
Richard Cornwell 2018-07-05 22:02:12 -04:00
parent 72fbf111fa
commit 7fa2941940
2 changed files with 21 additions and 24 deletions

View File

@ -950,9 +950,8 @@ _sim_read_deck(UNIT * uptr, int eof)
next = card;
}
if (card->flag & CARD_ERR) {
r = SCPE_IOERR;
sim_messagef(r, "%s: %s Error (%s) in card %d\n", sim_uname(uptr),
uptr->filename, sim_error_text(r), cards);
r = SCPE_BARE_STATUS(sim_messagef(SCPE_OPENERR, "%s: %s Error (%s) in card %d\n",
sim_uname(uptr), uptr->filename, sim_error_text(r), cards));
}
/* Move data to start at begining of buffer */
/* Data is moved down to simplify the decoding of one card */
@ -964,7 +963,7 @@ _sim_read_deck(UNIT * uptr, int eof)
} while (buf.len > 0 && r == SCPE_OK);
/* If there is an error, free just read deck */
if (r != SCPE_OK || deck == NULL) {
if (r != SCPE_OK) {
while (deck != NULL) {
next = deck->next;
free(deck);
@ -1006,7 +1005,7 @@ _sim_read_deck(UNIT * uptr, int eof)
*/
t_stat
sim_punch_card(UNIT * uptr, UNIT *stkuptr, uint16 image[80])
sim_punch_card(UNIT * uptr, uint16 image[80])
{
/* Convert word record into column image */
/* Check output type, if auto or text, try and convert record to bcd first */
@ -1017,21 +1016,11 @@ sim_punch_card(UNIT * uptr, UNIT *stkuptr, uint16 image[80])
uint8 out[512];
int i;
int outp;
FILE *fo = uptr->fileref;
int mode = uptr->flags & UNIT_CARD_MODE;
int ok = 1;
struct card_context *data;
DEVICE *dptr;
if ((uptr->flags & UNIT_ATT) == 0) {
if (stkuptr != NULL && stkuptr->flags & UNIT_ATT) {
fo = stkuptr->fileref;
if ((stkuptr->flags & UNIT_CARD_MODE) != MODE_AUTO)
mode = stkuptr->flags & UNIT_CARD_MODE;
} else
return SCPE_UNATT; /* attached? */
}
data = (struct card_context *)uptr->card_ctx;
dptr = find_dev_from_unit(uptr);
outp = 0;
@ -1162,7 +1151,8 @@ sim_punch_card(UNIT * uptr, UNIT *stkuptr, uint16 image[80])
break;
}
data->punch_count++;
sim_fwrite(out, 1, outp, fo);
sim_fwrite(out, 1, outp, uptr->fileref);
uptr->pos = ftell (uptr->fileref);
/* Clear image buffer */
for (i = 0; i < 80; image[i++] = 0);
return SCPE_OK;
@ -1204,13 +1194,14 @@ t_stat sim_card_show_fmt (FILE *st, UNIT *uptr, int32 val, CONST void *desc)
t_stat
sim_card_attach(UNIT * uptr, CONST char *cptr)
{
t_stat r;
t_stat r = SCPE_OK;;
int eof = 0;
struct card_context *data;
char gbuf[30];
int i;
char *saved_filename = uptr->filename;
t_addr saved_pos = uptr->pos;
char *saved_filename;
t_bool was_attached = (uptr->flags & UNIT_ATT);
t_addr saved_pos;
static int ebcdic_init = 0;
if (strchr (cptr, ',')) { /* Restoring Attach list of files? */
@ -1245,7 +1236,9 @@ sim_card_attach(UNIT * uptr, CONST char *cptr)
if (sim_switches & SWMASK ('E'))
eof = 1;
saved_filename = uptr->filename;
uptr->filename = NULL;
saved_pos = uptr->pos;
if ((r = attach_unit(uptr, cptr)) != SCPE_OK) {
uptr->filename = saved_filename;
uptr->pos = saved_pos;
@ -1318,8 +1311,12 @@ sim_card_attach(UNIT * uptr, CONST char *cptr)
/* Go read the deck */
r = _sim_read_deck(uptr, eof);
detach_unit(uptr);
uptr->pos = saved_pos;
detach_unit(uptr);
if (was_attached) {
uptr->flags |= UNIT_ATT;
uptr->filename = saved_filename;
}
if (r == SCPE_OK) {
const char *fmt = "AUTO";
int mode = uptr->flags & UNIT_CARD_MODE;
@ -1340,8 +1337,8 @@ sim_card_attach(UNIT * uptr, CONST char *cptr)
uptr->filename = (char *)malloc (32 + strlen (cptr));
sprintf (uptr->filename, "%s-F %s %s", (eof)?"-E ": "", fmt, cptr);
}
(void)sim_messagef(SCPE_OK, "%s: %d card Deck Loaded from %s\n",
sim_uname(uptr), data->hopper_cards - cards, cptr);
r = SCPE_BARE_STATUS(sim_messagef(SCPE_OK, "%s: %d card Deck Loaded from %s\n",
sim_uname(uptr), data->hopper_cards - cards, cptr));
} else {
if (uptr->dynflags & UNIT_ATTMULT)
uptr->flags |= UNIT_ATT;
@ -1350,7 +1347,7 @@ sim_card_attach(UNIT * uptr, CONST char *cptr)
}
}
return SCPE_OK;
return r;
}
t_stat

View File

@ -88,7 +88,7 @@ extern "C" {
/* Generic routines. */
t_stat sim_read_card(UNIT * uptr, uint16 image[80]);
int sim_card_eof(UNIT * uptr);
t_stat sim_punch_card(UNIT * uptr, UNIT *stkptr, uint16 image[80]);
t_stat sim_punch_card(UNIT * uptr, uint16 image[80]);
t_stat sim_card_attach(UNIT * uptr, CONST char *file);
t_stat sim_card_detach(UNIT *uptr);