This is ListScsi.m in view mode; [Download] [Up]
/* * ListScsi.m * - This, and the main routine it calls (do_inquiryall), were * written by Garance Alistair Drosehn/Mar 1994. Note that * do_inquiryall may not be safe to call at all times. For the * most part this works fine for me, but occasionally it will * totally lock up my machine for a minute or so. Thus I do * not recommend it's use (until someone can fix do_inquiryall). */ #import <ctype.h> #import "ListScsi.h" @implementation ListScsi - init { int scsiIndex, diskIndex; do_inquiryall( INQ_ALL_MAX_SCSI_CNT, &inquireAllResult, &inquire_Ereply); diskIndex = 0; for(scsiIndex = 0; scsiIndex < inquireAllResult.maxScsiCount; scsiIndex++) { if ( inquireAllResult.scsiArray[scsiIndex].deviceNumber >= 0 ) { /* there is a device with this SCSI ID index, remember * the SCSI id and increment the disk index counter */ mapDiskToScsiId[diskIndex] = scsiIndex; diskIndex++; } } /* end for(scsiIndex =... */ /* fill up the rest of the DiskToScsiId array */ for( ; diskIndex < INQ_ALL_MAX_SCSI_CNT; diskIndex++) { mapDiskToScsiId[diskIndex] = -1; } return self; } - (int) _scsiIndex:(int) devIndex { if ((devIndex < 0) || (devIndex >= INQ_ALL_MAX_SCSI_CNT)) { return -1; } return mapDiskToScsiId[devIndex]; } - (int) getTypeOfDev:(int) devNumber { struct inquiry_reply *mInq; int scsiIndex = [self _scsiIndex:devNumber]; if (scsiIndex < 0) return DEVTYPE_NOTPRESENT; mInq = &(inquireAllResult.scsiArray[scsiIndex].inqResult); return mInq->ir_devicetype; } - (int) getTypeOfDev:(int) devNumber retCharDescription:(char *)devStr { struct inquiry_reply *mInq; char tempStr[20]; int charIndex; int scsiIndex = [self _scsiIndex:devNumber]; if (scsiIndex < 0) { sprintf (devStr, "sd%d - no device attached", devNumber); return DEVTYPE_NOTPRESENT; } mInq = &(inquireAllResult.scsiArray[scsiIndex].inqResult); sprintf (devStr, "sd%d [%d]: ", devNumber, scsiIndex); /* tack on the vendor string, trimmed and prettified */ *tempStr = '\0'; strncat(tempStr, mInq->ir_vendorid, sizeof(mInq->ir_vendorid)); tempStr[sizeof(mInq->ir_vendorid)] = '\0'; for (charIndex = sizeof(mInq->ir_vendorid) - 1; charIndex > 0; charIndex--) { if (tempStr[charIndex] == ' ') tempStr[charIndex] = '\0'; else break; } for ( ; charIndex > 0; charIndex--) { if ( isupper(tempStr[charIndex]) ) tempStr[charIndex] = tolower(tempStr[charIndex]); } strcat(devStr, tempStr); /* tack on the product ID string, trimmed */ strcat(devStr, " "); *tempStr = '\0'; strncat(tempStr, mInq->ir_productid, sizeof(mInq->ir_productid)); tempStr[sizeof(mInq->ir_productid)] = '\0'; for (charIndex = sizeof(mInq->ir_productid) - 1; charIndex > 0; charIndex--) { if (tempStr[charIndex] == ' ') tempStr[charIndex] = '\0'; else break; } strcat(devStr, tempStr); /* tack on the revision info, trimmed, if it's there */ if ( (mInq->ir_revision[0] != ' ') && (mInq->ir_revision[0] != '\0')) { strcat(devStr, " (rev. "); *tempStr = '\0'; strncat(tempStr, mInq->ir_revision, sizeof(mInq->ir_revision)); tempStr[sizeof(mInq->ir_revision)] = '\0'; for (charIndex = sizeof(mInq->ir_revision) - 1; charIndex > 0; charIndex--) { if (tempStr[charIndex] == ' ') tempStr[charIndex] = '\0'; else break; } strcat(devStr, tempStr); strcat(devStr, ")"); } return mInq->ir_devicetype; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.