{    Programa de Consulta  Dicionrios             }
{    Autor:  Marcelo Luis Pimentel Pinheiro    }
{    Rio de Janeiro, 18 de fevereiro de 1995    }

Program Dicvox;

Uses DVCRT, WinDOWS, DVWin, dvForm,
    DicLeitu, DicVars, Dicfun, Dicfunc, DicSom, DicBusca, Dicler;

Procedure Escrevetela;
begin
  textbackground(blue);
  textcolor (LightGray);
  Clrscr;
  MolduraTela;
  gotoxy(26,2);
  write( 'DICIONRIOS  ELETRNICOS');
  gotoxy(29, 3);
  write ('Verso DOSVOX 3.1c - 2004');
  gotoxy(6, 4);
  Write(' Autores:  Paulo Roberto Barbosa - e-mail: tprobert@intervox.nce.ufrj.br');
  gotoxy(6, 5);
  write('           Marcelo Lus Pimentel - e-mail: marcelo@intervox.nce.ufrj.br');
end;

{-----------------------------}

Procedure ajuda1;
begin
  limpabaixo;
  gotoxy(20, 8);
  write ('Ajuda das opes principais do Dicvox:');
  gotoxy(10, 11); write('Opo P: para voc encontrar os verbetes.');
  gotoxy(10, 12); write('Opo L: para voc abrir o Dicionrio logo no incio.');
  gotoxy(10, 13); write('Opo M: para voc que j colocou marcadores no seu Dicionrio');
  gotoxy(10, 14); write('Opo I: para conhecer algumas informaes sobre o Dicionrio.');
  gotoxy(10, 15); write('Opo F1 ou H: mostra um pequeno texto de ajuda.');
  sintsom('DCAJUDA');
{  msgbaixo('DCTECESC', 'Tecle ESC para voltar ao menu');}
{  repeat until readkey=#27;}
end;

{-----------------------------}

Procedure ConfiguraDicionario(arqini: String);
var
    config: Text;
    i, j, erroval:Integer;
    strAux: String;
begin
  codlivro :=1; capituloatual :=1;

assign(config, 'c:\dicvox\' + arqini + '\' + arqini + '.ini');
    {$i-} reset(config); {$i+}
If IOResult <> 0  Then
        begin
        msgbaixo('DCNAOCFG', 'No encontrei o arquivo de configurao.');
        halt(1);
        end;

    { comea a ler as configuraes dos dicionrios... }

For i:=0 to 27 Do
    begin
    readln(config, straux);
    j := Pos('=', straux);
    If j > 0 Then
        begin
        nomeLivros^[i] := copy(straux, 1, j - 1);
strAux := CompactaLinha(copy(straux, j + 1, length(straux) - j));
        val(strAux, indice[i], erroval);
        end;
    end;

{ ao final dos livros e indices, vem o tamanho... }
    readln(config, straux);
    j:= Pos('=', straux);
    strAux := copy(straux, j+1, length(straux) - j);
    straux := compactalinha(straux);
    Val(straux, tamanhoDicionario, erroval);

{ l do arquivo o Tamanho da ltima Letra}
    readln(config, straux);
    j:= Pos('=', straux);
    strAux := copy(straux, j+1, length(straux) - j);
    straux := compactalinha(straux);
    Val(straux, TamanhoLetraZ, erroval);

{ l do arquivo o Inicio da ltima Parte do Dicionrio}
    readln(config, straux);
    j:= Pos('=', straux);
    strAux := copy(straux, j+1, length(straux) - j);
    straux := compactalinha(straux);
    Val(straux, InicioUltimaParte, erroval);

{ l do arquivo o Tamanho do arquivo Info }
    readln(config, straux);
    j:= Pos('=', straux);
    strAux := copy(straux, j+1, length(straux) - j);
    straux := compactalinha(straux);
    Val(straux, TamanhoInfo, erroval);

For i:=1 to 26 Do
    begin
    readln(config, straux);
    j := Pos('=', straux);
    If j > 0 Then
        begin
strAux := CompactaLinha(copy(straux, j + 1, length(straux) - j));
        val(strAux, NumeroCap[i], erroval);
        end;
    end;

  dadosDisco := 'c:\dicvox\' + arqini + '\' + arqini + '.dat';
  dadosLinhas := 'c:\dicvox\' + arqini + '\lin_' + arqini + '.dat';
  DadosInfo := 'c:\dicvox\' + arqini + '\inf_' + arqini + '.dat';

   close(Config);
{$i-} close(quelinha); {$i+}
  assign(quelinha, dadoslinhas);
  {$i-} reset(quelinha);{$i+}
  If IOresult <> 0  Then
      write(#7, #7);
end;

{-----------------------------}

Procedure TrocaDicionario;
var
    arqini: String;
    retorno:byte;
begin
  LimpaBaixo;

  gotoxy(2, 24);
write(barramenu);

(*   gotoxy(20, 11);
  write ('A - Dicionrio Jurdico de Latim');
  gotoxy(20, 12);
  write ('B - Dicionrio da Bblia de Almeida');
  gotoxy(20, 13);
  write ('C - Dicionrio de Sociologia');
  gotoxy(20, 14);
  write ('D - Dicionrio de Espanhol / Portugus');
  gotoxy(20, 15);
  write ('E - Dicionrio de Espanhol / Espanhol');
  gotoxy(20, 16);
  write ('F - Dicionrio de Francs');
  gotoxy(20, 17);
  write ('G - Dicionrio de Grego com Concordncia em grego nas informaes');
  gotoxy(20, 18);
  write ('H - Dicionrio de Hebraico com Concordncia em hebraico nas informaes');
  gotoxy(20, 19);
  write ('J - Dicionrio Jurdico Brasileiro');
  gotoxy(20, 20);
  write ('K - Dicionrio de Eletrnica em espanhol');
  gotoxy(20, 21);
  write ('I - Dicionrio de ingls / Portugus');
  gotoxy(20, 22);
  write ('L - Dicionrio de Filosofia');
  gotoxy(20, 23);
  write ('N - Dicionrio de Informtica');
  gotoxy(20, 24);
  write ('O - Dicionrio de ingls Oxford');
  gotoxy(20, 25);
  write ('P - Dicionrio de Portugus');
  gotoxy(20, 26);
  write ('S - Dicionrio de Ingls / Espanhol');
  gotoxy(20, 27);
  write ('W - Dicionrio de ingls Webster');
  gotoxy(2, 8); write(consultar);
*)

  msgbaixo('DCDICDES', 'Qual o dicionrio desejado?');

            gotoxy (20, 11);
            popupMenuCria (20, 11, 50, 17, RED);

  popupMenuAdiciona ('DCINGPOR', 'I - Dicionrio de ingls / Portugus');
  popupMenuAdiciona ('DCLATIM', 'A - Dicionrio Jurdico de Latim');
  popupMenuAdiciona ('DCDBAL', 'B - Dicionrio da Bblia de Almeida');
  popupMenuAdiciona ('DCSOCI', 'C - Dicionrio de Sociologia');
  popupMenuAdiciona ('DCESPPOR', 'D - Dicionrio de Espanhol / Portugus');
  popupMenuAdiciona ('DCESPA', 'E - Dicionrio de Espanhol / Espanhol');
  popupMenuAdiciona ('DCFRAN', 'F - Dicionrio de Francs');
  popupMenuAdiciona ('DCGREGO', 'G - Dicionrio de Grego com Concordncia em grego nas informaes');
  popupMenuAdiciona ('DCHEBRAI', 'H - Dicionrio de Hebraico com Concordncia em hebraico nas informaes');
  popupMenuAdiciona ('DCDJBR', 'J - Dicionrio Jurdico Brasileiro');
  popupMenuAdiciona ('DCELEESP', 'K - Dicionrio de Eletrnica em espanhol');
  popupMenuAdiciona ('DCFILO', 'L - Dicionrio de Filosofia');
  popupMenuAdiciona ('DCINFO', 'N - Dicionrio de Informtica');
  popupMenuAdiciona ('DCOXFORD', 'O - Dicionrio de ingls Oxford');
  popupMenuAdiciona ('DCPOR', 'P - Dicionrio de Portugus');
  popupMenuAdiciona ('DCINGESP', 'S - Dicionrio de ingls / Espanhol');
  popupMenuAdiciona ('DCWEBSTE', 'W - Dicionrio de ingls Webster');

retorno := popupMenuSeleciona;

case retorno of
1: arqini := 'IP';
2: arqini := 'LAT';
3: arqini := 'DBA';
4: arqini := 'SO';
5: arqini := 'EP';
6: arqini := 'ESP';
7: arqini := 'FRA';
8: arqini := 'GRE';
9: arqini := 'HEB';
10: arqini := 'DJB';
11: arqini := 'EL';
12: arqini := 'FI';
13: arqini := 'INFO';
14: arqini := 'OXF';
15: arqini := 'POR';
16: arqini := 'IE';
17: arqini := 'WEB';
Else
msgbaixo('BVDESIST', 'Operao cancelada.');
exit;
END;

    ConfiguraDicionario (arqini);
                msgbaixo('DCOK', 'OK');
end;

{-----------------------------}

Procedure Inicializa;
var s: string;
     erro: integer;
     n: integer;
begin
    s := sintAmbiente ('DICVOX', 'VELOCIDADE');
    if s = '' then
        n := 0
    else
        val (s, n, erro);
   sintInic (n, sintAmbiente ('DICVOX', 'DIRDICVOX'));

  EscreveTela;
  sintteclacorta(true);
{  SintSom ('DCMSG2');}
  msgbaixo('DCAGUARD', 'Aguarde');
    s := sintAmbiente ('DICVOX', 'FALARPONTUACAO');
    if s = '' then
    begin
    sintFalaPont := copy (sintAmbiente ('DICVOX', 'FALARPONTUACAO'), 1, 1) = 'N';
    end
    else
    sintFalaPont := copy (sintAmbiente ('DICVOX', 'FALARPONTUACAO'), 1, 1) <> 'N';
        if sintFalaPont then
begin
  sintFalaPont :=true;
end;

  DadosMarca := 'c:\dicvox\marcas.dat'; {' + arqini + '\marcas.dat';}
    LeMarcadores;

    ConfiguraDicionario('POR');
end;

Procedure apresenta;
begin
  gotoxy(33, 8);  write('Apresentao:');
  gotoxy(15,11);  write('Programa de consulta a Dicionrios');
  gotoxy(12,14);  write(
  'Para adquirir o produto faa download do endereo');
  gotoxy(12,15);  write(
  'http://intervox.nce.ufrj.br/~glaucofc/dicvox.zip');
  gotoxy(12,17);  write(
  'ou atravs do e-mail: <glaucofc@intervox.nce.ufrj.br>');
{  gotoxy(21,24);  write('Tecle ENTER para continuar');}
{  sintsom('DCTECENT');}
{  repeat until readkey = #13;}
{sintclek;}
 end;

Function Finaliza:Char;
begin
  LimpaBaixo;
  gotoxy(2,24);
  write('                Que as palavras aqui lidas iluminem sua vida !               ');
  gotoxy(33, 8); write('Finalizao:');
  gotoxy(20, 11); write('Obrigado por utilizar nossos programas');
  textbackground(red); textcolor(white); highvideo;
  gotoxy(2,13); write(
'            Este produto no deve ser copiado de nenhuma forma!             ');
  gotoxy(2, 14); write(
'         Qualquer cpia ilegal sofrer as medidas cabveis da Lei.          ');
  normvideo; textbackground(blue); textcolor(lightgray);
  gotoxy(5,16); write(
'Caso voc desejar maiores informaes sobre a Bblia, fale conosco.');
  gotoxy(12,17); write(
'Jesus Cristo  o nico caminho para nossa Salvao.');
  gotoxy(15,18); write(
'Atenda ao seu chamado antes que seja tarde !');
  gotoxy(5,19); write(
'Lembre-se: A palavra de Deus  alimento para nossas almas.');
  gotoxy(18, 21); write(
'Que Jesus te abenoe e te guarde.');

  GravaMarcadores;
  close(quelinha);
  finaliza := #255;
  sintteclacorta (true);
//  msgbaixo('DCFIMDIC', 'Fim do Dicvox');
  sintFim;
  doneWinCrt;
end;

Procedure PegaOpcao;
var c: char;
    nomeArq: string;
begin
  sintteclacorta(true);
repeat
  LimpaBaixo;
  gotoxy(2, 24); write(barramenu);
  gotoxy(20, 11);
  write('L - Leitura corrente do Dicionrio');
  gotoxy(20, 13);
  write ('P - Procurar por passagem');
  gotoxy(20,15);
  write ('T - Procurar por texto');
  gotoxy(20, 17);
  write ('M - Localizar marcadores de livro');
  gotoxy(20, 19);
  write ('I - Informaes sobre a Bblia');
 gotoxy(20, 21);
  write('F - Finalizar programa');
  gotoxy(2, 8); write(consultar);

    procuraVerbetesNoTexto;

  repeat
  sintsom ('DCTPCONS');
    opc :=upcase( readKey);
//    If opc =#0  then lixo :=readkey;
    If (opc in [F2..f12]) then opc :=#0;
    If opc =F1  then     Ajuda1;
  Until opc in ['A', 'P','I','F','M','L', 'V', 'T', ^T, ESC, ENTER,
'E', 'Q', 'R', 'W', 'H', '?',
'U', 'u', ^U, ^X];
    Case opc of
      'L': Letudo;
      'V': TrocaDicionario;

      'P': ProcuraVerbetes;
      'T': ProcuraTexto;
      ^T: buscaDeNovo;
      'U': ProcuraTexto1;
      ^U: buscaDeNovo1;
      'I': Informacoes;
      'M': Begin
        assign(arquivo, dadosdisco);
        {$i-}reset(arquivo);{$i+}
        If IOresult <> 0  Then
            msgbaixo('DCERRODT','Erro grave nos dados do sistema !')
        Else begin
               pontaux :=0;
               ponteiro :=0;
               py :=1; px :=1;
               vaiparamarca;
               If ponteiro > 0  Then
               begin
                  letrecho;
                  processaleitura;
               end;
             end;
        end;

'R': begin
c := '5';
        begin
            sintFim;
            sintInic (ord(c) - ord('0'), sintambiente ('DICVOX', 'DIRDICVOX'));
end;
end;
'E': begin
c := '4';
        begin
            sintFim;
            sintInic (ord(c) - ord('0'), sintambiente ('DICVOX', 'DIRDICVOX'));
end;
end;
'W': begin
c := '3';
        begin
            sintFim;
            sintInic (ord(c) - ord('0'), sintambiente ('DICVOX', 'DIRDICVOX'));
end;
end;
'Q': begin
c := '2';
        begin
            sintFim;
            sintInic (ord(c) - ord('0'), sintambiente ('DICVOX', 'DIRDICVOX'));
end;
end;

                    ^X: begin
delay (3);
    SintFim;
    doneWinCrt;
end;

      'F', ESC: opc :=Finaliza;
      'A', 'H', '?': Ajuda1;
      Else begin
              msgbaixo( 'DCOPCINV','Opo errada');
              gotoxy(2,24); write(barramenu);
           end;
    end;
  Until opc = #255;
end;

begin
  Inicializa;
  apresenta;
  {  verificacopia;}
  pegaopcao;
end.
