home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1993 #2
/
Image.iso
/
os2
/
gtak212b.zip
/
SOURCE.ZIP
/
OS2-ASPI
/
init.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-11-14
|
4KB
|
155 lines
/*****************************************************************************
* $Id: init.c,v 2.1 1992/11/14 21:00:20 ak Exp $
*****************************************************************************
* $Log: init.c,v $
* Revision 2.1 1992/11/14 21:00:20 ak
* OS/2 2.00.1 ASPI
*
* Revision 1.1.1.1 1992/01/06 20:16:00 ak
* Alpha version.
*
* Revision 1.1 1992/01/06 20:15:58 ak
* Initial revision
*
*****************************************************************************/
static char _far rcsid[] = "$Id: init.c,v 2.1 1992/11/14 21:00:20 ak Exp $";
#include "aspitape.h"
#define INCL_DOS
#include <os2.h>
static char aspiName[] = "SCSIMGR$";
/*
* Put initialization data in a separate segment.
*/
char _far noAttach[] = "Cannot attach to SCSIMGR$\n";
char _far noOpen[] = "Cannot open SCSIMGR$\n";
char _far badLine[] = "ASPITAPE command line error$\n";
char _far noTape[] = "No target ID on ASPITAPE command line\n";
char _far okMsg1[] = "ASPI tape driver installed"
" for adapter ";
char _far okMsg2[] = ", target ";
char _far okMsg3[] = ", sense mode is ";
char _far mode0Msg[] = "Sense Key";
char _far mode1Msg[] = "TDC3600";
char _far mode2Msg[] = "SCSI-2";
char _far modeXMsg[] = "invalid";
char _far * _far modeMsg[] = { mode0Msg, mode1Msg, mode2Msg };
/*
* Handle device command line.
* Line is terminated by 0.
*/
int
cmdline(char _far *line)
{
byte *name;
/*
* Skip driver name up to first argument.
*/
for (; *line && *line != ' '; ++line) ;
for (; *line == ' '; ++line) ;
/*
* First argument is device name.
*/
name = header.name;
for (; *line && *line != ' '; ++line)
if (name < header.name+8)
*name++ = *line;
while (name < header.name+8)
*name++ = ' ';
/*
* Handle arguments.
*/
for (;;++line) {
switch (*line) {
default:
return 1;
case 0:
return 0;
case ' ':
continue;
case 'D': case 'd': /* debug level */
if (*++line < '0' || *line > '9')
return 1;
trace = *line - '0';
continue;
case 'A': case 'a': /* adapter number */
if (*++line < '0' || *line > '9')
return 1;
adapter = *line - '0';
continue;
case 'T': case 't': /* target ID */
if (*++line < '0' || *line > '9')
return 1;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
target = *line - '0';
continue;
case 'S': case 's': /* sense data mode */
if (*++line < '0' || *line > '9')
return 1;
senseMode = *line - '0';
continue;
case 'V':
video_address = 0xB8000; /* VGA output */
continue;
case 'C': /* type code */
if (*++line < '0' || *line > '9')
return 1;
continue;
}
}
}
word
DrvInit(char _far *line)
{
word action;
trace = 0;
blocksize = 512;
paddrSRB = VirtToPhys(&srb);
if (AttachDD(aspiName, &aspiEntry)) {
puts(noAttach);
return ERROR+DONE+GeneralFailure;
}
if (DosOpen((PSZ)aspiName, &aspiHandle, &action, 0L, FILE_NORMAL,
OPEN_ACTION_OPEN_IF_EXISTS, OPEN_ACCESS_READWRITE
+ OPEN_SHARE_DENYNONE + OPEN_FLAGS_FAIL_ON_ERROR, 0L)) {
puts(noOpen);
return ERROR+DONE+GeneralFailure;
}
adapter = 0;
target = 0xFF;
DosClose(aspiHandle);
aspiHandle = 0;
if (cmdline(line)) {
puts(badLine);
return ERROR+DONE+GeneralFailure;
}
if (target == 0xFF) {
puts(noTape);
return ERROR+DONE+GeneralFailure;
}
puts(okMsg1);
putd(adapter);
puts(okMsg2);
putd(target);
puts(okMsg3);
puts(senseMode <= SCSI2 ? modeMsg[senseMode] : modeXMsg);
putc('\n');
return DONE;
}