/************************************************************ * Converts a SmartWriter file * to a plain ASCII file. ************************************************************* * 1.00 12/1/94 Chris Braymen Creation under Borland C 3.1 *************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #define CR 0x0D #define LF 0x0A #define FF 0x0C #define TRUE 1 #define FALSE 0 // Prototypes int processWordWrap(FILE*); void startNewLine(void); char tempFileName[]="xxxcbxxx.tmp"; char version[]="1.00"; char lineBuffer[255]; int leftMargin,rightMargin; int curPosition; int lastSpace; main(argc,argv) int argc; char **argv; { char inChar; FILE *inFile; FILE *outFile; char *inFileName; int headerSize,i; if (argc!=2) { printf("SW2TEXT %s - Public Domain from Bonafide Systems\n",version); puts("\nUsage: SW2TEXT <infile>"); puts("Converts a SmartWriter file to a DOS text file."); exit(0); } inFileName=*(argv+1); /* get ptr to second argument */ if((inFile=fopen(inFileName,"rb")) == NULL) { printf("Error opening input file: %s\n",inFileName); exit(0); } headerSize=getc(inFile); headerSize=getc(inFile)*256; if(getc(inFile) != 1) { /* SW ID byte */ puts("Not a SmartWriter file!"); exit(0); } getc(inFile); /* skip top margin */ getc(inFile); /* and bottom margin */ leftMargin=getc(inFile); rightMargin=getc(inFile); for(i=4;i<headerSize;i++) { /* skip by rest of header */ if(getc(inFile)==EOF) { puts("Error reading SmartWriter file"); exit(0); } } if((outFile=fopen(tempFileName,"wb")) == NULL) { printf("Error opening temporary output file: %s\n",tempFileName); fclose(inFile); exit(0); } puts("Processing..."); startNewLine(); while((inChar=getc(inFile)) != EOF) { inChar &= 0x7F; if(inChar == CR || inChar == FF) { if(fputs(lineBuffer,outFile)==EOF) { puts("Error writing file"); fclose(outFile); unlink(tempFileName); exit(0); } putc(CR,outFile); putc(LF,outFile); startNewLine(); } else { if(inChar>=' ') { if(inChar==' ') lastSpace=curPosition; lineBuffer[curPosition]=inChar; if(curPosition>rightMargin) { if(!processWordWrap(outFile)) exit(0); } else { curPosition++; } } } } fclose(inFile); fclose(outFile); if(unlink(inFileName)) { printf("Error deleting source file: %s\n",inFileName); unlink(tempFileName); exit(0); } if(rename(tempFileName,inFileName)) { printf("Error renaming temp file to %s\n",inFileName); unlink(tempFileName); exit(0); } puts("Complete."); return(0); } /***************************************************** * startNewLine - NULLS out buffer, sets up new margin *****************************************************/ void startNewLine() { int i; for(i=0;i<255;i++) lineBuffer[i]='\0'; for(curPosition=0;curPosition<leftMargin;curPosition++) lineBuffer[curPosition]=' '; lastSpace=rightMargin; /* if there is no space, break the line at the right margin */ } /***************************************************** * processWordWrap ******************************************************/ processWordWrap(outFile) FILE *outFile; { char tempBuf[255]; char *p1; strcpy(tempBuf,lineBuffer+lastSpace+1); /* save wrap string */ lineBuffer[lastSpace+1]='\0'; if(fputs(lineBuffer,outFile)==EOF) { puts("Error writing file"); fclose(outFile); unlink(tempFileName); return(FALSE); } putc(CR,outFile); putc(LF,outFile); startNewLine(); p1=tempBuf; while(*p1) { /* copy wrap back to buffer */ lineBuffer[curPosition] = *p1; p1++; curPosition++; } return(TRUE); }