Quicker宏在SI中的使用方法(下载地址:链接:https://pan.baidu.com/s/1VrDxlPhft7RPUCCOKxsGIg  提取码:2d4u)

Quicker宏的添加到SI中配置方法:

1. 运行SI,打开Base工程,如果没有该工程,则生成它,将Quicker.em加入到工程中

2. 安装触发热键和菜单,打开SI的Options的Key Assignments菜单,在Command窗口中选择Macro: AutoExpand然后对其赋一个热键,例如Ctrl Enter

3. 对于宏FormatLine,UpdateFunctionList,InsertTraceInfo,InsertFuncName,ReplaceBufTab,ReplaceTabInProj,ComentCPPtoC等功能,可以根据情况定义为菜单或热键

4. 选择Options的Save Configuration先保存自己的配置,以便回退,回退时选择Options的Load Configuration来装载该配置.

5. Quicker有两种命令,一种是扩展命令,一种是普通命令。

扩展命令:在代码文件中输入命令名,然后按前面AutoExpand宏所定义的热键(Ctrl Enter)来执行该命令通命令:直接根据定义的热键或菜单来执行,目前一般的扩展命令都对应有相应的普通命令

Quicker宏在SI中的使用方法:

1 标准C语言扩展

1.1 /* 自动生成/* */ 该命令自动生成C语言的注释,它能自动换行对齐,在把文档中一长串注释拷贝过来时特别管用,不用自己去对齐了。还能自动识别中文和英文单词,对于中文不会把一个字分开,对于英文单词分开时会自动添加连字符,下面是一个注释的例子abcdefghijk = abcd + cdefg + hijk /*该命令自动生成C语言的注释,它能自动换行对齐,在把文档中一长串注释拷贝过来时特别管用,不用自己去对齐了。*/

1.2 { 自动生成 }

1.3 while (wh) 自动生成While语句

  1. while ( # )
  2. {
  3. #
  4. }

1.4 if 自动生成if语句

  1. if 生成if结构的语句
  2. ife 对应生成if else结构的语句
  3. ifs 对应生成if elseif else结构的f语句
  4. if ( # )
  5. {
  6. #
  7. }

1.5 for 自动生成for语句,支持块命令插入

该命令自动生成如下格式

  1. for ( #; #; # )
  2. {
  3. #
  4. }

1.5.1 fo 自动生成for语句与前一条命令相比它直接会定义循环变量

  1. UINT32 ulI = ;
  2.  
  3. for ( ulI = ; ulI < #; ulI++ )
  4. {
  5. #
  6. }

1.6 do 自动生成 do while语句

该命令自动生成如下格式

  1. do
  2. {
  3. #
  4. } while ( # );

1.7 #ifd 自动生成 #ifdef 命令

该命令生成如下格式

  1. #ifdef UMSC
  2.  
  3. #endif /* UMSC */

1.8 #ifn 自动生成 #ifndef 命令

该命令生成如下格式

  1. #ifndef UMSC
  2.  
  3. #endif /* UMSC */

1.9 #if 自动生成 #if 命令

该命令生成如下格式

  1. #if ( UMSC == 1)
  2. #endif /*if ( UMSC == 1) */

1.10 cpp 自动生成适用于c++的c原型说明定义

该命令生成如下格式

  1. #ifdef __cplusplus
  2. #if __cplusplus
  3.  
  4. extern "C"{
  5.  
  6. #endif
  7.  
  8. #endif /* __cplusplus */
  9.  
  10. #ifdef __cplusplus
  11.  
  12. #if __cplusplus
  13. }
  14. #endif
  15. #endif /* __cplusplus */

1.11 switch (sw) 自动生成switch语句

该命令将提示输入case的个数,生成如下格式

  1. switch ( # )
  2. {
  3. case #:
  4. #
  5. break;
  6. default:
  7. #
  8. }

1.12 case (ca)自动生成case语句

支持块命令输入

该命令生成如下格式,用它可以避免遗漏break

  1. case #:
  2. #
  3. break;

1.13 struct (st) 自动生成结构类型

该命令自动生成如下结构定义,它提示输入结构名,会自动转换成大写形式,并且自动在其后添加_STRU作为结构类型

  1. typedef struct HELLO_TEST
  2. {
  3. #
  4. }HELLO_TEST_STRU;

1.14 enum (en) 自动生成枚举类型

该命令自动生成如下结构定义,它提示输入结构名,会自动转换成大写形式,并且自动在其后添加_STRU作为结构类型

  1. typedef enum HELLO_TEST
  2. {
  3. #
  4. }HELLO_TEST_ENUM;

2 标准说明生成

2.1  config (co) 配置用户名和标题的说明语种

用户名就是前面自动生成的作者,修改者的名字,语种。

2.2  file (fi) 生成标准的文件头

自动生成如下格式,它能自动取得文件名,作者名,时间,以及函数列表。

2.3 func (fu) 生成标准的函数头说明

其自动生成如下函数头,该函数必须在该函数的前一行执行,它能自动取得函数名,能够自动取得函数的输入、输出参数,并且排列好,同时生成日期和作者。能够 提示输入功能描述,输入的内容能够自动换行对齐,这样既可以避免遗漏说明,而且一般在详细设计中对每个函数的主要功能都有详细的描述,只要把这些描述 拷贝过来即可,它能自动排列好, 非常方便。(因为SI的宏功能有限,没能自动加入调用函数和被调函数的功能),如果不是在已存在的函数前执行则提示输入函数名,提示输入函数描述,提示输入返回值类型,提示输入函数入口参数,输完后按Esc退出。

2.4  hi  增加修改历史列表

自动在该行增加修改历史列表,用于文件头和函数头说明中的历史记录更新,其添加形式如下。

2.5  hd  自动生成函数头文件

该命令能够自动生成但前C文件的头文件定义,包括常用的宏定义,还有全部的函数原型定义。

2.6  Hdn  生成新的有文件

该命令能够自动生成指定的的头文件定义,包括常用的宏定义,提示输入函数原型的类型。

3 代码修改注释

3.1  pn  添加问题单号

在进行问题单修改时都要求在修改的地方注明问题单号和修改人以及修改时间,大部分一个问题单的修改都会涉及到几个地方,本功能提供自动取问题单号的功能,下面的几个命令所生成的问题单号就是有它提供,如果输入为#则不显示问题单号

3.2  ap 添加问题单修改说明

该命令提示输入问题单号和修改原因,生成如下格式的说明

3.3 ab 添加开始说明

它能自动生成如下说明:

1.有问题单号的情况,其中问题单号是由ap命令加入的。

/*BEGIN: Added by XXXX, 2002/5/13   问题单号:D02556*/

2.没有问题单号的情况,

/*BEGIN: Added by XXXX, 2002/5/13*/

3.4  ae  添加结束命令

该命令是as的对应命令,表示结束添加

支持块命令操作

3.5  abg 插入添加开始和结束说明

该命令是前两个命令的组合

支持块命令操作

3.6  db 删除开始命令

它能自动生成如下说明:

1.有问题单号的情况,其中问题单号是由ap命令加入的。

/*BEGIN: Deleted by XXXX, 2002/5/13   问题单号:D02556*/

2.没有问题单号的情况,

/*BEGIN: Deleted by XXXX, 2002/5/13 */

3.7  de  删除结束命令

该命令是ds的对应命令,表示删除结束

3.8  dbg 插入删除开始和结束说明

该命令是前两个命令的组合

支持块命令操作

3.9  mb 修改开始命令

它能自动生成如下说明:

1.有问题单号的情况,其中问题单号是由ap命令加入的。

/*BEGIN: Modified by XXXX, 2002/5/13   问题单号:D02556*/

2.没有问题单号的情况,

/*BEGIN: Modified by XXXX, 2002/5/13 */

3.10  me  修改结束命令

该命令是ms的对应命令,表示删除结束

3.11  mbg 插入修改开始和结束说明

该命令是前两个命令的组合

支持块命令操作

Quicker.em源码(下载地址 链接:https://pan.baidu.com/s/1tUn5vTbnOtY-tlT9lilL5w 提取码:nlwg)

  1. /*****************************************************************************
  2. 函 数 名 : AutoExpand
  3. 功能描述 : 扩展命令入口函数
  4. 输出参数 : 无
  5. 返 回 值 :
  6. 调用函数 :
  7. 被调函数 :
  8.  
  9. 修改历史 :
  10. 1.日 期 : 2008年6月18日
  11. 作 者 : 张强
  12. 修改内容 : 修改
  13.  
  14. *****************************************************************************/
  15. macro AutoExpand() //Alt+~
  16. {
  17. //配置信息
  18. // get window, sel, and buffer handles
  19. hwnd = GetCurrentWnd()
  20. if (hwnd == )
  21. stop
  22. sel = GetWndSel(hwnd)
  23. if(sel.lnFirst != sel.lnLast)
  24. {
  25. /*块命令处理*/
  26. BlockCommandProc()
  27. }
  28. if (sel.ichFirst == )
  29. stop
  30. hbuf = GetWndBuf(hwnd)
  31. language = getreg(LANGUAGE)
  32. if(language != )
  33. {
  34. language =
  35. }
  36. nVer =
  37. nVer = GetVersion()
  38. /*取得用户名*/
  39. szMyName = getreg(MYNAME)
  40. if(strlen( szMyName ) == )
  41. {
  42. szMyName = Ask("Enter your name:")
  43. setreg(MYNAME, szMyName)
  44. }
  45. // get line the selection (insertion point) is on
  46. szLine = GetBufLine(hbuf, sel.lnFirst);
  47. // parse word just to the left of the insertion point
  48. wordinfo = GetWordLeftOfIch(sel.ichFirst, szLine)
  49. ln = sel.lnFirst;
  50. chTab = CharFromAscii()
  51.  
  52. // prepare a new indented blank line to be inserted.
  53. // keep white space on left and add a tab to indent.
  54. // this preserves the indentation level.
  55. chSpace = CharFromAscii();
  56. ich =
  57. while (szLine[ich] == chSpace || szLine[ich] == chTab)
  58. {
  59. ich = ich +
  60. }
  61. szLine1 = strmid(szLine,,ich)
  62. szLine = strmid(szLine, , ich) # " "
  63.  
  64. sel.lnFirst = sel.lnLast
  65. sel.ichFirst = wordinfo.ich
  66. sel.ichLim = wordinfo.ich
  67.  
  68. /*自动完成简化命令的匹配显示*/
  69. wordinfo.szWord = RestoreCommand(hbuf,wordinfo.szWord)
  70. sel = GetWndSel(hwnd)
  71. if (wordinfo.szWord == "pn") /*问题单号的处理*/
  72. {
  73. DelBufLine(hbuf, ln)
  74. AddPromblemNo()
  75. return
  76. }
  77. /*配置命令执行*/
  78. else if (wordinfo.szWord == "config" || wordinfo.szWord == "co")
  79. {
  80. DelBufLine(hbuf, ln)
  81. ConfigureSystem()
  82. return
  83. }
  84. /*修改历史记录更新*/
  85. else if (wordinfo.szWord == "hi")
  86. {
  87. InsertHistory(hbuf,ln+,language)
  88. DelBufLine(hbuf, ln)
  89. return
  90. }
  91. else if (wordinfo.szWord == "abg")
  92. {
  93. sel.ichFirst = sel.ichFirst -
  94. SetWndSel(hwnd,sel)
  95. InsertReviseAdd()
  96. PutBufLine(hbuf, ln+ ,szLine1)
  97. SetBufIns(hwnd,ln+,sel.ichFirst)
  98. return
  99. }
  100. else if (wordinfo.szWord == "dbg")
  101. {
  102. sel.ichFirst = sel.ichFirst -
  103. SetWndSel(hwnd,sel)
  104. InsertReviseDel()
  105. PutBufLine(hbuf, ln+ ,szLine1)
  106. SetBufIns(hwnd,ln+,sel.ichFirst)
  107. return
  108. }
  109. else if (wordinfo.szWord == "mbg")
  110. {
  111. sel.ichFirst = sel.ichFirst -
  112. SetWndSel(hwnd,sel)
  113. InsertReviseMod()
  114. PutBufLine(hbuf, ln+ ,szLine1)
  115. SetBufIns(hwnd,ln+,sel.ichFirst)
  116. return
  117. }
  118. if(language == )
  119. {
  120. ExpandProcEN(szMyName,wordinfo,szLine,szLine1,nVer,ln,sel)
  121. }
  122. else
  123. {
  124. ExpandProcCN(szMyName,wordinfo,szLine,szLine1,nVer,ln,sel)
  125. }
  126. }
  127.  
  128. /*****************************************************************************
  129. 函 数 名 : ExpandProcEN
  130. 功能描述 : 英文说明的扩展命令处理
  131. 输入参数 : szMyName 用户名
  132. wordinfo
  133. szLine
  134. szLine1
  135. nVer
  136. ln
  137. sel
  138. 输出参数 : 无
  139. 返 回 值 :
  140. 调用函数 :
  141. 被调函数 :
  142.  
  143. 修改历史 :
  144. 1.日 期 : 2008年6月19日
  145. 作 者 : 张强
  146. 修改内容 : 新生成函数
  147.  
  148. 2.日 期 : 2011年2月16日
  149. 作 者 : 彭军
  150. 修改内容 : 修改问题单号为mantis号,修改时间格式为xxxxxxxx(年、月、日),
  151. 中间没有分隔符,增加单行注释,自动扩展码为"an"
  152.  
  153. 3.日 期 : 2011年2月22日
  154. 作 者 : 彭军
  155. 修改内容 : 修改单行注释头为add by、delete by、modify by,自动扩展码分别为"as"、"ds"、"ms"
  156. 修改单行注释为光标所在行的最后,不删除光标所在行
  157. 删除原自动扩展码为"an"的单行注释
  158.  
  159. *****************************************************************************/
  160. macro ExpandProcEN(szMyName,wordinfo,szLine,szLine1,nVer,ln,sel)
  161. {
  162.  
  163. szCmd = wordinfo.szWord
  164. hwnd = GetCurrentWnd()
  165. if (hwnd == )
  166. stop
  167. hbuf = GetWndBuf(hwnd)
  168. /*英文注释*/
  169. if (szCmd == "/*")
  170. {
  171. if(wordinfo.ichLim > )
  172. {
  173. Msg("The right margine is small, Please use a new line")
  174. stop
  175. }
  176. szCurLine = GetBufLine(hbuf, sel.lnFirst);
  177. szLeft = strmid(szCurLine,,wordinfo.ichLim)
  178. lineLen = strlen(szCurLine)
  179. kk =
  180. while(wordinfo.ichLim + kk < lineLen)
  181. {
  182. if((szCurLine[wordinfo.ichLim + kk] != " ")||(szCurLine[wordinfo.ichLim + kk] != "\t")
  183. {
  184. msg("you must insert /* at the end of a line");
  185. return
  186. }
  187. kk = kk +
  188. }
  189. szContent = Ask("Please input comment")
  190. DelBufLine(hbuf, ln)
  191. szLeft = cat( szLeft, " ")
  192. CommentContent(hbuf,ln,szLeft,szContent,)
  193. return
  194. }
  195. else if(szCmd == "{")
  196. {
  197. InsBufLine(hbuf, ln + , "@szLine@")
  198. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  199. SetBufIns (hbuf, ln + , strlen(szLine))
  200. return
  201. }
  202. else if (szCmd == "while" )
  203. {
  204. SetBufSelText(hbuf, " ( # )")
  205. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  206. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  207. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  208. }
  209. else if( szCmd == "else" )
  210. {
  211. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  212. InsBufLine(hbuf, ln + , "@szLine@");
  213. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  214. SetBufIns (hbuf, ln + , strlen(szLine))
  215. return
  216. }
  217. else if (szCmd == "#ifd" || szCmd == "#ifdef") //#ifdef
  218. {
  219. DelBufLine(hbuf, ln)
  220. InsIfdef()
  221. return
  222. }
  223. else if (szCmd == "#ifn" || szCmd == "#ifndef") //#ifndef
  224. {
  225. DelBufLine(hbuf, ln)
  226. InsIfndef()
  227. return
  228. }
  229. else if (szCmd == "#if")
  230. {
  231. DelBufLine(hbuf, ln)
  232. InsertPredefIf()
  233. return
  234. }
  235. else if (szCmd == "cpp")
  236. {
  237. DelBufLine(hbuf, ln)
  238. InsertCPP(hbuf,ln)
  239. return
  240. }
  241. else if (szCmd == "if")
  242. {
  243. SetBufSelText(hbuf, " ( # )")
  244. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  245. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  246. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  247. /* InsBufLine(hbuf, ln + 4, "@szLine1@" # "else");
  248. InsBufLine(hbuf, ln + 5, "@szLine1@" # "{");
  249. InsBufLine(hbuf, ln + 6, "@szLine@" # ";");
  250. InsBufLine(hbuf, ln + 7, "@szLine1@" # "}");*/
  251. }
  252. else if (szCmd == "ef")
  253. {
  254. PutBufLine(hbuf, ln, szLine1 # "else if ( # )")
  255. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  256. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  257. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  258. }
  259. else if (szCmd == "ife")
  260. {
  261. PutBufLine(hbuf, ln, szLine1 # "if ( # )")
  262. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  263. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  264. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  265. InsBufLine(hbuf, ln + , "@szLine1@" # "else");
  266. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  267. InsBufLine(hbuf, ln + , "@szLine@" # ";");
  268. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  269. }
  270. else if (szCmd == "ifs")
  271. {
  272. PutBufLine(hbuf, ln, szLine1 # "if ( # )")
  273. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  274. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  275. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  276. InsBufLine(hbuf, ln + , "@szLine1@" # "else if ( # )");
  277. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  278. InsBufLine(hbuf, ln + , "@szLine@" # ";");
  279. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  280. InsBufLine(hbuf, ln + , "@szLine1@" # "else");
  281. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  282. InsBufLine(hbuf, ln + , "@szLine@" # ";");
  283. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  284. }
  285. else if (szCmd == "for")
  286. {
  287. SetBufSelText(hbuf, " (#; #; #)")
  288. InsBufLine(hbuf, ln + , "@szLine1@" # "{")
  289. InsBufLine(hbuf, ln + , "@szLine@" # "#")
  290. InsBufLine(hbuf, ln + , "@szLine1@" # "}")
  291. SetWndSel(hwnd, sel)
  292. SearchForward()
  293. szVar = ask("Please input loop variable")
  294. newsel = sel
  295. newsel.ichLim = GetBufLineLength (hbuf, ln)
  296. SetWndSel(hwnd, newsel)
  297. SetBufSelText(hbuf, " (@szVar@ = #; @szVar@ #; @szVar@++)")
  298. }
  299. else if (szCmd == "fo")
  300. {
  301. SetBufSelText(hbuf, "r (ulI = 0; ulI < #; ulI++)")
  302. InsBufLine(hbuf, ln + , "@szLine1@" # "{")
  303. InsBufLine(hbuf, ln + , "@szLine@" # "#")
  304. InsBufLine(hbuf, ln + , "@szLine1@" # "}")
  305. symname =GetCurSymbol ()
  306. symbol = GetSymbolLocation(symname)
  307. if(strlen(symbol) > )
  308. {
  309. nIdx = symbol.lnName + ;
  310. while( )
  311. {
  312. szCurLine = GetBufLine(hbuf, nIdx);
  313. nRet = strstr(szCurLine,"{")
  314. if( nRet != 0xffffffff )
  315. {
  316. break;
  317. }
  318. nIdx = nIdx +
  319. if(nIdx > symbol.lnLim)
  320. {
  321. break
  322. }
  323. }
  324. InsBufLine(hbuf, nIdx + , " VOS_UINT32 ulI = 0;");
  325. }
  326. }
  327. else if (szCmd == "switch" )
  328. {
  329. nSwitch = ask("Please input the number of case")
  330. SetBufSelText(hbuf, " ( # )")
  331. InsBufLine(hbuf, ln + , "@szLine1@" # "{")
  332. InsertMultiCaseProc(hbuf,szLine1,nSwitch)
  333. }
  334. else if (szCmd == "do")
  335. {
  336. InsBufLine(hbuf, ln + , "@szLine1@" # "{")
  337. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  338. InsBufLine(hbuf, ln + , "@szLine1@" # "} while ( # );")
  339. }
  340. else if (szCmd == "case" )
  341. {
  342. SetBufSelText(hbuf, " # :")
  343. InsBufLine(hbuf, ln + , "@szLine@" # "#")
  344. InsBufLine(hbuf, ln + , "@szLine@" # "break;")
  345. }
  346. else if (szCmd == "struct" || szCmd == "st")
  347. {
  348. DelBufLine(hbuf, ln)
  349. szStructName = toupper(Ask("Please input struct name"))
  350. InsBufLine(hbuf, ln, "@szLine1@typedef struct @szStructName@");
  351. InsBufLine(hbuf, ln + , "@szLine1@{");
  352. InsBufLine(hbuf, ln + , "@szLine@ ");
  353. szStructName = cat(szStructName,"_STRU")
  354. InsBufLine(hbuf, ln + , "@szLine1@}@szStructName@;");
  355. SetBufIns (hbuf, ln + , strlen(szLine))
  356. return
  357. }
  358. else if (szCmd == "enum" || szCmd == "en")
  359. {
  360. DelBufLine(hbuf, ln)
  361. szStructName = toupper(Ask("Please input enum name"))
  362. InsBufLine(hbuf, ln, "@szLine1@typedef enum @szStructName@");
  363. InsBufLine(hbuf, ln + , "@szLine1@{");
  364. InsBufLine(hbuf, ln + , "@szLine@ ");
  365. szStructName = cat(szStructName,"_ENUM")
  366. InsBufLine(hbuf, ln + , "@szLine1@}@szStructName@;");
  367. SetBufIns (hbuf, ln + , strlen(szLine))
  368. return
  369. }
  370. else if (szCmd == "file" || szCmd == "fi")
  371. {
  372. DelBufLine(hbuf, ln)
  373. InsertFileHeaderEN( hbuf,, szMyName,".C file function description" )
  374. return
  375. }
  376. else if (szCmd == "func" || szCmd == "fu")
  377. {
  378. DelBufLine(hbuf,ln)
  379. lnMax = GetBufLineCount(hbuf)
  380. if(ln != lnMax)
  381. {
  382. szNextLine = GetBufLine(hbuf,ln)
  383. if( (strstr(szNextLine,"(") != 0xffffffff) || (nVer != ))
  384. {
  385. symbol = GetCurSymbol()
  386. if(strlen(symbol) != )
  387. {
  388. FuncHeadCommentEN(hbuf, ln, symbol, szMyName,)
  389. return
  390. }
  391. }
  392. }
  393. szFuncName = Ask("Please input function name")
  394. FuncHeadCommentEN(hbuf, ln, szFuncName, szMyName, )
  395. }
  396. else if (szCmd == "tab")
  397. {
  398. DelBufLine(hbuf, ln)
  399. ReplaceBufTab()
  400. return
  401. }
  402. else if (szCmd == "ap")
  403. {
  404. SysTime = GetSysTime()
  405. sz=SysTime.Year
  406. sz1=SysTime.month
  407. sz3=SysTime.day
  408. if (sz1 < )
  409. {
  410. szMonth = "0@sz1@"
  411. }
  412. else
  413. {
  414. szMonth = sz1
  415. }
  416. if (sz3 < )
  417. {
  418. szDay = "0@sz3@"
  419. }
  420. else
  421. {
  422. szDay = sz3
  423. }
  424.  
  425. DelBufLine(hbuf, ln)
  426. szQuestion = AddPromblemNo()
  427. InsBufLine(hbuf, ln, "@szLine1@/* Promblem Number: @szQuestion@ Author:@szMyName@, Date:@sz@-@szMonth@-@szDay@ ");
  428. szContent = Ask("Description")
  429. szLeft = cat(szLine1," Description : ");
  430. if(strlen(szLeft) > )
  431. {
  432. Msg("The right margine is small, Please use a new line")
  433. stop
  434. }
  435. ln = CommentContent(hbuf,ln + ,szLeft,szContent,)
  436. return
  437. }
  438. else if (szCmd == "hd")
  439. {
  440. DelBufLine(hbuf, ln)
  441. CreateFunctionDef(hbuf,szMyName,)
  442. return
  443. }
  444. else if (szCmd == "hdn")
  445. {
  446. DelBufLine(hbuf, ln)
  447.  
  448. /*生成不要文件名的新头文件*/
  449. CreateNewHeaderFile()
  450. return
  451. }
  452. else if (szCmd == "ab")
  453. {
  454. SysTime = GetSysTime()
  455. sz=SysTime.Year
  456. sz1=SysTime.month
  457. sz3=SysTime.day
  458. if (sz1 < )
  459. {
  460. szMonth = "0@sz1@"
  461. }
  462. else
  463. {
  464. szMonth = sz1
  465. }
  466. if (sz3 < )
  467. {
  468. szDay = "0@sz3@"
  469. }
  470. else
  471. {
  472. szDay = sz3
  473. }
  474.  
  475. DelBufLine(hbuf, ln)
  476. szQuestion = GetReg ("PNO")
  477. if(strlen(szQuestion)>)
  478. {
  479. InsBufLine(hbuf, ln, "@szLine1@/* add begin by @szMyName@, @sz@-@szMonth@-@szDay@*/");
  480. }
  481. else
  482. {
  483. InsBufLine(hbuf, ln, "@szLine1@/* add begin by @szMyName@, @sz@-@szMonth@-@szDay@*/");
  484. }
  485. return
  486. }
  487. else if (szCmd == "ae")
  488. {
  489. SysTime = GetSysTime()
  490. sz=SysTime.Year
  491. sz1=SysTime.month
  492. sz3=SysTime.day
  493. if (sz1 < )
  494. {
  495. szMonth = "0@sz1@"
  496. }
  497. else
  498. {
  499. szMonth = sz1
  500. }
  501. if (sz3 < )
  502. {
  503. szDay = "0@sz3@"
  504. }
  505. else
  506. {
  507. szDay = sz3
  508. }
  509.  
  510. DelBufLine(hbuf, ln)
  511. InsBufLine(hbuf, ln, "@szLine1@/* add end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  512. return
  513. }
  514. else if (szCmd == "db")
  515. {
  516. SysTime = GetSysTime()
  517. sz=SysTime.Year
  518. sz1=SysTime.month
  519. sz3=SysTime.day
  520. if (sz1 < )
  521. {
  522. szMonth = "0@sz1@"
  523. }
  524. else
  525. {
  526. szMonth = sz1
  527. }
  528. if (sz3 < )
  529. {
  530. szDay = "0@sz3@"
  531. }
  532. else
  533. {
  534. szDay = sz3
  535. }
  536.  
  537. DelBufLine(hbuf, ln)
  538. szQuestion = GetReg ("PNO")
  539. if(strlen(szQuestion) > )
  540. {
  541. InsBufLine(hbuf, ln, "@szLine1@/* delete begin by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  542. }
  543. else
  544. {
  545. InsBufLine(hbuf, ln, "@szLine1@/* delete begin by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  546. }
  547.  
  548. return
  549. }
  550. else if (szCmd == "de")
  551. {
  552. SysTime = GetSysTime()
  553. sz=SysTime.Year
  554. sz1=SysTime.month
  555. sz3=SysTime.day
  556. if (sz1 < )
  557. {
  558. szMonth = "0@sz1@"
  559. }
  560. else
  561. {
  562. szMonth = sz1
  563. }
  564. if (sz3 < )
  565. {
  566. szDay = "0@sz3@"
  567. }
  568. else
  569. {
  570. szDay = sz3
  571. }
  572.  
  573. DelBufLine(hbuf, ln + )
  574. InsBufLine(hbuf, ln, "@szLine1@/* delete end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  575. return
  576. }
  577. else if (szCmd == "mb")
  578. {
  579. SysTime = GetSysTime()
  580. sz=SysTime.Year
  581. sz1=SysTime.month
  582. sz3=SysTime.day
  583. if (sz1 < )
  584. {
  585. szMonth = "0@sz1@"
  586. }
  587. else
  588. {
  589. szMonth = sz1
  590. }
  591. if (sz3 < )
  592. {
  593. szDay = "0@sz3@"
  594. }
  595. else
  596. {
  597. szDay = sz3
  598. }
  599.  
  600. DelBufLine(hbuf, ln)
  601. szQuestion = GetReg ("PNO")
  602. if(strlen(szQuestion) > )
  603. {
  604. InsBufLine(hbuf, ln, "@szLine1@/* modify begin by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  605. }
  606. else
  607. {
  608. InsBufLine(hbuf, ln, "@szLine1@/* modify begin by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  609. }
  610. return
  611. }
  612. else if (szCmd == "me")
  613. {
  614. SysTime = GetSysTime()
  615. sz=SysTime.Year
  616. sz1=SysTime.month
  617. sz3=SysTime.day
  618. if (sz1 < )
  619. {
  620. szMonth = "0@sz1@"
  621. }
  622. else
  623. {
  624. szMonth = sz1
  625. }
  626. if (sz3 < )
  627. {
  628. szDay = "0@sz3@"
  629. }
  630. else
  631. {
  632. szDay = sz3
  633. }
  634.  
  635. DelBufLine(hbuf, ln)
  636. InsBufLine(hbuf, ln, "@szLine1@/* modify end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  637. return
  638. }
  639. else if (szCmd == "as")
  640. {
  641. SysTime = GetSysTime()
  642. sz=SysTime.Year
  643. sz1=SysTime.month
  644. sz3=SysTime.day
  645. if (sz1 < )
  646. {
  647. szMonth = "0@sz1@"
  648. }
  649. else
  650. {
  651. szMonth = sz1
  652. }
  653. if (sz3 < )
  654. {
  655. szDay = "0@sz3@"
  656. }
  657. else
  658. {
  659. szDay = sz3
  660. }
  661.  
  662. szLine1 = strmid (GetBufLine(hbuf, ln), , GetBufLineLength (hbuf, ln)-)
  663. DelBufLine(hbuf, ln)
  664.  
  665. szQuestion = GetReg ("PNO")
  666. if(strlen(szQuestion)>)
  667. {
  668. InsBufLine(hbuf, ln, "@szLine1@/* add by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  669. }
  670. else
  671. {
  672. InsBufLine(hbuf, ln, "@szLine1@/* add by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  673. }
  674. return
  675. }
  676. else if (szCmd == "cs")/*添加一个命令cs 用于生成注释comment by xxx . 该命令被王启国添加2014-5-4*/
  677. {
  678. SysTime = GetSysTime()
  679. sz=SysTime.Year
  680. sz1=SysTime.month
  681. sz3=SysTime.day
  682. if (sz1 < )
  683. {
  684. szMonth = "0@sz1@"
  685. }
  686. else
  687. {
  688. szMonth = sz1
  689. }
  690. if (sz3 < )
  691. {
  692. szDay = "0@sz3@"
  693. }
  694. else
  695. {
  696. szDay = sz3
  697. }
  698.  
  699. szLine1 = strmid (GetBufLine(hbuf, ln), , GetBufLineLength (hbuf, ln)-)
  700. DelBufLine(hbuf, ln)
  701.  
  702. szQuestion = GetReg ("PNO")
  703. if(strlen(szQuestion)>)
  704. {
  705. InsBufLine(hbuf, ln, "@szLine1@/* comment by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  706. }
  707. else
  708. {
  709. InsBufLine(hbuf, ln, "@szLine1@/* comment by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  710. }
  711. return
  712. }
  713. else if (szCmd == "ds")
  714. {
  715. SysTime = GetSysTime()
  716. sz=SysTime.Year
  717. sz1=SysTime.month
  718. sz3=SysTime.day
  719. if (sz1 < )
  720. {
  721. szMonth = "0@sz1@"
  722. }
  723. else
  724. {
  725. szMonth = sz1
  726. }
  727. if (sz3 < )
  728. {
  729. szDay = "0@sz3@"
  730. }
  731. else
  732. {
  733. szDay = sz3
  734. }
  735.  
  736. szLine1 = strmid (GetBufLine(hbuf, ln), , GetBufLineLength (hbuf, ln)-)
  737. DelBufLine(hbuf, ln)
  738. szQuestion = GetReg ("PNO")
  739. if(strlen(szQuestion)>)
  740. {
  741. InsBufLine(hbuf, ln, "@szLine1@/* delete by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  742. }
  743. else
  744. {
  745. InsBufLine(hbuf, ln, "@szLine1@/* delete by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  746. }
  747. return
  748. }
  749. else if (szCmd == "ms")
  750. {
  751. SysTime = GetSysTime()
  752. sz=SysTime.Year
  753. sz1=SysTime.month
  754. sz3=SysTime.day
  755. if (sz1 < )
  756. {
  757. szMonth = "0@sz1@"
  758. }
  759. else
  760. {
  761. szMonth = sz1
  762. }
  763. if (sz3 < )
  764. {
  765. szDay = "0@sz3@"
  766. }
  767. else
  768. {
  769. szDay = sz3
  770. }
  771.  
  772. szLine1 = strmid (GetBufLine(hbuf, ln), , GetBufLineLength (hbuf, ln)-)
  773. DelBufLine(hbuf, ln)
  774. szQuestion = GetReg ("PNO")
  775. if(strlen(szQuestion)>)
  776. {
  777. InsBufLine(hbuf, ln, "@szLine1@/* modify by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  778. }
  779. else
  780. {
  781. InsBufLine(hbuf, ln, "@szLine1@/* modify by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  782. }
  783. return
  784. }
  785. else
  786. {
  787. SearchForward()
  788. // ExpandBraceLarge()
  789. stop
  790. }
  791. SetWndSel(hwnd, sel)
  792. SearchForward()
  793. }
  794.  
  795. /*****************************************************************************
  796. 函 数 名 : ExpandProcCN
  797. 功能描述 : 中文说明的扩展命令
  798. 输入参数 : szMyName
  799. wordinfo
  800. szLine
  801. szLine1
  802. nVer
  803. ln
  804. sel
  805. 输出参数 : 无
  806. 返 回 值 :
  807. 调用函数 :
  808. 被调函数 :
  809.  
  810. 修改历史 :
  811. 1.日 期 : 2008年6月19日
  812. 作 者 : 张强
  813. 修改内容 : 新生成函数
  814.  
  815. 2.日 期 : 2011年2月16日
  816. 作 者 : 彭军
  817. 修改内容 : 修改问题单号为mantis号,修改时间格式为xxxxxxxx(年、月、日),
  818. 中间没有分隔符,增加单行注释,自动扩展码为"an"
  819.  
  820. 3.日 期 : 2011年2月22日
  821. 作 者 : 彭军
  822. 修改内容 : 修改单行注释头为add by、delete by、modify by,自动扩展码分别为"as"、"ds"、"ms"
  823. 修改单行注释为光标所在行的最后,不删除光标所在行
  824. 删除原自动扩展码为"an"的单行注释
  825.  
  826. 4.日 期 : 2011年3月18日
  827. 作 者 : 彭军
  828. 修改内容 : 修改文件的注释不输入描述(不输入描述则文件头注释函数会自动提示用户输入)
  829.  
  830. *****************************************************************************/
  831. macro ExpandProcCN(szMyName,wordinfo,szLine,szLine1,nVer,ln,sel)
  832. {
  833. szCmd = wordinfo.szWord
  834. hwnd = GetCurrentWnd()
  835. if (hwnd == )
  836. stop
  837. hbuf = GetWndBuf(hwnd)
  838.  
  839. //中文注释
  840. if (szCmd == "/*")
  841. {
  842. if(wordinfo.ichLim > )
  843. {
  844. Msg("右边空间太小,请用新的行")
  845. stop
  846. } szCurLine = GetBufLine(hbuf, sel.lnFirst);
  847. szLeft = strmid(szCurLine,,wordinfo.ichLim)
  848. lineLen = strlen(szCurLine)
  849. kk =
  850. /*注释只能在行尾,避免注释掉有用代码*/
  851. while(wordinfo.ichLim + kk < lineLen)
  852. {
  853. if(szCurLine[wordinfo.ichLim + kk] != " ")
  854. {
  855. msg("只能在行尾插入");
  856. return
  857. }
  858. kk = kk +
  859. }
  860. szContent = Ask("请输入注释的内容")
  861. DelBufLine(hbuf, ln)
  862. szLeft = cat( szLeft, " ") //在/*后加一个空格,最后出来的格式是/* 要注释的内容 */
  863. CommentContent(hbuf,ln,szLeft,szContent,)
  864. return
  865. }
  866. else if(szCmd == "{")
  867. {
  868. InsBufLine(hbuf, ln + , "@szLine@")
  869. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  870. SetBufIns (hbuf, ln + , strlen(szLine))
  871. return
  872. }
  873. else if (szCmd == "while" || szCmd == "wh")
  874. {
  875. SetBufSelText(hbuf, " ( # )")
  876. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  877. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  878. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  879. }
  880. else if( szCmd == "else" || szCmd == "el")
  881. {
  882. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  883. InsBufLine(hbuf, ln + , "@szLine@");
  884. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  885. SetBufIns (hbuf, ln + , strlen(szLine))
  886. return
  887. }
  888. else if (szCmd == "#ifd" || szCmd == "#ifdef") //#ifdef
  889. {
  890. DelBufLine(hbuf, ln)
  891. InsIfdef()
  892. return
  893. }
  894. else if (szCmd == "#ifn" || szCmd == "#ifndef") //#ifndef
  895. {
  896. DelBufLine(hbuf, ln)
  897. InsIfndef()
  898. return
  899. }
  900. else if (szCmd == "#if")
  901. {
  902. DelBufLine(hbuf, ln)
  903. InsertPredefIf()
  904. return
  905. }
  906. else if (szCmd == "cpp")
  907. {
  908. DelBufLine(hbuf, ln)
  909. InsertCPP(hbuf,ln)
  910. return
  911. }
  912. else if (szCmd == "if")
  913. {
  914. SetBufSelText(hbuf, " ( # )")
  915. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  916. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  917. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  918. /* InsBufLine(hbuf, ln + 4, "@szLine1@" # "else");
  919. InsBufLine(hbuf, ln + 5, "@szLine1@" # "{");
  920. InsBufLine(hbuf, ln + 6, "@szLine@" # ";");
  921. InsBufLine(hbuf, ln + 7, "@szLine1@" # "}");*/
  922. }
  923. else if (szCmd == "ef")
  924. {
  925. PutBufLine(hbuf, ln, szLine1 # "else if ( # )")
  926. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  927. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  928. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  929. }
  930. else if (szCmd == "ife")
  931. {
  932. PutBufLine(hbuf, ln, szLine1 # "if ( # )")
  933. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  934. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  935. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  936. InsBufLine(hbuf, ln + , "@szLine1@" # "else");
  937. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  938. InsBufLine(hbuf, ln + , "@szLine@" # ";");
  939. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  940. }
  941. else if (szCmd == "ifs")
  942. {
  943. PutBufLine(hbuf, ln, szLine1 # "if ( # )")
  944. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  945. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  946. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  947. InsBufLine(hbuf, ln + , "@szLine1@" # "else if ( # )");
  948. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  949. InsBufLine(hbuf, ln + , "@szLine@" # ";");
  950. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  951. InsBufLine(hbuf, ln + , "@szLine1@" # "else");
  952. InsBufLine(hbuf, ln + , "@szLine1@" # "{");
  953. InsBufLine(hbuf, ln + , "@szLine@" # ";");
  954. InsBufLine(hbuf, ln + , "@szLine1@" # "}");
  955. }
  956. else if (szCmd == "for")
  957. {
  958. SetBufSelText(hbuf, " (#; #; #)")
  959. InsBufLine(hbuf, ln + , "@szLine1@" # "{")
  960. InsBufLine(hbuf, ln + , "@szLine@" # "#")
  961. InsBufLine(hbuf, ln + , "@szLine1@" # "}")
  962. SetWndSel(hwnd, sel)
  963. SearchForward()
  964. szVar = ask("请输入循环变量")
  965. newsel = sel
  966. newsel.ichLim = GetBufLineLength (hbuf, ln)
  967. SetWndSel(hwnd, newsel)
  968. SetBufSelText(hbuf, " (@szVar@ = #; @szVar@ #; @szVar@++)")
  969. }
  970. else if (szCmd == "fo")
  971. {
  972. SetBufSelText(hbuf, "r (ulI = 0; ulI < #; ulI++)")
  973. InsBufLine(hbuf, ln + , "@szLine1@" # "{")
  974. InsBufLine(hbuf, ln + , "@szLine@" # "#")
  975. InsBufLine(hbuf, ln + , "@szLine1@" # "}")
  976. symname =GetCurSymbol ()
  977. symbol = GetSymbolLocation(symname)
  978. if(strlen(symbol) > )
  979. {
  980. nIdx = symbol.lnName + ;
  981. while( )
  982. {
  983. szCurLine = GetBufLine(hbuf, nIdx);
  984. nRet = strstr(szCurLine,"{")
  985. if( nRet != 0xffffffff )
  986. {
  987. break;
  988. }
  989. nIdx = nIdx +
  990. if(nIdx > symbol.lnLim)
  991. {
  992. break
  993. }
  994. }
  995. InsBufLine(hbuf, nIdx + , " VOS_UINT32 ulI = 0;");
  996. }
  997. }
  998. else if (szCmd == "switch" || szCmd == "sw")
  999. {
  1000. nSwitch = ask("请输入case的个数")
  1001. SetBufSelText(hbuf, " ( # )")
  1002. InsBufLine(hbuf, ln + , "@szLine1@" # "{")
  1003. InsertMultiCaseProc(hbuf,szLine1,nSwitch)
  1004. }
  1005. else if (szCmd == "do")
  1006. {
  1007. InsBufLine(hbuf, ln + , "@szLine1@" # "{")
  1008. InsBufLine(hbuf, ln + , "@szLine@" # "#");
  1009. InsBufLine(hbuf, ln + , "@szLine1@" # "} while ( # );")
  1010. }
  1011. else if (szCmd == "case" || szCmd == "ca" )
  1012. {
  1013. SetBufSelText(hbuf, " # :")
  1014. InsBufLine(hbuf, ln + , "@szLine@" # "#")
  1015. InsBufLine(hbuf, ln + , "@szLine@" # "break;")
  1016. }
  1017. else if (szCmd == "struct" || szCmd == "st" )
  1018. {
  1019. DelBufLine(hbuf, ln)
  1020. szStructName = toupper(Ask("请输入结构名:"))
  1021. InsBufLine(hbuf, ln, "@szLine1@typedef struct @szStructName@");
  1022. InsBufLine(hbuf, ln + , "@szLine1@{");
  1023. InsBufLine(hbuf, ln + , "@szLine@ ");
  1024. szStructName = cat(szStructName,"_STRU")
  1025. InsBufLine(hbuf, ln + , "@szLine1@}@szStructName@;");
  1026. SetBufIns (hbuf, ln + , strlen(szLine))
  1027. return
  1028. }
  1029. else if (szCmd == "enum" || szCmd == "en")
  1030. {
  1031. DelBufLine(hbuf, ln)
  1032. //提示输入枚举名并转换为大写
  1033. szStructName = toupper(Ask("请输入枚举名:"))
  1034. InsBufLine(hbuf, ln, "@szLine1@typedef enum @szStructName@");
  1035. InsBufLine(hbuf, ln + , "@szLine1@{");
  1036. InsBufLine(hbuf, ln + , "@szLine@ ");
  1037. szStructName = cat(szStructName,"_ENUM")
  1038. InsBufLine(hbuf, ln + , "@szLine1@}@szStructName@;");
  1039. SetBufIns (hbuf, ln + , strlen(szLine))
  1040. return
  1041. }
  1042. else if (szCmd == "file" || szCmd == "fi" )
  1043. {
  1044. DelBufLine(hbuf, ln)
  1045. /*生成文件头说明*/
  1046. InsertFileHeaderCN( hbuf,, szMyName,"" )
  1047. return
  1048. }
  1049. else if (szCmd == "hd")
  1050. {
  1051. DelBufLine(hbuf, ln)
  1052. /*生成C语言的头文件*/
  1053. CreateFunctionDef(hbuf,szMyName,)
  1054. return
  1055. }
  1056. else if (szCmd == "hdn")
  1057. {
  1058. DelBufLine(hbuf, ln)
  1059. /*生成不要文件名的新头文件*/
  1060. CreateNewHeaderFile()
  1061. return
  1062. }
  1063. else if (szCmd == "func" || szCmd == "fu")
  1064. {
  1065. DelBufLine(hbuf,ln)
  1066. lnMax = GetBufLineCount(hbuf)
  1067. //最后一行肯定是新函数
  1068. if(ln != lnMax)
  1069. {
  1070. szNextLine = GetBufLine(hbuf,ln)
  1071. /*对于2.1版的si如果是非法symbol就会中断执行,故该为以后一行
  1072. 是否有‘(’来判断是否是新函数*/
  1073. if( (strstr(szNextLine,"(") != 0xffffffff) || (nVer != ))
  1074. {
  1075. /*是已经存在的函数*/
  1076. symbol = GetCurSymbol()
  1077. if(strlen(symbol) != )
  1078. {
  1079. FuncHeadCommentCN(hbuf, ln, symbol, szMyName,)
  1080. return
  1081. }
  1082. }
  1083. }
  1084. szFuncName = Ask("请输入函数名称:")
  1085. /*是新函数*/
  1086. FuncHeadCommentCN(hbuf, ln, szFuncName, szMyName, )
  1087. }
  1088. else if (szCmd == "tab") /*将tab扩展为空格*/
  1089. {
  1090. DelBufLine(hbuf, ln)
  1091. ReplaceBufTab()
  1092. }
  1093. else if (szCmd == "ap")
  1094. {
  1095. SysTime = GetSysTime()
  1096. sz=SysTime.Year
  1097. sz1=SysTime.month
  1098. sz3=SysTime.day
  1099. if (sz1 < )
  1100. {
  1101. szMonth = "0@sz1@"
  1102. }
  1103. else
  1104. {
  1105. szMonth = sz1
  1106. }
  1107. if (sz3 < )
  1108. {
  1109. szDay = "0@sz3@"
  1110. }
  1111. else
  1112. {
  1113. szDay = sz3
  1114. }
  1115.  
  1116. DelBufLine(hbuf, ln)
  1117. szQuestion = AddPromblemNo()
  1118. InsBufLine(hbuf, ln, "@szLine1@/* 问 题 单: @szQuestion@ 修改人:@szMyName@, 时间:@sz@-@szMonth@-@szDay@ ");
  1119. szContent = Ask("修改原因")
  1120. szLeft = cat(szLine1," 修改原因: ");
  1121. if(strlen(szLeft) > )
  1122. {
  1123. Msg("右边空间太小,请用新的行")
  1124. stop
  1125. }
  1126. ln = CommentContent(hbuf,ln + ,szLeft,szContent,)
  1127. return
  1128. }
  1129. else if (szCmd == "ab")
  1130. {
  1131. SysTime = GetSysTime()
  1132. sz=SysTime.Year
  1133. sz1=SysTime.month
  1134. sz3=SysTime.day
  1135. if (sz1 < )
  1136. {
  1137. szMonth = "0@sz1@"
  1138. }
  1139. else
  1140. {
  1141. szMonth = sz1
  1142. }
  1143. if (sz3 < )
  1144. {
  1145. szDay = "0@sz3@"
  1146. }
  1147. else
  1148. {
  1149. szDay = sz3
  1150. }
  1151.  
  1152. DelBufLine(hbuf, ln)
  1153. szQuestion = GetReg ("PNO")
  1154. if(strlen(szQuestion)>)
  1155. {
  1156. InsBufLine(hbuf, ln, "@szLine1@/* add begin by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@ 原因: */");
  1157. }
  1158. else
  1159. {
  1160. InsBufLine(hbuf, ln, "@szLine1@/* add begin by @szMyName@, @sz@-@szMonth@-@szDay@, 原因: */");
  1161. }
  1162. return
  1163. }
  1164. else if (szCmd == "ae")
  1165. {
  1166. SysTime = GetSysTime()
  1167. sz=SysTime.Year
  1168. sz1=SysTime.month
  1169. sz3=SysTime.day
  1170. if (sz1 < )
  1171. {
  1172. szMonth = "0@sz1@"
  1173. }
  1174. else
  1175. {
  1176. szMonth = sz1
  1177. }
  1178. if (sz3 < )
  1179. {
  1180. szDay = "0@sz3@"
  1181. }
  1182. else
  1183. {
  1184. szDay = sz3
  1185. }
  1186.  
  1187. DelBufLine(hbuf, ln)
  1188. InsBufLine(hbuf, ln, "@szLine1@/* add end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  1189. return
  1190. }
  1191. else if (szCmd == "db")
  1192. {
  1193. SysTime = GetSysTime()
  1194. sz=SysTime.Year
  1195. sz1=SysTime.month
  1196. sz3=SysTime.day
  1197. if (sz1 < )
  1198. {
  1199. szMonth = "0@sz1@"
  1200. }
  1201. else
  1202. {
  1203. szMonth = sz1
  1204. }
  1205. if (sz3 < )
  1206. {
  1207. szDay = "0@sz3@"
  1208. }
  1209. else
  1210. {
  1211. szDay = sz3
  1212. }
  1213.  
  1214. DelBufLine(hbuf, ln)
  1215. szQuestion = GetReg ("PNO")
  1216. if(strlen(szQuestion) > )
  1217. {
  1218. InsBufLine(hbuf, ln, "@szLine1@/* delete begin by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@ 原因: */");
  1219. }
  1220. else
  1221. {
  1222. InsBufLine(hbuf, ln, "@szLine1@/* delete begin by @szMyName@, @sz@-@szMonth@-@szDay@, 原因: */");
  1223. }
  1224.  
  1225. return
  1226. }
  1227. else if (szCmd == "de")
  1228. {
  1229. SysTime = GetSysTime()
  1230. sz=SysTime.Year
  1231. sz1=SysTime.month
  1232. sz3=SysTime.day
  1233. if (sz1 < )
  1234. {
  1235. szMonth = "0@sz1@"
  1236. }
  1237. else
  1238. {
  1239. szMonth = sz1
  1240. }
  1241. if (sz3 < )
  1242. {
  1243. szDay = "0@sz3@"
  1244. }
  1245. else
  1246. {
  1247. szDay = sz3
  1248. }
  1249.  
  1250. DelBufLine(hbuf, ln + )
  1251. InsBufLine(hbuf, ln, "@szLine1@/* delete end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  1252. return
  1253. }
  1254. else if (szCmd == "mb")
  1255. {
  1256. SysTime = GetSysTime()
  1257. sz=SysTime.Year
  1258. sz1=SysTime.month
  1259. sz3=SysTime.day
  1260. if (sz1 < )
  1261. {
  1262. szMonth = "0@sz1@"
  1263. }
  1264. else
  1265. {
  1266. szMonth = sz1
  1267. }
  1268. if (sz3 < )
  1269. {
  1270. szDay = "0@sz3@"
  1271. }
  1272. else
  1273. {
  1274. szDay = sz3
  1275. }
  1276.  
  1277. DelBufLine(hbuf, ln)
  1278. szQuestion = GetReg ("PNO")
  1279. if(strlen(szQuestion) > )
  1280. {
  1281. InsBufLine(hbuf, ln, "@szLine1@/* modify begin by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@ 原因: */");
  1282. }
  1283. else
  1284. {
  1285. InsBufLine(hbuf, ln, "@szLine1@/* modify begin by @szMyName@, @sz@-@szMonth@-@szDay@, 原因: */");
  1286. }
  1287. return
  1288. }
  1289. else if (szCmd == "me")
  1290. {
  1291. SysTime = GetSysTime()
  1292. sz=SysTime.Year
  1293. sz1=SysTime.month
  1294. sz3=SysTime.day
  1295. if (sz1 < )
  1296. {
  1297. szMonth = "0@sz1@"
  1298. }
  1299. else
  1300. {
  1301. szMonth = sz1
  1302. }
  1303. if (sz3 < )
  1304. {
  1305. szDay = "0@sz3@"
  1306. }
  1307. else
  1308. {
  1309. szDay = sz3
  1310. }
  1311.  
  1312. DelBufLine(hbuf, ln)
  1313. InsBufLine(hbuf, ln, "@szLine1@/* modify end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  1314. return
  1315. }
  1316. else if (szCmd == "as")
  1317. {
  1318. SysTime = GetSysTime()
  1319. sz=SysTime.Year
  1320. sz1=SysTime.month
  1321. sz3=SysTime.day
  1322. if (sz1 < )
  1323. {
  1324. szMonth = "0@sz1@"
  1325. }
  1326. else
  1327. {
  1328. szMonth = sz1
  1329. }
  1330. if (sz3 < )
  1331. {
  1332. szDay = "0@sz3@"
  1333. }
  1334. else
  1335. {
  1336. szDay = sz3
  1337. }
  1338.  
  1339. szLine1 = strmid (GetBufLine(hbuf, ln), , GetBufLineLength (hbuf, ln)-)
  1340. DelBufLine(hbuf, ln)
  1341.  
  1342. szQuestion = GetReg ("PNO")
  1343. if(strlen(szQuestion)>)
  1344. {
  1345. InsBufLine(hbuf, ln, "@szLine1@/* add by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@, 原因: */");
  1346. }
  1347. else
  1348. {
  1349. InsBufLine(hbuf, ln, "@szLine1@/* add by @szMyName@, @sz@-@szMonth@-@szDay@, 原因: */");
  1350. }
  1351. return
  1352. }
  1353. else if (szCmd == "ds")
  1354. {
  1355. SysTime = GetSysTime()
  1356. sz=SysTime.Year
  1357. sz1=SysTime.month
  1358. sz3=SysTime.day
  1359. if (sz1 < )
  1360. {
  1361. szMonth = "0@sz1@"
  1362. }
  1363. else
  1364. {
  1365. szMonth = sz1
  1366. }
  1367. if (sz3 < )
  1368. {
  1369. szDay = "0@sz3@"
  1370. }
  1371. else
  1372. {
  1373. szDay = sz3
  1374. }
  1375.  
  1376. szLine1 = strmid (GetBufLine(hbuf, ln), , GetBufLineLength (hbuf, ln)-)
  1377. DelBufLine(hbuf, ln)
  1378. szQuestion = GetReg ("PNO")
  1379. if(strlen(szQuestion)>)
  1380. {
  1381. InsBufLine(hbuf, ln, "@szLine1@/* delete by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@, 原因: */");
  1382. }
  1383. else
  1384. {
  1385. InsBufLine(hbuf, ln, "@szLine1@/* delete by @szMyName@, @sz@-@szMonth@-@szDay@, 原因: */");
  1386. }
  1387. return
  1388. }
  1389. else if (szCmd == "ms")
  1390. {
  1391. SysTime = GetSysTime()
  1392. sz=SysTime.Year
  1393. sz1=SysTime.month
  1394. sz3=SysTime.day
  1395. if (sz1 < )
  1396. {
  1397. szMonth = "0@sz1@"
  1398. }
  1399. else
  1400. {
  1401. szMonth = sz1
  1402. }
  1403. if (sz3 < )
  1404. {
  1405. szDay = "0@sz3@"
  1406. }
  1407. else
  1408. {
  1409. szDay = sz3
  1410. }
  1411.  
  1412. szLine1 = strmid (GetBufLine(hbuf, ln), , GetBufLineLength (hbuf, ln)-)
  1413. DelBufLine(hbuf, ln)
  1414. szQuestion = GetReg ("PNO")
  1415. if(strlen(szQuestion)>)
  1416. {
  1417. InsBufLine(hbuf, ln, "@szLine1@/* modify by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@, 原因: */");
  1418. }
  1419. else
  1420. {
  1421. InsBufLine(hbuf, ln, "@szLine1@/* modify by @szMyName@, @sz@-@szMonth@-@szDay@, 原因: */");
  1422. }
  1423. return
  1424. }
  1425. else
  1426. {
  1427. SearchForward()
  1428. stop
  1429. }
  1430. SetWndSel(hwnd, sel)
  1431. SearchForward()
  1432. }
  1433.  
  1434. /*****************************************************************************
  1435. 函 数 名 : BlockCommandProc
  1436. 功能描述 : 块命令处理函数
  1437. 输出参数 : 无
  1438. 返 回 值 :
  1439. 调用函数 :
  1440. 被调函数 :
  1441.  
  1442. 修改历史 :
  1443. 1.日 期 : 2008年6月18日
  1444. 作 者 : 张强
  1445. 修改内容 : 新生成函数
  1446.  
  1447. *****************************************************************************/
  1448. macro BlockCommandProc()
  1449. {
  1450. hwnd = GetCurrentWnd()
  1451. if (hwnd == )
  1452. stop
  1453. sel = GetWndSel(hwnd)
  1454. hbuf = GetWndBuf(hwnd)
  1455. if(sel.lnFirst > )
  1456. {
  1457. ln = sel.lnFirst -
  1458. }
  1459. else
  1460. {
  1461. stop
  1462. }
  1463. szLine = GetBufLine(hbuf,ln)
  1464. szLine = TrimString(szLine)
  1465. if(szLine == "while" || szLine == "wh")
  1466. {
  1467. InsertWhile() /*插入while*/
  1468. }
  1469. else if(szLine == "do")
  1470. {
  1471. InsertDo() //插入do while语句
  1472. }
  1473. else if(szLine == "for")
  1474. {
  1475. InsertFor() //插入for语句
  1476. }
  1477. else if(szLine == "if")
  1478. {
  1479. InsertIf() //插入if语句
  1480. }
  1481. else if(szLine == "el" || szLine == "else")
  1482. {
  1483. InsertElse() //插入else语句
  1484. DelBufLine(hbuf,ln)
  1485. stop
  1486. }
  1487. else if((szLine == "#ifd") || (szLine == "#ifdef"))
  1488. {
  1489. InsIfdef() //插入#ifdef
  1490. DelBufLine(hbuf,ln)
  1491. stop
  1492. }
  1493. else if((szLine == "#ifn") || (szLine == "#ifndef"))
  1494. {
  1495. InsIfndef() //插入#ifdef
  1496. DelBufLine(hbuf,ln)
  1497. stop
  1498. }
  1499. else if (szLine == "abg")
  1500. {
  1501. InsertReviseAdd()
  1502. DelBufLine(hbuf, ln)
  1503. stop
  1504. }
  1505. else if (szLine == "dbg")
  1506. {
  1507. InsertReviseDel()
  1508. DelBufLine(hbuf, ln)
  1509. stop
  1510. }
  1511. else if (szLine == "mbg")
  1512. {
  1513. InsertReviseMod()
  1514. DelBufLine(hbuf, ln)
  1515. stop
  1516. }
  1517. else if(szLine == "#if")
  1518. {
  1519. InsertPredefIf()
  1520. DelBufLine(hbuf,ln)
  1521. stop
  1522. }
  1523. DelBufLine(hbuf,ln)
  1524. SearchForward()
  1525. stop
  1526. }
  1527.  
  1528. /*****************************************************************************
  1529. 函 数 名 : RestoreCommand
  1530. 功能描述 : 缩略命令恢复函数
  1531. 输入参数 : hbuf
  1532. szCmd
  1533. 输出参数 : 无
  1534. 返 回 值 :
  1535. 调用函数 :
  1536. 被调函数 :
  1537.  
  1538. 修改历史 :
  1539. 1.日 期 : 2008年6月18日
  1540. 作 者 : 张强
  1541. 修改内容 : 新生成函数
  1542.  
  1543. *****************************************************************************/
  1544. macro RestoreCommand(hbuf,szCmd)
  1545. {
  1546. if(szCmd == "ca")
  1547. {
  1548. SetBufSelText(hbuf, "se")
  1549. szCmd = "case"
  1550. }
  1551. else if(szCmd == "sw")
  1552. {
  1553. SetBufSelText(hbuf, "itch")
  1554. szCmd = "switch"
  1555. }
  1556. else if(szCmd == "el")
  1557. {
  1558. SetBufSelText(hbuf, "se")
  1559. szCmd = "else"
  1560. }
  1561. else if(szCmd == "wh")
  1562. {
  1563. SetBufSelText(hbuf, "ile")
  1564. szCmd = "while"
  1565. }
  1566. return szCmd
  1567. }
  1568.  
  1569. /*****************************************************************************
  1570. 函 数 名 : SearchForward
  1571. 功能描述 : 向前搜索#
  1572. 输出参数 : 无
  1573. 返 回 值 :
  1574. 调用函数 :
  1575. 被调函数 :
  1576.  
  1577. 修改历史 :
  1578. 1.日 期 : 2008年6月18日
  1579. 作 者 : 张强
  1580. 修改内容 : 新生成函数
  1581.  
  1582. *****************************************************************************/
  1583. macro SearchForward()
  1584. {
  1585. LoadSearchPattern("#", , , );
  1586. Search_Forward
  1587. }
  1588.  
  1589. /*****************************************************************************
  1590. 函 数 名 : SearchBackward
  1591. 功能描述 : 向后搜索#
  1592. 输出参数 : 无
  1593. 返 回 值 :
  1594. 调用函数 :
  1595. 被调函数 :
  1596.  
  1597. 修改历史 :
  1598. 1.日 期 : 2008年6月18日
  1599. 作 者 : 张强
  1600. 修改内容 : 新生成函数
  1601.  
  1602. *****************************************************************************/
  1603. macro SearchBackward()
  1604. {
  1605. LoadSearchPattern("#", , , );
  1606. Search_Backward
  1607. }
  1608.  
  1609. /*****************************************************************************
  1610. 函 数 名 : InsertFuncName
  1611. 功能描述 : 在当前位置插入但前函数名
  1612. 输出参数 : 无
  1613. 返 回 值 :
  1614. 调用函数 :
  1615. 被调函数 :
  1616.  
  1617. 修改历史 :
  1618. 1.日 期 : 2008年6月18日
  1619. 作 者 : 张强
  1620. 修改内容 : 新生成函数
  1621.  
  1622. *****************************************************************************/
  1623. macro InsertFuncName()
  1624. {
  1625. hwnd = GetCurrentWnd()
  1626. if (hwnd == )
  1627. stop
  1628. sel = GetWndSel(hwnd)
  1629. hbuf = GetWndBuf(hwnd)
  1630. symbolname = GetCurSymbol()
  1631. SetBufSelText (hbuf, symbolname)
  1632. }
  1633.  
  1634. /*****************************************************************************
  1635. 函 数 名 : strstr
  1636. 功能描述 : 字符串匹配查询函数
  1637. 输入参数 : str1 源串
  1638. str2 待匹配子串
  1639. 输出参数 : 无
  1640. 返 回 值 : 0xffffffff为没有找到匹配字符串,V2.1不支持-1故采用该值
  1641. 其它为匹配字符串的起始位置
  1642. 调用函数 :
  1643. 被调函数 :
  1644.  
  1645. 修改历史 :
  1646. 1.日 期 : 2008年6月18日
  1647. 作 者 : 张强
  1648. 修改内容 : 新生成函数
  1649.  
  1650. *****************************************************************************/
  1651. macro strstr(str1,str2)
  1652. {
  1653. i =
  1654. j =
  1655. len1 = strlen(str1)
  1656. len2 = strlen(str2)
  1657. if((len1 == ) || (len2 == ))
  1658. {
  1659. return 0xffffffff
  1660. }
  1661. while( i < len1)
  1662. {
  1663. if(str1[i] == str2[j])
  1664. {
  1665. while(j < len2)
  1666. {
  1667. j = j +
  1668. if(str1[i+j] != str2[j])
  1669. {
  1670. break
  1671. }
  1672. }
  1673. if(j == len2)
  1674. {
  1675. return i
  1676. }
  1677. j =
  1678. }
  1679. i = i +
  1680. }
  1681. return 0xffffffff
  1682. }
  1683.  
  1684. /*****************************************************************************
  1685. 函 数 名 : InsertTraceInfo
  1686. 功能描述 : 在函数的入口和出口插入打印,不支持一行有多条语句的情况
  1687. 输出参数 : 无
  1688. 返 回 值 :
  1689. 调用函数 :
  1690. 被调函数 :
  1691.  
  1692. 修改历史 :
  1693. 1.日 期 : 2008年6月18日
  1694. 作 者 : 张强
  1695. 修改内容 : 新生成函数
  1696.  
  1697. *****************************************************************************/
  1698. macro InsertTraceInfo()
  1699. {
  1700. hwnd = GetCurrentWnd()
  1701. if (hwnd == )
  1702. stop
  1703. hbuf = GetWndBuf(hwnd)
  1704. sel = GetWndSel(hwnd)
  1705. symbol = GetSymbolLocationFromLn(hbuf, sel.lnFirst)
  1706. InsertTraceInCurFunction(hbuf,symbol)
  1707. }
  1708.  
  1709. /*****************************************************************************
  1710. 函 数 名 : InsertTraceInCurFunction
  1711. 功能描述 : 在函数的入口和出口插入打印,不支持一行有多条语句的情况
  1712. 输入参数 : hbuf
  1713. symbol
  1714. 输出参数 : 无
  1715. 返 回 值 :
  1716. 调用函数 :
  1717. 被调函数 :
  1718.  
  1719. 修改历史 :
  1720. 1.日 期 : 2008年6月18日
  1721. 作 者 : 张强
  1722. 修改内容 : 新生成函数
  1723.  
  1724. *****************************************************************************/
  1725. macro InsertTraceInCurFunction(hbuf,symbol)
  1726. {
  1727. ln = GetBufLnCur (hbuf)
  1728. symbolname = symbol.Symbol
  1729. nLineEnd = symbol.lnLim
  1730. nExitCount = ;
  1731. InsBufLine(hbuf, ln, " VOS_Debug_Trace(\"\\r\\n |@symbolname@() entry--- \");")
  1732. ln = ln +
  1733. fIsEnd =
  1734. fIsNeedPrt =
  1735. fIsSatementEnd =
  1736. szLeftOld = ""
  1737. while(ln < nLineEnd)
  1738. {
  1739. szLine = GetBufLine(hbuf, ln)
  1740. iCurLineLen = strlen(szLine)
  1741.  
  1742. /*剔除其中的注释语句*/
  1743. RetVal = SkipCommentFromString(szLine,fIsEnd)
  1744. szLine = RetVal.szContent
  1745. fIsEnd = RetVal.fIsEnd
  1746. //查找是否有return语句
  1747. /* ret =strstr(szLine,"return")
  1748. if(ret != 0xffffffff)
  1749. {
  1750. if( (szLine[ret+6] == " " ) || (szLine[ret+6] == "\t" )
  1751. || (szLine[ret+6] == ";" ) || (szLine[ret+6] == "(" ))
  1752. {
  1753. szPre = strmid(szLine,0,ret)
  1754. }
  1755. SetBufIns(hbuf,ln,ret)
  1756. Paren_Right
  1757. sel = GetWndSel(hwnd)
  1758. if( sel.lnLast != ln )
  1759. {
  1760. GetbufLine(hbuf,sel.lnLast)
  1761. RetVal = SkipCommentFromString(szLine,1)
  1762. szLine = RetVal.szContent
  1763. fIsEnd = RetVal.fIsEnd
  1764. }
  1765. }*/
  1766. //获得左边空白大小
  1767. nLeft = GetLeftBlank(szLine)
  1768. if(nLeft == )
  1769. {
  1770. szLeft = " "
  1771. }
  1772. else
  1773. {
  1774. szLeft = strmid(szLine,,nLeft)
  1775. }
  1776. szLine = TrimString(szLine)
  1777. iLen = strlen(szLine)
  1778. if(iLen == )
  1779. {
  1780. ln = ln +
  1781. continue
  1782. }
  1783. szRet = GetFirstWord(szLine)
  1784. // if( (szRet == "if") || (szRet == "else")
  1785. //查找是否有return语句
  1786. // ret =strstr(szLine,"return")
  1787.  
  1788. if( szRet == "return")
  1789. {
  1790. if( fIsSatementEnd == )
  1791. {
  1792. fIsNeedPrt =
  1793. InsBufLine(hbuf,ln+,"@szLeftOld@}")
  1794. szEnd = cat(szLeft,"VOS_Debug_Trace(\"\\r\\n |@symbolname@() exit---: @nExitCount@ \");")
  1795. InsBufLine(hbuf, ln, szEnd )
  1796. InsBufLine(hbuf,ln,"@szLeftOld@{")
  1797. nExitCount = nExitCount +
  1798. nLineEnd = nLineEnd +
  1799. ln = ln +
  1800. }
  1801. else
  1802. {
  1803. fIsNeedPrt =
  1804. szEnd = cat(szLeft,"VOS_Debug_Trace(\"\\r\\n |@symbolname@() exit---: @nExitCount@ \");")
  1805. InsBufLine(hbuf, ln, szEnd )
  1806. nExitCount = nExitCount +
  1807. nLineEnd = nLineEnd +
  1808. ln = ln +
  1809. }
  1810. }
  1811. else
  1812. {
  1813. ret =strstr(szLine,"}")
  1814. if( ret != 0xffffffff )
  1815. {
  1816. fIsNeedPrt =
  1817. }
  1818. }
  1819.  
  1820. szLeftOld = szLeft
  1821. ch = szLine[iLen-]
  1822. if( ( ch == ";" ) || ( ch == "{" )
  1823. || ( ch == ":" )|| ( ch == "}" ) || ( szLine[] == "#" ))
  1824. {
  1825. fIsSatementEnd =
  1826. }
  1827. else
  1828. {
  1829. fIsSatementEnd =
  1830. }
  1831. ln = ln +
  1832. }
  1833.  
  1834. //只要前面的return后有一个}了说明函数的结尾没有返回,需要再加一个出口打印
  1835. if(fIsNeedPrt == )
  1836. {
  1837. InsBufLine(hbuf, ln, " VOS_Debug_Trace(\"\\r\\n |@symbolname@() exit---: @nExitCount@ \");")
  1838. InsBufLine(hbuf, ln, "")
  1839. }
  1840. }
  1841.  
  1842. /*****************************************************************************
  1843. 函 数 名 : GetFirstWord
  1844. 功能描述 : 取得字符串的第一个单词
  1845. 输入参数 : szLine
  1846. 输出参数 : 无
  1847. 返 回 值 :
  1848. 调用函数 :
  1849. 被调函数 :
  1850.  
  1851. 修改历史 :
  1852. 1.日 期 : 2008年6月18日
  1853. 作 者 : 张强
  1854. 修改内容 : 新生成函数
  1855.  
  1856. *****************************************************************************/
  1857. macro GetFirstWord(szLine)
  1858. {
  1859. szLine = TrimLeft(szLine)
  1860. nIdx =
  1861. iLen = strlen(szLine)
  1862. while(nIdx < iLen)
  1863. {
  1864. if( (szLine[nIdx] == " ") || (szLine[nIdx] == "\t")
  1865. || (szLine[nIdx] == ";") || (szLine[nIdx] == "(")
  1866. || (szLine[nIdx] == ".") || (szLine[nIdx] == "{")
  1867. || (szLine[nIdx] == ",") || (szLine[nIdx] == ":") )
  1868. {
  1869. return strmid(szLine,,nIdx)
  1870. }
  1871. nIdx = nIdx +
  1872. }
  1873. return ""
  1874.  
  1875. }
  1876.  
  1877. /*****************************************************************************
  1878. 函 数 名 : AutoInsertTraceInfoInBuf
  1879. 功能描述 : 自动当前文件的全部函数出入口加入打印,只能支持C++
  1880. 输出参数 : 无
  1881. 返 回 值 :
  1882. 调用函数 :
  1883. 被调函数 :
  1884.  
  1885. 修改历史 :
  1886. 1.日 期 : 2008年6月24日
  1887. 作 者 : 张强
  1888. 修改内容 : 新生成函数
  1889.  
  1890. *****************************************************************************/
  1891. macro AutoInsertTraceInfoInBuf()
  1892. {
  1893. hwnd = GetCurrentWnd()
  1894. if (hwnd == )
  1895. stop
  1896. sel = GetWndSel(hwnd)
  1897. hbuf = GetWndBuf(hwnd)
  1898.  
  1899. isymMax = GetBufSymCount(hbuf)
  1900. isym =
  1901. while (isym < isymMax)
  1902. {
  1903. symbol = GetBufSymLocation(hbuf, isym)
  1904. isCodeBegin =
  1905. fIsEnd =
  1906. isBlandLine =
  1907. if(strlen(symbol) > )
  1908. {
  1909. if(symbol.Type == "Class Placeholder")
  1910. {
  1911. hsyml = SymbolChildren(symbol)
  1912. cchild = SymListCount(hsyml)
  1913. ichild =
  1914. while (ichild < cchild)
  1915. {
  1916. symbol = GetBufSymLocation(hbuf, isym)
  1917. hsyml = SymbolChildren(symbol)
  1918. childsym = SymListItem(hsyml, ichild)
  1919. ln = childsym.lnName
  1920. isCodeBegin =
  1921. fIsEnd =
  1922. isBlandLine =
  1923. while( ln < childsym.lnLim )
  1924. {
  1925. szLine = GetBufLine (hbuf, ln)
  1926.  
  1927. //去掉注释的干扰
  1928. RetVal = SkipCommentFromString(szLine,fIsEnd)
  1929. szNew = RetVal.szContent
  1930. fIsEnd = RetVal.fIsEnd
  1931. if(isCodeBegin == )
  1932. {
  1933. szNew = TrimLeft(szNew)
  1934. //检测是否是可执行代码开始
  1935. iRet = CheckIsCodeBegin(szNew)
  1936. if(iRet == )
  1937. {
  1938. if( isBlandLine != )
  1939. {
  1940. ln = isBlandLine
  1941. }
  1942. InsBufLine(hbuf,ln,"")
  1943. childsym.lnLim = childsym.lnLim +
  1944. SetBufIns(hbuf, ln+ , )
  1945. InsertTraceInCurFunction(hbuf,childsym)
  1946. break
  1947. }
  1948. if(strlen(szNew) == )
  1949. {
  1950. if( isBlandLine == )
  1951. {
  1952. isBlandLine = ln;
  1953. }
  1954. }
  1955. else
  1956. {
  1957. isBlandLine =
  1958. }
  1959. }
  1960. //查找到函数的开始
  1961. if(isCodeBegin == )
  1962. {
  1963. iRet = strstr(szNew,"{")
  1964. if(iRet != 0xffffffff)
  1965. {
  1966. isCodeBegin =
  1967. }
  1968. }
  1969. ln = ln +
  1970. }
  1971. ichild = ichild +
  1972. }
  1973. SymListFree(hsyml)
  1974. }
  1975. else if( ( symbol.Type == "Function") || (symbol.Type == "Method") )
  1976. {
  1977. ln = symbol.lnName
  1978. while( ln < symbol.lnLim )
  1979. {
  1980. szLine = GetBufLine (hbuf, ln)
  1981.  
  1982. //去掉注释的干扰
  1983. RetVal = SkipCommentFromString(szLine,fIsEnd)
  1984. szNew = RetVal.szContent
  1985. fIsEnd = RetVal.fIsEnd
  1986. if(isCodeBegin == )
  1987. {
  1988. szNew = TrimLeft(szNew)
  1989. //检测是否是可执行代码开始
  1990. iRet = CheckIsCodeBegin(szNew)
  1991. if(iRet == )
  1992. {
  1993. if( isBlandLine != )
  1994. {
  1995. ln = isBlandLine
  1996. }
  1997. SetBufIns(hbuf, ln , )
  1998. InsertTraceInCurFunction(hbuf,symbol)
  1999. InsBufLine(hbuf,ln,"")
  2000. break
  2001. }
  2002. if(strlen(szNew) == )
  2003. {
  2004. if( isBlandLine == )
  2005. {
  2006. isBlandLine = ln;
  2007. }
  2008. }
  2009. else
  2010. {
  2011. isBlandLine =
  2012. }
  2013. }
  2014. //查找到函数的开始
  2015. if(isCodeBegin == )
  2016. {
  2017. iRet = strstr(szNew,"{")
  2018. if(iRet != 0xffffffff)
  2019. {
  2020. isCodeBegin =
  2021. }
  2022. }
  2023. ln = ln +
  2024. }
  2025. }
  2026. }
  2027. isym = isym +
  2028. }
  2029.  
  2030. }
  2031.  
  2032. /*****************************************************************************
  2033. 函 数 名 : CheckIsCodeBegin
  2034. 功能描述 : 是否为函数的第一条可执行代码
  2035. 输入参数 : szLine 左边没有空格和注释的字符串
  2036. 输出参数 : 无
  2037. 返 回 值 :
  2038. 调用函数 :
  2039. 被调函数 :
  2040.  
  2041. 修改历史 :
  2042. 1.日 期 : 2008年6月24日
  2043. 作 者 : 张强
  2044. 修改内容 : 新生成函数
  2045.  
  2046. *****************************************************************************/
  2047. macro CheckIsCodeBegin(szLine)
  2048. {
  2049. iLen = strlen(szLine)
  2050. if(iLen == )
  2051. {
  2052. return
  2053. }
  2054. nIdx =
  2055. nWord =
  2056. if( (szLine[nIdx] == "(") || (szLine[nIdx] == "-")
  2057. || (szLine[nIdx] == "*") || (szLine[nIdx] == "+"))
  2058. {
  2059. return
  2060. }
  2061. if( szLine[nIdx] == "#" )
  2062. {
  2063. return
  2064. }
  2065. while(nIdx < iLen)
  2066. {
  2067. if( (szLine[nIdx] == " ")||(szLine[nIdx] == "\t")
  2068. || (szLine[nIdx] == "(")||(szLine[nIdx] == "{")
  2069. || (szLine[nIdx] == ";") )
  2070. {
  2071. if(nWord == )
  2072. {
  2073. if( (szLine[nIdx] == "(")||(szLine[nIdx] == "{")
  2074. || (szLine[nIdx] == ";") )
  2075. {
  2076. return
  2077. }
  2078. szFirstWord = StrMid(szLine,,nIdx)
  2079. if(szFirstWord == "return")
  2080. {
  2081. return
  2082. }
  2083. }
  2084. while(nIdx < iLen)
  2085. {
  2086. if( (szLine[nIdx] == " ")||(szLine[nIdx] == "\t") )
  2087. {
  2088. nIdx = nIdx +
  2089. }
  2090. else
  2091. {
  2092. break
  2093. }
  2094. }
  2095. nWord = nWord +
  2096. if(nIdx == iLen)
  2097. {
  2098. return
  2099. }
  2100. }
  2101. if(nWord == )
  2102. {
  2103. asciiA = AsciiFromChar("A")
  2104. asciiZ = AsciiFromChar("Z")
  2105. ch = toupper(szLine[nIdx])
  2106. asciiCh = AsciiFromChar(ch)
  2107. if( ( szLine[nIdx] == "_" ) || ( szLine[nIdx] == "*" )
  2108. || ( ( asciiCh >= asciiA ) && ( asciiCh <= asciiZ ) ) )
  2109. {
  2110. return
  2111. }
  2112. else
  2113. {
  2114. return
  2115. }
  2116. }
  2117. nIdx = nIdx +
  2118. }
  2119. return
  2120. }
  2121.  
  2122. /*****************************************************************************
  2123. 函 数 名 : AutoInsertTraceInfoInPrj
  2124. 功能描述 : 自动当前工程全部文件的全部函数出入口加入打印,只能支持C++
  2125. 输出参数 : 无
  2126. 返 回 值 :
  2127. 调用函数 :
  2128. 被调函数 :
  2129.  
  2130. 修改历史 :
  2131. 1.日 期 : 2008年6月24日
  2132. 作 者 : 张强
  2133. 修改内容 : 新生成函数
  2134.  
  2135. *****************************************************************************/
  2136. macro AutoInsertTraceInfoInPrj()
  2137. {
  2138. hprj = GetCurrentProj()
  2139. ifileMax = GetProjFileCount (hprj)
  2140. ifile =
  2141. while (ifile < ifileMax)
  2142. {
  2143. filename = GetProjFileName (hprj, ifile)
  2144. szExt = toupper(GetFileNameExt(filename))
  2145. if( (szExt == "C") || (szExt == "CPP") )
  2146. {
  2147. hbuf = OpenBuf (filename)
  2148. if(hbuf != )
  2149. {
  2150. SetCurrentBuf(hbuf)
  2151. AutoInsertTraceInfoInBuf()
  2152. }
  2153. }
  2154. //自动保存打开文件,可根据需要打开
  2155. /* if( IsBufDirty (hbuf) )
  2156. {
  2157. SaveBuf (hbuf)
  2158. }
  2159. CloseBuf(hbuf)*/
  2160. ifile = ifile +
  2161. }
  2162. }
  2163.  
  2164. /*****************************************************************************
  2165. 函 数 名 : RemoveTraceInfo
  2166. 功能描述 : 删除该函数的出入口打印
  2167. 输出参数 : 无
  2168. 返 回 值 :
  2169. 调用函数 :
  2170. 被调函数 :
  2171.  
  2172. 修改历史 :
  2173. 1.日 期 : 2008年6月24日
  2174. 作 者 : 张强
  2175. 修改内容 : 新生成函数
  2176.  
  2177. *****************************************************************************/
  2178. macro RemoveTraceInfo()
  2179. {
  2180. hwnd = GetCurrentWnd()
  2181. if (hwnd == )
  2182. stop
  2183. sel = GetWndSel(hwnd)
  2184. hbuf = GetWndBuf(hwnd)
  2185. if(hbuf == hNil)
  2186. stop
  2187. symbolname = GetCurSymbol()
  2188. symbol = GetSymbolLocationFromLn(hbuf, sel.lnFirst)
  2189. // symbol = GetSymbolLocation (symbolname)
  2190. nLineEnd = symbol.lnLim
  2191. szEntry = "VOS_Debug_Trace(\"\\r\\n |@symbolname@() entry--- \");"
  2192. szExit = "VOS_Debug_Trace(\"\\r\\n |@symbolname@() exit---:"
  2193. ln = symbol.lnName
  2194. fIsEntry =
  2195. while(ln < nLineEnd)
  2196. {
  2197. szLine = GetBufLine(hbuf, ln)
  2198.  
  2199. /*剔除其中的注释语句*/
  2200. RetVal = TrimString(szLine)
  2201. if(fIsEntry == )
  2202. {
  2203. ret = strstr(szLine,szEntry)
  2204. if(ret != 0xffffffff)
  2205. {
  2206. DelBufLine(hbuf,ln)
  2207. nLineEnd = nLineEnd -
  2208. fIsEntry =
  2209. ln = ln +
  2210. continue
  2211. }
  2212. }
  2213. ret = strstr(szLine,szExit)
  2214. if(ret != 0xffffffff)
  2215. {
  2216. DelBufLine(hbuf,ln)
  2217. nLineEnd = nLineEnd -
  2218. }
  2219. ln = ln +
  2220. }
  2221. }
  2222.  
  2223. /*****************************************************************************
  2224. 函 数 名 : RemoveCurBufTraceInfo
  2225. 功能描述 : 从当前的buf中删除添加的出入口打印信息
  2226. 输出参数 : 无
  2227. 返 回 值 :
  2228. 调用函数 :
  2229. 被调函数 :
  2230.  
  2231. 修改历史 :
  2232. 1.日 期 : 2008年6月24日
  2233. 作 者 : 张强
  2234. 修改内容 : 新生成函数
  2235.  
  2236. *****************************************************************************/
  2237. macro RemoveCurBufTraceInfo()
  2238. {
  2239. hbuf = GetCurrentBuf()
  2240. isymMax = GetBufSymCount(hbuf)
  2241. isym =
  2242. while (isym < isymMax)
  2243. {
  2244. isLastLine =
  2245. symbol = GetBufSymLocation(hbuf, isym)
  2246. fIsEnd =
  2247. if(strlen(symbol) > )
  2248. {
  2249. if(symbol.Type == "Class Placeholder")
  2250. {
  2251. hsyml = SymbolChildren(symbol)
  2252. cchild = SymListCount(hsyml)
  2253. ichild =
  2254. while (ichild < cchild)
  2255. {
  2256. hsyml = SymbolChildren(symbol)
  2257. childsym = SymListItem(hsyml, ichild)
  2258. SetBufIns(hbuf,childsym.lnName,)
  2259. RemoveTraceInfo()
  2260. ichild = ichild +
  2261. }
  2262. SymListFree(hsyml)
  2263. }
  2264. else if( ( symbol.Type == "Function") || (symbol.Type == "Method") )
  2265. {
  2266. SetBufIns(hbuf,symbol.lnName,)
  2267. RemoveTraceInfo()
  2268. }
  2269. }
  2270. isym = isym +
  2271. }
  2272. }
  2273.  
  2274. /*****************************************************************************
  2275. 函 数 名 : RemovePrjTraceInfo
  2276. 功能描述 : 删除工程中的全部加入的函数的出入口打印
  2277. 输出参数 : 无
  2278. 返 回 值 :
  2279. 调用函数 :
  2280. 被调函数 :
  2281.  
  2282. 修改历史 :
  2283. 1.日 期 : 2008年6月24日
  2284. 作 者 : 张强
  2285. 修改内容 : 新生成函数
  2286.  
  2287. *****************************************************************************/
  2288. macro RemovePrjTraceInfo()
  2289. {
  2290. hprj = GetCurrentProj()
  2291. ifileMax = GetProjFileCount (hprj)
  2292. ifile =
  2293. while (ifile < ifileMax)
  2294. {
  2295. filename = GetProjFileName (hprj, ifile)
  2296. hbuf = OpenBuf (filename)
  2297. if(hbuf != )
  2298. {
  2299. SetCurrentBuf(hbuf)
  2300. RemoveCurBufTraceInfo()
  2301. }
  2302. //自动保存打开文件,可根据需要打开
  2303. /* if( IsBufDirty (hbuf) )
  2304. {
  2305. SaveBuf (hbuf)
  2306. }
  2307. CloseBuf(hbuf)*/
  2308. ifile = ifile +
  2309. }
  2310. }
  2311.  
  2312. /*****************************************************************************
  2313. 函 数 名 : InsertFileHeaderEN
  2314. 功能描述 : 插入英文文件头描述
  2315. 输入参数 : hbuf
  2316. ln 行号
  2317. szName 作者名
  2318. szContent 功能描述内容
  2319. 输出参数 : 无
  2320. 返 回 值 :
  2321. 调用函数 :
  2322. 被调函数 :
  2323.  
  2324. 修改历史 :
  2325. 1.日 期 : 2008年6月18日
  2326. 作 者 : 张强
  2327. 修改内容 : 新生成函数
  2328.  
  2329. 2.日 期 : 2011年2月22日
  2330. 作 者 : 彭军
  2331. 修改内容 : 修改文件头的日期为当年
  2332.  
  2333. *****************************************************************************/
  2334. macro InsertFileHeaderEN(hbuf, ln,szName,szContent)
  2335. {
  2336.  
  2337. hnewbuf = newbuf("")
  2338. if(hnewbuf == hNil)
  2339. {
  2340. stop
  2341. }
  2342. SysTime = GetSysTime()
  2343. szYear=SysTime.Year
  2344. GetFunctionList(hbuf,hnewbuf)
  2345. InsBufLine(hbuf, ln + , "/********************************************************************************")
  2346. InsBufLine(hbuf, ln + , "")
  2347. InsBufLine(hbuf, ln + , " **** Copyright (C), @szYear@, xx xx xx xx info&tech Co., Ltd. ****")
  2348. InsBufLine(hbuf, ln + , "")
  2349. InsBufLine(hbuf, ln + , " ********************************************************************************")
  2350. sz = GetFileName(GetBufName (hbuf))
  2351. InsBufLine(hbuf, ln + , " * File Name : @sz@")
  2352. InsBufLine(hbuf, ln + , " * Author : @szName@")
  2353. SysTime = GetSysTime()
  2354. sz=SysTime.Year
  2355. sz1=SysTime.month
  2356. sz3=SysTime.day
  2357. if (sz1 < )
  2358. {
  2359. szMonth = "0@sz1@"
  2360. }
  2361. else
  2362. {
  2363. szMonth = sz1
  2364. }
  2365. if (sz3 < )
  2366. {
  2367. szDay = "0@sz3@"
  2368. }
  2369. else
  2370. {
  2371. szDay = sz3
  2372. }
  2373. InsBufLine(hbuf, ln + , " * Date : @sz@-@szMonth@-@szDay@")
  2374.  
  2375. /*InsBufLine(hbuf, ln + 8, " Created : @sz@-@szMonth@-@szDay@")
  2376. InsBufLine(hbuf, ln + 9, " Last Modified :")*/
  2377. szTmp = " * Description : "
  2378. nlnDesc = ln
  2379. iLen = strlen (szContent)
  2380. InsBufLine(hbuf, ln + , " * Description : @szContent@")
  2381. InsBufLine(hbuf, ln + , " * Version : 1.0")
  2382. InsBufLine(hbuf, ln + ," * Function List :")
  2383. InsBufLine(hbuf, ln + ," * ")
  2384. //插入函数列表
  2385. /*ln = InsertFileList(hbuf,hnewbuf,ln + 12) - 12
  2386. closebuf(hnewbuf)
  2387. */
  2388. InsBufLine(hbuf, ln + , " * Record :")
  2389. InsBufLine(hbuf, ln + , " * 1.Date : @sz@-@szMonth@-@szDay@")
  2390. InsBufLine(hbuf, ln + , " * Author : @szName@")
  2391. InsBufLine(hbuf, ln + , " * Modification: Created file")
  2392. InsBufLine(hbuf, ln + , "")
  2393. InsBufLine(hbuf, ln + , "*************************************************************************************************************/")
  2394. InsBufLine(hbuf, ln + , "")
  2395.  
  2396. //InsBufLine(hbuf, ln + 19, "/*----------------------------------------------*")
  2397. //InsBufLine(hbuf, ln + 20, " * external variables *")
  2398. //InsBufLine(hbuf, ln + 21, " *----------------------------------------------*/")
  2399. //InsBufLine(hbuf, ln + 22, "")
  2400. //InsBufLine(hbuf, ln + 23, "/*----------------------------------------------*")
  2401. //InsBufLine(hbuf, ln + 24, " * external routine prototypes *")
  2402. //InsBufLine(hbuf, ln + 25, " *----------------------------------------------*/")
  2403. //InsBufLine(hbuf, ln + 26, "")
  2404. //InsBufLine(hbuf, ln + 27, "/*----------------------------------------------*")
  2405. //InsBufLine(hbuf, ln + 28, " * internal routine prototypes *")
  2406. //InsBufLine(hbuf, ln + 29, " *----------------------------------------------*/")
  2407. //InsBufLine(hbuf, ln + 30, "")
  2408. //InsBufLine(hbuf, ln + 31, "/*----------------------------------------------*")
  2409. //InsBufLine(hbuf, ln + 32, " * project-wide global variables *")
  2410. //InsBufLine(hbuf, ln + 33, " *----------------------------------------------*/")
  2411. //InsBufLine(hbuf, ln + 34, "")
  2412. //InsBufLine(hbuf, ln + 35, "/*----------------------------------------------*")
  2413. //InsBufLine(hbuf, ln + 36, " * module-wide global variables *")
  2414. //InsBufLine(hbuf, ln + 37, " *----------------------------------------------*/")
  2415. //InsBufLine(hbuf, ln + 38, "")
  2416. //InsBufLine(hbuf, ln + 39, "/*----------------------------------------------*")
  2417. //InsBufLine(hbuf, ln + 40, " * constants *")
  2418. //InsBufLine(hbuf, ln + 41, " *----------------------------------------------*/")
  2419. //InsBufLine(hbuf, ln + 42, "")
  2420. //InsBufLine(hbuf, ln + 43, "/*----------------------------------------------*")
  2421. //InsBufLine(hbuf, ln + 44, " * macros *")
  2422. //InsBufLine(hbuf, ln + 45, " *----------------------------------------------*/")
  2423. //InsBufLine(hbuf, ln + 46, "")
  2424. //InsBufLine(hbuf, ln + 47, "/*----------------------------------------------*")
  2425. //InsBufLine(hbuf, ln + 48, " * routines' implementations *")
  2426. //InsBufLine(hbuf, ln + 49, " *----------------------------------------------*/")
  2427. //InsBufLine(hbuf, ln + 50, "")
  2428. if(iLen != )
  2429. {
  2430. return
  2431. }
  2432.  
  2433. //如果没有功能描述内容则提示输入
  2434. szContent = Ask("Description")
  2435. SetBufIns(hbuf,nlnDesc + ,)
  2436. DelBufLine(hbuf,nlnDesc +)
  2437.  
  2438. //注释输出处理,自动换行
  2439. CommentContent(hbuf,nlnDesc + ," Description : ",szContent,)
  2440. }
  2441.  
  2442. /*****************************************************************************
  2443. 函 数 名 : InsertFileHeaderCN
  2444. 功能描述 : 插入中文描述文件头说明
  2445. 输入参数 : hbuf
  2446. ln
  2447. szName
  2448. szContent
  2449. 输出参数 : 无
  2450. 返 回 值 :
  2451. 调用函数 :
  2452. 被调函数 :
  2453.  
  2454. 修改历史 :
  2455. 1.日 期 : 2008年6月18日
  2456. 作 者 : 张强
  2457. 修改内容 : 新生成函数
  2458.  
  2459. 2.日 期 : 2011年2月22日
  2460. 作 者 : 彭军
  2461. 修改内容 : 修改文件头的日期为当年
  2462.  
  2463. *****************************************************************************/
  2464. macro InsertFileHeaderCN(hbuf, ln,szName,szContent)
  2465. {
  2466. hnewbuf = newbuf("")
  2467. if(hnewbuf == hNil)
  2468. {
  2469. stop
  2470. }
  2471. SysTime = GetSysTime()
  2472. szYear=SysTime.Year
  2473. szMonth=SysTime.month
  2474. szDay=SysTime.day
  2475. GetFunctionList(hbuf,hnewbuf)
  2476. InsBufLine(hbuf, ln + , "/***********************************************************************************")
  2477. sz = GetFileName(GetBufName (hbuf))
  2478. InsBufLine(hbuf, ln + , " * 文 件 名 : @sz@")
  2479. /*InsBufLine(hbuf, ln + 6, " 版 本 号 : 初稿")*/
  2480. InsBufLine(hbuf, ln + , " * 负 责 人 : @szName@")
  2481. InsBufLine(hbuf, ln + , " * 创建日期 : @szYear@年@szMonth@月@szDay@日")
  2482. /*InsBufLine(hbuf, ln + 9, " 最近修改 :")*/
  2483. iLen = strlen (szContent)
  2484. nlnDesc = ln
  2485. szTmp = " * 文件描述 : "
  2486. InsBufLine(hbuf, ln + , " * 文件描述 : @szContent@")
  2487. InsBufLine(hbuf, ln + , " * 版权说明 : Copyright (c) 2008-@szYear@ xx xx xx xx 技术有限公司")
  2488. InsBufLine(hbuf, ln + , " * 其 他 : ")
  2489. InsBufLine(hbuf, ln + , " * 修改日志 : ")
  2490. InsBufLine(hbuf, ln + , "***********************************************************************************/")
  2491. InsBufLine(hbuf, ln + , "")
  2492.  
  2493. // InsBufLine(hbuf, ln + 9, " * 版 本 号 : 1.0")
  2494. // InsBufLine(hbuf, ln + 10," * 函数列表 :")
  2495. // InsBufLine(hbuf, ln + 11," * ")
  2496. // //插入函数列表
  2497. // /*ln = InsertFileList(hbuf,hnewbuf,ln + 12) - 12
  2498. // closebuf(hnewbuf)
  2499. // */
  2500. // InsBufLine(hbuf, ln + 12, " * 历史记录 :")
  2501. // InsBufLine(hbuf, ln + 13, " * 1.日 期 : @sz@-@szMonth@-@szDay@")
  2502. //
  2503. // if( strlen(szMyName)>0 )
  2504. // {
  2505. // InsBufLine(hbuf, ln + 14, " * 作 者 : @szName@")
  2506. // }
  2507. // else
  2508. // {
  2509. // InsBufLine(hbuf, ln + 14, " * 作 者 : #")
  2510. // }
  2511. // InsBufLine(hbuf, ln + 15, " * 修改内容 : 创建文件")
  2512. // InsBufLine(hbuf, ln + 16, "")
  2513. // InsBufLine(hbuf, ln + 17, "***********************************************************************************/")
  2514. // InsBufLine(hbuf, ln + 18, "")
  2515. //InsBufLine(hbuf, ln + 19, "/*----------------------------------------------*")
  2516. //InsBufLine(hbuf, ln + 20, " * 外部变量说明 *")
  2517. //InsBufLine(hbuf, ln + 21, " *----------------------------------------------*/")
  2518. //InsBufLine(hbuf, ln + 22, "")
  2519. //InsBufLine(hbuf, ln + 23, "/*----------------------------------------------*")
  2520. //InsBufLine(hbuf, ln + 24, " * 外部函数原型说明 *")
  2521. //InsBufLine(hbuf, ln + 25, " *----------------------------------------------*/")
  2522. //InsBufLine(hbuf, ln + 26, "")
  2523. //InsBufLine(hbuf, ln + 27, "/*----------------------------------------------*")
  2524. //InsBufLine(hbuf, ln + 28, " * 内部函数原型说明 *")
  2525. //InsBufLine(hbuf, ln + 29, " *----------------------------------------------*/")
  2526. //InsBufLine(hbuf, ln + 30, "")
  2527. //InsBufLine(hbuf, ln + 31, "/*----------------------------------------------*")
  2528. //InsBufLine(hbuf, ln + 32, " * 全局变量 *")
  2529. //InsBufLine(hbuf, ln + 33, " *----------------------------------------------*/")
  2530. //InsBufLine(hbuf, ln + 34, "")
  2531. //InsBufLine(hbuf, ln + 35, "/*----------------------------------------------*")
  2532. //InsBufLine(hbuf, ln + 36, " * 模块级变量 *")
  2533. //InsBufLine(hbuf, ln + 37, " *----------------------------------------------*/")
  2534. //InsBufLine(hbuf, ln + 38, "")
  2535. //InsBufLine(hbuf, ln + 39, "/*----------------------------------------------*")
  2536. //InsBufLine(hbuf, ln + 40, " * 常量定义 *")
  2537. //InsBufLine(hbuf, ln + 41, " *----------------------------------------------*/")
  2538. //InsBufLine(hbuf, ln + 42, "")
  2539. //InsBufLine(hbuf, ln + 43, "/*----------------------------------------------*")
  2540. //InsBufLine(hbuf, ln + 44, " * 宏定义 *")
  2541. //InsBufLine(hbuf, ln + 45, " *----------------------------------------------*/")
  2542. //InsBufLine(hbuf, ln + 46, "")
  2543. if(strlen(szContent) != )
  2544. {
  2545. return
  2546. }
  2547.  
  2548. //如果没有输入功能描述的话提示输入
  2549. szContent = Ask("请输入文件功能描述的内容")
  2550.  
  2551. //设置光标位置为注释的最后一行
  2552. SetBufIns(hbuf,nlnDesc + ,)
  2553.  
  2554. //将原"文件描述"行删掉
  2555. DelBufLine(hbuf,nlnDesc +)
  2556.  
  2557. //自动排列显示功能描述
  2558. CommentContent(hbuf,nlnDesc+," * 文件描述 : ",szContent,)
  2559. }
  2560.  
  2561. /*****************************************************************************
  2562. 函 数 名 : GetFunctionList
  2563. 功能描述 : 获得函数列表
  2564. 输入参数 : hbuf
  2565. hnewbuf
  2566. 输出参数 : 无
  2567. 返 回 值 :
  2568. 调用函数 :
  2569. 被调函数 :
  2570.  
  2571. 修改历史 :
  2572. 1.日 期 : 2008年6月18日
  2573. 作 者 : 张强
  2574. 修改内容 : 新生成函数
  2575.  
  2576. *****************************************************************************/
  2577. macro GetFunctionList(hbuf,hnewbuf)
  2578. {
  2579. isymMax = GetBufSymCount (hbuf)
  2580. isym =
  2581. //依次取出全部的但前buf符号表中的全部符号
  2582. while (isym < isymMax)
  2583. {
  2584. symbol = GetBufSymLocation(hbuf, isym)
  2585. if(symbol.Type == "Class Placeholder")
  2586. {
  2587. hsyml = SymbolChildren(symbol)
  2588. cchild = SymListCount(hsyml)
  2589. ichild =
  2590. while (ichild < cchild)
  2591. {
  2592. childsym = SymListItem(hsyml, ichild)
  2593. AppendBufLine(hnewbuf,childsym.symbol)
  2594. ichild = ichild +
  2595. }
  2596. SymListFree(hsyml)
  2597. }
  2598. if(strlen(symbol) > )
  2599. {
  2600. if( (symbol.Type == "Method") ||
  2601. (symbol.Type == "Function") || ("Editor Macro" == symbol.Type) )
  2602. {
  2603. //取出类型是函数和宏的符号
  2604. symname = symbol.Symbol
  2605. //将符号插入到新buf中这样做是为了兼容V2.1
  2606. AppendBufLine(hnewbuf,symname)
  2607. }
  2608. }
  2609. isym = isym +
  2610. }
  2611. }
  2612. /*****************************************************************************
  2613. 函 数 名 : InsertFileList
  2614. 功能描述 : 函数列表插入
  2615. 输入参数 : hbuf
  2616. ln
  2617. 输出参数 : 无
  2618. 返 回 值 :
  2619. 调用函数 :
  2620. 被调函数 :
  2621.  
  2622. 修改历史 :
  2623. 1.日 期 : 2008年6月18日
  2624. 作 者 : 张强
  2625. 修改内容 : 新生成函数
  2626.  
  2627. *****************************************************************************/
  2628. macro InsertFileList(hbuf,hnewbuf,ln)
  2629. {
  2630. if(hnewbuf == hNil)
  2631. {
  2632. return ln
  2633. }
  2634. isymMax = GetBufLineCount (hnewbuf)
  2635. isym =
  2636. while (isym < isymMax)
  2637. {
  2638. szLine = GetBufLine(hnewbuf, isym)
  2639. InsBufLine(hbuf,ln," @szLine@")
  2640. ln = ln +
  2641. isym = isym +
  2642. }
  2643. return ln
  2644. }
  2645.  
  2646. /*****************************************************************************
  2647. 函 数 名 : CommentContent1
  2648. 功能描述 : 自动排列显示文本,因为msg对话框不能处理多行的情况,而且不能超过255
  2649. 个字符,作为折中,采用了从简帖板取数据的办法,如果如果的数据是剪
  2650. 贴板中内容的前部分的话就认为用户是拷贝的内容,这样做虽然有可能有
  2651. 误,但这种概率非常低。与CommentContent不同的是它将剪贴板中的内容
  2652. 合并成一段来处理,可以根据需要选择这两种方式
  2653. 输入参数 : hbuf
  2654. ln 行号
  2655. szPreStr 首行需要加入的字符串
  2656. szContent 需要输入的字符串内容
  2657. isEnd 是否需要在末尾加入'*'和'/'
  2658. 输出参数 : 无
  2659. 返 回 值 :
  2660. 调用函数 :
  2661. 被调函数 :
  2662.  
  2663. 修改历史 :
  2664. 1.日 期 : 2008年6月18日
  2665. 作 者 : 张强
  2666. 修改内容 : 新生成函数
  2667.  
  2668. *****************************************************************************/
  2669. macro CommentContent1 (hbuf,ln,szPreStr,szContent,isEnd)
  2670. {
  2671. //将剪贴板中的多段文本合并
  2672. szClip = MergeString()
  2673. //去掉多余的空格
  2674. szTmp = TrimString(szContent)
  2675. //如果输入窗口中的内容是剪贴板中的内容说明是剪贴过来的
  2676. ret = strstr(szClip,szTmp)
  2677. if(ret == )
  2678. {
  2679. szContent = szClip
  2680. }
  2681. szLeftBlank = szPreStr
  2682. iLen = strlen(szPreStr)
  2683. k =
  2684. while(k < iLen)
  2685. {
  2686. szLeftBlank[k] = " ";
  2687. k = k + ;
  2688. }
  2689. iLen = strlen (szContent)
  2690. szTmp = cat(szPreStr,"#");
  2691. if( iLen == )
  2692. {
  2693. InsBufLine(hbuf, ln, "@szTmp@")
  2694. }
  2695. else
  2696. {
  2697. i =
  2698. while (iLen - i > - k )
  2699. {
  2700. j =
  2701. while(j < - k)
  2702. {
  2703. iNum = szContent[i + j]
  2704. //如果是中文必须成对处理
  2705. if( AsciiFromChar (iNum) > )
  2706. {
  2707. j = j +
  2708. }
  2709. else
  2710. {
  2711. j = j +
  2712. }
  2713. if( (j > - k) && (szContent[i + j] == " ") )
  2714. {
  2715. break
  2716. }
  2717. }
  2718. if( (szContent[i + j] != " " ) )
  2719. {
  2720. n = ;
  2721. iNum = szContent[i + j + n]
  2722. while( (iNum != " " ) && (AsciiFromChar (iNum) < ))
  2723. {
  2724. n = n +
  2725. if((n >= ) ||(i + j + n >= iLen))
  2726. break;
  2727. iNum = szContent[i + j + n]
  2728. }
  2729. if(n < )
  2730. {
  2731. j = j + n
  2732. sz1 = strmid(szContent,i,i+j)
  2733. sz1 = cat(szPreStr,sz1)
  2734. }
  2735. else
  2736. {
  2737. sz1 = strmid(szContent,i,i+j)
  2738. sz1 = cat(szPreStr,sz1)
  2739. if(sz1[strlen(sz1)-] != "-")
  2740. {
  2741. sz1 = cat(sz1,"-")
  2742. }
  2743. }
  2744. }
  2745. else
  2746. {
  2747. sz1 = strmid(szContent,i,i+j)
  2748. sz1 = cat(szPreStr,sz1)
  2749. }
  2750. InsBufLine(hbuf, ln, "@sz1@")
  2751. ln = ln +
  2752. szPreStr = szLeftBlank
  2753. i = i + j
  2754. while(szContent[i] == " ")
  2755. {
  2756. i = i +
  2757. }
  2758. }
  2759. sz1 = strmid(szContent,i,iLen)
  2760. sz1 = cat(szPreStr,sz1)
  2761. if(isEnd)
  2762. {
  2763. sz1 = cat(sz1,"*/")
  2764. }
  2765. InsBufLine(hbuf, ln, "@sz1@")
  2766. }
  2767. return ln
  2768. }
  2769.  
  2770. /*****************************************************************************
  2771. 函 数 名 : CommentContent
  2772. 功能描述 : 自动排列显示文本,因为msg对话框不能处理多行的情况,而且不能超过255
  2773. 个字符,作为折中,采用了从简帖板取数据的办法,如果如果的数据是剪
  2774. 贴板中内容的前部分的话就认为用户是拷贝的内容,这样做虽然有可能有
  2775. 误,但这种概率非常低
  2776. 输入参数 : hbuf
  2777. ln 行号
  2778. szPreStr 首行需要加入的字符串
  2779. szContent 需要输入的字符串内容
  2780. isEnd 是否需要在末尾加入' '、'*'和'/'
  2781. 输出参数 : 无
  2782. 返 回 值 :
  2783. 调用函数 :
  2784. 被调函数 :
  2785.  
  2786. 修改历史 :
  2787. 1.日 期 : 2008年6月18日
  2788. 作 者 : 张强
  2789. 修改内容 : 新生成函数
  2790.  
  2791. *****************************************************************************/
  2792. macro CommentContent (hbuf,ln,szPreStr,szContent,isEnd)
  2793. {
  2794. szLeftBlank = szPreStr
  2795. iLen = strlen(szPreStr)
  2796. k =
  2797. while(k < iLen)
  2798. {
  2799. szLeftBlank[k] = " ";
  2800. k = k + ;
  2801. }
  2802.  
  2803. hNewBuf = newbuf("clip")
  2804. if(hNewBuf == hNil)
  2805. return
  2806. SetCurrentBuf(hNewBuf)
  2807. PasteBufLine (hNewBuf, )
  2808. lnMax = GetBufLineCount( hNewBuf )
  2809. szTmp = TrimString(szContent)
  2810.  
  2811. //判断如果剪贴板是0行时对于有些版本会有问题,要排除掉
  2812. if(lnMax != )
  2813. {
  2814. szLine = GetBufLine(hNewBuf , )
  2815. ret = strstr(szLine,szTmp)
  2816. if(ret == )
  2817. {
  2818. /*如果输入窗输入的内容是剪贴板的一部分说明是剪贴过来的取剪贴板中的内
  2819. 容*/
  2820. szContent = TrimString(szLine)
  2821. }
  2822. else
  2823. {
  2824. lnMax =
  2825. }
  2826. }
  2827. else
  2828. {
  2829. lnMax =
  2830. }
  2831. szRet = ""
  2832. nIdx =
  2833. while ( nIdx < lnMax)
  2834. {
  2835. if(nIdx != )
  2836. {
  2837. szLine = GetBufLine(hNewBuf , nIdx)
  2838. szContent = TrimLeft(szLine)
  2839. szPreStr = szLeftBlank
  2840. }
  2841. iLen = strlen (szContent)
  2842. szTmp = cat(szPreStr,"#");
  2843. if( (iLen == ) && (nIdx == (lnMax - ))
  2844. {
  2845. InsBufLine(hbuf, ln, "@szTmp@")
  2846. }
  2847. else
  2848. {
  2849. i =
  2850. //以每行75个字符处理
  2851. while (iLen - i > - k )
  2852. {
  2853. j =
  2854. while(j < - k)
  2855. {
  2856. iNum = szContent[i + j]
  2857. if( AsciiFromChar (iNum) > )
  2858. {
  2859. j = j +
  2860. }
  2861. else
  2862. {
  2863. j = j +
  2864. }
  2865. if( (j > - k) && (szContent[i + j] == " ") )
  2866. {
  2867. break
  2868. }
  2869. }
  2870. if( (szContent[i + j] != " " ) )
  2871. {
  2872. n = ;
  2873. iNum = szContent[i + j + n]
  2874. //如果是中文字符只能成对处理
  2875. while( (iNum != " " ) && (AsciiFromChar (iNum) < ))
  2876. {
  2877. n = n +
  2878. if((n >= ) ||(i + j + n >= iLen))
  2879. break;
  2880. iNum = szContent[i + j + n]
  2881. }
  2882. if(n < )
  2883. {
  2884. //分段后只有小于3个的字符留在下段则将其以上去
  2885. j = j + n
  2886. sz1 = strmid(szContent,i,i+j)
  2887. sz1 = cat(szPreStr,sz1)
  2888. }
  2889. else
  2890. {
  2891. //大于3个字符的加连字符分段
  2892. sz1 = strmid(szContent,i,i+j)
  2893. sz1 = cat(szPreStr,sz1)
  2894. if(sz1[strlen(sz1)-] != "-")
  2895. {
  2896. sz1 = cat(sz1,"-")
  2897. }
  2898. }
  2899. }
  2900. else
  2901. {
  2902. sz1 = strmid(szContent,i,i+j)
  2903. sz1 = cat(szPreStr,sz1)
  2904. }
  2905. InsBufLine(hbuf, ln, "@sz1@")
  2906. ln = ln +
  2907. szPreStr = szLeftBlank
  2908. i = i + j
  2909. while(szContent[i] == " ")
  2910. {
  2911. i = i +
  2912. }
  2913. }
  2914. sz1 = strmid(szContent,i,iLen)
  2915. sz1 = cat(szPreStr,sz1)
  2916. if((isEnd == ) && (nIdx == (lnMax - ))
  2917. {
  2918. sz1 = cat(sz1," */")
  2919. }
  2920. InsBufLine(hbuf, ln, "@sz1@")
  2921. }
  2922. ln = ln +
  2923. nIdx = nIdx +
  2924. }
  2925. closebuf(hNewBuf)
  2926. return ln -
  2927. }
  2928.  
  2929. /*****************************************************************************
  2930. 函 数 名 : FormatLine
  2931. 功能描述 : 将一行长文本进行自动分行
  2932. 输出参数 : 无
  2933. 返 回 值 :
  2934. 调用函数 :
  2935. 被调函数 :
  2936.  
  2937. 修改历史 :
  2938. 1.日 期 : 2008年6月18日
  2939. 作 者 : 张强
  2940. 修改内容 : 新生成函数
  2941.  
  2942. *****************************************************************************/
  2943. macro FormatLine()
  2944. {
  2945. hwnd = GetCurrentWnd()
  2946. if (hwnd == )
  2947. stop
  2948. sel = GetWndSel(hwnd)
  2949. if(sel.ichFirst > )
  2950. {
  2951. Msg("选择太靠右了")
  2952. stop
  2953. }
  2954. hbuf = GetWndBuf(hwnd)
  2955. // get line the selection (insertion point) is on
  2956. szCurLine = GetBufLine(hbuf, sel.lnFirst);
  2957. lineLen = strlen(szCurLine)
  2958. szLeft = strmid(szCurLine,,sel.ichFirst)
  2959. szContent = strmid(szCurLine,sel.ichFirst,lineLen)
  2960. DelBufLine(hbuf, sel.lnFirst)
  2961. CommentContent(hbuf,sel.lnFirst,szLeft,szContent,)
  2962.  
  2963. }
  2964.  
  2965. /*****************************************************************************
  2966. 函 数 名 : CreateBlankString
  2967. 功能描述 : 产生几个空格的字符串
  2968. 输入参数 : nBlankCount
  2969. 输出参数 : 无
  2970. 返 回 值 :
  2971. 调用函数 :
  2972. 被调函数 :
  2973.  
  2974. 修改历史 :
  2975. 1.日 期 : 2008年6月18日
  2976. 作 者 : 张强
  2977. 修改内容 : 新生成函数
  2978.  
  2979. *****************************************************************************/
  2980. macro CreateBlankString(nBlankCount)
  2981. {
  2982. szBlank=""
  2983. nIdx =
  2984. while(nIdx < nBlankCount)
  2985. {
  2986. szBlank = cat(szBlank," ")
  2987. nIdx = nIdx +
  2988. }
  2989. return szBlank
  2990. }
  2991.  
  2992. /*****************************************************************************
  2993. 函 数 名 : TrimLeft
  2994. 功能描述 : 去掉字符串左边的空格
  2995. 输入参数 : szLine
  2996. 输出参数 : 去掉左空格后的字符串
  2997. 返 回 值 :
  2998. 调用函数 :
  2999. 被调函数 :
  3000.  
  3001. 修改历史 :
  3002. 1.日 期 : 2008年6月18日
  3003. 作 者 : 张强
  3004. 修改内容 : 新生成函数
  3005.  
  3006. *****************************************************************************/
  3007. macro TrimLeft(szLine)
  3008. {
  3009. nLen = strlen(szLine)
  3010. if(nLen == )
  3011. {
  3012. return szLine
  3013. }
  3014. nIdx =
  3015. while( nIdx < nLen )
  3016. {
  3017. if( ( szLine[nIdx] != " ") && (szLine[nIdx] != "\t") )
  3018. {
  3019. break
  3020. }
  3021. nIdx = nIdx +
  3022. }
  3023. return strmid(szLine,nIdx,nLen)
  3024. }
  3025.  
  3026. /*****************************************************************************
  3027. 函 数 名 : TrimRight
  3028. 功能描述 : 去掉字符串右边的空格
  3029. 输入参数 : szLine
  3030. 输出参数 : 去掉右空格后的字符串
  3031. 返 回 值 :
  3032. 调用函数 :
  3033. 被调函数 :
  3034.  
  3035. 修改历史 :
  3036. 1.日 期 : 2008年6月18日
  3037. 作 者 : 张强
  3038. 修改内容 : 新生成函数
  3039.  
  3040. *****************************************************************************/
  3041. macro TrimRight(szLine)
  3042. {
  3043. nLen = strlen(szLine)
  3044. if(nLen == )
  3045. {
  3046. return szLine
  3047. }
  3048. nIdx = nLen
  3049. while( nIdx > )
  3050. {
  3051. nIdx = nIdx -
  3052. if( ( szLine[nIdx] != " ") && (szLine[nIdx] != "\t") )
  3053. {
  3054. break
  3055. }
  3056. }
  3057. return strmid(szLine,,nIdx+)
  3058. }
  3059.  
  3060. /*****************************************************************************
  3061. 函 数 名 : TrimString
  3062. 功能描述 : 去掉字符串左右空格
  3063. 输入参数 : szLine
  3064. 输出参数 : 去掉左右空格后的字符串
  3065. 返 回 值 :
  3066. 调用函数 :
  3067. 被调函数 :
  3068.  
  3069. 修改历史 :
  3070. 1.日 期 : 2008年6月18日
  3071. 作 者 : 张强
  3072. 修改内容 : 新生成函数
  3073.  
  3074. *****************************************************************************/
  3075. macro TrimString(szLine)
  3076. {
  3077. szLine = TrimLeft(szLine)
  3078. szLIne = TrimRight(szLine)
  3079. return szLine
  3080. }
  3081.  
  3082. /*****************************************************************************
  3083. 函 数 名 : GetFunctionDef
  3084. 功能描述 : 将分成多行的函数参数头合并成一行
  3085. 输入参数 : hbuf
  3086. symbol 函数符号
  3087. 输出参数 : 无
  3088. 返 回 值 :
  3089. 调用函数 :
  3090. 被调函数 :
  3091.  
  3092. 修改历史 :
  3093. 1.日 期 : 2008年6月18日
  3094. 作 者 : 张强
  3095. 修改内容 : 新生成函数
  3096.  
  3097. *****************************************************************************/
  3098. macro GetFunctionDef(hbuf,symbol)
  3099. {
  3100. ln = symbol.lnName
  3101. szFunc = ""
  3102. if(strlen(symbol) == )
  3103. {
  3104. return szFunc
  3105. }
  3106. fIsEnd =
  3107. // msg(symbol)
  3108. while(ln < symbol.lnLim)
  3109. {
  3110. szLine = GetBufLine (hbuf, ln)
  3111. //去掉被注释掉的内容
  3112. RetVal = SkipCommentFromString(szLine,fIsEnd)
  3113. szLine = RetVal.szContent
  3114. szLine = TrimString(szLine)
  3115. fIsEnd = RetVal.fIsEnd
  3116. //如果是{表示函数参数头结束了
  3117. ret = strstr(szLine,"{")
  3118. if(ret != 0xffffffff)
  3119. {
  3120. szLine = strmid(szLine,,ret)
  3121. szFunc = cat(szFunc,szLine)
  3122. break
  3123. }
  3124. szFunc = cat(szFunc,szLine)
  3125. ln = ln +
  3126. }
  3127. return szFunc
  3128. }
  3129.  
  3130. /*****************************************************************************
  3131. 函 数 名 : GetWordFromString
  3132. 功能描述 : 从字符串中取得以某种方式分割的字符串组
  3133. 输入参数 : hbuf 生成分割后字符串的buf
  3134. szLine 字符串
  3135. nBeg 开始检索位置
  3136. nEnd 结束检索位置
  3137. chBeg 开始的字符标志
  3138. chSeparator 分割字符
  3139. chEnd 结束字符标志
  3140. 输出参数 : 最大字符长度
  3141. 返 回 值 :
  3142. 调用函数 :
  3143. 被调函数 :
  3144.  
  3145. 修改历史 :
  3146. 1.日 期 : 2008年6月18日
  3147. 作 者 : 张强
  3148. 修改内容 : 新生成函数
  3149.  
  3150. *****************************************************************************/
  3151. macro GetWordFromString(hbuf,szLine,nBeg,nEnd,chBeg,chSeparator,chEnd)
  3152. {
  3153. if((nEnd > strlen(szLine) || (nBeg > nEnd))
  3154. {
  3155. return
  3156. }
  3157. nMaxLen =
  3158. nIdx = nBeg
  3159. //先定位到开始字符标记处
  3160. while(nIdx < nEnd)
  3161. {
  3162. if(szLine[nIdx] == chBeg)
  3163. {
  3164. //nIdx不加1,在分隔符为标记的搜索中第一次就会搜到起始符
  3165. break
  3166. }
  3167. nIdx = nIdx +
  3168. }
  3169. nBegWord = nIdx +
  3170.  
  3171. //用于检测chBeg和chEnd的配对情况,因定位到起始符是nIdx没有加1,所以iCount=0
  3172. iCount =
  3173.  
  3174. nEndWord =
  3175. //以分隔符为标记进行搜索
  3176. while(nIdx < nEnd)
  3177. {
  3178. if(szLine[nIdx] == chSeparator)
  3179. {
  3180. szWord = strmid(szLine,nBegWord,nIdx)
  3181. szWord = TrimString(szWord)
  3182. nLen = strlen(szWord)
  3183. if(nMaxLen < nLen)
  3184. {
  3185. nMaxLen = nLen
  3186. }
  3187. AppendBufLine(hbuf,szWord)
  3188. nBegWord = nIdx +
  3189. }
  3190. if(szLine[nIdx] == chBeg)
  3191. {
  3192. iCount = iCount +
  3193. }
  3194. if(szLine[nIdx] == chEnd)
  3195. {
  3196. iCount = iCount -
  3197. nEndWord = nIdx
  3198. if( iCount == )
  3199. {
  3200. break
  3201. }
  3202. }
  3203. nIdx = nIdx +
  3204. }
  3205. //提取分隔符与结束符之间的字符串组
  3206. if(nEndWord > nBegWord)
  3207. {
  3208. szWord = strmid(szLine,nBegWord,nEndWord)
  3209. szWord = TrimString(szWord)
  3210. nLen = strlen(szWord)
  3211. if(nMaxLen < nLen)
  3212. {
  3213. nMaxLen = nLen
  3214. }
  3215. AppendBufLine(hbuf,szWord)
  3216. }
  3217. return nMaxLen
  3218. }
  3219.  
  3220. /*****************************************************************************
  3221. 函 数 名 : FuncHeadCommentCN
  3222. 功能描述 : 生成中文的函数头注释
  3223. 输入参数 : hbuf
  3224. ln 行号
  3225. szFunc 函数名
  3226. szMyName 作者名
  3227. newFunc 是否新函数
  3228. 输出参数 : 无
  3229. 返 回 值 :
  3230. 调用函数 :
  3231. 被调函数 :
  3232.  
  3233. 修改历史 :
  3234. 1.日 期 : 2008年6月18日
  3235. 作 者 : 张强
  3236. 修改内容 : 新生成函数
  3237.  
  3238. *****************************************************************************/
  3239. macro FuncHeadCommentCN(hbuf, ln, szFunc, szMyName,newFunc)
  3240. {
  3241. iIns =
  3242. if(newFunc != )
  3243. {
  3244. symbol = GetSymbolLocationFromLn(hbuf, ln)
  3245. if(strlen(symbol) > )
  3246. {
  3247. hTmpBuf = NewBuf("Tempbuf")
  3248. if(hTmpBuf == hNil)
  3249. {
  3250. stop
  3251. }
  3252. //将分成多行的函数参数头合并成一行并去掉了注释
  3253. szLine = GetFunctionDef(hbuf,symbol)
  3254. iBegin = symbol.ichName
  3255. //取出返回值定义
  3256. szTemp = strmid(szLine,,iBegin)
  3257. szTemp = TrimString(szTemp)
  3258. szRet = GetFirstWord(szTemp)
  3259. if(symbol.Type == "Method")
  3260. {
  3261. szTemp = strmid(szTemp,strlen(szRet),strlen(szTemp))
  3262. szTemp = TrimString(szTemp)
  3263. if(szTemp == "::")
  3264. {
  3265. szRet = ""
  3266. }
  3267. }
  3268. if(toupper (szRet) == "MACRO")
  3269. {
  3270. //对于宏返回值特殊处理
  3271. szRet = ""
  3272. }
  3273. //从函数头分离出函数参数
  3274. nMaxParamSize = GetWordFromString(hTmpBuf,szLine,iBegin,strlen(szLine),"(",",",")")
  3275. lnMax = GetBufLineCount(hTmpBuf)
  3276. ln = symbol.lnFirst
  3277. SetBufIns (hbuf, ln, )
  3278. }
  3279. }
  3280. else
  3281. {
  3282. lnMax =
  3283. szLine = ""
  3284. szRet = ""
  3285. }
  3286. InsBufLine(hbuf, ln, "/*****************************************************************************")
  3287. if( strlen(szFunc)> )
  3288. {
  3289. InsBufLine(hbuf, ln+, " * 函 数 名 : @szFunc@")
  3290. }
  3291. else
  3292. {
  3293. InsBufLine(hbuf, ln+, " * 函 数 名 : #")
  3294. }
  3295. oldln = ln
  3296. InsBufLine(hbuf, ln+, " * 负 责 人 : @szMyName@")
  3297. SysTime = GetSysTime();
  3298. /*szTime = SysTime.Date*/
  3299. SysTime = GetSysTime();
  3300. sz1=SysTime.Year
  3301. sz2=SysTime.month
  3302. sz3=SysTime.day
  3303. InsBufLine(hbuf, ln+, " * 创建日期 : @sz1@年@sz2@月@sz3@日")
  3304. InsBufLine(hbuf, ln+, " * 函数功能 : ")
  3305. szIns = " * 输入参数 : "
  3306. if(newFunc != )
  3307. {
  3308. //对于已经存在的函数插入函数参数
  3309. i =
  3310. while ( i < lnMax)
  3311. {
  3312. szTmp = GetBufLine(hTmpBuf, i)
  3313. nLen = strlen(szTmp);
  3314. szBlank = CreateBlankString(nMaxParamSize - nLen + )
  3315. szTmp = cat(szTmp,szBlank)
  3316.  
  3317. //插入参数描述
  3318. szParamAsk = cat("请输入参数描述: ",szTmp)
  3319. szParamDescribe = Ask(szParamAsk)
  3320. szTmp = cat(szTmp,szParamDescribe)
  3321.  
  3322. ln = ln + //这句是关键,每找到一个参数将ln加1,保证今后在ln+?行都是在所有参数基础后加的
  3323. szTmp = cat(szIns,szTmp)
  3324. InsBufLine(hbuf, ln+, "@szTmp@") //在第ln+4行插入是因为前面每个参数都ln=ln+1,其实是从ln5行开始每个参数插入一行
  3325. iIns = //函数是否存在参数标记
  3326. szIns = " " //第二个参数前面留空格对齐
  3327. i = i +
  3328. }
  3329. closebuf(hTmpBuf)
  3330. }
  3331. if(iIns == )
  3332. {
  3333. ln = ln + //为了保持如有参数的一致
  3334. InsBufLine(hbuf, ln+, " * 输入参数 : 无") //在第ln+4行插入是因为前面每个参数都ln=ln+1,其实是从ln5行开始每个参数插入一行
  3335. }
  3336. InsBufLine(hbuf, ln+, " * 输出参数 : 无")
  3337. InsBufLine(hbuf, ln+, " * 返 回 值 : @szRet@")
  3338. InsBufLine(hbuf, ln+, " * 调用关系 : ")
  3339. InsBufLine(hbuf, ln+, " * 其 它 : ")
  3340. /*InsBufLine(hbuf, ln+6, " 创 建 者 : @szMyName@")
  3341. InsbufLIne(hbuf, ln+7, " 创建时间 : @szTime@")*/
  3342. // InsBufLine(hbuf, ln+6, " * 记 录")
  3343. // SysTime = GetSysTime(1);
  3344. // /*szTime = SysTime.Date*/
  3345. // SysTime = GetSysTime(1);
  3346. // sz1=SysTime.Year
  3347. // sz2=SysTime.month
  3348. // sz3=SysTime.day
  3349. // if (sz2 < 10)
  3350. // {
  3351. // szMonth = "0@sz2@"
  3352. // }
  3353. // else
  3354. // {
  3355. // szMonth = sz2
  3356. // }
  3357. // if (sz3 < 10)
  3358. // {
  3359. // szDay = "0@sz3@"
  3360. // }
  3361. // else
  3362. // {
  3363. // szDay = sz3
  3364. // }
  3365. //
  3366. // InsBufLine(hbuf, ln+7, " * 1.日 期: @sz1@@szMonth@@szDay@")
  3367. //
  3368. // if( strlen(szMyName)>0 )
  3369. // {
  3370. // InsBufLine(hbuf, ln+8, " * 作 者: @szMyName@")
  3371. // }
  3372. // else
  3373. // {
  3374. // InsBufLine(hbuf, ln+8, " * 作 者: #")
  3375. // }
  3376. // InsBufLine(hbuf, ln+9, " * 修改内容: 新生成函数")
  3377. InsBufLine(hbuf, ln+, "")
  3378. InsBufLine(hbuf, ln+, "*****************************************************************************/")
  3379. //输入了函数名的新函数在注释后加上函数体
  3380. if ((newFunc == ) && (strlen(szFunc)>))
  3381. {
  3382. InsBufLine(hbuf, ln+, "VOS_UINT32 @szFunc@( # )")
  3383. InsBufLine(hbuf, ln+, "{");
  3384. InsBufLine(hbuf, ln+, " #");
  3385. InsBufLine(hbuf, ln+, "}");
  3386. SearchForward() //光标定位到最前面单独出现的#上,并选中#,即函数名后面的#(函数的参数位置)
  3387. }
  3388. hwnd = GetCurrentWnd()
  3389. if (hwnd == )
  3390. stop
  3391. //光标定位到"{"后
  3392. sel = GetWndSel(hwnd)
  3393. sel.ichFirst =
  3394. sel.ichLim = sel.ichFirst
  3395. sel.lnFirst = ln +
  3396. sel.lnLast = ln +
  3397. szContent = Ask("请输入函数功能描述的内容")
  3398. setWndSel(hwnd,sel)
  3399. DelBufLine(hbuf,oldln + )
  3400.  
  3401. //显示输入的功能描述内容
  3402. newln = CommentContent(hbuf,oldln+," * 函数功能 : ",szContent,) - //此处减4是因为CommentContent返回的值是传进去的oldln+4之后演算出来的
  3403. ln = ln + newln - oldln //加上增加行数
  3404. if ((newFunc == ) && (strlen(szFunc)>))
  3405. {
  3406. isFirstParam =
  3407.  
  3408. //提示输入新函数的返回值
  3409. szRet = Ask("请输入返回值类型")
  3410. if(strlen(szRet) > )
  3411. {
  3412. PutBufLine(hbuf, ln+, " * 返 回 值 : @szRet@")
  3413. PutBufLine(hbuf, ln+, "@szRet@ @szFunc@( )")
  3414. SetbufIns(hbuf,ln+,strlen(szRet)+strlen(szFunc) + //光标定位到函数的左括号"("后一个空格处
  3415. }
  3416. szFuncDef = ""
  3417. sel.ichFirst = strlen(szFunc)+strlen(szRet) +
  3418. sel.ichLim = sel.ichFirst +
  3419. //循环输入参数
  3420. while ()
  3421. {
  3422. szParam = ask("请输入函数参数名")
  3423. szParam = TrimString(szParam)
  3424. szParamOriginal = szParam
  3425. szTmp = cat(szIns,szParam)
  3426. szParam = cat(szFuncDef,szParam)
  3427.  
  3428. //光标定位到函数的最后一个参数后
  3429. sel.lnFirst = ln +
  3430. sel.lnLast = ln +
  3431. setWndSel(hwnd,sel)
  3432.  
  3433. sel.ichFirst = sel.ichFirst + strlen(szParam)
  3434. sel.ichLim = sel.ichFirst
  3435. oldsel = sel
  3436.  
  3437. //插入参数描述
  3438. szParamAsk = cat("请输入参数描述: ",szParamOriginal)
  3439. szParamDescribe = Ask(szParamAsk)
  3440. szTmp = cat(szTmp," ")
  3441. szTmp = cat(szTmp,szParamDescribe)
  3442.  
  3443. //在函数头注释中插入参数
  3444. if(isFirstParam == )
  3445. {
  3446. PutBufLine(hbuf, ln+, "@szTmp@")
  3447. isFirstParam =
  3448. }
  3449. else
  3450. {
  3451. ln = ln +
  3452. InsBufLine(hbuf, ln+, "@szTmp@")
  3453. oldsel.lnFirst = ln +
  3454. oldsel.lnLast = ln +
  3455. }
  3456.  
  3457. //在光标所在的位置插入参数
  3458. SetBufSelText(hbuf,szParam)
  3459.  
  3460. //函数头注释的对齐
  3461. szIns = " "
  3462. //参数后加一个空格
  3463. szFuncDef = ", "
  3464.  
  3465. //光标定位到函数"{"后的"#"处,并选中"#"
  3466. oldsel.lnFirst = ln +
  3467. oldsel.lnLast = ln +
  3468. oldsel.ichFirst =
  3469. oldsel.ichLim =
  3470. setWndSel(hwnd,oldsel)
  3471. }
  3472. }
  3473. return ln +
  3474. }
  3475.  
  3476. /*****************************************************************************
  3477. 函 数 名 : FuncHeadCommentEN
  3478. 功能描述 : 函数头英文说明
  3479. 输入参数 : hbuf
  3480. ln
  3481. szFunc
  3482. szMyName
  3483. newFunc
  3484. 输出参数 : 无
  3485. 返 回 值 :
  3486. 调用函数 :
  3487. 被调函数 :
  3488.  
  3489. 修改历史 :
  3490. 1.日 期 : 2008年6月18日
  3491. 作 者 : 张强
  3492. 修改内容 : 新生成函数
  3493.  
  3494. *****************************************************************************/
  3495. macro FuncHeadCommentEN(hbuf, ln, szFunc, szMyName,newFunc)
  3496. {
  3497. iIns =
  3498. if(newFunc != )
  3499. {
  3500. symbol = GetSymbolLocationFromLn(hbuf, ln)
  3501. if(strlen(symbol) > )
  3502. {
  3503. hTmpBuf = NewBuf("Tempbuf")
  3504.  
  3505. //将文件参数头整理成一行并去掉了注释
  3506. szLine = GetFunctionDef(hbuf,symbol)
  3507. iBegin = symbol.ichName
  3508.  
  3509. //取出返回值定义
  3510. szTemp = strmid(szLine,,iBegin)
  3511. szTemp = TrimString(szTemp)
  3512. szRet = GetFirstWord(szTemp)
  3513. if(symbol.Type == "Method")
  3514. {
  3515. szTemp = strmid(szTemp,strlen(szRet),strlen(szTemp))
  3516. szTemp = TrimString(szTemp)
  3517. if(szTemp == "::")
  3518. {
  3519. szRet = ""
  3520. }
  3521. }
  3522. if(toupper (szRet) == "MACRO")
  3523. {
  3524. //对于宏返回值特殊处理
  3525. szRet = ""
  3526. }
  3527.  
  3528. //从函数头分离出函数参数
  3529. nMaxParamSize = GetWordFromString(hTmpBuf,szLine,iBegin,strlen(szLine),"(",",",")")
  3530. lnMax = GetBufLineCount(hTmpBuf)
  3531. ln = symbol.lnFirst
  3532. SetBufIns (hbuf, ln, )
  3533. }
  3534. }
  3535. else
  3536. {
  3537. lnMax =
  3538. szRet = ""
  3539. szLine = ""
  3540. }
  3541. InsBufLine(hbuf, ln, "/*****************************************************************************")
  3542. InsBufLine(hbuf, ln+, " * Function : @szFunc@")
  3543. InsBufLine(hbuf, ln+, " * Description : ")
  3544. oldln = ln
  3545. szIns = " * Input : "
  3546. if(newFunc != )
  3547. {
  3548. //对于已经存在的函数输出输入参数表
  3549. i =
  3550. while ( i < lnMax)
  3551. {
  3552. szTmp = GetBufLine(hTmpBuf, i)
  3553. nLen = strlen(szTmp);
  3554.  
  3555. //对齐参数后面的空格,实际是对齐后面的参数的说明
  3556. szBlank = CreateBlankString(nMaxParamSize - nLen + )
  3557. szTmp = cat(szTmp,szBlank)
  3558. ln = ln +
  3559. szTmp = cat(szIns,szTmp)
  3560. InsBufLine(hbuf, ln+, "@szTmp@")
  3561. iIns =
  3562. szIns = " "
  3563. i = i +
  3564. }
  3565. closebuf(hTmpBuf)
  3566. }
  3567. if(iIns == )
  3568. {
  3569. ln = ln +
  3570. InsBufLine(hbuf, ln+, " * Input : None")
  3571. }
  3572. InsBufLine(hbuf, ln+, " * Output : None")
  3573. InsBufLine(hbuf, ln+, " * Return : @szRet@")
  3574. /*InsBufLine(hbuf, ln+5, " Calls : ")
  3575. InsBufLine(hbuf, ln+6, " Called By : ")*/
  3576. InsbufLIne(hbuf, ln+, " * Others : ");
  3577.  
  3578. SysTime = GetSysTime();
  3579. sz1=SysTime.Year
  3580. sz2=SysTime.month
  3581. sz3=SysTime.day
  3582. if (sz2 < )
  3583. {
  3584. szMonth = "0@sz2@"
  3585. }
  3586. else
  3587. {
  3588. szMonth = sz2
  3589. }
  3590. if (sz3 < )
  3591. {
  3592. szDay = "0@sz3@"
  3593. }
  3594. else
  3595. {
  3596. szDay = sz3
  3597. }
  3598.  
  3599. InsBufLine(hbuf, ln + , " * Record")
  3600. InsBufLine(hbuf, ln + , " * 1.Date : @sz1@@szMonth@@szDay@")
  3601. InsBufLine(hbuf, ln + , " * Author : @szMyName@")
  3602. InsBufLine(hbuf, ln + , " * Modification: Created function")
  3603. InsBufLine(hbuf, ln + , "")
  3604. InsBufLine(hbuf, ln + , "*****************************************************************************/")
  3605. if ((newFunc == ) && (strlen(szFunc)>))
  3606. {
  3607. InsBufLine(hbuf, ln+, "VOS_UINT32 @szFunc@( # )")
  3608. InsBufLine(hbuf, ln+, "{");
  3609. InsBufLine(hbuf, ln+, " #");
  3610. InsBufLine(hbuf, ln+, "}");
  3611. SearchForward()
  3612. }
  3613. hwnd = GetCurrentWnd()
  3614. if (hwnd == )
  3615. stop
  3616. sel = GetWndSel(hwnd)
  3617. sel.ichFirst =
  3618. sel.ichLim = sel.ichFirst
  3619. sel.lnFirst = ln +
  3620. sel.lnLast = ln +
  3621. szContent = Ask("Description")
  3622. DelBufLine(hbuf,oldln + )
  3623. setWndSel(hwnd,sel)
  3624. newln = CommentContent(hbuf,oldln + ," * Description : ",szContent,) -
  3625. ln = ln + newln - oldln
  3626. if ((newFunc == ) && (strlen(szFunc)>))
  3627. {
  3628. //提示输入函数返回值名
  3629. szRet = Ask("Please input return value type")
  3630. if(strlen(szRet) > )
  3631. {
  3632. PutBufLine(hbuf, ln+, " * Return : @szRet@")
  3633. PutBufLine(hbuf, ln+, "@szRet@ @szFunc@( # )")
  3634. SetbufIns(hbuf,ln+,strlen(szRet)+strlen(szFunc) +
  3635. }
  3636. szFuncDef = ""
  3637. isFirstParam =
  3638. sel.ichFirst = strlen(szFunc)+strlen(szRet) +
  3639. sel.ichLim = sel.ichFirst +
  3640.  
  3641. //循环输入新函数的参数
  3642. while ()
  3643. {
  3644. szParam = ask("Please input parameter")
  3645. szParam = TrimString(szParam)
  3646. szTmp = cat(szIns,szParam)
  3647. szParam = cat(szFuncDef,szParam)
  3648. sel.lnFirst = ln +
  3649. sel.lnLast = ln +
  3650. setWndSel(hwnd,sel)
  3651. sel.ichFirst = sel.ichFirst + strlen(szParam)
  3652. sel.ichLim = sel.ichFirst
  3653. oldsel = sel
  3654. if(isFirstParam == )
  3655. {
  3656. PutBufLine(hbuf, ln+, "@szTmp@")
  3657. isFirstParam =
  3658. }
  3659. else
  3660. {
  3661. ln = ln +
  3662. InsBufLine(hbuf, ln+, "@szTmp@")
  3663. oldsel.lnFirst = ln +
  3664. oldsel.lnLast = ln +
  3665. }
  3666. SetBufSelText(hbuf,szParam)
  3667. szIns = " "
  3668. szFuncDef = ", "
  3669. oldsel.lnFirst = ln +
  3670. oldsel.lnLast = ln +
  3671. oldsel.ichFirst =
  3672. oldsel.ichLim =
  3673. setWndSel(hwnd,oldsel)
  3674. }
  3675. }
  3676. return ln +
  3677. }
  3678.  
  3679. /*****************************************************************************
  3680. 函 数 名 : InsertHistory
  3681. 功能描述 : 插入修改历史记录
  3682. 输入参数 : hbuf
  3683. ln 行号
  3684. language 语种
  3685. 输出参数 : 无
  3686. 返 回 值 :
  3687. 调用函数 :
  3688. 被调函数 :
  3689.  
  3690. 修改历史 :
  3691. 1.日 期 : 2008年6月18日
  3692. 作 者 : 张强
  3693. 修改内容 : 新生成函数
  3694.  
  3695. *****************************************************************************/
  3696. macro InsertHistory(hbuf,ln,language)
  3697. {
  3698. iHistoryCount =
  3699. // isLastLine = ln
  3700. // i = 0
  3701. // while(ln-i>0)
  3702. // {
  3703. // szCurLine = GetBufLine(hbuf, ln-i);
  3704. // iBeg1 = strstr(szCurLine,"日 期 ")
  3705. // iBeg2 = strstr(szCurLine,"Date ")
  3706. // if((iBeg1 != 0xffffffff) || (iBeg2 != 0xffffffff))
  3707. // {
  3708. // iHistoryCount = iHistoryCount + 1
  3709. // i = i + 1
  3710. // continue
  3711. // }
  3712. // iBeg1 = strstr(szCurLine,"修改历史")
  3713. // iBeg2 = strstr(szCurLine,"History ")
  3714. // if((iBeg1 != 0xffffffff) || (iBeg2 != 0xffffffff))
  3715. // {
  3716. // break
  3717. // }
  3718. // iBeg = strstr(szCurLine,"/**********************")
  3719. // if( iBeg != 0xffffffff )
  3720. // {
  3721. // break
  3722. // }
  3723. // i = i + 1
  3724. // }
  3725. if(language == )
  3726. {
  3727. InsertHistoryContentCN(hbuf,ln,iHistoryCount)
  3728. }
  3729. else
  3730. {
  3731. InsertHistoryContentEN(hbuf,ln,iHistoryCount)
  3732. }
  3733. }
  3734.  
  3735. /*****************************************************************************
  3736. 函 数 名 : UpdateFunctionList
  3737. 功能描述 : 更新函数列表
  3738. 输出参数 : 无
  3739. 返 回 值 :
  3740. 调用函数 :
  3741. 被调函数 :
  3742.  
  3743. 修改历史 :
  3744. 1.日 期 : 2008年6月18日
  3745. 作 者 : 张强
  3746. 修改内容 : 新生成函数
  3747.  
  3748. *****************************************************************************/
  3749. macro UpdateFunctionList()
  3750. {
  3751. hnewbuf = newbuf("")
  3752. if(hnewbuf == hNil)
  3753. {
  3754. stop
  3755. }
  3756. hwnd = GetCurrentWnd()
  3757. if (hwnd == )
  3758. stop
  3759. sel = GetWndSel(hwnd)
  3760. hbuf = GetWndBuf(hwnd)
  3761. GetFunctionList(hbuf,hnewbuf)
  3762. ln = sel.lnFirst
  3763. iHistoryCount =
  3764. isLastLine = ln
  3765. iTotalLn = GetBufLineCount (hbuf)
  3766. while(ln < iTotalLn)
  3767. {
  3768. szCurLine = GetBufLine(hbuf, ln);
  3769. iLen = strlen(szCurLine)
  3770. j = ;
  3771. while(j < iLen)
  3772. {
  3773. if(szCurLine[j] != " ")
  3774. break
  3775. j = j +
  3776. }
  3777.  
  3778. //以文件头说明中前有大于10个空格的为函数列表记录
  3779. if(j > )
  3780. {
  3781. DelBufLine(hbuf, ln)
  3782. }
  3783. else
  3784. {
  3785. break
  3786. }
  3787. iTotalLn = GetBufLineCount (hbuf)
  3788. }
  3789.  
  3790. //插入函数列表
  3791. InsertFileList( hbuf,hnewbuf,ln )
  3792. closebuf(hnewbuf)
  3793. }
  3794.  
  3795. /*****************************************************************************
  3796. 函 数 名 : InsertHistoryContentCN
  3797. 功能描述 : 插入历史修改记录中文说明
  3798. 输入参数 : hbuf
  3799. ln
  3800. iHostoryCount
  3801. 输出参数 : 无
  3802. 返 回 值 :
  3803. 调用函数 :
  3804. 被调函数 :
  3805.  
  3806. 修改历史 :
  3807. 1.日 期 : 2008年6月18日
  3808. 作 者 : 张强
  3809. 修改内容 : 新生成函数
  3810.  
  3811. *****************************************************************************/
  3812. macro InsertHistoryContentCN(hbuf,ln,iHostoryCount)
  3813. {
  3814. //获取时间
  3815. SysTime = GetSysTime();
  3816. szYear=SysTime.Year
  3817. szMonth=SysTime.month
  3818. if (szMonth < )
  3819. {
  3820. szMonth = "0@szMonth@"
  3821. }
  3822. szDay=SysTime.day
  3823. if (szDay < )
  3824. {
  3825. szDay = "0@szDay@"
  3826. }
  3827.  
  3828. //获取用户名
  3829. szMyName = getreg(MYNAME)
  3830. if(strlen( szMyName ) == )
  3831. {
  3832. szMyName = Ask("Enter your name:")
  3833. setreg(MYNAME, szMyName)
  3834. }
  3835.  
  3836. //获取光标所在位置的左侧的字符串,即得到"hi"字符串
  3837. hwnd = GetCurrentWnd()
  3838. if (hwnd == )
  3839. stop
  3840. sel = GetWndSel(hwnd)
  3841. szLine = GetBufLine (hbuf, sel.lnFirst)
  3842. wordinfo = GetWordLeftOfIch(sel.ichFirst, szLine)
  3843.  
  3844. //获取"hi"左侧的字符
  3845. strLeft = strmid (szLine, , wordinfo.ich)
  3846.  
  3847. //判断左侧的字符是否有" * 修改日志 :"
  3848. ret =strstr(strLeft, " * 修改日志 :")
  3849. if(ret != 0xffffffff) //修改日志的第一行,保留"修改日志"字符串
  3850. {
  3851. szTmp = strLeft
  3852. }
  3853. else //修改日志的其他行,前面补空格
  3854. {
  3855. szTmp = CreateBlankString()
  3856. }
  3857.  
  3858. //加上修改日期,修改人
  3859. szTmp = cat(szTmp,"@szYear@@szMonth@@szDay@ by @szMyName@, ")
  3860.  
  3861. szContent = Ask("请输入修改的内容")
  3862. CommentContent(hbuf,ln,szTmp,szContent,)
  3863.  
  3864. // SysTime = GetSysTime(1);
  3865. // szTime = SysTime.Date
  3866. // szMyName = getreg(MYNAME)
  3867. //
  3868. // InsBufLine(hbuf, ln, "")
  3869. // InsBufLine(hbuf, ln + 1, " @iHostoryCount@.日 期 : @szTime@")
  3870. //
  3871. // if( strlen(szMyName) > 0 )
  3872. // {
  3873. // InsBufLine(hbuf, ln + 2, " 作 者 : @szMyName@")
  3874. // }
  3875. // else
  3876. // {
  3877. // InsBufLine(hbuf, ln + 2, " 作 者 : #")
  3878. // }
  3879. // szContent = Ask("请输入修改的内容")
  3880. // CommentContent(hbuf,ln + 3," 修改内容 : ",szContent,0)
  3881. }
  3882.  
  3883. /*****************************************************************************
  3884. 函 数 名 : InsertHistoryContentEN
  3885. 功能描述 : 插入历史修改记录英文说明
  3886. 输入参数 : hbuf 当前buf
  3887. ln 当前行号
  3888. iHostoryCount 修改记录的编号
  3889. 输出参数 : 无
  3890. 返 回 值 :
  3891. 调用函数 :
  3892. 被调函数 :
  3893.  
  3894. 修改历史 :
  3895. 1.日 期 : 2008年6月18日
  3896. 作 者 : 张强
  3897. 修改内容 : 新生成函数
  3898.  
  3899. *****************************************************************************/
  3900. macro InsertHistoryContentEN(hbuf,ln,iHostoryCount)
  3901. {
  3902. SysTime = GetSysTime();
  3903. szTime = SysTime.Date
  3904. sz1=SysTime.Year
  3905. sz2=SysTime.month
  3906. sz3=SysTime.day
  3907. if (sz2 < )
  3908. {
  3909. szMonth = "0@sz2@"
  3910. }
  3911. else
  3912. {
  3913. szMonth = sz2
  3914. }
  3915. if (sz3 < )
  3916. {
  3917. szDay = "0@sz3@"
  3918. }
  3919. else
  3920. {
  3921. szDay = sz3
  3922. }
  3923. szMyName = getreg(MYNAME)
  3924. InsBufLine(hbuf, ln, "")
  3925. InsBufLine(hbuf, ln + , " @iHostoryCount@.Date : @sz1@@szMonth@@szDay@")
  3926.  
  3927. InsBufLine(hbuf, ln + , " Author : @szMyName@")
  3928. szContent = Ask("Please input modification")
  3929. CommentContent(hbuf,ln + ," Modification : ",szContent,)
  3930. }
  3931.  
  3932. /*****************************************************************************
  3933. 函 数 名 : CreateFunctionDef
  3934. 功能描述 : 生成C语言头文件
  3935. 输入参数 : hbuf
  3936. szName
  3937. language
  3938. 输出参数 : 无
  3939. 返 回 值 :
  3940. 调用函数 :
  3941. 被调函数 :
  3942.  
  3943. 修改历史 :
  3944. 1.日 期 : 2008年6月18日
  3945. 作 者 : 张强
  3946. 修改内容 : 新生成函数
  3947.  
  3948. *****************************************************************************/
  3949. macro CreateFunctionDef(hbuf, szName, language)
  3950. {
  3951. ln =
  3952.  
  3953. //获得当前没有后缀的文件名
  3954. szFileName = GetFileNameNoExt(GetBufName (hbuf))
  3955. if(strlen(szFileName) == )
  3956. {
  3957. sz = ask("请输入头文件名")
  3958. szFileName = GetFileNameNoExt(sz)
  3959. szExt = GetFileNameExt(szFileName)
  3960. szPreH = toupper (szFileName)
  3961. szPreH = cat("__",szPreH)
  3962. szExt = toupper(szExt)
  3963. szPreH = cat(szPreH,"_@szExt@__")
  3964. }
  3965. szPreH = toupper (szFileName)
  3966. sz = cat(szFileName,".h")
  3967. szPreH = cat("__",szPreH)
  3968. szPreH = cat(szPreH,"_H__")
  3969. hOutbuf = NewBuf(sz) // create output buffer
  3970. if (hOutbuf == )
  3971. stop
  3972. //搜索符号表取得函数名
  3973. SetCurrentBuf(hOutbuf)
  3974. isymMax = GetBufSymCount(hbuf)
  3975. isym =
  3976. while (isym < isymMax)
  3977. {
  3978. isLastLine =
  3979. symbol = GetBufSymLocation(hbuf, isym)
  3980. fIsEnd =
  3981. if(strlen(symbol) > )
  3982. {
  3983. if(symbol.Type == "Class Placeholder")
  3984. {
  3985. hsyml = SymbolChildren(symbol)
  3986. cchild = SymListCount(hsyml)
  3987. ichild =
  3988. szClassName = symbol.Symbol
  3989. InsBufLine(hOutbuf, ln, "}")
  3990. InsBufLine(hOutbuf, ln, "{")
  3991. InsBufLine(hOutbuf, ln, "class @szClassName@")
  3992. ln = ln +
  3993. while (ichild < cchild)
  3994. {
  3995. childsym = SymListItem(hsyml, ichild)
  3996. childsym.Symbol = szClassName
  3997. ln = CreateClassPrototype(hbuf,ln,childsym)
  3998. ichild = ichild +
  3999. }
  4000. SymListFree(hsyml)
  4001. InsBufLine(hOutbuf, ln + , "")
  4002. ln = ln +
  4003. }
  4004. else if( symbol.Type == "Function" )
  4005. {
  4006. ln = CreateFuncPrototype(hbuf,ln,"extern",symbol)
  4007. }
  4008. else if( symbol.Type == "Method" )
  4009. {
  4010. szLine = GetBufline(hbuf,symbol.lnName)
  4011. szClassName = GetLeftWord(szLine,symbol.ichName)
  4012. symbol.Symbol = szClassName
  4013. ln = CreateClassPrototype(hbuf,ln,symbol)
  4014. }
  4015.  
  4016. }
  4017. isym = isym +
  4018. }
  4019. InsertCPP(hOutbuf,)
  4020. HeadIfdefStr(szPreH)
  4021. szContent = GetFileName(GetBufName (hbuf))
  4022. if(language == )
  4023. {
  4024. szContent = cat(szContent," 的头文件")
  4025. //插入文件头说明
  4026. InsertFileHeaderCN(hOutbuf,,szName,szContent)
  4027. }
  4028. else
  4029. {
  4030. szContent = cat(szContent," header file")
  4031. //插入文件头说明
  4032. InsertFileHeaderEN(hOutbuf,,szName,szContent)
  4033. }
  4034. }
  4035.  
  4036. /*****************************************************************************
  4037. 函 数 名 : GetLeftWord
  4038. 功能描述 : 取得左边的单词
  4039. 输入参数 : szLine
  4040. ichRight 开始取词位置
  4041. 输出参数 : 无
  4042. 返 回 值 :
  4043. 调用函数 :
  4044. 被调函数 :
  4045.  
  4046. 修改历史 :
  4047. 1.日 期 : 2008年7月05日
  4048. 作 者 : 张强
  4049. 修改内容 : 新生成函数
  4050.  
  4051. *****************************************************************************/
  4052. macro GetLeftWord(szLine,ichRight)
  4053. {
  4054. if(ich == )
  4055. {
  4056. return ""
  4057. }
  4058. ich = ichRight
  4059. while(ich > )
  4060. {
  4061. if( (szLine[ich] == " ") || (szLine[ich] == "\t")
  4062. || ( szLine[ich] == ":") || (szLine[ich] == "."))
  4063.  
  4064. {
  4065. ich = ich -
  4066. ichRight = ich
  4067. }
  4068. else
  4069. {
  4070. break
  4071. }
  4072. }
  4073. while(ich > )
  4074. {
  4075. if(szLine[ich] == " ")
  4076. {
  4077. ich = ich +
  4078. break
  4079. }
  4080. ich = ich -
  4081. }
  4082. return strmid(szLine,ich,ichRight)
  4083. }
  4084. /*****************************************************************************
  4085. 函 数 名 : CreateClassPrototype
  4086. 功能描述 : 生成Class的定义
  4087. 输入参数 : hbuf 当前文件
  4088. hOutbuf 输出文件
  4089. ln 输出行号
  4090. symbol 符号
  4091. 输出参数 : 无
  4092. 返 回 值 :
  4093. 调用函数 :
  4094. 被调函数 :
  4095.  
  4096. 修改历史 :
  4097. 1.日 期 : 2008年7月05日
  4098. 作 者 : 张强
  4099. 修改内容 : 新生成函数
  4100.  
  4101. *****************************************************************************/
  4102. macro CreateClassPrototype(hbuf,ln,symbol)
  4103. {
  4104. isLastLine =
  4105. fIsEnd =
  4106. hOutbuf = GetCurrentBuf()
  4107. szLine = GetBufLine (hbuf, symbol.lnName)
  4108. sline = symbol.lnFirst
  4109. szClassName = symbol.Symbol
  4110. ret = strstr(szLine,szClassName)
  4111. if(ret == 0xffffffff)
  4112. {
  4113. return ln
  4114. }
  4115. szPre = strmid(szLine,,ret)
  4116. szLine = strmid(szLine,symbol.ichName,strlen(szLine))
  4117. szLine = cat(szPre,szLine)
  4118. //去掉注释的干扰
  4119. RetVal = SkipCommentFromString(szLine,fIsEnd)
  4120. fIsEnd = RetVal.fIsEnd
  4121. szNew = RetVal.szContent
  4122. szLine = cat(" ",szLine)
  4123. szNew = cat(" ",szNew)
  4124. while((isLastLine == ) && (sline < symbol.lnLim))
  4125. {
  4126. i =
  4127. j =
  4128. iLen = strlen(szNew)
  4129. while(i < iLen)
  4130. {
  4131. if(szNew[i]=="(")
  4132. {
  4133. j = j + ;
  4134. }
  4135. else if(szNew[i]==")")
  4136. {
  4137. j = j - ;
  4138. if(j <= )
  4139. {
  4140. //函数参数头结束
  4141. isLastLine =
  4142. //去掉最后多余的字符
  4143. szLine = strmid(szLine,,i+);
  4144. szLine = cat(szLine,";")
  4145. break
  4146. }
  4147. }
  4148. i = i +
  4149. }
  4150. InsBufLine(hOutbuf, ln, "@szLine@")
  4151. ln = ln +
  4152. sline = sline +
  4153. if(isLastLine != )
  4154. {
  4155. //函数参数头还没有结束再取一行
  4156. szLine = GetBufLine (hbuf, sline)
  4157. //去掉注释的干扰
  4158. RetVal = SkipCommentFromString(szLine,fIsEnd)
  4159. szNew = RetVal.szContent
  4160. fIsEnd = RetVal.fIsEnd
  4161. }
  4162. }
  4163. return ln
  4164. }
  4165.  
  4166. /*****************************************************************************
  4167. 函 数 名 : CreateFuncPrototype
  4168. 功能描述 : 生成C函数原型定义
  4169. 输入参数 : hbuf 当前文件
  4170. hOutbuf 输出文件
  4171. ln 输出行号
  4172. szType 原型类型
  4173. symbol 符号
  4174. 输出参数 : 无
  4175. 返 回 值 :
  4176. 调用函数 :
  4177. 被调函数 :
  4178.  
  4179. 修改历史 :
  4180. 1.日 期 : 2008年7月05日
  4181. 作 者 : 张强
  4182. 修改内容 : 新生成函数
  4183.  
  4184. *****************************************************************************/
  4185. macro CreateFuncPrototype(hbuf,ln,szType,symbol)
  4186. {
  4187. isLastLine =
  4188. hOutbuf = GetCurrentBuf()
  4189. szLine = GetBufLine (hbuf,symbol.lnName)
  4190. //去掉注释的干扰
  4191. RetVal = SkipCommentFromString(szLine,fIsEnd)
  4192. szNew = RetVal.szContent
  4193. fIsEnd = RetVal.fIsEnd
  4194. szLine = cat("@szType@ ",szLine)
  4195. szNew = cat("@szType@ ",szNew)
  4196. sline = symbol.lnFirst
  4197. while((isLastLine == ) && (sline < symbol.lnLim))
  4198. {
  4199. i =
  4200. j =
  4201. iLen = strlen(szNew)
  4202. while(i < iLen)
  4203. {
  4204. if(szNew[i]=="(")
  4205. {
  4206. j = j + ;
  4207. }
  4208. else if(szNew[i]==")")
  4209. {
  4210. j = j - ;
  4211. if(j <= )
  4212. {
  4213. //函数参数头结束
  4214. isLastLine =
  4215. //去掉最后多余的字符
  4216. szLine = strmid(szLine,,i+);
  4217. szLine = cat(szLine,";")
  4218. break
  4219. }
  4220. }
  4221. i = i +
  4222. }
  4223. InsBufLine(hOutbuf, ln, "@szLine@")
  4224. ln = ln +
  4225. sline = sline +
  4226. if(isLastLine != )
  4227. {
  4228. //函数参数头还没有结束再取一行
  4229. szLine = GetBufLine (hbuf, sline)
  4230. szLine = cat(" ",szLine)
  4231. //去掉注释的干扰
  4232. RetVal = SkipCommentFromString(szLine,fIsEnd)
  4233. szNew = RetVal.szContent
  4234. fIsEnd = RetVal.fIsEnd
  4235. }
  4236. }
  4237. return ln
  4238. }
  4239.  
  4240. /*****************************************************************************
  4241. 函 数 名 : CreateNewHeaderFile
  4242. 功能描述 : 生成一个新的头文件,文件名可输入
  4243. 输出参数 : 无
  4244. 返 回 值 :
  4245. 调用函数 :
  4246. 被调函数 :
  4247.  
  4248. 修改历史 :
  4249. 1.日 期 : 2008年6月24日
  4250. 作 者 : 张强
  4251. 修改内容 : 新生成函数
  4252.  
  4253. *****************************************************************************/
  4254. macro CreateNewHeaderFile()
  4255. {
  4256. hbuf = GetCurrentBuf()
  4257. language = getreg(LANGUAGE)
  4258. if(language != )
  4259. {
  4260. language =
  4261. }
  4262. szName = getreg(MYNAME)
  4263. if(strlen( szName ) == )
  4264. {
  4265. szMyName = Ask("Enter your name:")
  4266. setreg(MYNAME, szMyName)
  4267. }
  4268. isymMax = GetBufSymCount(hbuf)
  4269. isym =
  4270. ln =
  4271. //获得当前没有后缀的文件名
  4272. sz = ask("Please input header file name")
  4273. szFileName = GetFileNameNoExt(sz)
  4274. szExt = GetFileNameExt(sz)
  4275. szPreH = toupper (szFileName)
  4276. szPreH = cat("__",szPreH)
  4277. szExt = toupper(szExt)
  4278. szPreH = cat(szPreH,"_@szExt@__")
  4279. hOutbuf = NewBuf(sz) // create output buffer
  4280. if (hOutbuf == )
  4281. stop
  4282.  
  4283. SetCurrentBuf(hOutbuf)
  4284. InsertCPP(hOutbuf,)
  4285. HeadIfdefStr(szPreH)
  4286. szContent = GetFileName(GetBufName (hbuf))
  4287. if(language == )
  4288. {
  4289. szContent = cat(szContent," 的头文件")
  4290.  
  4291. //插入文件头说明
  4292. InsertFileHeaderCN(hOutbuf,,szName,szContent)
  4293. }
  4294. else
  4295. {
  4296. szContent = cat(szContent," header file")
  4297.  
  4298. //插入文件头说明
  4299. InsertFileHeaderEN(hOutbuf,,szName,szContent)
  4300. }
  4301.  
  4302. lnMax = GetBufLineCount(hOutbuf)
  4303. if(lnMax > )
  4304. {
  4305. ln = lnMax -
  4306. }
  4307. else
  4308. {
  4309. return
  4310. }
  4311. hwnd = GetCurrentWnd()
  4312. if (hwnd == )
  4313. stop
  4314. sel = GetWndSel(hwnd)
  4315. sel.lnFirst = ln
  4316. sel.ichFirst =
  4317. sel.ichLim =
  4318. SetBufIns(hOutbuf,ln,)
  4319. szType = Ask ("Please prototype type : extern or static")
  4320. //搜索符号表取得函数名
  4321. while (isym < isymMax)
  4322. {
  4323. isLastLine =
  4324. symbol = GetBufSymLocation(hbuf, isym)
  4325. fIsEnd =
  4326. if(strlen(symbol) > )
  4327. {
  4328. if(symbol.Type == "Class Placeholder")
  4329. {
  4330. hsyml = SymbolChildren(symbol)
  4331. cchild = SymListCount(hsyml)
  4332. ichild =
  4333. szClassName = symbol.Symbol
  4334. InsBufLine(hOutbuf, ln, "}")
  4335. InsBufLine(hOutbuf, ln, "{")
  4336. InsBufLine(hOutbuf, ln, "class @szClassName@")
  4337. ln = ln +
  4338. while (ichild < cchild)
  4339. {
  4340. childsym = SymListItem(hsyml, ichild)
  4341. childsym.Symbol = szClassName
  4342. ln = CreateClassPrototype(hbuf,ln,childsym)
  4343. ichild = ichild +
  4344. }
  4345. SymListFree(hsyml)
  4346. InsBufLine(hOutbuf, ln + , "")
  4347. ln = ln +
  4348. }
  4349. else if( symbol.Type == "Function" )
  4350. {
  4351. ln = CreateFuncPrototype(hbuf,ln,szType,symbol)
  4352. }
  4353. else if( symbol.Type == "Method" )
  4354. {
  4355. szLine = GetBufline(hbuf,symbol.lnName)
  4356. szClassName = GetLeftWord(szLine,symbol.ichName)
  4357. symbol.Symbol = szClassName
  4358. ln = CreateClassPrototype(hbuf,ln,symbol)
  4359. }
  4360. }
  4361. isym = isym +
  4362. }
  4363. sel.lnLast = ln
  4364. SetWndSel(hwnd,sel)
  4365. }
  4366.  
  4367. /* G E T W O R D L E F T O F I C H */
  4368. /*-------------------------------------------------------------------------
  4369. Given an index to a character (ich) and a string (sz),
  4370. return a "wordinfo" record variable that describes the
  4371. text word just to the left of the ich.
  4372.  
  4373. Output:
  4374. wordinfo.szWord = the word string
  4375. wordinfo.ich = the first ich of the word
  4376. wordinfo.ichLim = the limit ich of the word
  4377. -------------------------------------------------------------------------*/
  4378. macro GetWordLeftOfIch(ich, sz)
  4379. {
  4380. wordinfo = "" // create a "wordinfo" structure
  4381.  
  4382. chTab = CharFromAscii()
  4383.  
  4384. // scan backwords over white space, if any
  4385. ich = ich - ;
  4386. if (ich >= )
  4387. while (sz[ich] == " " || sz[ich] == chTab)
  4388. {
  4389. ich = ich - ;
  4390. if (ich < )
  4391. break;
  4392. }
  4393.  
  4394. // scan backwords to start of word
  4395. ichLim = ich + ;
  4396. asciiA = AsciiFromChar("A")
  4397. asciiZ = AsciiFromChar("Z")
  4398. while (ich >= )
  4399. {
  4400. ch = toupper(sz[ich])
  4401. asciiCh = AsciiFromChar(ch)
  4402.  
  4403. /* if ((asciiCh < asciiA || asciiCh > asciiZ)
  4404. && !IsNumber(ch)
  4405. && (ch != "#") )
  4406. break // stop at first non-identifier character
  4407. */
  4408. //只提取字符和# { / *作为命令
  4409. if ((asciiCh < asciiA || asciiCh > asciiZ)
  4410. && !IsNumber(ch)
  4411. && ( ch != "#" && ch != "{" && ch != "/" && ch != "*"))
  4412. break;
  4413.  
  4414. ich = ich - ;
  4415. }
  4416.  
  4417. ich = ich +
  4418. wordinfo.szWord = strmid(sz, ich, ichLim)
  4419. wordinfo.ich = ich
  4420. wordinfo.ichLim = ichLim;
  4421.  
  4422. return wordinfo
  4423. }
  4424.  
  4425. /*****************************************************************************
  4426. 函 数 名 : ReplaceBufTab
  4427. 功能描述 : 替换tab为空格
  4428. 输出参数 : 无
  4429. 返 回 值 :
  4430. 调用函数 :
  4431. 被调函数 :
  4432.  
  4433. 修改历史 :
  4434. 1.日 期 : 2008年6月18日
  4435. 作 者 : 张强
  4436. 修改内容 : 新生成函数
  4437.  
  4438. *****************************************************************************/
  4439. macro ReplaceBufTab()
  4440. {
  4441. hwnd = GetCurrentWnd()
  4442. if (hwnd == )
  4443. stop
  4444. hbuf = GetWndBuf(hwnd)
  4445. iTotalLn = GetBufLineCount (hbuf)
  4446. nBlank = Ask("一个Tab替换几个空格")
  4447. if(nBlank == )
  4448. {
  4449. nBlank =
  4450. }
  4451. szBlank = CreateBlankString(nBlank)
  4452. ReplaceInBuf(hbuf,"\t",szBlank,, iTotalLn, , , , )
  4453. }
  4454.  
  4455. /*****************************************************************************
  4456. 函 数 名 : ReplaceTabInProj
  4457. 功能描述 : 在整个工程内替换tab为空格
  4458. 输出参数 : 无
  4459. 返 回 值 :
  4460. 调用函数 :
  4461. 被调函数 :
  4462.  
  4463. 修改历史 :
  4464. 1.日 期 : 2008年6月18日
  4465. 作 者 : 张强
  4466. 修改内容 : 新生成函数
  4467.  
  4468. *****************************************************************************/
  4469. macro ReplaceTabInProj()
  4470. {
  4471. hprj = GetCurrentProj()
  4472. ifileMax = GetProjFileCount (hprj)
  4473. nBlank = Ask("一个Tab替换几个空格")
  4474. if(nBlank == )
  4475. {
  4476. nBlank =
  4477. }
  4478. szBlank = CreateBlankString(nBlank)
  4479.  
  4480. ifile =
  4481. while (ifile < ifileMax)
  4482. {
  4483. filename = GetProjFileName (hprj, ifile)
  4484. hbuf = OpenBuf (filename)
  4485. if(hbuf != )
  4486. {
  4487. iTotalLn = GetBufLineCount (hbuf)
  4488. ReplaceInBuf(hbuf,"\t",szBlank,, iTotalLn, , , , )
  4489. }
  4490. if( IsBufDirty (hbuf) )
  4491. {
  4492. SaveBuf (hbuf)
  4493. }
  4494. CloseBuf(hbuf)
  4495. ifile = ifile +
  4496. }
  4497. }
  4498.  
  4499. /*****************************************************************************
  4500. 函 数 名 : ReplaceInBuf
  4501. 功能描述 : 替换tab为空格,只在2.1中有效
  4502. 输入参数 : hbuf
  4503. chOld
  4504. chNew
  4505. nBeg
  4506. nEnd
  4507. fMatchCase
  4508. fRegExp
  4509. fWholeWordsOnly
  4510. fConfirm
  4511. 输出参数 : 无
  4512. 返 回 值 :
  4513. 调用函数 :
  4514. 被调函数 :
  4515.  
  4516. 修改历史 :
  4517. 1.日 期 : 2008年6月18日
  4518. 作 者 : 张强
  4519. 修改内容 : 新生成函数
  4520.  
  4521. *****************************************************************************/
  4522. macro ReplaceInBuf(hbuf,chOld,chNew,nBeg,nEnd,fMatchCase, fRegExp, fWholeWordsOnly, fConfirm)
  4523. {
  4524. hwnd = GetCurrentWnd()
  4525. if (hwnd == )
  4526. stop
  4527. hbuf = GetWndBuf(hwnd)
  4528. sel = GetWndSel(hwnd)
  4529. sel.ichLim =
  4530. sel.lnLast =
  4531. sel.ichFirst = sel.ichLim
  4532. sel.lnFirst = sel.lnLast
  4533. SetWndSel(hwnd, sel)
  4534. LoadSearchPattern(chOld, , , );
  4535. while()
  4536. {
  4537. Search_Forward
  4538. selNew = GetWndSel(hwnd)
  4539. if(sel == selNew)
  4540. {
  4541. break
  4542. }
  4543. SetBufSelText(hbuf, chNew)
  4544. selNew.ichLim = selNew.ichFirst
  4545. SetWndSel(hwnd, selNew)
  4546. sel = selNew
  4547. }
  4548. }
  4549.  
  4550. /*****************************************************************************
  4551. 函 数 名 : ConfigureSystem
  4552. 功能描述 : 配置系统
  4553. 输入参数 : 无
  4554. 输出参数 : 无
  4555. 返 回 值 :
  4556. 调用函数 :
  4557. 被调函数 :
  4558.  
  4559. 修改历史 :
  4560. 1.日 期 : 2008年6月18日
  4561. 作 者 : 张强
  4562. 修改内容 : 新生成函数
  4563.  
  4564. *****************************************************************************/
  4565. macro ConfigureSystem()
  4566. {
  4567. szLanguage = ASK("Please select language: 0 Chinese ,1 English");
  4568. if(szLanguage == "#")
  4569. {
  4570. SetReg ("LANGUAGE", "")
  4571. }
  4572. else
  4573. {
  4574. SetReg ("LANGUAGE", szLanguage)
  4575. }
  4576.  
  4577. szName = ASK("Please input your name");
  4578. if(szName == "#")
  4579. {
  4580. SetReg ("MYNAME", "")
  4581. }
  4582. else
  4583. {
  4584. SetReg ("MYNAME", szName)
  4585. }
  4586. }
  4587.  
  4588. /*****************************************************************************
  4589. 函 数 名 : GetLeftBlank
  4590. 功能描述 : 得到字符串左边的空格字符数
  4591. 输入参数 : szLine
  4592. 输出参数 : 无
  4593. 返 回 值 :
  4594. 调用函数 :
  4595. 被调函数 :
  4596.  
  4597. 修改历史 :
  4598. 1.日 期 : 2008年6月18日
  4599. 作 者 : 张强
  4600. 修改内容 : 新生成函数
  4601.  
  4602. *****************************************************************************/
  4603. macro GetLeftBlank(szLine)
  4604. {
  4605. nIdx =
  4606. nEndIdx = strlen(szLine)
  4607. while( nIdx < nEndIdx )
  4608. {
  4609. if( (szLine[nIdx] !=" ") && (szLine[nIdx] !="\t") )
  4610. {
  4611. break;
  4612. }
  4613. nIdx = nIdx +
  4614. }
  4615. return nIdx
  4616. }
  4617.  
  4618. /*****************************************************************************
  4619. 函 数 名 : ExpandBraceLittle
  4620. 功能描述 : 小括号扩展
  4621. 输出参数 : 无
  4622. 返 回 值 :
  4623. 调用函数 :
  4624. 被调函数 :
  4625.  
  4626. 修改历史 :
  4627. 1.日 期 : 2008年6月18日
  4628. 作 者 : 张强
  4629. 修改内容 : 新生成函数
  4630.  
  4631. *****************************************************************************/
  4632. macro ExpandBraceLittle()
  4633. {
  4634. hwnd = GetCurrentWnd()
  4635. sel = GetWndSel(hwnd)
  4636. hbuf = GetCurrentBuf()
  4637. if( (sel.lnFirst == sel.lnLast)
  4638. && (sel.ichFirst == sel.ichLim) )
  4639. {
  4640. SetBufSelText (hbuf, "( )")
  4641. SetBufIns (hbuf, sel.lnFirst, sel.ichFirst + )
  4642. }
  4643. else
  4644. {
  4645. SetBufIns (hbuf, sel.lnFirst, sel.ichFirst)
  4646. SetBufSelText (hbuf, "( ")
  4647. SetBufIns (hbuf, sel.lnLast, sel.ichLim + )
  4648. SetBufSelText (hbuf, " )")
  4649. }
  4650.  
  4651. }
  4652.  
  4653. /*****************************************************************************
  4654. 函 数 名 : ExpandBraceMid
  4655. 功能描述 : 中括号扩展
  4656. 输出参数 : 无
  4657. 返 回 值 :
  4658. 调用函数 :
  4659. 被调函数 :
  4660.  
  4661. 修改历史 :
  4662. 1.日 期 : 2008年6月18日
  4663. 作 者 : 张强
  4664. 修改内容 : 新生成函数
  4665.  
  4666. *****************************************************************************/
  4667. macro ExpandBraceMid()
  4668. {
  4669. hwnd = GetCurrentWnd()
  4670. sel = GetWndSel(hwnd)
  4671. hbuf = GetCurrentBuf()
  4672. if( (sel.lnFirst == sel.lnLast)
  4673. && (sel.ichFirst == sel.ichLim) )
  4674. {
  4675. SetBufSelText (hbuf, "[]")
  4676. SetBufIns (hbuf, sel.lnFirst, sel.ichFirst + )
  4677. }
  4678. else
  4679. {
  4680. SetBufIns (hbuf, sel.lnFirst, sel.ichFirst)
  4681. SetBufSelText (hbuf, "[")
  4682. SetBufIns (hbuf, sel.lnLast, sel.ichLim + )
  4683. SetBufSelText (hbuf, "]")
  4684. }
  4685.  
  4686. }
  4687.  
  4688. /*****************************************************************************
  4689. 函 数 名 : ExpandBraceLarge
  4690. 功能描述 : 大括号扩展
  4691. 输出参数 : 无
  4692. 返 回 值 :
  4693. 调用函数 :
  4694. 被调函数 :
  4695.  
  4696. 修改历史 :
  4697. 1.日 期 : 2008年6月18日
  4698. 作 者 : 张强
  4699. 修改内容 : 新生成函数
  4700.  
  4701. *****************************************************************************/
  4702. macro ExpandBraceLarge()
  4703. {
  4704. hwnd = GetCurrentWnd()
  4705. sel = GetWndSel(hwnd)
  4706. hbuf = GetCurrentBuf()
  4707. ln = sel.lnFirst
  4708. nlineCount =
  4709. retVal = ""
  4710. szLine = GetBufLine( hbuf, ln )
  4711. nLeft = GetLeftBlank(szLine)
  4712. szLeft = strmid(szLine,,nLeft);
  4713. szRight = ""
  4714. szMid = ""
  4715. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  4716. {
  4717. //对于没有块选择的情况,直接插入{}即可
  4718. if( nLeft == strlen(szLine) )
  4719. {
  4720. SetBufSelText (hbuf, "{")
  4721. }
  4722. else
  4723. {
  4724. ln = ln +
  4725. InsBufLine(hbuf, ln, "@szLeft@{")
  4726. nlineCount = nlineCount +
  4727.  
  4728. }
  4729. InsBufLine(hbuf, ln + , "@szLeft@ ")
  4730. InsBufLine(hbuf, ln + , "@szLeft@}")
  4731. nlineCount = nlineCount +
  4732. SetBufIns (hbuf, ln + , strlen(szLeft)+)
  4733. }
  4734. else
  4735. {
  4736. //对于有块选择的情况还得考虑将块选择区分开了
  4737.  
  4738. //检查选择区内是否大括号配对,如果嫌太慢则注释掉下面的判断
  4739. RetVal= CheckBlockBrace(hbuf)
  4740. if(RetVal.iCount != )
  4741. {
  4742. msg("Invalidated brace number")
  4743. stop
  4744. }
  4745.  
  4746. //取出选中区前的内容
  4747. szOld = strmid(szLine,,sel.ichFirst)
  4748. if(sel.lnFirst != sel.lnLast)
  4749. {
  4750. //对于多行的情况
  4751.  
  4752. //第一行的选中部分
  4753. szMid = strmid(szLine,sel.ichFirst,strlen(szLine))
  4754. szMid = TrimString(szMid)
  4755. szLast = GetBufLine(hbuf,sel.lnLast)
  4756. if( sel.ichLim > strlen(szLast) )
  4757. {
  4758. //如果选择区长度大于改行的长度,最大取该行的长度
  4759. szLineselichLim = strlen(szLast)
  4760. }
  4761. else
  4762. {
  4763. szLineselichLim = sel.ichLim
  4764. }
  4765.  
  4766. //得到最后一行选择区为的字符
  4767. szRight = strmid(szLast,szLineselichLim,strlen(szLast))
  4768. szRight = TrimString(szRight)
  4769. }
  4770. else
  4771. {
  4772. //对于选择只有一行的情况
  4773. if(sel.ichLim >= strlen(szLine))
  4774. {
  4775. sel.ichLim = strlen(szLine)
  4776. }
  4777.  
  4778. //获得选中区的内容
  4779. szMid = strmid(szLine,sel.ichFirst,sel.ichLim)
  4780. szMid = TrimString(szMid)
  4781. if( sel.ichLim > strlen(szLine) )
  4782. {
  4783. szLineselichLim = strlen(szLine)
  4784. }
  4785. else
  4786. {
  4787. szLineselichLim = sel.ichLim
  4788. }
  4789.  
  4790. //同样得到选中区后的内容
  4791. szRight = strmid(szLine,szLineselichLim,strlen(szLine))
  4792. szRight = TrimString(szRight)
  4793. }
  4794. nIdx = sel.lnFirst
  4795. while( nIdx < sel.lnLast)
  4796. {
  4797. szCurLine = GetBufLine(hbuf,nIdx+)
  4798. if( sel.ichLim > strlen(szCurLine) )
  4799. {
  4800. szLineselichLim = strlen(szCurLine)
  4801. }
  4802. else
  4803. {
  4804. szLineselichLim = sel.ichLim
  4805. }
  4806. szCurLine = cat(" ",szCurLine)
  4807. if(nIdx == sel.lnLast - )
  4808. {
  4809. //对于最后一行应该是选中区内的内容后移四位
  4810. szCurLine = strmid(szCurLine,,szLineselichLim + )
  4811. PutBufLine(hbuf,nIdx+,szCurLine)
  4812. }
  4813. else
  4814. {
  4815. //其它情况是整行的内容后移四位
  4816. PutBufLine(hbuf,nIdx+,szCurLine)
  4817. }
  4818. nIdx = nIdx +
  4819. }
  4820. if(strlen(szRight) != )
  4821. {
  4822. //最后插入最后一行没有被选择的内容
  4823. InsBufLine(hbuf, sel.lnLast + , "@szLeft@@szRight@")
  4824. }
  4825. InsBufLine(hbuf, sel.lnLast + , "@szLeft@}")
  4826. nlineCount = nlineCount +
  4827. if(nLeft < sel.ichFirst)
  4828. {
  4829. //如果选中区前的内容不是空格,则要保留该部分内容
  4830. PutBufLine(hbuf,ln,szOld)
  4831. InsBufLine(hbuf, ln+, "@szLeft@{")
  4832. nlineCount = nlineCount +
  4833. ln = ln +
  4834. }
  4835. else
  4836. {
  4837. //如果选中区前没有内容直接删除该行
  4838. DelBufLine(hbuf,ln)
  4839. InsBufLine(hbuf, ln, "@szLeft@{")
  4840. }
  4841. if(strlen(szMid) > )
  4842. {
  4843. //插入第一行选择区的内容
  4844. InsBufLine(hbuf, ln+, "@szLeft@ @szMid@")
  4845. nlineCount = nlineCount +
  4846. ln = ln +
  4847. }
  4848. }
  4849. retVal.szLeft = szLeft
  4850. retVal.nLineCount = nlineCount
  4851. //返回行数和左边的空白
  4852. return retVal
  4853. }
  4854.  
  4855. /*
  4856. macro ScanStatement(szLine,iBeg)
  4857. {
  4858. nIdx = 0
  4859. iLen = strlen(szLine)
  4860. while(nIdx < iLen -1)
  4861. {
  4862. if(szLine[nIdx] == "/" && szLine[nIdx + 1] == "/")
  4863. {
  4864. return 0xffffffff
  4865. }
  4866. if(szLine[nIdx] == "/" && szLine[nIdx + 1] == "*")
  4867. {
  4868. while(nIdx < iLen)
  4869. {
  4870. if(szLine[nIdx] == "*" && szLine[nIdx + 1] == "/")
  4871. {
  4872. break
  4873. }
  4874. nIdx = nIdx + 1
  4875.  
  4876. }
  4877. }
  4878. if( (szLine[nIdx] != " ") && (szLine[nIdx] != "\t" ))
  4879. {
  4880. return nIdx
  4881. }
  4882. nIdx = nIdx + 1
  4883. }
  4884. if( (szLine[iLen -1] == " ") || (szLine[iLen -1] == "\t" ))
  4885. {
  4886. return 0xffffffff
  4887. }
  4888. return nIdx
  4889. }
  4890. */
  4891. /*
  4892. macro MoveCommentLeftBlank(szLine)
  4893. {
  4894. nIdx = 0
  4895. iLen = strlen(szLine)
  4896. while(nIdx < iLen - 1)
  4897. {
  4898. if(szLine[nIdx] == "/" && szLine[nIdx+1] == "*")
  4899. {
  4900. szLine[nIdx] = " "
  4901. szLine[nIdx + 1] = " "
  4902. nIdx = nIdx + 2
  4903. while(nIdx < iLen - 1)
  4904. {
  4905. if(szLine[nIdx] != " " && szLine[nIdx] != "\t")
  4906. {
  4907. szLine[nIdx - 2] = "/"
  4908. szLine[nIdx - 1] = "*"
  4909. return szLine
  4910. }
  4911. nIdx = nIdx + 1
  4912. }
  4913.  
  4914. }
  4915. if(szLine[nIdx] == "/" && szLine[nIdx+1] == "/")
  4916. {
  4917. szLine[nIdx] = " "
  4918. szLine[nIdx + 1] = " "
  4919. nIdx = nIdx + 2
  4920. while(nIdx < iLen - 1)
  4921. {
  4922. if(szLine[nIdx] != " " && szLine[nIdx] != "\t")
  4923. {
  4924. szLine[nIdx - 2] = "/"
  4925. szLine[nIdx - 1] = "/"
  4926. return szLine
  4927. }
  4928. nIdx = nIdx + 1
  4929. }
  4930.  
  4931. }
  4932. nIdx = nIdx + 1
  4933. }
  4934. return szLine
  4935. }*/
  4936.  
  4937. /*****************************************************************************
  4938. 函 数 名 : DelCompoundStatement
  4939. 功能描述 : 删除一个复合语句
  4940. 输出参数 : 无
  4941. 返 回 值 :
  4942. 调用函数 :
  4943. 被调函数 :
  4944.  
  4945. 修改历史 :
  4946. 1.日 期 : 2008年6月19日
  4947. 作 者 : 张强
  4948. 修改内容 : 新生成函数
  4949.  
  4950. *****************************************************************************/
  4951. macro DelCompoundStatement()
  4952. {
  4953. hwnd = GetCurrentWnd()
  4954. sel = GetWndSel(hwnd)
  4955. hbuf = GetCurrentBuf()
  4956. ln = sel.lnFirst
  4957. szLine = GetBufLine(hbuf,ln )
  4958. nLeft = GetLeftBlank(szLine)
  4959. szLeft = strmid(szLine,,nLeft);
  4960. Msg("@szLine@ will be deleted !")
  4961. fIsEnd =
  4962. while()
  4963. {
  4964. RetVal = SkipCommentFromString(szLine,fIsEnd)
  4965. szTmp = RetVal.szContent
  4966. fIsEnd = RetVal.fIsEnd
  4967. //查找复合语句的开始
  4968. ret = strstr(szTmp,"{")
  4969. if(ret != 0xffffffff)
  4970. {
  4971. szNewLine = strmid(szLine,ret+,strlen(szLine))
  4972. szNew = strmid(szTmp,ret+,strlen(szTmp))
  4973. szNew = TrimString(szNew)
  4974. if(szNew != "")
  4975. {
  4976. InsBufLine(hbuf,ln + ,"@szLeft@ @szNewLine@");
  4977. }
  4978. sel.lnFirst = ln
  4979. sel.lnLast = ln
  4980. sel.ichFirst = ret
  4981. sel.ichLim = ret
  4982. //查找对应的大括号
  4983.  
  4984. //使用自己编写的代码速度太慢
  4985. retTmp = SearchCompoundEnd(hbuf,ln,ret)
  4986. if(retTmp.iCount == )
  4987. {
  4988.  
  4989. DelBufLine(hbuf,retTmp.ln)
  4990. sel.ichFirst =
  4991. sel.ichLim =
  4992. DelBufLine(hbuf,ln)
  4993. sel.lnLast = retTmp.ln -
  4994. SetWndSel(hwnd,sel)
  4995. Indent_Left
  4996. }
  4997.  
  4998. //使用Si的大括号配对方法,但V2.1时在注释嵌套时可能有误
  4999. /* SetWndSel(hwnd,sel)
  5000. Block_Down
  5001. selNew = GetWndSel(hwnd)
  5002. if(selNew != sel)
  5003. {
  5004.  
  5005. DelBufLine(hbuf,selNew.lnFirst)
  5006. sel.ichFirst = 0
  5007. sel.ichLim = 0
  5008. DelBufLine(hbuf,ln)
  5009. sel.lnLast = selNew.lnFirst - 1
  5010. SetWndSel(hwnd,sel)
  5011. Indent_Left
  5012. }*/
  5013. break
  5014. }
  5015. szTmp = TrimString(szTmp)
  5016. iLen = strlen(szTmp)
  5017. if(iLen != )
  5018. {
  5019. if(szTmp[iLen-] == ";")
  5020. {
  5021. break
  5022. }
  5023. }
  5024. DelBufLine(hbuf,ln)
  5025. if( ln == GetBufLineCount(hbuf ))
  5026. {
  5027. break
  5028. }
  5029. szLine = GetBufLine(hbuf,ln)
  5030. }
  5031. }
  5032.  
  5033. /*****************************************************************************
  5034. 函 数 名 : CheckBlockBrace
  5035. 功能描述 : 检测定义块中的大括号配对情况
  5036. 输入参数 : hbuf
  5037. 输出参数 : 无
  5038. 返 回 值 :
  5039. 调用函数 :
  5040. 被调函数 :
  5041.  
  5042. 修改历史 :
  5043. 1.日 期 : 2008年6月19日
  5044. 作 者 : 张强
  5045. 修改内容 : 新生成函数
  5046.  
  5047. *****************************************************************************/
  5048. macro CheckBlockBrace(hbuf)
  5049. {
  5050. hwnd = GetCurrentWnd()
  5051. sel = GetWndSel(hwnd)
  5052. ln = sel.lnFirst
  5053. nCount =
  5054. RetVal = ""
  5055. szLine = GetBufLine( hbuf, ln )
  5056. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5057. {
  5058. RetVal.iCount =
  5059. RetVal.ich = sel.ichFirst
  5060. return RetVal
  5061. }
  5062. if(sel.lnFirst == sel.lnLast && sel.ichFirst != sel.ichLim)
  5063. {
  5064. RetTmp = SkipCommentFromString(szLine,fIsEnd)
  5065. szTmp = RetTmp.szContent
  5066. RetVal = CheckBrace(szTmp,sel.ichFirst,sel.ichLim,"{","}",,)
  5067. return RetVal
  5068. }
  5069. if(sel.lnFirst != sel.lnLast)
  5070. {
  5071. fIsEnd =
  5072. while(ln <= sel.lnLast)
  5073. {
  5074. if(ln == sel.lnFirst)
  5075. {
  5076. RetVal = CheckBrace(szLine,sel.ichFirst,strlen(szLine)-,"{","}",nCount,fIsEnd)
  5077. }
  5078. else if(ln == sel.lnLast)
  5079. {
  5080. RetVal = CheckBrace(szLine,,sel.ichLim,"{","}",nCount,fIsEnd)
  5081. }
  5082. else
  5083. {
  5084. RetVal = CheckBrace(szLine,,strlen(szLine)-,"{","}",nCount,fIsEnd)
  5085. }
  5086. fIsEnd = RetVal.fIsEnd
  5087. ln = ln +
  5088. nCount = RetVal.iCount
  5089. szLine = GetBufLine( hbuf, ln )
  5090. }
  5091. }
  5092. return RetVal
  5093. }
  5094.  
  5095. /*****************************************************************************
  5096. 函 数 名 : SearchCompoundEnd
  5097. 功能描述 : 查找一个复合语句的结束点
  5098. 输入参数 : hbuf
  5099. ln 查询起始行
  5100. ichBeg 查询起始点
  5101. 输出参数 : 无
  5102. 返 回 值 :
  5103. 调用函数 :
  5104. 被调函数 :
  5105.  
  5106. 修改历史 :
  5107. 1.日 期 : 2008年6月19日
  5108. 作 者 : 张强
  5109. 修改内容 : 新生成函数
  5110.  
  5111. *****************************************************************************/
  5112. macro SearchCompoundEnd(hbuf,ln,ichBeg)
  5113. {
  5114. hwnd = GetCurrentWnd()
  5115. sel = GetWndSel(hwnd)
  5116. ln = sel.lnFirst
  5117. nCount =
  5118. SearchVal = ""
  5119. // szLine = GetBufLine( hbuf, ln )
  5120. lnMax = GetBufLineCount(hbuf)
  5121. fIsEnd =
  5122. while(ln < lnMax)
  5123. {
  5124. szLine = GetBufLine( hbuf, ln )
  5125. RetVal = CheckBrace(szLine,ichBeg,strlen(szLine)-,"{","}",nCount,fIsEnd)
  5126. fIsEnd = RetVal.fIsEnd
  5127. ichBeg =
  5128. nCount = RetVal.iCount
  5129.  
  5130. //如果nCount=0则说明{}是配对的
  5131. if(nCount == )
  5132. {
  5133. break
  5134. }
  5135. ln = ln +
  5136. // szLine = GetBufLine( hbuf, ln )
  5137. }
  5138. SearchVal.iCount = RetVal.iCount
  5139. SearchVal.ich = RetVal.ich
  5140. SearchVal.ln = ln
  5141. return SearchVal
  5142. }
  5143.  
  5144. /*****************************************************************************
  5145. 函 数 名 : CheckBrace
  5146. 功能描述 : 检测括号的配对情况
  5147. 输入参数 : szLine 输入字符串
  5148. ichBeg 检测起始
  5149. ichEnd 检测结束
  5150. chBeg 开始字符(左括号)
  5151. chEnd 结束字符(右括号)
  5152. nCheckCount
  5153. 输出参数 : 无
  5154. 返 回 值 :
  5155. 调用函数 :
  5156. 被调函数 :
  5157.  
  5158. 修改历史 :
  5159. 1.日 期 : 2008年6月19日
  5160. 作 者 : 张强
  5161. 修改内容 : 新生成函数
  5162.  
  5163. *****************************************************************************/
  5164. macro CheckBrace(szLine,ichBeg,ichEnd,chBeg,chEnd,nCheckCount,isCommentEnd)
  5165. {
  5166. retVal = ""
  5167. retVal.ich =
  5168. nIdx = ichBeg
  5169. nLen = strlen(szLine)
  5170. if(ichEnd >= nLen)
  5171. {
  5172. ichEnd = nLen -
  5173. }
  5174. fIsEnd =
  5175. while(nIdx <= ichEnd)
  5176. {
  5177. //如果是/*注释区,跳过该段
  5178. if( (isCommentEnd == ) || (szLine[nIdx] == "/" && szLine[nIdx+] == "*"))
  5179. {
  5180. fIsEnd =
  5181. while(nIdx <= ichEnd )
  5182. {
  5183. if(szLine[nIdx] == "*" && szLine[nIdx+] == "/")
  5184. {
  5185. nIdx = nIdx +
  5186. fIsEnd =
  5187. isCommentEnd =
  5188. break
  5189. }
  5190. nIdx = nIdx +
  5191. }
  5192. if(nIdx > ichEnd)
  5193. {
  5194. break
  5195. }
  5196. }
  5197. //如果是//注释则停止查找
  5198. if(szLine[nIdx] == "/" && szLine[nIdx+] == "/")
  5199. {
  5200. break
  5201. }
  5202. if(szLine[nIdx] == chBeg)
  5203. {
  5204. nCheckCount = nCheckCount +
  5205. }
  5206. if(szLine[nIdx] == chEnd)
  5207. {
  5208. nCheckCount = nCheckCount -
  5209. if(nCheckCount == )
  5210. {
  5211. retVal.ich = nIdx
  5212. }
  5213. }
  5214. nIdx = nIdx +
  5215. }
  5216. retVal.iCount = nCheckCount
  5217. retVal.fIsEnd = fIsEnd
  5218. return retVal
  5219. }
  5220.  
  5221. /*****************************************************************************
  5222. 函 数 名 : InsertElse
  5223. 功能描述 : 插入else语句
  5224. 输出参数 : 无
  5225. 返 回 值 :
  5226. 调用函数 :
  5227. 被调函数 :
  5228.  
  5229. 修改历史 :
  5230. 1.日 期 : 2008年6月19日
  5231. 作 者 : 张强
  5232. 修改内容 : 新生成函数
  5233.  
  5234. *****************************************************************************/
  5235. macro InsertElse()
  5236. {
  5237. hwnd = GetCurrentWnd()
  5238. sel = GetWndSel(hwnd)
  5239. hbuf = GetCurrentBuf()
  5240. ln = sel.lnFirst
  5241. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5242. {
  5243. szLeft = CreateBlankString(sel.ichFirst)
  5244. InsBufLine(hbuf, ln,szLeft)
  5245. SetWndSel(hwnd,sel)
  5246. }
  5247. val = ExpandBraceLarge()
  5248. szLeft = val.szLeft
  5249. InsBufLine(hbuf, ln, "@szLeft@else")
  5250. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5251. {
  5252. PutBufLine(hbuf,ln+, "@szLeft@ ")
  5253. SetBufIns (hbuf, ln+, strlen(szLeft)+)
  5254. return
  5255. }
  5256. SetBufIns (hbuf, ln, strlen(szLeft)+)
  5257. }
  5258.  
  5259. /*****************************************************************************
  5260. 函 数 名 : InsertCase
  5261. 功能描述 : 插入case语句
  5262. 输出参数 : 无
  5263. 返 回 值 :
  5264. 调用函数 :
  5265. 被调函数 :
  5266.  
  5267. 修改历史 :
  5268. 1.日 期 : 2008年6月19日
  5269. 作 者 : 张强
  5270. 修改内容 : 新生成函数
  5271.  
  5272. *****************************************************************************/
  5273. macro InsertCase()
  5274. {
  5275. hwnd = GetCurrentWnd()
  5276. sel = GetWndSel(hwnd)
  5277. hbuf = GetCurrentBuf()
  5278. ln = sel.lnFirst
  5279. szLine = GetBufLine( hbuf, ln )
  5280. nLeft = GetLeftBlank(szLine)
  5281. szLeft = strmid(szLine,,nLeft);
  5282. InsBufLine(hbuf, ln, "@szLeft@" # "case # :")
  5283. InsBufLine(hbuf, ln + , "@szLeft@" # " " # "#")
  5284. InsBufLine(hbuf, ln + , "@szLeft@" # " " # "break;")
  5285. SearchForward()
  5286. }
  5287.  
  5288. /*****************************************************************************
  5289. 函 数 名 : InsertSwitch
  5290. 功能描述 : 插入swich语句
  5291. 输出参数 : 无
  5292. 返 回 值 :
  5293. 调用函数 :
  5294. 被调函数 :
  5295.  
  5296. 修改历史 :
  5297. 1.日 期 : 2008年6月19日
  5298. 作 者 : 张强
  5299. 修改内容 : 新生成函数
  5300.  
  5301. *****************************************************************************/
  5302. macro InsertSwitch()
  5303. {
  5304. hwnd = GetCurrentWnd()
  5305. sel = GetWndSel(hwnd)
  5306. hbuf = GetCurrentBuf()
  5307. ln = sel.lnFirst
  5308. szLine = GetBufLine( hbuf, ln )
  5309. nLeft = GetLeftBlank(szLine)
  5310. szLeft = strmid(szLine,,nLeft);
  5311. InsBufLine(hbuf, ln, "@szLeft@switch ( # )")
  5312. InsBufLine(hbuf, ln + , "@szLeft@" # "{")
  5313. nSwitch = ask("请输入case的个数")
  5314. InsertMultiCaseProc(hbuf,szLeft,nSwitch)
  5315. SearchForward()
  5316. }
  5317.  
  5318. /*****************************************************************************
  5319. 函 数 名 : InsertMultiCaseProc
  5320. 功能描述 : 插入多个case
  5321. 输入参数 : hbuf
  5322. szLeft
  5323. nSwitch
  5324. 输出参数 : 无
  5325. 返 回 值 :
  5326. 调用函数 :
  5327. 被调函数 :
  5328.  
  5329. 修改历史 :
  5330. 1.日 期 : 2008年6月19日
  5331. 作 者 : 张强
  5332. 修改内容 : 新生成函数
  5333.  
  5334. *****************************************************************************/
  5335. macro InsertMultiCaseProc(hbuf,szLeft,nSwitch)
  5336. {
  5337. hwnd = GetCurrentWnd()
  5338. sel = GetWndSel(hwnd)
  5339. ln = sel.lnFirst
  5340.  
  5341. nIdx =
  5342. if(nSwitch == )
  5343. {
  5344. hNewBuf = newbuf("clip")
  5345. if(hNewBuf == hNil)
  5346. return
  5347. SetCurrentBuf(hNewBuf)
  5348. PasteBufLine (hNewBuf, )
  5349. nLeftMax =
  5350. lnMax = GetBufLineCount(hNewBuf )
  5351. i =
  5352. fIsEnd =
  5353. while ( i < lnMax)
  5354. {
  5355. szLine = GetBufLine(hNewBuf , i)
  5356. //先去掉代码中注释的内容
  5357. RetVal = SkipCommentFromString(szLine,fIsEnd)
  5358. szLine = RetVal.szContent
  5359. fIsEnd = RetVal.fIsEnd
  5360. // nLeft = GetLeftBlank(szLine)
  5361. //从剪贴板中取得case值
  5362. szLine = GetSwitchVar(szLine)
  5363. if(strlen(szLine) != )
  5364. {
  5365. ln = ln +
  5366. InsBufLine(hbuf, ln - , "@szLeft@ " # "case @szLine@:")
  5367. InsBufLine(hbuf, ln , "@szLeft@ " # " " # "#")
  5368. InsBufLine(hbuf, ln + , "@szLeft@ " # " " # "break;")
  5369. }
  5370. i = i +
  5371. }
  5372. closebuf(hNewBuf)
  5373. }
  5374. else
  5375. {
  5376. while(nIdx < nSwitch)
  5377. {
  5378. ln = ln +
  5379. InsBufLine(hbuf, ln - , "@szLeft@ " # "case # :")
  5380. InsBufLine(hbuf, ln , "@szLeft@ " # " " # "#")
  5381. InsBufLine(hbuf, ln + , "@szLeft@ " # " " # "break;")
  5382. nIdx = nIdx +
  5383. }
  5384. }
  5385. InsBufLine(hbuf, ln + , "@szLeft@ " # "default:")
  5386. InsBufLine(hbuf, ln + , "@szLeft@ " # " " # "#")
  5387. InsBufLine(hbuf, ln + , "@szLeft@" # "}")
  5388. SetWndSel(hwnd, sel)
  5389. SearchForward()
  5390. }
  5391.  
  5392. /*****************************************************************************
  5393. 函 数 名 : GetSwitchVar
  5394. 功能描述 : 从枚举、宏定义取得case值
  5395. 输入参数 : szLine
  5396. 输出参数 : 无
  5397. 返 回 值 :
  5398. 调用函数 :
  5399. 被调函数 :
  5400.  
  5401. 修改历史 :
  5402. 1.日 期 : 2008年6月19日
  5403. 作 者 : 张强
  5404. 修改内容 : 新生成函数
  5405.  
  5406. *****************************************************************************/
  5407. macro GetSwitchVar(szLine)
  5408. {
  5409. if( (szLine == "{") || (szLine == "}") )
  5410. {
  5411. return ""
  5412. }
  5413. ret = strstr(szLine,"#define" )
  5414. if(ret != 0xffffffff)
  5415. {
  5416. szLine = strmid(szLine,ret + ,strlen(szLine))
  5417. }
  5418. szLine = TrimLeft(szLine)
  5419. nIdx =
  5420. nLen = strlen(szLine)
  5421. while( nIdx < nLen)
  5422. {
  5423. if((szLine[nIdx] == " ") || (szLine[nIdx] == ",") || (szLine[nIdx] == "="))
  5424. {
  5425. szLine = strmid(szLine,,nIdx)
  5426. return szLine
  5427. }
  5428. nIdx = nIdx +
  5429. }
  5430. return szLine
  5431. }
  5432.  
  5433. /*
  5434. macro SkipControlCharFromString(szLine)
  5435. {
  5436. nLen = strlen(szLine)
  5437. nIdx = 0
  5438. newStr = ""
  5439. while(nIdx < nLen - 1)
  5440. {
  5441. if(szLine[nIdx] == "\t")
  5442. {
  5443. newStr = cat(newStr," ")
  5444. }
  5445. else if(szLine[nIdx] < " ")
  5446. {
  5447. newStr = cat(newStr," ")
  5448. }
  5449. else
  5450. {
  5451. newStr = cat(newStr," ")
  5452. }
  5453. }
  5454. }
  5455. */
  5456. /*****************************************************************************
  5457. 函 数 名 : SkipCommentFromString
  5458. 功能描述 : 去掉注释的内容,将注释内容清为空格
  5459. 输入参数 : szLine 输入行的内容
  5460. isCommentEnd 是否但前行的开始已经是注释结束了
  5461. 输出参数 : 无
  5462. 返 回 值 :
  5463. 调用函数 :
  5464. 被调函数 :
  5465.  
  5466. 修改历史 :
  5467. 1.日 期 : 2008年6月19日
  5468. 作 者 : 张强
  5469. 修改内容 : 新生成函数
  5470.  
  5471. *****************************************************************************/
  5472. macro SkipCommentFromString(szLine,isCommentEnd)
  5473. {
  5474. RetVal = ""
  5475. fIsEnd =
  5476. nLen = strlen(szLine)
  5477. nIdx =
  5478. while(nIdx < nLen )
  5479. {
  5480. //如果当前行开始还是被注释,或遇到了注释开始的变标记,注释内容改为空格
  5481. if( (isCommentEnd == ) || (szLine[nIdx] == "/" && szLine[nIdx+] == "*"))
  5482. {
  5483. fIsEnd =
  5484. while(nIdx < nLen )
  5485. {
  5486. if(szLine[nIdx] == "*" && szLine[nIdx+] == "/")
  5487. {
  5488. szLine[nIdx+] = " "
  5489. szLine[nIdx] = " "
  5490. nIdx = nIdx +
  5491. fIsEnd =
  5492. isCommentEnd =
  5493. break
  5494. }
  5495. szLine[nIdx] = " "
  5496.  
  5497. //如果是倒数第二个则最后一个也肯定是在注释内
  5498. // if(nIdx == nLen -2 )
  5499. // {
  5500. // szLine[nIdx + 1] = " "
  5501. // }
  5502. nIdx = nIdx +
  5503. }
  5504.  
  5505. //如果已经到了行尾终止搜索
  5506. if(nIdx == nLen)
  5507. {
  5508. break
  5509. }
  5510. }
  5511.  
  5512. //如果遇到的是//来注释的说明后面都为注释
  5513. if(szLine[nIdx] == "/" && szLine[nIdx+] == "/")
  5514. {
  5515. szLine = strmid(szLine,,nIdx)
  5516. break
  5517. }
  5518. nIdx = nIdx +
  5519. }
  5520. RetVal.szContent = szLine;
  5521. RetVal.fIsEnd = fIsEnd
  5522. return RetVal
  5523. }
  5524.  
  5525. /*****************************************************************************
  5526. 函 数 名 : InsertDo
  5527. 功能描述 : 插入Do语句
  5528. 输出参数 : 无
  5529. 返 回 值 :
  5530. 调用函数 :
  5531. 被调函数 :
  5532.  
  5533. 修改历史 :
  5534. 1.日 期 : 2008年6月19日
  5535. 作 者 : 张强
  5536. 修改内容 : 新生成函数
  5537.  
  5538. *****************************************************************************/
  5539. macro InsertDo()
  5540. {
  5541. hwnd = GetCurrentWnd()
  5542. sel = GetWndSel(hwnd)
  5543. hbuf = GetCurrentBuf()
  5544. ln = sel.lnFirst
  5545. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5546. {
  5547. szLeft = CreateBlankString(sel.ichFirst)
  5548. InsBufLine(hbuf, ln,szLeft)
  5549. SetWndSel(hwnd,sel)
  5550. }
  5551. val = ExpandBraceLarge()
  5552. szLeft = val.szLeft
  5553. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5554. {
  5555. PutBufLine(hbuf,ln+, "@szLeft@ #")
  5556. }
  5557. PutBufLine(hbuf, sel.lnLast + val.nLineCount, "@szLeft@}while ( # );")
  5558. // SetBufIns (hbuf, sel.lnLast + val.nLineCount, strlen(szLeft)+8)
  5559. InsBufLine(hbuf, ln, "@szLeft@do")
  5560. SearchForward()
  5561. }
  5562.  
  5563. /*****************************************************************************
  5564. 函 数 名 : InsertWhile
  5565. 功能描述 : 插入While语句
  5566. 输出参数 : 无
  5567. 返 回 值 :
  5568. 调用函数 :
  5569. 被调函数 :
  5570.  
  5571. 修改历史 :
  5572. 1.日 期 : 2008年6月19日
  5573. 作 者 : 张强
  5574. 修改内容 : 新生成函数
  5575.  
  5576. *****************************************************************************/
  5577. macro InsertWhile()
  5578. {
  5579. hwnd = GetCurrentWnd()
  5580. sel = GetWndSel(hwnd)
  5581. hbuf = GetCurrentBuf()
  5582. ln = sel.lnFirst
  5583. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5584. {
  5585. szLeft = CreateBlankString(sel.ichFirst)
  5586. InsBufLine(hbuf, ln,szLeft)
  5587. SetWndSel(hwnd,sel)
  5588. }
  5589. val = ExpandBraceLarge()
  5590. szLeft = val.szLeft
  5591. InsBufLine(hbuf, ln, "@szLeft@while ( # )")
  5592. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5593. {
  5594. PutBufLine(hbuf,ln+, "@szLeft@ #")
  5595. }
  5596. SetBufIns (hbuf, ln, strlen(szLeft)+)
  5597. SearchForward()
  5598. }
  5599.  
  5600. /*****************************************************************************
  5601. 函 数 名 : InsertFor
  5602. 功能描述 : 插入for语句
  5603. 输出参数 : 无
  5604. 返 回 值 :
  5605. 调用函数 :
  5606. 被调函数 :
  5607.  
  5608. 修改历史 :
  5609. 1.日 期 : 2008年6月19日
  5610. 作 者 : 张强
  5611. 修改内容 : 新生成函数
  5612.  
  5613. *****************************************************************************/
  5614. macro InsertFor()
  5615. {
  5616. hwnd = GetCurrentWnd()
  5617. sel = GetWndSel(hwnd)
  5618. hbuf = GetCurrentBuf()
  5619. ln = sel.lnFirst
  5620. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5621. {
  5622. szLeft = CreateBlankString(sel.ichFirst)
  5623. InsBufLine(hbuf, ln,szLeft)
  5624. SetWndSel(hwnd,sel)
  5625. }
  5626. val = ExpandBraceLarge()
  5627. szLeft = val.szLeft
  5628. InsBufLine(hbuf, ln,"@szLeft@for ( # ; # ; # )")
  5629. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5630. {
  5631. PutBufLine(hbuf,ln+, "@szLeft@ #")
  5632. }
  5633. sel.lnFirst = ln
  5634. sel.lnLast = ln
  5635. sel.ichFirst =
  5636. sel.ichLim =
  5637. SetWndSel(hwnd, sel)
  5638. SearchForward()
  5639. szVar = ask("请输入循环变量")
  5640. PutBufLine(hbuf,ln, "@szLeft@for ( @szVar@ = # ; @szVar@ # ; @szVar@++ )")
  5641. SearchForward()
  5642. }
  5643.  
  5644. /*****************************************************************************
  5645. 函 数 名 : InsertIf
  5646. 功能描述 : 插入If语句
  5647. 输出参数 : 无
  5648. 返 回 值 :
  5649. 调用函数 :
  5650. 被调函数 :
  5651.  
  5652. 修改历史 :
  5653. 1.日 期 : 2008年6月19日
  5654. 作 者 : 张强
  5655. 修改内容 : 新生成函数
  5656.  
  5657. *****************************************************************************/
  5658. macro InsertIf()
  5659. {
  5660. hwnd = GetCurrentWnd()
  5661. sel = GetWndSel(hwnd)
  5662. hbuf = GetCurrentBuf()
  5663. ln = sel.lnFirst
  5664. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5665. {
  5666. szLeft = CreateBlankString(sel.ichFirst)
  5667. InsBufLine(hbuf, ln,szLeft)
  5668. SetWndSel(hwnd,sel)
  5669. }
  5670. val = ExpandBraceLarge()
  5671. szLeft = val.szLeft
  5672. InsBufLine(hbuf, ln, "@szLeft@if ( # )")
  5673. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  5674. {
  5675. PutBufLine(hbuf,ln+, "@szLeft@ #")
  5676. }
  5677. // SetBufIns (hbuf, ln, strlen(szLeft)+4)
  5678. SearchForward()
  5679. }
  5680.  
  5681. /*****************************************************************************
  5682. 函 数 名 : MergeString
  5683. 功能描述 : 将剪贴板中的语句合并成一行
  5684. 输出参数 : 无
  5685. 返 回 值 :
  5686. 调用函数 :
  5687. 被调函数 :
  5688.  
  5689. 修改历史 :
  5690. 1.日 期 : 2008年6月24日
  5691. 作 者 : 张强
  5692. 修改内容 : 新生成函数
  5693.  
  5694. *****************************************************************************/
  5695. macro MergeString()
  5696. {
  5697. hbuf = newbuf("clip")
  5698. if(hbuf == hNil)
  5699. return
  5700. SetCurrentBuf(hbuf)
  5701. PasteBufLine (hbuf, )
  5702.  
  5703. //如果剪贴板中没有内容,则返回
  5704. lnMax = GetBufLineCount(hbuf )
  5705. if( lnMax == )
  5706. {
  5707. closebuf(hbuf)
  5708. return ""
  5709. }
  5710. lnLast =
  5711. if(lnMax > )
  5712. {
  5713. lnLast = lnMax -
  5714. i = lnMax -
  5715. }
  5716. while ( i > )
  5717. {
  5718. szLine = GetBufLine(hbuf , i-)
  5719. szLine = TrimLeft(szLine)
  5720. nLen = strlen(szLine)
  5721. if(szLine[nLen - ] == "-")
  5722. {
  5723. szLine = strmid(szLine,,nLen - )
  5724. }
  5725. nLen = strlen(szLine)
  5726. if( (szLine[nLen - ] != " ") && (AsciiFromChar (szLine[nLen - ]) <= ))
  5727. {
  5728. szLine = cat(szLine," ")
  5729. }
  5730. SetBufIns (hbuf, lnLast, )
  5731. SetBufSelText(hbuf,szLine)
  5732. i = i -
  5733. }
  5734. szLine = GetBufLine(hbuf,lnLast)
  5735. closebuf(hbuf)
  5736. return szLine
  5737. }
  5738.  
  5739. /*****************************************************************************
  5740. 函 数 名 : ClearPrombleNo
  5741. 功能描述 : 清除问题单号
  5742. 输出参数 : 无
  5743. 返 回 值 :
  5744. 调用函数 :
  5745. 被调函数 :
  5746.  
  5747. 修改历史 :
  5748. 1.日 期 : 2008年6月19日
  5749. 作 者 : 张强
  5750. 修改内容 : 新生成函数
  5751.  
  5752. *****************************************************************************/
  5753. macro ClearPrombleNo()
  5754. {
  5755. SetReg ("PNO", "")
  5756. }
  5757.  
  5758. /*****************************************************************************
  5759. 函 数 名 : AddPromblemNo
  5760. 功能描述 : 添加问题单号
  5761. 输出参数 : 无
  5762. 返 回 值 :
  5763. 调用函数 :
  5764. 被调函数 :
  5765.  
  5766. 修改历史 :
  5767. 1.日 期 : 2008年6月19日
  5768. 作 者 : 张强
  5769. 修改内容 : 新生成函数
  5770.  
  5771. *****************************************************************************/
  5772. macro AddPromblemNo()
  5773. {
  5774. szQuestion = ASK("Please Input problem number ");
  5775. if(szQuestion == "#")
  5776. {
  5777. szQuestion = ""
  5778. SetReg ("PNO", "")
  5779. }
  5780. else
  5781. {
  5782. SetReg ("PNO", szQuestion)
  5783. }
  5784. return szQuestion
  5785. }
  5786.  
  5787. /*
  5788. this macro convet selected C++ coment block to C comment block
  5789. for example:
  5790. line " // aaaaa "
  5791. convert to /* aaaaa */
  5792. */
  5793. /*macro ComentCPPtoC()
  5794. {
  5795. hwnd = GetCurrentWnd()
  5796. lnFirst = GetWndSelLnFirst( hwnd )
  5797. lnLast = GetWndSelLnLast( hwnd )
  5798.  
  5799. lnCurrent = lnFirst
  5800. fIsEnd = 1
  5801. while ( lnCurrent <= lnLast )
  5802. {
  5803. fIsEnd = CmtCvtLine( lnCurrent,fIsEnd )
  5804. lnCurrent = lnCurrent + 1;
  5805. }
  5806. }*/
  5807.  
  5808. /*****************************************************************************
  5809. 函 数 名 : ComentCPPtoC
  5810. 功能描述 : 转换C++注释为C注释
  5811. 输出参数 : 无
  5812. 返 回 值 :
  5813. 调用函数 :
  5814. 被调函数 :
  5815.  
  5816. 修改历史 :
  5817. 1.日 期 : 2008年7月02日
  5818. 作 者 : 张强
  5819. 修改内容 : 新生成函数,支持块注释
  5820.  
  5821. *****************************************************************************/
  5822. macro ComentCPPtoC()
  5823. {
  5824. hwnd = GetCurrentWnd()
  5825. hbuf = GetCurrentBuf()
  5826. lnFirst = GetWndSelLnFirst( hwnd )
  5827. lnCurrent = lnFirst
  5828. lnLast = GetWndSelLnLast( hwnd )
  5829. ch_comment = CharFromAscii()
  5830. isCommentEnd =
  5831. isCommentContinue =
  5832. while ( lnCurrent <= lnLast )
  5833. {
  5834.  
  5835. ich =
  5836. szLine = GetBufLine(hbuf,lnCurrent)
  5837. ilen = strlen(szLine)
  5838. while ( ich < ilen )
  5839. {
  5840. if( (szLine[ich] != " ") && (szLine[ich] != "\t") )
  5841. {
  5842. break
  5843. }
  5844. ich = ich +
  5845. }
  5846. /*如果是空行,跳过该行*/
  5847. if(ich == ilen)
  5848. {
  5849. lnCurrent = lnCurrent +
  5850. szOldLine = szLine
  5851. continue
  5852. }
  5853.  
  5854. /*如果该行只有一个字符*/
  5855. if(ich > ilen - )
  5856. {
  5857. if( isCommentContinue == )
  5858. {
  5859. szOldLine = cat(szOldLine," */")
  5860. PutBufLine(hbuf,lnCurrent-,szOldLine)
  5861. isCommentContinue =
  5862. }
  5863. lnCurrent = lnCurrent +
  5864. szOldLine = szLine
  5865. continue
  5866. }
  5867. if( isCommentEnd == )
  5868. {
  5869. /*如果不是在注释区内*/
  5870. if(( szLine[ich]==ch_comment ) && (szLine[ich+]==ch_comment))
  5871. {
  5872.  
  5873. /* 去掉中间嵌套的注释 */
  5874. nIdx = ich +
  5875. while ( nIdx < ilen - )
  5876. {
  5877. if( (( szLine[nIdx] == "/" ) && (szLine[nIdx+] == "*")||
  5878. ( szLine[nIdx] == "*" ) && (szLine[nIdx+] == "/") )
  5879. {
  5880. szLine[nIdx] = " "
  5881. szLine[nIdx+] = " "
  5882. }
  5883. nIdx = nIdx +
  5884. }
  5885.  
  5886. if( isCommentContinue == )
  5887. {
  5888. /* 如果是连续的注释*/
  5889. szLine[ich] = " "
  5890. szLine[ich+] = " "
  5891. }
  5892. else
  5893. {
  5894. /*如果不是连续的注释则是新注释的开始*/
  5895. szLine[ich] = "/"
  5896. szLine[ich+] = "*"
  5897. }
  5898. if ( lnCurrent == lnLast )
  5899. {
  5900. /*如果是最后一行则在行尾添加结束注释符*/
  5901. szLine = cat(szLine," */")
  5902. isCommentContinue =
  5903. }
  5904. /*更新该行*/
  5905. PutBufLine(hbuf,lnCurrent,szLine)
  5906. isCommentContinue =
  5907. szOldLine = szLine
  5908. lnCurrent = lnCurrent +
  5909. continue
  5910. }
  5911. else
  5912. {
  5913. /*如果该行的起始不是//注释*/
  5914. if( isCommentContinue == )
  5915. {
  5916. szOldLine = cat(szOldLine," */")
  5917. PutBufLine(hbuf,lnCurrent-,szOldLine)
  5918. isCommentContinue =
  5919. }
  5920. }
  5921. }
  5922. while ( ich < ilen - )
  5923. {
  5924. //如果是/*注释区,跳过该段
  5925. if( (isCommentEnd == ) || (szLine[ich] == "/" && szLine[ich+] == "*"))
  5926. {
  5927. isCommentEnd =
  5928. while(ich < ilen - )
  5929. {
  5930. if(szLine[ich] == "*" && szLine[ich+] == "/")
  5931. {
  5932. ich = ich +
  5933. isCommentEnd =
  5934. break
  5935. }
  5936. ich = ich +
  5937. }
  5938. if(ich >= ilen - )
  5939. {
  5940. break
  5941. }
  5942. }
  5943.  
  5944. if(( szLine[ich]==ch_comment ) && (szLine[ich+]==ch_comment))
  5945. {
  5946. /* 如果是//注释*/
  5947. isCommentContinue =
  5948. nIdx = ich
  5949. //去掉期间的/* 和 */注释符以免出现注释嵌套错误
  5950. while ( nIdx < ilen - )
  5951. {
  5952. if( (( szLine[nIdx] == "/" ) && (szLine[nIdx+] == "*")||
  5953. ( szLine[nIdx] == "*" ) && (szLine[nIdx+] == "/") )
  5954. {
  5955. szLine[nIdx] = " "
  5956. szLine[nIdx+] = " "
  5957. }
  5958. nIdx = nIdx +
  5959. }
  5960. szLine[ich+] = "*"
  5961. if( lnCurrent == lnLast )
  5962. {
  5963. szLine = cat(szLine," */")
  5964. }
  5965. PutBufLine(hbuf,lnCurrent,szLine)
  5966. break
  5967. }
  5968. ich = ich +
  5969. }
  5970. szOldLine = szLine
  5971. lnCurrent = lnCurrent +
  5972. }
  5973. }
  5974.  
  5975. macro ComentLine()
  5976. {
  5977. hwnd = GetCurrentWnd()
  5978. hbuf = GetCurrentBuf()
  5979. lnFirst = GetWndSelLnFirst( hwnd )
  5980. lnCurrent = lnFirst
  5981. lnLast = GetWndSelLnLast( hwnd )
  5982. lnOld =
  5983. while ( lnCurrent <= lnLast )
  5984. {
  5985. szLine = GetBufLine(hbuf,lnCurrent)
  5986. DelBufLine(hbuf,lnCurrent)
  5987. nLeft = GetLeftBlank(szLine)
  5988. szLeft = strmid(szLine,,nLeft);
  5989. szLine = TrimString(szLine)
  5990. ilen = strlen(szLine)
  5991. if(iLen == )
  5992. {
  5993. continue
  5994. }
  5995. nIdx =
  5996. //去掉期间的/* 和 */注释符以免出现注释嵌套错误
  5997. while ( nIdx < ilen - )
  5998. {
  5999. if( (( szLine[nIdx] == "/" ) && (szLine[nIdx+] == "*")||
  6000. ( szLine[nIdx] == "*" ) && (szLine[nIdx+] == "/") )
  6001. {
  6002. szLine[nIdx] = " "
  6003. szLine[nIdx+] = " "
  6004. }
  6005. nIdx = nIdx +
  6006. }
  6007. szLine = cat("/* ",szLine)
  6008. lnOld = lnCurrent
  6009. lnCurrent = CommentContent(hbuf,lnCurrent,szLeft,szLine,)
  6010. lnLast = lnCurrent - lnOld + lnLast
  6011. lnCurrent = lnCurrent +
  6012. }
  6013. }
  6014.  
  6015. /*****************************************************************************
  6016. 函 数 名 : CmtCvtLine
  6017. 功能描述 : 将//转换成/*注释
  6018. 输入参数 : lnCurrent
  6019. 输出参数 : 无
  6020. 返 回 值 :
  6021. 调用函数 :
  6022. 被调函数 :
  6023.  
  6024. 修改历史 :
  6025. 1.日 期 :
  6026. 作 者 :
  6027. 修改内容 :
  6028.  
  6029. 2.日 期 : 2008年7月02日
  6030. 作 者 : 张强
  6031. 修改内容 : 修改了注释嵌套所产生的问题
  6032.  
  6033. *****************************************************************************/
  6034. macro CmtCvtLine(lnCurrent, isCommentEnd)
  6035. {
  6036. hbuf = GetCurrentBuf()
  6037. szLine = GetBufLine(hbuf,lnCurrent)
  6038. ch_comment = CharFromAscii()
  6039. ich =
  6040. ilen = strlen(szLine)
  6041.  
  6042. fIsEnd =
  6043. iIsComment = ;
  6044.  
  6045. while ( ich < ilen - )
  6046. {
  6047. //如果是/*注释区,跳过该段
  6048. if( (isCommentEnd == ) || (szLine[ich] == "/" && szLine[ich+] == "*"))
  6049. {
  6050. fIsEnd =
  6051. while(ich < ilen - )
  6052. {
  6053. if(szLine[ich] == "*" && szLine[ich+] == "/")
  6054. {
  6055. ich = ich +
  6056. fIsEnd =
  6057. isCommentEnd =
  6058. break
  6059. }
  6060. ich = ich +
  6061. }
  6062. if(ich >= ilen - )
  6063. {
  6064. break
  6065. }
  6066. }
  6067. if(( szLine[ich]==ch_comment ) && (szLine[ich+]==ch_comment))
  6068. {
  6069. nIdx = ich
  6070. while ( nIdx < ilen - )
  6071. {
  6072. if( (( szLine[nIdx] == "/" ) && (szLine[nIdx+] == "*")||
  6073. ( szLine[nIdx] == "*" ) && (szLine[nIdx+] == "/") )
  6074. {
  6075. szLine[nIdx] = " "
  6076. szLine[nIdx+] = " "
  6077. }
  6078. nIdx = nIdx +
  6079. }
  6080. szLine[ich+] = "*"
  6081. szLine = cat(szLine," */")
  6082. DelBufLine(hbuf,lnCurrent)
  6083. InsBufLine(hbuf,lnCurrent,szLine)
  6084. return fIsEnd
  6085. }
  6086. ich = ich +
  6087. }
  6088. return fIsEnd
  6089. }
  6090.  
  6091. /*****************************************************************************
  6092. 函 数 名 : GetFileNameExt
  6093. 功能描述 : 得到文件扩展名
  6094. 输入参数 : sz
  6095. 输出参数 : 无
  6096. 返 回 值 :
  6097. 调用函数 :
  6098. 被调函数 :
  6099.  
  6100. 修改历史 :
  6101. 1.日 期 : 2008年6月19日
  6102. 作 者 : 张强
  6103. 修改内容 : 新生成函数
  6104.  
  6105. *****************************************************************************/
  6106. macro GetFileNameExt(sz)
  6107. {
  6108. i =
  6109. j =
  6110. szName = sz
  6111. iLen = strlen(sz)
  6112. if(iLen == )
  6113. return ""
  6114. while( i <= iLen)
  6115. {
  6116. if(sz[iLen-i] == ".")
  6117. {
  6118. j = iLen-i
  6119. szExt = strmid(sz,j + ,iLen)
  6120. return szExt
  6121. }
  6122. i = i +
  6123. }
  6124. return ""
  6125. }
  6126.  
  6127. /*****************************************************************************
  6128. 函 数 名 : GetFileNameNoExt
  6129. 功能描述 : 得到函数名没有扩展名
  6130. 输入参数 : sz
  6131. 输出参数 : 无
  6132. 返 回 值 :
  6133. 调用函数 :
  6134. 被调函数 :
  6135.  
  6136. 修改历史 :
  6137. 1.日 期 : 2008年6月19日
  6138. 作 者 : 张强
  6139. 修改内容 : 新生成函数
  6140.  
  6141. *****************************************************************************/
  6142. macro GetFileNameNoExt(sz)
  6143. {
  6144. i =
  6145. szName = sz
  6146. iLen = strlen(sz)
  6147. j = iLen
  6148. if(iLen == )
  6149. return ""
  6150. while( i <= iLen)
  6151. {
  6152. if(sz[iLen-i] == ".")
  6153. {
  6154. j = iLen-i
  6155. }
  6156. if( sz[iLen-i] == "\\" )
  6157. {
  6158. szName = strmid(sz,iLen-i+,j)
  6159. return szName
  6160. }
  6161. i = i +
  6162. }
  6163. szName = strmid(sz,,j)
  6164. return szName
  6165. }
  6166.  
  6167. /*****************************************************************************
  6168. 函 数 名 : GetFileName
  6169. 功能描述 : 得到带扩展名的文件名
  6170. 输入参数 : sz
  6171. 输出参数 : 无
  6172. 返 回 值 :
  6173. 调用函数 :
  6174. 被调函数 :
  6175.  
  6176. 修改历史 :
  6177. 1.日 期 : 2008年6月19日
  6178. 作 者 : 张强
  6179. 修改内容 : 新生成函数
  6180.  
  6181. *****************************************************************************/
  6182. macro GetFileName(sz)
  6183. {
  6184. i =
  6185. szName = sz
  6186. iLen = strlen(sz)
  6187. if(iLen == )
  6188. return ""
  6189. while( i <= iLen)
  6190. {
  6191. if(sz[iLen-i] == "\\")
  6192. {
  6193. szName = strmid(sz,iLen-i+,iLen)
  6194. break
  6195. }
  6196. i = i +
  6197. }
  6198. return szName
  6199. }
  6200.  
  6201. /*****************************************************************************
  6202. 函 数 名 : InsIfdef
  6203. 功能描述 : 插入#ifdef语句
  6204. 输出参数 : 无
  6205. 返 回 值 :
  6206. 调用函数 :
  6207. 被调函数 :
  6208.  
  6209. 修改历史 :
  6210. 1.日 期 : 2008年6月19日
  6211. 作 者 : 张强
  6212. 修改内容 : 新生成函数
  6213.  
  6214. *****************************************************************************/
  6215. macro InsIfdef()
  6216. {
  6217. sz = Ask("Enter #ifdef condition:")
  6218. if (sz != "")
  6219. IfdefStr(sz);
  6220. }
  6221.  
  6222. /*****************************************************************************
  6223. 函 数 名 : InsIfndef
  6224. 功能描述 : #ifndef语句对插入的入口调用宏
  6225. 输出参数 : 无
  6226. 返 回 值 :
  6227. 调用函数 :
  6228. 被调函数 :
  6229.  
  6230. 修改历史 :
  6231. 1.日 期 : 2008年6月24日
  6232. 作 者 : 张强
  6233. 修改内容 : 新生成函数
  6234.  
  6235. *****************************************************************************/
  6236. macro InsIfndef()
  6237. {
  6238. sz = Ask("Enter #ifndef condition:")
  6239. if (sz != "")
  6240. IfndefStr(sz);
  6241. }
  6242.  
  6243. /*****************************************************************************
  6244. 函 数 名 : InsertCPP
  6245. 功能描述 : 在buf中插入C类型定义
  6246. 输入参数 : hbuf
  6247. ln
  6248. 输出参数 : 无
  6249. 返 回 值 :
  6250. 调用函数 :
  6251. 被调函数 :
  6252.  
  6253. 修改历史 :
  6254. 1.日 期 : 2008年6月24日
  6255. 作 者 : 张强
  6256. 修改内容 : 新生成函数
  6257.  
  6258. *****************************************************************************/
  6259. macro InsertCPP(hbuf,ln)
  6260. {
  6261. InsBufLine(hbuf, ln, "")
  6262. InsBufLine(hbuf, ln, "#endif /* __cplusplus */")
  6263. InsBufLine(hbuf, ln, "#endif")
  6264. InsBufLine(hbuf, ln, "extern \"C\"{")
  6265. InsBufLine(hbuf, ln, "#if __cplusplus")
  6266. InsBufLine(hbuf, ln, "#ifdef __cplusplus")
  6267. InsBufLine(hbuf, ln, "")
  6268.  
  6269. iTotalLn = GetBufLineCount (hbuf)
  6270. InsBufLine(hbuf, iTotalLn, "")
  6271. InsBufLine(hbuf, iTotalLn, "#endif /* __cplusplus */")
  6272. InsBufLine(hbuf, iTotalLn, "#endif")
  6273. InsBufLine(hbuf, iTotalLn, "}")
  6274. InsBufLine(hbuf, iTotalLn, "#if __cplusplus")
  6275. InsBufLine(hbuf, iTotalLn, "#ifdef __cplusplus")
  6276. InsBufLine(hbuf, iTotalLn, "")
  6277. }
  6278.  
  6279. /*****************************************************************************
  6280. 函 数 名 : ReviseCommentProc
  6281. 功能描述 : 问题单修改命令处理
  6282. 输入参数 : hbuf
  6283. ln
  6284. szCmd
  6285. szMyName
  6286. szLine1
  6287. 输出参数 : 无
  6288. 返 回 值 :
  6289. 调用函数 :
  6290. 被调函数 :
  6291.  
  6292. 修改历史 :
  6293. 1.日 期 : 2008年6月24日
  6294. 作 者 : 张强
  6295. 修改内容 : 新生成函数
  6296.  
  6297. *****************************************************************************/
  6298. macro ReviseCommentProc(hbuf,ln,szCmd,szMyName,szLine1)
  6299. {
  6300. if (szCmd == "ap")
  6301. {
  6302. SysTime = GetSysTime()
  6303. sz=SysTime.Year
  6304. sz1=SysTime.month
  6305. sz3=SysTime.day
  6306. if (sz1 < )
  6307. {
  6308. szMonth = "0@sz1@"
  6309. }
  6310. else
  6311. {
  6312. szMonth = sz1
  6313. }
  6314. if (sz3 < )
  6315. {
  6316. szDay = "0@sz3@"
  6317. }
  6318. else
  6319. {
  6320. szDay = sz3
  6321. }
  6322.  
  6323. DelBufLine(hbuf, ln)
  6324. szQuestion = AddPromblemNo()
  6325. InsBufLine(hbuf, ln, "@szLine1@/* 问 题 单: @szQuestion@ 修改人:@szMyName@, 时间:@sz@-@szMonth@-@szDay@ ");
  6326. szContent = Ask("修改原因")
  6327. szLeft = cat(szLine1," 修改原因: ");
  6328. if(strlen(szLeft) > )
  6329. {
  6330. Msg("The right margine is small, Please use a new line")
  6331. stop
  6332. }
  6333. ln = CommentContent(hbuf,ln + ,szLeft,szContent,)
  6334. return
  6335. }
  6336. else if (szCmd == "ab")
  6337. {
  6338. SysTime = GetSysTime()
  6339. sz=SysTime.Year
  6340. sz1=SysTime.month
  6341. sz3=SysTime.day
  6342. if (sz1 < )
  6343. {
  6344. szMonth = "0@sz1@"
  6345. }
  6346. else
  6347. {
  6348. szMonth = sz1
  6349. }
  6350. if (sz3 < )
  6351. {
  6352. szDay = "0@sz3@"
  6353. }
  6354. else
  6355. {
  6356. szDay = sz3
  6357. }
  6358.  
  6359. DelBufLine(hbuf, ln)
  6360. szQuestion = GetReg ("PNO")
  6361. if(strlen(szQuestion)>)
  6362. {
  6363. InsBufLine(hbuf, ln, "@szLine1@/* add begin by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@ */");
  6364. }
  6365. else
  6366. {
  6367. InsBufLine(hbuf, ln, "@szLine1@/* add begin by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6368. }
  6369. return
  6370. }
  6371. else if (szCmd == "ae")
  6372. {
  6373. SysTime = GetSysTime()
  6374. sz=SysTime.Year
  6375. sz1=SysTime.month
  6376. sz3=SysTime.day
  6377. if (sz1 < )
  6378. {
  6379. szMonth = "0@sz1@"
  6380. }
  6381. else
  6382. {
  6383. szMonth = sz1
  6384. }
  6385. if (sz3 < )
  6386. {
  6387. szDay = "0@sz3@"
  6388. }
  6389. else
  6390. {
  6391. szDay = sz3
  6392. }
  6393.  
  6394. DelBufLine(hbuf, ln)
  6395. InsBufLine(hbuf, ln, "@szLine1@/* add end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6396. return
  6397. }
  6398. else if (szCmd == "db")
  6399. {
  6400. SysTime = GetSysTime()
  6401. sz=SysTime.Year
  6402. sz1=SysTime.month
  6403. sz3=SysTime.day
  6404. if (sz1 < )
  6405. {
  6406. szMonth = "0@sz1@"
  6407. }
  6408. else
  6409. {
  6410. szMonth = sz1
  6411. }
  6412. if (sz3 < )
  6413. {
  6414. szDay = "0@sz3@"
  6415. }
  6416. else
  6417. {
  6418. szDay = sz3
  6419. }
  6420.  
  6421. DelBufLine(hbuf, ln)
  6422. szQuestion = GetReg ("PNO")
  6423. if(strlen(szQuestion) > )
  6424. {
  6425. InsBufLine(hbuf, ln, "@szLine1@/* delete begin by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@ */");
  6426. }
  6427. else
  6428. {
  6429. InsBufLine(hbuf, ln, "@szLine1@/* delete begin by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6430. }
  6431.  
  6432. return
  6433. }
  6434. else if (szCmd == "de")
  6435. {
  6436. SysTime = GetSysTime()
  6437. sz=SysTime.Year
  6438. sz1=SysTime.month
  6439. sz3=SysTime.day
  6440. if (sz1 < )
  6441. {
  6442. szMonth = "0@sz1@"
  6443. }
  6444. else
  6445. {
  6446. szMonth = sz1
  6447. }
  6448. if (sz3 < )
  6449. {
  6450. szDay = "0@sz3@"
  6451. }
  6452. else
  6453. {
  6454. szDay = sz3
  6455. }
  6456.  
  6457. DelBufLine(hbuf, ln + )
  6458. InsBufLine(hbuf, ln, "@szLine1@/* delete end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6459. return
  6460. }
  6461. else if (szCmd == "mb")
  6462. {
  6463. SysTime = GetSysTime()
  6464. sz=SysTime.Year
  6465. sz1=SysTime.month
  6466. sz3=SysTime.day
  6467. if (sz1 < )
  6468. {
  6469. szMonth = "0@sz1@"
  6470. }
  6471. else
  6472. {
  6473. szMonth = sz1
  6474. }
  6475. if (sz3 < )
  6476. {
  6477. szDay = "0@sz3@"
  6478. }
  6479. else
  6480. {
  6481. szDay = sz3
  6482. }
  6483.  
  6484. DelBufLine(hbuf, ln)
  6485. szQuestion = GetReg ("PNO")
  6486. if(strlen(szQuestion) > )
  6487. {
  6488. InsBufLine(hbuf, ln, "@szLine1@/* modify begin by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@ */");
  6489. }
  6490. else
  6491. {
  6492. InsBufLine(hbuf, ln, "@szLine1@/* modify begin by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6493. }
  6494. return
  6495. }
  6496. else if (szCmd == "me")
  6497. {
  6498. SysTime = GetSysTime()
  6499. sz=SysTime.Year
  6500. sz1=SysTime.month
  6501. sz3=SysTime.day
  6502. if (sz1 < )
  6503. {
  6504. szMonth = "0@sz1@"
  6505. }
  6506. else
  6507. {
  6508. szMonth = sz1
  6509. }
  6510. if (sz3 < )
  6511. {
  6512. szDay = "0@sz3@"
  6513. }
  6514. else
  6515. {
  6516. szDay = sz3
  6517. }
  6518.  
  6519. DelBufLine(hbuf, ln)
  6520. InsBufLine(hbuf, ln, "@szLine1@/* modify end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6521. return
  6522. }
  6523. }
  6524.  
  6525. /*****************************************************************************
  6526. 函 数 名 : InsertReviseAdd
  6527. 功能描述 : 插入添加修改注释对
  6528. 输出参数 : 无
  6529. 返 回 值 :
  6530. 调用函数 :
  6531. 被调函数 :
  6532.  
  6533. 修改历史 :
  6534. 1.日 期 : 2008年6月19日
  6535. 作 者 : 张强
  6536. 修改内容 : 新生成函数
  6537.  
  6538. *****************************************************************************/
  6539. macro InsertReviseAdd()
  6540. {
  6541. hwnd = GetCurrentWnd()
  6542. sel = GetWndSel(hwnd)
  6543. hbuf = GetCurrentBuf()
  6544. lnMax = GetBufLineCount(hbuf)
  6545. language = getreg(LANGUAGE)
  6546. if(language != )
  6547. {
  6548. language =
  6549. }
  6550. szMyName = getreg(MYNAME)
  6551. if(strlen( szMyName ) == )
  6552. {
  6553. szMyName = Ask("Enter your name:")
  6554. setreg(MYNAME, szMyName)
  6555. }
  6556. SysTime = GetSysTime()
  6557. sz=SysTime.Year
  6558. sz1=SysTime.month
  6559. sz3=SysTime.day
  6560. if (sz1 < )
  6561. {
  6562. szMonth = "0@sz1@"
  6563. }
  6564. else
  6565. {
  6566. szMonth = sz1
  6567. }
  6568. if (sz3 < )
  6569. {
  6570. szDay = "0@sz3@"
  6571. }
  6572. else
  6573. {
  6574. szDay = sz3
  6575. }
  6576.  
  6577. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  6578. {
  6579. szLeft = CreateBlankString(sel.ichFirst)
  6580. }
  6581. else
  6582. {
  6583. szLine = GetBufLine( hbuf, sel.lnFirst )
  6584. nLeft = GetLeftBlank(szLine)
  6585. szLeft = strmid(szLine,,nLeft);
  6586. }
  6587. szQuestion = GetReg ("PNO")
  6588. if(strlen(szQuestion)>)
  6589. {
  6590. InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* add begin by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@ */");
  6591. }
  6592. else
  6593. {
  6594. InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* add begin by @szMyName@, @sz@-@szMonth@-@szDay@ */";
  6595. }
  6596.  
  6597. if(sel.lnLast < lnMax - )
  6598. {
  6599. InsBufLine(hbuf, sel.lnLast + , "@szLeft@/* add end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6600. }
  6601. else
  6602. {
  6603. AppendBufLine(hbuf, "@szLeft@/* add end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6604. }
  6605. SetBufIns(hbuf,sel.lnFirst + ,strlen(szLeft))
  6606. }
  6607.  
  6608. /*****************************************************************************
  6609. 函 数 名 : InsertReviseDel
  6610. 功能描述 : 插入删除修改注释对
  6611. 输出参数 : 无
  6612. 返 回 值 :
  6613. 调用函数 :
  6614. 被调函数 :
  6615.  
  6616. 修改历史 :
  6617. 1.日 期 : 2008年6月19日
  6618. 作 者 : 张强
  6619. 修改内容 : 新生成函数
  6620.  
  6621. *****************************************************************************/
  6622. macro InsertReviseDel()
  6623. {
  6624. hwnd = GetCurrentWnd()
  6625. sel = GetWndSel(hwnd)
  6626. hbuf = GetCurrentBuf()
  6627. lnMax = GetBufLineCount(hbuf)
  6628. language = getreg(LANGUAGE)
  6629. if(language != )
  6630. {
  6631. language =
  6632. }
  6633. szMyName = getreg(MYNAME)
  6634. if(strlen( szMyName ) == )
  6635. {
  6636. szMyName = Ask("Enter your name:")
  6637. setreg(MYNAME, szMyName)
  6638. }
  6639. SysTime = GetSysTime()
  6640. sz=SysTime.Year
  6641. sz1=SysTime.month
  6642. sz3=SysTime.day
  6643. if (sz1 < )
  6644. {
  6645. szMonth = "0@sz1@"
  6646. }
  6647. else
  6648. {
  6649. szMonth = sz1
  6650. }
  6651. if (sz3 < )
  6652. {
  6653. szDay = "0@sz3@"
  6654. }
  6655. else
  6656. {
  6657. szDay = sz3
  6658. }
  6659. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  6660. {
  6661. szLeft = CreateBlankString(sel.ichFirst)
  6662. }
  6663. else
  6664. {
  6665. szLine = GetBufLine( hbuf, sel.lnFirst )
  6666. nLeft = GetLeftBlank(szLine)
  6667. szLeft = strmid(szLine,,nLeft);
  6668. }
  6669. szQuestion = GetReg ("PNO")
  6670. if(strlen(szQuestion)>)
  6671. {
  6672. InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* delete begin by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@*/");
  6673. }
  6674. else
  6675. {
  6676. InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* delete begin by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6677. }
  6678.  
  6679. if(sel.lnLast < lnMax - )
  6680. {
  6681. InsBufLine(hbuf, sel.lnLast + , "@szLeft@/* delete end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6682. }
  6683. else
  6684. {
  6685. AppendBufLine(hbuf, "@szLeft@/* delete end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6686. }
  6687. SetBufIns(hbuf,sel.lnFirst + ,strlen(szLeft))
  6688. }
  6689.  
  6690. /*****************************************************************************
  6691. 函 数 名 : InsertReviseMod
  6692. 功能描述 : 插入修改注释对
  6693. 输出参数 : 无
  6694. 返 回 值 :
  6695. 调用函数 :
  6696. 被调函数 :
  6697.  
  6698. 修改历史 :
  6699. 1.日 期 : 2008年6月19日
  6700. 作 者 : 张强
  6701. 修改内容 : 新生成函数
  6702.  
  6703. *****************************************************************************/
  6704. macro InsertReviseMod()
  6705. {
  6706. hwnd = GetCurrentWnd()
  6707. sel = GetWndSel(hwnd)
  6708. hbuf = GetCurrentBuf()
  6709. lnMax = GetBufLineCount(hbuf)
  6710. language = getreg(LANGUAGE)
  6711. if(language != )
  6712. {
  6713. language =
  6714. }
  6715. szMyName = getreg(MYNAME)
  6716. if(strlen( szMyName ) == )
  6717. {
  6718. szMyName = Ask("Enter your name:")
  6719. setreg(MYNAME, szMyName)
  6720. }
  6721. SysTime = GetSysTime()
  6722. sz=SysTime.Year
  6723. sz1=SysTime.month
  6724. sz3=SysTime.day
  6725. if (sz1 < )
  6726. {
  6727. szMonth = "0@sz1@"
  6728. }
  6729. else
  6730. {
  6731. szMonth = sz1
  6732. }
  6733. if (sz3 < )
  6734. {
  6735. szDay = "0@sz3@"
  6736. }
  6737. else
  6738. {
  6739. szDay = sz3
  6740. }
  6741. //得到光标所选的字符左侧的空白部分,保存在szLeft中,目的是保证缩进
  6742. if(sel.lnFirst == sel.lnLast && sel.ichFirst == sel.ichLim)
  6743. {
  6744. szLeft = CreateBlankString(sel.ichFirst)
  6745. }
  6746. else
  6747. {
  6748. szLine = GetBufLine( hbuf, sel.lnFirst )
  6749. nLeft = GetLeftBlank(szLine)
  6750. szLeft = strmid(szLine,,nLeft);
  6751. }
  6752. szQuestion = GetReg ("PNO")
  6753. if(strlen(szQuestion)>)
  6754. {
  6755. InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* modify begin by @szMyName@, @sz@-@szMonth@-@szDay@, Mantis号:@szQuestion@ */");
  6756. }
  6757. else
  6758. {
  6759. InsBufLine(hbuf, sel.lnFirst, "@szLeft@/* modify begin by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6760. }
  6761.  
  6762. if(sel.lnLast < lnMax - )
  6763. {
  6764. InsBufLine(hbuf, sel.lnLast + , "@szLeft@/* modify end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6765. }
  6766. else
  6767. {
  6768. AppendBufLine(hbuf, "@szLeft@/* modif end by @szMyName@, @sz@-@szMonth@-@szDay@ */");
  6769. }
  6770. SetBufIns(hbuf,sel.lnFirst + ,strlen(szLeft))
  6771. }
  6772.  
  6773. // Wrap ifdef <sz> .. endif around the current selection
  6774. macro IfdefStr(sz)
  6775. {
  6776. hwnd = GetCurrentWnd()
  6777. lnFirst = GetWndSelLnFirst(hwnd)
  6778. lnLast = GetWndSelLnLast(hwnd)
  6779. hbuf = GetCurrentBuf()
  6780. lnMax = GetBufLineCount(hbuf)
  6781. if(lnMax != )
  6782. {
  6783. szLine = GetBufLine( hbuf, lnFirst )
  6784. }
  6785. nLeft = GetLeftBlank(szLine)
  6786. szLeft = strmid(szLine,,nLeft);
  6787.  
  6788. hbuf = GetCurrentBuf()
  6789. if(lnLast + < lnMax)
  6790. {
  6791. InsBufLine(hbuf, lnLast+, "@szLeft@#endif /* @sz@ */")
  6792. }
  6793. else if(lnLast + == lnMax)
  6794. {
  6795. AppendBufLine(hbuf, "@szLeft@#endif /* @sz@ */")
  6796. }
  6797. else
  6798. {
  6799. AppendBufLine(hbuf, "")
  6800. AppendBufLine(hbuf, "@szLeft@#endif /* @sz@ */")
  6801. }
  6802. InsBufLine(hbuf, lnFirst, "@szLeft@#ifdef @sz@")
  6803. SetBufIns(hbuf,lnFirst + ,strlen(szLeft))
  6804. }
  6805.  
  6806. /*****************************************************************************
  6807. 函 数 名 : IfndefStr
  6808. 功能描述 : 插入#ifndef语句对
  6809. 输入参数 : sz
  6810. 输出参数 : 无
  6811. 返 回 值 :
  6812. 调用函数 :
  6813. 被调函数 :
  6814.  
  6815. 修改历史 :
  6816. 1.日 期 : 2008年6月24日
  6817. 作 者 : 张强
  6818. 修改内容 : 新生成函数
  6819.  
  6820. *****************************************************************************/
  6821. macro IfndefStr(sz)
  6822. {
  6823. hwnd = GetCurrentWnd()
  6824. lnFirst = GetWndSelLnFirst(hwnd)
  6825. lnLast = GetWndSelLnLast(hwnd)
  6826. hbuf = GetCurrentBuf()
  6827. lnMax = GetBufLineCount(hbuf)
  6828. if(lnMax != )
  6829. {
  6830. szLine = GetBufLine( hbuf, lnFirst )
  6831. }
  6832. nLeft = GetLeftBlank(szLine)
  6833. szLeft = strmid(szLine,,nLeft);
  6834.  
  6835. hbuf = GetCurrentBuf()
  6836. if(lnLast + < lnMax)
  6837. {
  6838. InsBufLine(hbuf, lnLast+, "@szLeft@#endif /* @sz@ */")
  6839. }
  6840. else if(lnLast + == lnMax)
  6841. {
  6842. AppendBufLine(hbuf, "@szLeft@#endif /* @sz@ */")
  6843. }
  6844. else
  6845. {
  6846. AppendBufLine(hbuf, "")
  6847. AppendBufLine(hbuf, "@szLeft@#endif /* @sz@ */")
  6848. }
  6849. InsBufLine(hbuf, lnFirst, "@szLeft@#ifndef @sz@")
  6850. SetBufIns(hbuf,lnFirst + ,strlen(szLeft))
  6851. }
  6852.  
  6853. /*****************************************************************************
  6854. 函 数 名 : InsertPredefIf
  6855. 功能描述 : 插入#if语句对的入口调用宏
  6856. 输出参数 : 无
  6857. 返 回 值 :
  6858. 调用函数 :
  6859. 被调函数 :
  6860.  
  6861. 修改历史 :
  6862. 1.日 期 : 2008年6月24日
  6863. 作 者 : 张强
  6864. 修改内容 : 新生成函数
  6865.  
  6866. *****************************************************************************/
  6867. macro InsertPredefIf()
  6868. {
  6869. sz = Ask("Enter #if condition:")
  6870. PredefIfStr(sz)
  6871. }
  6872.  
  6873. /*****************************************************************************
  6874. 函 数 名 : PredefIfStr
  6875. 功能描述 : 在选择行前后插入#if语句对
  6876. 输入参数 : sz
  6877. 输出参数 : 无
  6878. 返 回 值 :
  6879. 调用函数 :
  6880. 被调函数 :
  6881.  
  6882. 修改历史 :
  6883. 1.日 期 : 2008年6月24日
  6884. 作 者 : 张强
  6885. 修改内容 : 新生成函数
  6886.  
  6887. *****************************************************************************/
  6888. macro PredefIfStr(sz)
  6889. {
  6890. hwnd = GetCurrentWnd()
  6891. lnFirst = GetWndSelLnFirst(hwnd)
  6892. lnLast = GetWndSelLnLast(hwnd)
  6893. hbuf = GetCurrentBuf()
  6894. lnMax = GetBufLineCount(hbuf)
  6895. if(lnMax != )
  6896. {
  6897. szLine = GetBufLine( hbuf, lnFirst )
  6898. }
  6899. nLeft = GetLeftBlank(szLine)
  6900. szLeft = strmid(szLine,,nLeft);
  6901.  
  6902. hbuf = GetCurrentBuf()
  6903. if(lnLast + < lnMax)
  6904. {
  6905. InsBufLine(hbuf, lnLast+, "@szLeft@#endif /* #if @sz@ */")
  6906. }
  6907. else if(lnLast + == lnMax)
  6908. {
  6909. AppendBufLine(hbuf, "@szLeft@#endif /* #if @sz@ */")
  6910. }
  6911. else
  6912. {
  6913. AppendBufLine(hbuf, "")
  6914. AppendBufLine(hbuf, "@szLeft@#endif /* #if @sz@ */")
  6915. }
  6916. InsBufLine(hbuf, lnFirst, "@szLeft@#if @sz@")
  6917. SetBufIns(hbuf,lnFirst + ,strlen(szLeft))
  6918. }
  6919.  
  6920. /*****************************************************************************
  6921. 函 数 名 : HeadIfdefStr
  6922. 功能描述 : 在选择行前后插入#ifdef语句对
  6923. 输入参数 : sz
  6924. 输出参数 : 无
  6925. 返 回 值 :
  6926. 调用函数 :
  6927. 被调函数 :
  6928.  
  6929. 修改历史 :
  6930. 1.日 期 : 2008年6月24日
  6931. 作 者 : 张强
  6932. 修改内容 : 新生成函数
  6933.  
  6934. *****************************************************************************/
  6935. macro HeadIfdefStr(sz)
  6936. {
  6937. hwnd = GetCurrentWnd()
  6938. lnFirst = GetWndSelLnFirst(hwnd)
  6939. hbuf = GetCurrentBuf()
  6940. InsBufLine(hbuf, lnFirst, "")
  6941. InsBufLine(hbuf, lnFirst, "#define @sz@")
  6942. InsBufLine(hbuf, lnFirst, "#ifndef @sz@")
  6943. iTotalLn = GetBufLineCount (hbuf)
  6944. InsBufLine(hbuf, iTotalLn, "#endif /* @sz@ */")
  6945. InsBufLine(hbuf, iTotalLn, "")
  6946. }
  6947.  
  6948. /*****************************************************************************
  6949. 函 数 名 : GetSysTime
  6950. 功能描述 : 取得系统时间,只在V2.1时有用
  6951. 输入参数 : a
  6952. 输出参数 : 无
  6953. 返 回 值 :
  6954. 调用函数 :
  6955. 被调函数 :
  6956.  
  6957. 修改历史 :
  6958. 1.日 期 : 2008年6月24日
  6959. 作 者 : 张强
  6960. 修改内容 : 新生成函数
  6961.  
  6962. *****************************************************************************/
  6963. macro GetSysTime(a)
  6964. {
  6965. //从sidate取得时间
  6966. RunCmd ("sidate")
  6967. SysTime=""
  6968. SysTime.Year=getreg(Year)
  6969. if(strlen(SysTime.Year)==)
  6970. {
  6971. setreg(Year,"")
  6972. setreg(Month,"")
  6973. setreg(Day,"")
  6974. SysTime.Year=""
  6975. SysTime.month=""
  6976. SysTime.day=""
  6977. SysTime.Date="2008年05月20日"
  6978. }
  6979. else
  6980. {
  6981. SysTime.Month=getreg(Month)
  6982. SysTime.Day=getreg(Day)
  6983. SysTime.Date=getreg(Date)
  6984. /* SysTime.Date=cat(SysTime.Year,"年")
  6985. SysTime.Date=cat(SysTime.Date,SysTime.Month)
  6986. SysTime.Date=cat(SysTime.Date,"月")
  6987. SysTime.Date=cat(SysTime.Date,SysTime.Day)
  6988. SysTime.Date=cat(SysTime.Date,"日")*/
  6989. }
  6990. return SysTime
  6991. }
  6992.  
  6993. /*****************************************************************************
  6994. 函 数 名 : HeaderFileCreate
  6995. 功能描述 : 生成头文件
  6996. 输出参数 : 无
  6997. 返 回 值 :
  6998. 调用函数 :
  6999. 被调函数 :
  7000.  
  7001. 修改历史 :
  7002. 1.日 期 : 2008年6月19日
  7003. 作 者 : 张强
  7004. 修改内容 : 新生成函数
  7005.  
  7006. *****************************************************************************/
  7007. macro HeaderFileCreate()
  7008. {
  7009. hwnd = GetCurrentWnd()
  7010. if (hwnd == )
  7011. stop
  7012. sel = GetWndSel(hwnd)
  7013. hbuf = GetWndBuf(hwnd)
  7014. language = getreg(LANGUAGE)
  7015. if(language != )
  7016. {
  7017. language =
  7018. }
  7019. szMyName = getreg(MYNAME)
  7020. if(strlen( szMyName ) == )
  7021. {
  7022. szMyName = Ask("Enter your name:")
  7023. setreg(MYNAME, szMyName)
  7024. }
  7025.  
  7026. CreateFunctionDef(hbuf,szMyName,language)
  7027. }
  7028.  
  7029. /*****************************************************************************
  7030. 函 数 名 : FunctionHeaderCreate
  7031. 功能描述 : 生成函数头
  7032. 输出参数 : 无
  7033. 返 回 值 :
  7034. 调用函数 :
  7035. 被调函数 :
  7036.  
  7037. 修改历史 :
  7038. 1.日 期 : 2008年6月19日
  7039. 作 者 : 张强
  7040. 修改内容 : 新生成函数
  7041.  
  7042. *****************************************************************************/
  7043. macro FunctionHeaderCreate()
  7044. {
  7045. hwnd = GetCurrentWnd()
  7046. if (hwnd == )
  7047. stop
  7048. sel = GetWndSel(hwnd)
  7049. ln = sel.lnFirst
  7050. hbuf = GetWndBuf(hwnd)
  7051. language = getreg(LANGUAGE)
  7052. if(language != )
  7053. {
  7054. language =
  7055. }
  7056. szMyName = getreg(MYNAME)
  7057. if(strlen( szMyName ) == )
  7058. {
  7059. szMyName = Ask("Enter your name:")
  7060. setreg(MYNAME, szMyName)
  7061. }
  7062. nVer = GetVersion()
  7063. lnMax = GetBufLineCount(hbuf)
  7064. if(ln != lnMax)
  7065. {
  7066. szNextLine = GetBufLine(hbuf,ln)
  7067. if( (strstr(szNextLine,"(") != 0xffffffff) || (nVer != ))
  7068. {
  7069. symbol = GetCurSymbol()
  7070. if(strlen(symbol) != )
  7071. {
  7072. if(language == )
  7073. {
  7074. FuncHeadCommentCN(hbuf, ln, symbol, szMyName,)
  7075. }
  7076. else
  7077. {
  7078. FuncHeadCommentEN(hbuf, ln, symbol, szMyName,)
  7079. }
  7080. return
  7081. }
  7082. }
  7083. }
  7084. if(language == )
  7085. {
  7086. szFuncName = Ask("请输入函数名称:")
  7087. FuncHeadCommentCN(hbuf, ln, szFuncName, szMyName, )
  7088. }
  7089. else
  7090. {
  7091. szFuncName = Ask("Please input function name")
  7092. FuncHeadCommentEN(hbuf, ln, szFuncName, szMyName, )
  7093.  
  7094. }
  7095. }
  7096.  
  7097. /*****************************************************************************
  7098. 函 数 名 : GetVersion
  7099. 功能描述 : 得到Si的版本号
  7100. 输出参数 : 无
  7101. 返 回 值 :
  7102. 调用函数 :
  7103. 被调函数 :
  7104.  
  7105. 修改历史 :
  7106. 1.日 期 : 2008年6月19日
  7107. 作 者 : 张强
  7108. 修改内容 : 新生成函数
  7109.  
  7110. *****************************************************************************/
  7111. macro GetVersion()
  7112. {
  7113. Record = GetProgramInfo ()
  7114. return Record.versionMajor
  7115. }
  7116.  
  7117. /*****************************************************************************
  7118. 函 数 名 : GetProgramInfo
  7119. 功能描述 : 获得程序信息,V2.1才用
  7120. 输出参数 : 无
  7121. 返 回 值 :
  7122. 调用函数 :
  7123. 被调函数 :
  7124.  
  7125. 修改历史 :
  7126. 1.日 期 : 2008年6月19日
  7127. 作 者 : 张强
  7128. 修改内容 : 新生成函数
  7129.  
  7130. *****************************************************************************/
  7131. macro GetProgramInfo ()
  7132. {
  7133. Record = ""
  7134. Record.versionMajor =
  7135. Record.versionMinor =
  7136. return Record
  7137. }
  7138.  
  7139. /*****************************************************************************
  7140. 函 数 名 : FileHeaderCreate
  7141. 功能描述 : 生成文件头
  7142. 输出参数 : 无
  7143. 返 回 值 :
  7144. 调用函数 :
  7145. 被调函数 :
  7146.  
  7147. 修改历史 :
  7148. 1.日 期 : 2008年6月19日
  7149. 作 者 : 张强
  7150. 修改内容 : 新生成函数
  7151.  
  7152. *****************************************************************************/
  7153. macro FileHeaderCreate()
  7154. {
  7155. hwnd = GetCurrentWnd()
  7156. if (hwnd == )
  7157. stop
  7158. ln =
  7159. hbuf = GetWndBuf(hwnd)
  7160. language = getreg(LANGUAGE)
  7161. if(language != )
  7162. {
  7163. language =
  7164. }
  7165. szMyName = getreg(MYNAME)
  7166. if(strlen( szMyName ) == )
  7167. {
  7168. szMyName = Ask("Enter your name:")
  7169. setreg(MYNAME, szMyName)
  7170. }
  7171. SetBufIns (hbuf, , )
  7172. if(language == )
  7173. {
  7174. InsertFileHeaderCN( hbuf,ln, szMyName,"" )
  7175. }
  7176. else
  7177. {
  7178. InsertFileHeaderEN( hbuf,ln, szMyName,"" )
  7179. }
  7180. }

代码非原创,如有侵权,请联系删除

SourceInsight宏插件2(非常好用,强力推荐)的更多相关文章

  1. SourceInsight宏插件1(非常好用,强力推荐)

    对于一直使用sourceinsight编辑C/C++代码的工程师们,sourceinsight是一个非常好用的编辑工具可以任意定位,跳转,回退,本人一直使用该工具做C/C++开发,sourceinsi ...

  2. SourceInsight宏插件3(非常好用,强力推荐)

    openfolder.em源码:(链接:https://pan.baidu.com/s/1draaimWzCHZ3vLxL--lfiQ  提取码:zyq4) //使用资源管理器打开当前文件所在文件夹, ...

  3. 利用sourceinsight宏(Quicker.em)提高编码效率和质量

    利用sourceinsight宏(Quicker.em)提高编码效率和质量Marco是sourceinsight软件一个强大的功能,用户可以通过编写宏来实现自定义功能.这里有个比较流行的宏文件quic ...

  4. 非常适用的Sourceinsight插件,提高效率【强力推荐】

    转自:http://www.cnblogs.com/heiyue/p/6225975.html 一直使用sourceinsight编辑C/C++代码,sourceinsight是一个非常好用的编辑工具 ...

  5. quicker+.em SourceInsight 宏加强版制作

    这两天苦于新建的文件每次都要手动添加文件头,新建的函数每次都要手动添加函数说明,连.h也要手动生成.于是乎,上网搜了搜,发现了lushengwen写的一个神器:quicker.em .好家伙,有了这个 ...

  6. 我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!

    本文来自:http://blog.csdn.net/ouyang_peng/article/details/11358405 今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超 ...

  7. 如何让Ubuntu系统支持WebP图片格式

    本文主要向大家介绍如何让 Ubuntu 系统支持查看 WebP 图片格式,以及如何将 WebP 转为 JPEG 或 PNG 图片格式的方法. 什么是WebP图片 Google开发并推出 WebP 图片 ...

  8. excel多个sheet表拆分成独立的excel文件

    一.问题: 公司做一个项目,给的用户上报文是一个包含多个sheet页的excel文件, 但是在实际处理报文数据的时候需要拆分excel文件为多个独立的报文excel文件 二.解决: (1)一个一个的复 ...

  9. 性能测试之nmon对linux服务器的监控

    大家都知道在做性能测试的时候,需要监控服务器的资源情况,而大多数服务器是Linux系统,网上资料嘿多,这里汇总介绍下Nmon监控工具: -------------------------------- ...

随机推荐

  1. 为什么使用zookeeper?

    随着应用规模的迅速扩张,单台机器的部署已经难以支撑用户大规模.高并发的请求了, 因此服务化.集群化.分布式概念应运而生. 针对这种场景,人们通常使用的做法就是将软件按照模块进行拆分,形成独立的子系统, ...

  2. cafee编译错误几个总结

    1.CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin .build_release/lib/libcaf ...

  3. KendoUi 学习笔记(二) Grid

    Kendo.ui.Grid Kendo Ui Grid控件,继承至Widget. 一.构造       allowCopy    Boolen|Object  (默认:false) 当他设置true, ...

  4. linux安装openssl

    1.简介 给网站配置http2发现openssl版本不够,只能靠升级openssl了,shell让安装不再麻烦. 系统环境 centos 7.4 64位 安装 openssl1.1.1a版本 2.查看 ...

  5. python基础15下_迭代器_生成器

    print(dir([])) #告诉我列表拥有的所有方法 # 双下方法 # print([1].__add__([2])) print([1]+[2]) ret = set(dir([]))& ...

  6. python学习笔记3-函数

    一.函数高级特性 1)列表生成式,列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. eg: >>> list(r ...

  7. openSUSE安装Qt5

    找了很多资料发现没一个好用又简单的. 终于在wiki.qt.io上找到了一个! 安装方法如下: 1下载安装包,我建议最好下载离线包.下载链接http://download.qt.io/archive/ ...

  8. 浅谈java中的祖先类Object

    首先一道题: public class User{ private String name; private int age; public String getName() { return nam ...

  9. linux 常用命令积累

    工作中常用的linux记录一下,方便查询使用 1.ln 创建连接 ,就是window上的快捷方式 创建软连接  ln -s 源文件 目标文件名   经常访问的文件夹(项目文件夹),在~创建一个软连很方 ...

  10. 连接mysql用mysql_connect不能连接

    用mysqli_connect就可以解决. mysqli_array()有连个参数,第一个是连接mysql名. php遇到这个警告Warning: Use of undefined constant ...