⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flcopy.c

📁 早期freebsd实现
💻 C
字号:
/* * Copyright (c) 1989 The Regents of the University of California. * 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. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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. */#ifndef lintchar copyright[] ="@(#) Copyright (c) 1989 The Regents of the University of California.\n\ All rights reserved.\n";#endif /* not lint */#ifndef lintstatic char sccsid[] = "@(#)flcopy.c	5.4 (Berkeley) 1/20/91";#endif /* not lint */#include <sys/file.h>#include <stdio.h>#include "pathnames.h"int	floppydes;char	*flopname = _PATH_FLOPPY;long	dsize = 77 * 26 * 128;int	hflag;int	rflag;main(argc, argv)	register char **argv;{	extern char *optarg;	extern int optind;	static char buff[512];	register long count;	register startad = -26 * 128;	register int n, file;	register char *cp;	int ch;	while ((ch = getopt(argc, argv, "f:hrt:")) != EOF)		switch(ch) {		case 'f':			flopname = optarg;			break;		case 'h':			hflag = 1;			printf("Halftime!\n");			if ((file = open("floppy", 0)) < 0) {				printf("can't open \"floppy\"\n");				exit(1);			}			break;		case 'r':			rflag = 1;			break;		case 't':			dsize = atoi(optarg);			if (dsize <= 0 || dsize > 77) {				(void)fprintf(stderr,				    "flcopy: bad number of tracks (0 - 77).\n");				exit(2);			}			dsize *= 26 * 128;			break;		case '?':		default:			usage();		}	argc -= optind;	argv += optind;	if (!hflag) {		file = open("floppy", O_RDWR|O_CREAT|O_TRUNC, 0666);		if (file < 0) {			printf("can't open \"floppy\"\n");			exit(1);		}		for (count = dsize; count > 0 ; count -= 512) {			n = count > 512 ? 512 : count;			lread(startad, n, buff);			write(file, buff, n);			startad += 512;		}	}	if (rflag)		exit(0);	printf("Change Floppy, Hit return when done.\n");	gets(buff);	lseek(file, 0, 0);	count = dsize;	startad = -26 * 128;	for ( ; count > 0 ; count -= 512) {		n = count > 512 ? 512 : count;		read(file, buff, n);		lwrite(startad, n, buff);		startad += 512;	}	exit(0);}rt_init(){	static initized = 0;	int mode = 2;	if (initized)		return;	if (rflag)		mode = 0;	initized = 1;	if ((floppydes = open(flopname, mode)) < 0) {		printf("Floppy open failed\n");		exit(1);	}}/* * Logical to physical adress translation */longtrans(logical)	register int logical;{	register int sector, bytes, track;	logical += 26 * 128;	bytes = (logical & 127);	logical >>= 7;	sector = logical % 26;	if (sector >= 13)		sector = sector*2 +1;	else		sector *= 2;	sector += 26 + ((track = (logical / 26)) - 1) * 6;	sector %= 26;	return ((((track *26) + sector) << 7) + bytes);}lread(startad, count, obuff)	register startad, count;	register char *obuff;{	long trans();	extern floppydes;	rt_init();	while ((count -= 128) >= 0) {		lseek(floppydes, trans(startad), 0);		read(floppydes, obuff, 128);		obuff += 128;		startad += 128;	}}lwrite(startad, count, obuff)	register startad, count;	register char *obuff;{	long trans();	extern floppydes;	rt_init();	while ((count -= 128) >= 0) {		lseek(floppydes, trans(startad), 0);		write(floppydes, obuff, 128);		obuff += 128;		startad += 128;	}}usage(){	(void)fprintf(stderr, "usage: flcopy [-hr] [-f file] [-t ntracks]\n");	exit(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -