{--------------------------------------------------------}
{    Programa de comunicação online com voz
{    Autores: Antonio Borges e Bernard Condorcet
{    Em 14/07/99
{--------------------------------------------------------}

program papovox;
{$M 16584,8192}

uses
    dvwin, dvcrt, wintypes, winprocs,
    winsock, dvinet,
    ppvars, ppconf, ppsnomes, ppconec, ppliga, ppurgent, pprede, ppmsg;

procedure finaliza; forward;

{--------------------------------------------------------}
{               rotina de inicialização
{--------------------------------------------------------}

procedure inicializa;
var jan: hwnd;
    c, c2: char;
    s: string;
    erro: integer;
begin
    jan := findWindow ('dvwincrt', 'PAPOVOX');
    if jan <> 0 then
        begin
            setFocus (jan);
            halt;
        end;

    sintInic (0, sintambiente ('PAPOVOX', 'DIRPAPOVOX'));

    clrscr;
    setWindowText (crtWindow, 'PAPOVOX');
    delay (200);

    textBackground (BLUE);
    mensagem ('PPINIC', 0);    {'Papovox v.'}
    write (versao);
    sintSoletra (versao);
    textBackground (BLACK);
    sintWriteln (' '+ ALFABETA);
    writeln ('Projeto DOSVOX - NCE/UFRJ - 1999');
    writeln;

    if not abreWinSock then
         begin
             mensagem ('PPWSOCK', 1);   {Acesso a Internet não habilitado}
             finaliza;
         end;

    delay (500);        {evita esbarrar nos benditos clicks que o povo ama !}

    mensagem ('PPIDSECR', 0);    {Deseja manter em sua real identidade em segredo ? }
    sintLeTecla (c, c2);
    writeln;
    if c = ESC then
        begin
            mensagem ('PPFIM', 1);     {'Até a próxima'}
            sintFim;
            fechaWinSock;
            doneWinCrt;
        end;

    anonimo := upcase(c) = 'S';
    if anonimo then
        mensagem ('PPNOMFAN', 1)    {Informe então seus dados de fantasia}
    else
        begin
            nomeUsuario  := sintAmbiente ('PAPOVOX', 'NOMEUSUARIO');
            enderUsuario := sintAmbiente ('PAPOVOX', 'ENDERUSUARIO');
        end;

    if anonimo then
         begin
             mensagem ('PPNOMUSU', 1);   {Qual o seu nome ?}
             sintReadln (nomeUsuario);
             if nomeUsuario = '' then finaliza;

             enderUsuario := 'anonimo@lugar.com.br';
         end
    else
        if (nomeUsuario = '') or (enderUsuario = '') then
            begin
                configura;
                if (nomeUsuario = '') or (enderUsuario = '') then
                    begin
                        anonimo := true;
                        finaliza;
                    end;
            end;

    logonUsuario (enderUsuario, 'logon');

    soletrando := true;
    selecionado := '';
    contaSpeaker := 0;

    inicMsgUrgente;

    EnableMenuItem(GetSystemMenu(CrtWindow, False), sc_Close, mf_Disabled);
    checkBreak := false;

    s := sintAmbiente ('PAPOVOX', 'TAMLINHA');
    val (s, maxtec, erro);
    if erro <> 0 then maxtec := 120;
end;

{-------------------------------------------------------------}
{                trata caracteres de funcao
{-------------------------------------------------------------}

procedure procFuncao (c2: char);
begin
    case c2 of
        F1:  begin
                 mensagem ('PPAJUD0', 1);    {'funções do programa'}
                 mensagem ('PPAJUD1', 1);
                 mensagem ('PPAJUD2', 1);
                 mensagem ('PPAJUD3', 1);
                 mensagem ('PPAJUD4', 1);
                 mensagem ('PPAJUD5', 1);
                 mensagem ('PPAJUD6', 1);
             end;

    else
        mensagem ('PPAPTF1', 1);   { Opcao invalida, aperte F1 para ajuda }
    end;
end;

{--------------------------------------------------------}
{               testa se usuario quer terminar
{--------------------------------------------------------}

function testaFim: boolean;
var c, c2: char;
begin
    mensagem ('PPCNFFIM', 0);   {'Confirma fim ? '}
    sintLeTecla (c, c2);
    writeln;
    testaFim :=  upcase (c) = 'S';
end;

{--------------------------------------------------------}
{               ciclo de processamento geral
{--------------------------------------------------------}

procedure processa;
var
    processando: boolean;
    c, c2: char;
label opcao;
begin
    processando := true;
    while processando do
        begin
opcao:
            while temMsgUrgente do
                recebeMsgUrgente;

            while keypressed do readkey;

            textBackground (BLUE);
            mensagem ('PPOPCAO', 0);   {'Qual sua opcao? '}
            textBackground (BLACK);
            while not keypressed do
                if temMsgUrgente then
                    begin
                        writeln;
                        recebeMsgUrgente;
                        goto opcao;
                    end;

            sintLeTecla (c, c2);
            writeln;

            case upcase(c) of
                #$0:  procFuncao (c2);
                'C':  configura;
                'P':  begin
                          pesquisaUsuarios;
                          if selecionado <> '' then
                              liga;
                      end;
                'E':  esperaConexao;
                'L':  liga;
                'M':  enviaMsgUrgente;
                ESC:  processando := not testaFim;
            end;
        end;
end;

{--------------------------------------------------------}
{                        finalização
{--------------------------------------------------------}

procedure finaliza;
begin
    if not anonimo then
        logonUsuario (enderUsuario, 'logoff');

    finalMsgUrgente;

    mensagem ('PPFIM', 1);     {'Até a próxima'}
    sintFim;
    fechaWinSock;
    doneWinCrt;
end;

{--------------------------------------------------------}
{                    programa principal
{--------------------------------------------------------}

begin
    inicializa;
    processa;
    finaliza;
end.
