This program is automatically executed when a new VxD is loaded.
static Describe(ddb,i) { auto next,x,y; x = ddb; MakeDword(x); MakeComm (x,form("Next_%ld",i)); next = Dword(x); if ( next != 0 ) OpOffset(x,0); x = x + 4; MakeWord(x); MakeName(x,form("SDK_Version_%ld",i)); OpNum (x); x = x + 2; MakeWord(x); MakeName(x,form("Req_Device_Number_%ld",i)); OpNum (x); x = x + 2; MakeByte(x); MakeName(x,form("Dev_Major_Version_%ld",i)); OpNum(x); MakeComm(x,"Major device number"); x = x + 1; MakeByte(x); MakeName(x,form("Dev_Minor_Version_%ld",i)); OpNum (x); MakeComm(x,"Minor device number"); x = x + 1; MakeWord(x); MakeName(x,form("Flags_%ld",i)); OpNum (x); MakeComm(x,"Flags for init calls complete"); x = x + 2; MakeStr (x,8); MakeName(x,form("Name_%ld",i)); MakeComm(x,"Device name"); x = x + 8; MakeDword(x); MakeName(x,form("Init_Order_%ld",i)); OpNum (x); MakeComm(x,"Initialization Order"); x = x + 4; MakeDword(x); MakeName(x,form("Control_Proc_%ld",i)); OpOffset(x,0); MakeComm(x,"Offset of control procedure"); MakeCode( Dword(x) ); MakeName( Dword(x), form("Control_%ld",i) ); x = x + 4; MakeDword(x); MakeName(x,form("V86_API_Proc_%ld",i)); MakeComm(x,"Offset of API procedure (or 0)"); y = Dword(x); if ( y != 0 ) { OpOffset(x,0); MakeCode( y ); MakeName( y, form("V86_%ld",i) ); } x = x + 4; MakeDword(x); MakeName(x,form("PM_API_Proc_%ld",i)); MakeComm(x,"Offset of API procedure (or 0)"); y = Dword(x); if ( y != 0 ) { OpOffset(x,0); MakeCode( y ); MakeName( y, form("PM_%ld",i) ); } x = x + 4; MakeDword(x); MakeName(x,form("V86_API_CSIP_%ld",i)); MakeComm(x,"CS:IP of API entry point"); x = x + 4; MakeDword(x); MakeName(x,form("PM_API_CSIP_%ld",i)); MakeComm(x,"CS:IP of API entry point"); x = x + 4; MakeDword(x); MakeName(x,form("Reference_Data_%ld",i)); MakeComm(x,"Reference data from real mode"); x = x + 4; MakeDword(x); MakeName(x,form("Service_Table_Ptr_%ld",i)); MakeComm(x,"Pointer to service table"); y = Dword(x); if ( y != 0 ) { OpOffset(x,0); MakeName( y, form("Service_Table_%ld",i) ); MakeDword(y); MakeArray( y, Dword(x+4) ); } x = x + 4; MakeDword(x); MakeName(x,form("Service_Size_%ld",i)); MakeComm(x,"Number of services"); x = x + 4; return next; } //----------------------------------------------------------------------- static main() { auto ea; auto i; i = 0; ea = ScreenEA(); while ( GetFlags(ea) != 0 ) { // While ea points to valid address ea = Describe(ea,i); if ( ea == 0 ) break; i = i + 1; } }