{--------------------------------------------------------}
{             tratamento dos arquivos
{--------------------------------------------------------}

unit agArq;
interface
uses dvcrt, dvwin,
     agDados,
     agMensag,
     agEstDad;

procedure leAgenda;
procedure gravaAgenda;
procedure finaliza;

implementation

{--------------------------------------------------------}
{                        finaliza
{--------------------------------------------------------}

procedure finaliza;
begin
    writeln;
    mensagem ('AGTCHAU');
    while sintFalando do;
    delay (2000);
    sintFim;
    doneWinCrt;
end;

{--------------------------------------------------------}
{                      le agenda
{--------------------------------------------------------}

procedure leAgenda;
var
    reg, nome: string;
    erro: integer;
    dia, mes, ano, hora, min: word;
    texto: string;
    p: PLISTA;

label inicio;

Begin
inicio:
    gotoxy (1, 11);
    clreol;
    mensagem ('AGNOMARQ');
    sintReadln (nome);
    if nome = '' then
        finaliza;

    limpaBaixo;
    assign (arqAgenda, nome);
    {$I-}  reset (arqAgenda); {$I+}
    If Ioresult = 0  Then
        begin
            gotoxy (1, 13);
            textBackground (blue);
            mensagem ('AGCARGA');
            textBackground (black);
            clreol;

            while not eof (arqAgenda)  Do
                begin
                    {$I-} readln (arqAgenda, reg); {$I+}
                    if ioresult <> 0 then
                        begin
                            gotoxy (1, 14); clreol;
                            mensagem ('AGERRLEI');
                            close (arqAgenda);
                            exit;
                        end;

                    val (copy (reg,  1, 4), ano, erro);
                    val (copy (reg,  5, 2), mes, erro);
                    val (copy (reg,  7, 2), dia, erro);
                    val (copy (reg,  9, 2), hora, erro);
                    val (copy (reg, 11, 2), min, erro);

                    texto := copy (reg, 14, length(reg)-13);

                    if not insereEstrDados (dia, mes, ano, hora, min, texto, p) then
                         begin
                             gotoxy (1, 14); clreol;
                             mensagem ('AGERRLEI');
                         end;

                    p^.marcaComprom := reg[13];

                end;

            close (arqAgenda);
        end
    else
        begin
            {$I-}  rewrite (arqAgenda);  {$I+}
            if ioresult = 0 then
                begin
                    gotoxy (1, 14);
                    mensagem ('AGARQNOV');
                    close (arqAgenda);
                end
            else
                begin
                    gotoxy (1, 14);
                    mensagem ('AGNOMINV');
                    delay (1000);
                    goto Inicio;
                end;
        end;

    gotoxy (1, 16);
    mensagem ('AGOK');
    gotoxy (41, 10);
    writeln ('Agenda: ', nome);
end;

{--------------------------------------------------------}
{                      grava agenda
{--------------------------------------------------------}

procedure gravaAgenda;
var
    nome, s: string;
    i, n, nc, result: integer;
    campo: string;
    p: PLISTA;

label
    achou, errodisco;

begin
    repeat
        {$I-} rewrite (arqAgenda); {$I+}
        result := ioresult;
        if result <> 0 then
            begin
erroDisco:
                {$I-} close (arqAgenda);  {$I+}
                result := ioresult;  { limpa eventual erro }

                limpaBaixo;

                mensagem ('AGERRGRV');
                writeln;
                mensagem ('AGNOMARQ'); clreol;

                repeat
                    nome := '';
                    sintReadln (nome);
                until nome <> '';
                assign (arqAgenda, nome);
            end;

    until result = 0;

    p := primeiro;

    while p^.prox <> NIL do
        begin
            with p^ do
                s := codifica (diaComprom,mesComprom,anoComprom,
                               horaComprom,minComprom);
            {$I-} write (arqAgenda, s); {$i+}
            if ioresult <> 0 then goto erroDisco;

            s := p^.marcaComprom + p^.textoComprom;
            {$I-} writeln (arqAgenda, s); {$i+}
            if ioresult <> 0 then goto erroDisco;

            p := p^.prox;
        end;

    {$i-} close (arqAgenda); {$I+}
    if ioresult <> 0 then goto erroDisco;
    mensagem ('AGARQGRV');
end;

end.
