3 * @author Alex Ott <alexott@gmail.com>
5 * Version: $Id: pptparse.c,v 1.1 2006-02-24 17:44:06 vitus Exp $
8 * @brief .ppt parsing routines
24 static void process_item (int rectype, long reclen, FILE* input);
27 #define min(x,y) ((x) < (y) ? (x) : (y))
37 void do_ppt(FILE *input,char *filename) {
41 unsigned char recbuf[8];
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"); */
50 if (catdoc_eof(input)) {
51 process_item(DOCUMENT_END,0,input);
56 rectype=getshort(recbuf,2);
57 reclen=getulong(recbuf,4);
61 process_item(rectype,reclen,input);
73 static void process_item (int rectype, long reclen, FILE* input) {
79 /* fprintf(stderr,"End of document, ended at %ld\n",catdoc_tell(input)); */
80 catdoc_seek(input, reclen, SEEK_CUR);
84 /* fprintf(stderr,"Start of document, reclen=%ld, started at %ld\n", reclen, */
85 /* catdoc_tell(input)); */
89 /* fprintf(stderr,"DocumentAtom, reclen=%ld\n", reclen); */
90 catdoc_seek(input, reclen, SEEK_CUR);
94 /* fprintf(stderr,"Slide, reclen=%ld\n", reclen); */
95 /* fputs("---------------------------------------\n",stderr); */
99 /* fprintf(stderr,"SlideAtom, reclen=%ld\n", reclen); */
100 catdoc_seek(input, reclen, SEEK_CUR);
104 /* fprintf(stderr,"SlideBase, reclen=%ld\n", reclen); */
107 case SLIDE_BASE_ATOM:
108 /* fprintf(stderr,"SlideBaseAtom, reclen=%ld\n", reclen); */
109 catdoc_seek(input, reclen, SEEK_CUR);
113 /* fprintf(stderr,"Notes, reclen=%ld\n", reclen); */
117 /* fprintf(stderr,"NotesAtom, reclen=%ld\n", reclen); */
118 catdoc_seek(input, reclen, SEEK_CUR);
121 case HEADERS_FOOTERS:
122 /* fprintf(stderr,"HeadersFooters, reclen=%ld\n", reclen); */
125 case HEADERS_FOOTERS_ATOM:
126 /* fprintf(stderr,"HeadersFootersAtom, reclen=%ld\n", reclen); */
127 catdoc_seek(input, reclen, SEEK_CUR);
131 /* fprintf(stderr,"MainMaster, reclen=%ld\n", reclen); */
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);
147 case TEXT_CHARS_ATOM:
151 /* fprintf(stderr,"CString, reclen=%ld\n", reclen); */
153 for(i=0; i < text_len; i++) {
154 catdoc_read(buf,2,1,input);
155 u=(unsigned short)getshort(buf,0);
157 fputs(convert_char(u),stdout);
166 /* fprintf(stderr,"UserEditAtom, reclen=%ld\n", reclen); */
167 catdoc_seek(input, reclen, SEEK_CUR);
170 case COLOR_SCHEME_ATOM:
171 /* fprintf(stderr,"ColorSchemeAtom, reclen=%ld\n", reclen); */
172 catdoc_seek(input, reclen, SEEK_CUR);
176 /* fprintf(stderr,"PPDrawing, reclen=%ld\n", reclen); */
177 catdoc_seek(input, reclen, SEEK_CUR);
181 /* fprintf(stderr,"Environment, reclen=%ld\n", reclen); */
182 catdoc_seek(input, reclen, SEEK_CUR);
185 case SSDOC_INFO_ATOM:
186 /* fprintf(stderr,"SSDocInfoAtom, reclen=%ld\n", reclen); */
187 catdoc_seek(input, reclen, SEEK_CUR);
190 case SSSLIDE_INFO_ATOM:
191 /* fprintf(stderr,"SSSlideInfoAtom, reclen=%ld\n", reclen); */
192 catdoc_seek(input, reclen, SEEK_CUR);
196 /* fprintf(stderr,"ProgTags, reclen=%ld\n", reclen); */
197 catdoc_seek(input, reclen, SEEK_CUR);
200 case PROG_STRING_TAG:
201 /* fprintf(stderr,"ProgStringTag, reclen=%ld\n", reclen); */
202 catdoc_seek(input, reclen, SEEK_CUR);
205 case PROG_BINARY_TAG:
206 /* fprintf(stderr,"ProgBinaryTag, reclen=%ld\n", reclen); */
207 catdoc_seek(input, reclen, SEEK_CUR);
211 /* fprintf(stderr,"List, reclen=%ld\n", reclen); */
214 case SLIDE_LIST_WITH_TEXT:
215 /* fprintf(stderr,"SlideListWithText, reclen=%ld\n", reclen); */
216 /* fputs("---------------------------------------\n",stderr); */
219 case PERSIST_PTR_INCREMENTAL_BLOCK:
220 /* fprintf(stderr,"PersistPtrIncrementalBlock, reclen=%ld\n", reclen); */
221 catdoc_seek(input, reclen, SEEK_CUR);
225 /* fprintf(stderr,"ExOleObjStg, reclen=%ld\n", reclen); */
226 catdoc_seek(input, reclen, SEEK_CUR);
229 case PPDRAWING_GROUP:
230 /* fprintf(stderr,"PpdrawingGroup, reclen=%ld\n", reclen); */
231 catdoc_seek(input, reclen, SEEK_CUR);
235 /* fprintf(stderr,"ExObjList, reclen=%ld\n", reclen); */
236 catdoc_seek(input, reclen, SEEK_CUR);
239 case TX_MASTER_STYLE_ATOM:
240 /* fprintf(stderr,"TxMasterStyleAtom, reclen=%ld\n", reclen); */
241 catdoc_seek(input, reclen, SEEK_CUR);
245 /* fprintf(stderr,"Handout, reclen=%ld\n", reclen); */
246 catdoc_seek(input, reclen, SEEK_CUR);
249 case SLIDE_PERSIST_ATOM:
250 /* fprintf(stderr,"SlidePersistAtom, reclen=%ld\n", reclen); */
251 catdoc_seek(input, reclen, SEEK_CUR);
254 case TEXT_HEADER_ATOM:
255 /* fprintf(stderr,"TextHeaderAtom, reclen=%ld\n", reclen); */
256 catdoc_seek(input, reclen, SEEK_CUR);
260 /* fprintf(stderr,"TextSpecInfo, reclen=%ld\n", reclen); */
261 catdoc_seek(input, reclen, SEEK_CUR);
264 case STYLE_TEXT_PROP_ATOM:
265 /* fprintf(stderr,"StyleTextPropAtom, reclen=%ld\n", reclen); */
266 catdoc_seek(input, reclen, SEEK_CUR);
270 fprintf(stderr,", reclen=%ld\n", reclen);
271 catdoc_seek(input, reclen, SEEK_CUR);
275 fprintf(stderr,", reclen=%ld\n", reclen);
276 catdoc_seek(input, reclen, SEEK_CUR);
280 /* fprintf(stderr,"Default action for rectype=%d reclen=%ld\n", */
281 /* rectype, reclen); */
282 catdoc_seek(input, reclen, SEEK_CUR);