home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / aspio02.zip / tape.c < prev    next >
C/C++ Source or Header  |  1999-08-17  |  3KB  |  155 lines

  1. /*
  2.  * $Source: r:/source/aspi/RCS/tape.c,v $
  3.  * $Revision $
  4.  * $Date: 1999/08/18 00:19:30 $
  5.  * $Locker:  $
  6.  *
  7.  *    Play with tape device.
  8.  *
  9.  * $Log: tape.c,v $
  10.  * Revision 1.3  1999/08/18 00:19:30  vitus
  11.  * - updated location of defines.h (moved)
  12.  *
  13.  * Revision 1.2  1997/09/22 02:27:32  vitus
  14.  * uses AH*() routines from library
  15.  *
  16.  * Revision 1.1  1997/09/18 01:39:43  vitus
  17.  * Initial revision
  18.  * ----------------------------------------
  19.  * Sample code to demonstrate use of ASPI Interface.
  20.  */
  21. static char const id[]="$Id: tape.c,v 1.3 1999/08/18 00:19:30 vitus Exp $";
  22.  
  23. #include <stdio.h>
  24. #include <string.h>
  25.  
  26. #define INCL_DOS
  27. #include <os2.h>
  28.  
  29. #include "../lib/defines.h"
  30. #include "scsi.h"
  31. #include "srb.h"
  32. #include "aspio.h"
  33.  
  34.  
  35.  
  36. UCHAR    buffer[5000];
  37.  
  38.  
  39.  
  40.  
  41. PRIVATE void
  42. DumpBuffer(PVOID const arg1,ULONG const len)
  43. {
  44.     ULONG i;
  45.     PUCHAR p = arg1;
  46.  
  47.     for( i = 0; i < len; ++i, ++p )
  48.     {
  49.     printf("%02X", *p);
  50.     if( ((i + 1) % 16) == 0 )
  51.         printf("\n");
  52.     else if( ((i + 1) % 8) == 0 )
  53.         printf("-");
  54.     else
  55.         printf(" ");
  56.     }
  57.     putchar('\n');
  58. }
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65. PUBLIC int
  66. main(int argc,char *argv[])
  67. {
  68.     APIRET        rc;
  69.     unsigned        ha = -1, target = -1, lun = -1;
  70.     UCHAR    type;                /* see SCSI spec */
  71.  
  72.     if( argc == 4 )
  73.     {
  74.     sscanf(argv[1], " %u", &ha);
  75.     sscanf(argv[2], " %u", &target);
  76.     sscanf(argv[3], " %u", &lun);
  77.     }
  78.     if( ha > 7  ||  target > 7  ||  lun > 7 )
  79.     {
  80.     fprintf(stderr,
  81.         "Invalid parameter\n"
  82.         "usage: tape <ha> <target> <lun>\n");
  83.     return 1;
  84.     }
  85.  
  86.     printf("Parameter: %u %u %u\n", ha, target, lun);
  87.     rc = AspiOpen(0);
  88.     if( rc != 0 )
  89.     {
  90.     fprintf(stderr, "AspiOpen - rc %lu (%#lx)\n", rc, rc);
  91.     return rc;
  92.     }
  93.  
  94.     do
  95.     {
  96.     rc = AspiGetType(ha, target, lun, &type);
  97.     if( rc != 0 )
  98.     {
  99.         fprintf(stderr, "AspiGetType - rc %lu (%#lx)\n", rc, rc);
  100.         break;
  101.     }
  102.  
  103.     printf("HA %u  Target %u  LUN %u\t\"%s\" (%s)\n",
  104.            ha, target, lun,
  105.            AHInquiryType(type), AHInquiryQual(type));
  106.  
  107.     rc = AspiMount(ha, target, lun, 1);
  108.     if( rc != 0 )
  109.     {
  110.         fprintf(stderr, "AspiMount - rc %lu (%#lx)\n", rc, rc);
  111.         DumpBuffer(&strLastSense, sizeof(strLastSense));
  112.         break;
  113.     }
  114.  
  115.     rc = AspiRewind(ha, target, lun);
  116.     if( rc != 0 )
  117.     {
  118.         fprintf(stderr, "AspiRewind - rc %lu (%#lx)\n", rc, rc);
  119.         DumpBuffer(&strLastSense, sizeof(strLastSense));
  120.         break;
  121.     }
  122.  
  123.     memset(buffer, 0, sizeof(buffer));
  124.     rc = AspiReadSeq(ha, target, lun, 1, 1, buffer, sizeof(buffer));
  125.     if( rc != 0 )
  126.     {
  127.         fprintf(stderr, "AspiReadSeq - rc %lu (%#lx)\n", rc, rc);
  128.         DumpBuffer(&strLastSense, sizeof(strLastSense));
  129.     }
  130.     else
  131.     {
  132.         printf("Dumping read buffer\n");
  133.         DumpBuffer(buffer, 512);
  134.     }
  135.  
  136.     rc = AspiMount(ha, target, lun, 0);
  137.     if( rc != 0 )
  138.     {
  139.         fprintf(stderr, "AspiMount - rc %lu (%#lx)\n", rc, rc);
  140.         DumpBuffer(&strLastSense, sizeof(strLastSense));
  141.         break;
  142.     }
  143.     }
  144.     while( 0 );
  145.  
  146.     rc = AspiClose();
  147.     if( rc != 0 )
  148.     {
  149.     fprintf(stderr, "AspiClose - rc %lu (%#lx)\n", rc, rc);
  150.     return rc;
  151.     }
  152.  
  153.     return 0;
  154. }
  155.