source insight 4.0一键注释、头文件注释、创建头文件基本内容

/* Utils.em - a small collection of useful editing macros */



/*-------------------------------------------------------------------------
	I N S E R T   H E A D E R

	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 it
	to your email name.  eg. set MYNAME=raygr
-------------------------------------------------------------------------*/
macro InsertHeader()
{
     
	// Get the owner's name from the environment variable: MYNAME.
	// If the variable doesn't exist, then the owner field is skipped.
	szMyName = getenv(MYNAME)
	
	// Get a handle to the current file buffer and the name
	// and location of the current symbol where the cursor is.
	hbuf = GetCurrentBuf()
	szFunc = GetCurSymbol()
	ln = GetSymbolLine(szFunc)

	// begin assembling the title string
	sz = "/*   "
	
	/* convert symbol name to T E X T   L I K E   T H I S */
	cch = strlen(szFunc)
	ich = 0
	while (ich < 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 already
	InsBufLine(hbuf, ln+1, "-------------------------------------------------------------------------*/")
	
	// put the insertion point inside the header comment
	SetBufIns(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 it
   to 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 line
macro 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 selection
macro 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 buffer
macro 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()
{
     
	Paste
	EmptyBuf(GetBufHandle("Clipboard"))
}



// delete all lines in the buffer
macro 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 declaration
macro 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 = 0;
	while (isym < isymMax)
		{
     
		AppendBufLine(hbufOutput, GetBufSymName(hbuf, isym))
		isym = isym + 1
		}

	CloseBuf(hbuf)
	
	return hbufOutput

}

macro MultiLineComment()
{
     
hwnd = GetCurrentWnd()
selection = GetWndSel(hwnd)
LnFirst =GetWndSelLnFirst(hwnd)      //取首行行号
LnLast =GetWndSelLnLast(hwnd)      //取末行行号
hbuf = GetCurrentBuf()
if(GetBufLine(hbuf, 0) =="//magic-number:tph85666031"){
     
stop
}
Ln = Lnfirst
buf = GetBufLine(hbuf, Ln)
len = strlen(buf)
while(Ln <= Lnlast) {
     
buf = GetBufLine(hbuf, Ln)  //取Ln对应的行
if(buf ==""){
                        //跳过空行
Ln = Ln + 1
continue
}
if(StrMid(buf, 0, 1) == "/"){
            //需要取消注释,防止只有单字符的行
if(StrMid(buf, 1, 2) == "/"){
     
PutBufLine(hbuf, Ln, StrMid(buf, 2, Strlen(buf)))
}
}
if(StrMid(buf,0,1) !="/"){
               //需要添加注释
PutBufLine(hbuf, Ln, Cat("//", buf))
}
Ln = Ln + 1
}
SetWndSel(hwnd, selection)
}

macro AddMacroComment()
{
     
hwnd=GetCurrentWnd()
sel=GetWndSel(hwnd)
lnFirst=GetWndSelLnFirst(hwnd)
lnLast=GetWndSelLnLast(hwnd)
hbuf=GetCurrentBuf()
if (LnFirst == 0) {
     
szIfStart = ""
} else {
     
szIfStart = GetBufLine(hbuf, LnFirst-1)
}
szIfEnd = GetBufLine(hbuf, lnLast+1)
if (szIfStart == "#if 0" && szIfEnd =="#endif") {
     
DelBufLine(hbuf, lnLast+1)
DelBufLine(hbuf, lnFirst-1)
sel.lnFirst = sel.lnFirst – 1
sel.lnLast = sel.lnLast – 1
} else {
     
InsBufLine(hbuf, lnFirst, "#if 0")
InsBufLine(hbuf, lnLast+2, "#endif")
sel.lnFirst = sel.lnFirst + 1
sel.lnLast = sel.lnLast + 1
}
SetWndSel( hwnd, sel )
}

macro CommentSingleLine()
{
     
hbuf = GetCurrentBuf()
ln = GetBufLnCur(hbuf)
str = GetBufLine (hbuf, ln)
str = cat("/*",str)
str = cat(str,"*/")
PutBufLine (hbuf, ln, str)
}

macro CommentSelStr()
{
     
hbuf = GetCurrentBuf()
ln = GetBufLnCur(hbuf)
str = GetBufSelText(hbuf)
str = cat("/*",str)
str = cat(str,"*/")
SetBufSelText (hbuf, str)
}

macro MyInsertHeader()
{
     
    // Get the owner's name from the environment variable: MYNAME.
    // If the variable doesn't exist, then the owner field is skipped.
    szMyName = getenv(MYNAME)

    // Get a handle to the current file buffer and the name
    // and location of the current symbol where the cursor is.
    hbuf = GetCurrentBuf()
    szFunc = GetCurSymbol()
    ln = GetSymbolLine(szFunc)
    
    InsBufLine(hbuf, ln, "/************************************************************");
    ln = ln +1

    // begin assembling the title string
    sz = "* Function : " 

    /* convert symbol name to T E X T   L I K E   T H I S */
    cch = strlen(szFunc)
    ich = 0
//    while (ich < 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,szFunc)

    InsBufLine(hbuf, ln, sz)
    ln = ln + 1

    InsBufLine(hbuf, ln, "* brief    : ")
    ln = ln + 1

    InsBufLine(hbuf, ln, "* args[in] : ")
    ln = ln + 1

    InsBufLine(hbuf, ln, "* args[out]: ")
    ln = ln + 1

    InsBufLine(hbuf, ln, "* return   : ")
    ln = ln + 1

    InsBufLine(hbuf, ln, "*************************************************************/")
}

macro MyInsertFileHeader()
{
     
    szMyName = getenv(MYNAME)

    hbuf = GetCurrentBuf()

    InsBufLine(hbuf, 0, "/***************************************************************************")
    filename = GetBufName(hbuf)
    InsBufLine(hbuf, 1, "** file   : @filename@")
    InsBufLine(hbuf, 2, "** brief  : ")
    InsBufLine(hbuf, 3, "** version: V1.0")
    InsBufLine(hbuf, 4, "** author : chensong")

    // Get current time
    szTime  = GetSysTime(1)
    Day      = szTime.Day
    Month   = szTime.Month
    Year     = szTime.Year
    if (Day < 10)
        szDay = "0@Day@"
    else
        szDay = Day               

    InsBufLine(hbuf, 5, "** date   : @Year@.@Month@.@szDay@")      
    InsBufLine(hbuf, 6, "** modify : 1、chensong @Year@.@Month@.@szDay@")
    InsBufLine(hbuf, 7, "               content:  create file")
    InsBufLine(hbuf, 8, "***************************************************************************/")
}

macro MyCreateHeadFile()
{
     
    szMyName = getenv(MYNAME)

    hbuf = GetCurrentBuf()
    szName = Ask("Enter file name:");

	ln = 0
    InsBufLine(hbuf, ln, "/***************************************************************************")
    ln = ln + 1
    filename = GetBufName(hbuf)
    InsBufLine(hbuf, ln, "** file   : @filename@")   
    
    ln = ln + 1
    InsBufLine(hbuf, ln, "** brief  : ")

    ln = ln + 1
	InsBufLine(hbuf, ln, "** version: V1.0")
	
	ln = ln + 1
    InsBufLine(hbuf, ln, "** author : chensong")

    // Get current time
    szTime  = GetSysTime(1)
    Day      = szTime.Day
    Month   = szTime.Month
    Year     = szTime.Year
    if (Day < 10)
        szDay = "0@Day@"
    else
        szDay = Day               

	ln = ln + 1
    InsBufLine(hbuf, ln, "** date   : @Year@.@Month@.@szDay@")     

    ln = ln + 1
    InsBufLine(hbuf, ln, "** modify : 1、chensong @Year@.@Month@.@szDay@")

    ln = ln + 1
    InsBufLine(hbuf, ln, "               content:  create file")

    ln = ln + 1
    InsBufLine(hbuf, ln, "***************************************************************************/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#ifndef @szName@_H")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#define @szName@_H")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*----------------------------------------------*/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*            Macros & Typedefs                 */")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*----------------------------------------------*/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#define @szName@_ERR_OK              (0)")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#define @szName@_ERR_BASE            (0x00100000)")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#define @szName@_ERR_INVALID_PARAM   (0x00000001 + @szName@_ERR_BASE)")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#define @szName@_ERR_NULL_POINTER    (0x00000002 + @szName@_ERR_BASE)")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#define @szName@_ERR_PROCESS_FAILED  (0x00000003 + @szName@_ERR_BASE)")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#define @szName@_ERR_NOT_READY       (0x00000004 + @szName@_ERR_BASE)")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#define @szName@_ERR_INIT_FAILED     (0x00000005 + @szName@_ERR_BASE)")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#define @szName@_ERR_ALLOC_MEM_FAIED (0x00000006 + @szName@_ERR_BASE)")


	ln = ln + 1
	InsBufLine(hbuf, ln, "/*----------------------------------------------*/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*         Structure Declarations               */")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*----------------------------------------------*/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*----------------------------------------------*/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*            Class Declarations                */")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*----------------------------------------------*/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*----------------------------------------------*/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*          Function Declarations               */")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*----------------------------------------------*/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*----------------------------------------------*/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*            Global Variables                  */")

	ln = ln + 1
	InsBufLine(hbuf, ln, "/*----------------------------------------------*/")

	ln = ln + 1
	InsBufLine(hbuf, ln, "#endif")

}

你可能感兴趣的:(SI4.0)