Ir al contenido



Foto

Sincronizar hora en msdos


  • Por favor identifícate para responder
5 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.222 mensajes
  • LocationEspaña

Escrito 16 diciembre 2009 - 05:32

Aprovechando que algunos ya tenéis "algunos añitos"  :D necesito un consejo sobre msdos (el de verdad, no la consola de windows)

Quiero sincronizar la hora de una serie de equipos con msdos con la de un servidor. Los equipos pueden acceder a internet usando el programa curl, que maneja el protocolo http y ftp. Tengo una pagina web que devuelve la fecha y la hora, en texto plano y con el formato adecuado, asi que pense en descargar la hora a un archivo de texto y ejecutar algo como esto:


delphi
  1. date < fecha.txt


Funciona bien, pero el problema es que si por cualquier motivo no se descargo bien el archivo fecha.txt el comando date entra en un bucle y no sale de ahi. Y ahi va mi primera pregunta ¿sabeis de algun comando o programa que permita cambiar la fecha, y que si la fecha no es correcta de error y termine, sin quedarse esperando?

Y si no conocéis ninguno programa que lo haga, ¿alguien sabe como cambiar la fecha y la hora en msdos desde un programa en turbopascal/freepascal?

Gracias
  • 0

#2 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.696 mensajes
  • LocationMadrid - España

Escrito 16 diciembre 2009 - 07:28

desde el punto de vista de desde un programa en turbopascal/freepascal no te puedo responder, pero si puedo decirte que el estandar de C tiene la función settime que es portable en DOS, Win16 y OS/2. Utiliza una estructura del tipo time definida en dos.h:



cpp
  1. struct time
  2. {
  3.     unsigned char  ti_min;    /* Minutes */
  4.     unsigned char  ti_hour;    /* Hours */
  5.     unsigned char  ti_hund;    /* Hundredths of seconds */
  6.     unsigned char  ti_sec;    /* Seconds */
  7. };



Las funciones de obtener la hora y asignarla son:


cpp
  1. void gettime(struct time *timep);
  2. void settime(struct time *timep);



Estas funciones utilizan la interrupción 21 del DOS:
Funciones:
2C: Get Time
2D: Set Time

Espero haberte puesto en la pista. ;)

Saludos.

  • 0

#3 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.696 mensajes
  • LocationMadrid - España

Escrito 16 diciembre 2009 - 09:26


Podríamos escribir algo como esto:


delphi
  1. procedure SetTime(Hour, Min, Sec, hsec:BYTE);
  2. asm
  3.   mov CH, Hour
  4.   mov CL, Min
  5.   mov DH, Sec
  6.   mov DL, hsec
  7.   mov AH, 2Dh
  8.   INT 21h
  9. end;



Si bien así no lo podremos probar en WinXP.

Saludos.

  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.677 mensajes
  • LocationMéxico

Escrito 16 diciembre 2009 - 10:17

En turbo pascal recuerdo que usaba esto:



delphi
  1.     GetDate(y,m,d,dow);
  2.     GetTime(h,min,seg,hund);
  3.  
  4.     SetDate(y,m,d);
  5.     SetTime(h,min,seg);



Y si mal no recuerdo se usaba la unidad DOS.

Salud OS

  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.677 mensajes
  • LocationMéxico

Escrito 16 diciembre 2009 - 10:22

Y bueno ya en esto, me encontré este código en mi archivo muerto :D :D :D



delphi
  1. Const
  2.   Meses : Array [1..12] Of String
  3.             = ('Enero','Febrero','Marzo','Abril','Mayo','Junio',
  4.               'Julio','Agosto','Septiembre','Octubre','Noviembre',
  5.               'Diciembre');
  6.   Dias  : Array [0..6] Of String
  7.             = ('Domingo','Lunes','Martes','Miércoles',
  8.               'Jueves','Viernes','Sábado');
  9.  
  10.  
  11.   Procedure MuestraTiempo;
  12.   var
  13.     y,m, d,dow  : Word;
  14.     h,min,s,hund : Word;
  15.     LineaFecha  : String;
  16.   Begin
  17.     Window(1,1,80,25);
  18.     TextColor(14);
  19.     TextBackground(1);
  20.     GetDate(y,m,d,dow);
  21.     GetTime(h,min,s,hund);
  22.     LineaFecha := Dias[dow]+', '+Form('@@',d)+' de '+
  23.                   Meses[m]+' de '+Form('####',y);
  24.     For I := Length(LineaFecha)+1 to 36 do
  25.         Insert(' ',LineaFecha,I);
  26.     GotoXY(3,2);
  27.     Write(LineaFecha);
  28.     GotoXY(65,2);
  29.     Write(LeadingZero(h),':',LeadingZero(min),':',
  30.           LeadingZero(s),'.',LeadingZero(hund));
  31.   End;
  32.  



Salud OS
  • 0

#6 seoane

seoane

    Advanced Member

  • Administrador
  • 1.222 mensajes
  • LocationEspaña

Escrito 16 diciembre 2009 - 01:54

Perdón por tardar en responder, pero estaba intentando otra solucion. Encontre un programa "ntime.exe" para msdos que puede sincronizar la hora con un servidor NTP. Funcionaba de maravilla, en una maquina virtual  :( ... cuando lo intente usar en una de las maquinas reales no habia forma de que se conectara al servidor.

Pero volviendo al hilo, como bien apuntasteis tanto escafandra como egostar existe la funcion Settime, al menos en freepascal, pero aun no pude probarlo porque no consigo encontrar la maquina virtual donde tengo instalado freepascal para DOS (soy un desastre  :p). Pero en cuanto la encuentre y tenga un momento lo pruebo y os cuento los resultados.
  • 0