From: SMTP%"VMSSERV@kcl.ac.uk" 19-AUG-1996 18:18:16.58 To: everhart@star.zko.dec.com CC: Subj: WEBBOOK.4-OF-5 -+-+-+-+-+-+-+-+ START OF PART 4 -+-+-+-+-+-+-+-+ X struct `7B X`09BKREC_COMMON_HEADER`09`09/* type = \1F06FDX */ X`09char txt`5B255`5D; X `7D fdesc; X X struct `7B`09`09&0209/* Font data */ X`09BKREC_COMMON_HEADER`09`09/* type = \1F06FONT */ X `7D font; X X struct `7B X`09BKREC_COMMON_HEADER X`09short flags; X`09long prev, next; X `7D cont;`09`09&0209/* type = BKREC_CONT_* */ X /* X * Sub-record types. X */ X struct `7B`20 X`09BKREC_COMMON_HEADER X`09long unknown0;`09`09`09/* total record size */ X`09unsigned char keyid;`09`09/* 5=contents, 10=index, 0=other */ X`09long count;`09`09`09/*\0C06 of entries */ X`09long part;`09`09`09/* part number */ X`09unsigned char tit_len;`09`09/* length of title string */ X`09char title`5B255`5D; X `7D table;`09`09&0209/* type = BKSBREC_TABLE */ X X struct `7B`09`09&0209/* Font mapping defintion */ X`09BKREC_COMMON_HEADER X`09unsigned short fontno;`09`09/* internal number */ X`09char name`5B255`5D;`09`09`09/* Name asciiz */ X `7D fontdef;`09`09&0209/* type = BKSBREC_FONT */ X X struct `7B X`09BKREC_COMMON_HEADER X`09unsigned short ixhdr`5B7`5D; X`09/* struct text_rec ixtxt; */ X `7D ixtxt;`09`09&0209/* type = BKSBREC_TABLE */ X X struct `7B X`09BKREC_COMMON_HEADER X`09long bodhdr`5B1`5D;`09`09`09/* bodhr`5B0`5D unknown */ X`09long sect_id;`09`09`09/* section id */ X`09long bodhdr2`5B7`5D; X`09/* struct text_rec bodtxt;*/ `09/* varying number */ X `7D bodytext;`09`09&0209/* type = BKSBREC_BODY */ X X struct `7B X`09BKREC_COMMON_HEADER X`09long unk1, unk2; X`09long sect, pos, verpos, len, sect_id, target; X`09long unk3; X `7D hotspot; X X struct `7B X`09BKREC_COMMON_HEADER X`09 long unk1, unk2, sect, x, y, w, h, unk3, unk4; X `7D extension;`09`09/*\0F0A grayspot on body */ X X struct `7B X`09BKREC_COMMON_HEADER X`09char name`5B255`5D;`09`09/* no first page */ X `7D license; X X struct `7B X`09BKREC_COMMON_HEADER X`09 long unk1, unk2; X`09 long sect, x, y, w, h; X`09 long picbytes; X`09 unsigned char primitive, unk5, unk6, unk7; X `09 unsigned short col, rows;`09`09/* col is fontno for txt */ X`09 char var_data`5B1024`5D; X`09`09 `20 X `7D figure; X X`7D; Xtypedef union bkrdr_rec *\0B09ptr; X#ifdef __DECC X#pragma member_alignment X#endif $ call unpack [.WEBBOOK]BOOKREADER_RECDEF.H;1 - 1986655782 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" 17 14 20 $! $ create 'f' X$ EXEDIR = "`5B-.system`5D X$ BINDIR = "`5B-.bin`5D X$ CC /NOLIST/OBJECT=WEBBOOK.OBJ webbook.c X$ CC /NOLIST/OBJECT=CGILIB.OBJ cgilib.c X$ CC /NOLIST/OBJECT=SCRIPTLIB.OBJ scriptlib.c X$ CC /NOLIST/OBJECT=BOOKFILE_SECTION.OBJ bookfile_section.c X$ CC /NOLIST/OBJECT=BOOKFILE_INDEX.OBJ bookfile_index.c X$ CC /NOLIST/OBJECT=BOOKFILE_TEXT.OBJ bookfile_text.c X$ CC /NOLIST/OBJECT=BOOKFILE_IO.OBJ bookfile_io.c X$ CC /NOLIST/OBJECT=BOOKFILE_FIGURE.OBJ bookfile_figure.c X$ IF F$GETSYI("CPU") .GE. 128 .OR. F$TRNLNM("DECC$CC_DEFAULT") .EQS. "/DECC" V `09THEN prefix_all = "/\0F06=all" X$ CC webbook_shelf.c 'prefix_all' X$ @link_script webbook/opt,cgilib.obj,\1E06\0E07 X$ COPY webbook.exe 'BINDIR' $ call unpack [.WEBBOOK]BUILD_WEBBOOK.COM;1 - 1983715475 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" 2 15 20 $! $ create 'f' X/* X * Bookreader to HTML comverter usage: X * X * path-info: X *`09/dir/file.`5BPnnn.`7CItable.`7CGnnn.`5Dtype`09(type = decw$book) X *`09/hist1`5B/histn...`5D/disk:
`5Cn" : "
`5Cn");
X `7D
X cvt->in_x =\0C06dl_depth * 50;
X`7D
X#endif
Xstatic void change_line ( int new_x,\0B09y, struct convert_ctx *cvt\2406para )
V
X`7B
X int target_dl, i;
X char indent`5B200`5D;
X
X target_dl = ((new_x) / 50) * 2;
X if ( target_dl > 120 )\120B= 60;
X if ( target_dl < 0 )\100B= 0;
X for ( i = 0; i < target_dl; i++ ) indent`5Bi`5D = nbsp;
X indent`5Btarget_dl`5D = '`5C0';
X cgi_printf ( "%s`5Cn%s", para ? "
" : "
", indent );
X`7D
X
Xstatic int format_bodytext ( struct convert_ctx *cvt,\1908sb_summary *sb )
X`7B
X int status, is_last, t_len, t_type, i, offset, glue, slen, is_link;
X short h_v`5B2`5D; unsigned char attr`5B4`5D; char *data\0C07buffer`5B256
V`5D;
X /*
X * Scan sub-sections.
X */
X cgi_printf ( "", sb->hdr`5B1`5D );
X for ( is_last = 0; !\0E07; ) `7B
X`09status = bks_read_section`20
X`09`09( cvt->cursor, `26t_type, h_v, att\1406len, `26data, `26is_last );
X`09if ( (status`261) == 0 )`20
X`09`09 cgi_printf("%sread error, status: %d, is_last: %d%s`5Cn",
X`09`09`09is_last ? "" :"" );
X`09if ( (status`261) == 0 ) break;
X#ifdef VERBOSE
X`09cgi_printf("`5Cn",
X`09 t_type, h_v`5B0`5D\08061`5D, attr`5B0`5D, attr`5B\12092\1B083`5D );
X#endif
X
X`09if ( t_type == 3 `7C`7C\0F0B2 ) `7B
X`09 struct sb_summary *hot_link;
X
X`09 if ( attr`5B0`5D != cvt->cur_font ) change\0E06\2909, cvt );
X`09 if ( cvt->in_y > h_v`5B1`5D ) `7B
X`09`09change_line ( h_v`5B0`5D, h_v`5B1`5D, cvt, 1 );
X`09 `7D else if ( (cvt->in_x > h_v`5B0`5D) `7C`7C\180Ay < h_v`5B1`5D) ) `7B
V
X`09`09change_line ( h_v`5B0`5D, h_v`5B1`5D, cvt, 0 );
X`09 `7D else cgi_printf ( " " ); /* separate words */
X
X`09 hot_link = sb->hot;
X`09 if (hot_link) \0A08 = check_hotspot ( h_v`5B0`5D, h_v`5B1`5D, sb->hot )
V;
X`09 if ( hot_link ) `7B
X`09`09if ( hot_link->hdr`5B7`5D == sb\0E061`5D )
X`09`09 cgi_printf ( "", hot_link->hdr`5B7`5D );
X`09`09else `7B
X`09`09 int part_num;
X`09`09 bkf_lookup_section ( cvt->bkf,`20
X`09`09`09hot_link->hdr`5B7`5D, `26part_num );
X`09`09 cgi_printf ( "", href_fname,
X`09`09`09part_num, href_type, hot_link->hdr`5B7`5D );
X`09`09`7D
X`09 `7D
X
X`09 cvt->in_x = h_v`5B0`5D;\1409y\14071`5D;
X`09 for ( offset = 0;\0C08< t_len; ) `7B
X`09`09bkt_text3_scan ( t_len, data, `26offset, buffer, `26slen, `26glue );
X`09`09if ( offset < t_len ) buffer`5Bslen++`5D = ' ';
X`09`09buffer`5Bslen`5D = '`5C0';
X`09`09if ( cvt->font_nonprintable ) `7B char jj;
X`09`09 for ( jj = 0; jj < slen; jj++ ) buffer`5Bjj`5D = '.';
X`09`09 cvt->in_x = 1000;
X`09`09`7D
X`09`09cgi_printf("%s", entify(buffer));
X#ifdef VERBOSE
X`09`09cgi_printf("