Esempio n. 1
0
static int
print_filename(char *to_print, char *full_pathname)
{
  int printed_len = 0;
  char *s;

  for (s = to_print; *s; s++)
    {
      PUTX(*s);
    }
  return printed_len;
}
extern void
strategy(ReqPtr p)
{
	word rc, dseg;

	switch (p->cmd) {

	case DevInit:
		devhlp = p->u.ini.devhlp;

		dseg = ctors();

		if ((rc = DrvInit(p->u.ini.cmdline)) & ERROR) {
			p->u.ino.nunits = 0;
			p->u.ino.endCode = 0;
			p->u.ino.endData = 0;
		} else {
			p->u.ino.endCode = Offset(&end_code);
			p->u.ino.endData = dseg;
		}
		p->u.ino.bpb = 0;
		break;

	case DevBaseInit:
		devhlp = p->u.ini.devhlp;

		dseg = ctors();

		if ((rc = DrvInitBase(p->u.ini.cmdline)) & ERROR) {
			p->u.ino.nunits = 0;
			p->u.ino.endCode = 0;
			p->u.ino.endData = 0;
		} else {
			p->u.ino.endCode = Offset(&end_code);
			p->u.ino.endData = dseg;
			p->u.ini.cmdline = 0;
		}
		p->u.ino.bpb = 0;
		break;

	case DevRead:
		PUTS(2, "DevRead file=");
		PUTD(2, p->u.rw.fileno);
		PUTS(2, ", count=");
		PUTD(2, p->u.rw.count);
		PUTC(2, '\n');
		rc = DrvRead(p);
		break;
	case DevWrite:
		PUTS(2, "DevWrite file=");
		PUTD(2, p->u.rw.fileno);
		PUTS(2, ", count=");
		PUTD(2, p->u.rw.count);
		PUTC(2, '\n');
		rc = DrvWrite(p, 0);
		break;
	case DevWriteVerify:
		PUTS(2, "DevWriteVerify file=");
		PUTD(2, p->u.rw.fileno);
		PUTS(2, ", count=");
		PUTD(2, p->u.rw.count);
		PUTC(2, '\n');
		rc = DrvWrite(p, 1);
		break;
	case DevPeek:
		PUTS(2, "DevPeek\n");
		rc = DrvPeek(p);
		break;
	case DevInputStatus:
		PUTS(2, "DevInputStatus\n");
		rc = DrvInputStatus();
		break;
	case DevInputFlush:
		PUTS(2, "DevInputFlush\n");
		rc = DrvInputFlush();
		break;
	case DevOutputStatus:
		PUTS(2, "DevOutputStatus\n");
		rc = DrvOutputStatus();
		break;
	case DevOutputFlush:
		PUTS(2, "DevOutputFlush\n");
		rc = DrvOutputFlush();
		break;
	case DevOpen:
		PUTS(2, "DevOpen file=");
		PUTD(2, p->u.oc.fileno);
		PUTC(2, '\n');
		rc = DrvOpen(p);
		break;
	case DevClose:
		PUTS(2, "DevClose file=");
		PUTD(2, p->u.oc.fileno);
		PUTC(2, '\n');
		rc = DrvClose(p);
		break;
	case DevIOCtl:
		PUTS(2, "DevIOCtl cat=");
		PUTX(2, p->u.ioc.cat);
		PUTS(2, ", fcn=");
		PUTX(2, p->u.ioc.fcn);
		PUTS(2, ", plen=");
		PUTD(2, p->u.ioc.plen);
		PUTS(2, ", dlen=");
		PUTD(2, p->u.ioc.dlen);
		PUTC(2, '\n');
		rc = DrvIOCtl(p);
		break;
	default:
		rc = ERROR + DONE + InvalidCommand;
	}

	PUTS(2, "Status=");
	PUTX(2, rc);
	PUTC(2, '\n');
	p->status = rc;
}