PR02
Parte II: Buffer
Nesta segunda parte do projeto você deve implementar o buffer de caracteres, e o programa para testá-lo.
Buffer
O arquivo buffer.h
contém a interface do módulo que você deve escrever. Seu trabalho é escrever o arquivo buffer.c que implementa as funções descritas em buffer.h
. O arquivo não deve ser alterado. O arquivo buffer.h
pode ser baixado daqui.
Programa de teste do buffer
Para testar sua implementação do buffer, você deve escrever um programa chamado center que lê um arquivo de texto e centraliza cada uma de suas linhas. Dado um número inteiro positivo , seu programa deve ler cada linha do arquivo de entrada usando a função read_line()
de buffer.h
, remover todos os espaços do começo e fim da linha e centralizar o resultado em c
colunas.
Para determinar o que é um espaço, você deve usar a função isspace()
da biblioteca padrão (procure nas man pages). A chamada isspace(c)
devolve não-zero se c
é código de um white space ou zero caso contrário. Para usar a função isspace()
você deve incluir o header ctype.h
:
#include <ctype.h>
Argumentos
Seu programa deve receber na linha de comando os seguintes argumentos: * nome do arquivo de entrada; * nome do arquivo de saída; * número de colunas c
.
A saída centralizada deve ser gravada no arquivo de saída. Linhas em branco (i.e., compostas apenas de espaços) seguidas devem ser colapsadas para uma única linha em branco. Linhas que, após a remoção dos white spaces no início e fim, tenham comprimento maior do que c
, devem ser gravadas no arquivo de saída sem centralização (mas também sem espaços no início e fim) e uma mensagem de erro contendo o número da linha deve ser mostrada na saída padrão de erros stderr
.
Considere por exemplo o arquivo foo.txt
:
As armas e
os baroes assinalados
que da ocidental praia
lusitana por
mares nunca dantes navegados
passaram ainda alem
da Taprobana.
A invocação
$ center foo.txt bar.txt 25
gera o arquivo bar.txt com o conteúdo (o | abaixo indica o começo da linha por motivos de clareza; você não deve incluí-lo na saída!):
++++++++As armas e
++os baroes assinalados
++que da ocidental praia
+++++++lusitana por
mares nunca dantes navegados
+++passaram ainda alem
++++++da Taprobana.
Na saída de erro seria impressa, por exemplo, a mensagem:
center: foo.txt: line 8: line too long.