詞法分析之LED檔案批量產生

來源:互聯網
上載者:User

#include <stdio.h><br />#include <stdlib.h><br />#include <string.h></p><p>/* 關鍵字表宏定義 */<br />#define KEYTYPE int // #define ERRTYPE -1<br />#define FILES 0<br />#define DATE 1<br />#define FONT_NAME 2<br />#define FONT_SIZE 3<br />#define TIMES 4<br />#define HEAD 5<br />#define DATA_BEGIN 6<br />#define DATA_END 7<br />#define KEYLEN 8</p><p>/* LED位元位定義 */<br />#define DIV (('1')-('0')) // 分隔字元代表的整數 01<br />#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字元型數字,分別為常規、粗體、斜體、粗斜體)</p><p>char *KeyWord[KEYLEN] = {"file","date","font-name","font-size","time","head","data-begin","data-end"};</p><p>KEYTYPE MatchWithKeyWord(char *strBuff); // 關鍵字表查表<br />int GetString(char *strBuff,FILE *fp);<br />int WriteLedFile(FILE *WriteFilePoint,char *FileNameBuff,char *FontBuff,char *FontSize,char *Times,char *HeadBuff,char *BodyBuff);</p><p>int main(int argc,char *argv[])<br />{<br /> FILE *ReadFilePoint; // 讀檔案指標<br /> FILE *WriteFilePoint;<br /> char FileNameBuff[50]; // 暫存組建檔案的檔案名稱<br /> char FontBuff[20]; // 暫存主體部分的字型<br /> char FontSize[10]; // 暫存字型大小<br /> char Times[10]; // 迴圈次數或者時間<br /> char HeadBuff[50]; // 顯示的頭<br /> char BodyBuff[600]; // 主體顯示部分<br /> char TempBuff[30]; // 臨時緩衝區,用來儲存待分析的字串<br /> char ch; // 讀取檔案字元<br /> int len; // 記錄臨時緩衝區的長度 /*<br /> if(argc != 2) // 參數錯誤處理<br /> {<br /> printf("提示:參數錯誤!/n/n使用方法:/n%s FileName/n",argv[0]);<br /> exit(0);<br /> }<br /> ReadFilePoint = fopen(argv[1],"r"); // 開啟待分析的檔案 */<br /> ReadFilePoint = fopen("pro.txt","r");<br /> if(!ReadFilePoint) // 判斷開啟是否成功<br /> {<br /> printf("檔案%s開啟失敗,可能此檔案不在您所指定的目錄,請檢查後重試!/n",argv[1]);<br /> exit(0);<br /> } </p><p> ch = fgetc(ReadFilePoint);<br /> while(!feof(ReadFilePoint)) // 讀取檔案並進行分析<br /> {<br /> if(ch == '<') // 讀到標記開始<br /> {<br /> len = 0;<br /> ch = fgetc(ReadFilePoint);<br /> while(ch!='>') // 迴圈讀入標記值到臨時緩衝區<br /> {<br /> TempBuff[len++] = ch;<br /> ch = fgetc(ReadFilePoint);<br /> } // 迴圈結束後,緩衝區中將存放<>之間的字串<br /> TempBuff[len] = '/0'; // 將字元數組構造成字串<br /> switch(MatchWithKeyWord(TempBuff)) // 識別每個字串的類型<br /> {<br /> case FILES: // 一個檔案開始則讀取下一個字元<br /> ch = fgetc(ReadFilePoint);<br /> break;<br /> case DATE: // 將日期讀入到FileNameBuff緩衝區中用作檔案名稱<br /> GetString(FileNameBuff,ReadFilePoint);<br /> break;<br /> case FONT_NAME: // 讀入字型放入緩衝區FontBuff<br /> GetString(FontBuff,ReadFilePoint);<br /> break;<br /> case FONT_SIZE: // 讀入字型大小<br /> GetString(FontSize,ReadFilePoint);<br /> break;<br /> case TIMES: // 讀入迴圈次數,顯示時間<br /> GetString(Times,ReadFilePoint);<br /> break;<br /> case HEAD:<br /> GetString(HeadBuff,ReadFilePoint);<br /> break;<br /> case DATA_BEGIN: // 顯示主體<br /> GetString(BodyBuff,ReadFilePoint);<br /> break;<br /> case DATA_END:<br /> WriteLedFile(WriteFilePoint,FileNameBuff,FontBuff,FontSize,Times,HeadBuff,BodyBuff);<br /> ch = fgetc(ReadFilePoint);<br /> break;<br /> case ERRTYPE:<br /> printf("此檔案中存在不可識別的標識符

LEDPlayer顯示屏檔案自動產生C語言實現----根據破解檔案格式

/******************** ** **LED檔案產生工具 ** *********************/</p><p>#include <stdio.h><br />#include <stdlib.h><br />#include <string.h></p><p>#define DIV (('1')-('0')) // 宏定義分隔字元代表的整數 01<br />#define DPI_LEN sizeof(Data_Page_Info)<br />#define DPT_LEN sizeof(Data_Page_Text)</p><p>typedef struct N_Data_Page_Text<br />{<br /> unsigned char area_list_index; // 地區清單索引5(字元型數字)(單行文本)<br /> unsigned char div_flag_0; // 分割標誌,01<br /> unsigned char X[5];// 螢幕顯示座標(左上方X+左上方Y+寬度L+高度H)(中間用整型01隔開,單位為字元型數字代表的像素)<br /> unsigned char div_flag_01;<br /> unsigned char Y[5];<br /> unsigned char div_flag_02;<br /> unsigned char L[5];<br /> unsigned char div_flag_03;<br /> unsigned char H[5];<br /> unsigned char div_flag_1; // 分割標誌,01<br /> char text_action; // 單行文本類型值(靜態0,左滾1,右滾2,上滾3,下滾4)(字元型數字)<br /> unsigned char div_flag_2; // 分割標誌,01<br /> unsigned char bgcolor[3];// 背景色<br /> unsigned char div_flag_3; // 分割標誌,01<br /> char font[25]; // 字型(字元數組)<br /> unsigned char div_flag_4; // 分割標誌,01<br /> char font_size[5]; // 字型大小(字元型數字)<br /> unsigned char div_flag_5; // 分割標誌,01<br /> unsigned char font_color[3]; // 字型顏色(字元型數字255為紅色)<br /> unsigned char div_flag_6; // 分割標誌,01<br /> unsigned char font_style;// 字型(取值為0、4、8、12字元型數字,分別為常規、粗體、斜體、粗斜體)<br /> unsigned char div_flag_7; // 分割標誌,01<br /> unsigned char roll_speed_align;// 單行文本類型的捲動速度,當單行文本類型為靜態時此處值0、1、2分別代表對齊中的靠左對齊、靠右對齊、置中(字元型數字)<br /> unsigned char div_flag_8; // 分割標誌,01<br /> char text[200];// 要顯示的字串(字元數組)<br /> unsigned char div_flag_9; // 分割標誌,01<br /> unsigned char end1; // 30<br /> unsigned char div_flag_10; // 分割標誌,01<br /> unsigned char end2; // 30<br /> unsigned char div_flag_11; // 分割標誌,01<br /> unsigned char end3; // 0D<br /> unsigned char end4; // 0A<br />}Data_Page_Text,*P_Data_Page_Text;</p><p>typedef struct N_Data_Page_Info {<br /> char page_name[50];// 資料頁名字<br /> unsigned char div_flag_0; // 分割標誌,01<br /> unsigned char fg; // 預設為零<br /> unsigned char div_flag_1[2];<br /> unsigned char limit_time_flag;// 限次/限時播放(0/1(字元型數字))<br /> unsigned char div_flag_2;<br /> unsigned char times; // 次數/秒數(字元型數字)<br /> unsigned char div_flag_3;<br /> unsigned char is_time; // 是否定時(0不定時/1定時)(字元型數字)<br /> unsigned char div_flag_4;<br /> char wuci_time[20]; // 時間(字元數組(上/下午+空格+00:00:00))<br /> unsigned char gap; // 空格<br /> char shike_time[20]; // 時刻<br /> unsigned char div_flag_5;<br />}Data_Page_Info,*P_Data_Page_Info;</p><p>/* 一個位元組的位移量:從資料頁顯示資訊開始到本資料頁結束的長度(整型)三個零:特徵位00+00+00(整型) */</p><p>typedef struct N_DatePage // 資料頁結構定義<br />{<br /> unsigned char page_head[4];<br /> Data_Page_Info *data_page_info;<br /> Data_Page_Text *data_page_text;<br />}Date_Page,*P_Date_Page;</p><p>/* LED檔案頭:第一個位元組:頁數目(整型) 三個零:特徵位00+00+00(整型) */</p><p>typedef struct N_LED // LED檔案定義<br />{<br /> unsigned char file_head[4];<br /> Date_Page *data_page; // 資料頁結構<br />}LED,*P_LED;</p><p>int dpt_len = 0;<br />int dpi_len = 0;<br />unsigned char buff[1024*1024];</p><p>int Get_Text_Length();<br />FILE *f1,*f2,*f3;<br />FILE *fpo1,*fpo2,*fpo3,*fpo4;<br />void Init_DP();<br />void Init_DPT(P_Data_Page_Text dpt);<br />void Init_DPI(P_Data_Page_Info dpi);</p><p>int main()<br />{<br /> P_Data_Page_Text dpt;<br /> P_Data_Page_Info dpi;<br /> int num;<br /> int file_len = 0;<br /> dpt = (P_Data_Page_Text)malloc(DPT_LEN);<br /> dpi = (P_Data_Page_Info)malloc(DPI_LEN);<br /> if(!(dpt&&dpi))<br /> exit(0);<br /> printf("您要產生資料頁的個數:");<br /> scanf("%d",&num);<br /> fpo4 = fopen("SHOW.LED","wb");<br /> buff[file_len++] = num;<br /> buff[file_len++] = 0;<br /> buff[file_len++] = 0;<br /> buff[file_len++] = 0;<br /> fwrite(buff,4,1,fpo4);<br /> for(int i = 0; i < num ;i++)<br /> {<br /> dpt_len = 0;<br /> dpi_len = 0;<br /> fpo1 = fopen("DPT.LED","wb");<br /> Init_DPT(dpt);<br /> fclose(fpo1);<br /> fpo2 = fopen("DPI.LED","wb");<br /> Init_DPI(dpi);<br /> fwrite(buff,dpi_len,1,fpo2);<br /> fclose(fpo2);<br /> fpo3 = fopen("DP.LED","wb");<br /> Init_DP();<br /> fclose(fpo3);<br /> f3 = fopen("DP.LED","rb");<br /> unsigned char chr;<br /> chr = fgetc(f3);<br /> file_len = 0;<br /> while(!feof(f3))<br /> {<br /> buff[file_len++] = chr;<br /> chr = fgetc(f3);<br /> }<br /> fwrite(buff,file_len,1,fpo4);<br /> }<br /> fclose(fpo4);<br /> return 1;<br />}</p><p>void Init_DP()<br />{<br /> int len = 0;<br /> buff[len++] = dpi_len+dpt_len;<br /> buff[len++] = 0;<br /> buff[len++] = 0;<br /> buff[len++] = 0;<br /> f1 = fopen("DPT.LED","rb");<br /> f2 = fopen("DPI.LED","rb");<br /> if(!(f1&&f2))<br /> exit(0);<br /> unsigned char chr;<br /> chr = fgetc(f2);<br /> while(!feof(f2))<br /> {<br /> buff[len++] = chr;<br /> chr = fgetc(f2);<br /> }<br /> chr = fgetc(f1);<br /> while(!feof(f1))<br /> {<br /> buff[len++] = chr;<br /> chr = fgetc(f1);<br /> }<br /> fwrite(buff,dpi_len+dpt_len+4,1,fpo3);<br />}</p><p>void Init_DPT(P_Data_Page_Text dpt)<br />{<br /> int k = 0;<br /> int num;<br /> int len;<br /> printf("/n/n資料項目個數:");<br /> scanf("%d",&num);<br /> for(int i = 0; i < num; i++)<br /> {<br /> len = 0;<br /> dpt->area_list_index = '5';<br /> dpt->div_flag_0 = DIV;<br /> dpt->div_flag_1 = DIV;<br /> dpt->div_flag_2 = DIV;<br /> dpt->div_flag_3 = DIV;<br /> dpt->div_flag_4 = DIV;<br /> dpt->div_flag_5 = DIV;<br /> dpt->div_flag_6 = DIV;<br /> dpt->div_flag_7 = DIV;<br /> dpt->div_flag_8 = DIV;<br /> dpt->div_flag_9 = DIV;<br /> dpt->div_flag_10 = DIV;<br /> dpt->div_flag_11 = DIV;<br /> dpt->div_flag_01 = DIV;<br /> dpt->div_flag_02 = DIV;<br /> dpt->div_flag_03 = DIV;<br /> dpt->end1 = '0';<br /> dpt->end2 = '0';<br /> dpt->end3 = 13;<br /> dpt->end4 = 10;<br /> dpt->font_style = '0';<br /> dpt->font_color[0] = '2';<br /> dpt->font_color[1] = '5';<br /> dpt->font_color[2] = '5';<br /> dpt->bgcolor[0] = '-';<br /> dpt->bgcolor[1] = '3';<br /> dpt->bgcolor[2] = '0';<br /> dpt->roll_speed_align = '0';<br /> printf("\n\n字型:");<br /> scanf("%s",dpt->font);<br /> printf("字型大小:");<br /> scanf("%s",dpt->font_size);<br /> dpt->text_action = '0';<br /> printf("顯示資訊:");<br /> scanf("%s",dpt->text);<br /> printf("左上方X:");<br /> scanf("%s",dpt->X);<br /> printf("左上方Y:");<br /> scanf("%s",dpt->Y);<br /> printf("寬度:");<br /> scanf("%s",dpt->L);<br /> printf("高度:");<br /> scanf("%s",dpt->H);<br /> buff[len++] = dpt->area_list_index;<br /> buff[len++] = 1;<br /> while(dpt->X[k])<br /> {<br /> buff[len++] = dpt->X[k++];<br /> }<br /> k = 0;<br /> buff[len++] = 1;<br /> while(dpt->Y[k])<br /> {<br /> buff[len++] = dpt->Y[k++];<br /> }<br /> k = 0;<br /> buff[len++] = 1;<br /> while(dpt->L[k])<br /> {<br /> buff[len++] = dpt->L[k++];<br /> }<br /> k = 0;<br /> buff[len++] = 1;<br /> while(dpt->H[k])<br /> {<br /> buff[len++] = dpt->H[k++];<br /> }<br /> k = 0;<br /> buff[len++] = 1;<br /> buff[len++] = dpt->text_action;<br /> buff[len++] = 1;<br /> for(int n = 0; n < 3; n++)<br /> buff[len++] = dpt->bgcolor[n];<br /> buff[len++] = 1;<br /> while(dpt->font[k])<br /> {<br /> buff[len++] = dpt->font[k++];<br /> }<br /> k = 0;<br /> buff[len++] = 1;<br /> while(dpt->font_size[k])<br /> {<br /> buff[len++] = dpt->font_size[k++];<br /> }<br /> k = 0;<br /> buff[len++] = 1;<br /> for(int l = 0; l < 3; l++)<br /> buff[len++] = dpt->font_color[l];<br /> buff[len++] = 1;<br /> buff[len++] = dpt->font_style;<br /> buff[len++] = 1;<br /> buff[len++] = dpt->roll_speed_align;<br /> buff[len++] = 1;<br /> while(dpt->text[k])<br /> {<br /> buff[len++] = dpt->text[k++];<br /> }<br /> k = 0;<br /> buff[len++] = 1;<br /> buff[len++] = dpt->end1;<br /> buff[len++] = 1;<br /> buff[len++] = dpt->end2;<br /> buff[len++] = 1;<br /> buff[len++] = dpt->end3;<br /> buff[len++] = dpt->end4;<br /> dpt_len += len;<br /> fwrite(buff,len,1,fpo1);<br /> }<br /> }</p><p>void Init_DPI(P_Data_Page_Info dpi)<br />{<br /> int k = 0;<br /> printf("資料頁名字:");<br /> scanf("%s",dpi->page_name);<br /> dpi->div_flag_0 = DIV;<br /> dpi->fg = '0';<br /> dpi->div_flag_1[0] = DIV;<br /> dpi->div_flag_1[1] = DIV;<br /> dpi->limit_time_flag = '0';<br /> dpi->div_flag_2 = DIV;<br /> dpi->times = '8';<br /> dpi->div_flag_3 = DIV;<br /> dpi->is_time = '0';<br /> dpi->div_flag_4 = DIV;<br /> printf("上午/下午:");<br /> scanf("%s",dpi->wuci_time);<br /> dpi->gap = 32;<br /> printf("時刻(00:00:00):");<br /> scanf("%s",dpi->shike_time); dpi->div_flag_5 = DIV;<br /> while(dpi->page_name[k])<br /> {<br /> buff[dpi_len++] = dpi->page_name[k++];<br /> }<br /> k = 0;<br /> buff[dpi_len++] = 1;<br /> buff[dpi_len++] = '0';<br /> buff[dpi_len++] = 1;<br /> buff[dpi_len++] = 1;<br /> buff[dpi_len++] = dpi->limit_time_flag;<br /> buff[dpi_len++] = 1;<br /> buff[dpi_len++] = dpi->times;<br /> buff[dpi_len++] = 1;<br /> buff[dpi_len++] = dpi->is_time;<br /> buff[dpi_len++] = 1;<br /> while(dpi->wuci_time[k]!='/0')<br /> {<br /> buff[dpi_len++] = dpi->wuci_time[k++];<br /> }<br /> k = 0;<br /> buff[dpi_len++] = dpi->gap;<br /> while(dpi->shike_time[k]!='/0')<br /> {<br /> buff[dpi_len++] = dpi->shike_time[k++];<br /> } buff[dpi_len++] = 1;<br />}<br />/* 取得文本長度 */<br />int Get_Text_Length()<br />{<br /> FILE *fpi;<br /> int length = 1;<br /> fpi = fopen("1.LED","r");<br /> char ch = fgetc(fpi);<br /> while(!feof(fpi))<br /> {<br /> length++;<br /> ch = fgetc(fpi);<br /> }<br /> fclose(fpi);<br /> return length;<br />}</p><p>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.