{-------------------------------------------------------------}
{
{    Webvox - Manipulação dos bookmarks
{
{    Autor: Jose' Antonio Borges
{
{    Em 14/05/98
{
{-------------------------------------------------------------}

unit webBmark;

interface
uses dvcrt, strings, dvWin, winsock,
     webVars, webMsg, webTraz;

procedure carregaBookMarks;
procedure adicionaBookMark;
procedure folheiaBookMarks;
procedure paginasSeletas;

implementation

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

procedure gravaBookMarks;
var
    nomeArqBmark: string;
    arqBookMark: text;
    i: integer;

label erroDisco;
begin
    nomeArqBmark := sintAmbiente ('WEBVOX', 'ARQWEBSELEC');
    if nomeArqBmark = '' then
        nomeArqBmark := 'c:\winvox\webselec.ini';

    assign (arqBookMark, nomeArqBMark);
    {$I-} rewrite (arqBookMark);  {$I-}
    if ioresult <> 0 then
        begin
erroDisco:
            mensagem ('WBERRGRD', 1);   {'Problemas para gravar arquivo no disco'}
            {$I-} close (arqBookMark);  {$I+}
            if ioresult <> 0 then;
            exit;
        end;

    for i := 1 to nBookMarks do
        begin
             writeln (arqBookMark, bookMark[i]^, '=', comentBMark[i]^);
             if ioresult <> 0 then goto erroDisco;
        end;
    close (arqBookMark);
end;

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

procedure carregaBookMarks;
var nomeArqBmark, s: string;
    arqBookMark: text;
    n: integer;
begin
    nomeArqBmark := sintAmbiente ('WEBVOX', 'ARQWEBSELEC');
    if nomeArqBmark = '' then
        nomeArqBmark := 'c:\winvox\webselec.ini';

    nBookMarks := 0;
    assign (arqBookMark, nomeArqBMark);
    {$I-}  reset (arqBookMark);  {$I+}
    if ioresult <> 0 then exit;

    while not eof (arqBookMark) do
        begin
             readln (arqBookMark, s);
             if (s <> '') and (s[1] <> ';') then
                 begin
                     n := length (s);
                     while (n > 0) and (s[n] <> '=') do n := n - 1;
                     if n <> 0 then
                         begin
                             nBookMarks := nBookMarks + 1;
                             new (bookMark[nBookMarks]);
                             new (comentBMark[nBookMarks]);

                             bookMark [nBookMarks]^ := copy (s, 1, n-1);
                             comentBMark [nBookMarks]^ := copy (s, n+1, length (s) - n);
                         end;
                 end;
        end;

    close (arqBookMark);
end;

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

procedure adicionaBookMark;
var coment: string;
    s: string;
begin
    if nomePagAtual = '' then
        begin
            mensagem ('WBNAOCAR', 1); {'Não existe página carregada'}
            mensagem ('WBDIGPAG', 1); {'Qual o nome da página desejada ?'}
            sintReadln (s);
            if s = '' then
                 begin
                     mensagem ('WBDESIST', 1);  {'Desistiu...'}
                     exit;
                 end;
        end
    else
        s := nomePagAtual;

    mensagem ('WBCOMBMK', 1);   {'Digite um comentário para esta seleção'}
    sintReadln (coment);
    if coment = '' then
        begin
              mensagem ('WBDESIST', 1);
              exit;
        end;

    if nbookMarks < MAXBOOKMARK then
        begin
            nBookMarks := nBookMarks + 1;
            new (bookMark[nBookMarks]);
            new (comentBMark[nBookMarks]);
            bookMark [nBookMarks]^ := s;
            comentBMark [nBookMarks]^ := coment;
        end;

    gravaBookMarks;
end;

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

procedure buscaTextoBmark (pergunta: boolean; var n: integer);
var b, i: integer;
begin
    b := n;
    if pergunta then
        begin
            writeln;
            mensagem ('WBQUALTX', 1);   {'Qual o texto a buscar ? '}
            sintReadln (textoBuscado);
            if textoBuscado = '' then exit;
        end
    else
        b := n + 1;

    if b <= 0 then b := 1;

    textoBuscado := maiuscAnsi (textoBuscado);
    for i := b to nBookMarks do
        begin
            if pos (textoBuscado, maiuscAnsi (comentBMark [i]^)) <> 0 then
                begin
                    sintWriteln (comentBMark [i]^);
                    n := i;
                    exit;
                end;
        end;

    mensagem ('WBNAOACH', 1);    {'Texto não encontrado após esta posição do texto'}
end;

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

procedure folheiaBookMarks;
var acabou: boolean;
    i, nsel: integer;
    c: char;
    rotulo: string;
label trazer, semBmark;
begin
    if nBookMarks = 0 then
         begin
semBmark:
             mensagem ('WBSEMBMK', 1);   {'Não existem mais páginas seletas'}
             exit;
         end;

    nsel := 0;
    mensagem ('WBUSESET', 1);   {'Use setas, depois comande trazer, informação ou remover'}
    repeat
        c := readkey;
        case upcase(c) of
            #$0:  begin
                      c := readkey;
                      case c of
                         CIMA:    begin
                                       nsel := nsel - 1;
                                       if nsel < 1 then
                                           begin
                                                nsel := 0;
                                                sintBip;
                                           end
                                       else
                                           sintWriteln (comentBMark [nsel]^);
                                  end;
                         BAIX:    begin
                                       nsel := nsel + 1;
                                       if nsel > nBookMarks then
                                           begin
                                                nsel := nBookMarks+1;
                                                sintBip;
                                           end
                                       else
                                           sintWriteln (comentBMark [nsel]^);
                                  end;
                         PGUP:    begin
                                      nsel := 1;
                                      sintWriteln (comentBMark [nsel]^);
                                  end;
                         PGDN:    begin
                                      nsel := nBookMarks;
                                      sintWriteln (comentBMark [nsel]^);
                                  end;

                         F5:      buscaTextoBMark (true, nsel);
                         CTLF5:   buscaTextoBMark (false, nsel);
                      end;
                  end;

            ENTER, 'T':  begin
                              if (nsel >= 1) and (nsel <= nBookMarks) then
                                  begin
                                      trazerPagina (bookMark [nsel]^, 'G');
                                      exit;
                                  end;
                          end;

            'I':          sintWriteln ('   ' + bookMark [nsel]^);

            'R', 'A':     begin
                              dispose (bookMark [nsel]);
                              for i := nsel to nBookMarks -1 do
                                  begin
                                      bookMark [i] := bookMark [i+1];
                                      comentBMark [i] := comentBMark [i+1];
                                  end;
                              nBookMarks := nBookMarks - 1;
                              gravaBookmarks;
                              if nBookMarks = 0 then
                                  goto semBMark
                              else
                                  mensagem ('WBBMKREM', 1);  {'Removido'}
                          end;
        end;

    until c = ESC;
end;

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

procedure paginasSeletas;
var c, c2: char;
begin
    mensagem ('WBFOLADI', 0);    {'Folhear ou adicionar ? '}
    sintLeTecla (c, c2);
    c := upcase (c);
    writeln;

    case upcase (c) of
        'A': adicionaBookMark;
        'F': folheiaBookMarks;
    end;
end;

end.