<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CodingMyLife</title>
	<atom:link href="http://blog.codingmylife.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.codingmylife.com</link>
	<description>.NET Qt MicroFramework</description>
	<lastBuildDate>Wed, 28 Jul 2010 13:41:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MiniTwitter</title>
		<link>http://blog.codingmylife.com/?p=187</link>
		<comments>http://blog.codingmylife.com/?p=187#comments</comments>
		<pubDate>Sat, 12 Dec 2009 05:36:56 +0000</pubDate>
		<dc:creator>Allen Dang</dc:creator>
				<category><![CDATA[我的作品]]></category>
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.codingmylife.com/?p=187</guid>
		<description><![CDATA[我喜欢用Twitter记录自己的一些想法，所以一个小巧的Twitter发送程序就成了我手边必须东西。目前的Twitter客户端大多功能太多，且发送消息的功能大多只是附属，所以自己写了一个。
好了，秀一下界面吧。


这段时间我的状态比较奇怪，也不知道为什么，对于用C#写东西开始失去了兴趣，一是觉得太过高层，很多细节都接触不到，二是随便一个小程序内存占用都是10MB以上。所以前段时间我学了Qt，觉得Qt的整体设计很不错，写出来的代码结构很好看，但有一个致命的缺点是我所不能忍受的，编译出来的程序体积太大了，就算用Upx压缩之后最小还是2MB。
之后又动过念头去学习MFC，奈何这东西现在看实在太过繁琐，很多设计用几年前的眼光去看还不错，但现在就觉得落后了些。
挑来挑去最后还是拿起了Delphi，5、6年以前它也曾是我手里的利器，很是写过不少的东西。之后因为种种原因再没碰过。这几年这个昔日有着王霸之气的IDE也随着Borland沉沉浮浮，Pascal这门语言也渐渐被世人冷落。
我下载了最新版本的Delphi 2010，初用了下还行，深入用下去就发现自己真是被VS给惯坏了，相比下来Delphi的代码编辑器真是太低能了。智能提示窗口出来之后第一行竟然没有焦点，这让整个编码过程变得很痛苦，经常需要去按Ctrl+Space或者下箭头。
我心说这种问题应该早就有人郁闷过了，上网一找果然，国人的cnpack就是解决方案。装上之后舒服了。
之后就看了看语法，熟悉了下类库，写下了这个小程序。别看功能简单，我连学带写还是花了三个晚上才搞定。
因为国内不能直接访问Twitter，所以加上了启用Twitter API代理的功能。
用法简单，配置好账号信息，设定一个热键。呼出主窗口，输入文字，回车，搞定。
最后还是忍不住要抱怨一下，本来的设想是，消息发送完成之后在TrayIcon上弹出一个气泡提示。很简单一个功能对吧，但是Delphi 2010自带的TrayIcon控件竟然因为有Bug而无法实现。我那个郁闷啊！随后换了Raize控件包的RzTrayIcon，发现该控件在XP下面工作良好，到Vista就不行了。
好吧，果然是C#太过高级了，此类问题是永远不会碰到的，我也被惯坏了，现在一时间还真就解决不了，正在啃Vista的SDK，希望过几天能自己fix一下这个bug。
这里是MiniTwitter的下载链接，喜欢的话就用用吧，如果你能给我留个言的话我会更开心:)
点击下载
]]></description>
		<wfw:commentRss>http://blog.codingmylife.com/?feed=rss2&amp;p=187</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>小工具 &#8211; 天涯帖子抓取器</title>
		<link>http://blog.codingmylife.com/?p=140</link>
		<comments>http://blog.codingmylife.com/?p=140#comments</comments>
		<pubDate>Tue, 08 Sep 2009 02:00:05 +0000</pubDate>
		<dc:creator>Allen Dang</dc:creator>
				<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://blog.codingmylife.com/?p=140</guid>
		<description><![CDATA[老婆酷爱在天涯上看小说，莲蓬鬼话是她的最爱。这天她跟我抱怨，说帖子太长了，且里面回复太多，看起来很不方便。
所以我就答应了帮她写一个抓取天涯帖子内容的小工具，以方便她的小说阅读大业。
正好最近在学习Qt，便用它来练练手。Qt确实很方便，原以为代码量肯定要比C#多一倍以上，没想到竟然还少了，这样一个小东西只花了不到600行就搞定了。确实应了Qt的广告词，Code Less, Create More。
下面就秀一下截图：


很简单，应该不需要教程就会用了。只要把帖子第一页的地址粘贴到“帖子地址”然后点击开始抓取就可以了，抓天涯会自动抓取所有页面的内容。
现在还有个不完善的地方，很多帖子都还在继续更新，而每次都需要重新开始下载，太浪费时间。我会在将来加入类似断点续传的功能，从上次下载的位置开始抓取更新了的内容。
已经完成了这个功能，下载链接也更新了。现在在下载帖子之前会查看保存目录，如果发现同名文件就会开始继续下载。
这里是下载链接：
点击下载
]]></description>
		<wfw:commentRss>http://blog.codingmylife.com/?feed=rss2&amp;p=140</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>使用Qt读取大文件最后一行</title>
		<link>http://blog.codingmylife.com/?p=135</link>
		<comments>http://blog.codingmylife.com/?p=135#comments</comments>
		<pubDate>Mon, 07 Sep 2009 08:30:29 +0000</pubDate>
		<dc:creator>Allen Dang</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[CPP]]></category>

		<guid isPermaLink="false">http://blog.codingmylife.com/?p=135</guid>
		<description><![CDATA[正在写的一个小软件需要这样一个功能，在开始一个新的下载任务前，先尝试在本地寻找是否已经存在同名文件。如果有，那读取文件最后一行文本，这行文本里面记录了上次下载的一些信息，然后从断点开始继续下载。
最后一行文本的格式很简单，就是[页码&#124;行号]，例如[160&#124;8]就代表160页第8行。
读取的基本思路就是，先把文件指针移动到距离文件尾部20个字节的地方（这里留20个字节是因为我的最后一行信息很简单），然后循环读取每一行，最后一次读取到的就是最后一行文本。
目标文本文件最后一行如下：
[160&#124;8]
具体代码如下：


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
QFile file&#40;&#34;C:\\test.txt&#34;&#41;;
if &#40;file.open&#40;QIODevice::ReadOnly &#124; QIODevice::Text&#41;&#41;
&#123;
	qint64 len = file.size&#40;&#41;;
&#160;
	QTextStream reader&#40;&#38;amp;file&#41;;
	QString lastLine;
	if &#40;reader.seek&#40;len-20&#41;&#41;
	&#123;
		while &#40;!reader.atEnd&#40;&#41;&#41;
		&#123;
			lastLine = reader.readLine&#40;&#41;;
		&#125;
	&#125;
&#160;
	file.close&#40;&#41;;
&#160;
	QRegExp re&#40;&#34;\\[(\\d+)\\&#124;(\\d+)\\]&#34;&#41;;
	if &#40;re.indexIn&#40;lastLine, 0&#41; != -1&#41;
	&#123;
		QString page = re.cap&#40;1&#41;; //page = 160
		QString pos = re.cap&#40;2&#41;; //pos = 8
	&#125;
&#125;

任务完成！
]]></description>
		<wfw:commentRss>http://blog.codingmylife.com/?feed=rss2&amp;p=135</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>浅谈.NET Micro Framework的性能优化。</title>
		<link>http://blog.codingmylife.com/?p=123</link>
		<comments>http://blog.codingmylife.com/?p=123#comments</comments>
		<pubDate>Thu, 23 Apr 2009 06:27:26 +0000</pubDate>
		<dc:creator>Allen Dang</dc:creator>
				<category><![CDATA[Micro Framework]]></category>
		<category><![CDATA[.NET Micro Framework]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[性能]]></category>

		<guid isPermaLink="false">http://blog.codingmylife.com/?p=123</guid>
		<description><![CDATA[(如有转载，请注明出处，谢谢)
由于工作原因，这几个月对.NET家族的新成员.NET Micro Framework做了一些研究和实践，对于这个可以直接运行在硬件上的小家伙还是很看好的。
它的可剪裁性，高定制性，和天生对硬件高集成度都让它的前途一片光明。当然，它现在还很年轻，就发布的SDK v3.0来看，它还有很长的路要走。
废话不说，就这几个月我用下来的经验谈谈在针对MF应用程序的性能优化吧。

1. 尽可能减少方法调用！
方法调用过于频繁对于性能的影响非常大，所以所有的优化都是以这个为大前提的。
2. 尽可能避免使用属性，而用公共域来代替。
因为编辑器会在编译的时候为每个属性的getter和setter添加访问方法，基于第一条，这是要避免地。
当然也不是说完全避免使用属性了，毕竟有的时候属性是很方便且必要的。
比如这个下面这个使用属性的例子：

public class Test
&#123;
 public string Name &#123; get; set; &#125;
&#125;

需要把它改成这样：

public class Test
&#123;
 public string Name;
&#125;

3. 只在构造函数里面初始化变量。
这一条很容易明白，看下面的例子：

public class Test
&#123;
 private string name = &#34;Test String&#34;;
 private DateTime date = DateTime.Now;
 private int score, counter;
 
 public Test&#40;&#41;
 &#123;
  score = 0;
  counter = 0;
 &#125;
&#125;

初始化的工作其实进行了两次，一次是在声明变量的时候，另外一次是在调用构造函数的时候。遵循第一条原则，我们要尽可能减少方法调用，且构造函数的使用概率很高，所以我们在此需要把初始化的工作全部集中到构造函数里面来进行。
4. 只在必要的地方调用lock。
对于MF这样一个半实时的系统来说，lock的成本远远高于我们的想象。在.NET里面可能感觉不出来，但到了MF这个小伙子手里感觉就非常明显了，也许这一条大家已经知道了，就当我老调重弹吧。
看这个例子：

public class Test
&#123;
 private ArrayList objs;
 
 public void SomeMethod&#40;object o&#41;
 &#123;
  for&#40;int i = 0; i &#38;lt; 100; i++&#41;
  &#123;
   if &#40;objs.Contains&#40;o&#41;&#41;
   &#123;
    lock&#40;objs.SyncRoot&#41;
    &#123;
     objs.Remove&#40;o&#41;;
    &#125;
   &#125;
  &#125;
 &#125;
&#125;

在一个循环里面增删一个集合，由于是多线程访问，所以在操作之前加了锁。之所以在循环内部加锁，理由可能是想尽可能的减少lock的访问次数，只有满足那个if条件的时候才会被调用。
实际上，这个想法错了，无论如何，这里的lock都会被调用很多次，这些开销加起来就会对性能造成很大的影响。
把代码改成这样就会好很多：

public class [...]]]></description>
		<wfw:commentRss>http://blog.codingmylife.com/?feed=rss2&amp;p=123</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我的Visual Studio 2008颜色配置。</title>
		<link>http://blog.codingmylife.com/?p=119</link>
		<comments>http://blog.codingmylife.com/?p=119#comments</comments>
		<pubDate>Fri, 20 Mar 2009 02:54:52 +0000</pubDate>
		<dc:creator>Allen Dang</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://blog.codingmylife.com/?p=119</guid>
		<description><![CDATA[花了好几天慢慢调出来的颜色，现在长时间看着眼睛也不会不舒服了。
点击这里下载。
]]></description>
		<wfw:commentRss>http://blog.codingmylife.com/?feed=rss2&amp;p=119</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>发布PhotoInfo v0.6.</title>
		<link>http://blog.codingmylife.com/?p=107</link>
		<comments>http://blog.codingmylife.com/?p=107#comments</comments>
		<pubDate>Mon, 03 Nov 2008 14:58:51 +0000</pubDate>
		<dc:creator>Allen Dang</dc:creator>
				<category><![CDATA[PhotoInfo]]></category>
		<category><![CDATA[exif]]></category>
		<category><![CDATA[photo]]></category>

		<guid isPermaLink="false">http://blog.codingmylife.com/?p=107</guid>
		<description><![CDATA[最近喜欢上了摄影，交流的时候发现大家都会把拍摄信息加到照片上，Windows下面用光影魔术手就可以方便的做到，但是Mac下面我没找到可用的（中间尝试了iWatermark，但是不好用）。
索性自己写个算了，实现添加相框和拍摄参数。
用法：
1. 拖放照片（必须是jpg格式）或者包含照片的文件夹到程序窗口。
2. 设置好输出路径后点击“开始处理”就好了。
界面截图：



下载连接：
点击下载PhotoInfo v0.6
]]></description>
		<wfw:commentRss>http://blog.codingmylife.com/?feed=rss2&amp;p=107</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>用NSData玩转二进制文件的读写。</title>
		<link>http://blog.codingmylife.com/?p=85</link>
		<comments>http://blog.codingmylife.com/?p=85#comments</comments>
		<pubDate>Tue, 28 Oct 2008 14:38:15 +0000</pubDate>
		<dc:creator>Allen Dang</dc:creator>
				<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://blog.codingmylife.com/?p=85</guid>
		<description><![CDATA[今天看到有同学问如何读写二进制文件，那就顺道讲一下吧。
在Cocoa的世界里，所有与某个物件相关的东西都被该物件实现。好吧，我承认，这句话比较扯&#8230;. 还是上例子说明吧。
在通常的编程语言里面（这里指的是C/C++/Java/C#/Ruby/&#8230;），以下几个东西是如此关联起来的：
字符串类用来处理字符串存储，查找，替换&#8230;等等常规功能。
路径类用来处理所有与文件系统路径相关的事情，比如什么把路径分段，拿到文件扩展名，文件是否存在等等。
目录类则用来看某个路径的目录是否存在，是不是为空，等等。
这里一般会有三个类来处理各自逻辑相关的事情，但是，注意但是，Cocoa里面的构建法则不是这样的，它把所有与字符串相关的功能全部封装到了字符串类里面。
所以，NSString可以做的事情超多，从打开文件读取/写入字符串内容，到判断路径是否存在，等等，所有的事情，它都一手包了。
这样倒是方便程序员了，反正一旦有什么事情和字符串有点关系，找它准没错。
好了，讲了这么一堆，回过头来看这个问题，如何读写二进制文件？我写了各种类型的数据（整形，浮点，字符串）进去，怎么读出来？
这里提到了二进制对吧，也就是数据对吧，那么好了，找NSData就行了。
来看这段小代码，我准备了一个文件路径做演示，还有几个要写进去的数据。

NSString *path = @&#34;/Users/Allen/Desktop/test.dat&#34;;
&#160;
NSString *temp = @&#34;Allen Dang&#34;;
int i = 100;
float f = 98.3333f;

新建了一个可修改的数据存储器NSMutableData，并把上面的几个数据都加进去，后面直接写入文件。
唯一要注意的只有字符串，因为涉及到编码问题，所以我们必须要用字符串本身的方法拿到根据编码生成出来的数据。

NSMutableData *writer = &#91;&#91;NSMutableData alloc&#93; init&#93;;
&#160;
&#91;writer appendData:&#91;temp dataUsingEncoding:NSUTF8StringEncoding&#93;&#93;;
&#91;writer appendBytes:&#38;amp;i length:sizeof&#40;i&#41;&#93;;
&#91;writer appendBytes:&#38;amp;f length:sizeof&#40;f&#41;&#93;;
&#160;
&#91;writer writeToFile:path atomically:YES&#93;;
&#91;writer release&#93;;

别忘了释放用完的东西。
好了，写完成了，让我们看看读。

int ii;
float ff;
NSString *ttemp;
&#160;
NSData *reader = &#91;NSData dataWithContentsOfFile:path&#93;;
ttemp = &#91;&#91;NSString alloc&#93; initWithData:&#91;reader subdataWithRange:NSMakeRange&#40;0, &#91;temp length&#93;&#41;&#93;
								  encoding:NSUTF8StringEncoding&#93;;
&#91;reader getBytes:&#38;amp;ii range:NSMakeRange&#40;&#91;temp length&#93;, sizeof&#40;ii&#41;&#41;&#93;;
&#91;reader getBytes:&#38;amp;ff range:NSMakeRange&#40;&#91;temp length&#93; + sizeof&#40;ii&#41;, sizeof&#40;ff&#41;&#41;&#93;;
&#160;
NSLog&#40;@&#34;string:%@ [...]]]></description>
		<wfw:commentRss>http://blog.codingmylife.com/?feed=rss2&amp;p=85</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Core Image 学习笔记 － 为照片加边框和EXIF信息。</title>
		<link>http://blog.codingmylife.com/?p=57</link>
		<comments>http://blog.codingmylife.com/?p=57#comments</comments>
		<pubDate>Mon, 20 Oct 2008 13:57:50 +0000</pubDate>
		<dc:creator>Allen Dang</dc:creator>
				<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://blog.codingmylife.com/?p=57</guid>
		<description><![CDATA[最近迷上了摄影，拍了很多照片之后就想上传跟大家分享。到色影无忌和几个摄影论坛上一看，发现很多人的照片都有不错的边框、水印和拍摄信息（相机类型、光圈、快门、拍摄日期等等&#8230;.）。
因为用的是Mac，找了很久，没有发现&#8230;（为什么每次写东西都是这个理由？）
好吧，废话少说，先把要做的事情分类。
1.调整图片大小，毕竟放到网上的图片不需要原图那么大。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
以下是学习了Core Image之后的一点点实践。

NSImage *image = &#91;&#91;NSImage alloc&#93; initWithContentsOfFile:path&#93;;
&#91;image setScalesWhenResized:YES&#93;;
&#91;image setSize:NSMakeSize&#40;1000.0, &#91;image size&#93;.height * &#40;1000.0/&#91;image size&#93;.width&#41;&#41;&#93;;

这个方法确实可以调整大小了，但是缩小的图片质量非常差。花了很多时间仔细看文档，最后发现，Core Image其实就是对于Quartz 2D的包装，所有的绘图操作其实都值对于当前的NSGraphicsContext起作用，NSGraphicsContext本身有很多属性用来控制当前绘图的各方面。
而如果只是使用默认设置的话，绘图质量默认是最低。这里我们需要手动设置成高质量。
添加以下两行到代码开头：

//质量设置成高
&#91;&#91;NSGraphicsContext currentContext&#93; setImageInterpolation:NSImageInterpolationHigh&#93;;
//打开反锯齿
&#91;&#91;NSGraphicsContext currentContext&#93; setShouldAntialias:YES&#93;;


2.画边框。
&#8212;&#8212;&#8211;
一开始遇到的问题是，默认的NSGraphicsContext是当前窗体、View等等，我需要把它设置成我需要绘制的目标图片。出乎意料的简单。

NSImage *canvas = &#91;&#91;NSImage alloc&#93; initWithSize:canvasSize&#93;;
&#91;canvas lockFocus&#93;;
&#160;
//Draw things here.
&#160;
&#91;canvas unlockFocus&#93;;

使用NSImage的lockFocus方法可以把NSGraphicsContext设置到它身上，相应的unlockFocus会还原NSGraphicsContext。
好了，现在就简单了，画边框了。

int border = 56;
&#160;
NSRect rect = NSMakeRect&#40;border/2, border/2, canvasSize.width - border, canvasSize.height - border&#41;;
&#91;originImage drawInRect:rect
	fromRect:NSZeroRect
	operation:NSCompositeSourceOver
	fraction:1.0&#93;;
&#160;
border -= 6;
&#91;&#91;NSColor whiteColor&#93; set&#93;;
NSRect whiteBorderRect = NSMakeRect&#40;border/2, border/2,
	canvasSize.width - border, canvasSize.height - [...]]]></description>
		<wfw:commentRss>http://blog.codingmylife.com/?feed=rss2&amp;p=57</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>C语言练习 － 用筛选法算质数。</title>
		<link>http://blog.codingmylife.com/?p=56</link>
		<comments>http://blog.codingmylife.com/?p=56#comments</comments>
		<pubDate>Sat, 06 Sep 2008 02:49:33 +0000</pubDate>
		<dc:creator>Allen Dang</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://blog.codingmylife.com/?p=56</guid>
		<description><![CDATA[这是《C和指针》第六章的习题，用筛选法算质数。因为用到了动态数组，所以需要gcc 3.4 以上版本编译。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void primes&#40;int range&#41;
&#123;
	int width = range / 2; //只计算奇数，空间效率提高一倍。
	char nums&#91;width&#93;;
	char *pnums;
	size_t i, j, temp;
&#160;
	for&#40;pnums = nums; pnums &#60; nums + width; pnums++&#41;
	&#123;
		*pnums = TRUE;
	&#125;
&#160;
	for&#40;i = 1; i &#60; width; i++&#41;
	&#123;
		pnums = nums + i;
		if &#40;*pnums&#41;
		&#123;
			temp = i * 2 + 1;
			for&#40;j = i + 1; j &#60; width; j++&#41;
			&#123;
				if &#40;*++pnums&#41;
				&#123;
					if &#40;!&#40;&#40;j * 2 [...]]]></description>
		<wfw:commentRss>http://blog.codingmylife.com/?feed=rss2&amp;p=56</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>重新开始学习C语言的第一段小程序 － del_substr。</title>
		<link>http://blog.codingmylife.com/?p=55</link>
		<comments>http://blog.codingmylife.com/?p=55#comments</comments>
		<pubDate>Tue, 02 Sep 2008 10:43:25 +0000</pubDate>
		<dc:creator>Allen Dang</dc:creator>
				<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://blog.codingmylife.com/?p=55</guid>
		<description><![CDATA[看的书是《C和指针》，现在回头再看C，有了很多新的体悟，也让我开始觉得脑子抽筋。告别太多年的指针让我死去活来，非常不习惯，好在多年养成的习惯还在，也不需要赶时间，慢慢来吧。相信啃下了指针之后就会顺滑很多了。
下面这段代码是《C和指针》第六章的一个习题，写出来很是花了我一番力气。又一次体会到了那种为写一行代码抓掉n根头发的感觉。。。。。
中间为了调试，又花时间学习了gdb，让我这个被IDE惯坏的人惊艳了很久。好东西啊！


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
int del_substr&#40;char *str, char const *substr&#41;
&#123;
	char *ptr_substr = &#40;char *&#41;substr;
	char *strP = str;
	char *temp;
	bool fullMatch = TRUE;
&#160;
	for&#40;;*strP != '\0'; strP++&#41;
	&#123;
		if &#40;*strP == *ptr_substr&#41;
			break;
	&#125;
&#160;
	temp = strP;
	if &#40;*temp != '\0'&#41; //Match first char.
	&#123;
		while&#40;*ptr_substr&#41;
		&#123;
			if &#40;*temp++ != *ptr_substr++&#41;
			&#123;
				fullMatch = FALSE;
				break;
			&#125;
		&#125;
&#160;
		if &#40;fullMatch&#41;
		&#123;
			while&#40;*temp&#41;
				*strP++ = *temp++;
			*strP = '\0';
			return 1;
		&#125;
	&#125;
&#160;
	return 0;
&#125;

]]></description>
		<wfw:commentRss>http://blog.codingmylife.com/?feed=rss2&amp;p=55</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
