/*
	PAKAS.C		ARCA -> PKPAK converter, with sort.

	Copyright 1988, Michael J. Housky
	Released to the Public Domain ... *no* rights reserved.
*/

/*
    Update log:

	Version 1.2, 10 September 1988: Released to public domain.
	Version 1.0, 27 August 1988: First version.
*/

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <errno.h>


/*
	spawn_err:	Decode/print spawn/exec error message.
			Return ERRORLEVEL exit code.
*/

int spawn_err( char*, int );
int spawn_err( pname, err )
    char	*pname;		/* program name */
    int		err;		/* copy of errno */
{
    register int rc;

    switch ( err )
    {
	case ENOENT:
	    printf("Can't find %s in DOS PATH\n",pname);
	    rc = 254;
	    break;
	case ENOMEM:
	    printf("Insufficient memory to load %s\n",pname);
	    rc = 253;
	    break;
	default:
	    printf("Error %d loading %s\n",errno,pname);
	    rc = 252;
	    break;
    }
    return rc;

} /* spawn_err */


/*
	PAKAS.C main program
*/

int main(int,char **);
int main( argc, argv )
    int		argc;
    char	**argv;
{
    register int
		i,j;
    char	*pname;
    char	*order;
    char	pakfile[88];

/* First, identify self and examine paramter: */

    printf("\nPAKAS: ARCA-to-PKPAK/PAKSORT v1.2\n");

    if ( argc < 3 )
    {
	printf("Usage: arca archive filespec\n");
	return 255;
    }

/* Next, copy archive name and append default filetype, if necessary */

    strncpy(pakfile, argv[1], sizeof(pakfile)-5);
    pakfile[sizeof(pakfile)-5] = '\0';
    i = strlen(pakfile);
    do
    {
	j = pakfile[--i];
	if ( j=='\\' || j==':' || i==0 )
	{
	    strcat(pakfile,".ARC");
	    break;
	}
    } while ( j!='.' && i>0 );

/* Now spawn PKPAK to move files to archive: */

    pname = "PKPAK";			/* run PKPAK first */
    printf(">PKPAK -oct m %s %s\n",pakfile,argv[2]);
    j = spawnlp( P_WAIT, pname, pname, "-oct", "m", pakfile, argv[2], NULL );
    
    if ( j )				/* if error from PKPAK */
    {
	if ( j==-1 )			/* if spawn error */
	    return spawn_err(pname,errno);
	return j;			/* return code to caller */
    }

/* PKPAK succeeded, run PAKSORT to sort by date/time/name.ext: */

    pname = "PAKSORT";			/* run PAKSORT next */
    order = "D+T+F+";			/* sort by date/time/name.ext */
    printf(">PAKSORT %s %s\n", pakfile, order);
    j = execlp( pname, pname, pakfile, order, NULL );

/* Arrive here on spawn/exec trouble: global errno has reason */

    spawn_err(pname,errno);		/* Display reason */
    return 0;				/* good return, PKPAK succeeded */

} /* main */
