suhans@let.vu.nl (suhans) (06/16/89)
This is the sharfile for the WordPerfect to Troff code. Unshar the file and read the README file for some comments #!/bin/sh # This is a shell archive. Feed this file to "unshar" with # "unshar file" or remove all lines above the "#!/bin/sh" line # from this file and then feed it to "/bin/sh" with "sh file" echo 'This file will create: ' 'README conv_wp.h wp.h wpc.c wpunix.c' echo 'Extracting README ...' sed 's/^X//' > 'README' <<'End_of_shar' X XThis is I think a very prelimanary version but it does translate. X XThis is the source for translating Wordperfect in troff XThe Turbo-C source is written two years ago XThe Turbo-C sources are: X wpunix.c main program X convert_wp.h translate codes etc. XThere are some dutch var names in it, but I think you understand them. X XI have working on the Unix version and I was trying to simplify the program XThe problem is that I don't have the time to continue, so I send the sources Xon the net. I hope you can use them. XThe Unix(BSD) sources are: X wpc.c main program X wp.h translate codes etc. X XIf you print wp.h you find all the codes with explantion and format in Xenglish this time. XIf there are questions, I am gladly to answer them. XI have used the book " More file formats" to generate the comments. X XHans Varkevisser Xlet.vu.nl@hans, hans!let.vu.nl X End_of_shar ls -l 'README' echo 'Extracting conv_wp.h ...' sed 's/^X//' > 'conv_wp.h' <<'End_of_shar' X#define FALSE 0 X#define TRUE 1 X#define MAX_CHAR 40 X Xstatic FILE *ofp,*ifp; Xstatic char *name[20]; Xstatic int i,hrt_on,lf_on,key,sup,sub,noot,block; Xstatic long max_bytes, teller; X X#define TAB 0x09 /* 009 */ X#define HRT 0x0a /* 010 */ X#define SD_PA 0x0b /* 011 */ X#define HD_PA 0x0c /* 012 */ X#define ZRT 0x0d /* 013 */ X#define SPACE 0x20 /* 032 */ X#define UIT_AAN 0x81 /* 129 */ X#define UIT_UIT 0x82 /* 130 */ X#define CTR_OFF 0x83 /* 131 */ X#define SR_OFF 0x84 /* 132 */ X#define MATH1 0x85 /* 133 */ X#define CNT_PG 0x86 /* 134 */ X#define S_COL 0x87 /* 135 */ X#define E_COL 0x88 /* 136 */ X#define TAB_R 0x89 /* 137 */ X#define WI_ON 0x8a /* 138 */ X#define WI_OF 0x8b /* 139 */ X#define HD_LN 0x8c /* 140 */ X#define FN_NR 0x8d /* 141 */ X#define RES1 0x8e /* 142 */ X#define RES2 0x8f /* 143 */ X#define RD_ON 0x90 /* 144 */ X#define RD_OF 0x91 /* 145 */ X#define ST_ON 0x92 /* 146 */ X#define ST_OF 0x93 /* 147 */ X#define UL_ON 0x94 /* 148 */ X#define UL_OFF 0x95 /* 149 */ X#define RES3 0x96 /* 150 */ X#define RES4 0x97 /* 151 */ X#define O_SLAG 0x99 /* 153 */ X#define BD_OFF 0x9c /* 156 */ X#define BD_ON 0x9d /* 157 */ X#define STREEP 0xa9 /* 169 */ X#define S_HYPH 0xaa /* 170 */ X#define H_HYPH 0xac /* 171 */ X#define SUP_ON 0xbc /* 188 */ X#define SUB_ON 0xbd /* 189 */ X#define UP_ON 0xbe /* 190 */ X#define DOWN_ON 0xbf /* 191 */ X#define KNTL 0xc0 /* 192 */ X#define RG_AFST 0xc1 /* 193 */ X#define CTR_ON 0xc3 /* 195 */ X#define SR_ON 0xc4 /* 196 */ X#define RE_HY 0xc5 /* 197 */ X#define POS_NUM 0xc6 /* 198 */ X#define NEW_NUM 0xc7 /* 199 */ X#define PG_POS 0xc8 /* 200 */ X#define GEEN1 0xc9 /* 201 */ X#define C_E_PG 0xca /* 202 */ X#define LET_SET 0xcb /* 203 */ X#define INSPR 0xcc /* 204 */ X#define T_MARG 0xcd /* 205 */ X#define BO_MARG 0xce /* 206 */ X#define NO_ALL 0xcf /* 207 */ X#define PG_LNGT 0xd0 /* 208 */ X#define HE_FT 0xd1 /* 209 */ X#define FT_NUM 0xd3 /* 211 */ X#define LF_HLF 0xd4 /* 212 */ X#define RPI_SET 0xd5 /* 213 */ X#define EXT_TAB 0xd6 /* 214 */ X#define DF_MCOL 0xd7 /* 215 */ X#define S_ALIGN 0xd8 /* 216 */ X#define RES5 0xd9 /* 217 */ X#define UL_SET 0xda /* 218 */ X#define HP_SET 0xdc /* 220 */ X#define DF_COL 0xdd /* 221 */ X#define CEN_OFF 0xde /* 222 */ X#define CEN_IN 0xe0 /* 224 */ X#define EX_CH 0xe1 /* 225 */ X#define NOOT 0xe2 /* 226 */ X#define NOOT_OP 0xe3 /* 227 */ X#define NEW_FT 0xe4 /* 228 */ X#define DF_PAR 0xe5 /* 229 */ X#define PR_NUM 0xe6 /* 230 */ X#define T_MARB 0xe7 /* 231 */ X#define T_MARE 0xe8 /* 232 */ X#define T_M_DF 0xe9 /* 233 */ X#define DF_I_M 0xea /* 234 */ X#define SYS_DAT 0xeb /* 235 */ X#define BLK_PR 0xec /* 236 */ X#define NUM_SET 0xf0 /* 240 */ X#define TAB_SET 0xf1 /* 241 */ X X/* convert table for accents etc */ X Xstatic char *troff_table[256]={ X/* 000 */ "\\000","\\001","\\002","\\003","\\004","\\005","\\006","\\007", X/* 008 */ "\\008","\\009","\\010","\\011","\\012","\\013","\\014","\\015", X/* 016 */ "\\016","\\017","\\018","\\019","\\020","\\021","\\022","\\023", X/* 024 */ "\\024","\\025","\\026","\\027","\\028","\\029","\\030","\\031", X/* 032 */ "\\032","\\033","\\034","\\035","\\036","\\037","\\038","\\039", X/* 040 */ "\\040","\\041","\\042","\\043","\\044","\\045","\\046","\\047", X/* 048 */ "\\048","\\049","\\050","\\051","\\052","\\053","\\054","\\055", X/* 056 */ "\\056","\\057","\\058","\\059","\\060","\\061","\\062","\\063", X/* 064 */ "\\064","\\065","\\066","\\067","\\068","\\069","\\070","\\071", X/* 072 */ "\\072","\\073","\\074","\\075","\\076","\\077","\\078","\\079", X/* 080 */ "\\080","\\081","\\082","\\083","\\084","\\085","\\086","\\087", X/* 088 */ "\\088","\\089","\\090","\\091","\\092","\\093","\\094","\\095", X/* 096 */ "\\096","\\097","\\098","\\099","\\100","\\101","\\102","\\103", X/* 104 */ "\\104","\\105","\\106","\\107","\\108","\\109","\\110","\\111", X/* 112 */ "\\112","\\113","\\114","\\115","\\116","\\117","\\118","\\119", X/* 120 */ "\\120","\\121","\\122","\\123","\\124","\\125","\\126","\\127", X/* 128 */ "\\(,C","\\(:u","\\('e","\\(^a","\\(:a","\\(`a","\\(oa","\\(,c", X/* 136 */ "\\(^e","\\(:e","\\(`e","\\(:i","\\(^i","\\(`i","\\(:A","\\(oA", X/* 144 */ "\\('E","\\(ae","\\(AE","\\(^o","\\(:o","\\(`o","\\(^u","\\(`u", X/* 152 */ "\\(:y","\\(:O","\\(:U","\\(xx","\\(Po","\\(Ye","\\(Pt","\\(xx", X/* 160 */ "\\('a","\\('i","\\('o","\\('u","\\(~n","\\(~N","\\(of","\\(Om", X/* 168 */ "\\(r?","\\(xx","\\(no","\\(12","\\(14","\\(r!","\\(Fo","\\(Fc", X/* 176 */ "\\(bx","\\(bx","\\(bx","\\179","\\180","\\181","\\182","\\183", X/* 184 */ "\\184","\\185","\\186","\\187","\\188","\\189","\\190","\\191", X/* 192 */ "\\192","\\193","\\194","\\195","\\196","\\197","\\198","\\199", X/* 200 */ "\\200","\\201","\\202","\\203","\\204","\\205","\\206","\\207", X/* 208 */ "\\208","\\209","\\210","\\211","\\212","\\213","\\214","\\215", X/* 216 */ "\\216","\\217","\\218","\\219","\\220","\\221","\\222","\\223", X/* 224 */ "\\(*a","\\(*b","\\(*G","\\(*p","\\(*S","\\(*s","\\(*m","\\(*t", X/* 232 */ "\\(*f","\\(*T","\\(*W","\\(*d","\\(if","\\(*F","\\(*e","\\(ca", X/* 240 */ "\\(==","\\(+-","\\(>=","\\(<=","\\(is","\\(rb","\\(dv","\\(~~", X/* 248 */ "\\(de","\\(bu","\\(md","\\(sr","\\(*y","\\(ps","\\(xx","\\255" X}; X/* table for troff codes */ X Xstatic char *troff_code[256]={ X X/*0 1 2 3 4 5 6 7 */ X X/*000*/ "000","001","002","003","004","005","006","007", X/*008*/ "008","009",".sp\n","011",".bp\n","013","014","015", X/*016*/ "016","017","018","019","020","021","022","023", X/*024*/ "024","025","026","027","028","029","030","031", X/*032*/ "032","033","034","035","036","037","038","039", X/*040*/ "040","041","042","043","044","045","046","047", X/*048*/ "048","049","050","051","052","053","054","055", X/*056*/ "056","057","058","059","060","\\*]","\\*>","063", X/*064*/ "064","065","066","067","068","069","070","071", X/*072*/ "072","073","074","075",".)l\n","077","078","079", X/*080*/ "080","081","082","083","084","085","086","087", X/*088*/ "088","089","090","091","092","093","094","095", X/*096*/ "096","097","098",".)f\n","100","101","102","103", X/*104*/ "","","","","","","","", X/*112*/ "112","113","114","115","116","117","118","119", X/*120*/ "120","121","122","123","124","125","126","127", X/*128*/ "","","",".sp 1\n","","","","", X/*136*/ "","","","","","","","", X/*144*/ "008","009","010","011",".ft I\n",".ft R\n","014","015", X/*152*/ "000","001","002","003",".ft R\n",".ft B\n","006","007", X/*160*/ "008","009","010","011","012","013","014","015", X/*168*/ "000","\\-","002","003","004","005","006","007", X/*176*/ "008","009","010","011","012","013","014","015", X/*184*/ "000","001","002","003","\\*[","\\*<","006","007", X/*192*/ "008","009","010",".ce\n","012","013","014","015", X/*200*/ "200","201","202","203",".(l F\n","205","206","207", X/*208*/ "008","009","010","011","012","013","014","015", X/*216*/ "008","009","010","011","012","013","222","015", X/*224*/ "224","225","\\**\n.(f\n\\**","227","228","229","230","231", X/*232*/ "008","009","010","011","012","013","014","015", X/*240*/ "008","009","010","011","012","013","014","015", X/*248*/ "008","009","010","011","012","013","014","015" X}; X End_of_shar ls -l 'conv_wp.h' echo 'Extracting wp.h ...' sed 's/^X//' > 'wp.h' <<'End_of_shar' X/* Alle the definitions are Wordperfect 4.1 codes */ X/* but it works fine with 4.2 */ X/* */ X#define MAX_STRING 25 X#define HEADER_FOOTER 209 X#define EXT_CHAR 225 X#define FOOTNOTE 226 X Xtypedef struct wp_codes{ X int trans; /* 0= no translation 1= translation 2= special */ X int number; /* 0= 1 code 1= long code*/ X char troff_b[MAX_STRING]; /* begin code for troff with me macro */ X char troff_e[MAX_STRING]; /* end code for troff with me macro */ X int special; /* 1= special 0= normal */ X int new_line; /* code uses new_line at end of code */ X int start_lf; /* code needs new_line at begin of code */ X}; X Xstruct wp_codes codes[256] = { /* initialize codes */ X/* 000 */ {0,0," 0000","e000",0,0,0}, /* special */ X/* 001 */ {1,0," 0001","e000",0,0,0}, /* special */ X/* 002 */ {1,0,"","e000",0,0,0}, /* PAGE NUMBER 4.2 */ X/* 003 */ {0,0," 0003","e000",0,0,0}, /* special */ X/* 004 */ {0,0," 0004","e000",0,0,0}, /* special */ X/* 005 */ {0,0," 0005","e000",0,0,0}, /* special */ X/* 006 */ {0,0," 0006","e000",0,0,0}, /* special */ X/* 007 */ {0,0," 0007","e000",0,0,0}, /* special */ X/* 008 */ {0,0," 0008","e000",0,0,0}, /* special */ X/* 009 */ {1,0,"\t","e000",1,1,0}, /* TAB */ X/* 010 */ {1,0,".br\n",".sp\n",1,1,1}, /* HARD NEW LINE */ X/* 011 */ {1,0,"","e000",1,1,0}, /* SOFT NEW PAGE */ X/* 012 */ {1,0,".bp\n","e000",1,1,1}, /* HARD NEW PAGE */ X/* 013 */ {1,0,"\n","e000",1,1,0}, /* SOFT NEW LINE */ X/* 014 */ {1,0," 0014","e000",1,1,0}, /* special code */ X/* 015 */ {1,0," 0015","e000",1,1,0}, /* special code */ X/* 016 */ {0,0," 0016","e000",0,0,0}, /* ASCII CODE */ X/* 017 */ {0,0," 0017","e000",0,0,0}, /* ASCII CODE */ X/* 018 */ {0,0," 0018","e000",0,0,0}, /* ASCII CODE */ X/* 019 */ {0,0," 0019","e000",0,0,0}, /* ASCII CODE */ X/* 020 */ {0,0," 0020","e000",0,0,0}, /* ASCII CODE */ X/* 021 */ {0,0," 0021","e000",0,0,0}, /* ASCII CODE */ X/* 022 */ {0,0," 0022","e000",0,0,0}, /* ASCII CODE */ X/* 023 */ {0,0," 0023","e000",0,0,0}, /* ASCII CODE */ X/* 024 */ {0,0," 0024","e000",0,0,0}, /* ASCII CODE */ X/* 025 */ {0,0," 0025","e000",0,0,0}, /* ASCII CODE */ X/* 026 */ {0,0," 0026","e000",0,0,0}, /* ASCII CODE */ X/* 027 */ {0,0," 0027","e000",0,0,0}, /* ASCII CODE */ X/* 028 */ {0,0," 0028","e000",0,0,0}, /* ASCII CODE */ X/* 029 */ {0,0," 0029","e000",0,0,0}, /* ASCII CODE */ X/* 030 */ {0,0," 0030","e000",0,0,0}, /* ASCII CODE */ X/* 031 */ {0,0," 0031","e000",0,0,0}, /* ASCII CODE */ X/* 032 */ {1,0," ","e000",1,0,0}, /* ASCII CODE */ X/* 033 */ {0,0," 0033","e000",0,0,0}, /* ASCII CODE */ X/* 034 */ {0,0," 0034","e000",0,0,0}, /* ASCII CODE */ X/* 035 */ {0,0," 0035","e000",0,0,0}, /* ASCII CODE */ X/* 036 */ {0,0," 0036","e000",0,0,0}, /* ASCII CODE */ X/* 037 */ {0,0," 0037","e000",0,0,0}, /* ASCII CODE */ X/* 038 */ {0,0," 0038","e000",0,0,0}, /* ASCII CODE */ X/* 039 */ {0,0," 0039","e000",0,0,0}, /* ASCII CODE */ X/* 040 */ {0,0," 0040","e000",0,0,0}, /* ASCII CODE */ X/* 041 */ {0,0," 0041","e000",0,0,0}, /* ASCII CODE */ X/* 042 */ {0,0," 0042","e000",0,0,0}, /* ASCII CODE */ X/* 043 */ {0,0," 0043","e000",0,0,0}, /* ASCII CODE */ X/* 044 */ {0,0," 0044","e000",0,0,0}, /* ASCII CODE */ X/* 045 */ {0,0," 0045","e000",0,0,0}, /* ASCII CODE */ X/* 046 */ {1,0,"\\(md","e000",1,0,0}, /* ASCII CODE */ X/* 047 */ {0,0," 0047","e000",0,0,0}, /* ASCII CODE */ X/* 048 */ {0,0," 0048","e000",0,0,0}, /* ASCII CODE */ X/* 049 */ {0,0," 049","e000",0,0,0}, /* ASCII CODE */ X/* 050 */ {0,0," 0050","e000",0,0,0}, /* ASCII CODE */ X/* 051 */ {0,0," 0051","e000",0,0,0}, /* ASCII CODE */ X/* 052 */ {0,0," 0052","e000",0,0,0}, /* ASCII CODE */ X/* 053 */ {0,0," 0053","e000",0,0,0}, /* ASCII CODE */ X/* 054 */ {0,0," 0054","e000",0,0,0}, /* ASCII CODE */ X/* 055 */ {0,0," 0055","e000",0,0,0}, /* ASCII CODE */ X/* 056 */ {0,0," 0056","e000",0,0,0}, /* ASCII CODE */ X/* 057 */ {0,0," 0057","e000",0,0,0}, /* ASCII CODE */ X/* 058 */ {0,0," 0058","e000",0,0,0}, /* ASCII CODE */ X/* 059 */ {0,0," 0059","e000",0,0,0}, /* ASCII CODE */ X/* 060 */ {0,0," 0060","e000",0,0,0}, /* ASCII CODE */ X/* 061 */ {0,0," 0061","e000",0,0,0}, /* ASCII CODE */ X/* 062 */ {0,0," 0062","e000",0,0,0}, /* ASCII CODE */ X/* 063 */ {0,0," 0063","e000",0,0,0}, /* ASCII CODE */ X/* 064 */ {0,0," 0064","e000",0,0,0}, /* ASCII CODE */ X/* 065 */ {0,0," 0065","e000",0,0,0}, /* ASCII CODE */ X/* 066 */ {0,0," 0066","e000",0,0,0}, /* ASCII CODE */ X/* 067 */ {0,0," 0067","e000",0,0,0}, /* ASCII CODE */ X/* 068 */ {0,0," 0068","e000",0,0,0}, /* ASCII CODE */ X/* 069 */ {0,0," 0069","e000",0,0,0}, /* ASCII CODE */ X/* 070 */ {0,0," 0070","e000",0,0,0}, /* ASCII CODE */ X/* 071 */ {0,0," 0071","e000",0,0,0}, /* ASCII CODE */ X/* 072 */ {0,0," 0072","e000",0,0,0}, /* ASCII CODE */ X/* 073 */ {0,0," 0073","e000",0,0,0}, /* ASCII CODE */ X/* 074 */ {0,0," 0074","e000",0,0,0}, /* ASCII CODE */ X/* 075 */ {0,0," 0075","e000",0,0,0}, /* ASCII CODE */ X/* 076 */ {0,0," 0076","e000",0,0,0}, /* ASCII CODE */ X/* 077 */ {0,0," 0077","e000",0,0,0}, /* ASCII CODE */ X/* 078 */ {0,0," 0078","e000",0,0,0}, /* ASCII CODE */ X/* 079 */ {0,0," 0079","e000",0,0,0}, /* ASCII CODE */ X/* 080 */ {0,0," 0080","e000",0,0,0}, /* ASCII CODE */ X/* 081 */ {0,0," 0081","e000",0,0,0}, /* ASCII CODE */ X/* 082 */ {0,0," 0082","e000",0,0,0}, /* ASCII CODE */ X/* 083 */ {0,0," 0083","e000",0,0,0}, /* ASCII CODE */ X/* 084 */ {0,0," 0084","e000",0,0,0}, /* ASCII CODE */ X/* 085 */ {0,0," 0085","e000",0,0,0}, /* ASCII CODE */ X/* 086 */ {0,0," 0086","e000",0,0,0}, /* ASCII CODE */ X/* 087 */ {0,0," 0087","e000",0,0,0}, /* ASCII CODE */ X/* 088 */ {0,0," 0088","e000",0,0,0}, /* ASCII CODE */ X/* 089 */ {0,0," 0089","e000",0,0,0}, /* ASCII CODE */ X/* 090 */ {0,0," 0090","e000",0,0,0}, /* ASCII CODE */ X/* 091 */ {0,0," 0091","e000",0,0,0}, /* ASCII CODE */ X/* 092 */ {0,0," 0092","e000",0,0,0}, /* ASCII CODE */ X/* 093 */ {0,0," 0093","e000",0,0,0}, /* ASCII CODE */ X/* 094 */ {0,0," 0094","e000",0,0,0}, /* ASCII CODE */ X/* 095 */ {0,0," 0095","e000",0,0,0}, /* ASCII CODE */ X/* 096 */ {0,0," 0096","e000",0,0,0}, /* ASCII CODE */ X/* 097 */ {0,0," 0097","e000",0,0,0}, /* ASCII CODE */ X/* 098 */ {0,0," 0098","e000",0,0,0}, /* ASCII CODE */ X/* 099 */ {0,0," 0099","e000",0,0,0}, /* ASCII CODE */ X/* 100 */ {0,0," 0100","e000",0,0,0}, /* ASCII CODE */ X/* 101 */ {0,0," 0101","e000",0,0,0}, /* ASCII CODE */ X/* 102 */ {0,0," 0102","e000",0,0,0}, /* ASCII CODE */ X/* 103 */ {0,0," 0103","e000",0,0,0}, /* ASCII CODE */ X/* 104 */ {0,0," 0104","e000",0,0,0}, /* ASCII CODE */ X/* 105 */ {0,0," 0105","e000",0,0,0}, /* ASCII CODE */ X/* 106 */ {0,0," 0106","e000",0,0,0}, /* ASCII CODE */ X/* 107 */ {0,0," 0107","e000",0,0,0}, /* ASCII CODE */ X/* 108 */ {0,0," 0108","e000",0,0,0}, /* ASCII CODE */ X/* 109 */ {0,0," 0109","e000",0,0,0}, /* ASCII CODE */ X/* 110 */ {0,0," 0110","e000",0,0,0}, /* ASCII CODE */ X/* 111 */ {0,0," 0111","e000",0,0,0}, /* ASCII CODE */ X/* 112 */ {0,0," 0112","e000",0,0,0}, /* ASCII CODE */ X/* 113 */ {0,0," 0113","e000",0,0,0}, /* ASCII CODE */ X/* 114 */ {0,0," 0114","e000",0,0,0}, /* ASCII CODE */ X/* 115 */ {0,0," 0115","e000",0,0,0}, /* ASCII CODE */ X/* 116 */ {0,0," 0116","e000",0,0,0}, /* ASCII CODE */ X/* 117 */ {0,0," 0117","e000",0,0,0}, /* ASCII CODE */ X/* 118 */ {0,0," 0118","e000",0,0,0}, /* ASCII CODE */ X/* 119 */ {0,0," 0119","e000",0,0,0}, /* ASCII CODE */ X/* 120 */ {0,0," 0120","e000",0,0,0}, /* ASCII CODE */ X/* 121 */ {0,0," 0121","e000",0,0,0}, /* ASCII CODE */ X/* 122 */ {0,0," 0122","e000",0,0,0}, /* ASCII CODE */ X/* 123 */ {0,0," 0123","e000",0,0,0}, /* ASCII CODE */ X/* 124 */ {0,0," 0124","e000",0,0,0}, /* ASCII CODE */ X/* 125 */ {0,0," 0125","e000",0,0,0}, /* ASCII CODE */ X/* 126 */ {0,0," 0126","e000",0,0,0}, /* ASCII CODE */ X/* 127 */ {0,0," 0127","e000",0,0,0}, /* ASCII CODE */ X/* 128 */ {1,0," 0128","e000",0,0,0}, /* NO_OP */ X/* 129 */ {1,0," 0129","e000",0,0,0}, /* RIGHT JUST ON */ X/* 130 */ {1,0," 0130","e000",0,0,0}, /* RIGHT JUST OFF */ X/* 131 */ {1,0," 0131","e000",0,0,0}, /* END CENTERED TEXT */ X/* 132 */ {1,0,"","e000",0,0,0}, /* END ALIGNED TEXT */ X/* 133 */ {1,0," 0133","e000",0,0,0}, /* TEMP START MATH CALC */ X/* 134 */ {1,0," 0134","e000",0,0,0}, /* CENTER PAGE */ X/* 135 */ {1,0," 0135","e000",0,0,0}, /* BEGIN COLUMN MODE */ X/* 136 */ {1,0," 0136","e000",0,0,0}, /* END COLUMN MODE */ X/* 137 */ {1,0," 0137","e000",0,0,0}, /* TAB AFTER RIGHT MARGIN */ X/* 138 */ {1,0," 0138","e000",0,0,0}, /* WIDOW CONTROL ON */ X/* 139 */ {1,0," 0139","e000",0,0,0}, /* WIDOW CONTROL OFF */ X/* 140 */ {1,0,"","e000",0,0,0}, /* HARD EOL AND SOFT EOP */ X/* 141 */ {1,0," 0141","e000",0,0,0}, /* FOOTNOTE NUMBER */ X/* 142 */ {1,0," 0142","e000",0,0,0}, /* RESERVED */ X/* 143 */ {1,0," 0143","e000",0,0,0}, /* RESERVED */ X/* 144 */ {1,0," 0144","e000",0,0,0}, /* RED LINE ON */ X/* 145 */ {1,0," 0145","e000",0,0,0}, /* RED LINE OFF */ X/* 146 */ {1,0," 0146","e000",0,0,0}, /* STRIKE OUT ON */ X/* 147 */ {1,0," 0147","e000",0,0,0}, /* STRIKE OUT OFF */ X/* 148 */ {1,0,".ft I\n","e000",0,1,1}, /* UNDERLINE ON */ X/* 149 */ {1,0,".ft R\n","e000",0,1,1}, /* UNDERLINE OFF */ X/* 150 */ {1,0," 0150","e000",0,0,0}, /* REVERSE VIDEO ON*/ X/* 151 */ {1,0," 0151","e000",0,0,0}, /* REVERSE VIDEO OFF */ X/* 152 */ {1,0," 0152","e000",0,0,0}, /* TABLE OF PLACEHOLDER */ X/* 153 */ {1,0," 0153","e000",0,0,0}, /* OVERSTRIKE */ X/* 154 */ {1,0," 0154","e000",0,0,0}, /* CANCEL HYPH WORD */ X/* 155 */ {1,0," 0155","e000",0,0,0}, /* END OF GEN. TEXT */ X/* 156 */ {1,0,".ft R\n","e000",0,1,1}, /* BOLD OFF */ X/* 157 */ {1,0,".ft B\n","e000",0,1,1}, /* BOLD ON */ X/* 158 */ {1,0," 0158","e000",0,0,0}, /* HYPHENATION OFF */ X/* 159 */ {1,0," 0159","e000",0,0,0}, /* HYPHENATION ON */ X/* 160 */ {1,0," ","e000",0,0,0}, /* HARD SPACE */ X/* 161 */ {1,0,"","e000",0,0,0}, /* DO SUBTOTAL */ X/* 162 */ {1,0,"","e000",0,0,0}, /* SUBTOTAL ENTRY */ X/* 163 */ {1,0,"","e000",0,0,0}, /* DO TOTAL*/ X/* 164 */ {1,0," 0164","e000",0,0,0}, /* TOTAL ENTRY */ X/* 165 */ {1,0," 0165","e000",0,0,0}, /* DO GRAND TOTAL */ X/* 166 */ {1,0," 0166","e000",0,0,0}, /* MATH CALC COLUMN */ X/* 167 */ {1,0," 0167","e000",0,0,0}, /* BEGIN MATH MODE */ X/* 168 */ {1,0," 0168","e000",0,0,0}, /* END MATH MODE */ X/* 169 */ {1,0,"-","e000",0,0,0}, /* HARD HYPHEN IN LINE */ X/* 170 */ {1,0,"-","e000",0,0,0}, /* HARD HYPHEN AT EOL */ X/* 171 */ {1,0,"-","e000",0,0,0}, /* HARD HYPHEN AT EOP */ X/* 172 */ {1,0,"","e000",0,0,0}, /* SOFT HYPHEN */ X/* 173 */ {1,0,"","e000",0,0,0}, /* SOFT HYPHEN AT EOL */ X/* 174 */ {0,0,"","e000",0,0,0}, /* SOFT HYPHEN AT EOP */ X/* 175 */ {1,0," 0175","e000",0,0,0}, /* EOT COLUMNS AND EOL */ X/* 176 */ {1,0," 0176","e000",0,0,0}, /* EOT COLUMNS AND EOP */ X/* 177 */ {1,0," 0177","e000",0,0,0}, /* NOT KNOWN YET */ X/* 178 */ {1,0," 0178","e000",0,0,0}, /* NOT KNOWN YET */ X/* 179 */ {1,0," 0179","e000",0,0,0}, /* NOT KNOWN YET */ X/* 180 */ {1,0," 0180","e000",0,0,0}, /* NOT KNOWN YET */ X/* 181 */ {1,0," 0181","e000",0,0,0}, /* NOT KNOWN YET */ X/* 182 */ {1,0," 0182","e000",0,0,0}, /* NOT KNOWN YET */ X/* 183 */ {1,0," 0183","e000",0,0,0}, /* NOT KNOWN YET */ X/* 184 */ {1,0," 0184","e000",0,0,0}, /* NOT KNOWN YET */ X/* 185 */ {1,0," 0185","e000",0,0,0}, /* NOT KNOWN YET */ X/* 186 */ {1,0," 0186","e000",0,0,0}, /* NOT KNOWN YET */ X/* 187 */ {1,0," 0187","e000",0,0,0}, /* NOT KNOWN YET */ X/* 188 */ {1,0," 0188","e000",0,0,0}, /* SUPERSCRIPT */ X/* 189 */ {1,0," 0189","e000",0,0,0}, /* SUBSCRIPT */ X/* 190 */ {1,0," 0190","e000",0,0,0}, /* ADV. PRINTER 1/2 L UP */ X/* 191 */ {1,0," 0191","e000",0,0,0}, /* ADV. PRINTER 1/2 L DOWN */ X /* The next codes are multi-byte formatting codes */ X /* The code are in hex( <C0> = 192 )*/ X/* */ X/* 192 */ {1,1,"","e000",0,0,0}, /* MARGIN RESET */ X X /* X <C0><old left><old right><new left><new right><C0> X */ X X/* 193 */ {1,1," 0193","e000",0,0,0}, /* SPACING RESET */ X X /* X <C1><old spacing><new spacing><C1> X */ X X/* 194 */ {1,1," 0194","e000",0,0,0}, /* LEFT MARGIN RELEASE */ X X /* X <C2><# spaces to go left><C2> X */ X X/* 195 */ {1,1,".ce\n","e000",1,1,1}, /* CENTER FOLLOWING TEXT*/ X X /* X <C3><type><center col#><start col#><C3><text><83> X X type=0 for centering between margins X type=1 for centering around current column X <83> is the code for ending centered text X */ X X/* 196 */ {1,1," 0196","e000",0,0,0}, /* ALIGN OR FLUSH RIGHT */ X X /* X <C4><align char><align col#><start col#><C4><text><84> X X If align char=12(newline), this is a flush right command X and the align col# is the right margin; otherwise, the X align col# is the next tab stop. X If the high bit of the align char is set, then this is X a dot leader aliign or dot leader flush right. X <84> is the code for ending aligned or flushed right X */ X X/* 197 */ {1,1," 0197","e000",0,0,0}, /* RESET HYPH ZONE */ X X /* X <C5><old left><old right><new left><new right><C5> X */ X X/* 198 */ {1,1," 0198","e000",0,0,0}, /* SET PAGE NO POSITION */ X X /* X <C6><old pos code><new pos code><C6> X X code: 0=none, 1=top left, 2=top center, 3=top right X 4=top L&R, 5=bot left, 6=bot center, 7= bot right X 8=bot L&R X */ X X/* 199 */ {1,1," 0199","e000",0,0,0}, /* SET PAGE NUMBER */ X X /* X <C7><old# high ord><old# low ord><new# high ord><new# X low ord><C7> X X Only the low order 15 bits determine the page number.If X high bit is set the numbers are Roman numerals;if not, X Arabic numbers. X */ X X/* 200 */ {1,1," 0200","e000",0,0,0}, /* SET PAGE NU COLUMN */ X X /* X <C8><old left><old center><old right><new left> X <new center><new right><C8> X */ X X/* 201 */ {1,1," 0201","e000",0,0,0}, /* SET TABS */ X X /* X <C9><old tab table(20 bytes)><new tab table(20 bytes)> X <C9> X X Each bit represents one character position from bit 0 X to bit 159. There ara a maximum of 160 characters X allowed in a Wordperfect line. X */ X X/* 202 */ {1,1," 0202","e000",0,0,0}, /* CONDITIONAL EOP */ X X /* X <CA><number of single spaced ines not to be broken> X <CA> X */ X/* 203 */ {1,1,"","e000",0,0,0}, /* SET PITCH OR FONT */ X X /* X <CB><old pitch><old font><new pitch><new font><CB> X X If the pitch is a negative value, then the font is X proportional. X */ X X/* 204 */ {1,1,"","e000",0,0,0}, /* SET TEMP. MARGIN */ X X /* X <CC><old tmpmargin><new tmpmargin><CC> X */ X X/* 205 */ {1,1," 0205","e000",0,0,0}, /* OLD END OF TEMP. MARGIN */ X X /* X no longer used X <CD><tmpmargin><CD> X */ X X/* 206 */ {1,1," 0206","e000",0,0,0}, /* SET TOP MARGIN */ X X /* X <CE><old top margin><new top margin><CE> X */ X X/* 207 */ {1,1,"","e000",0,0,0}, /* SUPPRESS PAGE CHARACTERISTICS */ X X /* X <CF><suppress codes><CF> X X Codes:(any or all bits may be inclusive or'd together) X 1=all suppressed, 2=page number suppressed X 4=page numbers moved to bottom X 10=all headers suppressed,20=header a suppressed X 40=header b suppressed,100=footer a suppressed X 200=footer b suppressed X */ X X/* 208 */ {1,1," 0208","e000",0,0,0}, /* SET FORM LENGTH */ X X /* X <D0><old form len><old # text lines><new form len> X <new # text lines><D0> X */ X X/* 209 */ {2,1,"[H//F]\n","'\n",1,1,1}, /* HEADER/FOOTER */ X X /* X <D1><old def byte<# half-lines use by header/footer> X <FF><FF><lmargin><rmargin><text><FF> X <#half-lines used by new header/footer><new def byte> X <D1> X X Def byte contents are type(two low-order bits> and X occurence (six high bits). The low-order 2 bits of the X Def byte MUST be correct X Type Occurence X 0 = header a 0 = never X 1 = header b 1 = all pages X 2 = footer a 2 = odd pages X 3 = footer b 4 = even pages X */ X X/* 210 */ {1,1," 0210","e000",0,0,0}, /* FOOTNOTE */ X X /* X Not used in version 4.0 and above;see 343/E4 X X <D2><fn#><# half-lines><FF><lmargin><rmargin><text><D2> X */ X X/* 211 */ {1,1," 0211","e000",0,0,0}, /* SET FOOTNOTE NUMBER */ X X /* X not used in version 4.0 and above X X <D3><old line #><new line #><D3> X */ X X/* 212 */ {1,1," 0212","e000",0,0,0}, /* ADVANCE TO HALF LINE # */ X X /* X stored in half-line units X X <D4><old line #><advance to half line #><D4> X */ X X/* 213 */ {1,1," 0213","e000",0,0,0}, /* SET LINES PER INCH */ X X /* X 6 or 8 lpi are the only valid values X X <D5><old lpi code><new lpi code><D5> X */ X X/* 214 */ {1,1," 0214","e000",0,0,0}, /* SET EXTENDED TABS */ X X /* X <D6><old start><old increment><new start><new increment X <D6> X */ X X/* 215 */ {1,1," 0215","e000",0,0,0}, /* DEFINE MATH COLUMNS */ X X /* X <D7><old column def (24 bytes)>[<old calc 0>]<0> X [<old calc 1>]<0>[<old calc 2>]<0>[<old calc 3>] X <0><D7><new column def (24 bytes)>[<new calc 0>] X <0>[<new calc 1>]<0>[<new calc 2>]<0>[<new calc 3>] X <0><D7> X X See "define columns"(code <DD>) for the 24 byte column X definition X */ X X/* 216 */ {1,1," 0216","e000",0,0,0}, /* SET ALIGNMENT CHAR */ X X /* X <D8><old char><new char><D8> X */ X X/* 217 */ {1,1," 0217","e000",0,0,0}, /* SET LEFT MARGIN RELEASE */ X X /* X columns to go left not used in version 4.0 and above X X <D9><old #><new #><D9> X */ X X/* 218 */ {1,1," 0218","e000",0,0,0}, /* SET UNDERLINE MODE */ X X /* X <DA><old mode><new mode><DA> X X 0=normal underlining(breaks at word spaces) X 1=double underlining(breaks) X 2=single underlining(continuous) X 3=double underlining(continuous) X */ X X/* 219 */ {1,1," 0219","e000",0,0,0}, /* SHEETFEED BIN NUMBER */ X X /* X <DB><old #><new #><DB> X X Wordperfect stores the number as one less than the X bin number (bin #1 =0) X */ X X/* 220 */ {1,1,"","e000",0,0,0}, /* EOP FUNCTION */ X X /* X <DC><# of half-lines at EOP, low 7 bits><high 7 bits> X <# of half-lines used for footnotes> X <# pages used for footnotes> X <# footnotes on this page> X <ceop flag><suppress code><DC> X */ X X/* 221 */ {1,1," 0221","e000",0,0,0}, /* DEFINE COLUMNS */ X X /* X <DD><old # cols><l1><r1><l2><r2><l3><r3><l4><r4> X <l5><r5> X <new # cols><l1><r1><l2><r2><l3><r3><l4><r4> X <l5><r5> X <DD> X X # cols:low-order 7 bits = the number X high-order 1 bit = 1 if parallel colums X */ X X/* 222 */ {1,1,"","e000",0,0,0}, /* END OF TEMP.MARGIN */ X X /* X <DE><old left tmp margin><old right tmp margin><DE> X */ X X/* 223 */ {1,1," 0223","e000",0,0,0}, /* INVISIBLE CHARS */ X X /* X <DF><text in 7-bit characters><DF> X X If a character has an ASCII code >= <6F> (ASCII 191) X the text portion of this function represents it as X <6F><(char-6F)>. X For example, the character ASCII 232(E8) would appear X as: <6F><(E8-6F)> or <6F><79>. X */ X X/* 224 */ {1,1,"","e000",0,0,0}, /* LEFT/RIGHT TEMP.MARGIN */ X X /* X pre 4.0 format: X X <E0><new rt tmp margin><new lt tmp margin><E0> X X 4.0 and later format: X <E0><0><difference between old and new left margin><E0> X */ X X/* 225 */ {2,1," 0225","e000",1,0,0}, /* EXTENDED CHAR */ X X /* X <E1><character><E1> X */ X X/* 226 */ {2,1,".f(\n",".f)\n",1,1,1}, /* NEW FOOTNOTE/ENDNOTE */ X X /* X <E2><def><a><b><c><d><old ftnote line><# lines page 1> X <# lines page 2><# lines page n><# pages><FF> X <l margin><r margin><text><E2> X X where: X def: X bit 0: 0= use numbers,1= use characters X bit 1: 0= footnote, 1= endnote X a,b: if def bit 0 is a 0 then a,b are footnote and X endnote numbers. X if def bit 0 is a 1 then a= # characters and X b = a character X c,d: numbers of lines in footnote/endnote X NOTE:a,b and c,d are 14 bits numbers split into two X 7 bit bytes, high-order byte first.For endnotes, there X is only a null between <d> and <FF> X X */ X X/* 227 */ {1,1," 0227","e000",0,0,0}, /* FOOTNOTE OPTIONS */ X X /* X <E3><old values 74 bytes><new values 74 bytes><E3> X X Byte Meaning X 1 spacing in footnotes X 2 spacing between footnotes X 3 number of lines to keep together X 4 flag byte (bits: b ln en ft n) X n: 1 if numbering starts on each page X en,ft 0= use numbers X 1= use characters X 2= use letters X ln: 0= no line separator X 1= 2 inch line X 2= line from left to right margin X b: 0= footnotes after text X 1= footnotes at bottom of page X 5 # of characters used in place of footnotenumbers X 6-10 "numbering" characters (null terminated if <5) X 11 # displayable chars in string for footnote(text) X 12-26 string for footnote (text) X 27 # displayable chars in string for endnote(text) X 28-42 string for endnote (text) X 43 # of displayable characters in string for X footnote (note) X 44-58 string for footnote (note) X 59 # of displayable characters in string for X endnote (note) X 60-74 string for endnote (note) X */ X X/* 228 */ {1,1," 0228","e000",0,0,0}, /* NEW SET FOOTNOTE */ X X /* X <E4><old # high> old # low><new # high><new # low><E4> X X Footnote numbers are 14-bit numbers split into two X 7-bits bytes, high-order byte first X */ X X/* 229 */ {1,1," 0229","e000",0,0,0}, /* PARAGRAPH NUMBER DEF */ X X /* X <E5><old 7 level numbers><old 7 def bytes> X <new 7 level numbers><new 7 def bytes> X <E5> X A def byte is two nibbles: X Style Punctuation X (low nibble) (high nibble) X 0 = caps Roman 0 = nothing X 1 = lcase Roman 1 = "." after number X 2 = caps letter 2 = ")" after number X 3 = lcase letter 3 = "(" before ")" after X 4 = Arabic X 5 = Arabic with previous levels X separated by "." (Ex:3.4.1) X */ X X/* 230 */ {1,1," 0230","e000",0,0,0}, /* PARAGRAPH NUMBER */ X X /* X <E6><new level #><def byte><old 7 numbers><E6> X X Level number is 0 for first level, 1 second etc. X */ X X/* 231 */ {1,1," 0231","e000",0,0,0}, /* BEGIN MARKED TEXT */ X X /* X <E9><def, info><5 byte definition><E9> X X The def, info byte is the same as the mark and end mark X except that the low nibble is significant only for lists X For the table contents, the five definition bytes X represents five levels. X For index and lists only, the first definition byte X is significant X Definition bytes: X 0 = no page numbers X 1 = page # after text, preceded by two spaces X 2 = page # after text,in parentheses preceded by 1 space X 3 = page # flush right X 4 = page # flush right with dot leader X */ X X/* 232 */ {1,1," 0232","e000",0,0,0}, /* END MARKED TEXT */ X X /* X <EA>< 30 byte, null terminated format string><EA> X */ X X/* 233 */ {1,1," 0233","e000",0,0,0}, /* DEFINE MARKED TEXT */ X X /* X <EB>< 30 byte, null terminated format string><EB> X */ X X/* 234 */ {1,1," 0234","e000",0,0,0}, /* DEFINE INDEX MARK */ X X /* X <EC><def><# of half lines in block><EC> X X Def: 0 for block protect on X 1 for block protect off X */ X X/* 235 */ {1,1," 0235","e000",0,0,0}, /* DATE/TIME FUNTION */ X X /**/ X X/* 236 */ {1,1," 0236","e000",0,0,0}, /* BLOCK PROTECT */ X X /**/ X X/* 237 */ {0,0," 0237","e000",0,0,0}, /* NOT KNOWN YET */ X X/* 238 */ {0,0," 0238","e000",0,0,0}, /* NOT KNOWN YET */ X X/* 239 */ {0,0," 0239","e000",0,0,0}, /* NOT KNOWN YET */ X/* 240 */ {0,0," 0240","e000",0,0,0}, /* NOT KNOWN YET */ X/* 241 */ {0,0," 0241","e000",0,0,0}, /* NOT KNOWN YET */ X/* 242 */ {0,0," 0242","e000",0,0,0}, /* NOT KNOWN YET */ X/* 243 */ {0,0," 0243","e000",0,0,0}, /* NOT KNOWN YET */ X/* 244 */ {0,0," 0244","e000",0,0,0}, /* NOT KNOWN YET */ X/* 245 */ {0,0," 0245","e000",0,0,0}, /* NOT KNOWN YET */ X/* 246 */ {0,0," 0246","e000",0,0,0}, /* NOT KNOWN YET */ X/* 247 */ {0,0," 0247","e000",0,0,0}, /* NOT KNOWN YET */ X/* 248 */ {0,0," 0248","e000",0,0,0}, /* NOT KNOWN YET */ X/* 249 */ {0,0," 0249","e000",0,0,0}, /* NOT KNOWN YET */ X/* 250 */ {0,0," 0250","e000",0,0,0}, /* NOT KNOWN YET */ X/* 251 */ {0,0," 0251","e000",0,0,0}, /* NOT KNOWN YET */ X/* 252 */ {0,0," 0252","e000",0,0,0}, /* NOT KNOWN YET */ X/* 253 */ {0,0," 0253","e000",0,0,0}, /* NOT KNOWN YET */ X/* 254 */ {0,0," 0254","e000",0,0,0}, /* NOT KNOWN YET */ X/* 255 */ {0,0," 0255","e000",0,0,0} /* NOT KNOWN YET */ X}; X X/* Table to convert special characters to troff codes */ X Xchar *troff_table[256]={ X/* 000 */ "\\000","\\001","\\002","\\003","\\004","\\005","\\006","\\007", X/* 008 */ "\\008","\\009","\\010","\\011","\\012","\\013","\\014","\\015", X/* 016 */ "\\016","\\017","\\018","\\019","\\020","\\021","\\022","\\023", X/* 024 */ "\\024","\\025","\\026","\\027","\\028","\\029","\\030","\\031", X/* 032 */ "\\032","\\033","\\034","\\035","\\036","\\037","\\038","\\039", X/* 040 */ "\\040","\\041","\\042","\\043","\\044","\\045","\\046","\\047", X/* 048 */ "\\048","\\049","\\050","\\051","\\052","\\053","\\054","\\055", X/* 056 */ "\\056","\\057","\\058","\\059","\\060","\\061","\\062","\\063", X/* 064 */ "\\064","\\065","\\066","\\067","\\068","\\069","\\070","\\071", X/* 072 */ "\\072","\\073","\\074","\\075","\\076","\\077","\\078","\\079", X/* 080 */ "\\080","\\081","\\082","\\083","\\084","\\085","\\086","\\087", X/* 088 */ "\\088","\\089","\\090","\\091","\\092","\\093","\\094","\\095", X/* 096 */ "\\096","\\097","\\098","\\099","\\100","\\101","\\102","\\103", X/* 104 */ "\\104","\\105","\\106","\\107","\\108","\\109","\\110","\\111", X/* 112 */ "\\112","\\113","\\114","\\115","\\116","\\117","\\118","\\119", X/* 120 */ "\\120","\\121","\\122","\\123","\\124","\\125","\\126","\\127", X/* 128 */ "\\(,C","\\(:u","\\('e","\\(^a","\\(:a","\\(`a","\\(oa","\\(,c", X/* 136 */ "\\(^e","\\(:e","\\(`e","\\(:i","\\(^i","\\(`i","\\(:A","\\(oA", X/* 144 */ "\\('E","\\(ae","\\(AE","\\(^o","\\(:o","\\(`o","\\(^u","\\(`u", X/* 152 */ "\\(:y","\\(:O","\\(:U","\\(xx","\\(Po","\\(Ye","\\(Pt","\\(xx", X/* 160 */ "\\('a","\\('i","\\('o","\\('u","\\(~n","\\(~N","\\(of","\\(Om", X/* 168 */ "\\(r?","\\(xx","\\(no","\\(12","\\(14","\\(r!","\\(Fo","\\(Fc", X/* 176 */ "\\(bx","\\(bx","\\(bx","\\179","\\180","\\181","\\182","\\183", X/* 184 */ "\\184","\\185","\\186","\\187","\\188","\\189","\\190","\\191", X/* 192 */ "\\192","\\193","\\194","\\195","\\196","\\197","\\198","\\199", X/* 200 */ "\\200","\\201","\\202","\\203","\\204","\\205","\\206","\\207", X/* 208 */ "\\208","\\209","\\210","\\211","\\212","\\213","\\214","\\215", X/* 216 */ "\\216","\\217","\\218","\\219","\\220","\\221","\\222","\\223", X/* 224 */ "\\(*a","\\(ss","\\(*G","\\(*p","\\(*S","\\(*s","\\(*m","\\(*t", X/* 232 */ "\\(*f","\\(*T","\\(*W","\\(*d","\\(if","\\(/o","\\(*e","\\(ca", X/* 240 */ "\\(==","\\(+-","\\(>=","\\(<=","\\(is","\\(rb","\\(dv","\\(~~", X/* 248 */ "\\(de","\\(bu","\\(md","\\(sr","\\(*y","\\(ps","\\(xx","\\255" X}; End_of_shar ls -l 'wp.h' echo 'Extracting wpc.c ...' sed 's/^X//' > 'wpc.c' <<'End_of_shar' X#include <stdio.h> X#include <ctype.h> X#include <fcntl.h> X#include <string.h> X#include <sys/types.h> X#include <sys/stat.h> X#include <sys/file.h> X#include <sys/signal.h> X#include "wp.h" X Xstatic int count,key,help_key,new_line_used,i,j; Xstatic FILE *ifp,*ofp,*fclose(),*tfp; Xstatic int foot_note; Xstatic char tfn[]=".WXXXXX"; X#define FALSE 0 X#define TRUE 1 X#define MAX_CHAR 40 X#define MAX_BUF 20480 X#define MAX_LENGTH 70 X Xstatic int use_buffer; Xstatic int ready; Xint convert_buffer[10000]; Xread_char() X{ X if (use_buffer){ X key=convert_buffer[i++]; X } X else { X key=fgetc(ifp); X if (key == EOF) X ready=TRUE; X } X} X X Xwrite_special_code() X{ Xif (( ! new_line_used ) && (codes[key].start_lf)){ X fprintf(tfp,"\n"); X} Xswitch (key) X { X case EXT_CHAR: X read_char(); X fprintf(tfp,"%s",troff_table[key]); X read_char(); X break; X default : X if (use_buffer) { X fprintf(tfp,"%s",codes[key].troff_e); X use_buffer=FALSE; X break; X } X i=0; X help_key=key; X fprintf(tfp,"%s",codes[key].troff_b); X read_char(); X while (key != help_key) { X convert_buffer[i++]=key; X read_char(); X } X convert_buffer[i]=key; X i=0; X use_buffer=TRUE; X break; X } X} Xwrite_normal_code() X{ Xif (( ! new_line_used ) && (codes[key].start_lf)){ X fprintf(tfp,"\n"); X} Xif (codes[key].number){ X help_key=key; X read_char(); X while (key != help_key) { X read_char(); X } X fprintf(tfp,"%s",codes[key].troff_b); X} Xelse X fprintf(tfp,"%s",codes[key].troff_b); X} X Xmain(argc,argv) Xint argc; Xchar *argv[]; X{ Xint next; X if (argc < 1) { X printf("Usage %s [inputfile]\n",argv[0]); X exit(-1); X } Xfor (next = 1; next < argc; next++) { Xchar out_name[128]; X printf("Convert program from Wordperfect 4.2 to Troff with me macro\n\n"); X printf("By Hans Varkevisser (hans@let.vu.nl.UUCP)\n"); X printf("Copyright Hans Varkevisser (Public domain)\n\n"); X X Xif ((ifp = fopen (argv[next], "r")) == NULL) { X fprintf(stderr,"Cannot open inputfile %s\n",argv[next]); X exit(1); X} X Xmktemp(tfn); Xstrcpy(out_name,argv[next]); Xstrcat(out_name,tfn); Xif ((tfp = fopen(out_name,"w")) == NULL) { X fprintf(stderr,"Cannot open outputfile %s\n",out_name); X exit(1); X} Xnew_line_used=0; Xuse_buffer=FALSE; Xready=FALSE; Xkey=0; Xwhile (! ready){ X read_char(); X new_line_used == codes[key].new_line; X switch ( codes[key].trans ) X { X case 0: /* No translation */ X fprintf(tfp,"%c",key); X break; X case 1: /* Normal translation */ X write_normal_code(); X break; X case 2: /* special codes */ X write_special_code(); X break; X } X} X fclose(tfp); X} X} End_of_shar ls -l 'wpc.c' echo 'Extracting wpunix.c ...' sed 's/^X//' > 'wpunix.c' <<'End_of_shar' X#include "stdio.h" X#include "ctype.h" X#include "fcntl.h" X#include "io.h" X#include "conv_wp.h" X Xmain(argc,argv) Xint argc; Xchar *argv[]; X{ Xteller=0; Xnoot=TRUE; Xlf_on=TRUE; Xhrt_on=FALSE; Xsub=FALSE; Xsup=FALSE; Xblock=FALSE; X printf("Convert program from Wordperfect 4.2 to Troff with me\n\n"); X printf("By Hans Varkevisser (hans@let.vu.nl)\n"); X printf("Public Domain\n\n"); X if (argc != 2) { X printf("Usage wpunix [inputfile]\n"); X exit(-1); X } X X if ((ifp = fopen(argv[1], "r+b")) == NULL) { X printf("Can't open inputfile [%s]", argv[1]); X exit(-1); X } X key='x'; X strcpy(name,argv[1]); X make_file_name(name); X if ((ofp = fopen(name , "r+b")) != NULL) { X printf("Outputfile [%s] exists ", name); X printf("Overwrite y/n ? "); X key=fgetc(stdin); X } X if ((key=='n') || (key=='N')){ X exit(-1); X } X else{ X fclose(ofp); X } X if ((ofp = fopen(name , "wb")) == NULL) { X printf("Can't open outputfile [%s]\n", name); X exit(-1); X } X max_bytes=filelength(fileno(ifp)); X if (max_bytes == -1L){ X puts("Can't get filesize !!! "); X exit(-1); X } X printf("\n Inputfile [%s] is %ld bytes \n",argv[1],max_bytes); Xwhile (teller != max_bytes) X{ Xkey = fgetc(ifp); Xteller++; Xswitch (key) X { Xcase STREEP: X key='-'; X hrt_on=TRUE; X fprintf(ofp,"%c",key); X break; Xcase GEEN1 : X while ((key=fgetc(ifp)) != GEEN1 ) { X teller++; X } X break; Xcase RG_AFST : X while ((key=fgetc(ifp)) != RG_AFST ) { X teller++; X } X break; Xcase RE_HY : X while ((key=fgetc(ifp)) != RE_HY ) { X teller++; X } X break; Xcase POS_NUM : X while ((key=fgetc(ifp)) != POS_NUM ) { X teller++; X } X break; Xcase NEW_NUM : X while ((key=fgetc(ifp)) != NEW_NUM ) { X teller++; X } X break; Xcase PG_POS : X while ((key=fgetc(ifp)) != PG_POS ) { X teller++; X } X break; Xcase C_E_PG : X while ((key=fgetc(ifp)) != C_E_PG ) { X teller++; X } X break; Xcase T_MARG : X while ((key=fgetc(ifp)) != T_MARG ) { X teller++; X } X break; Xcase BO_MARG : X while ((key=fgetc(ifp)) != BO_MARG ) { X teller++; X } X break; Xcase NO_ALL : X while ((key=fgetc(ifp)) != NO_ALL ) { X teller++; X } X break; Xcase PG_LNGT : X while ((key=fgetc(ifp)) != PG_LNGT ) { X teller++; X } X break; Xcase FT_NUM : X while ((key=fgetc(ifp)) != FT_NUM ) { X teller++; X } X break; Xcase LF_HLF : X while ((key=fgetc(ifp)) != LF_HLF ) { X teller++; X } X break; Xcase EXT_TAB : X while ((key=fgetc(ifp)) != EXT_TAB ) { X teller++; X } X break; Xcase DF_MCOL : X while ((key=fgetc(ifp)) != DF_MCOL ) { X teller++; X } X break; Xcase S_ALIGN : X while ((key=fgetc(ifp)) != S_ALIGN ) { X teller++; X } X break; Xcase RES5 : X while ((key=fgetc(ifp)) != RES5 ) { X teller++; X } X break; Xcase UL_SET : X while ((key=fgetc(ifp)) != UL_SET ) { X teller++; X } X break; Xcase HP_SET : X while ((key=fgetc(ifp)) != HP_SET ) { X teller++; X } X break; Xcase DF_COL : X while ((key=fgetc(ifp)) != DF_COL ) { X teller++; X } X break; Xcase NEW_FT : X while ((key=fgetc(ifp)) != NEW_FT ) { X teller++; X } X break; Xcase DF_PAR : X while ((key=fgetc(ifp)) != DF_PAR ) { X teller++; X } X break; Xcase PR_NUM : X while ((key=fgetc(ifp)) != PR_NUM ) { X teller++; X } X break; Xcase T_MARB : X while ((key=fgetc(ifp)) != T_MARB ) { X teller++; X } X break; Xcase T_MARE : X while ((key=fgetc(ifp)) != T_MARE ) { X teller++; X } X break; Xcase T_M_DF : X while ((key=fgetc(ifp)) != T_M_DF ) { X teller++; X } X break; Xcase DF_I_M : X while ((key=fgetc(ifp)) != DF_I_M ) { X teller++; X } X break; Xcase BLK_PR : X while ((key=fgetc(ifp)) != BLK_PR ) { X teller++; X } X break; Xcase SR_ON : X key=key; X key=0; X while ((key=fgetc(ifp)) != SR_ON ) { X teller++; X } Xcase HE_FT : X key=key; X key=0; X while ((key=fgetc(ifp)) != HE_FT ) { X teller++; X } X break; Xcase LET_SET : X key=key; X key=0; X while ((key=fgetc(ifp)) != LET_SET ) { X teller++; X } X break; Xcase NOOT : X if (noot){ X noot=FALSE; X while ((key=fgetc(ifp)) != 0xff ) { X teller++; X } X for (i=1; i <= 3; ++i){ X key=fgetc(ifp); X teller++; X } X lf_on=write_code_lf(NOOT,lf_on); X break; X } X if ( ! noot);{ X noot=TRUE; X lf_on=write_code_lf(NOOT-127,lf_on); X } X break; Xcase SYS_DAT : X while ((key=fgetc(ifp)) != SYS_DAT ) { X teller++; X } X break; Xcase NOOT_OP : X while ((key=fgetc(ifp)) != NOOT_OP ) { X teller++; X } X break; Xcase INSPR : X for (i=1; i <= 3; ++i){ X key=fgetc(ifp); X teller++; X } X if (block){ X break; X } X block=TRUE; X lf_on=write_code_lf(INSPR,lf_on); X break; Xcase RPI_SET : X for (i=1; i <= 3; ++i){ X key=fgetc(ifp); X teller++; X } X break; X case KNTL : X for (i=1; i <= 5; ++i){ X key=fgetc(ifp); X teller++; X } X break; Xcase UIT_AAN : X break; Xcase UIT_UIT : X break; Xcase SPACE: X if (lf_on){ X fprintf(ofp,"%c",key); X } X break; Xcase TAB : X if (! hrt_on) { X fprintf(ofp,"%c",key); X } X lf_on=TRUE; X break; Xcase HRT : X if (block) { X block=FALSE; X lf_on=write_code_lf(INSPR-128,lf_on); X break; X } X if ( ! hrt_on) { X lf_on=write_code_lf(HRT,lf_on); X hrt_on=TRUE; X } X break; Xcase CEN_IN : X while ((key=fgetc(ifp)) != CEN_IN ) { X teller++; X } X break; Xcase CEN_OFF : X while ((key=fgetc(ifp)) != CEN_OFF ) { X teller++; X } X break; Xcase ZRT : X if (lf_on) { X fprintf(ofp," \n"); X lf_on=FALSE; X } X else { X fprintf(ofp," "); X lf_on=TRUE; X } X hrt_on=FALSE; X break; Xcase HD_PA : X lf_on=write_code_lf(HD_PA,lf_on); Xcase BD_ON : X lf_on=write_code_lf(BD_ON,lf_on); Xbreak; Xcase BD_OFF : X lf_on=write_code_lf(BD_OFF,lf_on); X break; Xcase UL_ON : X lf_on=write_code_lf(UL_ON,lf_on); Xbreak; Xcase UL_OFF : X lf_on=write_code_lf(UL_OFF,lf_on); X break; Xcase TAB_SET : X while ((key=fgetc(ifp)) != TAB_SET ) { X teller++; X } X break; Xcase CTR_ON : X while ((key=fgetc(ifp)) != CTR_ON ) { X teller++; X } X lf_on=write_code_lf(CTR_ON,lf_on); X break; Xcase CTR_OFF : X lf_on=write_code_lf(CTR_OFF,lf_on); X break; Xcase SUP_ON : X sup=TRUE; X write_code(SUP_ON); X break; Xcase SUB_ON : X sub=TRUE; X write_code(SUB_ON); Xbreak; Xcase EX_CH : X key=fgetc(ifp); X teller++; X fprintf(ofp,"%s",troff_table[key]); X key=fgetc(ifp); X teller++; X hrt_on=FALSE; X lf_on=TRUE; X break; Xdefault : X if (iscntrl(key)){ X break; X } X if (key < 128){ X write_char(); X } X break; X} X} X fclose(ifp); X fclose(ofp); X if ((ifp = fopen(name, "r+b")) == NULL) { X printf("Can't open [%s]", argv[1]); X exit(-1); X } X teller=filelength(fileno(ifp)); X printf("Outputfile [%s] is %ld bytes \n",name,teller); X fclose(ifp); X} X#include "ctype.h" Xmake_file_name(string) Xchar *string; X{ Xint size; Xsize=0; Xwhile ((strlen(string) > size) && (string[size] != '.') && (size != 8)){ X size++; X } X *(string + size)= '\0'; X strcat(string,".txt"); X} X X#include "ctype.h" Xwrite_code_lf(key,lf_on) X{ X if (lf_on) { X fprintf(ofp,"\n%s",troff_code[key]); X } X else { X fprintf(ofp,"%s",troff_code[key]); X } Xlf_on=FALSE; Xreturn(lf_on); X} X X#include "ctype.h" Xwrite_code(key) X{ X fprintf(ofp,"%s",troff_code[key]); X} X X X#include "ctype.h" Xwrite_char() X{ Xif ((sub) || (sup)){ X if (sub) { X fprintf(ofp,"%c",key); X fprintf(ofp,"%s",troff_code[SUB_ON-127]); X sub=FALSE; X } X else { X fprintf(ofp,"%c",key); X fprintf(ofp,"%s",troff_code[SUP_ON-127]); X sup=FALSE; X } X} Xelse { X fprintf(ofp,"%c",key); X} Xhrt_on=FALSE; Xlf_on=TRUE; X} End_of_shar ls -l 'wpunix.c'