home *** CD-ROM | disk | FTP | other *** search
- /* manxarcv.c -- unpack a Manx format archive
- *
- * History: 8/2/85 Winkler Created.
- *
- */
-
- #include <stdio.h>
-
- #define MAXNAMELEN 100
- #define CNTRLL 0x0c
- #define CNTRLZ 0x1a
-
- main(argc,argv)
- int argc; char *argv[];
- {
- int c; FILE * arc;
-
- if (argc != 2)
- {
- fprintf(stderr, "Usage: manxarcv archivename\n");
- exit(1);
- }
-
- if ((arc = fopen(argv[1], "r")) == (FILE *) NULL)
- {
- fprintf(stderr, "Can't open %s\n", argv[1]);
- exit(1);
- }
-
- while ( (c = getc(arc)) != EOF )
- {
- switch( c )
- {
- case CNTRLL : UnPackOneFile(arc) ; break ;
- case CNTRLZ : (void) fclose(arc) ; exit(0) ;
- default : fprintf(stderr, "Ignoring %c\n", c) ;
- /* default case is only reached if archive
- * is not in valid format
- */
- }
- }
- }
-
- UnPackOneFile( arc )
- FILE * arc ;
- {
- FILE * newFile ; char name[ MAXNAMELEN ] ; int c ;
-
- /* first read the file name */
- (void) fscanf( arc, "%s\n", name ) ;
- name[ strlen(name) ] = 0 ; /* throw away newline */
- printf("Extracting %s...", name) ;
-
- /* open the new file */
- if ( (newFile = fopen(name, "w")) == (FILE *) NULL )
- {
- fprintf(stderr, "Can't write file %s\n", name) ;
- exit(1) ;
- }
-
- /* copy everything up to the next ^L or ^Z into the new file */
- while ( (c = getc(arc)) != EOF )
- {
- if ( c == CNTRLL || c == CNTRLZ )
- {
- (void) ungetc( c, arc ) ;
- break ;
- }
- else (void) putc( c, newFile ) ;
- }
-
- /* close the new file */
- printf("Done.\n", name) ;
- (void) fclose( newFile ) ;
- }
-