source insight使用

合集下载

sourceinsight用法

sourceinsight用法

sourceinsight用法sourceinsight是一个非常实用的源代码阅读工具,它可以帮助程序员更加方便地阅读和理解源代码。

本文将介绍sourceinsight的安装、配置和使用方法。

一、安装sourceinsight下载sourceinsight的安装包,双击运行,按照提示进行安装即可。

安装完成后,打开sourceinsight,会看到一个欢迎界面。

二、配置sourceinsight1.配置语言sourceinsight支持多种编程语言,我们需要配置它支持的语言。

点击“选项”菜单,选择“语言配置”,在弹出的对话框中勾选需要支持的语言,如C、C++、Java等。

勾选完成后,点击“确定”按钮保存配置。

2.配置字体sourceinsight默认的字体可能不太适合我们的阅读习惯,我们可以修改字体。

点击“选项”菜单,选择“字体配置”,在弹出的对话框中选择需要修改的字体,如“文本字体”、“注释字体”、“关键字字体”等。

修改完成后,点击“确定”按钮保存配置。

3.配置颜色sourceinsight默认的颜色也可能不太适合我们的阅读习惯,我们可以修改颜色。

点击“选项”菜单,选择“颜色配置”,在弹出的对话框中选择需要修改的颜色,如“文本颜色”、“注释颜色”、“关键字颜色”等。

修改完成后,点击“确定”按钮保存配置。

4.配置文件类型sourceinsight默认只支持几种文件类型,如果我们需要阅读其他类型的文件,需要手动添加支持的文件类型。

点击“选项”菜单,选择“文件类型配置”,在弹出的对话框中点击“添加”按钮,输入需要添加的文件类型,如“*.py”、“*.html”等。

添加完成后,点击“确定”按钮保存配置。

三、使用sourceinsight1.打开文件点击“文件”菜单,选择“打开文件”,在弹出的对话框中选择需要打开的文件,点击“打开”按钮即可打开文件。

2.导航代码sourceinsight可以帮助我们更加方便地导航代码。

SourceInsight使用教程

SourceInsight使用教程

SourceInsight使用教程
一.创建工程,添加源程序
1.打开Source Insight4.0,工具栏选择Project -> New Project,将弹出下列框图:
2.点击OK后,会弹出下列框图,填入工程的名称,以及工程文件生成的目录
3.点击OK后,如下图:
其中:
Add :基本的文件添加操作
Add All :添加整个工程所有的源文件(然后再选择是否递归添加子目录中的源文件,见上图对话框)
Add Tree :添加指定的文件夹以及其子目录下的源代码文件
Remove Tree :和Add Tree的功能相反
File Name可以不用写,完成点击close.
4.如没有出现下图,红色区域的栏目,按Ctrl + O即可
5.将添加的代码进行同步,生成阅读代码的索引和辅助文件,方便对源代码进行阅读;点击Project-->synchronization file,会弹出下图框图:
6.选择语言和后缀名的文件,点击Options-->File type Options,弹出下图框图:。

SourceInsight的几个经典用法

SourceInsight的几个经典用法

SourceInsight的几个经典用法1.如何找回失去的context windowcontext window 在看程序时很有用,当用户指向某个函数或变量时,在context window中都会有该变量或函数的定义;但有时会为了增加程序的容量或者不小心,将context window变成独立窗口,sourceinsight没有简单的菜单来恢复它。

下面介绍一种网上流传的方法:步骤为:•运行source insight, 点击Options->Save Configuration.选择“All settings”,点击"save"按钮。

•当“保存”对话框打开时,记下配置文件被保存的目录,它一般有以下形式:“My Documents/Source Insight/Setting”,退出,并不保存配置。

•找到上步中,配置文件中叫“GLOBAL.CF3”的文件,复制它,并重命名为如“OLD.CF3”的形式。

•重新启动SourceInsight,选择 Options->Load Configuration,去掉随之出现的对话框最上面复选框,同时选择"Display and Windows",点击右则的load按钮,在出现的对话框中,选择OLD.CF3配置文件。

•加载OLD配置文件后,再选择View->context window,消失的context window又会出现在你的面前。

2. SourcInsight中的标签在看程序时,有时会作比较,当在程序中看到相似处;或者修改程序时,要从一处搬代码到另一处且添加代码与源代码不在一个页面时,如何快速切换,这是个问题。

运用组合快捷键Ctrl+M,可以在一处记下一个书签,如果下一次想跳到这个地方来时,再次按下Ctrl+M,找到相应的书签,就可以快速的切换。

3.SourceInsight在任务地方都能打开对应的文件技巧:SourceInsight一般用来看程序,不用来编辑编译程序。

Source_Insight教程及技巧

Source_Insight教程及技巧

Source Insight 使用简单说明Source Insight 是一个功能十分强大、使用也很方便的程序编辑器。

它内置对 C/C++、Java 甚至 x86 汇编语言程序的解析,在你编程时提供有用的函数、宏、参数等提示,因而,Source Insight 正在国际、国内众多的 IT 公司使用。

Source Insight 功能强大,它的窗口、菜单初一看来似乎很多,所以刚刚开始使用 Source Insight 的朋友往往觉得很麻烦。

这里本人结合自己的使用经验,简单说说 Source Insight 的 使用。

(本文以 McuSystem 为例,Source Insight 以 3.0 版本为例。

其他版本的 Source Insight 大同小异)和众多程序编辑环境一样,Source Insight 中也有 Project 。

建立工程的方法很简单:打开Source Insight ,选择 Project 菜单->New Project ; 在出现的对话框 中 选择并选择存放工程文件的文件夹,输入工程名(比如McuSystem ),点击“保存”;又出现一个对话框,在 Configuration 部分可以选择这个工程使用全局配置文件还是自己单独的配置文件,这个无所谓,(不过最好选择单独的配置文件),再点击“OK ”;再次出现一个对话框,这是选择文件添加到 Project 中,通过左边的树状图找到你想添加的文件,点击 Add 就可以了(如图 1)。

你可以将不通路径下的文件添加到同一个工程中,而不用拷贝源文件。

选择完后点击 Close ;1. 2. 3. 4. 图 1这样工程就建立好了,文件列表就出现在 Project Window 中(如果 Project Window 被关 闭了,可以选中 View 菜单->Project Window )。

点击 Project Window 中任意一个文件,文件 的内容出现在中央的编辑区了。

集成开发环境之Source Insight使用教程

集成开发环境之Source Insight使用教程
Source Insight 提供了快速和革新的访问源代码和源信息的能力。与众多其
它编辑器产品不同,Source Insight能在你编辑的同时分析你的源代码,为你
提供实用的信息并立即进行分析。
让编程更简单更高效更规范
项目管理(1)

新建一个项目
快捷键 Alt + Shift + N 可以打开新建项目对话框,然后根据提示填好项目存
文档窗口-文档类型选项窗口
Alt + Y 打开文 档类型选项窗 口,修改字体 显示大小、是
否显示行号、
解析语言选择、 工程文件过滤、 扩展tab键、 是否显示符号 窗口等。
文档窗口(3)
扩充1:Source Insight可以定义风格,菜单栏->选项->风格,即可以打开风
格窗口,可以新建一个风格或修改一个风格。风格可以继承(和C++继承差 不多)。
储位置,源文件位置等。然后会出现添加删除项目文件对话框,选中自己
想要编辑和浏览的文件添加即可,这样就建好了一个项目。

添加和删除项目文件

在添加删除文件前,可以先设置文件过滤器,菜单栏->选项->文档选项, 就可以看到文件过滤器了,怎么设置应该是一目了然的。

菜单栏->项目->添加或删除文件,即可打开添加和删除项目文件对话框。
quicker.em的使用
首先将这个文件加载到Base工程中,其次要定义一个快捷键调用
quicker.em中的宏 AutoExpand。
调用 AutoExpand 宏后,AutoExpand会根据当前文本内容自动调用
其他宏。
一般情况下都用快捷键 Ctrl + Enter 调用AutoExpand宏。 quicker.em 包括标准C语言扩展,标准说明生成,代码修改注释等。 quicker.em 的使用参考《Quicker使用说明.doc》

sourceinsight4用法

sourceinsight4用法

sourceinsight4用法SourceInsight是一款用于软件开发的集成开发环境(IDE),它主要用于代码浏览、编辑和导航等操作。

下面是一些SourceInsight的用法:1. 导入项目:打开SourceInsight后,可以选择“导入”或者“新建”项目,将你的代码文件导入到SourceInsight中。

2. 代码浏览:在SourceInsight的主界面,可以通过左侧的目录树来浏览和查看代码文件。

选中文件后,可以在右侧的编辑器中查看和编辑代码。

3. 代码导航:SourceInsight提供了多种导航功能,可以快速定位和跳转到代码中的特定位置。

例如,可以使用“跳转到定义”功能来查看变量或函数的定义位置。

4. 代码搜索:可以使用SourceInsight的搜索功能来查找特定的代码片段。

可以使用快捷键Ctrl+F来启动搜索功能,并输入你要查找的关键字。

5. 代码补全:SourceInsight具有代码补全功能,可以根据已输入的代码自动补全代码片段。

可以使用快捷键Ctrl+空格来触发代码补全。

6. 代码格式化:SourceInsight支持代码的格式化和美化,可以让代码更加清晰易读。

可以使用快捷键Ctrl+K+F来快速格式化选定的代码。

7. 代码调试:SourceInsight支持代码调试,可以在调试过程中查看变量、执行跟踪等操作。

可以使用快捷键F5来启动调试功能。

8. 插件扩展:SourceInsight支持通过插件来扩展功能。

可以根据自己的需要安装、配置和使用各种插件。

需要注意的是,以上是一些常见的用法,实际使用中可能会有一些差异和个性化的配置。

你可以根据自己的需求和习惯来使用和配置SourceInsight。

Source_Insight使用教程

Source_Insight使用教程

作为一个开放源代码的操作系统,Linux附带的源代码库使得广大爱好者有了一个广泛学习、深入钻研的机会,特别是 Linux内核的组织极为复杂,同时,又不能像windows平台的程序一样,可以使用集成开发环境通过察看变量和函数,甚至设置断点、单步运行、调试等手段来弄清楚整个程序的组织结构,使得Linux内核源代码的阅读变得尤为困难。

当然Linux下的vim和emacs编辑程序并不是没有提供变量、函数搜索,彩色显示程序语句等功能。

它们的功能是非常强大的。

比如,vim和emacs就各自内嵌了一个标记程序,分别叫做ctag 和etag,通过配置这两个程序,也可以实现功能强大的函数变量搜索功能,但是由于其配置复杂,linux附带的有关资料也不是很详细,而且,即使建立好标记库,要实现代码彩色显示功能,仍然需要进一步的配置(在另一片文章,我将会讲述如何配置这些功能),同时,对于大多数爱好者来说,可能还不能熟练使用vim和 emacs那些功能比较强大的命令和快捷键。

为了方便的学习Linux源程序,我们不妨回到我们熟悉的window环境下,也算是“师以长夷以制夷”吧。

但是在Window平台上,使用一些常见的集成开发环境,效果也不是很理想,比如难以将所有的文件加进去,查找速度缓慢,对于非Windows 平台的函数不能彩色显示。

于是笔者通过在互联网上搜索,终于找到了一个强大的源代码编辑器,它的卓越性能使得学习Linux内核源代码的难度大大降低,这便是Source Insight3.0,它是一个Windows平台下的共享软件,由于Source Insight是一个Windows平台的应用软件,所以首先要通过相应手段把Linux系统上的程序源代码弄到Windows平台下,这一点可以通过在 linux平台上将/usr/src目录下的文件拷贝到Windows平台的分区上,或者从网上光盘直接拷贝文件到Windows平台的分区来实现。

source insight的简单操作

source insight的简单操作

source insight的简单操作Source Insight是一款功能强大的源代码阅读器和编辑器,它能够帮助程序开发人员更加高效地阅读、浏览和编辑源代码。

本文将介绍Source Insight的一些简单操作,以帮助读者快速上手使用这款工具。

一、安装和启动我们需要下载并安装Source Insight软件。

安装完成后,双击桌面上的快捷方式或在开始菜单中找到Source Insight并点击打开。

这样就成功启动了Source Insight。

二、打开源代码文件在Source Insight的菜单栏中,点击“文件”-“打开”选项,选择要打开的源代码文件,然后点击“打开”按钮。

Source Insight 支持多种编程语言的源代码文件,比如C、C++、Java等。

三、浏览源代码Source Insight的界面分为多个窗口,包括文件视图、函数视图、符号视图等。

通过点击不同的选项卡,可以在不同的视图之间切换。

在文件视图中,可以浏览源代码文件的内容,并进行查找、替换等操作。

四、导航代码Source Insight提供了一系列导航功能,帮助开发人员快速定位代码的位置。

比如,可以使用“Go To”菜单中的选项,跳转到光标所在函数的定义处或者跳转到光标所在的变量的声明处。

五、代码补全Source Insight还提供了代码补全功能,可以根据已有的代码上下文,自动补全代码。

在输入代码时,按下“Tab”键或者使用快捷键“Ctrl+Space”,Source Insight会自动弹出代码补全列表,选择对应的代码即可。

六、代码分析Source Insight可以对源代码进行静态分析,帮助开发人员发现潜在的问题或者改进的空间。

比如,可以通过右键点击函数名,选择“Analyze”选项,Source Insight会分析该函数的调用关系并给出相应的提示。

七、书签功能Source Insight的书签功能可以帮助开发人员快速定位到重要的代码位置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SourceInsight使用技巧(转)配置成简单好用的c/java代码编辑器1、缩进与tab(1)Options菜单→Preferences→Typing卡,勾掉下面两项∶Typing tab indents line,regardless of selection,空行按tab无法前进Typing tab replaces current selection,选定部分内容、再按tab时会清除所选(2)Options菜单→Document Options(针对不同文件类型,分别进行设置)→下拉左上文件类型框、选择合适类型(c源文件)→Editing Options框中,tab width=2→ Editing Options 框中,勾选Expand tabs(这样,按tab键、等价于输入2个空格)(3)Options菜单→Document Options→选择合适的文件类型→点击右边中间的Auto Indent钮→在弹出的框中,左边一定要点Smart,右边有两个复选框Indent Open Brace和Indent Close Brace,具体效果可以看SIS的HELP。

按照部门里的编程风格要求,最方便的就是把两个复选框都取消掉,然后点OK。

勾选Auto Indent之SMART的效果∶在C程序里, 如果遇到行末没有分号的语句,如IF, WHILE, SWITCH等, 写到该行末按回车,则新行自动相对上一行缩进两列。

勾掉Indent Open Brace和Indent Close Brace的效果∶继上一段,在相对缩进行里, 如果输入"}", 则自动和上一行列对齐(好像勾不勾都会有这个功能);而输入"{"时,不会与下面的行对齐(这是勾上Indent Open Brace时的效果)。

2、向项目中添加文件时,只添加特定类型的文件(文件类型过滤器)有个同事比较生猛,得整汇编代码,但在SIS里建立PROJECT并ADD TREE的时候,根据默认设置并不会把该TREE里面所有汇编文件都包含进来,只加了.inc和.asm后缀的,.s后缀的没有。

而且用SIS打开.s的文件,一片黑白没有色彩,感觉回到DOS的EDIT时代了……解决方法是在Options->Document Options里面,点左上的Document Type下拉菜单,选择x86 Asm Source File,然后在右边的File filter里*.asm;*.inc;的后面加上*.s;接着CLOSE就可以了。

上面两个问题解决了,但注意加入*.s后还需要重新ADD TREE一遍才能把这些汇编加到PROJECT里面。

Options菜单→Preferences →Typing卡→Auto Completion框,勾掉Use automatic symbol completion window(这里是SIS的全局设置)Options菜单→Document Options→Editing Options框中,勾掉Allow auto-complete(局部设置)上面两项必须全部勾选,才能启用Auto Completion功能Options菜单→Key assignments,通过关键词Scroll 找到Scroll Half Page Up,取消小键盘/;通过关键词Scroll 找到Scroll Half Page Down取消小键盘*;通过关键词Function找到Function Up,取消小键盘-,通过关键词Function找到Function down,取消小键盘+。

通过关键词save 找到save all,更改为ctrl+shift+a,通过关键词select找到select all,更改为ctrl +aSIS默认字体是VERDANA,很漂亮。

这网页上应该也是用的VERDANA字体。

但由于美观的缘故,VERDANA字体是不等宽的。

比如下面两行llllllllllMMMMMMMMMM同样10个字符,长度差多了.用VERDANA来看程序,有些本应该对齐的就歪了。

解放方法是使用等宽的字体,但肯定比较丑。

可以用DOS字体,也就是记事本里的默认字体sysfixed 很丑,要有心理准备。

比较推荐的是用Courier New。

SourceInsight提供的功能1、解析日志信息时非常有用的Source Link总地说来,SourceLink根据特定的搜索模式,把当前文件中满足模式的行、链接到由该行指定的其他源文件中。

所谓特定的搜索模式,共有两种“File, then line”和“Line, then file”,其中前后两部分依靠正则表达式的组的概念来予以分割。

如果当前文件具有匹配行,比如“Error d:tcsrcq5.c 18: Lvalue required in function jsSort”,那么SourceInsight在该行创建SourceLink、把该行链接到由该行指定的文件中(即d:tcsrcq5.c,第18行)。

1.1 创建SourceLink运行Search菜单的Parse Source Links…命令,在弹出的框中、选择搜索模式、并填入相应的正则表达式串,点OK,SIS就会解析当前文件,如果有匹配,就创建SourceLink。

1.2 在解析日志信息时,使用SourceLink可以打开日志信息,运行Parse Source Links命令,日志中能够匹配模式的每一行(通常是含有错误信息的行)、就会被设置上一个SourceLink1.3在解析自定义命令输出时,使用SourceLink首先勾选Custom Command 中的“Parse Links in Output”,然后选择特定的搜索模式,最后填入合适的正则表达式。

这样,Source Insight把输出信息作为当前搜索用文件;并且,如果有匹配行(通常即编译错误信息行),SIS为该行创建SourceLink、并把每一个错误信息中给定的文件(和行号)作为link目的地,这对于我们修改源代码错误非常有帮助。

2、替换(Replace)VS 上下文敏感的智能重命名(Context-Sensitive Smart Rename)2.1 替换(Replace)目前来说,普通的替换命令、快捷键为ctrl+H,足以已满足工作要求。

在弹出的替换窗口中,在Search框中勾选Selection来只在所选文本区域中替换(当然这时你要先选定区域然后再按ctrl+H)、勾选WholeFile来在整个当前文件内替换、两者都不勾选来从当前光标处替换至文件末尾;点右边的Files…按钮,可选择替换多个文件的内容。

(2)如果勾掉Smart Reference Matching,会搜索全部项目文件,并且Old Name框中不显示完全限定名;如果勾选Smart Reference Matching,无法重命名数组名,而且鼠标位置不正确时会报错。

应该如何应对?3、在SourceInsight中提供的正则表达式3.1在SourceInsight中提供的正则表达式正则表达式,是用来匹配复杂模式的特殊搜索用字符串。

正则表达式串中,许多字符具有特殊的含义。

例如,有个特殊的字符代表“行首”。

下面是SourceInsight提供的所有可用特殊字符∶Table 4.3: Regular Expression CharactersCharacter Matches^ (at the beginning only)beginning of line。

如^Hello,匹配Hello在句首。

.any single character[abc]any single character that belongs to the set abc[^abc]any single character that does not belong to the set abc*zero or more occurrences of the preceding character+one or more occurrences of the preceding charactert a tab characters a space characterw white space (a tab or a space character)我的JAVA_HOME是c:jdk,我的java源文件放于d:javasrc中,并命名为qn.java或qtn.java (其中n=1,2,…)。

观察JDK编译器某一次输出错误信息的格式∶D:javasrcQ3.java:3: ';' expected正则表达式为∶([dD]:javasrc[qQ][tT]*[1-9][0-9]*.java):([1-9][0-9]*)4、自定义命令自定义命令与项目相关,在一个项目中定义的所有自定义命令属于该项目、只对该项目有效(包括快捷键等)。

自定义命令类似于命令行批处理文件。

SIS允许自定义命令在后台运行;并可以捕捉自定义命令的输出、放置于文件中、或粘贴入当前光标插入点。

分别利用上面SIS对输出信息的处理方式,自定义命令对集成编译器相当有用,可以捕捉编译器输出并创建SourceLink寻错;自定义命令对于文本过滤也相当有用,可选中待过滤区块、运行Sort自定义命令、粘贴回选定区块、即完成文本过滤。

请按下面步骤创建自定义命令∶Options菜单→Custom Command→点右边Add钮、填入新自定义命令名称,或下拉左边Commands、选择命令进行修改→Run框、填入待执行命令行,可含有特殊元字符,见后面的元字符表→Dir框、执行命令行时应处的目录,如不填,以源代码文件所在目录为命令执行目录→勾选Output框的Capture Output、输出被捕捉,如果勾选Paste Output,输出被粘贴→勾选Control Group框中的Save Files First、SIS会在运行命令前先检查文件是否保存→勾选Control Group框中的Pause When Done、SIS会在命令结束后暂停、方便检查→勾选Source Links in Output框中的Parse Source Links,?/p>source insight常用宏转自:/Jupin/archive/2005/02/04/281020.aspx说明:该宏文件实现一些编码程中能会到的功能, 如添加文件头、函数说明和宏定义等, 使用时能自动添加文件名、函数名和当前日期.使用说明:1. Project->Open Project... 打开Base工程(该工程一般在"我的文档\SourceInsight\Projects\Base"中);2. Project->Add and Remove Project Files... 加入宏文件(即Gaoke.em);3. Options->Menu Assignments 打开Menu Assignments窗口, 在Command中输入Macro, 选中要使用的宏, 添加到合适的菜单中./*附上宏定义文件*//* t357.em - a small collection of useful editing macros *//*************************************************************************** **** InsFileHeader -- insert the information of file** modification history* --------------------* 01a, 23mar2003, added DESCRIPTION by t357* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***//*-------------------------------------------------------------------------I N S E R T H E A D E RInserts a comment header block at the top of the current function.This actually works on any type of symbol, not just functions.To use this, define an environment variable "szMyName" and set itto your email name. eg. set szMyName=raygr-------------------------------------------------------------------------*/macro InsFileHeader(){/*####################################################### ######################################################### ######### Set szMyName variable to your name ############### for example szMyName = "t357" ############################################################### ######################################################### ##*/szMyName = ""// Get current timeszTime = GetSysTime(1)Day = szTime.DayMonth = szTime.MonthYear = szTime.Yearif (Day < 10)szDay = "0@Day@"elseszDay = DayszMonth = NumToName(Month)hBuf = GetCurrentBuf()szpathName = GetBufName(hBuf)szfileName = GetFileName(szpathName)nlength = StrLen(szfileName)szInf = Ask("Enter the information of file:")szDescription = Ask("Enter the description of file:")hbuf = GetCurrentBuf()// begin assembling the title stringInsBufLine(hbuf, 0,"/************************************************************************** ****")InsBufLine(hbuf, 1, " * @szfileName@ - @szInf@")InsBufLine(hbuf, 2, " * ")InsBufLine(hbuf, 3, " * Copyright 1998-2003 Guangzhou Gaoke Communication Technology Co.,Ltd.")InsBufLine(hbuf, 4, " * ")InsBufLine(hbuf, 5, " * DESCRIPTION: - ")InsBufLine(hbuf, 6, " * @szDescription@")InsBufLine(hbuf, 7, " * modification history")InsBufLine(hbuf, 8, " * --------------------")InsBufLine(hbuf, 9, " * 01a, @szDay@@szMonth@@Year@, @szMyName@ written")InsBufLine(hbuf, 10, " * --------------------")InsBufLine(hbuf, 11, "**************************************************************************** **/")// put the insertion point inside the header commentSetBufIns(hbuf, 1, nlength + strlen(szInf) + 8)}/*************************************************************************** **** InsFunHeader -- insert function's information** modification history* --------------------* 01a, 23mar2003, added DESCRIPTION by t357* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro InsFunHeader(){// Get the owner's name from the environment variable: szMyName.// If the variable doesn't exist, then the owner field is skipped./*####################################################### ######################################################### ######### Set szMyName variable to your name ############### for example szMyName = "t357" ############################################################### ######################################################### ##*/szMyName = ""// Get a handle to the current file buffer and the name// and location of the current symbol where the cursor is.hbuf = GetCurrentBuf()szFunc = GetCurSymbol()ln = GetSymbolLine(szFunc)// Get current timeszTime = GetSysTime(1)Day = szTime.DayMonth = szTime.MonthYear = szTime.Yearif (Day < 10)szDay = "0@Day@"elseszDay = DayszMonth = NumToName(Month)szInf = Ask("Enter the information of function:")szDescription = Ask("Enter the description of function:")// begin assembling the title stringsz ="/************************************************************************** ****"InsBufLine(hbuf, ln, sz)InsBufLine(hbuf, ln + 1, " * @szFunc@ - @szInf@")InsBufLine(hbuf, ln + 2, " * DESCRIPTION: - ")InsBufLine(hbuf, ln + 3, " * @szDescription@ ")// remove by t357. CutWord(szDescription)InsBufLine(hbuf, ln + 4, " * Input: ")InsBufLine(hbuf, ln + 5, " * Output: ")InsBufLine(hbuf, ln + 6, " * Returns: ")InsBufLine(hbuf, ln + 7, " * ")InsBufLine(hbuf, ln + 8, " * modification history")InsBufLine(hbuf, ln + 9, " * --------------------")InsBufLine(hbuf, ln + 10, " * 01a, @szDay@@szMonth@@Year@, @szMyName@ written") InsBufLine(hbuf, ln + 11, " * --------------------")InsBufLine(hbuf, ln + 12, "**************************************************************************** **/")// put the insertion point inside the header commentSetBufIns(hbuf, ln + 1, strlen(szFunc) + strlen(szInf) + 8)}/*************************************************************************** **** NumToName -- change the month number to name** modification history* --------------------* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro NumToName(Month){if (Month == 1)return "jan"if (Month == 2)return "feb"if (Month == 3)return "mar"if (Month == 4)return "apr"if (Month == 5)return "may"if (Month == 6)return "jun"if (Month == 7)return "jul"if (Month == 8)return "aug"if (Month == 9)return "sep"if (Month == 10)return "oct"if (Month == 11)return "nov"if (Month == 12)return "dec"}/*************************************************************************** **** CutWord -- auto newline** modification history* --------------------* 01a, 24mar2003, t357 fix some bug* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro CutWord(ncurLine, szInf){LENGTH = 63nlength = StrLen(szInf)i = 0 /* loop control */begin = 0 /* first character's index of current line */ pre = 0 /* preceding word's index */hbuf = GetCurrentBuf()// nline = GetBufLnCur()while (i < nlength){/* remove by t357nrow = 0sz = ""while (nrow < 80){if (nlength < 0)breaksz = Cat(sz, szInf[nrow])nrow = nrow + 1nlength = nlength - 1}InsBufLine(hbuf, nline, sz)szInf = szInf[nrow]}*/c = szInf[i]if (" " == @c@ && (i - b < LENGTH)){pre = i}else if (" " == @c@){szOutput = ""k = begin /* loop control */while (k < pre){szOutput = Cat(szOutput, szInf[k])k = k + 1}InsBufLine(hbuf, ncurLine, sz)ncurLine = ncurLine + 1begin = pre}i = i + 1}if (h != i - 1){szOutput = ""k = begin /* loop control */while (k < pre){szOutput = Cat(szOutput, szInf[k])k = k + 1}InsBufLine(hbuf, ncurLine, sz)ncurLine = ncurLine + 1}}/*************************************************************************** **** GetFileName -- get the filename only from the path** modification history* --------------------* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro GetFileName(pathName){nlength = strlen(pathName)i = nlength - 1name = ""while (i + 1){ch = pathName[i]if ("\\" == "@ch@")breaki = i - 1}i = i + 1while (i < nlength){name = cat(name, pathName[i])i = i + 1}return name}/*************************************************************************** **** ReturnTrueOrFalse -- Inserts "Returns True or False" at the current line** modification history* --------------------* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro ReturnTrueOrFalse(){szReturns = "return True if successful or False if errors."hbuf = GetCurrentBuf()ln = GetBufLnCur(hbuf)szCurLine = GetBufLine(hbuf, ln)DelBufLine(hbuf, ln)InsBufLine(hbuf, ln, "@szCurLine@@szReturns@")SetBufIns(hbuf, ln, StrLen(szReturns) + StrLen(szCurLine) + 3)}/*************************************************************************** **** InsHeaderDef -- Inserts the header define in the headerfile** modification history* --------------------* 01a, 05mar2003, t357 written* --------------------*************************************************************************** ***/macro InsHeaderDef(){hBuf = GetCurrentBuf()szpathName = GetBufName(hBuf)szfileName = GetFileName(szpathName)szfileName = toupper(szfileName)nlength = StrLen(szfileName)i = 0 /* loop control */szdefineName = ""while (i < nlength){if (szfileName[i] == ".")szdefineName = Cat(szdefineName, "_")elseszdefineName = Cat(szdefineName, szfileName[i])i = i + 1}szdefineName = Cat("_", szdefineName)IfdefineSz(szdefineName)}/*************************************************************************** **** PrintDate - print date on where the cursor point to* DESCRIPTION: -** Input:* Output:* Returns:** modification history* --------------------* 01a, 23mar2003, t357 written* --------------------*************************************************************************** ***/macro PrintDate(){szTime = GetSysTime(1)Day = szTime.DayMonth = szTime.MonthYear = szTime.Yearif (Day < 10)szDay = "0@Day@"elseszDay = DayszMonth = NumToName(Month)hbuf = GetCurrentBuf()ln = GetBufLnCur(hbuf)szCurLine = GetBufLine(hbuf, ln)DelBufLine(hbuf, ln)InsBufLine(hbuf, ln, "@szCurLine@ @szDay@@szMonth@@Year@")SetBufIns(hbuf, ln, StrLen(szCurLine) + 10)}// Ask user for ifdef condition and wrap it around current// selection.// 28mar2003, modified by t357.// 26mar2003, modified by t357.macro InsIfdef(){sz = Ask("Enter ifdef condition:")if (sz != ""){// IfdefSz(sz);hwnd = GetCurrentWnd()sel = GetWndSel(hwnd)hbuf = GetWndBuf(hwnd)// get line the selection (insertion point) is onszLine = GetBufLine(hbuf, sel.lnFirst - 1);chTab = CharFromAscii(9)// prepare a new indented blank line to be inserted.// keep white space on left and add a tab to indent.// this preserves the indentation level.i = 0 /* loop control */ich = ""while (szLine[i] == " " || szLine[i] == chTab){ich = Cat(ich, szLine[i])i = i + 1}InsBufLine(hbuf, sel.lnFirst, "")InsBufLine(hbuf, sel.lnFirst + 1, "@ich@#ifdef @sz@")InsBufLine(hbuf, sel.lnFirst + 2, "@ich@" # chTab)InsBufLine(hbuf, sel.lnFirst + 3, "@ich@#endif /* @sz@ */") SetBufIns(hbuf, sel.lnFirst + 2, StrLen(ich) + StrLen(chTab)) }}// Wrap ifdeinef <sz> .. endif around the current selectionmacro IfdefineSz(sz){hwnd = GetCurrentWnd()lnFirst = GetWndSelLnFirst(hwnd)lnLast = GetWndSelLnLast(hwnd)hbuf = GetCurrentBuf()InsBufLine(hbuf, lnFirst, "#ifndef @sz@")InsBufLine(hbuf, lnFirst + 1, "#define @sz@")InsBufLine(hbuf, lnLast + 3, "#endif /* @sz@ */")SetBufIns(hbuf, lnFirst + 2, 0)}/* A U T O E X P A N D *//*------------------------------------------------------------------------- Automatically expands C statements like if, for, while, switch, etc..To use this macro,1. Add this file to your project or your Base project.2. Run the Options->Key Assignments command and assign aconvenient keystroke to the "AutoExpand" command.3. After typing a keyword, press the AutoExpand keystroke to have the statement expanded. The expanded statement will contain a ### string which represents a field where you are supposed to type more.The ### string is also loaded in to the search pattern so you canuse "Search Forward" to select the next ### field.For example:1. you type "for" + AutoExpand key2. this is inserted:for (###; ###; ###){###}3. and the first ### field is selected.-------------------------------------------------------------------------*//*************************************************************************** **** AutoExpand - Automatically expands C statements** DESCRIPTION: - Automatically expands C statements like if, for, while,* switch, etc..** Input:* Output:* Returns:** modification history* --------------------* 01a, 27mar2003, t357 modified* --------------------*************************************************************************** ***/macro AutoExpand(){// get window, sel, and buffer handleshwnd = GetCurrentWnd()if (hwnd == 0)stopsel = GetWndSel(hwnd)if (sel.ichFirst == 0)stophbuf = GetWndBuf(hwnd)// get line the selection (insertion point) is onszLine = GetBufLine(hbuf, sel.lnFirst);// parse word just to the left of the insertion point wordinfo = GetWordLeftOfIch(sel.ichFirst, szLine) ln = sel.lnFirst;chTab = CharFromAscii(9)// prepare a new indented blank line to be inserted. // keep white space on left and add a tab to indent. // this preserves the indentation level.ich = 0while (szLine[ich] == ' ' || szLine[ich] == chTab) {ich = ich + 1}szLine = strmid(szLine, 0, ich)sel.lnFirst = sel.lnLastsel.ichFirst = wordinfo.ichsel.ichLim = wordinfo.ich// expand szWord keyword...if (wordinfo.szWord == "if" ||wordinfo.szWord == "while" ||wordinfo.szWord == "elseif"){SetBufSelText(hbuf, " (###)")InsBufLine(hbuf, ln + 1, "@szLine@" # "{");InsBufLine(hbuf, ln + 3, "@szLine@" # "}");}else if (wordinfo.szWord == "for"){SetBufSelText(hbuf, " (###)")InsBufLine(hbuf, ln + 1, "@szLine@" # "{");InsBufLine(hbuf, ln + 2, "@szLine@" # chTab);InsBufLine(hbuf, ln + 3, "@szLine@" # "}");}else if (wordinfo.szWord == "switch"){SetBufSelText(hbuf, " (###)")InsBufLine(hbuf, ln + 1, "@szLine@" # "{")InsBufLine(hbuf, ln + 2, "@szLine@" # "case ")InsBufLine(hbuf, ln + 3, "@szLine@" # chTab)InsBufLine(hbuf, ln + 4, "@szLine@" # chTab # "break;") InsBufLine(hbuf, ln + 5, "@szLine@" # "default:")InsBufLine(hbuf, ln + 6, "@szLine@" # chTab)InsBufLine(hbuf, ln + 7, "@szLine@" # "}")}else if (wordinfo.szWord == "do"){InsBufLine(hbuf, ln + 1, "@szLine@" # "{")InsBufLine(hbuf, ln + 2, "@szLine@" # chTab);InsBufLine(hbuf, ln + 3, "@szLine@" # "} while ();")}else if (wordinfo.szWord == "case"){SetBufSelText(hbuf, " ###")InsBufLine(hbuf, ln + 2, "@szLine@" # chTab # "break;") }elsestopSetWndSel(hwnd, sel)LoadSearchPattern("###", true, false, false);Search_Forward}/* G E T W O R D L E F T O F I C H *//*------------------------------------------------------------------------- Given an index to a character (ich) and a string (sz),return a "wordinfo" record variable that describes thetext word just to the left of the ich.Output:wordinfo.szWord = the word stringwordinfo.ich = the first ich of the wordwordinfo.ichLim = the limit ich of the word-------------------------------------------------------------------------*/ macro GetWordLeftOfIch(ich, sz){wordinfo = "" // create a "wordinfo" structurechTab = CharFromAscii(9)// scan backwords over white space, if anyich = ich - 1;if (ich >= 0)while (sz[ich] == " " || sz[ich] == chTab){ich = ich - 1;if (ich < 0)break;}// scan backwords to start of wordichLim = ich + 1;asciiA = AsciiFromChar("A")asciiZ = AsciiFromChar("Z")while (ich >= 0){ch = toupper(sz[ich])asciiCh = AsciiFromChar(ch)if ((asciiCh < asciiA || asciiCh > asciiZ) && !IsNumber(ch)) break // stop at first non-identifier characterich = ich - 1;}ich = ich + 1wordinfo.szWord = strmid(sz, ich, ichLim)wordinfo.ich = ichwordinfo.ichLim = ichLim;return wordinfo}。

相关文档
最新文档