home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 2: PC
/
frozenfish_august_1995.bin
/
bbs
/
d09xx
/
d0919.lha
/
TxtCvt
/
readms.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-04
|
3KB
|
196 lines
#include "txtcvt.h"
/**********************************
Get 2-byte lohi value from file
***********************************/
int get2byte(FILE *ifp, int offset)
{
int value = -1;
int r;
int hi;
int lo;
r = fseek(ifp, offset, SEEK_SET);
if(r != -1) {
lo = fgetc(ifp);
if(lo != EOF) {
hi = fgetc(ifp);
if(hi != EOF) {
value = hi * 256 + lo;
}
}
}
return(value);
}
/********************************
Read Microsoft text file
********************************/
void readmsfile(FILE *ifp, FILE *ofp, int filetype)
{
unsigned int c;
int r;
int size;
int offset;
int hdrsize;
int textoffset;
int written;
switch (filetype) {
case DOSWORD: {
offset = 14;
hdrsize = 128;
break;
}
case WINWORD1: {
offset = 28;
hdrsize = 384;
break;
}
case WINWORD2: {
offset = 28;
hdrsize = 384;
break;
}
case WINWRITE: {
offset = 14;
hdrsize = 128;
break;
}
}
size = get2byte(ifp, offset) - hdrsize;
if(size == 0) {
printf("Unable to process inputfile\n");
}
else {
printf("Length of text: %i\n", size);
}
switch (filetype) {
case DOSWORD: {
textoffset = 128;
break;
}
case WINWORD1: {
textoffset = get2byte(ifp, 24);
break;
}
case WINWORD2: {
textoffset = get2byte(ifp, 24);
break;
}
case WINWRITE: {
textoffset = 128;
break;
}
}
if(textoffset == 0) {
printf("Unable to process inputfile\n");
}
else {
printf("Start of text: %i\n", textoffset);
}
r = fseek(ifp, textoffset, SEEK_SET);
if(r != -1) {
c = fgetc(ifp);
r = 0;
written = 0;
while(c != EOF && r != EOF && written < size) {
written++;
switch (c) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 12: /* explicit page break */
case 14:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
case 29:
case 31:
break;
case 11: { /* Hard line break */
r = fputc(13, ofp);
if(r != EOF) {
r = fputc(10, ofp);
}
break;
}
case 15: { /* em-hyphen to hyphen */
if(filetype == DOSWORD || filetype == WINWORD1 || filetype == WINWORD2) {
r = fputc(45, ofp);
if(r != EOF) {
r = fputc(45, ofp);
}
}
break;
}
case 30: { /* nonbreaking hyphen */
if(filetype == WINWORD1 || filetype == WINWORD2) {
r = fputc(45, ofp);
}
break;
}
case 160: { /* nonbreaking space */
if(filetype == WINWORD1 || filetype == WINWORD2) {
r = fputc(32, ofp);
}
else {
r = fputc(c, ofp);
}
break;
}
case 196: { /* nonbreaking hyphen */
if(filetype == DOSWORD) {
r = fputc(45, ofp);
}
else {
r = fputc(c, ofp);
}
break;
}
case 255: { /* nonbreaking space */
if(filetype == DOSWORD) {
r = fputc(32, ofp);
}
else {
r = fputc(c, ofp);
}
break;
}
default: {
r = fputc(c, ofp);
break;
}
}
c = fgetc(ifp);
}
if(r == EOF) {
printf("Error %d occurred while writing to outputfile.\n",errno);
}
}
else {
printf("Unable to process inputfile\n");
}
}