/******************************************************************************* * Copyright (C), 2000-2010, Electronic Technology Co., Ltd. * 文件名: utils.em * 作 者: shangwx * 版 本: * 日 期: 2010-3-12 //完成日期 * 说 明: 用于Source Insight的宏。 * * 修订历史: * 1. 时间: 2010-3-12 * 修订者: shangwx * 修订内容: 创建 * 2. * 其它: 请将本文件复制到 我的文档/Source Insight/Projects/Base,覆盖原有的文件。 *******************************************************************************/ /******************************************************************************* * 函数名称: InsertSysTime * 说明: 插入当前系统时间 * 输入参数: 无 * 输出参数: 无 * 返回值: 无 * 其它: 时间格式如:2010-3-12 9:42:44 *******************************************************************************/ macro InsertSysTime() { hbufCur = GetCurrentBuf(); LocalTime = GetSysTime(1) Year = LocalTime.Year Month = LocalTime.Month Day = LocalTime.Day Time = LocalTime.time SetBufSelText (hbufCur, "@Year@-@Month@-@Day@ @Time@") } /******************************************************************************* * 函数名称: CloseFileWindows * 说明: 关闭所有已打开的文件 * 输入参数: 无 * 输出参数: 无 * 返回值: 无 * 其它: 无 *******************************************************************************/ macro CloseFileWindows() { cwnd = WndListCount() iwnd = 0 while (1) { hwnd = WndListItem(0) hbuf = GetWndBuf(hwnd) SaveBuf(hbuf) CloseWnd(hwnd) iwnd = iwnd + 1 if(iwnd >= cwnd) { break } } } /******************************************************************************* * 函数名称: InsertIf * 说明: 在所选代码块插入#if 0 / #endif * 输入参数: 无 * 输出参数: 无 * 返回值: 无 * 其它: 屏蔽所选代码块 *******************************************************************************/ macro InsertIf() { ProgEnvInfo = GetProgramEnvironmentInfo () Editor = ProgEnvInfo.UserName hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst(hwnd) lnLast = GetWndSelLnLast(hwnd) LocalTime = GetSysTime(1) Year = LocalTime.Year Month = LocalTime.Month Day = LocalTime.Day Time = LocalTime.time hbuf = GetCurrentBuf() InsBufLine(hbuf, lnFirst, "#if 0") InsBufLine(hbuf, lnLast+2, "#endif /* if 0. @Year@-@Month@-@Day@ @Time@ @Editor@ */") } /******************************************************************************* * 函数名称: InsertIfdef * 说明: 在所选代码块插入#ifdef XXX / #endif * 输入参数: 无 * 输出参数: 无 * 返回值: 无 * 其它: 无 *******************************************************************************/ macro InsertIfdef() { sz = Ask("Enter ifdef condition:") if (sz != "") IfdefSz(sz); } /******************************************************************************* * 函数名称: InsertIfndef * 说明: 在所选代码块插入#ifndef XXX / #endif * 输入参数: 无 * 输出参数: 无 * 返回值: 无 * 其它: 无 *******************************************************************************/ macro InsertIfndef() { sz = Ask("Enter ifdnef condition:") if (sz != "") IfndefSz(sz); } // Wrap ifdef <sz> .. endif around the current selection macro IfdefSz(sz) { ProgEnvInfo = GetProgramEnvironmentInfo () Editor = ProgEnvInfo.UserName hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst(hwnd) lnLast = GetWndSelLnLast(hwnd) LocalTime = GetSysTime(1) Year = LocalTime.Year Month = LocalTime.Month Day = LocalTime.Day Time = LocalTime.time hbuf = GetCurrentBuf() InsBufLine(hbuf, lnFirst, "#ifdef @sz@") InsBufLine(hbuf, lnLast+2, "#endif /* ifdef @sz@.@Year@-@Month@-@Day@ @Time@ @Editor@ */") } macro IfndefSz(sz) { ProgEnvInfo = GetProgramEnvironmentInfo () Editor = ProgEnvInfo.UserName hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst(hwnd) lnLast = GetWndSelLnLast(hwnd) LocalTime = GetSysTime(1) Year = LocalTime.Year Month = LocalTime.Month Day = LocalTime.Day Time = LocalTime.time hbuf = GetCurrentBuf() InsBufLine(hbuf, lnFirst, "#ifndef @sz@") InsBufLine(hbuf, lnLast+2, "#endif /* ifndef @sz@.@Year@-@Month@-@Day@ @Time@ @Editor@ */") } /******************************************************************************* * 函数名称: InsertComment * 说明: 插入注释 * 输入参数: 无 * 输出参数: 无 * 返回值: 无 * 其它: 格式如:/* ABCDEFG */ *******************************************************************************/ macro InsertComment() { sz = Ask("Enter Comment:") if (sz != "") CommentSz(sz); } macro CommentSz(sz) { hbufCur = GetCurrentBuf(); SetBufSelText (hbufCur, "/*@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)) hwnd = GetCurrentWnd () SelRec = GetWndSel (hwnd) Cnt = SelRec.lnLast - SelRec.lnFirst + 1 while(Cnt--) { DelBufLine(hbufCur, SelRec.lnFirst) } SaveBuf (hbufCur) } /******************************************************************************* * 函数名称: InsertFileHeader * 说明: 在当前文件上插入文件头注释 * 输入参数: 无 * 输出参数: 无 * 返回值: 无 * 其它: 无 *******************************************************************************/ macro InsertFileHeader() { hbuf = GetCurrentBuf() ProgEnvInfo = GetProgramEnvironmentInfo () Author = ProgEnvInfo.UserName LocalTime = GetSysTime(1) Year = LocalTime.Year Month = LocalTime.Month Day = LocalTime.Day szBufName = GetBufName (hbuf) Len = strlen(szBufName) FileName = "" if( 0 != Len) { cch = Len while ("//" != szBufName[cch]) { cch = cch - 1 } while(cch < Len) { cch = cch + 1 FileName = Cat(FileName, szBufName[cch]) } } lnFirst = 0 InsBufLine(hbuf, lnFirst++, "/*******************************************************************************") InsBufLine(hbuf, lnFirst++, "* Copyright (C), 2000-@Year@, Electronic Technology Co., Ltd.") InsBufLine(hbuf, lnFirst++, "* 文件名: @FileName@") InsBufLine(hbuf, lnFirst++, "* 作 者: @Author@") InsBufLine(hbuf, lnFirst++, "* 版 本:") InsBufLine(hbuf, lnFirst++, "* 日 期: @Year@-@Month@-@Day@ //完成日期") InsBufLine(hbuf, lnFirst++, "* 说 明: // 用于详细说明此程序文件完成的主要功能,与其他模块") InsBufLine(hbuf, lnFirst++, "* // 或函数的接口,输出值、取值范围、含义及参数间的控") InsBufLine(hbuf, lnFirst++, "* // 制、顺序、独立或依赖等关系") InsBufLine(hbuf, lnFirst++, "* 修订历史: // 修改历史记录列表,每条修改记录应包括修改日期、修改") InsBufLine(hbuf, lnFirst++, "* // 者及修改内容简述") InsBufLine(hbuf, lnFirst++, "* 1. 时间: @Year@-@Month@-@Day@") InsBufLine(hbuf, lnFirst++, "* 修订者: @Author@") InsBufLine(hbuf, lnFirst++, "* 修订内容: 创建") InsBufLine(hbuf, lnFirst++, "* 2.") InsBufLine(hbuf, lnFirst++, "* 其它: // 其它内容的说明(选填)") InsBufLine(hbuf, lnFirst++, "*******************************************************************************/") SetBufIns (hbuf, lnFirst,0) Len = strlen(FileName) if(("h" == tolower(FileName[Len-1])) && ("." == FileName[Len-2])) { FileName = toupper(FileName) FileName[Len-2] = "_" szDef = "_" szDef = Cat(szDef,FileName) szDef = Cat(szDef,"_") ProgEnvInfo = GetProgramEnvironmentInfo () Editor = ProgEnvInfo.UserName hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst(hwnd) LocalTime = GetSysTime(1) Year = LocalTime.Year Month = LocalTime.Month Day = LocalTime.Day Time = LocalTime.time hbuf = GetCurrentBuf() InsBufLine(hbuf,lnFirst++,"#ifndef @szDef@") InsBufLine(hbuf,lnFirst++,"#define @szDef@") InsBufLine(hbuf,lnFirst++,"") InsBufLine(hbuf,lnFirst++,"") InsBufLine(hbuf,lnFirst++,"") InsBufLine(hbuf,lnFirst++,"#endif /* ifndef @szDef@.@Year@-@Month@-@Day@ @Time@ @Editor@ */") } SaveBuf (hbuf) } /******************************************************************************* * 函数名称: InsertFunctionHeader * 说明: 插入函数的头注释 * 输入参数: 无 * 输出参数: 无 * 返回值: 无 * 其它: 无 *******************************************************************************/ macro InsertFunctionHeader() { hbuf = GetCurrentBuf() lnFirst = GetBufLnCur(hbuf) FuncName = GetCurSymbol() /* szLine = GetBufLine (hbuf, lnFirst) Len = strlen(szLine) FuncName = "" if( 0 != Len) { cch = 0 while ("(" != szLine[cch]) { cch = cch + 1 } while((" " == szLine[cch-1]) || (" " == szLine[cch-1])) { cch = cch - 1 } cch = cch - 1 ichLast = cch while((" " != szLine[cch]) && (" " != szLine[cch]) && ("*" != szLine[cch])) { cch = cch - 1 } ichFirst = cch while(ichFirst < ichLast) { ichFirst = ichFirst + 1 FuncName = Cat(FuncName, szLine[ichFirst]) } } */ InsBufLine(hbuf, lnFirst++, "/*******************************************************************************") InsBufLine(hbuf, lnFirst++, "* 函数名称: @FuncName@ // 函数名称。") InsBufLine(hbuf, lnFirst++, "* 说明: // 函数功能、性能等的描述。") InsBufLine(hbuf, lnFirst++, "* 输入参数: // 输入参数说明,包括每个参数的作。 ") InsBufLine(hbuf, lnFirst++, "* // 用、取值说明及参数间关系。 ") InsBufLine(hbuf, lnFirst++, "* 输出参数: // 对输出参数的说明。") InsBufLine(hbuf, lnFirst++, "* 返回值: // 函数返回值的说明。") InsBufLine(hbuf, lnFirst++, "* 其它: // 其它说明(选填)。") InsBufLine(hbuf, lnFirst++, "*******************************************************************************/") SaveBuf (hbuf) } /******************************************************************************* * 函数名称: DelPpIf * 说明: 删除预处理指令if/ifndef/ifdef ... endif * 输入参数: 无 * 输出参数: 无 * 返回值: 无 * 其它: 无 *******************************************************************************/ macro DelPpIf() { hbuf = GetCurrentBuf() lnFirst = GetBufLnCur(hbuf) lnIf = GetIfLine(hbuf,lnFirst) lnEndif = GetEndifLine(hbuf,lnFirst) // Msg("IF:@lnIf@,END:@lnEnd@") if((-1 == lnIf) || (-1 == lnEndif)) { return 0 } DelBufLine(hbuf,lnIf) DelBufLine(hbuf,lnEndif-1) } macro GetIfLine(hBuf,Ln) { Start = Ln Count = 1 while(Ln > 0) { szLn = GetBufLine(hBuf,Ln) i = 0 while((" " == szLn[i]) || (" " == szLn[i])) { i = i + 1 } szRet = "" while("" != szLn[i]) { szRet = Cat(szRet,szLn[i]) i = i + 1 } szLn = szRet if(4 > strlen(szLn)) { Ln = Ln - 1 continue } if(("#" == szLn[0]) && ("i" == szLn[1]) && ("f" == szLn[2])) { Count = Count - 1 if(0 >= Count) { return(Ln) } } else { if(("#" == szLn[0]) && ("e" == szLn[1]) && ("n" == szLn[2]) && ("d" == szLn[3])) { if(Start != Ln) { Count = Count + 1 } } } Ln = Ln - 1 } return -1 } macro GetEndifLine(hBuf,Ln) { Start = Ln Count = 1 lnCnt = GetBufLineCount (hBuf) while(Ln < lnCnt) { szLn = GetBufLine(hBuf,Ln) i = 0 while((" " == szLn[i]) || (" " == szLn[i])) { i = i + 1 } szRet = "" while("" != szLn[i]) { szRet = Cat(szRet,szLn[i]) i = i + 1 } szLn = szRet if(4 > strlen(szLn)) { Ln = Ln + 1 continue } if(("#" == szLn[0]) && ("e" == szLn[1]) && ("n" == szLn[2]) && ("d" == szLn[3])) { Count = Count - 1 if(0 >= Count) { return(Ln) } } else { if(("#" == szLn[0]) && ("i" == szLn[1]) && ("f" == szLn[2])) { if(Start != Ln) { Count = Count + 1 } } } Ln = Ln + 1 } return -1 }
为宏指定快捷键:
Step 1:将以上代码复制并保存为文件utils.em,然后将其复制到“我的文档/Source Insight/Projects/Base ”覆盖原有的文件。
Step 2:Option-〉Key Assignments
Step 3:在Command栏中找到需要的宏,点击 Assign New Key来指定快捷键。(在这里你可以为Source Insight中的所有命令指定快捷键)。