{--------------------------------------------------------}
{    Programa de Edição e leitura de texto
{    Autor: Geraldo José Ferreira Chagas Júnior
{    Em 27/10/99
{--------------------------------------------------------}
(* para utilização do som*)

{$M 16000, 8000}

{$R wordutil.res}

program WordUtil;

uses dvcrt, dvwin, dvmacro, dvexec,
     winprocs, wintypes, strings, win31,
     WuUtil, WuLe, WuVars, WuArquiv, WuEdita,WuMensa;


{-----------------------------------------------------}
procedure fim (existe:boolean);  { fecha os programas }
{-----------------------------------------------------}
var
  nomeProg:string;
begin
   if existe then
      begin
         delay (300);
         setActiveWindow (Jan_Prog);
         repeat keypressed until getActiveWindow = Jan_Prog;

         delay (200);
         playInit (300);
         playVirtKey (VK_F4, false, false, true, 1);
         playStart;
         while  playIsActive do;
         delay (150);
      end;

   clrscr;
   gotoxy (30,2);
   mensagem ('wufim',0);   { Fim do WordUtil }

   if monitorAtivo then
      begin
         nomeProg := sintAmbiente ('DOSVOX', 'MONITOR');
         executaProg (nomeProg, '', '');
      end;

    setFocus (janOriginal);

   SintFim;
   DoneWinCrt;

end;

{---------------------------------------------------}
procedure Inicializa;    { inicialização do sistema }
{---------------------------------------------------}
var
   s: array [0..30] of char;
   m: hmenu;
   i: integer;
   placement: TWindowPlacement;
   dirOCR: string;

begin

    sintInic (0, sintAmbiente ('WORDUTIL', 'DIRWORDUTIL'));
    (* tamanho da tela *)

    janOriginal := getFocus;
    screenSize.y := 3;

    (* minha area de transferencia *)
    getClipBoard (Clip_Board,8000);
    sintCursorX := 2;

    textBackGround (BLUE);
    textcolor (WHITE);
    mensagem ('wuini',0);     { WordUtil v }
    sintwrite ('1.1'); writeln (' - ESC termina');
    textBackGround (BLACK);
    textcolor (7);

    mensagem ('wuagua', 1);  {Aguarde um momento}
    novo := false; (* de inicio adimite que o arquivo ja existe *)

    (* codigo da minha janela *)
    Minha_Jan := getActiveWindow;

    cancelaMonitor;
    delay (1000);

    (* abre o word *)
    if executaProg (sintAmbiente ('WORDUTIL','NOMEWORD'),'','') < 32 then
        begin
            writeln ('Não executei');
            delay (1000);
            fim (false);
        end;

    repeat keypressed until getActiveWindow <> Minha_Jan;
    (* codigo da jaanela do word *)
    Jan_Prog := getActiveWindow;

   (* seleciona a janela da interface*)
   setActiveWindow (Minha_Jan);
   repeat keypressed until getActiveWindow = Minha_Jan;
end;

{-------------------------------------------------------}
procedure fechamento;   { fecha todas as janelas ativas }
{-------------------------------------------------------}
var
   proxima:integer;
   titulo:string;
   opc:char;
   New_Jan:hwnd;

begin


    trocaJanela (Jan_Prog);
    focaJanela (1);
    titulo := janelaAtual (4);


    while titulo <> '' do
      begin

         while keypressed do;

         trocaJanela (Minha_Jan);
         textcolor (WHITE); textbackground (BLUE);
         mensagem ('wudesaal', 0); {Deseja salvar as alteracoes em }
         sintwrite (titulo); write (' ?');
         textcolor (7); textbackground (BLACK);
         while sintFalando do;

         repeat
            opc := upcase (sintReadKey);
         until (opc = 'N') or (opc = 'S');

         trocaJanela (Jan_Prog);

         (* fecho as Janala *)
         playInit (300);
         playVirtKey (VK_F4, true, false, false, 1);
         playStart;
         while  playIsActive do;
         delay (50);
         (* se apareceu alguma mensagem *)

         if getActiveWindow <> Jan_Prog then
            begin
               New_Jan := getActiveWindow;

               writeln (opc);
               trocaJanela (New_Jan);
               delay (100);
               enviaCarac (ord (opc));
            end;

         focaJanela (1);
         titulo := janelaAtual (4);
      end;
   trocaJanela (Minha_Jan);
end;

{------------------------------------------------------------------}
function  Abertura:boolean;     { processo de abertura do programa }
{------------------------------------------------------------------}
var
   existir,Conseguiu_Abrir :boolean;
   novo :char;
   p: integer;
   path :string;

label cancelado;

begin
    passagem := passagem + 1;

    (* o nome do arquivo nao foi passado como parametro *)
    if (paramCount = 0) or (passagem > 1) then
       begin
         (*  nome do arquivo *)
         textcolor (WHITE); textbackground (BLUE);
         mensagem ('wuqunome',0); {Qual o nome do arquivo: }
         textcolor (7); textbackground (BLACK);
         SintReadln (Nome_Arq);
       end
    else if paramCount = 1 then
       Nome_Arq := paramStr (1);


    (* cancelou a abertura *)
    if Nome_Arq = '' then
       begin
          Conseguiu_Abrir := false;
          goto cancelado;
       end;

   (* usa o diretorio de trabalho *)
   if pos ('\',Nome_Arq) = 0 then
      begin
         GetDir (0,path);
         Nome_Arq := path + '\' + Nome_Arq;
      end;

   tipo_Arq := 'doc';
   p := pos ('.', Nome_Arq);

   if p <> 0 then
      begin
         tipo_Arq := copy (Nome_Arq, p + 1, 999);
         delete (Nome_Arq, p, 999);
      end;

   (* tenta abrir o arquivo *)
   existir := AbrirArquivo (Nome_Arq,Tipo_Arq);

   (* não conseguiu *)
   if not existir then
      begin
         textcolor (WHITE); textbackground (BLUE);
         mensagem ('wuarnacr',0); {Arquivo nao existe, deseja criá-lo ?}
         textcolor (7); textbackground (BLACK);
         novo := SintReadKey;
         writeln (novo);

         if upcase (novo) = 'S' then      (* deseja criá-lo *)
            begin
                Conseguiu_Abrir := CriaNovo (Nome_Arq,Tipo_Arq);
                (* nao conseguiu abrir *)
                if not Conseguiu_Abrir then
                   mensagem ('wunacr',1) {Nao consegui criar }

                else   (* se consegiu abrir *)
                   (* modulo de edicao *)
                    modulo := 'edicao'
            end
         else   (* nao deseja criar um arquivo novo *)
            Conseguiu_Abrir := false;
      end
   else  (* conseguiu abrir o arquivo desejado *)
      Conseguiu_Abrir := true;

cancelado:
   abertura := Conseguiu_Abrir;
end;

{------------------------------------------------------------------------------------------}
{                                     Principal                                            }
{------------------------------------------------------------------------------------------}

var
   salvar, sair, fechar,opc_modulo :char;
   Modulo_Antigo :string[10];
   consegui_salvar,consegui_Abrir:boolean;

label saida;

begin
   Inicializa;
   passagem := 0;

   repeat

      sair := 'S';
      (* tenta abrir um arquivo *)
      consegui_Abrir := Abertura;

      if consegui_Abrir then
         begin
            (* se o modulo for edicao e porque abriu um novo *)
            if modulo <> 'edicao' then
               begin
                  (* qual sera o modulo de abertura *)

                  repeat
                     textcolor (WHITE); textbackground (BLUE);
                     mensagem ('wumoleed',0); {Modulo de leitura ou edicao?}
                     textcolor (7); textbackground (BLACK);
                     opc_modulo := upcase (sintReadKey);
                     writeln (opc_modulo);
                  until (opc_modulo = 'L') or (opc_modulo = 'E') or (opc_modulo = ESC);

                  if opc_modulo = 'L' then
                     modulo := 'leitura'
                  else if opc_modulo = 'E' then
                     modulo := 'edicao'
                  else
                     goto saida;
               end;
         end
      else  (*  se nao conseguiu abrir *)
         begin

            textcolor (WHITE); textbackground (BLUE);
            mensagem ('wuabno',0); {Deseja tentar abrir novamente?}
            textcolor (7); textbackground (BLACK);
            sair := sintReadKey;
            writeln (sair);
            (* finaliza o programa *)

            if upcase (sair) = 'N' then
               goto saida
            else  sair := 'N';  (* tenta abrir novamente *)
         end;

   until upcase (sair) = 'S';

   sair := 'N';

   sintBip; sintBip;

   repeat

      Modulo_Antigo := modulo;
      (* modulo de edicao *)
      if modulo = 'edicao' then
         modulo := ModuloDeEdicao
      (* modulo de leitura *)
      else if modulo = 'leitura' then
         modulo := ModuloDeLeitura;

      if modulo = 'sair' then  (* ESC - saida *)
         begin
            textcolor (WHITE); textbackground (BLUE);
            mensagem ('wudesa',0);  {Deseja sair?}
            textcolor (7); textbackground (BLACK);
            sair := sintReadKey;
            writeln (sair);

            if upcase (sair) = 'N' then (* cancelou o fechamento *)
               modulo := Modulo_Antigo;
         end;

   until  upcase (sair) <> 'N';

saida:  (* caso a abertura nao tenha sido feita direito *)

   fechamento; (* fecha todos os arquivos existentes *)
   fim (true); (* finaliza *)
end.