/******************************************************************************* ** ** MODULE: USER.C ** ** DESCRIPTION: Routines for getting user input for the different Entities ** ** ** ** AUTHOR: John Pierce. ** ** ** ** CREATED: 02/29/96 ** ** HISTORY: ** ** Date Author Reason ** ---------------------------------------------------------------------- ** 02/29/96 John Pierce (johnpi) Took over dev from Dan ** ** ** (C) C O P Y R I G H T M I C R O S O F T C O R P 1 9 9 5 - 1 9 9 6. ** ** A L L R I G H T S R E S E R V E D . ** *******************************************************************************/ #include #include #include // for sscanf() #include "..\include\dt.h" #include "..\include\dtrc.h" #define MAX_USAGE_PAGES 8 char szUsagePage[MAX_USAGE_PAGES][20] = { "Undefiend", // 0 "GenericDesktop", // 1 "Vehicle", // 2 "VR", // 3 "Sport", // 4 "Game", // 5 "Consumer", // 6 "Keyboard" }; // 7 /******************************************************************************* ** ** UINT AddString( HANDLE hListBox, char * szString, int Index ) ** ** DESCRIPTION: Add string "string" to list box hListBox. If flag gfInsert ** is TRUE, insert string at current position in hListBox ** ** ** PARAMETERS: hListBox Handle to the Desc window ** szString String to add ** Index Pos. to add string. If = DONT_CARE get Pos. from ** Current Selection, otherwise insert at Index ** ** RETURNS: Index of string that was added to hListbox ** *******************************************************************************/ LRESULT AddString(HANDLE hListBox,char * szString) { int Index=-1; if( gfInsert ) { Index = SendMessage(hListBox,LB_GETCURSEL,0,0); SendMessage(hListBox,LB_INSERTSTRING,(WPARAM)Index,(LPARAM)szString); return Index; } else { Index = SendMessage(hListBox,LB_INSERTSTRING,(WPARAM)Index,(LPARAM)szString); SendMessage(hListBox,LB_SETCURSEL,Index,0); return Index; } } /******************************************************************************* ** ** void GetBogusVal( HANDLE hDescListBox, int nEntity ** ** DESCRIPTION: Get user input for a bogus Item ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetBogusVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128],szTmp[4]; LRESULT Index,rc; BYTE *pb; int i,NumBytes; rc = DialogBox( ghInst,"EditBoxDlg",ghWnd , EditBoxDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = (BYTE)gEditVal; rc = DialogBox( ghInst,"EditBoxDlg",ghWnd , EditBoxDlgProc); if( rc == TRUE ) { pItemInfo->bTag = Entity[nEntity]; if( gEditVal < 0 ) // Handle negative numbers differently { if( gEditVal > -0x100 ) { pItemInfo->bTag |= 0x01; NumBytes = 1; } else if (gEditVal > -0x10000 ) { pItemInfo->bTag |= 0x02; NumBytes = 2; } else { pItemInfo->bTag |= 0x03; NumBytes = 4; } } else // Number is not negative { if( (DWORD)gEditVal < 0x80 ) { pItemInfo->bTag |= 0x01; NumBytes = 1; } else if ( (DWORD)gEditVal < 0x8000 ) { pItemInfo->bTag |= 0x02; NumBytes = 2; } else { pItemInfo->bTag |= 0x03; NumBytes = 4; } } } gwReportDescLen += NumBytes + 1; // +1 for Item tag byte wsprintf(szBuff,"UNDEFINED_TAG\t%02X ",pItemInfo->bTag); pb = (BYTE *) &gEditVal; for( i=0;ibParam[i] = *pb++; wsprintf(szTmp,"%02X ",pItemInfo->bParam[i]); strcat(szBuff,szTmp); } Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); } } /******************************************************************************* ** ** void GetUsagePageVal( HANDLE hDescListBox, int nEntity ** ** DESCRIPTION: Get user input for a UsagePage Tag ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetUsagePageVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; rc = DialogBox( ghInst,MAKEINTRESOURCE(IDD_USAGEPAGE),ghWnd , UsagePageDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = USAGE_PAGE; pItemInfo->bTag |= 0x01; // 1 BYTE of param info pItemInfo->bParam[0] = gUsagePageVal; wsprintf(szBuff,"USAGE_PAGE (%s)\t%02X %02X",szUsagePage[gUsagePageVal], pItemInfo->bTag,gUsagePageVal); Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); gwReportDescLen += 2; // Tag + Data } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); } } /******************************************************************************* ** ** void GetInputFromEditBoxSigned( HANDLE hDescListBox, int nEntity ** ** DESCRIPTION: Generic routine to get signed numeric user input from an edit field ** ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Entity that we are getting value for ** ** RETURNS: ** *******************************************************************************/ void GetInputFromEditBoxSigned( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128],szTmp[3]; int i; LRESULT Index,rc; BYTE *pb; rc = DialogBox( ghInst,"EditBoxDlg",ghWnd , EditBoxDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { int NumBytes=0; pItemInfo->bTag = Entity[nEntity]; if( gEditVal < 0 ) // Handle negative numbers differently { if( gEditVal > 0xffffff01 ) { pItemInfo->bTag |= 0x01; NumBytes = 1; } else if (gEditVal > 0xffff0001 ) { pItemInfo->bTag |= 0x02; NumBytes = 2; } else { pItemInfo->bTag |= 0x03; NumBytes = 4; } } else // Number is not negative { if( (DWORD)gEditVal < 0x80 ) // if the hi bit is set, we must { // add an upper byte of 0 so the pItemInfo->bTag |= 0x01; // numbers remain positive NumBytes = 1; } else if ( (DWORD)gEditVal < 0x8000 ) { pItemInfo->bTag |= 0x02; NumBytes = 2; } else { pItemInfo->bTag |= 0x03; NumBytes = 4; } } gwReportDescLen += NumBytes + 1; // +1 for Item Tag byte wsprintf(szBuff,"%s (%d)\t%02X ",szEntity[nEntity],gEditVal,pItemInfo->bTag); pb = (BYTE *) &gEditVal; for( i=0;ibParam[i] = *pb++; wsprintf(szTmp,"%02X ",pItemInfo->bParam[i]); strcat(szBuff,szTmp); } Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); }//end if(rc == TRUE) } /******************************************************************************* ** ** void GetInputFromEditBoxUnSigned( HANDLE hDescListBox, int nEntity ** ** DESCRIPTION: Generic routine to get unsigned numeric user input from ** an edit field ** ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Entity that we are getting value for ** ** RETURNS: ** *******************************************************************************/ void GetInputFromEditBoxUnSigned( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128],szTmp[3]; int i; LRESULT Index,rc; BYTE *pb; rc = DialogBox( ghInst,"EditBoxDlg",ghWnd , EditBoxDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { int NumBytes=0; pItemInfo->bTag = Entity[nEntity]; if( (DWORD)gEditVal < 0x100 ) { pItemInfo->bTag |= 0x01; NumBytes = 1; } else if ( (DWORD)gEditVal < 0x10000 ) { pItemInfo->bTag |= 0x02; NumBytes = 2; } else { pItemInfo->bTag |= 0x03; NumBytes = 4; } gwReportDescLen += NumBytes + 1; // +1 for Item Tag byte wsprintf(szBuff,"%s (%d)\t%02X ",szEntity[nEntity],gEditVal,pItemInfo->bTag); pb = (BYTE *) &gEditVal; for( i=0;ibParam[i] = *pb++; wsprintf(szTmp,"%02X ",pItemInfo->bParam[i]); strcat(szBuff,szTmp); } Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); }//end if(rc == TRUE) } /******************************************************************************* ** ** void GetCollectionVal( HANDLE hDescListBox,int nEntity) ** ** DESCRIPTION: Get user input for a Collection Tag ** ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetCollectionVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; rc = DialogBox( ghInst,MAKEINTRESOURCE(IDD_COLLECTION),ghWnd , CollectionDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = COLLECTION; pItemInfo->bTag |= 0x01; // Collection has 1 parm pItemInfo->bParam[0] = gCollectionVal; wsprintf(szBuff,"COLLECTION (%s)\t%02X %02X",(pItemInfo->bParam[0]) ? "Application" : "Linked", pItemInfo->bTag,pItemInfo->bParam[0]); Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); gwReportDescLen += 2; // Tag + Data } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); }//end if(rc == TRUE) } /******************************************************************************* ** ** void GetEndCollectionVal( HANDLE hDescListBox, int nEntity) ** ** DESCRIPTION: Fills in the PITEM_INFO struct with a EndCollection tag value ** ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetEndCollectionVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = END_COLLECTION; wsprintf(szBuff,"END_COLLECTION\t%02X",END_COLLECTION); Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); gwReportDescLen++; // +1 for Item Tag byte } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); } /******************************************************************************* ** ** void GetInputVal( HANDLE hDescListBox, int nEntity) ** ** DESCRIPTION: Get user input for a Input tag ** ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetInputVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; rc = DialogBox( ghInst,MAKEINTRESOURCE(IDD_OUTPUT),ghWnd , MainItemDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = INPUT; if( HIBYTE(gMainItemVal) ) pItemInfo->bTag |= 0x02; else pItemInfo->bTag |= 0x01; pItemInfo->bParam[0] = LOBYTE(gMainItemVal); pItemInfo->bParam[1] = HIBYTE(gMainItemVal); if( HIBYTE(gMainItemVal)) { wsprintf(szBuff,"INPUT (%d)\t%02X %02X %02X",gMainItemVal,pItemInfo->bTag,pItemInfo->bParam[1], pItemInfo->bParam[0] ); gwReportDescLen += 3; } else { wsprintf(szBuff,"INPUT (%d)\t%02X %02X",gMainItemVal,pItemInfo->bTag,pItemInfo->bParam[0]); gwReportDescLen += 2; } Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); } } /******************************************************************************* ** ** void GetOutputVal( HANDLE hDescListBox, int nEntity) ** ** DESCRIPTION: Get user input for a Output Tag ** ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetOutputVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; rc = DialogBox( ghInst,MAKEINTRESOURCE(IDD_OUTPUT),ghWnd , MainItemDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = OUTPUT; if( HIBYTE(gMainItemVal) ) pItemInfo->bTag |= 0x02; else pItemInfo->bTag |= 0x01; pItemInfo->bParam[0] = LOBYTE(gMainItemVal); pItemInfo->bParam[1] = HIBYTE(gMainItemVal); if( HIBYTE(gMainItemVal)) { wsprintf(szBuff,"OUTPUT (%d)\t%02X %02X %02X",gMainItemVal,pItemInfo->bTag,pItemInfo->bParam[1], pItemInfo->bParam[0] ); gwReportDescLen += 3; } else { wsprintf(szBuff,"OUTPUT (%d)\t%02X %02X",gMainItemVal,pItemInfo->bTag,pItemInfo->bParam[0]); gwReportDescLen += 2; } Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); } } /******************************************************************************* ** ** void GetFeatVal( HANDLE hDescListBox, int nEntity) ** ** DESCRIPTION: Get user input for a Feature Tag ** ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetFeatVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; rc = DialogBox( ghInst,MAKEINTRESOURCE(IDD_OUTPUT),ghWnd , MainItemDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = FEATURE; if( HIBYTE(gMainItemVal) ) pItemInfo->bTag |= 0x02; else pItemInfo->bTag |= 0x01; pItemInfo->bParam[0] = LOBYTE(gMainItemVal); pItemInfo->bParam[1] = HIBYTE(gMainItemVal); if( HIBYTE(gMainItemVal)) { wsprintf(szBuff,"FEATURE (%d)\t%02X %02X %02X",gMainItemVal,pItemInfo->bTag,pItemInfo->bParam[1], pItemInfo->bParam[0] ); gwReportDescLen += 3; } else { wsprintf(szBuff,"FEATURE (%d)\t%02X %02X",gMainItemVal,pItemInfo->bTag,pItemInfo->bParam[0]); gwReportDescLen += 2; } Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); } } /******************************************************************************* ** ** void GetExponentVal( HANDLE hDescListBox, HANDLE hHexListBox int nEntity) ** ** DESCRIPTION: Get user input for a Exponent Tag ** ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetExponentVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; rc = DialogBox( ghInst,MAKEINTRESOURCE(IDD_EXPONENT),ghWnd , ExponentDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = UNIT_EXPONENT; pItemInfo->bTag |= 0x01; // 1 BYTE of param info pItemInfo->bParam[0] = gExpVal; wsprintf(szBuff,"UNIT_EXPONENT (%d)\t%02X %02X",gExpVal,pItemInfo->bTag,pItemInfo->bParam[0]); Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); gwReportDescLen += 2; } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); } } /******************************************************************************* ** ** void GetUnitsVal( HANDLE hDescListBox, int nEntity) ** ** DESCRIPTION: Get user input for a Units Tag ** ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetUnitsVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; rc = DialogBox( ghInst,MAKEINTRESOURCE(IDD_UNIT),ghWnd , UnitDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = UNIT; pItemInfo->bTag |= 0x02; // 2 BYTE of param info pItemInfo->bParam[0] = LOBYTE(gUnitVal); pItemInfo->bParam[1] = HIBYTE(gUnitVal); wsprintf(szBuff,"UNIT (%d)\t%02X %02X %02X",gExpVal,pItemInfo->bTag,pItemInfo->bParam[0], pItemInfo->bParam[1] ); Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); gwReportDescLen += 2; } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); } } /******************************************************************************* ** ** void GetPushVal( HANDLE hDescListBox, HANDLE hHexListBox int nEntity) ** ** DESCRIPTION: Creates a ITEM_INFO struct, fills it with a tag value for ** PUSH, Send a textual representation to the Desc Window, and ** and a Hex representation to the Hex Window. Store the pointer ** to the structure in column 2 of the Hex Window. ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** ** RETURNS: ** *******************************************************************************/ void GetPushVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = PUSH; wsprintf(szBuff,"PUSH\t%02X",PUSH); Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); gwReportDescLen++; } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); } /******************************************************************************* ** ** void GetPopVal( HANDLE hDescListBox, int nEntity) ** ** DESCRIPTION: Creates a ITEM_INFO struct, fills it with a tag value for ** POP, Send a textual representation to the Desc Window, and ** and a Hex representation to the Hex Window. Store the pointer ** to the structure in the ItemData for the item. ** ** PARAMETERS: hDescListBox Handle to the Desc window ** hHexListBox Handle to the Hex window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetPopVal( HANDLE hDescListBox, int Entity ) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = POP; wsprintf(szBuff,"POP\t%02X",POP); Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); gwReportDescLen++; } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); } /******************************************************************************* ** ** void GetSetDelimiterVal( HANDLE hDescListBox,int nEntity) ** ** DESCRIPTION: Get user input for a SetDelimiter Tag ** ** ** PARAMETERS: hDescListBox Handle to the Desc window ** nEntity Not used ** ** RETURNS: ** *******************************************************************************/ void GetSetDelimiterVal( HANDLE hDescListBox, int nEntity) { PITEM_INFO pItemInfo; char szBuff[128]; LRESULT Index,rc; rc = DialogBox( ghInst,MAKEINTRESOURCE(IDD_SETDELIMITER),ghWnd , SetDelimiterDlgProc); if( rc == TRUE ) { if( pItemInfo = (PITEM_INFO) GlobalAlloc(GPTR,sizeof(ITEM_INFO)) ) { pItemInfo->bTag = SET_DELIMITER; pItemInfo->bTag |= 0x01; // SetDelimiter has 1 param pItemInfo->bParam[0] = gSetDelimiterVal; wsprintf(szBuff,"SET_DELIMITER (%s)\t%02X %02X",(pItemInfo->bParam[0]) ? "Close" : "Open", pItemInfo->bTag,pItemInfo->bParam[0]); Index = AddString(hDescListBox,szBuff); rc = SendMessage(hDescListBox,LB_SETITEMDATA,Index,(LPARAM) pItemInfo); gwReportDescLen += 2; } else MessageBox(NULL,"GlobalAlloc() Failed!","DT Error",MB_OK); }//end if(rc == TRUE) } /******************************************************************************** ** D I A L O G B O X P R O C's ** ********************************************************************************/ /******************************************************************************* ** ** BOOL APIENTRY SetDelimiterDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARM lPram) ** ** DESCRIPTION: Dialog box proc for SetDelimiter items ** ** ** PARAMETERS: Your standard Dialog box proc parms, plus.... ** ** ** RETURNS: ** *******************************************************************************/ BOOL CALLBACK SetDelimiterDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: gSetDelimiterVal = 0; SendMessage(GetDlgItem(hDlg,IDC_DELIMITOPEN),BM_SETCHECK,TRUE,0); return TRUE; case WM_COMMAND: switch( wParam ) { case IDC_DELIMITOPEN: gSetDelimiterVal = 0x00; return TRUE; case IDC_DELIMITCLOSE: gSetDelimiterVal = 0x01; return TRUE; case IDOK: EndDialog(hDlg,TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg,FALSE); return TRUE; } default: return FALSE; } return FALSE; } /******************************************************************************* ** ** BOOL APIENTRY EditBoxDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARM lPram) ** ** DESCRIPTION: Dialog box proc for Edit box input ** ** ** ** ** PARAMETERS: Your standard Dialog box proc parms, plus.... ** ** ** RETURNS: ** *******************************************************************************/ #define MAX_INTEGER 12 //"-2147483648\0" #define MAX_HEX 9 // Number bits in a DWORD + \0 int INT_MAX = 2147483647; int INT_MIN = -2147483647; BOOL CALLBACK EditBoxDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { BOOL Status; static HWND hwndEdit; char szNumber[MAX_INTEGER]; static int nBase = IDC_BASE10; static int nStringLen = MAX_INTEGER; switch(msg) { case WM_INITDIALOG: gEditVal = 0; hwndEdit = GetDlgItem(hDlg,IDC_EDIT1); SendDlgItemMessage(hDlg,nBase,BM_SETCHECK,TRUE,0); SetFocus(hwndEdit); return FALSE; case WM_COMMAND: switch( wParam ) { case IDOK: Status = GetDlgItemText(hDlg,IDC_EDIT1,szNumber,nStringLen); if( Status <= nStringLen - 1 ) { if( nBase == IDC_BASE10 ) gEditVal = atoi(szNumber); else sscanf(szNumber,"%8x",&gEditVal); if( (gEditVal <= INT_MAX) && (gEditVal >= INT_MIN) ) { EndDialog(hDlg,TRUE); return TRUE; } } SetFocus(hwndEdit); SendMessage(hwndEdit,EM_SETSEL,0,-1); return TRUE; case IDC_BASE10: nBase = IDC_BASE10; SetFocus(hwndEdit); nStringLen = MAX_INTEGER; return TRUE; case IDC_BASE16: nBase = IDC_BASE16; SetFocus(hwndEdit); nStringLen = MAX_HEX; return TRUE; case IDCANCEL: EndDialog(hDlg,FALSE); return TRUE; } default: return FALSE; } return FALSE; } /******************************************************************************* ** ** BOOL APIENTRY CollectionDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARM lPram) ** ** DESCRIPTION: Dialog box proc for Collection entities ** ** ** PARAMETERS: Your standard Dialog box proc parms, plus.... ** ** ** RETURNS: ** *******************************************************************************/ BOOL CALLBACK CollectionDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: gCollectionVal = 0; SendMessage(GetDlgItem(hDlg,IDC_LINKED),BM_SETCHECK,TRUE,0); return TRUE; case WM_COMMAND: switch( wParam ) { case IDC_LINKED: gCollectionVal = 0x00; return TRUE; case IDC_APPLICATION: gCollectionVal = 0x01; return TRUE; case IDC_DATALINK: gCollectionVal = 0x02; return TRUE; case IDOK: EndDialog(hDlg,TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg,FALSE); return TRUE; } default: return FALSE; } return FALSE; } /******************************************************************************* ** ** BOOL CALLBACK InputDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARM lPram) ** ** DESCRIPTION: Dialog box proc for Input entities ** ** ** PARAMETERS: Your standard Dialog box proc parms, plus.... ** ** ** RETURNS: ** *******************************************************************************/ /**** BOOL CALLBACK InputDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: gInputVal = 0; SendMessage(GetDlgItem(hDlg,IDC_DATA), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_ARRAY), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_ABSOLUTE), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_NOWRAP), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_LINEAR), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_PREFSTATE), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_NULL), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_NONVOL), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_BITFIELD), BM_SETCHECK,TRUE,0); return TRUE; case WM_COMMAND: switch( LOWORD(wParam) ) { // These represent bit values of 0, so clear // the bit which corresponds to the number in wParam // after subtracting 0x1000 case IDC_DATA: case IDC_ARRAY: case IDC_ABSOLUTE: case IDC_NOWRAP: case IDC_LINEAR: case IDC_PREFSTATE: case IDC_NULL: case IDC_NONVOL: case IDC_BITFIELD: gInputVal &= (wParam - 0x1000); return TRUE; // These represent bit values of 1, so set // the bit which corresponds to the number in wParam // after subtracting 0x1000 case IDC_CONST: case IDC_VARIABLE: case IDC_RELATIVE: case IDC_WRAP: case IDC_NONLINEAR: case IDC_NOPREF: case IDC_NONULL: case IDC_BUFFERED: gInputVal |= (wParam - 0x1000); return TRUE; case IDOK: EndDialog(hDlg,TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg,FALSE); return TRUE; } default: return FALSE; } return FALSE; } ***/ /******************************************************************************* ** ** BOOL CALLBACK MainItemDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARM lPram) ** ** DESCRIPTION: Dialog box proc for Input entities ** ** ** PARAMETERS: Your standard Dialog box proc parms, plus.... ** ** ** RETURNS: ** *******************************************************************************/ BOOL CALLBACK MainItemDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: gMainItemVal = 0; SendMessage(GetDlgItem(hDlg,IDC_DATA), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_ARRAY), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_ABSOLUTE), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_NOWRAP), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_LINEAR), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_PREFSTATE), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_NULL), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_NONVOL), BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_BITFIELD), BM_SETCHECK,TRUE,0); return TRUE; case WM_COMMAND: switch( LOWORD(wParam) ) { // These represent bit values of 0, so clear // the bit which corresponds to the number in wParam // after subtracting 0x1000 case IDC_DATA: case IDC_ARRAY: case IDC_ABSOLUTE: case IDC_NOWRAP: case IDC_LINEAR: case IDC_PREFSTATE: case IDC_NULL: case IDC_NONVOL: case IDC_BITFIELD: gMainItemVal &= (wParam - 0x1000); return TRUE; // These represent bit values of 1, so set // the bit which corresponds to the number in wParam // after subtracting 0x1000 case IDC_CONST: case IDC_VARIABLE: case IDC_RELATIVE: case IDC_WRAP: case IDC_NONLINEAR: case IDC_NOPREF: case IDC_NONULL: case IDC_VOL: case IDC_BUFFERED: gMainItemVal |= (wParam - 0x1000); return TRUE; case IDOK: EndDialog(hDlg,TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg,FALSE); return TRUE; } default: return FALSE; } return FALSE; } /******************************************************************************* ** ** BOOL CALLBACK UnitDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARM lPram) ** ** DESCRIPTION: Dialog box proc for Unit entities ** ** ** PARAMETERS: Your standard Dialog box proc parms, plus.... ** ** ** RETURNS: ** *******************************************************************************/ BOOL CALLBACK UnitDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: gUnitVal = 0; SendMessage(GetDlgItem(hDlg,IDC_SYSNONE),BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_ZERO1),BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_ZERO2),BM_SETCHECK,TRUE,0); SendMessage(GetDlgItem(hDlg,IDC_ZERO3),BM_SETCHECK,TRUE,0); return TRUE; case WM_COMMAND: switch( LOWORD(wParam) ) { case IDC_SYSNONE: case IDC_SILIN: case IDC_SIROT: case IDC_ENGLIN: case IDC_ENGROT: case IDC_ELECTRIC: case IDC_TEMP: case IDC_LUMINOSITY: case IDC_TBD: case IDC_VENDOR: case IDC_TBD1: case IDC_TBD2: case IDC_TBD3: case IDC_TBD4: case IDC_TBD5: case IDC_TBD6: gUnitVal |= (LOWORD(wParam) - IDC_SYSNONE); return TRUE; // Length Nibble case IDC_ZERO1: case IDC_ONE1: case IDC_TWO1: case IDC_THREE1: case IDC_FOUR1: case IDC_FIVE1: case IDC_SIX1: case IDC_SEVEN1: case IDC_NEGEIGHT1: case IDC_NEGSEVEN1: case IDC_NEGSIX1: case IDC_NEGFIVE1: case IDC_NEGFOUR1: case IDC_NEGTHREE1: case IDC_NEGTWO1: case IDC_NEGONE1: gUnitVal |= ((LOWORD(wParam) - IDC_ZERO3) << 4); return TRUE; // Mass - Nibble2 case IDC_ZERO2: case IDC_ONE2: case IDC_TWO2: case IDC_THREE2: case IDC_FOUR2: case IDC_FIVE2: case IDC_SIX2: case IDC_SEVEN2: case IDC_NEGEIGHT2: case IDC_NEGSEVEN2: case IDC_NEGSIX2: case IDC_NEGFIVE2: case IDC_NEGFOUR2: case IDC_NEGTHREE2: case IDC_NEGTWO2: case IDC_NEGONE2: gUnitVal |= ((LOWORD(wParam) - IDC_ZERO3) << 8); return TRUE; // Time - Nibble3 case IDC_ZERO3: case IDC_ONE3: case IDC_TWO3: case IDC_THREE3: case IDC_FOUR3: case IDC_FIVE3: case IDC_SIX3: case IDC_SEVEN3: case IDC_NEGEIGHT3: case IDC_NEGSEVEN3: case IDC_NEGSIX3: case IDC_NEGFIVE3: case IDC_NEGFOUR3: case IDC_NEGTHREE3: case IDC_NEGTWO3: case IDC_NEGONE3: gUnitVal |= ((LOWORD(wParam) - IDC_ZERO3) << 12); return TRUE; case IDOK: EndDialog(hDlg,TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg,FALSE); return TRUE; } default: return FALSE; } return FALSE; } /******************************************************************************* ** ** BOOL CALLBACK ExponentDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARM lPram) ** ** DESCRIPTION: Dialog box proc for Exponent entities ** ** ** PARAMETERS: Your standard Dialog box proc parms, plus.... ** ** ** RETURNS: ** *******************************************************************************/ BOOL CALLBACK ExponentDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: gExpVal = 0; SendMessage(GetDlgItem(hDlg,IDC_ZERO),BM_SETCHECK,TRUE,0); return TRUE; case WM_COMMAND: switch( LOWORD(wParam) ) { // // Exponent. Lower byte represents code case IDC_ZERO: case IDC_ONE: case IDC_TWO: case IDC_THREE: case IDC_FOUR: case IDC_FIVE: case IDC_SIX: case IDC_SEVEN: case IDC_NEGEIGHT: case IDC_NEGSEVEN: case IDC_NEGSIX: case IDC_NEGFIVE: case IDC_NEGFOUR: case IDC_NEGTHREE: case IDC_NEGTWO: case IDC_NEGONE: gExpVal = (wParam - 0x4000); return TRUE; case IDOK: EndDialog(hDlg,TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg,FALSE); return TRUE; } default: return FALSE; } return FALSE; } /******************************************************************************* ** ** BOOL CALLBACK UsagePageDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARM lPram) ** ** DESCRIPTION: Dialog box proc for UsagePage entities ** ** ** PARAMETERS: Your standard Dialog box proc parms, plus.... ** ** ** RETURNS: ** *******************************************************************************/ BOOL CALLBACK UsagePageDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static HWND hwndListBox; int i; switch(msg) { case WM_INITDIALOG: hwndListBox = GetDlgItem(hDlg,IDC_LIST1); gUsagePageVal = 0; for(i=0;i