home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / doc / mir / dosify.c < prev    next >
Text File  |  1992-07-02  |  6KB  |  187 lines

  1. /*
  2.  *  usage:  dosify file_name[s]
  3.  *
  4.  *  DOSIFY  Replaces a UNIX-style file with a copy in which each line feed
  5.  *          is preceded by one carriage return, and the file ends with
  6.  *          one CTL-Z byte.  Use this program on a file in which the MORE
  7.  *          command produces a skewed listing that fails to go back to the
  8.  *          left margin for new lines.
  9.  *
  10.  *  input:  Any printable ASCII text file[s].
  11.  *
  12.  *  output: The same file, with the same name, with DOS conventional line
  13.  *          ends and end of file.
  14.  *
  15.  *  writeup: MIR TUTORIAL ONE, topic 5
  16.  *
  17.  *  Written:    Douglas Lowry   Jan 09 92
  18.  *  Modified:   Douglas Lowry   May 23 92  touch-up
  19.  *              Copyright (C) 1992 Marpex Inc.
  20.  *
  21.  *    The MIR (Mass Indexing and Retrieval) Tutorials explain detailed
  22.  *    usage and co-ordination of the MIR family of programs to analyze,
  23.  *    prepare and index databases (small through gigabyte size), and
  24.  *    how to build integrated retrieval software around the MIR search
  25.  *    engine.  The fifth of the five MIR tutorial series explains how
  26.  *    to extend indexing capability into leading edge search-related
  27.  *    technologies.  For more information, GO IBMPRO on CompuServe;
  28.  *    MIR files are in the DBMS library.  The same files are on the
  29.  *    Canada Remote Systems BBS.  A diskette copy of the Introduction
  30.  *    is available by mail ($10 US... check, Visa or Mastercard);
  31.  *    diskettes with Introduction, Tutorial ONE software and the
  32.  *    shareware Tutorial ONE text cost $29.  Shareware registration
  33.  *    for a tutorial is also $29.
  34.  *
  35.  *    E-mail...
  36.  *                Compuserve  71431,1337
  37.  *                Internet    doug.lowry%canrem.com
  38.  *                UUCP        canrem!doug.lowry
  39.  *                Others:     doug.lowry@canrem.uucp
  40.  *
  41.  *    FAX...                  416 963-5677
  42.  *
  43.  *    "Snail mail"...         Douglas Lowry, Ph.D.
  44.  *                            Marpex Inc.
  45.  *                            5334 Yonge Street, #1102
  46.  *                            North York, Ontario
  47.  *                            Canada  M2N 6M2
  48.  *
  49.  *    Related database consultation and preparation services are
  50.  *    available through:
  51.  *              Innotech Inc., 2001 Sheppard Avenue E., Suite #118,
  52.  *              North York, Ontario  Canada   M2J 4Z7
  53.  *              Tel.  416 492-3838   FAX  416 492-3843
  54.  *
  55.  *  This program is free software; you may redistribute it and/or
  56.  *  modify it under the terms of the GNU General Public License as
  57.  *  published by the Free Software Foundation; either version 2 of
  58.  *  the License, or (at your option) any later version.
  59.  *
  60.  *  This program is distributed in the hope that it will be useful,
  61.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  62.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  63.  *  GNU General Public License for more details.
  64.  *
  65.  *  You should have received a copy of the GNU General Public License
  66.  *  (file 05LICENS) along with this program; if not, write to the
  67.  *  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
  68.  *  USA.
  69.  */
  70.  
  71. #include <stdio.h>
  72.  
  73. #define  repeat  for(;;)
  74.  
  75. typedef     enum bool
  76.     { FALSE = 0, TRUE = 1 }  Bool ;
  77.  
  78.     Bool    process();
  79.     void    Usage_() ;
  80.     char    *Cmdname_()     { return( "dosify" ) ; }
  81.  
  82. /*
  83.  *  MAIN -
  84.  */
  85.  
  86. main( argc, argv )
  87.     int     argc;
  88.     char    **argv;
  89. {
  90.     FILE    *fp_in, *fp_out ;
  91.     Bool    okay ;
  92.     char    fname[16],
  93.             c10 ;
  94.     int     file ;
  95.  
  96.     c10 = argv[1][0] ;
  97.     if( argc == 1 || c10 == '-' || c10 == '/' || c10 == '?' )
  98.         Usage_();
  99.     sprintf( fname, "%d.999", getpid() );
  100.  
  101.     for( file = 1; file < argc ; file++ )
  102.     {
  103.         if(( fp_in = fopen( argv[ file ], "rb" )) == NULL )
  104.         {
  105.             fprintf( stderr, "Can't open file %s\n", argv[ file ] );
  106.             continue ;
  107.         }
  108.  
  109.         if(( fp_out = fopen( fname, "wb" )) == NULL )
  110.         {
  111.             fprintf( stderr, "Can't open temporary file %s\n", fname );
  112.             fclose( fp_in ) ;
  113.             continue ;
  114.         }
  115.         fprintf( stderr, "Dosifying %s\n", argv[ file ] ) ;
  116.  
  117.         okay = process( fp_in, fp_out ) ;
  118.         if( fclose( fp_in ) || fclose( fp_out ))
  119.         {
  120.             fprintf( stderr, "Problem closing %s\n", argv[ file ] );
  121.             okay = FALSE ;
  122.         }
  123.  
  124.         if( okay )
  125.         {
  126.             unlink( argv[ file ] ) ;
  127.             if( rename( fname,  argv[ file ] ))
  128.                 fprintf( stderr, "File %s okay, but has temporary name %s\n",
  129.                             argv[ file ], fname ) ;
  130.             else
  131.                 fprintf( stderr, "\t\t...Completed okay.\n" ) ;
  132.         }
  133.     }
  134.  
  135.     exit( 0 );
  136. }
  137.     void
  138. Usage_()
  139. {
  140.     fprintf( stderr, "\nusage:  %s file_name[s]\n\n\
  141.         Replaces a UNIX-style file with a copy in which each line feed\n\
  142.         is preceded by one carriage return, and the file ends with\n\
  143.         one CTL-Z byte.  Use this program on a file in which the MORE\n\
  144.         command produces a skewed listing that fails to go back to the\n",
  145.                 Cmdname_() );
  146.     fprintf( stderr, "        left margin for new lines.\n\n\
  147. input:  Any printable ASCII text file[s].\n\n\
  148. output: The same file, with the same name, with DOS conventional line\n\
  149.         ends and end of file.\n\n\
  150. writeup: MIR TUTORIAL ONE, topic 5\n\n" ) ;
  151.     exit( 1 ) ;
  152. }
  153. /*
  154.  *  PROCESS
  155.  */
  156.     Bool
  157. process( fp_in, fp_out )
  158.     FILE    *fp_in, *fp_out ;
  159. {
  160.     int     ch ;
  161.     Bool    foul_up ;
  162.  
  163.     foul_up = FALSE ;
  164.  
  165.     repeat
  166.     {
  167.         if(( ch = fgetc( fp_in )) == EOF )
  168.         {
  169.             if( feof( fp_in ))
  170.                 break ;
  171.         }
  172.  
  173.         if( ch == '\n' )
  174.             fputc( '\015', fp_out ) ;
  175.         if( ch != '\015' && ch != '\032' )
  176.         {
  177.             if( fputc( ch, fp_out ) != ch )
  178.                 foul_up = TRUE ;
  179.         }
  180.         if( foul_up )
  181.             return( FALSE );
  182.     }
  183.  
  184.     fputc( '\032', fp_out );
  185.     return( TRUE ) ;
  186. }
  187.