As requested, the program which produces the run1/run2 output.
I also have a Native-NT version of the same program (which works as-expected, if you would like to see it too let me know.)
Jason.
_________________________________________________________________
SEEK: Now with over 50,000 dream jobs! Click here http://ninemsn.seek.com.au?hotmail
//#include <io.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <sys/mtio.h>
int fh; struct mtget stblk; struct mtop opblk;
#define BLKLEN 512
char buf [BLKLEN] = "0123456789";
void disp_stat () {
int stat;
char buf [256];ioctl (fh, MTIOCGET, (char*)&stblk); stat = stblk.mt_gstat;
/* Display tape status */ sprintf (buf, "Status: %8.8X", stat); if (GMT_EOF(stat)) strcat (buf, " EOF"); if (GMT_BOT(stat)) strcat (buf, " BOT"); if (GMT_EOT(stat)) strcat (buf, " EOT"); if (GMT_SM(stat)) strcat (buf, " SET-MARK"); if (GMT_EOD(stat)) strcat (buf, " EOD"); if (GMT_WR_PROT(stat)) strcat (buf, " WR-PROT"); if (GMT_ONLINE(stat)) strcat (buf, " ON-LINE"); if (GMT_D_6250(stat)) strcat (buf, " 6250"); if (GMT_D_1600(stat)) strcat (buf, " 1600"); if (GMT_D_800(stat)) strcat (buf, " 800"); if (GMT_DR_OPEN(stat)) strcat (buf, " NO-TAPE");
printf ("ST0: %s\n", buf);
};void common () {
printf ("stblk.mt_blkno=%d\n", stblk.mt_blkno);
};void set_blk (int len) {
int rc; if (len)
printf ("Setting length %d records.", len);
else
printf ("Setting variable records.");
fflush (stdout);opblk.mt_op = MTSETBLK; opblk.mt_count = len; rc = ioctl (fh, MTIOCTOP, (char*)&opblk);
printf (" rc=%d\n", rc);
};void my_read (int fh) {
int rc;
char buf2 [65535]; printf ("read...");
fflush (stdout);
memset (buf2, ' ', 10);
rc = read (fh, buf2, 65535);
printf (" rc=%d\n", rc);
buf2 [10] = 0;
printf ("%s\n", buf2);
disp_stat ();
common ();
};void my_write (int fh) {
int rc; printf ("write...");
fflush (stdout);
rc = write (fh, buf, BLKLEN);
printf (" rc=%d\n", rc);
disp_stat ();
common ();
};void my_bksp (int fh) {
int rc; printf ("backspace...");
fflush (stdout);
opblk.mt_op = MTBSR;
opblk.mt_count = 1;
rc = ioctl (fh, MTIOCTOP, (char*)&opblk);
printf (" rc=%d\n", rc);
disp_stat ();
common ();
};void my_rew (int fh) {
int rc; printf ("rewind...");
fflush (stdout);
opblk.mt_op = MTREW;
opblk.mt_count = 1;
rc = ioctl (fh, MTIOCTOP, (char*)&opblk);
printf (" rc=%d\n", rc);
disp_stat ();
};int main (int argc) {
int rc;printf ("Opening Tape Handle\n");
fh = open ("/dev/st0", O_RDWR);
if (fh >= 0) { rc = ioctl (fh, MTIOCGET, (char*)&stblk);
if (rc < 0) {
printf ("Failed to IOCTL the Tape\n");
} else {
common ();
}; disp_stat ();
set_blk (0); disp_stat ();
my_rew (fh); buf [0] = 'A';
my_write (fh);
my_bksp (fh);
my_read (fh);if (argc != 1) { // Use any parameter to test this case.
set_blk (0);
disp_stat ();
}; buf [0] = 'B';
my_write (fh);
my_bksp (fh);
my_read (fh);
my_rew (fh); printf ("Closing Tape Handle\n");
close (fh);} else {
printf ("Failed to Open Tape\n");
};return (0); };
-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/

