📄 comdial.c
字号:
****************************************************************************/
LRESULT CALLBACK DialDialogProc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
char szBuf[MAXDSZ];
static char szCurArea[10], szCurCountry[10];
BOOL bForeignCountry = FALSE;
if ((message == WM_COMMAND) && (LOWORD(wParam) == IDOK)) {
mytapi.szDialNumber[0] = '+';
mytapi.szDialNumber[1] = 0;
//get country code
GetDlgItemText(hwnd, IDC_COUNTRYCODE, szBuf, MAXDSZ-1);
MakeLettersIntoDigits (szBuf);
strcat(mytapi.szDialNumber, szBuf);
//get area code
GetDlgItemText(hwnd, IDC_AREACODE, szBuf, MAXDSZ-1);
MakeLettersIntoDigits (szBuf);
strcat(mytapi.szDialNumber, "(");
strcat(mytapi.szDialNumber, szBuf);
strcat(mytapi.szDialNumber, ")");
//get phone number
GetDlgItemText(hwnd, IDC_PHONENUMBER, szBuf, MAXDSZ-1);
MakeLettersIntoDigits (szBuf);
strcat(mytapi.szDialNumber, szBuf);
EndDialog (hwnd, TRUE);
return TRUE;
}
if ((message == WM_COMMAND) && (LOWORD(wParam) == IDCANCEL)) {
EndDialog (hwnd, FALSE);
return TRUE;
}
if (message == WM_INITDIALOG) {
//get current country and area
tapiGetLocationInfo (szCurCountry, szCurArea);
// initialize dialog fields
SetDlgItemText(hwnd, IDC_COUNTRYCODE, szCurCountry);
SetDlgItemText(hwnd, IDC_AREACODE, szCurArea);
return TRUE;
}
return FALSE;
}
/****************************************************************************
* C function to convert letters into dialable digits
****************************************************************************/
void MakeLettersIntoDigits (LPSTR dialstring)
{
int sz = strlen(dialstring);
char c;
int i;
for (i = 0;i<sz;i++) {
c = dialstring[i]; //get next character
//in dial string
switch (c) {
case 'A':
case 'B':
case 'C':
case 'a':
case 'b':
case 'c':
c = '2';
break;
case 'D':
case 'E':
case 'F':
case 'd':
case 'e':
case 'f':
c = '3';
break;
case 'G':
case 'H':
case 'I':
case 'g':
case 'h':
case 'i':
c = '4';
break;
case 'J':
case 'K':
case 'L':
case 'j':
case 'k':
case 'l':
c = '5';
break;
case 'M':
case 'N':
case 'O':
case 'm':
case 'n':
case 'o':
c = '6';
break;
case 'P':
case 'R':
case 'S':
case 'p':
case 'r':
case 's':
c = '7';
break;
case 'T':
case 'U':
case 'V':
case 't':
case 'u':
case 'v':
c = '8';
break;
case 'W':
case 'X':
case 'Y':
case 'w':
case 'x':
case 'y':
c = '9';
break;
case 'Z':
case 'Q':
case 'z':
case 'q':
c = '1';
break;
default:
break;
}
dialstring[i] = c;
}
} /* end function MakeLettersIntoDigits */
//---------------------------------------------------------------------------
// LRESULT NEAR CreateTTYInfo( HWND hWnd )
//
// Description:
// Creates the tty information structure and sets
// menu option availability. Returns -1 if unsuccessful.
//
// Parameters:
// HWND hWnd
// Handle to main window.
//
//---------------------------------------------------------------------------
LRESULT NEAR CreateTTYInfo( HWND hWnd )
{
PTTYINFO pTTYInfo ;
if (NULL == (pTTYInfo =
(PTTYINFO) LocalAlloc( LPTR, sizeof( TTYINFO ) )))
return ( (LRESULT) -1 ) ;
// initialize TTY info structure
COMDEV( pTTYInfo ) = 0 ;
CONNECTED( pTTYInfo ) = FALSE ;
CURSORSTATE( pTTYInfo ) = CS_HIDE ;
LOCALECHO( pTTYInfo ) = FALSE ;
AUTOWRAP( pTTYInfo ) = TRUE ;
PORT( pTTYInfo ) = 1 ;
BAUDRATE( pTTYInfo ) = CBR_9600 ;
BYTESIZE( pTTYInfo ) = 8 ;
FLOWCTRL( pTTYInfo ) = FC_RTSCTS ;
PARITY( pTTYInfo ) = NOPARITY ;
STOPBITS( pTTYInfo ) = ONESTOPBIT ;
XONXOFF( pTTYInfo ) = FALSE ;
XSIZE( pTTYInfo ) = 0 ;
YSIZE( pTTYInfo ) = 0 ;
XSCROLL( pTTYInfo ) = 0 ;
YSCROLL( pTTYInfo ) = 0 ;
XOFFSET( pTTYInfo ) = 0 ;
YOFFSET( pTTYInfo ) = 0 ;
COLUMN( pTTYInfo ) = 0 ;
ROW( pTTYInfo ) = 0 ;
HTTYFONT( pTTYInfo ) = NULL ;
FGCOLOR( pTTYInfo ) = RGB( 0, 0, 0 ) ;
USECNRECEIVE( pTTYInfo ) = TRUE ;
DISPLAYERRORS( pTTYInfo ) = TRUE ;
// clear screen space
memset( SCREEN( pTTYInfo ), ' ', MAXROWS * MAXCOLS ) ;
// setup default font information
LFTTYFONT( pTTYInfo ).lfHeight = 12 ;
LFTTYFONT( pTTYInfo ).lfWidth = 0 ;
LFTTYFONT( pTTYInfo ).lfEscapement = 0 ;
LFTTYFONT( pTTYInfo ).lfOrientation = 0 ;
LFTTYFONT( pTTYInfo ).lfWeight = 0 ;
LFTTYFONT( pTTYInfo ).lfItalic = 0 ;
LFTTYFONT( pTTYInfo ).lfUnderline = 0 ;
LFTTYFONT( pTTYInfo ).lfStrikeOut = 0 ;
LFTTYFONT( pTTYInfo ).lfCharSet = OEM_CHARSET ;
LFTTYFONT( pTTYInfo ).lfOutPrecision = OUT_DEFAULT_PRECIS ;
LFTTYFONT( pTTYInfo ).lfClipPrecision = CLIP_DEFAULT_PRECIS ;
LFTTYFONT( pTTYInfo ).lfQuality = DEFAULT_QUALITY ;
LFTTYFONT( pTTYInfo ).lfPitchAndFamily = FIXED_PITCH | FF_MODERN ;
LFTTYFONT( pTTYInfo ).lfFaceName[0] = 0;
// set TTYInfo handle before any further message processing.
SetWindowLong( hWnd, GWL_PTTYINFO, (WPARAM) pTTYInfo ) ;
// reset the character information, etc.
ResetTTYScreen( hWnd, pTTYInfo ) ;
return ( (LRESULT) TRUE ) ;
} // end of CreateTTYInfo()
//---------------------------------------------------------------------------
// BOOL NEAR DestroyTTYInfo( HWND hWnd )
//
// Description:
// Destroys block associated with TTY window handle.
//
// Parameters:
// HWND hWnd
// handle to TTY window
//
//---------------------------------------------------------------------------
BOOL NEAR DestroyTTYInfo( HWND hWnd )
{
PTTYINFO pTTYInfo ;
if (NULL == (pTTYInfo = (PTTYINFO) GetWindowLong( hWnd, GWL_PTTYINFO )))
return ( FALSE ) ;
DeleteObject( HTTYFONT( pTTYInfo ) ) ;
LocalFree( pTTYInfo ) ;
return ( TRUE ) ;
} // end of DestroyTTYInfo()
//---------------------------------------------------------------------------
// BOOL NEAR ResetTTYScreen( HWND hWnd, PTTYINFO pTTYInfo )
//
// Description:
// Resets the TTY character information and causes the
// screen to resize to update the scroll information.
//
// Parameters:
// PTTYINFO pTTYInfo
// pointer to TTY info structure
//
//---------------------------------------------------------------------------
BOOL NEAR ResetTTYScreen( HWND hWnd, PTTYINFO pTTYInfo )
{
HDC hDC ;
TEXTMETRIC tm ;
RECT rcWindow ;
if (NULL == pTTYInfo)
return ( FALSE ) ;
if (NULL != HTTYFONT( pTTYInfo ))
DeleteObject( HTTYFONT( pTTYInfo ) ) ;
HTTYFONT( pTTYInfo ) = CreateFontIndirect( &LFTTYFONT( pTTYInfo ) ) ;
hDC = GetDC( hWnd ) ;
SelectObject( hDC, HTTYFONT( pTTYInfo ) ) ;
GetTextMetrics( hDC, &tm ) ;
ReleaseDC( hWnd, hDC ) ;
XCHAR( pTTYInfo ) = tm.tmAveCharWidth ;
YCHAR( pTTYInfo ) = tm.tmHeight + tm.tmExternalLeading ;
// a slimy hack to force the scroll position, region to
// be recalculated based on the new character sizes
GetWindowRect( hWnd, &rcWindow ) ;
SendMessage( hWnd, WM_SIZE, SIZENORMAL,
(LPARAM) MAKELONG( rcWindow.right - rcWindow.left,
rcWindow.bottom - rcWindow.top ) ) ;
return ( TRUE ) ;
} // end of ResetTTYScreen()
//---------------------------------------------------------------------------
// BOOL NEAR PaintTTY( HWND hWnd )
//
// Description:
// Paints the rectangle determined by the paint struct of
// the DC.
//
// Parameters:
// HWND hWnd
// handle to TTY window (as always)
//
//---------------------------------------------------------------------------
BOOL NEAR PaintTTY( HWND hWnd )
{
int nRow, nCol, nEndRow, nEndCol, nCount, nHorzPos, nVertPos ;
HDC hDC ;
HFONT hOldFont ;
PTTYINFO pTTYInfo ;
PAINTSTRUCT ps ;
RECT rect ;
if (NULL == (pTTYInfo = (PTTYINFO) GetWindowLong( hWnd, GWL_PTTYINFO )))
return ( FALSE ) ;
hDC = BeginPaint( hWnd, &ps ) ;
hOldFont = SelectObject( hDC, HTTYFONT( pTTYInfo ) ) ;
SetTextColor( hDC, FGCOLOR( pTTYInfo ) ) ;
SetBkColor( hDC, GetSysColor( COLOR_WINDOW ) ) ;
rect = ps.rcPaint ;
nRow =
min( MAXROWS - 1,
max( 0, (rect.top + YOFFSET( pTTYInfo )) / YCHAR( pTTYInfo ) ) ) ;
nEndRow =
min( MAXROWS - 1,
((rect.bottom + YOFFSET( pTTYInfo ) - 1) / YCHAR( pTTYInfo ) ) ) ;
nCol =
min( MAXCOLS - 1,
max( 0, (rect.left + XOFFSET( pTTYInfo )) / XCHAR( pTTYInfo ) ) ) ;
nEndCol =
min( MAXCOLS - 1,
((rect.right + XOFFSET( pTTYInfo ) - 1) / XCHAR( pTTYInfo ) ) ) ;
nCount = nEndCol - nCol + 1 ;
for (; nRow <= nEndRow; nRow++)
{
nVertPos = (nRow * YCHAR( pTTYInfo )) - YOFFSET( pTTYInfo ) ;
nHorzPos = (nCol * XCHAR( pTTYInfo )) - XOFFSET( pTTYInfo ) ;
rect.top = nVertPos ;
rect.bottom = nVertPos + YCHAR( pTTYInfo ) ;
rect.left = nHorzPos ;
rect.right = nHorzPos + XCHAR( pTTYInfo ) * nCount ;
SetBkMode( hDC, OPAQUE ) ;
ExtTextOut( hDC, nHorzPos, nVertPos, ETO_OPAQUE | ETO_CLIPPED, &rect,
(LPSTR)( SCREEN( pTTYInfo ) + nRow * MAXCOLS + nCol ),
nCount, NULL ) ;
}
SelectObject( hDC, hOldFont ) ;
EndPaint( hWnd, &ps ) ;
MoveTTYCursor( hWnd ) ;
return ( TRUE ) ;
} // end of PaintTTY()
//---------------------------------------------------------------------------
// BOOL NEAR SizeTTY( HWND hWnd, WORD wVertSize, WORD wHorzSize )
//
// Description:
// Sizes TTY and sets up scrolling regions.
//
// Parameters:
// HWND hWnd
// handle to TTY window
//
// WORD wVertSize
// new vertical size
//
// WORD wHorzSize
// new horizontal size
//
//---------------------------------------------------------------------------
BOOL NEAR SizeTTY( HWND hWnd, WORD wVertSize, WORD wHorzSize )
{
int nScrollAmt ;
PTTYINFO pTTYInfo ;
if (NULL == (pTTYInfo = (PTTYINFO) GetWindowLong( hWnd, GWL_PTTYINFO )))
return ( FALSE ) ;
YSIZE( pTTYInfo ) = (int) wVertSize ;
YSCROLL( pTTYInfo ) = max( 0, (MAXROWS * YCHAR( pTTYInfo )) -
YSIZE( pTTYInfo ) ) ;
nScrollAmt = min( YSCROLL( pTTYInfo ), YOFFSET( pTTYInfo ) ) -
YOFFSET( pTTYInfo ) ;
ScrollWindow( hWnd, 0, -nScrollAmt, NULL, NULL ) ;
YOFFSET( pTTYInfo ) = YOFFSET( pTTYInfo ) + nScrollAmt ;
SetScrollPos( hWnd, SB_VERT, YOFFSET( pTTYInfo ), FALSE ) ;
SetScrollRange( hWnd, SB_VERT, 0, YSCROLL( pTTYInfo ), TRUE ) ;
XSIZE( pTTYInfo ) = (int) wHorzSize ;
XSCROLL( pTTYInfo ) = max( 0, (MAXCOLS * XCHAR( pTTYInfo )) -
XSIZE( pTTYInfo ) ) ;
nScrollAmt = min( XSCROLL( pTTYInfo ), XOFFSET( pTTYInfo )) -
XOFFSET( pTTYInfo ) ;
ScrollWindow( hWnd, 0, -nScrollAmt, NULL, NULL ) ;
XOFFSET( pTTYInfo ) = XOFFSET( pTTYInfo ) + nScrollAmt ;
SetScrollPos( hWnd, SB_HORZ, XOFFSET( pTTYInfo ), FALSE ) ;
SetScrollRange( hWnd, SB_HORZ, 0, XSCROLL( pTTYInfo ), TRUE ) ;
InvalidateRect( hWnd, NULL, TRUE ) ;
return ( TRUE ) ;
} // end of SizeTTY()
//---------------------------------------------------------------------------
// BOOL NEAR ScrollTTYVert( HWND hWnd, WORD wScrollCmd, WORD wScrollPos )
//
// Description:
// Scrolls TTY window vertically.
//
// Parameters:
// HWND hWnd
// handle to TTY window
//
// WORD wScrollCmd
// type of scrolling we're doing
//
// WORD wScrollPos
// scroll position
//
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -