// imprimir.cpp - Imprimir un fichero por la impresora
#include <iostream>
#include <fstream>
using namespace std;

void imprimir(fstream& fs);

int main(int argc, char *argv[])
{
  if (argc != 2)
  {
    cout << "sintaxis: imprimir nombre_fichero\n";
    return 1;
  }
  // Abrir el fichero para leer y asociarle un búfer
  fstream ifs(argv[1], ios::in);
  if (!ifs)
  {
    cerr << "Error: no se puede abrir el fichero\n";
    return -1;
  }
  imprimir(ifs);
}

void imprimir(fstream& fs)
{
  // Crear un flujo hacia la impresora
  fstream impre("lpt1", ios::out);    
  if (!impre)
  {
    cerr << "La impresora no está lista\n";
    return;
  }
  
  // Leer datos del fichero
  const int N = 1000;
  char linea[N], ff = '\f';
  int ncars = 0;
  do
  {
    fs.getline(linea, N, '\n'); // leer una línea del fichero
    if (fs.eof()) break;        // fin de fichero
    impre << linea;             // imprimir la línea

    if ((ncars = fs.gcount()) == N-1) // se activo failbit
      fs.clear();
    else // se encontró el delimitador
      impre << endl;
  }
  while (true);
  impre << ff;
  
  if (!fs.eof() && fs.fail())
    cerr << "Error al leer del fichero\n";
  fs.clear();
  impre.close();
}

