This program is automatically executed when a new device driver is loaded.
// // This file is executed when a new device driver is loaded. // Device drivers have extensions DRV or SYS. // #include <idc.idc> static main(void) { auto x,i,base; auto intr,strt; auto attr,cmt; auto nextbase; auto DevReq; i = 0; x = MinEA(); base = (x >> 4); // The segment base while ( 1 ) { Message("Device driver block at %04X\n",x); MakeName(x,form("NextDevice_%ld",i)); MakeWord(x); OpNumber(x,0); if ( Word(x) == 0xFFFF ) { MakeComm(x,"The last device"); } else { nextbase = base + Word(x+2); OpOff(x,0,[nextbase,0]); MakeComm(x,"Offset to the next device"); } MakeWord(x+2); OpNumber(x+2,0); MakeName(x+4,form("DevAttr_%ld",i)); MakeWord(x+4); OpNumber(x+4,0); attr = Word(x+4); cmt = ""; if ( attr & (132M\n"); if ( attr & (1 Device Request Block"); MakeComm( intr, "Device Request Block:\n" "0 db length\n" "1 db unit number\n" "2 db command code\n" "5 d? reserved\n" "0D d? command specific data"); if( Byte( strt )==0x2E && Word(strt+1)==0x1E89 && Byte(strt+5)==0x2E && Word(strt+6)==0x068C && Word(strt+3)==Word(strt+8)-2) { DevReq=Word(strt+3); Message("DevReq at %x\n",DevReq); MakeUnkn(x+DevReq,0);MakeUnkn(x+DevReq+2,0); MakeDword(x+DevReq);MakeName(x+DevReq,form("DevRequest_%ld",i)); } if ( Word(x) == 0xFFFF || ((Byte(x)==0xE9 || Byte(x)==0xEB) && i==0) ) break; if ( Dword(x) == 0 ) break; // 04.01.96 x = [ nextbase, Word(x) ]; i = i + 1; } }