]> www.wagner.pp.ru Git - oss/catdoc.git/blob - src/pptparse.c
Recreated CVS repository from working copy
[oss/catdoc.git] / src / pptparse.c
1 /**
2  * @file   pptparse.c
3  * @author Alex Ott <alexott@gmail.com>
4  * @date   23 äÅË 2004
5  * Version: $Id: pptparse.c,v 1.1 2006-02-24 17:44:06 vitus Exp $
6  * Copyright: Alex Ott
7  * 
8  * @brief  .ppt parsing routines
9  * 
10  * 
11  */
12
13 #ifdef HAVE_CONFIG_H
14 #include <config.h>
15 #endif
16 #include <stdlib.h>
17 #include <string.h>
18 #include <math.h>
19 #include <time.h>
20 #include "ppt.h"
21 #include "catdoc.h"
22 #include "ppttypes.h"
23
24 static void process_item (int rectype, long reclen, FILE* input);
25
26 #if !defined(min)
27 #define min(x,y) ((x) < (y) ? (x) : (y))
28 #endif
29
30
31 /** 
32  * 
33  * 
34  * @param input 
35  * @param filename 
36  */
37 void do_ppt(FILE *input,char *filename) {
38         int itemsread=1;
39         int rectype;
40         long reclen;
41         unsigned char recbuf[8];
42
43         while(itemsread) {
44                 itemsread = catdoc_read(recbuf, 1, 8, input);
45 /*              fprintf(stderr,"itemsread=%d: ",itemsread); */
46 /*              for(i=0; i<8; i++) */
47 /*                      fprintf(stderr,"%02x ",recbuf[i]); */
48 /*              fprintf(stderr,"\n"); */
49                 
50                 if (catdoc_eof(input)) {
51                         process_item(DOCUMENT_END,0,input);
52                         return;
53                 }
54                 if(itemsread < 8)
55                         break;
56                 rectype=getshort(recbuf,2);
57                 reclen=getulong(recbuf,4);
58                 if (reclen < 0) {
59                         return;
60                 }       
61                 process_item(rectype,reclen,input);
62         }
63 }
64
65
66 /** 
67  * 
68  * 
69  * @param rectype 
70  * @param reclen 
71  * @param input 
72  */
73 static void process_item (int rectype, long reclen, FILE* input) {
74         int i=0, u;
75         static char buf[2];
76
77         switch(rectype) {
78         case DOCUMENT_END:
79 /*              fprintf(stderr,"End of document, ended at %ld\n",catdoc_tell(input)); */
80                 catdoc_seek(input, reclen, SEEK_CUR);
81                 break;
82
83         case DOCUMENT:
84 /*              fprintf(stderr,"Start of document, reclen=%ld, started at %ld\n", reclen, */
85 /*                                              catdoc_tell(input)); */
86                 break;
87
88         case DOCUMENT_ATOM:
89 /*              fprintf(stderr,"DocumentAtom, reclen=%ld\n", reclen); */
90                 catdoc_seek(input, reclen, SEEK_CUR);
91                 break;
92
93         case SLIDE:
94 /*              fprintf(stderr,"Slide, reclen=%ld\n", reclen); */
95 /*              fputs("---------------------------------------\n",stderr); */
96                 break;
97
98         case SLIDE_ATOM:
99 /*              fprintf(stderr,"SlideAtom, reclen=%ld\n", reclen); */
100                 catdoc_seek(input, reclen, SEEK_CUR);
101                 break;
102                 
103         case SLIDE_BASE:
104 /*              fprintf(stderr,"SlideBase, reclen=%ld\n", reclen); */
105                 break;
106
107         case SLIDE_BASE_ATOM:
108 /*              fprintf(stderr,"SlideBaseAtom, reclen=%ld\n", reclen); */
109                 catdoc_seek(input, reclen, SEEK_CUR);
110                 break;
111                 
112         case NOTES:
113 /*              fprintf(stderr,"Notes, reclen=%ld\n", reclen); */
114                 break;
115
116         case NOTES_ATOM:
117 /*              fprintf(stderr,"NotesAtom, reclen=%ld\n", reclen); */
118                 catdoc_seek(input, reclen, SEEK_CUR);
119                 break;
120                 
121         case HEADERS_FOOTERS:
122 /*              fprintf(stderr,"HeadersFooters, reclen=%ld\n", reclen); */
123                 break;
124
125         case HEADERS_FOOTERS_ATOM:
126 /*              fprintf(stderr,"HeadersFootersAtom, reclen=%ld\n", reclen); */
127                 catdoc_seek(input, reclen, SEEK_CUR);
128                 break;
129                 
130         case MAIN_MASTER:
131 /*              fprintf(stderr,"MainMaster, reclen=%ld\n", reclen); */
132                 break;
133                 
134         case TEXT_BYTES_ATOM: {
135 /*                      fprintf(stderr,"TextBytes, reclen=%ld\n", reclen); */
136                         for(i=0; i < reclen; i++) {
137                                 catdoc_read(buf,1,1,input);
138                                 if((unsigned char)*buf!=0x0d)
139                                         fputs(convert_char((unsigned char)*buf),stdout);
140                                 else
141                                         fputc('\n',stdout);
142                         }
143                         fputc('\n',stdout);
144                 }
145                 break;
146                 
147         case TEXT_CHARS_ATOM: 
148         case CSTRING: {
149                         long text_len;
150                         
151 /*                      fprintf(stderr,"CString, reclen=%ld\n", reclen); */
152                         text_len=reclen/2;
153                         for(i=0; i < text_len; i++) {
154                                 catdoc_read(buf,2,1,input);
155                                 u=(unsigned short)getshort(buf,0);
156                                 if(u!=0x0d)
157                                         fputs(convert_char(u),stdout);
158                                 else
159                                         fputc('\n',stdout);
160                         }
161                         fputc('\n',stdout);
162                 }
163                 break;
164                 
165         case USER_EDIT_ATOM:
166 /*              fprintf(stderr,"UserEditAtom, reclen=%ld\n", reclen); */
167                 catdoc_seek(input, reclen, SEEK_CUR);
168                 break;
169
170         case COLOR_SCHEME_ATOM:
171 /*              fprintf(stderr,"ColorSchemeAtom, reclen=%ld\n", reclen); */
172                 catdoc_seek(input, reclen, SEEK_CUR);
173                 break;
174
175         case PPDRAWING:
176 /*              fprintf(stderr,"PPDrawing, reclen=%ld\n", reclen); */
177                 catdoc_seek(input, reclen, SEEK_CUR);
178                 break;
179
180         case ENVIRONMENT:
181 /*              fprintf(stderr,"Environment, reclen=%ld\n", reclen); */
182                 catdoc_seek(input, reclen, SEEK_CUR);
183                 break;
184
185         case SSDOC_INFO_ATOM:
186 /*              fprintf(stderr,"SSDocInfoAtom, reclen=%ld\n", reclen); */
187                 catdoc_seek(input, reclen, SEEK_CUR);
188                 break;
189
190         case SSSLIDE_INFO_ATOM:
191 /*              fprintf(stderr,"SSSlideInfoAtom, reclen=%ld\n", reclen); */
192                 catdoc_seek(input, reclen, SEEK_CUR);
193                 break;
194
195         case PROG_TAGS:
196 /*              fprintf(stderr,"ProgTags, reclen=%ld\n", reclen); */
197                 catdoc_seek(input, reclen, SEEK_CUR);
198                 break;
199
200         case PROG_STRING_TAG:
201 /*              fprintf(stderr,"ProgStringTag, reclen=%ld\n", reclen); */
202                 catdoc_seek(input, reclen, SEEK_CUR);
203                 break;
204
205         case PROG_BINARY_TAG:
206 /*              fprintf(stderr,"ProgBinaryTag, reclen=%ld\n", reclen); */
207                 catdoc_seek(input, reclen, SEEK_CUR);
208                 break;
209
210         case LIST:
211 /*              fprintf(stderr,"List, reclen=%ld\n", reclen); */
212                 break;
213
214         case SLIDE_LIST_WITH_TEXT:
215 /*              fprintf(stderr,"SlideListWithText, reclen=%ld\n", reclen); */
216 /*              fputs("---------------------------------------\n",stderr); */
217                 break;
218
219         case PERSIST_PTR_INCREMENTAL_BLOCK:
220 /*              fprintf(stderr,"PersistPtrIncrementalBlock, reclen=%ld\n", reclen); */
221                 catdoc_seek(input, reclen, SEEK_CUR);
222                 break;
223
224         case EX_OLE_OBJ_STG:
225 /*              fprintf(stderr,"ExOleObjStg, reclen=%ld\n", reclen); */
226                 catdoc_seek(input, reclen, SEEK_CUR);
227                 break;
228
229         case PPDRAWING_GROUP:
230 /*              fprintf(stderr,"PpdrawingGroup, reclen=%ld\n", reclen); */
231                 catdoc_seek(input, reclen, SEEK_CUR);
232                 break;
233
234         case EX_OBJ_LIST:
235 /*              fprintf(stderr,"ExObjList, reclen=%ld\n", reclen); */
236                 catdoc_seek(input, reclen, SEEK_CUR);
237                 break;
238
239         case TX_MASTER_STYLE_ATOM:
240 /*              fprintf(stderr,"TxMasterStyleAtom, reclen=%ld\n", reclen); */
241                 catdoc_seek(input, reclen, SEEK_CUR);
242                 break;
243
244         case HANDOUT:
245 /*              fprintf(stderr,"Handout, reclen=%ld\n", reclen); */
246                 catdoc_seek(input, reclen, SEEK_CUR);
247                 break;
248
249         case SLIDE_PERSIST_ATOM:
250 /*              fprintf(stderr,"SlidePersistAtom, reclen=%ld\n", reclen); */
251                 catdoc_seek(input, reclen, SEEK_CUR);
252                 break;
253
254         case TEXT_HEADER_ATOM:
255 /*              fprintf(stderr,"TextHeaderAtom, reclen=%ld\n", reclen); */
256                 catdoc_seek(input, reclen, SEEK_CUR);
257                 break;
258
259         case TEXT_SPEC_INFO:
260 /*              fprintf(stderr,"TextSpecInfo, reclen=%ld\n", reclen); */
261                 catdoc_seek(input, reclen, SEEK_CUR);
262                 break;
263
264         case STYLE_TEXT_PROP_ATOM:
265 /*              fprintf(stderr,"StyleTextPropAtom, reclen=%ld\n", reclen); */
266                 catdoc_seek(input, reclen, SEEK_CUR);
267                 break;
268
269                 /*      case :
270                 fprintf(stderr,", reclen=%ld\n", reclen);
271                 catdoc_seek(input, reclen, SEEK_CUR);
272                 break;*/
273
274                 /*      case :
275                 fprintf(stderr,", reclen=%ld\n", reclen);
276                 catdoc_seek(input, reclen, SEEK_CUR);
277                 break;*/
278
279         default:
280 /*              fprintf(stderr,"Default action for rectype=%d reclen=%ld\n", */
281 /*                                              rectype, reclen); */
282                 catdoc_seek(input, reclen, SEEK_CUR);
283
284         }
285         
286 }