打印

向版主xwj求VerTrans.c:版本控制执行文件源码

[复制链接]
2163|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zzyongchao|  楼主 | 2009-11-10 08:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zzyongchao 于 2009-11-10 08:59 编辑

看到这个帖子,我下载的附近没有说明中的源码。能发一份给我吗?
EMAIL:zzyongchao@yahoo.com.cn

xwj发表于 2008-8-26 17:38 | 只看该作者 回复 引用 返回版面 TOP   
21楼: 呵呵,不开玩笑了,给你个一直在用的版本控制工具吧
Keil C51 版本号及编译计数器(Build Counter)控制 接口说明

相关帖子

沙发
xwj| | 2009-11-10 09:05 | 只看该作者
#include <io.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

void main(int argc,char * argv[])
{
        int  i,iLen,iVerLine,iCRs,iPos;
        unsigned char v1,v2,v3,strBuf[1024],strTmp[5];
        FILE * fp;

        if(argc < 3)        // 必须有两个参数
        {
                printf("\n*** Usage: EXE [Ver File Name] [Ver Message Line] ***\n");
                exit(0);
        }

        // 将数据文件读入内存,不得超过1024Bytes
        if( ( fp = fopen(argv[1], "rb") ) == NULL )
        {
                printf("\n*** Can't Open Version File! ***\n");
                exit(0);
        }
        // 必须定义有效行号
        if( (iVerLine = atoi(argv[2])) <= 0)
        {
                printf("\n*** Invalid Line Number Specified! ***\n");
                exit(0);
        }

        // 取文件长度
        fseek(fp, 0, SEEK_END);
        iLen = ftell(fp);

        // 确定 Version 起始位置
        iPos = 0;
        iCRs = 1;
        fseek(fp, 0, SEEK_SET);
        for(i=0;i<iLen;i++)
        {
                strBuf = fgetc(fp);
                if(iCRs == iVerLine && iPos == 0)
                {
                        if(strBuf >= '0' && strBuf <= '9')
                                iPos = i;
                }
                if(strBuf == 0x0A)
                        iCRs++;
        }
        fclose(fp);

        // 编译计数器及版本号增加处理
        i = atoi(&strBuf[iPos+6]);
        v1 = strBuf[iPos+0];
        v2 = strBuf[iPos+2];
        v3 = strBuf[iPos+4];
        i++;
        if(i > 9999)
        {
                i = 1;
                v3++;
                if(v3 > '9')
                {
                        v3 = '0';
                        v2++;
                        if(v2 > '9')
                        {
                                v2 = '0';
                                v1++;
                        }
                }
        }
        strBuf[iPos+0] = v1;
        strBuf[iPos+2] = v2;
        strBuf[iPos+4] = v3;
        sprintf(strTmp,"%04d",i);
        for(i=0;i<4;i++)
                strBuf[iPos+i+6] = strTmp;

        // 将结果写入文件
        if( ( fp = fopen(argv[1], "wb") ) == NULL )
        {
                printf("\n*** Can't Write File! ***\n");
                exit(0);
        }
        for(i=0;i<iLen;i++)
                fputc(strBuf,fp);
        fclose(fp);

        // 显示更改后的版本号
        printf("\n***** Build:%s *****\n",strTmp);

        exit(0);
}

使用特权

评论回复
板凳
zzyongchao|  楼主 | 2009-11-10 09:15 | 只看该作者
多谢,我试一下

使用特权

评论回复
地板
zzyongchao|  楼主 | 2009-11-10 10:18 | 只看该作者
我用TC2.0编译,发现strBuf,strTmp必须加[i]。
多谢斑竹!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝