/*
 * file operands
 * March 1989, Miles Bader (orig from cc.c by fred fish)
 */

#include "common.h"
#include "op.h"

/*
 *	Split an operand name into rootname, basename, and suffix
 *	components.  The rootname is the full name, minus any suffix,
 *	but including any prefix.  The basename is the rootname minus
 *	any prefix.  The suffix is anything after the last '.' character.
 *	Only the suffix is allowed to be the null string.
 */
struct op *op_Create(filename)
char *filename;
{
    char *split;
    extern char *strrchr();
    struct op *op=NEW(struct op);

    DBUG_ENTER("op_Create");

    DBUG_3("ops", "create op '%s'",filename);

    if(op==NULL)
	fatal("couldn't allocate an op");

    op->rootname=filename;

    split=strrchr(filename,'/');
    if(split==NULL)
	split=strrchr(filename,':');

    if(split==NULL)
	op->basename=filename;
    else
	op->basename=++split;

    split=strrchr(filename,'.');
    if(split==NULL)
	op->suffix="";
    else{
	*split++='\0';
	op->suffix=split;
    }

    DBUG_3("ops","rootname '%s'",op->rootname);
    DBUG_3("ops","basename '%s'",op->basename);
    DBUG_3("ops","suffix '%s'",op->suffix);

    DBUG_RETURN(struct op *,op);
}

void op_Free(op)
struct op *op;
{
    FREE(op);
}
