Cadastro de Estudantes v0.0.1
Gera uma lista ligada de estudantes.
Macros | Funções | Variáveis

Referência ao ficheiro ceui.c

Módulo da interface com usuário. Mais...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
#include <errno.h>
#include <term.h>
#include <curses.h>
#include "mydebug.h"
#include "ceui.h"
#include "fila.h"
#include "pilha.h"
#include "lista.h"
#include "log.h"

Macros

#define TOTAL   48
#define SIZE_TAB   8
#define TOTAL   42

Funções

int main (void)
bool MoreInput (void)
void EmptyStdIn (void)
 Consome dados da entrada padrão. Isto fará com que os dados a mais que o usuário entrou sejam ignorados. A leitura byte a byte faz-se necessária, pois o programa pode estar trabalhando com um arquivo de entrada, assim podemos identificar cada final de entrada com LF '
'.
void Greeting (void)
void PrintMenu (void)
enum eOptMenu ParseOption (const char *pOpt, enum eOptMenu opt, struct TipoFila *pFila, struct TipoLista *pLista, struct TipoPilha *pPilha)
 Processa opcoes do usuario.
enum eOptMenu RemoveStudent (struct TipoLista *pLista)
 Remove aluno da lista duplamente encadeada.
enum eOptMenu CriaFila (struct TipoFila *Fila)
 Gera uma fila, cada elemento da fila é um inteiro, representando a senha do aluno na fila.
enum eOptMenu InsertPilha (struct TipoPilha *pPilha)
 Insere elementos na pilha.
enum eOptMenu InsertStudent (struct TipoFila *pFila, struct TipoLista *pLista, struct TipoPilha *pPilha)
 Insere aluno na lista.
enum eOptMenu InsertNextStudent (struct TipoItem *pitem, struct TipoLista *pLista, struct TipoPilha *pPilha)
 Insere próximo estudante na lista.
void WaitReturn (void)
 Imprime na tela espere e aguarda pela tecla enter.
enum eOptMenu WhichCmd (char *pstr, const char *fmt,...)
 Seleciona um dos comandos de impressão, função recebe um número variável de parâmetros.
int GetDisciplina (char **p)
 Obtém disciplina através da string passada como parâmetro.
enum eOptMenu GetCommand (char *pstr, char *pcmd)
 Obtem um comando através de uma string.

Variáveis

bool g_bStdinConnectedTotty
int g_ncols = DEFAULT_COLS
int g_nlines = DEFAULT_LINES

Descrição detalhada

Módulo da interface com usuário.

Data:
02-05-2012 16:36:35
Versão:
0.0.1
Autor:
Alessandro Elias, ae11@inf.ufpr.br
Welton Pereira Martins, wpm11@inf.ufpr.br

Este módulo possui todas as funcões que interagem com o usuário, é o TUI (text user interface).


Documentação das funções

enum eOptMenu CriaFila ( struct TipoFila Fila)

Gera uma fila, cada elemento da fila é um inteiro, representando a senha do aluno na fila.

Parâmetros:
Fila- Estrutura de dados do TipoFila.
Retorna:
Uma opção do menu passado como comando.
-pf Imprime fila.
-pl Imprime lista.
-pp Imprime a pilha.
oNone (não faça nada) em caso nenhum comando foi encontrado.
Veja também:
LogMessage, InicFila, PERRLN, WaitReturn, WhichCmd, Enfileira
void EmptyStdIn ( void  )

Consome dados da entrada padrão. Isto fará com que os dados a mais que o usuário entrou sejam ignorados. A leitura byte a byte faz-se necessária, pois o programa pode estar trabalhando com um arquivo de entrada, assim podemos identificar cada final de entrada com LF '
'.

Observações:
Note que esta função só é útil quando o programa esta interagindo com o usuário. Nesta condição podemos fazer o programa ignorar a entrada que excede algum buffer.
enum eOptMenu GetCommand ( char *  pstr,
char *  pcmd 
)

Obtem um comando através de uma string.

Parâmetros:
pstr- Ponteiro para uma string qualquer contendo um dos comandos abaixo:
-pf - Imprime fila
-pl - ImprimeLista
-pp - ImprimePilha
pcmd- Ponteiro de retorno com o comando extraido da string do parametro um.
Retorna:
Uma opção do menu passado como comando.
-pf Imprime fila.
-pl Imprime lista.
-pp Imprime a pilha.
oNone (não faça nada) em caso nenhum comando foi encontrado.
Observações:
Seguindo as especificações propostas esta função possibilita ao usuário utilizar um comando de impressão a qualquer momento de execução do programa.
int GetDisciplina ( char **  p)

Obtém disciplina através da string passada como parâmetro.

Faz o parse das disciplinas.

Parâmetros:
[in,out]p- ponteiro para ponteiro. Este parâmetro recebe o endereco do ponteiro da string que contém as entradas das disciplinas. Este buffer é scaniado até que seja encontrado um espaço, quando encontrado é substituído por final da string, e convertido para um inteiro. Como a função recebe o endereço da variável ela é atualiza para a próxima entrada. ATENÇÃO! quem chamou deve passar o endereço de uma variável que pode perder seu conteúdo.
Retorna:
Retorna um inteiro referente a disciplina que usuário entrou. Em p é retornado o ponteiro para o primeiro char da próxima entrada, ou final da entrada.
Observações:
A decisão de implementar desta maneira é para o código ficar mais robusto, não correndo riscos de laco infinito ou falha de segmentacao, por outras funcoes como scanf().
void Greeting ( void  )

Imprime titulo do programa.

enum eOptMenu InsertNextStudent ( struct TipoItem pitem,
struct TipoLista pLista,
struct TipoPilha pPilha 
)

Insere próximo estudante na lista.

Toda a checagen é feito nesta função, como: verificar se todas as disciplinas foram entradas corretamente, ou se nome foi entradado em branco, se usuário inseriu um comando.

Parâmetros:
[in,out]pitem- item a ser inserido na lista, observe que este parâmetro serve como retorno para quem chamou, vazio significa uma flag.
[in,out]pLista- ponteiro para a lisata onde serão inseridos os novos alunos.
[in,out]pPilha- ponteiro para a pilha, de onde serão desenpilhados os brindes a cada inscrito.
Retorna:
Uma opção do menu passado como comando.
-pf Imprime fila.
-pl Imprime lista.
-pp Imprime a pilha.
oNone (não faça nada) em caso nenhum comando foi encontrado.
Veja também:
PERRLN, LogMessage, WaitReturn, WhichCmd, MoreInput, EmptyStdIn, GetDisciplina, VaziaPilha, Pop, InsereLista
enum eOptMenu InsertPilha ( struct TipoPilha pPilha)

Insere elementos na pilha.

Cada elemento da pilha é um brinde que será distribuido aos alunos por ordem de chegada, ou seja, a cada aluno inscrito recebe o brinde do topo da pilha.

Parâmetros:
[in,out]pPilha- Recebe topo da pilha e empilha cada novo elemento.
Retorna:
Uma opção do menu passado como comando.
-pf Imprime fila.
-pl Imprime lista.
-pp Imprime a pilha.
oNone (não faça nada) em caso nenhum comando foi encontrado.
Veja também:
LogMessage, PERRLN, WaitReturn, MoreInput, WhichCmd, Push
enum eOptMenu InsertStudent ( struct TipoFila pFila,
struct TipoLista pLista,
struct TipoPilha pPilha 
)

Insere aluno na lista.

função controla quando deverá parar de pedir entrada para o usuário. Ela para quando:
1. InsertNextStudent retorna diferente de oNone (opção não faça nada). 2. O nome do aluno for deixada em branco. 3. Não tem mais alunos na fila.

Parâmetros:
[in,out]pFila- ponteiro para fila.
[in,out]pLista- ponteiro para a lista onde serão inseridos os alunos.
[in,out]pPilha- ponteiro par a pilha.
Retorna:
Uma opção do menu passado como comando.
-pf Imprime fila.
-pl Imprime lista.
-pp Imprime a pilha.
Observações:
O usuário tem a opção de entrar o nome em branco para finalizar aquela entrada daquela senha, porém esta senha será perdida.
Veja também:
LogMessage, VaziaFila, WaitReturn, Desinfileira, InsertNextStudent
int main ( void  )

Ponto de inicialização do program.

Retorna:
0 em caso o programa foi executado com sucesso, caso contrário código do erro ocorrido.
Veja também:
InicFila, InicLista, InicPilha, Greeting, PrintMenu, MoreInput, OpenLog, CloseLog, LogMessage, WaitReturn, ParseOption
bool MoreInput ( void  )

função verifica se ha mais dados a serem lidos da entrada padrão.

Observações:
Esta decisão de implementação fez-se necessária, uma vez que decidimos que o usuário é livre para dar entrada ao programa sem filtrar o que o usuário entrou. O comportamento de read() em caso a entrada do usuário é maior que o buffer passado a ela, é de: na subsequente chamada a ela, irá retornar o restante da entrada do usuário, até que possa ser lido toda entrada do usuário, uma vez todo o buffer foi consumido, subsequente chamada irá entrar em modo de espera até que seja dada uma outra entrada, em outras palavras, quando tem mais dados no buffer do stdin, as chamadas ao read() retornara imediatamente, até que não reste mais nada no stdin.
enum eOptMenu ParseOption ( const char *  pOpt,
enum eOptMenu  opt,
struct TipoFila pFila,
struct TipoLista pLista,
struct TipoPilha pPilha 
)

Processa opcoes do usuario.

Parâmetros:
[in]pOpt- ponteiro para string com a entrada do usuário.
[in]opt- opção do usuário na forma enum optMenu.
[in,out]pFila- ponteiro para a fila.
[in,out]pLista- ponteiro para a lista.
[in,out]pPilha- pilha de elementos; brindes.
Retorna:
Uma opção do menu passado como comando.
-pf Imprime fila.
-pl Imprime lista.
-pp Imprime a pilha.
oNone (não faça nada) em caso nenhum comando foi encontrado.
Observações:
pOpt tera uma string truncada em caso usuario inseriu uma entrada maior que o buffer.
Veja também:
CriaFila, InsereLista, Imprime, Brinde, Remove
void PrintMenu ( void  )

Imprime opcoes do menu.

enum eOptMenu RemoveStudent ( struct TipoLista pLista)

Remove aluno da lista duplamente encadeada.

Parâmetros:
[in,out]pLista- in informações a respeito da lista. out atualiza lista em caso algum registro foi removido.
Retorna:
Uma opção do menu passado como comando.
-pf Imprime fila.
-pl Imprime lista.
-pp Imprime a pilha.
oNone (não faça nada) em caso nenhum comando foi encontrado.
Veja também:
VaziaLista, LogMessage, WaitReturn, PERRLN, WhichCmd, RemoveLista
void WaitReturn ( void  )

Imprime na tela espere e aguarda pela tecla enter.

Observações:
Esta função só executara as linhas abaixo em caso a variável global g_bStdinConnectedTotty = TRUE, entrada padrão esta conectada ao terminal do usuário. Se o usuário entrar qualquer dado antes de enter ele(s) serão ignorados.
Veja também:
MoreInput, EmptyStdIn
enum eOptMenu WhichCmd ( char *  pstr,
const char *  fmt,
  ... 
)

Seleciona um dos comandos de impressão, função recebe um número variável de parâmetros.

Parâmetros:
[in,out]pstr- in string com a entrada do usuário contendo ou não um comando. Se existe um comando ele sera extraído, tudo que estiver depois do comando será ignorado out.
[in]fmt- formato de uma mensagem que deve aparacer para o usuário. Segue os mesmos critérios de printf.
...um número variável de parâmetros, comforme fmt.
Retorna:
Uma opção do menu passado como comando.
-pf Imprime fila.
-pl Imprime lista.
-pp Imprime a pilha.
oNone (não faça nada) em caso nenhum comando foi encontrado.
Observações:
ATENÇÃO! qualquer dado depois do comando será ignorado.
Veja também:
GetCommand, LogMessage, WaitReturn, PERRLN, MoreInput, EmptyStdIn

Documentação das variáveis

Variável blobal, recebe valor da função isatty().

isatty() retorna 1 quando file descriptor esta conectado a um terminal, 0 caso contrário.

int g_ncols = DEFAULT_COLS

Variável global, armazena número de colunas do terminal do usuário.

int g_nlines = DEFAULT_LINES

Variável global, armazena número de linhas do terminal do usuário.

 Tudo Classes Ficheiros Funções Variáveis Definições de tipos Enumerações Valores da enumeração Macros