Uma história

Autor: Pedro Luis Kantek Garcia Navarro


Você é operador de um sistema. Mandou fazer algo que você acha que é demorado, como por exemplo a recriação de um índice. Aí, você inicia o processo, e fica olhando para a tela. Passam-se os minutos,... e lá pelas tantas, você pensa: - Será que o programa não entrou em LOOP?. Mas, imediatamente você se corrige: “não, claro que não, que besteira da minha parte, o programa estava super-testado”. Passam-se mais alguns minutos, e a desconfiança volta mais forte: “o programa não pode demorar tanto assim, afinal o arquivo não é tão grande, vou cancelar”. Mas uma voz de bom senso lhe diz: já se passaram 15 minutos de processamento, talvez o programa seja demorado mesmo, vamos esperar 5 minutos.

Depois de 5 minutos angustiantes, você resolve: Não é possível, tem alguma coisa errada, vou cancelar o programa.” Dito e feito. De acordo com a lei de Murphy, provavelmente, você interrompeu a execução bem sucedida do programa, que deveria levar 21 ou 22 minutos para se encerrar normalmente. E aí,... só lhe resta começar tudo de novo.

Não passe este stress todo, nem me deixe que seus usuários o passem. Aqui vai uma função CLIPPER chamada TERMÔMETRO que serve para informar ao usuário a quantas anda, alguma tarefa demorada que foi pedida.

Ela simula na tela um termômetro de 0 a 100, e indica quanto percentualmente já foi executado, desde que adequadamente chamada.

procedure TERMOMETRO

parametes ind

set cursor off

@ 14,09 to 22,69

@ 15,13 say "QUANTO JÁ FOI EXECUTADO"

@ 16,13 say chr (218) + repl (chr (196),50) + chr (191)

@ 17,13 say chr (179) + repl (chr " ",50) + chr (179)

@ 18,13 say chr (179) + repl (chr " ",50) + chr (179)

@ 19,13 say chr (179) + repl (chr " ",50) + chr (179)

aaa = chr (193) + chr (196) + chr (196) + chr (196) + aaa + aaa + aaa + aaa + aaa + aaa + aaa + aaa + aaa + (196) = chr (217)

@ 20,13 say chr (192) + chr (196) + chr (196) + chr (196) + aaa + aaa + aaa + aaa + aaa + aaa + aaa + aaa + aaa + (196) = chr (217)

@ 20,13 say " 0 10 20 30 40 50 60 70 80 90 100 "

num = int (ind/2)

if num > 50

num = 50

endif

@ 17,14 say repl (chr(219),num)

@ 18,14 say repl (chr(219),num)

@ 19,14 say repl (chr(219),num)

set cursor on

return

Esta

função pode ser chamado dentro de qualquer programa. Acompanhe no exemplo, um programa para listar um arquivo na impressora.

1. No início, fazemos:

reccou = reccount ()

recatu = 1

2. Dentro do loop de impressão de todos os registros de um arquivo:

set devi to screen

@ 7,0 clear

recatu = recatu + 1

do termom with (recatu/reccou) * 100

skip

set devi to print