{--------------------------------------------------------}
{
{    DOSVOX - Sistema operacional para deficientes visuais
{
{    Autor: Jose' Antonio Borges
{
{    Em 14/4/94
{
{--------------------------------------------------------}

{$M 16584,8192}

program dosvox;
{$R dosvox.res}

uses windos, dvcrt, dvwin, winProcs, winTypes, dvExec,
     dosgeral, dosmsg, dosdir, dosarq, dostec, dosdisco, dosjanel,
     dosdos, dosed, dosimpr, dosutil, dosproc, dosconf, strings;

const
     versao = '2.4';
     tipoVersao = '';      { ALFA, BETA ou '' }

var
    processando: boolean;
    c, c2: char;

{--------------------------------------------------------}
{             ruído característico do DOSVOX
{--------------------------------------------------------}

procedure bipa;
begin
     sound (600);  delay (100); nosound;
     sound (1200); delay (100); nosound;
     sound (2400); delay (100); nosound;
end;

{--------------------------------------------------------}
{                    inicializacao
{--------------------------------------------------------}

procedure inicializa;
var i: integer;
     hora, min, seg, cent: word;
     c: char;
     nomeProg, dir: string;
     jan: hWnd;

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

procedure checaDosvoxIni;
var
    pnomeDir: array [0..144] of char;
    dirWindows, nomeArq, s: string;
    arqOrig, arqDest: text;
begin
    getWindowsDirectory (pnomeDir, 144);
    dirWindows := strPas (pnomeDir);
    if dirWindows [length (dirWindows)] <> '\' then
         dirWindows := dirWindows + '\';

    assign (arqDest, dirWindows+ 'dosvox.ini');
    {$I-}  reset (arqDest);  {$I+}
    if ioresult <> 0 then
        begin
            assign (arqOrig, 'dosvox.ini');
            {$I-}  reset (arqOrig);   {$I+}
            if ioresult <> 0 then exit;

            assign (arqDest, dirWindows + 'dosvox.ini');
            {$I-} rewrite (arqDest); {$I+}
            if ioresult <> 0 then exit;

            while not eof (arqOrig) do
                 begin
                     readln (arqOrig, s);
                     writeln (arqDest, s);
                 end;

            close (arqOrig);
            close (arqDest);
        end
    else
        close (arqDest);
end;
     textBackground (RED);
     mensagem (DVSISTOP, 0);   { sistema operacional Dosvox }
     if not keypressed then
         begin
             mensagem (DVVERSAO, 0);   { versao }
             soletra (versao, 0);      { qual versao }
             sintWriteln (tipoVersao);
             textBackground (BLACK);
             mensagem (DVNCE, 1);      { NCE/UFRJ }
         end
     else
         begin
             while keypressed do c := readkey;
             writeln;
         end;

     textBackground (BLACK);
     gettime (hora, min, seg, cent);

     if hora < 5 then
         mensagem (DVBOANOI, 2)   { boa noite }
     else if hora < 12 then
         mensagem (DVBOMDIA, 2)   { bom dia }
     else if hora < 18 then
         mensagem (DVBOATAR, 2)   { boa tarde }
     else
         mensagem (DVBOANOI, 2);  { boa noite }

     writeln ('O Kit DOSVOX só pode ser adquirido no Centro de Distribuição DOSVOX.');
     writeln ('Qualquer cópia obtida por outros meios será considerada ilegal.');
     writeln ('Para obter o kit: (021)238-1400 - Katia Multimidia M.E.');
     writeln ('Direção técnica:  (021)598-3117 - Prof. José Antonio Borges');
     writeln ('                  Internet : antonio2@nce.ufrj.br');
     writeln ('Duvidas técnicas: (021)598-3198 - CAEC - UFRJ');
     writeln ('                  Bernard Condorcet: bernard@nce.ufrj.br');
     writeln ('                  Geraldo Junior   : geraldo@caec.nce.ufrj.br');
     writeln ('                  Marcelo Pimentel : marcelo@caec.nce.ufrj.br');
     writeln ('                  Renato Costa     : rcosta@nce.ufrj.br');
     writeln ('WWW do Dosvox  :  http://www.nce.ufrj.br/aau/dosvox');
     writeln;

     dir := sintAmbiente('DOSVOX', 'DIRDEFAULT');
     if dir <> '' then
         begin
             {$I-} chdir (dir); {$I+}
             if ioresult <> 0 then;
         end;
end;
{--------------------------------------------------------}
{                  opcao de fim do DOSVOX
{--------------------------------------------------------}

procedure fimDOSVOX;
var
    c, c2: char;
    nomeProg: string;
begin
    limpaBuf;
    mensagem (DVCNFFIM, 0);
    pegaTeclado (c, c2);
    if c > ' ' then
        soletra (c, 0);
    writeln;

    if upcase(c) <> 'S' then exit;

    writeln;
    processando := false;
    mensagem (DVTRAB, 1);
    mensagem (DVTCHAU, 1);
    SintFim;

    nomeProg := sintAmbiente ('DOSVOX', 'PROGFINAL');
    if nomeProg <> '' then
        executaProg (nomeProg, '', '', SW_SHOWNORMAL);

    doneWinCrt;
end;

{--------------------------------------------------------}
{                  mostra o nome do dono
{--------------------------------------------------------}

procedure mostraQuem;
var arq: text;
    nomeArq, s: string;
    i: integer;
begin
    nomeArq := sintAmbiente ('DOSVOX', 'PGMDOSVOX');
    nomeArq := nomeArq + '\DOSVOX.DON';

    assign (arq, nomeArq);
    {$I-} reset (arq);  {$I+}
    if ioresult <> 0 then
        begin
            sintWriteln ('Cópia pirata do DOSVOX');
            sintWriteln ('Notifique ao grupo DOSVOX da UFRJ');
            exit;
        end;

    while not eof (arq) do
        begin
            readln (arq, s);
            for i := 1 to length (s) do
                s[i] := chr (ord (s[i]) xor ((i+10) mod 20));
            s := s + #$0;
            oemToAnsi (@s[1], @s[1]);
            writeln (s);
            sintetiza (s);
        end;

    {$I-} close (arq); {$I+}
    if ioresult <> 0 then;
end;

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

procedure ajudaPrincipal;
var i: integer;
    c, c2: char;
label prox;
begin
    writeln;
    for i := AJUDAPRINC_1 to AJUDAPRINC_99 do
        begin
            mensagem (i, 1);
            if keypressed then
                begin
                    sintBip;
                    goto prox;
                end;
        end;
prox:
    pegaTeclado (c, c2);
    if c = #$1b then exit;

    for i := AJUDACONT_1 to AJUDACONT_99 do
        begin
            mensagem (i, 1);
            if keypressed then
                begin
                    while keypressed do c := readkey;
                    sintBip;
                    exit;
                end;
        end;
end;

begin
     inicializa;

     processando := true;
     while processando do
         begin
             textBackground (BLUE);
             limpabuf;
             while sintFalando do;
             mensagem (DVDOSVOX, 0);
             mensagem (DVOQUE, 0);
             textBackground (BLACK);
             pegaTeclado (c, c2);

             if (c = #0) and (c2 = F1) then
                 ajudaPrincipal
             else
                 begin
                     if c = GOTFOCUS then
                         writeln
                     else
                         soletra (c, 1);

                     case upcase(c) of
                         'T': testaTeclado;
                         'E': editarLerArquivo ('', 0);
                         'L': editarLerArquivo ('', 1);
                         'I': trataImpressao;
                         'J': chamaUtilitarios ('J');    { jogos }
                         'U': chamaUtilitarios ('U');    { utilitarios comuns }
                         'R': chamaUtilitarios ('R');    { rede }
                         'M': chamaUtilitarios ('M');    { multimídia }
                         'P': chamaProg;
                         'V': vaiParaJanela;
                         'C': configDosvox;
                         'A': trataArquivos;
                         'S': trataSubDiretorio;
                         'D': trataDiscos;
                         'Q': mostraQuem;
                        #$0d: ;
                        #$1b,'F': fimDOSVOX;

                        GOTFOCUS: ;

                     else
                         mensagem (DVOPINV, 1);
                         if keypressed then
                             begin
                                 while keypressed do c := readkey;
                                 sintBip;
                             end
                         else
                             mensagem (DVSEF1, 1);
                     end;
                 end;
         end;
end.
