{-------------------------------------------------------------}
{
{    Telnet Falado
{
{    Autor: Jose' Antonio Borges
{
{    Em 24/04/98
{
{-------------------------------------------------------------}

{$M 16536,8192}
program tnetVox;

{-------------------------------------------------------------}
{		arquivos de inclusao obrigatoria
{-------------------------------------------------------------}

uses dvcrt, strings, dvWin, winsock, winprocs,
     tnVars, tnFala, tnRede, tnTerm, tnCmdLoc, tnMsg;


{-------------------------------------------------------------}
{              pega parametros da linha de comando
{-------------------------------------------------------------}

procedure pegaParametros;
var erro: integer;
begin
    strPCopy (nomeHost, paramStr(1));
    erro := 0;
    if paramCount > 1 then
        val (paramStr(2), porta, erro);

    if erro <> 0 then
        begin
            sintWriteln ('Favor usar: tnetvox computador porta');
            while sintfalando do;
            sintFim;
            doneWinCrt;
        end;

    if porta <> 23 then
        begin
            acumulaTeclado := true;
            enterCRLF := true;
            modoFala := falaTudo;
        end;
end;

{-------------------------------------------------------------}
{             pergunta nome do computador e outros
{-------------------------------------------------------------}

procedure perguntaParametros;
var s: string;
    erro: integer;
    c: char;
label deNovo;
begin

    s := sintAmbiente ('TNETVOX', 'NOMECOMPUT');
    if s = '' then
        begin
            mensagem ('TNNOMCOM', 0);  {'Nome do computador: '}
            sintReadln (s);
            if s = '' then
                 begin
                     mensagem ('TNPROCAN', 1);  {'Programa cancelado'}
                     delay (2000);
                     sintFim;
                     doneWinCrt;
                 end;
        end;

    strPCopy (nomeHost, s);

    c := 'S';
    s := sintAmbiente ('TNETVOX', 'PADRAO');
    if (s <> 'SIM') and (s <> 'sim') then
         begin
             mensagem ('TNCNFPAD', 0);  {'Configuração padrão (s/n) ? '}
             c := sintReadkey;
             writeln (c);
         end;

    if upcase(c) = 'N' then
        begin
deNovo:
            mensagem ('TNPORTA', 0);  {'Qual a porta TCP/IP (enter se não souber) ? '}
            sintReadln (s);
            if (s = '') then
                mensagem ('TNPORT23', 1)  {'Usando porta 23'}
            else
                begin
                    val (s, porta, erro);
                    if erro <> 0 then
                        begin
                             mensagem ('TNERRDIG', 1);  {'Erro de digitação'}
                             goto deNovo;
                        end;
                end;

            configura;
        end;
end;

{-------------------------------------------------------------}
{		     rotina de inicializacao
{-------------------------------------------------------------}

procedure inicializa;
var s: string;
    erro: integer;
begin
    sintInic (0, sintAmbiente ('TNETVOX', 'DIRTNETVOX'));
    s := sintAmbiente ('TNETVOX', 'NUMLINHAS');
    if s = '' then
        numLinhasTerm := 24
    else
        begin
            val (s, numLinhasTerm, erro);
            if erro <> 0 then
                numLinhasTerm := 24;
        end;
    screenSize.y := numLinhasTerm+1;

    fonteOEM := copy (sintAmbiente ('TNETVOX', 'USAACENTOS'), 1, 1) = 'N';
    SelectOemFont := fonteOEM;

    textBackground (BLUE);
    mensagem ('TNINIC', 0); {'Telnet VOX - NCE/UFRJ - v.'}
    sintWriteln (VERSAO);
    textBackground (BLACK);
    writeln;
    setWindowText (CrtWindow, 'Telnet Vox');

    porta := 23;
    soletrando := true;
    modoFala := falaNormal;
    acumulaTeclado := false;
    enterCRLF := false;
    tipoTerminal := sintAmbiente ('TNETVOX', 'TERMINAL');
    if tipoTerminal = '' then tipoTerminal := 'vt100';

    tamTabAlt := 0;
    carregaTabAlt;

    if paramCount > 0 then
        pegaParametros
    else
        perguntaParametros;

    mensagem ('TNCOMUNI', 1);   {'Tentando conexão'}
    while sintFalando do;
end;

{-------------------------------------------------------------}
{                    termina o programa
{-------------------------------------------------------------}

procedure terminaProg;
begin
    writeln;
    gotoxy (1, numLinhasTerm+1);
    clreol;
    mensagem ('TNFIMPRG', 0);  {'Programa terminado'}
    delay (2000);
    sintFim;
    doneWinCrt;
end;

{-------------------------------------------------------------}
{	      controla processamento raw do teclado
{-------------------------------------------------------------}

procedure tecladoBinario (eBinario: boolean);
begin
    checkBreak := not eBinario;
end;

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

var ev: integer;
label fim;
begin
    inicializa;
    if not abreConexao  then goto fim;

    if porta = 23 then
        preNegociaOpcoes;

    tecladoBinario (true);   	{ repassa control-c, etc... }
    emulaTerminal;
    tecladoBinario (false);
fim:
    fechaConexao;
    terminaProg;
end.
