This is rlesplit.c in view mode; [Download] [Up]
/*
* rlesplit.c - Split concatenated RLE files into separate files.
*
* Author: Spencer W. Thomas
* Computer Science Dept.
* University of Utah
* Date: Mon May 4 1987
* Copyright (c) 1987, University of Utah
*/
#include <stdio.h>
#include <rle.h>
#include <rle_raw.h>
#ifdef USE_STDLIB_H
#include <stdlib.h>
#else
#ifdef USE_STRING_H
#include <string.h>
#else
#include <strings.h>
#endif
#ifdef VOID_STAR
extern void *calloc();
#else
extern char *calloc();
#endif
#endif /* USE_STDLIB_H */
/*****************************************************************
* TAG( main )
*
* Usage:
* rlesplit [-n number [digits]] [-p prefix] [rlefile]
* Inputs:
* -n number: If specified, output file numbering will start
* with this value (see below). Otherwise, numbering
* starts at 1.
*
* digits: The number of digits to be used in the numeric
* portion of the output file names. Defaults to 3.
* All numbers will be leading zero filled.
*
* -p prefix: If specified, output files will be named
* "prefix.#.rle". If not specified, and
* an rlefile is specified, then output files
* will be "rlefileroot.#.rle", where
* "rlefileroot" is rlefile with any ".rle" suffix
* stripped off. If no arguments are specified,
* output files will be "#.rle". In any case, "#"
* represents a sequentially increasing number.
*
* infile: If specified, input will be read from here,
* otherwise, input will be read from stdin.
* Outputs:
* Writes each rle image in the input stream to an output file
* whose name is generated as above.
* Assumptions:
* Each RLE image in the input stream must be terminated with
* an EOF opcode.
* Algorithm:
* [None]
*/
void
main( argc, argv )
int argc;
char **argv;
{
register CONST_DECL char * cp, * slashp;
int num = 1, oflag = 0, digits = 3;
int rle_err, ynext, y;
CONST_DECL char * infname = NULL, * prefix = "", * format = "%s%0*d.rle";
char filebuf[BUFSIZ];
rle_hdr in_hdr, out_hdr;
rle_op ** scan;
int * nraw;
if ( scanargs( argc, argv, "% n%-number!ddigits%d o%-prefix!s infile%s",
&num, &num, &digits, &oflag, &prefix, &infname ) == 0 )
exit( 1 );
/* Open input file */
in_hdr.rle_file = rle_open_f(cmd_name( argv ), infname, "r");
if ( oflag || infname )
{
format = "%s.%0*d.rle";
if ( !oflag )
{
/* Strip ".rle" suffix from input file name */
/* Avoid strrchr, rindex problem */
for ( cp = infname; *cp; cp++ )
; /* find end of name */
/* Look for last slash */
for ( slashp = cp - 1; *slashp != '/' && slashp > infname; )
slashp--;
if ( *slashp == '/' )
slashp++;
/* Look for last dot */
while ( *--cp != '.' && cp > infname )
; /* find last . */
if ( strcmp( cp, ".rle" ) != 0 )
cp = infname + strlen( infname );
/* Make null full string buffer */
prefix = (char *)calloc( cp - slashp + 1, 1 );
/* Copy everything but suffix */
strncpy( prefix, infname, cp - slashp );
}
}
while ( (rle_err = rle_get_setup( &in_hdr )) == RLE_SUCCESS )
{
/* Copy input to output file */
sprintf( filebuf, format, prefix, digits, num++ );
fprintf( stderr, "%s: Creating %s\n", cmd_name( argv ), filebuf );
out_hdr = in_hdr;
out_hdr.rle_file = rle_open_f(cmd_name( argv ), filebuf, "w");
rle_addhist( argv, &in_hdr, &out_hdr );
rle_put_setup( &out_hdr );
rle_raw_alloc( &in_hdr, &scan, &nraw );
for ( y = in_hdr.ymin;
(ynext = rle_getraw( &in_hdr, scan, nraw )) != 32768;
y = ynext )
{
if ( ynext - y > 1 )
rle_skiprow( &out_hdr, ynext - y );
rle_putraw( scan, nraw, &out_hdr );
rle_freeraw( &in_hdr, scan, nraw );
}
rle_puteof( &out_hdr );
fclose( out_hdr.rle_file );
rle_raw_free( &in_hdr, scan, nraw );
}
if ( rle_err != RLE_EOF && rle_err != RLE_EMPTY )
rle_get_error( rle_err, argv[0], infname );
exit( 0 );
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.