From 65217f13ffdb389e935b55930ee6a8502b954675 Mon Sep 17 00:00:00 2001 From: Joerg Wunsch Date: Mon, 2 Jul 2001 21:21:58 +0000 Subject: [PATCH] Break out the function to print the FDC error information into fdutil.c so it can be used elsewhere. --- usr.sbin/fdread/Makefile | 1 + usr.sbin/fdread/fdread.c | 48 ++---------------------- usr.sbin/fdread/fdutil.c | 80 ++++++++++++++++++++++++++++++++++++++++ usr.sbin/fdread/fdutil.h | 29 +++++++++++++++ 4 files changed, 114 insertions(+), 44 deletions(-) create mode 100644 usr.sbin/fdread/fdutil.c create mode 100644 usr.sbin/fdread/fdutil.h diff --git a/usr.sbin/fdread/Makefile b/usr.sbin/fdread/Makefile index 8d62a43ae6f3..6adacdb5a012 100644 --- a/usr.sbin/fdread/Makefile +++ b/usr.sbin/fdread/Makefile @@ -1,6 +1,7 @@ # $FreeBSD$ PROG= fdread +SRCS= fdread.c fdutil.c CFLAGS+=-Wall .include diff --git a/usr.sbin/fdread/fdread.c b/usr.sbin/fdread/fdread.c index 23ff57fba565..85336c272cfd 100644 --- a/usr.sbin/fdread/fdread.c +++ b/usr.sbin/fdread/fdread.c @@ -42,12 +42,13 @@ #include +#include "fdutil.h" + int quiet, recover; unsigned char fillbyte = 0xf0; /* "foo" */ int doread(int fd, FILE *of, const char *devname); int doreadid(int fd, unsigned int numids, unsigned int trackno); -void printstatus(struct fdc_status *fdcsp); void usage(void); void @@ -236,7 +237,7 @@ doread(int fd, FILE *of, const char *devname) recoverable = fdcs.status[2] & NE7_ST2_DD; if (!quiet) { - printstatus(&fdcs); + printstatus(&fdcs, 0); fputs(" (", stderr); if (!recoverable) fputs("not ", stderr); @@ -296,47 +297,6 @@ doread(int fd, FILE *of, const char *devname) return (nerrs? EX_IOERR: EX_OK); } -void -printstatus(struct fdc_status *fdcsp) -{ - char msgbuf[100]; - - fprintf(stderr, - "\nFDC status ST0=%#x ST1=%#x ST2=%#x C=%u H=%u R=%u N=%u:\n", - fdcsp->status[0] & 0xff, - fdcsp->status[1] & 0xff, - fdcsp->status[2] & 0xff, - fdcsp->status[3] & 0xff, - fdcsp->status[4] & 0xff, - fdcsp->status[5] & 0xff, - fdcsp->status[6] & 0xff); - - if ((fdcsp->status[0] & NE7_ST0_IC_RC) != NE7_ST0_IC_AT) { - sprintf(msgbuf, "unexcpted interrupt code %#x", - fdcsp->status[0] & NE7_ST0_IC_RC); - } else { - strcpy(msgbuf, "unexpected error code in ST1/ST2"); - - if (fdcsp->status[1] & NE7_ST1_EN) - strcpy(msgbuf, "end of cylinder (wrong format)"); - else if (fdcsp->status[1] & NE7_ST1_DE) { - if (fdcsp->status[2] & NE7_ST2_DD) - strcpy(msgbuf, "CRC error in data field"); - else - strcpy(msgbuf, "CRC error in ID field"); - } else if (fdcsp->status[1] & NE7_ST1_MA) { - if (fdcsp->status[2] & NE7_ST2_MD) - strcpy(msgbuf, "no address mark in data field"); - else - strcpy(msgbuf, "no address mark in ID field"); - } else if (fdcsp->status[2] & NE7_ST2_WC) - strcpy(msgbuf, "wrong cylinder (format mismatch)"); - else if (fdcsp->status[1] & NE7_ST1_ND) - strcpy(msgbuf, "no data (sector not found)"); - } - fputs(msgbuf, stderr); -} - int doreadid(int fd, unsigned int numids, unsigned int trackno) { @@ -367,7 +327,7 @@ doreadid(int fd, unsigned int numids, unsigned int trackno) if (ioctl(fd, FD_GSTAT, &fdcs) == -1) errx(EX_IOERR, "floppy IO error, but no FDC status"); - printstatus(&fdcs); + printstatus(&fdcs, 0); putc('\n', stderr); rv = EX_IOERR; } diff --git a/usr.sbin/fdread/fdutil.c b/usr.sbin/fdread/fdutil.c new file mode 100644 index 000000000000..fb61b30a0bf9 --- /dev/null +++ b/usr.sbin/fdread/fdutil.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2001 Joerg Wunsch + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include + +#include +#include + +#include + +#include "fdutil.h" + +void +printstatus(struct fdc_status *fdcsp, int terse) +{ + char msgbuf[100]; + + if (!terse) + fprintf(stderr, + "\nFDC status ST0=%#x ST1=%#x ST2=%#x C=%u H=%u R=%u N=%u:\n", + fdcsp->status[0] & 0xff, + fdcsp->status[1] & 0xff, + fdcsp->status[2] & 0xff, + fdcsp->status[3] & 0xff, + fdcsp->status[4] & 0xff, + fdcsp->status[5] & 0xff, + fdcsp->status[6] & 0xff); + + if ((fdcsp->status[0] & NE7_ST0_IC_RC) != NE7_ST0_IC_AT) { + sprintf(msgbuf, "unexcpted interrupt code %#x", + fdcsp->status[0] & NE7_ST0_IC_RC); + } else { + strcpy(msgbuf, "unexpected error code in ST1/ST2"); + + if (fdcsp->status[1] & NE7_ST1_EN) + strcpy(msgbuf, "end of cylinder (wrong format)"); + else if (fdcsp->status[1] & NE7_ST1_DE) { + if (fdcsp->status[2] & NE7_ST2_DD) + strcpy(msgbuf, "CRC error in data field"); + else + strcpy(msgbuf, "CRC error in ID field"); + } else if (fdcsp->status[1] & NE7_ST1_MA) { + if (fdcsp->status[2] & NE7_ST2_MD) + strcpy(msgbuf, "no address mark in data field"); + else + strcpy(msgbuf, "no address mark in ID field"); + } else if (fdcsp->status[2] & NE7_ST2_WC) + strcpy(msgbuf, "wrong cylinder (format mismatch)"); + else if (fdcsp->status[1] & NE7_ST1_ND) + strcpy(msgbuf, "no data (sector not found)"); + } + fputs(msgbuf, stderr); +} + diff --git a/usr.sbin/fdread/fdutil.h b/usr.sbin/fdread/fdutil.h new file mode 100644 index 000000000000..f4993908f047 --- /dev/null +++ b/usr.sbin/fdread/fdutil.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2001 Joerg Wunsch + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +void printstatus(struct fdc_status *fdcsp, int terse);