Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1487 lines
46 KiB

/*******************************************************************************
**
** 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 <windows.h>
#include <string.h>
#include <stdio.h> // 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;i<NumBytes;i++ )
{
pItemInfo->bParam[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;i<NumBytes;i++ )
{
pItemInfo->bParam[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;i<NumBytes;i++ )
{
pItemInfo->bParam[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<MAX_USAGE_PAGES;i++)
SendMessage(hwndListBox,LB_ADDSTRING,0,(LPARAM)szUsagePage[i]);
SendMessage(hwndListBox,LB_SETCURSEL,0,0);
SetFocus(hwndListBox);
return TRUE;
case WM_COMMAND:
switch( LOWORD(wParam) )
{
case IDC_LIST1:
if( HIWORD(wParam) == LBN_DBLCLK )
{
gUsagePageVal = (BYTE) SendMessage(hwndListBox,LB_GETCURSEL,0,0);
EndDialog(hDlg,TRUE);
}
if( HIWORD(wParam) == LBN_SELCHANGE )
gUsagePageVal = (BYTE) SendMessage(hwndListBox,LB_GETCURSEL,0,0);
return TRUE;
case IDOK:
EndDialog(hDlg,TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,FALSE);
return TRUE;
}
default:
return FALSE;
}
return FALSE;
}