La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1648 - RELOJ RESIDENTE
Autor:  Ramzez Ramzez
quisiera saber como hago para que un reloj este siempre informandome la hora, mientras estoy en otras funciones de mi programa... osea estoy ingresando datos, pero en la esquina se ve la hora al corriente

  Respuesta:  Carlos Christian Molina Vega
Aqui tienes el codigo para eso:

uses dos,crt;
{$F+} {Los procedimientos residentes deben estar compilados con llamadas FAR}
var int_anterior:pointer; {Este es un puntero a la rutina anterior de la interrupcion}
conteo1:byte;
horas,minutos,segundos,cent:word;
{---------------------------------------------------------------}
{---------------------------------------------------------------}
procedure reloj;interrupt; {Esta es la rutina del reloj}
{-------------------------}
functions zeros(z:word):string; {Esta funcion es para agregar zeros a la izquierda}
var devu:string[2]; {zeros(1) = ´01´}
begin
devu:=´´;
str(z:2,devu);
if devu[1] = ´ ´ then devu[1]:=´0´;
zeros:=devu;
end;
{-------------------------}
begin {NO SE PUEDE LLAMAR desde ninguna otra parte del programa}

{Aqui se puede agregar mas codigo, pero hay ciertas restricciones

- NO se puede trabajar con archivos
- NO se puede usar gettime, getdate, o algo que llame alguna interrupcion del DOS!!
- NO es recomendable usar delays, porque se va a hacer muy lento!!!!
- NO se puede usar READLN o READ
- No se debe escribir mucho codigo y evitar usar mucho la pila (recursividad)

- PARA evitar todas estas molestias, se debe escribir más código, pero ahora no puedo.
}


gotoxy(70,1);
write(zeros(horas)+´:´+zeros(minutos)+´:´+zeros(segundos));

{Esta funcion es un gestor de interrupciones. Debido a la construccion interna de DOS