// Copyright (c) 1996-2002 Brian D. Carlstrom

package bdc.scheme.procedure;

import bdc.scheme.Scheme;
import bdc.scheme.SchemeException;
import bdc.scheme.Stack;
import bdc.scheme.Writer;
import bdc.scheme.exception.ArgumentCountException;
import bdc.scheme.expression.ProcedureN;
import bdc.util.Fmt;
import java.util.ArrayList;
import java.util.List;

/**
    Primitive for Fmt.S
*/
public class FmtS extends ProcedureN
{
    public Object applyN (int n, Stack stack) throws SchemeException
    {
        if (n < 1) {
            throw new ArgumentCountException(this, 1, n);
        }

        String control = Scheme.string(stack.array[stack.inUse-1], this);

        List list = new ArrayList();
        for (int i = 2; i <= n ; i++) {
            list.add(Writer.write(stack.array[stack.inUse-i]));
        }
        Object[] more = list.toArray();

        return Fmt.S(control, more);
    }
}
