📄 web_data.h
字号:
/*************************************************** Copyright(C), 2008 , JUST File name: web_data.h Author: StevenZ Version: 0.9 Date: 080906 Description: 点划式网页浏览器相关数据和初始化及释放函数 History: //修改历史列表 1. Date:08/07/06 Author:StevenZ Modification:添加触摸屏数据结构及函数 2. Date:08/07/16 Author:StevenZ Modification:添加网页数据数据结构及函数 3. Date:08/09/01 Author:StevenZ Modification:添加表单结构及函数 ***************************************************/#ifndef _WEB_DATA_H#define _WEB_DATA_H#include <sys/types.h>#include <sys/socket.h> #include <time.h>#include <stdlib.h>#include <stdio.h>#define TITLESIZE 255#define WEBDATASIZE 10#define FAVORSIZE 20/*tflag=-1表链接+端口号,tflag=-2表表单,tflag=-3表submit, tflag=0表文本,tflag>0表链表表头同时表示结点总数*/#define IP_PORT_D -1 /*格式:L|text|"ip_port"\0*/#define BLANK_D -2 /*格式:B|action|method|type1|name1|value1|...|typeN|nameN|valueN\0*/#define SUBMIT_D -3#define TEXT_D 0 /*格式:T|text\0*/ //#undef DEBUG#define DEBUG#ifdef DEBUG#define DPRINTF(x...) printf("debug:"##x)#else#define DPRINTF(x...)#endif/*触摸屏返回值结构体*/typedef struct{ unsigned short pressure;/*0:松开 1:首次按下 2:按住*/ unsigned short x; unsigned short y; unsigned short pad;}TS_RET;/*触摸屏数据结构体*/struct TS_DATE { TS_RET ts_ret;};/*收藏夹数据结构体*/typedef struct{ char *favor_name[FAVORSIZE]; char *favor_ip_port[FAVORSIZE]; int favor_total; int favor_current;}FAVOR_DATA;/*正文数据结构体*/struct web_text_list{ void *text; int tflag; /*tflag=-1表链接+端口号,tflag=-2表表单,tflag=-3表submit, tflag=0表文本,tflag>0表链表表头同是表示结点总数*/ int sflag;/*用于保存时的标识符,平时为0*/ struct web_text_list *prev; struct web_text_list *next; struct web_text_list *parent; struct web_text_list *child;};/*网页数据结构体*/struct Web_Data{ char *title; char *ip_port;/*网址内容,有待确定*/ struct web_text_list *text_list_head; struct web_text_list *current; struct timespec download_time;/*网页下载时间*/ short int need_redownload; /*是否需要重新下载网页*/ short int can_text_forward; /*每次正文级后退+1,为正数说明可正文级前进-1,重下网页清0*/ short int can_text_backward; /*每次正文级前进或进入下一级正文+1, 为正数说明可正文级后退-1,重下网页清0*/};/*浏览器数据结构体(包含WEBDATASIZE个网页数据)*/struct websitedata{ struct Web_Data web_data[WEBDATASIZE]; int website_head,website_tail,website_total;};/*表单数据结构体*/typedef struct//一个表单数据结构体{ char *action; //所要传送的目的地址 char method[4]; //传送方式 int input_num; //总的input项个数 int submit_num; //总的submit个数 char **type_h; //type项头指针 char **name_h; //name项头指针 char **value_h; //value项头指针 char **note_h; //note项头指针,中文注释}BLANK;/*初始化收藏夹数据*/void favor_data_init(FAVOR_DATA *favor_data);/*释放收藏夹数据*/void free_favor_data(FAVOR_DATA *favor_data);/*初始化触摸屏数据*/void ts_date_init(struct TS_DATE * b);/*初始化正文数据*/void init_web_text_list(struct web_text_list *wtlptr);/*初始化网页数据*/void init_web_data(struct Web_Data *wd);/*释放网页数据*/void free_web_data(struct Web_Data *wd);/*初始化浏览器数据*/void websitedata_init(struct websitedata *wsd);/*释放浏览器数据*/void free_websitedata(struct websitedata *wsd);/*初始化表单数据*/void blank_init(BLANK *blk);/*释放表单数据*/void free_blank(BLANK *pblk);void ts_date_init(struct TS_DATE * b){ b->ts_ret.pressure=3; b->ts_ret.x=0; b->ts_ret.y=0; b->ts_ret.pad=0;}void init_web_text_list(struct web_text_list *wtlptr){ wtlptr->text=NULL; wtlptr->tflag=1; /*head中的tflag表示结点个数,head也算一个结点*/ wtlptr->sflag=0; wtlptr->prev=NULL; wtlptr->next=NULL; wtlptr->parent=NULL; wtlptr->child=NULL;}void init_web_data(struct Web_Data *wd){ struct web_text_list *text_head=malloc(sizeof(struct web_text_list)); init_web_text_list(text_head); wd->text_list_head=text_head; wd->current=text_head; wd->need_redownload=0; wd->can_text_forward=0; wd->can_text_backward=0; wd->title=NULL; wd->ip_port=NULL;}void websitedata_init(struct websitedata *wsd){ int i; for(i=0;i<WEBDATASIZE;i++) { DPRINTF("init wsd->web_data[%d]\n",i); init_web_data(&wsd->web_data[i]); } wsd->website_head=0; wsd->website_tail=0; wsd->website_total=0;}void blank_init(BLANK *blk){ blk->action=NULL; blk->input_num=0; blk->submit_num=0; blk->type_h=NULL; blk->name_h=NULL; blk->value_h=NULL; blk->note_h=NULL;}void free_blank(BLANK *pblk){ int i; if(pblk->action) free(pblk->action); for(i=0;i<pblk->input_num;i++) { if((pblk->type_h)[i]) free((pblk->type_h)[i]); if((pblk->name_h)[i]) free((pblk->name_h)[i]); if((pblk->value_h)[i]) free((pblk->value_h)[i]); if((pblk->note_h)[i]) free((pblk->note_h)[i]); } if(pblk->type_h) free(pblk->type_h); if(pblk->name_h) free(pblk->name_h); if(pblk->value_h) free(pblk->value_h); if(pblk->note_h) free(pblk->note_h);}void free_web_data(struct Web_Data *wd){ struct web_text_list *wtlptr=wd->text_list_head,*del_wtlptr; /*free结构体web_text_list*/ while(1) {// DPRINTF("1\n"); while(1) { if(wtlptr->next!=NULL||wtlptr->child!=NULL) { if(wtlptr->next!=NULL) { wtlptr=wtlptr->next; continue; } else { wtlptr=wtlptr->child; continue; } } else break; } if(wtlptr->prev!=NULL) { del_wtlptr=wtlptr; wtlptr=wtlptr->prev; wtlptr->next=NULL;// DPRINTF("2\n"); if(del_wtlptr->text) { if(del_wtlptr->tflag==BLANK_D) free_blank(del_wtlptr->text); else free(del_wtlptr->text); }// DPRINTF("3\n"); free(del_wtlptr); continue; } if(wtlptr->parent!=NULL) { del_wtlptr=wtlptr; wtlptr=wtlptr->parent; wtlptr->child=NULL;// DPRINTF("4\n"); if(del_wtlptr->text) { if(del_wtlptr->tflag==BLANK_D) free_blank(del_wtlptr->text); else free(del_wtlptr->text); }// DPRINTF("5\n"); free(del_wtlptr); continue; } break; }// DPRINTF("6\n"); free(wtlptr); /*free title和ip_port*/// DPRINTF("7\n"); if(wd->title) free(wd->title); if(wd->ip_port)// DPRINTF("8\n"); free(wd->ip_port);}void free_websitedata(struct websitedata *wsd){ int i; for(i=0;i<WEBDATASIZE;i++) { DPRINTF("free wsd->web_data[%d]\n",i); free_web_data(&wsd->web_data[i]); } }void favor_data_init(FAVOR_DATA *favor_data){ int i; favor_data->favor_total=0; favor_data->favor_current=0; for(i=0;i<FAVORSIZE;i++) { favor_data->favor_name[i]=NULL; favor_data->favor_ip_port[i]=NULL; }}void free_favor_data(FAVOR_DATA *favor_data){ int i; DPRINTF("free favor_data now...\n"); for(i=0;i<favor_data->favor_total;i++) { if(favor_data->favor_name[i]) free(favor_data->favor_name[i]); if(favor_data->favor_ip_port[i]) free(favor_data->favor_ip_port[i]); }}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -