--- hercules/Makefile Tue Jun 11 15:57:05 2002 +++ hercules/Makefile Mon Jun 24 17:10:51 2002 @@ -7,6 +7,7 @@ PORTNAME= hercules PORTVERSION= 2.15 +PORTREVISION= 1 CATEGORIES= emulators MASTER_SITES= http://www.conmicro.cx/hercules/ --- hercules/files/patch-aa Thu Jan 1 01:00:00 1970 +++ hercules/files/patch-aa Mon Jun 24 15:32:07 2002 @@ -0,0 +1,57 @@ +diff -uNr ckddasd.c +--- ckddasd.c Tue Nov 20 17:39:46 2001 ++++ ckddasd.c Tue Jan 15 22:03:48 2002 +@@ -786,7 +786,7 @@ + { + /* if lazy write, write the last track image */ + if (dev->ckdlazywrt) +- ckd_lseek (dev, -1, -1, -1); ++ ckd_lseek (dev, -1, (off_t)-1, -1); + + /* free the cache */ + for (i = 0; i < dev->ckdcachenbr; i++) +@@ -1240,7 +1240,7 @@ + + DEVTRACE("ckddasd: skipping %d bytes\n", skiplen); + +- rc = ckd_lseek (dev, dev->fd, skiplen, SEEK_CUR); ++ rc = ckd_lseek (dev, dev->fd, (off_t)skiplen, SEEK_CUR); + if (rc == -1) + { + #ifdef OPTION_SYNCIO +@@ -1734,7 +1734,7 @@ + ckdlen = CKDDASD_RECHDR_SIZE + keylen + datalen; + + /* Determine the current position in the file */ +- curpos = ckd_lseek (dev, dev->fd, 0, SEEK_CUR); ++ curpos = ckd_lseek (dev, dev->fd, (off_t)0, SEEK_CUR); + if (curpos == -1) + { + #ifdef OPTION_SYNCIO +@@ -1782,7 +1782,7 @@ + } + + /* Backspace over end of track marker */ +- rc = ckd_lseek (dev, dev->fd, -(CKDDASD_RECHDR_SIZE), SEEK_CUR); ++ rc = ckd_lseek (dev, dev->fd, -(off_t)(CKDDASD_RECHDR_SIZE), SEEK_CUR); + if (rc == -1) + { + #ifdef OPTION_SYNCIO +@@ -1854,7 +1854,7 @@ + ckdlen = CKDDASD_RECHDR_SIZE + keylen + datalen; + + /* Determine the current position in the file */ +- curpos = ckd_lseek (dev, dev->fd, 0, SEEK_CUR); ++ curpos = ckd_lseek (dev, dev->fd, (off_t)0, SEEK_CUR); + if (curpos == -1) + { + #ifdef OPTION_SYNCIO +@@ -1938,7 +1938,7 @@ + } + + /* Backspace over end of track marker */ +- rc = ckd_lseek (dev, dev->fd, -(CKDDASD_RECHDR_SIZE), SEEK_CUR); ++ rc = ckd_lseek (dev, dev->fd, -(off_t)(CKDDASD_RECHDR_SIZE), SEEK_CUR); + if (rc == -1) + { + #ifdef OPTION_SYNCIO --- hercules/files/patch-ab Thu Jan 1 01:00:00 1970 +++ hercules/files/patch-ab Mon Jun 24 15:32:07 2002 @@ -0,0 +1,12 @@ +--- Makefile.am Tue Oct 30 16:44:39 2001 ++++ Makefile.am Mon Mar 11 02:44:03 2002 +@@ -93,8 +93,8 @@ + + tar: dist + ++install-exec-local: + if SETUID_HERCIFC +-install-exec-local: + chown root $(DESTDIR)$(bindir)/hercifc + chmod 0751 $(DESTDIR)$(bindir)/hercifc + chmod +s $(DESTDIR)$(bindir)/hercifc --- hercules/files/patch-ad Thu Jan 1 01:00:00 1970 +++ hercules/files/patch-ad Mon Jun 24 15:32:07 2002 @@ -0,0 +1,50 @@ +diff -uNr configure.ac +--- configure.ac Wed Dec 19 07:20:00 2001 ++++ configure.ac Thu Jan 17 22:50:57 2002 +@@ -72,6 +72,19 @@ + + AM_CONDITIONAL(BUILD_FTHREADS, [test x$build_fthreads = xtrue]) + ++dnl AC_MSG_NOTICE([Checking to see if -pthread is needed to compile]) ++ ++AC_MSG_CHECKING([wether ${CC-cc} accepts -pthread]) ++ ++echo 'void f(){}' >conftest.c ++if test -z "`${CC-cc} -pthread -c conftest.c 2>&1`"; then ++ LIBS="-pthread $LIBS" ++ AC_MSG_RESULT([yes]) ++else ++ AC_MSG_RESULT([no]) ++fi ++rm -f conftest* ++ + # Headers + AC_CHECK_HEADERS(byteswap.h) + AC_CHECK_HEADER(fenv.h,,[AC_DEFINE([NO_IEEE_SUPPORT])]) +@@ -105,6 +118,16 @@ + [AC_DEFINE([HAVE_U_INT])], + [AC_MSG_ERROR([Unable to find fixed-size data types])] )] ) + ++dnl AC_MSG_NOTICE([Checking for SCSI tape support and what type]) ++AC_CHECK_HEADER(sys/mtio.h, ++ [AC_DEFINE([HAVE_MTIO_H])]) ++ ++AC_TRY_COMPILE([#include mtio.h], ++ [mtget test; ++ int result; ++ result = test.mt_gstat; ], ++ [AC_DEFINE([GNU_MTIO_SUPPORT])]) ++ + # Compiler characteristics + + AC_C_BIGENDIAN +@@ -306,5 +329,9 @@ + [Define to provide additional information about this build]) + AH_TEMPLATE([DEBUG], + [Define to enable extra debugging code]) ++AH_TEMPLATE([HAVE_MTIO_H], ++ [Define if your system has sys/mtio.h]) ++AH_TEMPLATE([GNU_MTIO_SUPPORT], ++ [Define if you have the GNU version of mtio.h (Linux)]) + + AC_OUTPUT(Makefile util/Makefile html/Makefile) --- hercules/files/patch-ae Thu Jan 1 01:00:00 1970 +++ hercules/files/patch-ae Mon Jun 24 15:32:07 2002 @@ -0,0 +1,11 @@ +diff -uNr hercules.h +--- hercules.h Wed Dec 19 07:18:17 2001 ++++ hercules.h Tue Jan 15 20:26:56 2002 +@@ -215,6 +215,7 @@ + pthread_cond_timedwait((pcond),(plk),(timeout)) + #define initialize_detach_attr(pat) \ + pthread_attr_init((pat)); \ ++ pthread_attr_setstacksize((pat),1048576); \ + pthread_attr_setdetachstate((pat),PTHREAD_CREATE_DETACHED) + typedef void*THREAD_FUNC(void*); + #define create_thread(ptid,pat,fn,arg) \ --- hercules/files/patch-af Thu Jan 1 01:00:00 1970 +++ hercules/files/patch-af Mon Jun 24 15:32:07 2002 @@ -0,0 +1,64 @@ +diff -uNr tapecopy.c +--- tapecopy.c Thu Nov 29 07:53:46 2001 ++++ tapecopy.c Thu Jan 17 14:04:09 2002 +@@ -32,6 +32,7 @@ + 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" */ ++#ifdef GNU_MTIO_SUPPORT + static struct mt_tape_info tapeinfo[] = MT_TAPE_INFO; + static struct mt_tape_info densinfo[] = { + {0x01, "NRZI (800 bpi)"}, +@@ -59,6 +60,7 @@ + {0x8C, "EXB-8505 compressed"}, + {0x90, "EXB-8205 compressed"}, + {0, NULL}}; ++#endif + static BYTE buf[65500]; + + /*-------------------------------------------------------------------*/ +@@ -71,6 +73,7 @@ + /*-------------------------------------------------------------------*/ + static void print_status (BYTE *devname, long stat) + { ++#ifdef GNU_MTIO_SUPPORT + printf ("%s status: %8.8lX", devname, stat); + if (GMT_EOF(stat)) printf (" EOF"); + if (GMT_BOT(stat)) printf (" BOT"); +@@ -84,6 +87,7 @@ + if (GMT_D_800(stat)) printf (" 800"); + if (GMT_DR_OPEN(stat)) printf (" NOTAPE"); + printf ("\n"); ++#endif + + } /* end function print_status */ + +@@ -104,10 +108,12 @@ + return -1; + } + ++#ifdef GNU_MTIO_SUPPORT + print_status (devname, stblk.mt_gstat); + + if (GMT_EOD(stblk.mt_gstat)) return 1; + if (GMT_EOT(stblk.mt_gstat)) return 1; ++#endif + + return 0; + } /* end function print_status */ +@@ -174,6 +180,7 @@ + exit (7); + } + ++#ifdef GNU_MTIO_SUPPORT + /* Display tape status information */ + for (i = 0; tapeinfo[i].t_type != 0 + && tapeinfo[i].t_type != stblk.mt_type; i++); +@@ -201,6 +208,7 @@ + + /* Set the tape device to process variable length blocks */ + opblk.mt_op = MTSETBLK; ++#endif + opblk.mt_count = 0; + rc = ioctl (devfd, MTIOCTOP, (char*)&opblk); + if (rc < 0) --- hercules/files/patch-ag Thu Jan 1 01:00:00 1970 +++ hercules/files/patch-ag Mon Jun 24 15:32:07 2002 @@ -0,0 +1,276 @@ +diff -uNr tapedev.c +--- tapedev.c Tue Nov 20 17:39:47 2001 ++++ tapedev.c Thu Jan 17 15:07:35 2002 +@@ -194,6 +194,7 @@ + /*-------------------------------------------------------------------*/ + /* Static data areas */ + /*-------------------------------------------------------------------*/ ++#ifdef GNU_MTIO_SUPPORT + static struct mt_tape_info tapeinfo[] = MT_TAPE_INFO; + static struct mt_tape_info densinfo[] = { + {0x01, "NRZI (800 bpi)"}, +@@ -221,6 +222,7 @@ + {0x8C, "EXB-8505 compressed"}, + {0x90, "EXB-8205 compressed"}, + {0, NULL}}; ++#endif + + static PARSER ptab[] = + { +@@ -1142,6 +1144,7 @@ + /*-------------------------------------------------------------------*/ + static U32 status_scsitape (DEVBLK *dev) + { ++#ifdef HAVE_MTIO_H + U32 stat; /* Tape status bits */ + int rc; /* Return code */ + struct mtget stblk; /* Area for MTIOCGET ioctl */ +@@ -1158,6 +1161,7 @@ + dev->filename, strerror(errno)); + return 0; + } ++#ifdef GNU_MTIO_SUPPORT + stat = stblk.mt_gstat; + + /* Display tape status */ +@@ -1190,10 +1194,14 @@ + dev->prvblkpos = -1; + dev->blockid = 0; + } ++#else ++ stat = 0; ++#endif + + /* Return tape status */ + return stat; + ++#endif + } /* end function status_scsitape */ + + /*-------------------------------------------------------------------*/ +@@ -1204,6 +1212,7 @@ + /*-------------------------------------------------------------------*/ + static int open_scsitape (DEVBLK *dev, BYTE *unitstat) + { ++#ifdef HAVE_MTIO_H + int rc; /* Return code */ + int i; /* Array subscript */ + struct mtop opblk; /* Area for MTIOCTOP ioctl */ +@@ -1248,6 +1257,7 @@ + return -1; + } + ++#ifdef GNU_MTIO_SUPPORT + /* Intervention required if no tape is mounted */ + if (GMT_DR_OPEN(stblk.mt_gstat)) + { +@@ -1283,6 +1293,7 @@ + + /* Set the tape device to process variable length blocks */ + opblk.mt_op = MTSETBLK; ++#endif + opblk.mt_count = 0; + rc = ioctl (dev->fd, MTIOCTOP, (char*)&opblk); + if (rc < 0) +@@ -1311,6 +1322,12 @@ + + return 0; + ++#else ++ ++ logmsg ("HHC286I SCSI Support is disabled\n"); ++ return -1; ++ ++#endif + } /* end function open_scsitape */ + + /*-------------------------------------------------------------------*/ +@@ -1323,6 +1340,7 @@ + /*-------------------------------------------------------------------*/ + static int read_scsitape (DEVBLK *dev, BYTE *buf, BYTE *unitstat) + { ++#ifdef HAVE_MTIO_H + int rc; /* Return code */ + + /* Read data block from SCSI tape device */ +@@ -1346,6 +1364,12 @@ + /* Return block length or zero if tapemark */ + return rc; + ++#else ++ ++ logmsg ("HHC286I SCSI Support is disabled\n"); ++ return -1; ++ ++#endif + } /* end function read_scsitape */ + + /*-------------------------------------------------------------------*/ +@@ -1357,6 +1381,7 @@ + static int write_scsitape (DEVBLK *dev, BYTE *buf, U16 len, + BYTE *unitstat) + { ++#ifdef HAVE_MTIO_H + int rc; /* Return code */ + + /* Write data block to SCSI tape device */ +@@ -1376,6 +1401,12 @@ + /* Return normal status */ + return 0; + ++#else ++ ++ logmsg ("HHC286I SCSI Support is disabled\n"); ++ return -1; ++ ++#endif + } /* end function write_scsitape */ + + /*-------------------------------------------------------------------*/ +@@ -1386,6 +1417,7 @@ + /*-------------------------------------------------------------------*/ + static int write_scsimark (DEVBLK *dev, BYTE *unitstat) + { ++#ifdef HAVE_MTIO_H + int rc; /* Return code */ + struct mtop opblk; /* Area for MTIOCTOP ioctl */ + +@@ -1408,6 +1440,12 @@ + /* Return normal status */ + return 0; + ++#else ++ ++ logmsg ("HHC286I SCSI Support is disabled\n"); ++ return -1; ++ ++#endif + } /* end function write_scsimark */ + + /*-------------------------------------------------------------------*/ +@@ -1420,6 +1458,7 @@ + /*-------------------------------------------------------------------*/ + static int fsb_scsitape (DEVBLK *dev, BYTE *unitstat) + { ++#ifdef HAVE_MTIO_H + int rc; /* Return code */ + int fsrerrno; /* Value of errno after MTFSR*/ + U32 stat; /* Tape status bits */ +@@ -1434,6 +1473,7 @@ + /* Obtain tape status after forward space */ + stat = status_scsitape (dev); + ++#ifdef GNU_MTIO_SUPPORT + /* If I/O error and status indicates EOF, then a tapemark + was detected, so increment the file number and return 0 */ + if (rc < 0 && fsrerrno == EIO && GMT_EOF(stat)) +@@ -1442,6 +1482,7 @@ + dev->blockid++; + return 0; + } ++#endif + + /* Handle MTFSR error condition */ + if (rc < 0) +@@ -1460,6 +1501,12 @@ + /* Return +1 to indicate forward space successful */ + return +1; + ++#else ++ ++ logmsg ("HHC286I SCSI Support is disabled\n"); ++ return -1; ++ ++#endif + } /* end function fsb_scsitape */ + + /*-------------------------------------------------------------------*/ +@@ -1472,6 +1519,7 @@ + /*-------------------------------------------------------------------*/ + static int bsb_scsitape (DEVBLK *dev, BYTE *unitstat) + { ++#ifdef HAVE_MTIO_H + int rc; /* Return code */ + int bsrerrno; /* Value of errno after MTBSR*/ + U32 stat; /* Tape status bits */ +@@ -1480,6 +1528,7 @@ + /* Obtain tape status before backward space */ + stat = status_scsitape (dev); + ++#ifdef GNU_MTIO_SUPPORT + /* Unit check if already at start of tape */ + if (GMT_BOT(stat)) + { +@@ -1488,6 +1537,7 @@ + *unitstat = CSW_CE | CSW_DE | CSW_UC; + return -1; + } ++#endif + + /* Backspace block on SCSI tape */ + opblk.mt_op = MTBSR; +@@ -1526,6 +1576,12 @@ + /* Return +1 to indicate backspace successful */ + return +1; + ++#else ++ ++ logmsg ("HHC286I SCSI Support is disabled\n"); ++ return -1; ++ ++#endif + } /* end function bsb_scsitape */ + + /*-------------------------------------------------------------------*/ +@@ -1537,6 +1593,7 @@ + /*-------------------------------------------------------------------*/ + static int fsf_scsitape (DEVBLK *dev, BYTE *unitstat) + { ++#ifdef HAVE_MTIO_H + int rc; /* Return code */ + struct mtop opblk; /* Area for MTIOCTOP ioctl */ + +@@ -1562,6 +1619,12 @@ + /* Return normal status */ + return 0; + ++#else ++ ++ logmsg ("HHC286I SCSI Support is disabled\n"); ++ return -1; ++ ++#endif + } /* end function fsf_scsitape */ + + /*-------------------------------------------------------------------*/ +@@ -1573,6 +1636,7 @@ + /*-------------------------------------------------------------------*/ + static int bsf_scsitape (DEVBLK *dev, BYTE *unitstat) + { ++#ifdef HAVE_MTIO_H + int rc; /* Return code */ + struct mtop opblk; /* Area for MTIOCTOP ioctl */ + +@@ -1599,6 +1663,12 @@ + /* Return normal status */ + return 0; + ++#else ++ ++ logmsg ("HHC286I SCSI Support is disabled\n"); ++ return -1; ++ ++#endif + } /* end function bsf_scsitape */ + + /*-------------------------------------------------------------------*/ +@@ -2725,7 +2795,9 @@ + + case TAPEDEVT_SCSITAPE: + stat = status_scsitape (dev); ++#ifdef GNU_MTIO_SUPPORT + if (GMT_BOT(stat)) dev->sense[1] |= SENSE1_TAPE_LOADPT; ++#endif + break; + + case TAPEDEVT_OMATAPE: --- hercules/files/patch-ah Thu Jan 1 01:00:00 1970 +++ hercules/files/patch-ah Mon Jun 24 15:32:07 2002 @@ -0,0 +1,18 @@ +diff -uNr version.c +--- version.c Thu Nov 29 08:05:47 2001 ++++ version.c Thu Jan 17 14:10:55 2002 +@@ -77,6 +77,14 @@ + "No HET BZIP2 support", + #endif + ++#if defined(GNU_MTIO_SUPPORT) ++ "Using GNU tape handling", ++#elif defined(HAVE_MTIO_H) ++ "Using generic Unix tape handling", ++#else ++ "No SCSI tape support", ++#endif ++ + #if defined(CUSTOM_BUILD_STRING) + CUSTOM_BUILD_STRING, + #endif --- hercules/files/patch-tapecopy.c Sat May 25 13:02:21 2002 +++ hercules/files/patch-tapecopy.c Thu Jan 1 01:00:00 1970 @@ -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 */ --- hercules/files/patch-tapedev.c Sat May 25 13:02:21 2002 +++ hercules/files/patch-tapedev.c Thu Jan 1 01:00:00 1970 @@ -1,224 +0,0 @@ ---- tapedev.c.orig Tue Nov 20 23:39:47 2001 -+++ tapedev.c Thu Jan 31 13:06:43 2002 -@@ -131,6 +131,11 @@ - #define TAPEDEVT_SCSITAPE 3 /* Physical SCSI tape */ - #define TAPEDEVT_HET 4 /* HET format disk file */ - -+/* Can you say totally b0rken? */ -+#define MT_ST_DENSITY_MASK 1 -+#define MT_TAPE_INFO 2 -+#define MTSETBLK 3 -+#define MT_ST_DENSITY_SHIFT 4 - /*-------------------------------------------------------------------*/ - /* Structure definition for tape block headers */ - /*-------------------------------------------------------------------*/ -@@ -194,7 +199,10 @@ - /*-------------------------------------------------------------------*/ - /* Static data areas */ - /*-------------------------------------------------------------------*/ --static struct mt_tape_info tapeinfo[] = MT_TAPE_INFO; -+ -+ -+/* static struct mt_tape_info tapeinfo[] = MT_TAPE_INFO; -+ - static struct mt_tape_info densinfo[] = { - {0x01, "NRZI (800 bpi)"}, - {0x02, "PE (1600 bpi)"}, -@@ -221,7 +229,7 @@ - {0x8C, "EXB-8505 compressed"}, - {0x90, "EXB-8205 compressed"}, - {0, NULL}}; -- -+*/ - static PARSER ptab[] = - { - { "awstape", NULL }, -@@ -1151,6 +1159,7 @@ - if (dev->fd < 0) return 0; - - /* Obtain tape status */ -+/* - rc = ioctl (dev->fd, MTIOCGET, (char*)&stblk); - if (rc < 0) - { -@@ -1159,8 +1168,9 @@ - return 0; - } - stat = stblk.mt_gstat; -- -+*/ - /* Display tape status */ -+/* - if (dev->ccwtrace || dev->ccwstep) - { - sprintf (buf, "%s status: %8.8X", dev->filename, stat); -@@ -1177,10 +1187,11 @@ - if (GMT_DR_OPEN(stat)) strcat (buf, " NOTAPE"); - logmsg ("HHC215I %s\n", buf); - } -- -+*/ - /* If tape has been ejected, then close the file because - the driver will not recognize that a new tape volume - has been mounted until the file is re-opened */ -+/* - if (GMT_DR_OPEN(stat)) - { - close (dev->fd); -@@ -1190,8 +1201,10 @@ - dev->prvblkpos = -1; - dev->blockid = 0; - } -- -+*/ - /* Return tape status */ -+ -+ fprintf(stderr,"Sorry, tape support is broken.\n"); - return stat; - - } /* end function status_scsitape */ -@@ -1249,6 +1262,7 @@ - } - - /* Intervention required if no tape is mounted */ -+/* - if (GMT_DR_OPEN(stblk.mt_gstat)) - { - dev->sense[0] = SENSE_IR; -@@ -1256,8 +1270,9 @@ - *unitstat = CSW_CE | CSW_DE | CSW_UC; - return -1; - } -- -+*/ - /* Display tape status information */ -+/* - for (i = 0; tapeinfo[i].t_type != 0 - && tapeinfo[i].t_type != stblk.mt_type; i++); - -@@ -1280,8 +1295,9 @@ - else - logmsg ("HHC221I %s tape density code: 0x%lX\n", - dev->filename, density); -- -+*/ - /* Set the tape device to process variable length blocks */ -+ /* - opblk.mt_op = MTSETBLK; - opblk.mt_count = 0; - rc = ioctl (dev->fd, MTIOCTOP, (char*)&opblk); -@@ -1294,8 +1310,9 @@ - *unitstat = CSW_CE | CSW_DE | CSW_UC; - return -1; - } -- -+*/ - /* Rewind the tape to the beginning */ -+/* - opblk.mt_op = MTREW; - opblk.mt_count = 1; - rc = ioctl (dev->fd, MTIOCTOP, (char*)&opblk); -@@ -1308,7 +1325,7 @@ - *unitstat = CSW_CE | CSW_DE | CSW_UC; - return -1; - } -- -+*/ - return 0; - - } /* end function open_scsitape */ -@@ -1436,13 +1453,14 @@ - - /* If I/O error and status indicates EOF, then a tapemark - was detected, so increment the file number and return 0 */ -+/* - if (rc < 0 && fsrerrno == EIO && GMT_EOF(stat)) - { - dev->curfilen++; - dev->blockid++; - return 0; - } -- -+*/ - /* Handle MTFSR error condition */ - if (rc < 0) - { -@@ -1481,6 +1499,7 @@ - stat = status_scsitape (dev); - - /* Unit check if already at start of tape */ -+/* - if (GMT_BOT(stat)) - { - dev->sense[0] = 0; -@@ -1488,7 +1507,7 @@ - *unitstat = CSW_CE | CSW_DE | CSW_UC; - return -1; - } -- -+*/ - /* Backspace block on SCSI tape */ - opblk.mt_op = MTBSR; - opblk.mt_count = 1; -@@ -2703,12 +2722,15 @@ - U32 stat; /* SCSI tape status bits */ - - /* Indicate intervention required if no file */ -+/* - if (!strcmp (dev->filename, TAPE_UNLOADED)) - dev->sense[0] |= SENSE_IR; - - if (!(dev->fd < 0)) - { -+ */ - /* Set load point indicator if tape is at load point */ -+/* - dev->sense[1] &= ~SENSE1_TAPE_LOADPT; - switch (dev->tapedevt) - { -@@ -2732,41 +2754,14 @@ - if (dev->nxtblkpos == 0 && dev->curfilen == 1) - dev->sense[1] |= SENSE1_TAPE_LOADPT; - break; -- } /* end switch(dev->tapedevt) */ -- } /* !(fd < 0) */ -+ } -+ */ -+ /* end switch(dev->tapedevt) */ -+ - - /* Indicate Drive online to control unit */ -- dev->sense[1] |= SENSE1_TAPE_TUA; - -- /* Set file protect indicator if read-only file */ -- if (dev->readonly) -- dev->sense[1] |= SENSE1_TAPE_FP; -- else -- dev->sense[1] &= ~SENSE1_TAPE_FP; - -- /* Set Error Recovery Action Code */ -- if (dev->sense[0] & SENSE_IR) -- dev->sense[3] = 0x43; -- else if (dev->sense[0] & SENSE_CR) -- dev->sense[3] = 0x27; -- else if (dev->sense[1] & SENSE1_TAPE_FP) -- dev->sense[3] = 0x30; -- else -- dev->sense[3] = 0x29; -- -- /* Set sense bytes for 3420 */ -- if (dev->devtype != 0x3480) -- { --// dev->sense[4] |= 0x20; -- dev->sense[5] |= 0xC0; -- dev->sense[6] |= 0x03; -- dev->sense[13] = 0x80; -- dev->sense[14] = 0x01; -- dev->sense[15] = 0x00; -- dev->sense[16] = 0x01; -- dev->sense[19] = 0xFF; -- dev->sense[20] = 0xFF; -- } - - } /* end function build_sense */ - --- hercules/pkg-message Sat May 25 13:02:21 2002 +++ hercules/pkg-message Mon Jun 24 17:12:25 2002 @@ -1,8 +1,6 @@ ###################################################################### IMPORTANT - Tape operations and tapecopy are broken in this port (contain Linux -specific code that has not yet been adapted). Be sure to have a look at the docs and edit the hercules.cnf file to your needs (The sample is in ${PREFIX}/share/doc/hercules) --- hercules/pkg-plist Sat May 25 13:02:21 2002 +++ hercules/pkg-plist Mon Jun 24 17:11:59 2002 @@ -17,15 +17,15 @@ bin/tapecopy bin/tapemap bin/tapesplt -share/doc/hercules/cckddasd.html -share/doc/hercules/hercconf.html -share/doc/hercules/hercfaq.html -share/doc/hercules/hercinst.html -share/doc/hercules/herclic.html -share/doc/hercules/hercload.html -share/doc/hercules/hercnew.html -share/doc/hercules/herctcp.html -share/doc/hercules/hercules.cnf -share/doc/hercules/hercules.css -share/doc/hercules/index.html -@dirrm share/doc/hercules +%%PORTDOCS%%share/doc/hercules/cckddasd.html +%%PORTDOCS%%share/doc/hercules/hercconf.html +%%PORTDOCS%%share/doc/hercules/hercfaq.html +%%PORTDOCS%%share/doc/hercules/hercinst.html +%%PORTDOCS%%share/doc/hercules/herclic.html +%%PORTDOCS%%share/doc/hercules/hercload.html +%%PORTDOCS%%share/doc/hercules/hercnew.html +%%PORTDOCS%%share/doc/hercules/herctcp.html +%%PORTDOCS%%share/doc/hercules/hercules.cnf +%%PORTDOCS%%share/doc/hercules/hercules.css +%%PORTDOCS%%share/doc/hercules/index.html +%%PORTDOCS%%@dirrm share/doc/hercules