#include <bobcat/fork>
#include <bobcat/pipe>
#include <bobcat/ofdstream>
#include <bobcat/process>
#include <bobcat/redirector>

using namespace FBB;

class Less: public Fork
{
    Pipe d_childInput;
    
    public:
        ~Less() override;

    private:
        void childRedirections() override;
        void childProcess() override;
        void parentProcess() override;
};

Less::~Less()
{}

void Less::childRedirections()
{
    d_childInput.readFrom(Redirector::STDIN);
};


void Less::childProcess()
{
    Process less{ 
                Process::DIRECT, Process::NO_PATH, "/usr/bin/less"
            };

    less.start();
}

void Less::parentProcess()
{
    OFdStream toChild(d_childInput.writeOnly(), 100);

    for (size_t idx = 0; idx != 200; ++idx)
        toChild << "line index " << idx << endl;

    d_childInput.close();

    cout << "Program ends: " << waitForChild() << '\n';
}
