diff options
author | Ying-Chieh Liao <ijliao@FreeBSD.org> | 2002-06-25 05:22:11 +0000 |
---|---|---|
committer | Ying-Chieh Liao <ijliao@FreeBSD.org> | 2002-06-25 05:22:11 +0000 |
commit | c1252d8a6441358ee2c89251f27b94d21973aa31 (patch) | |
tree | 6b0735e4a9d96602019dc29c7ec146690c3e4c4a /emulators/hercules/files/patch-tapecopy.c | |
parent | remove ports/graphics/miniscrib (diff) |
Merge Mark Daniel Szlaga's tape patches into the port, Fix some PORTDOCS issues.
PR: 39785
Submitted by: maintainer
Notes
Notes:
svn path=/head/; revision=61903
Diffstat (limited to 'emulators/hercules/files/patch-tapecopy.c')
-rw-r--r-- | emulators/hercules/files/patch-tapecopy.c | 363 |
1 files changed, 0 insertions, 363 deletions
diff --git a/emulators/hercules/files/patch-tapecopy.c b/emulators/hercules/files/patch-tapecopy.c deleted file mode 100644 index a1c42c2fdaef..000000000000 --- a/emulators/hercules/files/patch-tapecopy.c +++ /dev/null @@ -1,363 +0,0 @@ ---- tapecopy.c.orig Thu Nov 29 13:53:46 2001 -+++ tapecopy.c Thu Jan 31 13:26:01 2002 -@@ -8,357 +8,18 @@ - /* prints a summary of the tape files and blocksizes. */ - /*-------------------------------------------------------------------*/ - --#include "hercules.h" -- --/*-------------------------------------------------------------------*/ --/* Structure definition for AWSTAPE block header */ --/*-------------------------------------------------------------------*/ --typedef struct _AWSTAPE_BLKHDR { -- HWORD curblkl; /* Length of this block */ -- HWORD prvblkl; /* Length of previous block */ -- BYTE flags1; /* Flags byte 1 */ -- BYTE flags2; /* Flags byte 2 */ -- } AWSTAPE_BLKHDR; -- --/* Definitions for AWSTAPE_BLKHDR flags byte 1 */ --#define AWSTAPE_FLAG1_NEWREC 0x80 /* Start of new record */ --#define AWSTAPE_FLAG1_TAPEMARK 0x40 /* Tape mark */ --#define AWSTAPE_FLAG1_ENDREC 0x20 /* End of record */ -- --/*-------------------------------------------------------------------*/ --/* Static data areas */ --/*-------------------------------------------------------------------*/ --static BYTE vollbl[] = "\xE5\xD6\xD3"; /* EBCDIC characters "VOL" */ --static BYTE hdrlbl[] = "\xC8\xC4\xD9"; /* EBCDIC characters "HDR" */ --static BYTE eoflbl[] = "\xC5\xD6\xC6"; /* EBCDIC characters "EOF" */ --static BYTE eovlbl[] = "\xC5\xD6\xE5"; /* EBCDIC characters "EOV" */ --static struct mt_tape_info tapeinfo[] = MT_TAPE_INFO; --static struct mt_tape_info densinfo[] = { -- {0x01, "NRZI (800 bpi)"}, -- {0x02, "PE (1600 bpi)"}, -- {0x03, "GCR (6250 bpi)"}, -- {0x05, "QIC-45/60 (GCR, 8000 bpi)"}, -- {0x06, "PE (3200 bpi)"}, -- {0x07, "IMFM (6400 bpi)"}, -- {0x08, "GCR (8000 bpi)"}, -- {0x09, "GCR /37871 bpi)"}, -- {0x0A, "MFM (6667 bpi)"}, -- {0x0B, "PE (1600 bpi)"}, -- {0x0C, "GCR (12960 bpi)"}, -- {0x0D, "GCR (25380 bpi)"}, -- {0x0F, "QIC-120 (GCR 10000 bpi)"}, -- {0x10, "QIC-150/250 (GCR 10000 bpi)"}, -- {0x11, "QIC-320/525 (GCR 16000 bpi)"}, -- {0x12, "QIC-1350 (RLL 51667 bpi)"}, -- {0x13, "DDS (61000 bpi)"}, -- {0x14, "EXB-8200 (RLL 43245 bpi)"}, -- {0x15, "EXB-8500 (RLL 45434 bpi)"}, -- {0x16, "MFM 10000 bpi"}, -- {0x17, "MFM 42500 bpi"}, -- {0x24, "DDS-2"}, -- {0x8C, "EXB-8505 compressed"}, -- {0x90, "EXB-8205 compressed"}, -- {0, NULL}}; --static BYTE buf[65500]; -- --/*-------------------------------------------------------------------*/ --/* ASCII to EBCDIC translate tables */ --/*-------------------------------------------------------------------*/ --#include "codeconv.h" -- --/*-------------------------------------------------------------------*/ --/* Subroutine to print tape status */ --/*-------------------------------------------------------------------*/ --static void print_status (BYTE *devname, long stat) --{ -- printf ("%s status: %8.8lX", devname, stat); -- if (GMT_EOF(stat)) printf (" EOF"); -- if (GMT_BOT(stat)) printf (" BOT"); -- if (GMT_EOT(stat)) printf (" EOT"); -- if (GMT_SM(stat)) printf (" SETMARK"); -- if (GMT_EOD(stat)) printf (" EOD"); -- if (GMT_WR_PROT(stat)) printf (" WRPROT"); -- if (GMT_ONLINE(stat)) printf (" ONLINE"); -- if (GMT_D_6250(stat)) printf (" 6250"); -- if (GMT_D_1600(stat)) printf (" 1600"); -- if (GMT_D_800(stat)) printf (" 800"); -- if (GMT_DR_OPEN(stat)) printf (" NOTAPE"); -- printf ("\n"); -- --} /* end function print_status */ -- --/*-------------------------------------------------------------------*/ --/* Subroutine to obtain and print tape status */ --/* Return value: 0=normal, 1=end of tape, -1=error */ --/*-------------------------------------------------------------------*/ --static int obtain_status (BYTE *devname, int devfd) --{ --int rc; /* Return code */ --struct mtget stblk; /* Area for MTIOCGET ioctl */ -- -- rc = ioctl (devfd, MTIOCGET, (char*)&stblk); -- if (rc < 0) -- { -- printf ("tapecopy: Error reading status of %s: %s\n", -- devname, strerror(errno)); -- return -1; -- } -- -- print_status (devname, stblk.mt_gstat); -- -- if (GMT_EOD(stblk.mt_gstat)) return 1; -- if (GMT_EOT(stblk.mt_gstat)) return 1; -- -- return 0; --} /* end function print_status */ - - /*-------------------------------------------------------------------*/ - /* TAPECOPY main entry point */ - /*-------------------------------------------------------------------*/ - int main (int argc, char *argv[]) - { --int rc; /* Return code */ --int i; /* Array subscript */ --int len; /* Block length */ --int prevlen; /* Previous block length */ --BYTE *devname; /* -> Tape device name */ --BYTE *filename; /* -> Output file name */ --int devfd; /* Tape file descriptor */ --int outfd = -1; /* Output file descriptor */ --int fileno; /* Tape file number */ --int blkcount; /* Block count */ --int minblksz; /* Minimum block size */ --int maxblksz; /* Maximum block size */ --struct mtop opblk; /* Area for MTIOCTOP ioctl */ --struct mtget stblk; /* Area for MTIOCGET ioctl */ --long density; /* Tape density code */ --BYTE labelrec[81]; /* Standard label (ASCIIZ) */ --AWSTAPE_BLKHDR awshdr; /* AWSTAPE block header */ -- -- /* Display the program identification message */ -- display_version (stderr, "Hercules tape copy program "); -- -- /* The first argument is the tape device name */ -- if (argc > 1 && argv[1] != NULL && strlen(argv[1]) > 5 -- && memcmp (argv[1], "/dev/", 5) == 0) -- { -- devname = argv[1]; -- } -- else -- { -- printf ("Usage: tapecopy /dev/st0 [outfile]\n"); -- exit (1); -- } -- -- /* The second argument is the output file name */ -- if (argc > 2 && argv[2] != NULL) -- filename = argv[2]; -- else -- filename = NULL; -- -- /* Open the tape device */ -- devfd = open (devname, O_RDONLY|O_BINARY); -- if (devfd < 0) -- { -- printf ("tapecopy: Error opening %s: %s\n", -- devname, strerror(errno)); -- exit (3); -- } - -- /* Obtain the tape status */ -- rc = ioctl (devfd, MTIOCGET, (char*)&stblk); -- if (rc < 0) -- { -- printf ("tapecopy: Error reading status of %s: %s\n", -- devname, strerror(errno)); -- exit (7); -- } - -- /* Display tape status information */ -- for (i = 0; tapeinfo[i].t_type != 0 -- && tapeinfo[i].t_type != stblk.mt_type; i++); -- -- if (tapeinfo[i].t_name != NULL) -- printf ("%s device type: %s\n", devname, tapeinfo[i].t_name); -- else -- printf ("%s device type: 0x%lX\n", devname, stblk.mt_type); -- -- density = (stblk.mt_dsreg & MT_ST_DENSITY_MASK) -- >> MT_ST_DENSITY_SHIFT; -- -- for (i = 0; densinfo[i].t_type != 0 -- && densinfo[i].t_type != density; i++); -- -- if (densinfo[i].t_name != NULL) -- printf ("%s tape density: %s\n", devname, densinfo[i].t_name); -- else -- printf ("%s tape density code: 0x%lX\n", devname, density); -- -- if (stblk.mt_gstat != 0) -- { -- print_status (devname, stblk.mt_gstat); -- } -- -- /* Set the tape device to process variable length blocks */ -- opblk.mt_op = MTSETBLK; -- opblk.mt_count = 0; -- rc = ioctl (devfd, MTIOCTOP, (char*)&opblk); -- if (rc < 0) -- { -- printf ("tapecopy: Error setting attributes for %s: %s\n", -- devname, strerror(errno)); -- exit (5); -- } -- -- /* Rewind the tape to the beginning */ -- opblk.mt_op = MTREW; -- opblk.mt_count = 1; -- rc = ioctl (devfd, MTIOCTOP, (char*)&opblk); -- if (rc < 0) -- { -- printf ("tapecopy: Error rewinding %s: %s\n", -- devname, strerror(errno)); -- exit (6); -- } -- -- /* Open the output file */ -- if (filename != NULL) -- { -- outfd = open (filename, O_WRONLY | O_CREAT | O_BINARY, -- S_IRUSR | S_IWUSR | S_IRGRP); -- if (outfd < 0) -- { -- printf ("tapecopy: Error opening %s: %s\n", -- filename, strerror(errno)); -- exit (4); -- } -- } -- -- /* Copy blocks from tape to the output file */ -- fileno = 1; -- blkcount = 0; -- minblksz = 0; -- maxblksz = 0; -- len = 0; -- -- while (1) -- { -- /* Save previous block length */ -- prevlen = len; -- -- /* Read a block from the tape */ -- len = read (devfd, buf, sizeof(buf)); -- if (len < 0) -- { -- printf ("tapecopy: Error reading %s: %s\n", -- devname, strerror(errno)); -- obtain_status (devname, devfd); -- exit (8); -- } -- -- /* Check for tape mark */ -- if (len == 0) -- { -- /* Print summary of current file */ -- printf ("File %u: Blocks=%u, block size min=%u, max=%u\n", -- fileno, blkcount, minblksz, maxblksz); -- -- /* Write tape mark to output file */ -- if (outfd >= 0) -- { -- /* Build block header for tape mark */ -- awshdr.curblkl[0] = 0; -- awshdr.curblkl[1] = 0; -- awshdr.prvblkl[0] = prevlen & 0xFF; -- awshdr.prvblkl[1] = (prevlen >> 8) & 0xFF; -- awshdr.flags1 = AWSTAPE_FLAG1_TAPEMARK; -- awshdr.flags2 = 0; -- -- /* Write block header to output file */ -- rc = write (outfd, &awshdr, sizeof(AWSTAPE_BLKHDR)); -- if (rc < sizeof(AWSTAPE_BLKHDR)) -- { -- printf ("tapecopy: Error writing %s: %s\n", -- filename, strerror(errno)); -- exit (9); -- } /* end if(rc) */ -- -- } /* end if(outfd) */ -- -- /* Reset counters for next file */ -- fileno++; -- minblksz = 0; -- maxblksz = 0; -- blkcount = 0; -- -- /* Determine whether end of tape has been read */ -- rc = obtain_status (devname, devfd); -- if (rc == 0) continue; -- if (rc > 0) printf ("End of tape\n"); -- break; -- -- } /* end if(tapemark) */ -- -- /* Count blocks and block sizes */ -- blkcount++; -- if (len > maxblksz) maxblksz = len; -- if (minblksz == 0 || len < minblksz) minblksz = len; -- -- /* Print standard labels */ -- if (len == 80 && blkcount < 4 -- && (memcmp(buf, vollbl, 3) == 0 -- || memcmp(buf, hdrlbl, 3) == 0 -- || memcmp(buf, eoflbl, 3) == 0 -- || memcmp(buf, eovlbl, 3) == 0)) -- { -- for (i=0; i < 80; i++) -- labelrec[i] = ebcdic_to_ascii[buf[i]]; -- labelrec[i] = '\0'; -- printf ("%s\n", labelrec); -- } -- else -- { -- printf ("File %u: Block %u\r", fileno, blkcount); -- } -- -- /* Write block to output file */ -- if (outfd >= 0) -- { -- /* Build the block header */ -- awshdr.curblkl[0] = len & 0xFF; -- awshdr.curblkl[1] = (len >> 8) & 0xFF; -- awshdr.prvblkl[0] = prevlen & 0xFF; -- awshdr.prvblkl[1] = (prevlen >> 8) & 0xFF; -- awshdr.flags1 = AWSTAPE_FLAG1_NEWREC -- | AWSTAPE_FLAG1_ENDREC; -- awshdr.flags2 = 0; -- -- /* Write block header to output file */ -- rc = write (outfd, &awshdr, sizeof(AWSTAPE_BLKHDR)); -- if (rc < sizeof(AWSTAPE_BLKHDR)) -- { -- printf ("tapecopy: Error writing %s: %s\n", -- filename, strerror(errno)); -- exit (10); -- } /* end if(rc) */ -- -- /* Write data block to output file */ -- rc = write (outfd, buf, len); -- if (rc < len) -- { -- printf ("tapecopy: Error writing %s: %s\n", -- filename, strerror(errno)); -- exit (11); -- } /* end if(rc) */ -- -- } /* end if(outfd) */ -- -- } /* end while */ -- -- /* Close files and exit */ -- close (devfd); -- if (filename != NULL) close (outfd); -+ /* Display the program identification message */ -+ - -+ printf("Tape copy is broken, sorry\n"); - return 0; - - } /* end function main */ |