#include <stdio.h> #include <stdlib.h> #include <string.h> /* 关键字表宏定义 */ #define KEYTYPE int // #define ERRTYPE -1 #define FILES 0 #define DATE 1 #define FONT_NAME 2 #define FONT_SIZE 3 #define TIMES 4 #define HEAD 5 #define DATA_BEGIN 6 #define DATA_END 7 #define KEYLEN 8 /* LED比特位定义 */ #define DIV (('1')-('0')) // 分隔符代表的整数 01 #define LIMIT_TIMES '0' // 限次/限时控制开关,'0'限次,'1'限时。 #define IS_TIME '0' // 是否定时,'0'定时,'1'不定时 #define TEXT_TYPE '0' // 单行文本类型值(静态0,左滚1,右滚2,上滚3,下滚4) #define FONT_TYPE '0' // 字型(取值为0、4、8、12字符型数字,分别为常规、粗体、斜体、粗斜体) char *KeyWord[KEYLEN] = {"file","date","font-name","font-size","time","head","data-begin","data-end"}; KEYTYPE MatchWithKeyWord(char *strBuff); // 关键字表查表 int GetString(char *strBuff,FILE *fp); int WriteLedFile(FILE *WriteFilePoint,char *FileNameBuff,char *FontBuff,char *FontSize,char *Times,char *HeadBuff,char *BodyBuff); int main(int argc,char *argv[]) { FILE *ReadFilePoint; // 读文件指针 FILE *WriteFilePoint; char FileNameBuff[50]; // 暂存生成文件的文件名 char FontBuff[20]; // 暂存主体部分的字体 char FontSize[10]; // 暂存字号 char Times[10]; // 循环次数或者时间 char HeadBuff[50]; // 显示的头 char BodyBuff[600]; // 主体显示部分 char TempBuff[30]; // 临时缓冲区,用来保存待分析的字符串 char ch; // 读取文件字符 int len; // 记录临时缓冲区的长度 /* if(argc != 2) // 参数错误处理 { printf("提示:参数错误!/n/n使用方法:/n%s FileName/n",argv[0]); exit(0); } ReadFilePoint = fopen(argv[1],"r"); // 打开待分析的文件 */ ReadFilePoint = fopen("pro.txt","r"); if(!ReadFilePoint) // 判断打开是否成功 { printf("文件%s打开失败,可能此文件不在您所指定的目录,请检查后重试!/n",argv[1]); exit(0); } ch = fgetc(ReadFilePoint); while(!feof(ReadFilePoint)) // 读取文件并进行分析 { if(ch == '<') // 读到标记开始 { len = 0; ch = fgetc(ReadFilePoint); while(ch!='>') // 循环读入标记值到临时缓冲区 { TempBuff[len++] = ch; ch = fgetc(ReadFilePoint); } // 循环结束后,缓冲区中将存放<>之间的字符串 TempBuff[len] = '/0'; // 将字符数组构造成字符串 switch(MatchWithKeyWord(TempBuff)) // 识别每个字符串的类型 { case FILES: // 一个文件开始则读取下一个字符 ch = fgetc(ReadFilePoint); break; case DATE: // 将日期读入到FileNameBuff缓冲区中用作文件名 GetString(FileNameBuff,ReadFilePoint); break; case FONT_NAME: // 读入字体放入缓冲区FontBuff GetString(FontBuff,ReadFilePoint); break; case FONT_SIZE: // 读入字号 GetString(FontSize,ReadFilePoint); break; case TIMES: // 读入循环次数,显示时间 GetString(Times,ReadFilePoint); break; case HEAD: GetString(HeadBuff,ReadFilePoint); break; case DATA_BEGIN: // 显示主体 GetString(BodyBuff,ReadFilePoint); break; case DATA_END: WriteLedFile(WriteFilePoint,FileNameBuff,FontBuff,FontSize,Times,HeadBuff,BodyBuff); ch = fgetc(ReadFilePoint); break; case ERRTYPE: printf("此文件中存在不可识别的标识符

LEDPlayer显示屏文件自动生成C语言实现----根据破解文件格式

/******************** ** **LED文件生成工具 ** *********************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #define DIV (('1')-('0')) // 宏定义分隔符代表的整数 01 #define DPI_LEN sizeof(Data_Page_Info) #define DPT_LEN sizeof(Data_Page_Text) typedef struct N_Data_Page_Text { unsigned char area_list_index; // 区域列表索引5(字符型数字)(单行文本) unsigned char div_flag_0; // 分割标志,01 unsigned char X[5];// 屏幕显示坐标(左上角X+左上角Y+宽度L+高度H)(中间用整型01隔开,单位为字符型数字代表的像素) unsigned char div_flag_01; unsigned char Y[5]; unsigned char div_flag_02; unsigned char L[5]; unsigned char div_flag_03; unsigned char H[5]; unsigned char div_flag_1; // 分割标志,01 char text_action; // 单行文本类型值(静态0,左滚1,右滚2,上滚3,下滚4)(字符型数字) unsigned char div_flag_2; // 分割标志,01 unsigned char bgcolor[3];// 背景色 unsigned char div_flag_3; // 分割标志,01 char font[25]; // 字体(字符数组) unsigned char div_flag_4; // 分割标志,01 char font_size[5]; // 字号(字符型数字) unsigned char div_flag_5; // 分割标志,01 unsigned char font_color[3]; // 字体颜色(字符型数字255为红色) unsigned char div_flag_6; // 分割标志,01 unsigned char font_style;// 字型(取值为0、4、8、12字符型数字,分别为常规、粗体、斜体、粗斜体) unsigned char div_flag_7; // 分割标志,01 unsigned char roll_speed_align;// 单行文本类型的滚动速度,当单行文本类型为静态时此处值0、1、2分别代表对齐方式中的左对齐、右对齐、居中(字符型数字) unsigned char div_flag_8; // 分割标志,01 char text[200];// 要显示的字符串(字符数组) unsigned char div_flag_9; // 分割标志,01 unsigned char end1; // 30 unsigned char div_flag_10; // 分割标志,01 unsigned char end2; // 30 unsigned char div_flag_11; // 分割标志,01 unsigned char end3; // 0D unsigned char end4; // 0A }Data_Page_Text,*P_Data_Page_Text; typedef struct N_Data_Page_Info { char page_name[50];// 数据页名字 unsigned char div_flag_0; // 分割标志,01 unsigned char fg; // 默认为零 unsigned char div_flag_1[2]; unsigned char limit_time_flag;// 限次/限时播放(0/1(字符型数字)) unsigned char div_flag_2; unsigned char times; // 次数/秒数(字符型数字) unsigned char div_flag_3; unsigned char is_time; // 是否定时(0不定时/1定时)(字符型数字) unsigned char div_flag_4; char wuci_time[20]; // 时间(字符数组(上/下午+空格+00:00:00)) unsigned char gap; // 空格 char shike_time[20]; // 时刻 unsigned char div_flag_5; }Data_Page_Info,*P_Data_Page_Info; /* 一个字节的偏移量:从数据页显示信息开始到本数据页结束的长度(整型)三个零:特征位00+00+00(整型) */ typedef struct N_DatePage // 数据页结构定义 { unsigned char page_head[4]; Data_Page_Info *data_page_info; Data_Page_Text *data_page_text; }Date_Page,*P_Date_Page; /* LED文件头:第一个字节:页数目(整型) 三个零:特征位00+00+00(整型) */ typedef struct N_LED // LED文件定义 { unsigned char file_head[4]; Date_Page *data_page; // 数据页结构 }LED,*P_LED; int dpt_len = 0; int dpi_len = 0; unsigned char buff[1024*1024]; int Get_Text_Length(); FILE *f1,*f2,*f3; FILE *fpo1,*fpo2,*fpo3,*fpo4; void Init_DP(); void Init_DPT(P_Data_Page_Text dpt); void Init_DPI(P_Data_Page_Info dpi); int main() { P_Data_Page_Text dpt; P_Data_Page_Info dpi; int num; int file_len = 0; dpt = (P_Data_Page_Text)malloc(DPT_LEN); dpi = (P_Data_Page_Info)malloc(DPI_LEN); if(!(dpt&&dpi)) exit(0); printf("您要生成数据页的个数:"); scanf("%d",&num); fpo4 = fopen("SHOW.LED","wb"); buff[file_len++] = num; buff[file_len++] = 0; buff[file_len++] = 0; buff[file_len++] = 0; fwrite(buff,4,1,fpo4); for(int i = 0; i < num ;i++) { dpt_len = 0; dpi_len = 0; fpo1 = fopen("DPT.LED","wb"); Init_DPT(dpt); fclose(fpo1); fpo2 = fopen("DPI.LED","wb"); Init_DPI(dpi); fwrite(buff,dpi_len,1,fpo2); fclose(fpo2); fpo3 = fopen("DP.LED","wb"); Init_DP(); fclose(fpo3); f3 = fopen("DP.LED","rb"); unsigned char chr; chr = fgetc(f3); file_len = 0; while(!feof(f3)) { buff[file_len++] = chr; chr = fgetc(f3); } fwrite(buff,file_len,1,fpo4); } fclose(fpo4); return 1; } void Init_DP() { int len = 0; buff[len++] = dpi_len+dpt_len; buff[len++] = 0; buff[len++] = 0; buff[len++] = 0; f1 = fopen("DPT.LED","rb"); f2 = fopen("DPI.LED","rb"); if(!(f1&&f2)) exit(0); unsigned char chr; chr = fgetc(f2); while(!feof(f2)) { buff[len++] = chr; chr = fgetc(f2); } chr = fgetc(f1); while(!feof(f1)) { buff[len++] = chr; chr = fgetc(f1); } fwrite(buff,dpi_len+dpt_len+4,1,fpo3); } void Init_DPT(P_Data_Page_Text dpt) { int k = 0; int num; int len; printf("/n/n数据项个数:"); scanf("%d",&num); for(int i = 0; i < num; i++) { len = 0; dpt->area_list_index = '5'; dpt->div_flag_0 = DIV; dpt->div_flag_1 = DIV; dpt->div_flag_2 = DIV; dpt->div_flag_3 = DIV; dpt->div_flag_4 = DIV; dpt->div_flag_5 = DIV; dpt->div_flag_6 = DIV; dpt->div_flag_7 = DIV; dpt->div_flag_8 = DIV; dpt->div_flag_9 = DIV; dpt->div_flag_10 = DIV; dpt->div_flag_11 = DIV; dpt->div_flag_01 = DIV; dpt->div_flag_02 = DIV; dpt->div_flag_03 = DIV; dpt->end1 = '0'; dpt->end2 = '0'; dpt->end3 = 13; dpt->end4 = 10; dpt->font_style = '0'; dpt->font_color[0] = '2'; dpt->font_color[1] = '5'; dpt->font_color[2] = '5'; dpt->bgcolor[0] = '-'; dpt->bgcolor[1] = '3'; dpt->bgcolor[2] = '0'; dpt->roll_speed_align = '0'; printf("\n\n字体:"); scanf("%s",dpt->font); printf("字号:"); scanf("%s",dpt->font_size); dpt->text_action = '0'; printf("显示信息:"); scanf("%s",dpt->text); printf("左上角X:"); scanf("%s",dpt->X); printf("左上角Y:"); scanf("%s",dpt->Y); printf("宽度:"); scanf("%s",dpt->L); printf("高度:"); scanf("%s",dpt->H); buff[len++] = dpt->area_list_index; buff[len++] = 1; while(dpt->X[k]) { buff[len++] = dpt->X[k++]; } k = 0; buff[len++] = 1; while(dpt->Y[k]) { buff[len++] = dpt->Y[k++]; } k = 0; buff[len++] = 1; while(dpt->L[k]) { buff[len++] = dpt->L[k++]; } k = 0; buff[len++] = 1; while(dpt->H[k]) { buff[len++] = dpt->H[k++]; } k = 0; buff[len++] = 1; buff[len++] = dpt->text_action; buff[len++] = 1; for(int n = 0; n < 3; n++) buff[len++] = dpt->bgcolor[n]; buff[len++] = 1; while(dpt->font[k]) { buff[len++] = dpt->font[k++]; } k = 0; buff[len++] = 1; while(dpt->font_size[k]) { buff[len++] = dpt->font_size[k++]; } k = 0; buff[len++] = 1; for(int l = 0; l < 3; l++) buff[len++] = dpt->font_color[l]; buff[len++] = 1; buff[len++] = dpt->font_style; buff[len++] = 1; buff[len++] = dpt->roll_speed_align; buff[len++] = 1; while(dpt->text[k]) { buff[len++] = dpt->text[k++]; } k = 0; buff[len++] = 1; buff[len++] = dpt->end1; buff[len++] = 1; buff[len++] = dpt->end2; buff[len++] = 1; buff[len++] = dpt->end3; buff[len++] = dpt->end4; dpt_len += len; fwrite(buff,len,1,fpo1); } } void Init_DPI(P_Data_Page_Info dpi) { int k = 0; printf("数据页名字:"); scanf("%s",dpi->page_name); dpi->div_flag_0 = DIV; dpi->fg = '0'; dpi->div_flag_1[0] = DIV; dpi->div_flag_1[1] = DIV; dpi->limit_time_flag = '0'; dpi->div_flag_2 = DIV; dpi->times = '8'; dpi->div_flag_3 = DIV; dpi->is_time = '0'; dpi->div_flag_4 = DIV; printf("上午/下午:"); scanf("%s",dpi->wuci_time); dpi->gap = 32; printf("时刻(00:00:00):"); scanf("%s",dpi->shike_time); dpi->div_flag_5 = DIV; while(dpi->page_name[k]) { buff[dpi_len++] = dpi->page_name[k++]; } k = 0; buff[dpi_len++] = 1; buff[dpi_len++] = '0'; buff[dpi_len++] = 1; buff[dpi_len++] = 1; buff[dpi_len++] = dpi->limit_time_flag; buff[dpi_len++] = 1; buff[dpi_len++] = dpi->times; buff[dpi_len++] = 1; buff[dpi_len++] = dpi->is_time; buff[dpi_len++] = 1; while(dpi->wuci_time[k]!='/0') { buff[dpi_len++] = dpi->wuci_time[k++]; } k = 0; buff[dpi_len++] = dpi->gap; while(dpi->shike_time[k]!='/0') { buff[dpi_len++] = dpi->shike_time[k++]; } buff[dpi_len++] = 1; } /* 取得文本长度 */ int Get_Text_Length() { FILE *fpi; int length = 1; fpi = fopen("1.LED","r"); char ch = fgetc(fpi); while(!feof(fpi)) { length++; ch = fgetc(fpi); } fclose(fpi); return length; }

词法分析之LED文件批量生成相关推荐

  1. 如何通过TXT文件批量生成EAN14条码

    EAN14条形码是基于EAN-128码的编码规则,长度是14位,第14位为校验位,由前面13位计算得出.EAN14条形码通常会用来制作集装箱编号条码.批量制作条码时,我们一般会通过导入数据库的方式来实 ...

  2. 使用Excel文件批量生成Codabar码

    Codabar(库德巴码)是由Monarch Marking Systems在1972年研制的条形码.它是在"2 of 5"后早期阶段引入的条形码.广泛用于需要序列号的领域,如血库 ...

  3. 通过Excel文件批量生成Code 39扩展码

    code39码是条形码的一种,编码简单.能够对任意长度的数据进行编码.支持设备广泛,所以code39码是最常用的条形码之一.code39码在条码打印软件中有两种表现类型:标准code39码和支持字符更 ...

  4. 通过TXT文件批量生成UPC-A条码

    UPC码算是EAN条码的前身,因此两者有着类似的特性及编码方式.UPC码分为标准型UPC-A码及简易型UPC-E码,UPC-A条码左侧6个条码字符均由A子集的条码字符组成,右侧数据符及校验符均由C子集 ...

  5. TXT文件批量生成二维码

    大多数人在制作标签时,数据库文件都选择Excel文件,其实TXT文件在作为数据库时,也是可以制作各种可变数据标签的,比如批量生成二维码,条形码等.下面我们就使用TXT文件作为数据库批量生成二维码. 打 ...

  6. unity导出fbx模型_Unity批量合并Animation工具/根据已有的Animation文件批量生成带FBX动画工具...

    由于本人现有项目的项目素材大部分都需要继续沿用旧项目的模型与动画,但在接受旧模型动画的时候发现,模型动画由于外包已经丢失了3dmax的源文件,只剩下了一堆AnimationCilp(.anim)文件与 ...

  7. CodeSmith将模板文件批量生成文件的方法

    以前写codeSmith模板的时候,如果直接像asp一样混排编写的话,代码输出来codeSmith中,不知道怎么保存到文件,后来把所有要输出的模板文字都用stringBuiler串接起来然后IO到文件 ...

  8. C++根据.h文件批量生成需要的函数框架

    类似VS中添加类 A的方法 int abc(); 会在对应的实现文件.cpp中自动生成, int A::abc() { } 初学python,尝试写了一个脚本,自动根据写好的.h文件完成这一工作,也支 ...

  9. Python读取Execl文件批量生成二维码

    #参考他人稍微修改 引入包 import qrcode import xlrd 代码 生成二维码 def create_qrcode(file_name, content): img = qrcode ...

  10. PHP 批量生成 WORD2007 文件

    由于MS OFFICE 07中新的文件格式启用了zip+xml的方式,这也就意味着可以用PHP方便地来实现WORD中数据的自动生成的功能.一个插 件:openxmlphpword可以满足你的需求. 它 ...

最新文章

  1. Android 反编译Apk提取XML文件
  2. python基础代码事例-菜鸟世界 -python基础---set
  3. 类的继承定义一个computer类在此基础上派生出两个子类(继承与多态绑定)
  4. vmware ubuntu 虚拟机每次启动都蓝屏怎么办?
  5. 数字信号处理-C语言数字信号的产生
  6. GitHub:一份玩转 GitHub 的秘诀,值得收藏!
  7. 两端分散对齐怎么设置_Word文字很难对齐?用这4个方法,2秒可对齐所有文字!...
  8. Js引擎解析执行 阅读笔记
  9. 可缺一台洗衣机的ykcchf
  10. paging modes-分页模式
  11. linux写语句自动执行一次,Linux系统下自动执行指定任务 cron
  12. SylixOS Python扩展库开发
  13. latex中文简历,硕博士找工作实习用,顶级简约简历
  14. Mathematica 矩阵的LU分解
  15. 计算机信息系统的运行安全包括什么,计算机信息系统安全主要包括什么
  16. 想去看演唱却总是抢不到票?教你用Python制作一个自动抢票脚本
  17. iOS平台手机银行App大多存安全风险漏洞
  18. PHP排序大数据量分页
  19. linux命令之----sort命令用于将文本文件内容加以排序
  20. 陆金所—稳盈-e享统计-python爬虫

热门文章

  1. OD调试检测研究笔记(以E盾简化版作研究时写的笔记)
  2. reg类型变量综合电路_基本门电路逻辑符号.doc
  3. 上海瀚示医药行业中文显示电子拣货标签 — 智能播种车
  4. 海森矩阵的特征值和特征向量的物理意义推导
  5. 教你写脚本屏蔽百度广告 csdn广告
  6. wps在线预览接口_Office在线预览及PDF在线预览的实现方式大集合
  7. 智能电视linux刷安卓,智能电视安卓盒子刷机ROOT成砖的解决办法
  8. 发那科机器人xyz的方向_最全 | 发那科工业机器人示教器详细介绍
  9. digester java_在Digester中定位特定属性 - Java
  10. 攻防世界crypto部分sherlock的writeup,原来不是培根密码。