Ejemplo n.º 1
0
t_stat punch_card (int32 ilnt, int32 mod)
{
int32 i, cbn, c1, c2;
static char pbuf[(2 * CDP_WIDTH) + 1];                  /* + null */
t_bool use_h;
UNIT *uptr;

if (s8sel)                                              /* stack 8? */
    uptr = &stack_unit[2];
else if (s4sel)                                         /* stack 4? */
    uptr = &stack_unit[4];
else uptr = &cdp_unit;                                  /* normal output */
if ((uptr->flags & UNIT_ATT) == 0)                      /* attached? */
    return SCPE_UNATT;
use_h = uptr->flags & UNIT_PCH;
ind[IN_PNCH] = s4sel = s8sel = 0;                       /* clear flags */
cbn = ((ilnt == 2) || (ilnt == 5)) && (mod == BCD_C);   /* col binary? */

M[CDP_BUF - 1] = 012;                                   /* set prev loc */
if (cbn) {                                              /* column binary */
    for (i = 0; i < CDP_WIDTH; i++) {
        c1 = bcd2ascii (M[CD_CBUF1 + i] & CHAR, use_h);
        c2 = bcd2ascii (M[CD_CBUF2 + i] & CHAR, use_h);
        if (conv_old) {
            pbuf[i] = c1;
            pbuf[i + CDP_WIDTH] = c2;
            }
        else {
            pbuf[2 * i] = c1;
            pbuf[(2 * i) + 1] = c2;
            }
        }
    for (i = 2 * CDP_WIDTH - 1; (i >= 0) && (pbuf[i] == ' '); i--)
         pbuf[i] = 0;
    pbuf[2 * CDP_WIDTH] = 0;                            /* trailing null */
    }
else {                                                  /* normal */
    for (i = 0; i < CDP_WIDTH; i++)
        pbuf[i] = bcd2ascii (M[CDP_BUF + i] & CHAR, use_h);
    for (i = CDP_WIDTH - 1; (i >= 0) && (pbuf[i] == ' '); i--)
        pbuf[i] = 0;
    pbuf[CDP_WIDTH] = 0;                                /* trailing null */
    }
fputs (pbuf, uptr->fileref);                            /* output card */
fputc ('\n', uptr->fileref);                            /* plus new line */
uptr->pos = ftell (uptr->fileref);                      /* update position */
if (ferror (uptr->fileref)) {                           /* error? */
    perror ("Card punch I/O error");
    clearerr (uptr->fileref);
    if (iochk)
        return SCPE_IOERR;
    ind[IN_PNCH] = 1;
    }
return SCPE_OK;
}
Ejemplo n.º 2
0
t_stat cdr_svc (UNIT *uptr)
{
int32 i;

if (s1sel)                                              /* stacker 1? */
    uptr = &stack_unit[1];
else if (s2sel)                                         /* stacker 2? */
    uptr = &stack_unit[2];
else uptr = &stack_unit[0];                             /* then default */
if ((uptr->flags & UNIT_ATT) == 0)                      /* attached? */
    return SCPE_OK;
for (i = 0; i < CDR_WIDTH; i++)
    rbuf[i] = bcd2ascii (rbuf[i], uptr->flags & UNIT_PCH);
for (i = CDR_WIDTH - 1; (i >= 0) && (rbuf[i] == ' '); i--)
    rbuf[i] = 0;
rbuf[CDR_WIDTH] = 0;                                    /* null at end */
fputs (rbuf, uptr->fileref);                            /* write card */
fputc ('\n', uptr->fileref);                            /* plus new line */
uptr->pos = ftell (uptr->fileref);                      /* update position */
if (ferror (uptr->fileref)) {                           /* error? */
    perror ("Card stacker I/O error");
    clearerr (uptr->fileref);
    if (iochk)
        return SCPE_IOERR;
    }
return SCPE_OK;
}
Ejemplo n.º 3
0
t_stat punch_card (int32 ilnt, int32 mod)
{
int32 i, cbn, c1, c2;
t_bool use_h;
t_stat r;

r = cdp_npr (NULL, 0, NULL, NULL);                      /* write card */
if (r != SCPE_OK)
    return r;
use_h = cdp_unit.flags & UNIT_PCH;
ind[IN_PNCH] = s4sel = s8sel = 0;                       /* clear flags */
cbn = ((ilnt == 2) || (ilnt == 5)) && (mod == BCD_C);   /* col binary? */

M[CDP_BUF - 1] = 012;                                   /* set prev loc */
if (cbn) {                                              /* column binary */
    for (i = 0; i < CDP_WIDTH; i++) {
        c1 = bcd2ascii (M[CD_CBUF1 + i] & CHAR, use_h);
        c2 = bcd2ascii (M[CD_CBUF2 + i] & CHAR, use_h);
        if (conv_old) {
            cdp_buf[i] = c1;
            cdp_buf[i + CDP_WIDTH] = c2;
            }
        else {
            cdp_buf[2 * i] = c1;
            cdp_buf[(2 * i) + 1] = c2;
            }
        }
    for (i = (2 * CDP_WIDTH) - 1; (i >= 0) && (cdp_buf[i] == ' '); i--)
         cdp_buf[i] = 0;
    cdp_buf[2 * CDP_WIDTH] = 0;                         /* trailing null */
    }
else {                                                  /* normal */
    for (i = 0; i < CDP_WIDTH; i++)
        cdp_buf[i] = bcd2ascii (M[CDP_BUF + i] & CHAR, use_h);
    for (i = CDP_WIDTH - 1; (i >= 0) && (cdp_buf[i] == ' '); i--)
        cdp_buf[i] = 0;
    cdp_buf[CDP_WIDTH] = 0;                             /* trailing null */
    }
cdp_buf_full = 1;                                       /* card buffer full */
return SCPE_OK;
}
Ejemplo n.º 4
0
t_stat inq_io (int32 flag, int32 mod)
{
int32 i, t, wm_seen = 0;
t_bool use_h = inq_unit.flags & UNIT_PCH;

ind[IN_INC] = 0;                                        /* clear inq clear */
switch (mod) {                                          /* case on mod */

    case BCD_R:                                         /* input */
/*      if (ind[IN_INR] == 0)                         */
/*          return SCPE_OK;                           *//* return if no req */
        ind[IN_INR] = 0;                                /* clear req */
        inq_puts ("[Enter]\r\n");                       /* prompt */
        for (i = 0; M[BS] != (BCD_GRPMRK + WM); i++) {  /* until GM + WM */
            while (((t = sim_poll_kbd ()) == SCPE_OK) ||
                    (t & SCPE_BREAK)) {
                if (stop_cpu)                           /* interrupt? */
                    return SCPE_STOP;
                }
            if (t < SCPE_KFLAG)                         /* if not char, err */
                return t;
            t = t & 0177;
            if ((t == '\r') || (t == '\n'))
                break;
            if (t == inq_char) {                        /* cancel? */
                ind[IN_INC] = 1;                        /* set indicator */
                inq_puts ("\r\n[Canceled]\r\n");
                return SCPE_OK;
                }
            if (i && ((i % INQ_WIDTH) == 0))
                inq_puts ("\r\n");
            sim_putchar (t);                            /* echo */
            if (flag == MD_WM) {                        /* word mark mode? */
                if ((t == '~') && (wm_seen == 0))
                    wm_seen = WM;
                else {
                    M[BS] = wm_seen | ascii2bcd (t);
                    wm_seen = 0;
                    }
                }
            else M[BS] = (M[BS] & WM) | ascii2bcd (t);
            if (!wm_seen)
                BS++;
            if (ADDR_ERR (BS)) {
                BS = BA | (BS % MAXMEMSIZE);
                return STOP_NXM;
                }
            }
        inq_puts ("\r\n");
        M[BS++] = BCD_GRPMRK + WM;
        break;

    case BCD_W:                                         /* output */
        for (i = 0; (t = M[BS++]) != (BCD_GRPMRK + WM); i++) {
            if ((flag == MD_WM) && (t & WM)) {
                if (i && ((i % INQ_WIDTH) == 0))
                    inq_puts ("\r\n");
                if (conv_old)
                    sim_putchar ('~');
                else sim_putchar ('`');
                }
            if (i && ((i % INQ_WIDTH) == 0))
                inq_puts ("\r\n");
            sim_putchar (bcd2ascii (t & CHAR, use_h));
            if (ADDR_ERR (BS)) {
                BS = BA | (BS % MAXMEMSIZE);
                return STOP_NXM;
                }
            }
        inq_puts ("\r\n");
        break;

    default:                                            /* invalid mod */
        return STOP_INVM;
        }

return SCPE_OK;
}