/*
 *  IGNORE.C
 *
 *  Makes it possible to ignore CRC errors.
 *
 *  This code is (C) Copyright 1989 by Olaf Seibert. All rights reserved.
 *  May not be used or copied without a licence.
 */

#include "dev.h"
#include "device.h"


main(argc, argv)
int argc;
char **argv;
{
    struct MsgPort *port, *CreatePort();
    struct IOExtTD *tdreq, *CreateExtIO();
    UNIT *unit;
    long unitnr;
    int yesno;

    if (argc < 2) {
	Puts("Usage: ignore <unitnr> <YES/NO>\n");
	Puts("       If Yes, CRC errors will be ignored.\n");
	exit(1);
    }

    unitnr = atoi(argv[1]);
    /*
     *	Don't be misled by the name CRC_UNCHECKED.
     *	It means the opposite happens.
     */
    if (argc > 2)
	yesno = ((argv[2][0] & 0x5F) == 'Y') ? TDERR_NoError : CRC_UNCHECKED;
    else
	yesno = -42;

    if (port = CreatePort(NULL, 0L)) {
	if (tdreq = CreateExtIO(port, (long)sizeof(*tdreq))) {
	    OpenDevice("messydisk.device", unitnr, tdreq, 0L);
	    if (tdreq->iotd_Req.io_Device) {
		unit = (UNIT *)tdreq->iotd_Req.io_Unit;
		if (yesno != -42)
		    unit->mu_InitSectorStatus = yesno;
		else if (unit->mu_InitSectorStatus == CRC_UNCHECKED)
		    Puts("No\n");
		else
		    Puts("Yes\n");
		CloseDevice(tdreq);
	    } else
		Puts("Cannot OpenDevice messydisk\n");
	    DeleteExtIO(tdreq);
	} else
	    Puts("No memory for I/O request\n");
	DeletePort(port);
    } else
	Puts("No memory for replyport\n");
}

Puts(string)
char *string;
{
    long Output();

    Write(Output(), string, (long)strlen(string));
}

_wb_parse(){}
