source insight 宏进阶功能( 四 )

< cch){ch = szFunc[ich]if(ich > 0) {if(isupper(ch)){sz = cat(sz, "")}else{sz = cat(sz, " ")sz = Cat(sz, toupper(ch))ich = ich + 1}}}sz = Cat(sz, "*/")InsBufLine(hbuf, ln, sz)InsBufLine(hbuf, ln + 1, "/*-------------------------------------------------------------------------")/* if owner variable exists, insert Owner: name */if(strlen(szMyName) > 0){InsBufLine(hbuf, ln + 2, "Owner: @szMyName@")InsBufLine(hbuf, ln + 3, " ")ln = ln + 4}else{ln = ln + 2}InsBufLine(hbuf, ln,"") // provide an indent alreadyInsBufLine(hbuf, ln + 1, "-------------------------------------------------------------------------*/")// put the insertion point inside the header commentSetBufIns(hbuf, ln, 4)}/* InsertFileHeader:Inserts a comment header block at the top of the current function.This actually works on any type of symbol, not just functions.To use this, define an environment variable "MYNAME" and set itto your email name.eg. set MYNAME=raygr*/macro InsertFileHeader(){szMyName = getenv(MYNAME)hbuf = GetCurrentBuf()InsBufLine(hbuf, 0, "/*-------------------------------------------------------------------------")/* if owner variable exists, insert Owner: name */InsBufLine(hbuf, 1, "")if(strlen(szMyName) > 0){sz = "Owner: @szMyName@"InsBufLine(hbuf, 2, " ")InsBufLine(hbuf, 3, sz)ln = 4}else{ln = 2}InsBufLine(hbuf, ln, "-------------------------------------------------------------------------*/")}// Inserts "Returns True .. or False..." at the current linemacro ReturnTrueOrFalse(){hbuf = GetCurrentBuf()ln = GetBufLineCur(hbuf)InsBufLine(hbuf, ln, "Returns True if successful or False if errors.")}/* Inserts ifdef REVIEW around the selection */macro IfdefReview(){IfdefSz("REVIEW");}/* Inserts ifdef BOGUS around the selection */macro IfdefBogus(){IfdefSz("BOGUS");}/* Inserts ifdef NEVER around the selection */macro IfdefNever(){IfdefSz("NEVER");}// Ask user for ifdef condition and wrap it around current// selection.macro InsertIfdef(){sz = Ask("Enter ifdef condition:")if(sz != ""){IfdefSz(sz);}}macro InsertCPlusPlus(){IfdefSz("__cplusplus");}// Wrap ifdef.. endif around the current selectionmacro IfdefSz(sz){hwnd = GetCurrentWnd()lnFirst = GetWndSelLnFirst(hwnd)lnLast = GetWndSelLnLast(hwnd)hbuf = GetCurrentBuf()InsBufLine(hbuf, lnFirst, "#ifdef @sz@")InsBufLine(hbuf, lnLast + 2, "#endif /* @sz@ */")}// Delete the current line and appends it to the clipboard buffermacro KillLine(){hbufCur = GetCurrentBuf();lnCur = GetBufLnCur(hbufCur)hbufClip = GetBufHandle("Clipboard")AppendBufLine(hbufClip, GetBufLine(hbufCur, lnCur))DelBufLine(hbufCur, lnCur)}// Paste lines killed with KillLine(clipboard is emptied)macro PasteKillLine(){PasteEmptyBuf(GetBufHandle("Clipboard"))}// delete all lines in the buffermacro EmptyBuf(hbuf){lnMax = GetBufLineCount(hbuf)while(lnMax > 0){DelBufLine(hbuf, 0)lnMax = lnMax - 1}}// Ask the user for a symbol name, then jump to its declarationmacro JumpAnywhere(){symbol = Ask("What declaration would you like to see?")JumpToSymbolDef(symbol)}// list all siblings of a user specified symbol// A sibling is any other symbol declared in the same file.macro OutputSiblingSymbols(){symbol = Ask("What symbol would you like to list siblings for?")hbuf = ListAllSiblings(symbol)SetCurrentBuf(hbuf)}// Given a symbol name, open the file its declared in and// create a new output buffer listing all of the symbols declared// in that file.Returns the new buffer handle.macro ListAllSiblings(symbol){loc = GetSymbolLocation(symbol)if(loc == ""){msg("@symbol@ not found.")stop}hbufOutput = NewBuf("Results")hbuf = OpenBuf(loc.file)if(hbuf == 0){msg("Can't open file.")stop}isymMax = GetBufSymCount(hbuf)isym = 0while(isym < isymMax){AppendBufLine(hbufOutput, GetBufSymName(hbuf, isym))isym = isym + 1}CloseBuf(hbuf)return hbufOutput}//##########################################################################