Home | History | Annotate | Line # | Download | only in rawwrite
rawwrite.c revision 1.1
      1  1.1  leo /*	$NetBSD: rawwrite.c,v 1.1 1996/01/07 20:57:03 leo Exp $	*/
      2  1.1  leo 
      3  1.1  leo /*
      4  1.1  leo  * Copyright (c) 1995 Leo Weppelman.
      5  1.1  leo  * All rights reserved.
      6  1.1  leo  *
      7  1.1  leo  * Redistribution and use in source and binary forms, with or without
      8  1.1  leo  * modification, are permitted provided that the following conditions
      9  1.1  leo  * are met:
     10  1.1  leo  * 1. Redistributions of source code must retain the above copyright
     11  1.1  leo  *    notice, this list of conditions and the following disclaimer.
     12  1.1  leo  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  leo  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  leo  *    documentation and/or other materials provided with the distribution.
     15  1.1  leo  * 3. All advertising materials mentioning features or use of this software
     16  1.1  leo  *    must display the following acknowledgement:
     17  1.1  leo  *      This product includes software developed by Leo Weppelman.
     18  1.1  leo  * 4. The name of the author may not be used to endorse or promote products
     19  1.1  leo  *    derived from this software without specific prior written permission
     20  1.1  leo  *
     21  1.1  leo  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     22  1.1  leo  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     23  1.1  leo  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     24  1.1  leo  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     25  1.1  leo  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     26  1.1  leo  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27  1.1  leo  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28  1.1  leo  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29  1.1  leo  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     30  1.1  leo  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  1.1  leo  */
     32  1.1  leo 
     33  1.1  leo #include <osbind.h>
     34  1.1  leo #include <stdio.h>
     35  1.1  leo #include <fcntl.h>
     36  1.1  leo #include <string.h>
     37  1.1  leo 
     38  1.1  leo #define	SECT_SIZE	512		/* Sector size			*/
     39  1.1  leo #define	NSECT_DD	18		/* Sectors per track 720Kb	*/
     40  1.1  leo #define	NSECT_HD	36		/* Sectors per track 1.44Mb	*/
     41  1.1  leo #define	NTRK		80		/* Number of tracks		*/
     42  1.1  leo 
     43  1.1  leo static void usage();
     44  1.1  leo static void brwrite();
     45  1.1  leo 
     46  1.1  leo char	buf[NSECT_HD * SECT_SIZE];
     47  1.1  leo int	vflag = 0;
     48  1.1  leo char	*progname;
     49  1.1  leo 
     50  1.1  leo main(argc, argv)
     51  1.1  leo int	argc;
     52  1.1  leo char	*argv[];
     53  1.1  leo {
     54  1.1  leo 	extern	int	optind;
     55  1.1  leo 	extern	char	*optarg;
     56  1.1  leo 	int		ch;
     57  1.1  leo 	char		*infile;
     58  1.1  leo 	int		fd;
     59  1.1  leo 	int		i;
     60  1.1  leo 	int		nsect;
     61  1.1  leo 
     62  1.1  leo 	progname = argv[0];
     63  1.1  leo 	while ((ch = getopt(argc, argv, "v")) != EOF) {
     64  1.1  leo 		switch(ch) {
     65  1.1  leo 			case 'v':
     66  1.1  leo 				vflag = 1;
     67  1.1  leo 				break;
     68  1.1  leo 			default :
     69  1.1  leo 				usage();
     70  1.1  leo 				break;
     71  1.1  leo 		}
     72  1.1  leo 	}
     73  1.1  leo 	if(optind >= argc)
     74  1.1  leo 		usage();
     75  1.1  leo 
     76  1.1  leo 	infile = argv[optind];
     77  1.1  leo 	nsect  = NSECT_DD;
     78  1.1  leo 
     79  1.1  leo 	if((fd = open(infile, O_RDONLY)) < 0) {
     80  1.1  leo 		fprintf(stderr, "%s: Cannot open '%s'\n", progname, infile);
     81  1.1  leo 		exit(1);
     82  1.1  leo 	}
     83  1.1  leo 
     84  1.1  leo 	for(i = 0; i < NTRK; i++) {
     85  1.1  leo 		if(read(fd, buf, nsect * SECT_SIZE) != (nsect * SECT_SIZE)) {
     86  1.1  leo 		    fprintf(stderr, "\nRead error on '%s'\n", progname, infile);
     87  1.1  leo 		    exit(1);
     88  1.1  leo 		}
     89  1.1  leo 		if(vflag) {
     90  1.1  leo 			if(i && !(i % 40))
     91  1.1  leo 				printf("\n");
     92  1.1  leo 			fprintf(stderr, ".");
     93  1.1  leo 		}
     94  1.1  leo 		brwrite(buf, nsect * i, nsect);
     95  1.1  leo 	}
     96  1.1  leo 	close(fd);
     97  1.1  leo 	if(vflag)
     98  1.1  leo 		printf("\n");
     99  1.1  leo }
    100  1.1  leo 
    101  1.1  leo static void brwrite(buf, blk, cnt)
    102  1.1  leo char	*buf;
    103  1.1  leo int	blk, cnt;
    104  1.1  leo {
    105  1.1  leo 	if(Rwabs(3, buf, cnt, blk, 0) != 0) {
    106  1.1  leo 		fprintf(stderr, "\n%s: Write error on floppy\n", progname);
    107  1.1  leo 		exit(1);
    108  1.1  leo 	}
    109  1.1  leo }
    110  1.1  leo 
    111  1.1  leo static void usage()
    112  1.1  leo {
    113  1.1  leo 	fprintf(stderr, "usage: rawwrite [-v] <infile>\n");
    114  1.1  leo 	exit(1);
    115  1.1  leo }
    116