Files
TeslaRel410/BORLAND/BDE/EXAMPLES/C/ADDRESS/ADRCMDLG.C
T
CydandClaude Fable 5 63312e07f9 source410: literal 4.10 source reconstruction + BC++ 4.52 fleet toolchain archived
- BORLAND/: Borland C++ 4.52 (chosen over 4.5 by byte-match: CODE/RP/CW32.LIB
  is identical to 4.52's install lib). BCC32/TLINK32/TLIB/MAKE run natively on
  Win11; CODE/BT/OPT.MAK is the shipped BTL4OPT.EXE's exact flag recipe
  (extender = Borland PowerPack DPMI32, not Phar Lap TNT).
- restoration/source410/: the literal 1995-form reconstruction of the missing
  BT game source (never mixed into CODE/). Round 1-3 state:
  * 6 of 10 surviving original TUs COMPILE CLEAN under the period toolchain
    (BTMSSN, BTCNSL, BTSCNRL, BTTEAM, BTL4MODE, BTL4ARND) - first builds
    since 1996.
  * BT_L4/BTL4APP.CPP pilot reconstruction: 12/12 functions, Fail() lands on
    its binary-recorded line 400 exactly.
  * BT/BTCNSL.HPP: console wire IDs recovered from the binary's ctors
    (Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1];
    TeamScore=12 flagged [T4]).
  * MUNGA/: 8 engine-header backfills back-dated from the BT412 WinTesla tree
    (VDATA numbering decomp-verified; AUDREND's OpenAL-era virtual removed -
    the period compiler is the drift detector).
  * Tooling: backdate.py (WinTesla->1995 header transform), compile410.sh
    (per-TU verification sweep under authentic OPT.MAK flags).
  * README: corrected roadmap - MECH.HPP is the capstone grown with the mech
    TU reconstructions; BTREG.CPP green = the header-family milestone.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 07:33:26 -05:00

663 lines
24 KiB
C++

// BDE - (C) Copyright 1994 by Borland International
#include "address.h"
//======================================================================
// Name: FileOpenHook()
//
// Input: hWnd, msg, wParam, lParam.
//
// Return: TRUE - The table was opened successfully.
// FALSE - The table failed to open.
//
// Desc: This routine will process all I/O for the dialog that will
// open the table for us.
//======================================================================
BOOL FAR _pascal _export
FileHook(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
DLGPROC lpProc;
PASSSTRUCT *Passwd = NULL;
static BOOL bUpper;
static phDBIDb phDb;
static UINT32 lNumAliases;
static pDBDesc pAliases = NULL;
static UINT32 lSel = 0;
static BOOL bServer = FALSE;
static pCS pCs;
static BOOL bNew = FALSE;
CHAR szAlias[MAXALIAS];
CHAR szFile[DBIMAXNAMELEN]={0};
DBIResult rslt;
UINT16 iTableLen;
CHAR szExt[5]={"\0"};
pCHAR pszMsg = NULL;
pCHAR pTemp;
if(iMSGFileOK == message)
{
if(!bServer && bNew)
{
// Get the actual file name so that we can check if it
// exists.
GetFileTitle(((OPENFILENAME*)lParam)->lpstrFile, szFile,
DBIMAXNAMELEN);
strlwr(szFile);
if(!ChkExt(szFile))
{
lpProc = (DLGPROC)MakeProcInstance((FARPROC) TypeDlg,
hInst);
if(DialogBoxParam(hInst, "TypeDlg", hDlg, lpProc,
(LONG)(void far*)szExt)==IDOK)
{
strcat(szFile, szExt);
pTemp = ((OPENFILENAME*)lParam)->lpstrFile;
pTemp[((OPENFILENAME*)lParam)->nFileOffset] = '\0';
strcat(((OPENFILENAME*)lParam)->lpstrFile, szFile);
FreeProcInstance((FARPROC) lpProc);
return 0;
}
else
{
FreeProcInstance((FARPROC) lpProc);
return 1;
}
}
else
{
return 0;
}
}
}
switch (message)
{
case WM_INITDIALOG:
// Get the Database pointer.
pCs = (pCS)((OPENFILENAME*)lParam)->lCustData;
phDb = pCs->phDb;
if(pCs->uType == 1)
{
bNew = TRUE;
}
else
{
bNew = FALSE;
}
PostMessage(hDlg, WM_SETUP, 0, 0L);
return TRUE;
case WM_SETUP:
// Hide the Addressbook type group if this is an open dialog.
if(!bNew)
{
ShowWindow(GetDlgItem(hDlg, IDC_PERGROUP), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, IDC_BUSINESS), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, IDC_PERSONAL), SW_HIDE);
}
SetupDialog(hDlg, SW_SHOW);
// Fill the Alias string with the aliases that are available to
// the client.
if(FillAliasStr(&pAliases, &lNumAliases)!=DBIERR_NONE)
{
SendMessage(hDlg, WM_DESTROY, 0, 0L);
}
// Fill the alias CB.
FillAliasCBBox(pAliases, lNumAliases, cmb1, hDlg);
// Choose the IDC_BUSINESS addressbook type as the defualt type.
SendDlgItemMessage(hDlg, IDC_BUSINESS, BM_SETCHECK, 1, 0L);
PostMessage(hDlg, WM_ALL, 0, 0L);
bServer = FALSE;
break;
case WM_ALL:
SetWindowText(GetDlgItem(hDlg, edt1), "*.dbf;*.db");
PostMessage(hDlg, WM_COMMAND, IDOK, 0L);
break;
case WM_DESTROY:
if(pAliases)
{
free(pAliases);
}
if(Passwd)
{
free(Passwd);
}
if(pszMsg)
{
free(pszMsg);
}
break;
case WM_COMMAND:
switch(wParam)
{
case IDC_BUSINESS:
pCs->uType = 1;
break;
case IDC_PERSONAL:
pCs->uType = 2;
break;
case IDOK:
if(bServer)
{
bIsServer = TRUE;
memset((pCHAR)szTblName, '\0', DBIMAXTBLNAMELEN);
GetWindowText(GetDlgItem(hDlg, edt1), szFile, 149);
// Check if the table ends with a period.
iTableLen = strlen((pCHAR)szFile);
if(szFile[iTableLen - 1]=='.')
{
// If it does delete the period.
szFile[iTableLen - 1] = '\0';
}
strcpy((pCHAR)szTblName, szFile);
// Check the file case type on the server and set
// the table name accordingly.
if(bUpper)
{
strupr((pCHAR)szTblName);
}
else
{
strlwr((pCHAR)szTblName);
}
// We set the name legal.txt into the edit control
// so that the Common Dialog DLL will not say that
// the table name is illegal.
SetWindowText(GetDlgItem(hDlg, edt1), "legal.txt");
// Close the dialog with a TRUE return value.
EndDialog(hDlg, TRUE);
return FALSE;
}
else
{
bIsServer = FALSE;
return FALSE;
}
case cmb1:
switch(HIWORD(lParam))
{
case CBN_SELCHANGE:
lSel=SendDlgItemMessage(hDlg, wParam,
CB_GETCURSEL, 0, 0L);
SendDlgItemMessage(hDlg, wParam, CB_GETLBTEXT,
(UINT16)lSel,
(LPARAM)szAlias);
PostMessage(hDlg, WM_NEXTDLGCTL,
(WPARAM)GetDlgItem(hDlg, edt1),
(LPARAM)(BOOL) LOWORD(TRUE));
// See if the alias is standard or if it is the
// NULL alias.
if((strnicmp(szAlias, "NULL", 4)==0) ||
IsStandard(szAlias, pAliases, lNumAliases))
{
SetupDialog(hDlg, SW_SHOW);
// If bServer than close the Database
// that we opened up.
if(bServer)
{
CloseDb(phDb);
bServer = FALSE;
OpenDB(phDb, NULL, NULL, NULL);
}
// Set the file extension to .db and .dbf
// then send OK to display all local files.
SetWindowText(GetDlgItem(hDlg, edt1),
"*.db;*.dbf");
PostMessage(hDlg, WM_COMMAND, IDOK, 0L);
}
// Otherwise this is a server alias. Therefore,
// we need to know if it is a server alias.
else
{
// This is a server alias - so display the
// password dialogbox.
// Hide the right side of the dialog box.
SetupDialog(hDlg, SW_HIDE);
SetWindowText(GetDlgItem(hDlg, edt1), "");
// Clear the file list box
SendMessage(GetDlgItem(hDlg, lst1),
LB_RESETCONTENT, 0, 0L);
if((Passwd = (PASSSTRUCT*) malloc
(sizeof(PASSSTRUCT))) == NULL)
{
return FALSE;
}
// Copy in the alias and the physical
// Database name.
strcpy(Passwd->Alias, pAliases[(UINT16)
lSel].szName);
strcpy(Passwd->Database, pAliases[
(UINT16)lSel].
szPhyName);
lpProc = (DLGPROC)MakeProcInstance
((FARPROC) PasswdDlg, hInst);
// Since we have get the password and
// pass in the alias and database names
// we need to pass in the Passwd
// structure.
if(DialogBoxParam(hInst, "PasswdDlg",
hDlg, lpProc, (LONG)(void far*)
Passwd)==IDOK)
{
if(*phDb!=NULL)
{
CloseDb(phDb);
}
// Open the SQL Database.
rslt=OpenDB(phDb, pAliases
[(UINT16)lSel].szDbType,
(pCHAR)Passwd,
pAliases[(UINT16)lSel].
szName);
// If there were no errors then
// get the list of available tables.
if(rslt == DBIERR_NONE)
{
bServer = TRUE;
HourGlassCursor(TRUE);
// Fill the file listbox
bUpper = FillFileList(hDlg, lst1,
*phDb);
// Set the alias as the directory
// name in the file dialog box.
SetWindowText(GetDlgItem(hDlg,
stc1), pAliases[(UINT16)
lSel].szPhyName);
PostMessage(hDlg, WM_NEXTDLGCTL,
(WPARAM)GetDlgItem(hDlg, edt1),
(LPARAM)(BOOL) LOWORD(TRUE));
HourGlassCursor(FALSE);
}
else
{
// Get the full information on
// why the connection failed.
DisplayError(rslt, &pszMsg);
// Display the full error string.
MessageBox(hDlg, pszMsg,
"AddressBook Manager Error",
MB_OK|MB_ICONINFORMATION);
// Free the error string.
free(pszMsg);
}
}
FreeProcInstance((FARPROC) lpProc);
free(Passwd);
break;
}
return TRUE;
}
return TRUE;
}
break;
}
return FALSE;
}
//======================================================================
// Name: PasswdDlg()
//
// Input: hWnd, msg, wParam, lParam. In the lParam is a structure that
// holds the Alias, Database name, and Password string to fill.
//
// Return: TRUE - Password was entered.
// FALSE - Password was not entered..
//
// Desc: This routine will process all I/O for the Password dialog.
//======================================================================
BOOL FAR _pascal _export
PasswdDlg (HWND hWnd, WORD msg, WORD wParam, LONG lParam)
{
BOOL bRet = FALSE;
static PASSSTRUCT *PassWord = NULL;
// Done to clear the unused warning.
lParam = lParam;
switch (msg)
{
case WM_INITDIALOG:
PassWord = (PASSSTRUCT*)lParam;
SetWindowText(GetDlgItem(hWnd, IDS_ALIAS), PassWord->Alias);
SetWindowText(GetDlgItem(hWnd, IDS_DATABASE),
PassWord->Database);
PostMessage(hWnd,WM_NEXTDLGCTL,
(WPARAM)GetDlgItem(hWnd,IDC_PASS),TRUE);
break;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
GetDlgItemText(hWnd, IDC_PASS, PassWord->Password,
MAXPASSLEN -1);
bRet = TRUE;
EndDialog(hWnd, bRet);
break;
case IDCANCEL:
bRet = FALSE;
EndDialog(hWnd, bRet);
break;
}
break;
}
return(bRet);
}
//======================================================================
// Name: TypeDlg()
//
// Input: hWnd, msg, wParam, lParam. In the lParam is the extension
// string.
//
// Return: TRUE - Table type was chosen.
// FALSE - Table type was not chosen.
//
// Desc: This routine will process all I/O for the Table Type dialog.
//======================================================================
BOOL FAR _pascal _export
TypeDlg (HWND hWnd, WORD msg, WORD wParam, LONG lParam)
{
BOOL bRet = FALSE;
static pCHAR pszExtension;
static CHAR szString[301] = {'\0'};
// Done to clear the unused warning.
lParam = lParam;
switch (msg)
{
case WM_INITDIALOG:
pszExtension = (pCHAR)lParam;
LoadString(hInst, IDS_TABLETYPE, szString, 300);
SetWindowText(GetDlgItem(hWnd, ID_TYPE_DESC), szString);
// Choose the Paradox table type as the default.
SendDlgItemMessage(hWnd, IDC_PARADOX, BM_SETCHECK, 1, 0L);
break;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
if(SendDlgItemMessage(hWnd, IDC_PARADOX, BM_GETCHECK,
0, 0L) == 1)
{
strcpy(pszExtension,".db\0");
}
else
{
strcpy(pszExtension, ".dbf\0");
}
bRet = TRUE;
EndDialog(hWnd, bRet);
break;
case IDCANCEL:
bRet = FALSE;
EndDialog(hWnd, bRet);
break;
}
break;
}
return(bRet);
}
//=========================================================================
// Function: InitializeStruct()
//
// Input: Pointer to the common dialog structure (lpStruct), and a
// pointer to the CREATESTRUCT structure (pCS).
//
// Returns: None.
//
// Desc: This function is used to initialize the structure for the
// open/save file common dialog. This routine is called just
// before the common dialogs API is called.
//=========================================================================
void
InitializeStruct(LPSTR lpStruct, pCS pCs)
{
LPFOCHUNK lpFOChunk;
lpFOChunk = (LPFOCHUNK)lpStruct;
// If this is an open table structure.
if(pCs->uType == 0)
{
strcpy(lpFOChunk->szTitle, "Open Table");
}
else
{
strcpy(lpFOChunk->szTitle, "New Table");
}
*(lpFOChunk->szFile) = 0;
*(lpFOChunk->szFileTitle) = 0;
lpFOChunk->ofn.lStructSize = sizeof(OPENFILENAME);
lpFOChunk->ofn.hwndOwner = (HWND)hMainWnd;
lpFOChunk->ofn.hInstance = hInst;
lpFOChunk->ofn.lpstrFilter = NULL;
lpFOChunk->ofn.lpstrCustomFilter = (LPSTR)NULL;
lpFOChunk->ofn.nMaxCustFilter = 0L;
lpFOChunk->ofn.nFilterIndex = 1L;
lpFOChunk->ofn.lpstrFile = lpFOChunk->szFile;
lpFOChunk->ofn.nMaxFile = (DWORD)sizeof(lpFOChunk->szFile);
lpFOChunk->ofn.lpstrFileTitle = lpFOChunk->szFileTitle;
lpFOChunk->ofn.nMaxFileTitle = MAXFILETITLELEN;
lpFOChunk->ofn.lpstrInitialDir = szTblDirectory;
lpFOChunk->ofn.lpstrTitle = lpFOChunk->szTitle;
lpFOChunk->ofn.Flags = OFN_HIDEREADONLY |
OFN_ENABLETEMPLATE |
OFN_ENABLEHOOK;
lpFOChunk->ofn.nFileOffset = 0;
lpFOChunk->ofn.nFileExtension = 0;
lpFOChunk->ofn.lpstrDefExt = (LPSTR)NULL;
lpFOChunk->ofn.lCustData = (LPARAM)pCs;
lpFOChunk->ofn.lpfnHook = (FARHOOK)lpfnFileHook;
lpFOChunk->ofn.lpTemplateName = (LPSTR)MAKEINTRESOURCE
(FILEOPENORD);
return;
}
//=========================================================================
// Function: ProcessCDError()
//
// Input: CommDlgError(UINT16), Pointer to the common dialog structure
// (lpStruct).
//
// Returns: None.
//
// Desc: This function reports an error that has occurred during the
// last call to a Common Dialog routine.
//=========================================================================
void
ProcessCDError(UINT32 dwErrorCode)
{
UINT16 iStringID;
CHAR szBuffer[200];
switch(dwErrorCode)
{
case CDERR_DIALOGFAILURE: iStringID=IDS_DIALOGFAILURE; break;
case CDERR_INITIALIZATION: iStringID=IDS_INITIALIZATION; break;
case CDERR_NOTEMPLATE: iStringID=IDS_NOTEMPLATE; break;
case CDERR_NOHINSTANCE: iStringID=IDS_NOHINSTANCE; break;
case CDERR_LOCKRESFAILURE: iStringID=IDS_LOCKRESFAILURE; break;
case CDERR_MEMALLOCFAILURE: iStringID=IDS_MEMALLOCFAILURE; break;
case CDERR_MEMLOCKFAILURE: iStringID=IDS_MEMLOCKFAILURE; break;
case 0: // User may have hit CANCEL or we got a *very* random
// error
default:
return;
}
if (!LoadString(hInst, iStringID, szBuffer, sizeof(szBuffer)))
{
return;
}
MessageBox(hMainWnd, szBuffer, "AddressBook Error", MB_OK);
return;
}
//=========================================================================
// Function: ChkExt()
//
// Input: Pointer to a string that contains the filename to check
// (pCHAR).
//
// Returns: TRUE: If the file has an extension of .db or .dbf
// FALSE: If the file has an extension of anything else.
//
// Desc: This function simply checks if the filename has a .db in it.
// It then checks if the next character is a 'f' (.dbf) or
// a '/0' (.db). It then returns the result of its check.
//=========================================================================
BOOL
ChkExt(pCHAR pszFileName)
{
pCHAR pName;
BOOL bRet = FALSE;
UINT16 i=0;
strlwr(pszFileName);
if((pName = strstr(pszFileName, ".db"))!=NULL)
{
if((pName[3]=='f') || (pName[3]=='\0'))
{
bRet = TRUE;
}
}
if(!bRet)
{
i=0;
while (i<strlen(pszFileName) && pszFileName[i]!='.')
{
i++;
}
pszFileName[i]='\0';
}
return bRet;
}
//=========================================================================
// Function: IsStandard()
//
// Input: Pointer to a string that contains the Alias name(pCHAR),
// Pointer to the alias list (pDBDesc), and the number of
// aliases (UINT32).
//
// Returns: TRUE: If the alias is a standard alias.
// FALSE: If the alias is not a standard alias.
//
// Desc: This function simply checks if the alias is a standard
// alias. This is done by comparing the alias name with the
// alias list that is passed in.
//=========================================================================
BOOL
IsStandard(pCHAR pszAlias, pDBDesc pAliases, UINT32 lNumAliases)
{
UINT32 i;
BOOL bRet = FALSE;
for (i=0;i<lNumAliases;i++)
{
if(strcmpi(pAliases[(UINT16)i].szName, pszAlias)==0)
{
if(strcmpi(pAliases[(UINT16)i].szDbType, szCFGDBSTANDARD)==0)
{
bRet = TRUE;
}
}
}
return bRet;
}
//=========================================================================
// Function: SetupDialog()
//
// Input: Handle to the CommonDialogBox (HWND), Value to pass
// into the ShowWindow function like SW_HIDE (INT16).
//
// Returns: None.
//
// Desc: This function simply shows or hides the windows on the
// right side of the common dialog box. This is done by
// passing the second parameter of this function into the
// ShowWindow function for each window we wish to affect.
//=========================================================================
void
SetupDialog(HWND hDlg, INT16 iAction)
{
BOOL bFlag = TRUE;
if(IsWindowVisible(GetDlgItem(hDlg, stc1)))
{
if(iAction == SW_SHOW)
{
// This way we will not redisplay what is already visable.
bFlag = FALSE;
}
}
if(bFlag)
{
ShowWindow(GetDlgItem(hDlg, stc1), iAction);
ShowWindow(GetDlgItem(hDlg, stc5), iAction);
ShowWindow(GetDlgItem(hDlg, stc4), iAction);
ShowWindow(GetDlgItem(hDlg, cmb2), iAction);
ShowWindow(GetDlgItem(hDlg, lst2), iAction);
}
}