/*++ 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; }