home *** CD-ROM | disk | FTP | other *** search
- /*
- * usage: dosify file_name[s]
- *
- * DOSIFY Replaces a UNIX-style file with a copy in which each line feed
- * is preceded by one carriage return, and the file ends with
- * one CTL-Z byte. Use this program on a file in which the MORE
- * command produces a skewed listing that fails to go back to the
- * left margin for new lines.
- *
- * input: Any printable ASCII text file[s].
- *
- * output: The same file, with the same name, with DOS conventional line
- * ends and end of file.
- *
- * writeup: MIR TUTORIAL ONE, topic 5
- *
- * Written: Douglas Lowry Jan 09 92
- * Modified: Douglas Lowry May 23 92 touch-up
- * Copyright (C) 1992 Marpex Inc.
- *
- * The MIR (Mass Indexing and Retrieval) Tutorials explain detailed
- * usage and co-ordination of the MIR family of programs to analyze,
- * prepare and index databases (small through gigabyte size), and
- * how to build integrated retrieval software around the MIR search
- * engine. The fifth of the five MIR tutorial series explains how
- * to extend indexing capability into leading edge search-related
- * technologies. For more information, GO IBMPRO on CompuServe;
- * MIR files are in the DBMS library. The same files are on the
- * Canada Remote Systems BBS. A diskette copy of the Introduction
- * is available by mail ($10 US... check, Visa or Mastercard);
- * diskettes with Introduction, Tutorial ONE software and the
- * shareware Tutorial ONE text cost $29. Shareware registration
- * for a tutorial is also $29.
- *
- * E-mail...
- * Compuserve 71431,1337
- * Internet doug.lowry%canrem.com
- * UUCP canrem!doug.lowry
- * Others: doug.lowry@canrem.uucp
- *
- * FAX... 416 963-5677
- *
- * "Snail mail"... Douglas Lowry, Ph.D.
- * Marpex Inc.
- * 5334 Yonge Street, #1102
- * North York, Ontario
- * Canada M2N 6M2
- *
- * Related database consultation and preparation services are
- * available through:
- * Innotech Inc., 2001 Sheppard Avenue E., Suite #118,
- * North York, Ontario Canada M2J 4Z7
- * Tel. 416 492-3838 FAX 416 492-3843
- *
- * This program is free software; you may redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * (file 05LICENS) along with this program; if not, write to the
- * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
- * USA.
- */
-
- #include <stdio.h>
-
- #define repeat for(;;)
-
- typedef enum bool
- { FALSE = 0, TRUE = 1 } Bool ;
-
- Bool process();
- void Usage_() ;
- char *Cmdname_() { return( "dosify" ) ; }
-
- /*
- * MAIN -
- */
-
- main( argc, argv )
- int argc;
- char **argv;
- {
- FILE *fp_in, *fp_out ;
- Bool okay ;
- char fname[16],
- c10 ;
- int file ;
-
- c10 = argv[1][0] ;
- if( argc == 1 || c10 == '-' || c10 == '/' || c10 == '?' )
- Usage_();
- sprintf( fname, "%d.999", getpid() );
-
- for( file = 1; file < argc ; file++ )
- {
- if(( fp_in = fopen( argv[ file ], "rb" )) == NULL )
- {
- fprintf( stderr, "Can't open file %s\n", argv[ file ] );
- continue ;
- }
-
- if(( fp_out = fopen( fname, "wb" )) == NULL )
- {
- fprintf( stderr, "Can't open temporary file %s\n", fname );
- fclose( fp_in ) ;
- continue ;
- }
- fprintf( stderr, "Dosifying %s\n", argv[ file ] ) ;
-
- okay = process( fp_in, fp_out ) ;
- if( fclose( fp_in ) || fclose( fp_out ))
- {
- fprintf( stderr, "Problem closing %s\n", argv[ file ] );
- okay = FALSE ;
- }
-
- if( okay )
- {
- unlink( argv[ file ] ) ;
- if( rename( fname, argv[ file ] ))
- fprintf( stderr, "File %s okay, but has temporary name %s\n",
- argv[ file ], fname ) ;
- else
- fprintf( stderr, "\t\t...Completed okay.\n" ) ;
- }
- }
-
- exit( 0 );
- }
- void
- Usage_()
- {
- fprintf( stderr, "\nusage: %s file_name[s]\n\n\
- Replaces a UNIX-style file with a copy in which each line feed\n\
- is preceded by one carriage return, and the file ends with\n\
- one CTL-Z byte. Use this program on a file in which the MORE\n\
- command produces a skewed listing that fails to go back to the\n",
- Cmdname_() );
- fprintf( stderr, " left margin for new lines.\n\n\
- input: Any printable ASCII text file[s].\n\n\
- output: The same file, with the same name, with DOS conventional line\n\
- ends and end of file.\n\n\
- writeup: MIR TUTORIAL ONE, topic 5\n\n" ) ;
- exit( 1 ) ;
- }
- /*
- * PROCESS
- */
- Bool
- process( fp_in, fp_out )
- FILE *fp_in, *fp_out ;
- {
- int ch ;
- Bool foul_up ;
-
- foul_up = FALSE ;
-
- repeat
- {
- if(( ch = fgetc( fp_in )) == EOF )
- {
- if( feof( fp_in ))
- break ;
- }
-
- if( ch == '\n' )
- fputc( '\015', fp_out ) ;
- if( ch != '\015' && ch != '\032' )
- {
- if( fputc( ch, fp_out ) != ch )
- foul_up = TRUE ;
- }
- if( foul_up )
- return( FALSE );
- }
-
- fputc( '\032', fp_out );
- return( TRUE ) ;
- }
-