423 lines
7.3 KiB
C
423 lines
7.3 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1990 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
mbrdlg.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Top-level functions that implement the commands supported by the
|
||
|
MS Editor browser extension.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Ramon Juan San Andres (ramonsa) 06-Nov-1990
|
||
|
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#include "mbr.h"
|
||
|
|
||
|
|
||
|
|
||
|
/**************************************************************************/
|
||
|
|
||
|
flagType
|
||
|
pascal
|
||
|
EXTERNAL
|
||
|
mBRdoSetBsc (
|
||
|
IN USHORT argData,
|
||
|
IN ARG far *pArg,
|
||
|
IN flagType fMeta
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Opens a browser database.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Standard arguments for MEP Editing functions
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
FALSE if error, TRUE otherwise
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
PBYTE pName;
|
||
|
procArgs(pArg);
|
||
|
pName = pArgText ? pArgText : BscName;
|
||
|
|
||
|
if (pName) {
|
||
|
if (! OpenDataBase(pName)) {
|
||
|
return errstat(MBRERR_CANNOT_OPEN_BSC, pName);
|
||
|
}
|
||
|
strcpy(BscName, pName);
|
||
|
BscArg[0] = '\0';
|
||
|
BscCmnd = CMND_NONE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**************************************************************************/
|
||
|
|
||
|
flagType
|
||
|
pascal
|
||
|
EXTERNAL
|
||
|
mBRdoNext (
|
||
|
IN USHORT argData,
|
||
|
IN ARG far *pArg,
|
||
|
IN flagType fMeta
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Displays next reference or definition.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Standard arguments for MEP editing functions
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
NextDefRef();
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**************************************************************************/
|
||
|
|
||
|
flagType
|
||
|
pascal
|
||
|
EXTERNAL
|
||
|
mBRdoPrev (
|
||
|
IN USHORT argData,
|
||
|
IN ARG far *pArg,
|
||
|
IN flagType fMeta
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Displays previous reference or definition.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Standard arguments for MEP editing functions
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
PrevDefRef();
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**************************************************************************/
|
||
|
|
||
|
flagType
|
||
|
pascal
|
||
|
EXTERNAL
|
||
|
mBRdoDef (
|
||
|
IN USHORT argData,
|
||
|
IN ARG far *pArg,
|
||
|
IN flagType fMeta
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Displays first definition of a symbol.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Standard arguments for MEP editing functions
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
procArgs(pArg);
|
||
|
|
||
|
if (BscInUse && pArgText) {
|
||
|
InitDefRef(Q_DEFINITION, pArgText);
|
||
|
NextDefRef();
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**************************************************************************/
|
||
|
|
||
|
flagType
|
||
|
pascal
|
||
|
EXTERNAL
|
||
|
mBRdoRef (
|
||
|
IN USHORT argData,
|
||
|
IN ARG far *pArg,
|
||
|
IN flagType fMeta
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Displays first reference of a symbol.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Standard arguments for MEP editing functions
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
procArgs(pArg);
|
||
|
|
||
|
if (BscInUse && pArgText) {
|
||
|
InitDefRef(Q_REFERENCE, pArgText);
|
||
|
NextDefRef();
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**************************************************************************/
|
||
|
|
||
|
flagType
|
||
|
pascal
|
||
|
EXTERNAL
|
||
|
mBRdoLstRef (
|
||
|
IN USHORT argData,
|
||
|
IN ARG far *pArg,
|
||
|
IN flagType fMeta
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
List all references in database matching an MBF criteria.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Standard arguments for MEP editing functions
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
MBF mbfReqd;
|
||
|
|
||
|
// The matching criteria may be specified as an argument.
|
||
|
//
|
||
|
procArgs(pArg);
|
||
|
if (procArgs(pArg) != NOARG) {
|
||
|
mbfReqd = GetMbf(pArgText);
|
||
|
}
|
||
|
|
||
|
if (BscInUse) {
|
||
|
if ((BscCmnd == CMND_LISTREF) && (mbfReqd == mbfNil)) {
|
||
|
//
|
||
|
// Pseudofile already has the information we want
|
||
|
//
|
||
|
ShowBrowse();
|
||
|
} else {
|
||
|
//
|
||
|
// Generate list
|
||
|
//
|
||
|
OpenBrowse();
|
||
|
if (mbfReqd == mbfNil) {
|
||
|
mbfReqd = BscMbf;
|
||
|
} else {
|
||
|
BscMbf = mbfReqd; // Matching criteria becomes default
|
||
|
}
|
||
|
ListRefs(mbfReqd);
|
||
|
BscCmnd = CMND_LISTREF;
|
||
|
BscArg[0] = '\0';
|
||
|
}
|
||
|
MoveCur(0,0);
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**************************************************************************/
|
||
|
|
||
|
flagType
|
||
|
pascal
|
||
|
EXTERNAL
|
||
|
mBRdoOutlin (
|
||
|
IN USHORT argData,
|
||
|
IN ARG far *pArg,
|
||
|
IN flagType fMeta
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Generate outline of a module.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Standard arguments for MEP editing functions.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
FALSE if symbol is not a module,
|
||
|
TRUE otherwise.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
PFILE pCurFile;
|
||
|
|
||
|
procArgs(pArg);
|
||
|
|
||
|
if (BscInUse) {
|
||
|
if ((BscCmnd == CMND_OUTLINE) && (!strcmp(pArgText, BscArg))) {
|
||
|
//
|
||
|
// pseudofile already has the information we want
|
||
|
//
|
||
|
ShowBrowse();
|
||
|
MoveCur(0,0);
|
||
|
} else if (pArgText) {
|
||
|
//
|
||
|
// Make sure that the the symbol is a valid module
|
||
|
//
|
||
|
if (ImodFrLsz(pArgText) == imodNil) {
|
||
|
return errstat(MBRERR_NOT_MODULE, pArgText);
|
||
|
} else {
|
||
|
pCurFile = FileNameToHandle("", NULL);
|
||
|
OpenBrowse();
|
||
|
if (FOutlineModuleLsz(pArgText,BscMbf)) {
|
||
|
//
|
||
|
// Function worked, set command state.
|
||
|
//
|
||
|
BscCmnd = CMND_OUTLINE;
|
||
|
strcpy(BscArg, pArgText);
|
||
|
MoveCur(0,0);
|
||
|
} else {
|
||
|
//
|
||
|
// Function failed, restore previous file and reset
|
||
|
// command state.
|
||
|
//
|
||
|
pFileToTop(pCurFile);
|
||
|
BscCmnd = CMND_NONE;
|
||
|
BscArg[0] = '\0';
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**************************************************************************/
|
||
|
|
||
|
flagType
|
||
|
pascal
|
||
|
EXTERNAL
|
||
|
mBRdoCalTre (
|
||
|
IN USHORT argData,
|
||
|
IN ARG far *pArg,
|
||
|
IN flagType fMeta
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Displays calltree of a symbol.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Standard arguments for MEP editing functions.
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
|
||
|
PFILE pCurFile;
|
||
|
BOOL FunctionWorked;
|
||
|
|
||
|
procArgs(pArg);
|
||
|
|
||
|
if (BscInUse) {
|
||
|
if ((BscCmnd == CMND_CALLTREE) && (!strcmp(pArgText, BscArg))) {
|
||
|
//
|
||
|
// pseudofile already has the information we want.
|
||
|
//
|
||
|
ShowBrowse();
|
||
|
MoveCur(0,0);
|
||
|
} else if (pArgText) {
|
||
|
pCurFile = FileNameToHandle("", NULL);
|
||
|
OpenBrowse();
|
||
|
//
|
||
|
// Generate the tree forward or backward depending on
|
||
|
// the value of the direction switch.
|
||
|
//
|
||
|
if (BscCalltreeDir == CALLTREE_FORWARD) {
|
||
|
FunctionWorked = FCallTreeLsz(pArgText);
|
||
|
} else {
|
||
|
FunctionWorked = FRevTreeLsz(pArgText);
|
||
|
}
|
||
|
|
||
|
if (FunctionWorked) {
|
||
|
//
|
||
|
// Function worked, set command state.
|
||
|
//
|
||
|
BscCmnd = CMND_CALLTREE;
|
||
|
strcpy(BscArg, pArgText);
|
||
|
MoveCur(0,0);
|
||
|
} else {
|
||
|
//
|
||
|
// Function failed, restore previous file and
|
||
|
// reset command state.
|
||
|
//
|
||
|
pFileToTop(pCurFile);
|
||
|
BscCmnd = CMND_NONE;
|
||
|
BscArg[0] = '\00';
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|