Afficher l'heure et la date constamment sous dos en c
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Afficher l'heure et la date constamment sous dos en c



  1. #1
    invite46ba2680

    Afficher l'heure et la date constamment sous dos en c


    ------

    Salut à tous,

    J'aimerais savoir s'il est possible d'afficher l'heure et la date en permanence sous dos en programmant en C.
    Pour l'instant j'ai mis system("time/t") et system("date/t") à chaque fois que les lignes de commandes sur supprimer grâce a system("cls"), mais ce sont des fonctions qui ne sont pas forcement portable, et elles rajoutent des lignes de codes.

    merci

    -----

  2. #2
    invite46ba2680

    Re : Afficher l'heure et la date constamment sous dos en c

    Quelqu'un peut m'aider?

    merci

  3. #3
    Jack
    Modérateur

    Re : Afficher l'heure et la date constamment sous dos en c

    Un exemple de gestion de l'heure en C
    Code:
    int main(void)
    {
       time_t timer;
       struct tm *tblock;
    
       /* donne l'heure courante */
       timer = time(NULL);
    
       /* convertit la date/heure en une structure */
       tblock = localtime(&timer);
    
       printf("L'heure courante est: %s", asctime(tblock));
    
       return 0;
    }

  4. #4
    invite46ba2680

    Re : Afficher l'heure et la date constamment sous dos en c

    Merci, mais est-ce que l'heure sera constamment affiché sur la console dos?

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Afficher l'heure et la date constamment sous dos en c

    Mais ou veux-tu qu'elle s'affiche exactement?

    A+

  7. #6
    invite46ba2680

    Re : Afficher l'heure et la date constamment sous dos en c

    En haut à gauche de la console

  8. #7
    Jack
    Modérateur

    Re : Afficher l'heure et la date constamment sous dos en c

    La console fonctionne en mode ligne, si tu veux afficher un message en permanence sur la première ligne, je ne vois pas d'autre solution que d'envoyer une commande d'effacement écran avant d'écrire.

    Mais comme tu dois rafraichir l'affichage toutes les secondes, tu ne verras pas grand chose d'autre que ton heure puisque tout le reste va être effacé à chaque fois.

    A+

  9. #8
    paulfjujo

    Re : Afficher l'heure et la date constamment sous dos en c

    bonjour,

    Ecrire soit un petit programme resident qui
    ecrit directement l'heure dans la ram video de la carte video
    soit rajouter dans ton appli en C DOS , un traitement par interruption
    qui fera la meme chose.
    recuperation de la date et heure dans la RTC de la carte mere
    et affichage en directe ram video.
    Meme un CLS ne l'effacera pas..ou du moins seulement pendant une trame video.

  10. #9
    paulfjujo

    Re : Afficher l'heure et la date constamment sous dos en c

    .....
    J'ai retrouvé une appli en SPHINX C--
    c'est du C avec plein d'ASM !
    On peu faire des applis qui tiennent 3 fois rien en memoire..
    le Sphinx C-- est relativement facile à utiliser.
    Le fichier *.com fonctionne dans une fenetre DOS ouverte sous XP
    affiche en haut à droite.
    modifiable à souhait...

    Code:
    //  NAME: HEUR_TSR.C--
    //  Heure est un progr resident en memoire
    //  original CLOCK Written by Gerardo MAIORANO with the SPHINX C-- 0.190A in SALERNO (Italy)
    //  E-mail :    germai@ischia.dia.unisa.it || giufer@udsab.dia.unisa.it
    //  paulfjujo@free.fr
    //  path : D:\sphinx\MySphinx\Heur_tsr.c
    //  path : D:\sphinx\INC\*.h
    
    
    ?resize TRUE
    ?assumeDSSS TRUE
    ?parsecommandline TRUE
    ?include "./inc/WRITE.H--"
    ?include "./inc/DOS.H--"
    ?include "./inc/TSR.H--"
    ?include "./inc/GWRITE.H--"
    ?include "./inc/STRING.H--"
    ?include "./inc/SYSTEM.H--"
    ?define HI        0x5453    /* High TSR signature */
    ?define LO        0x5230    /* Low TSR signature  */
    ?define TSRINT    0x15      /* Interrupt used to communicate between TSR */
    ?define TIMERINT  0x1C      /* User Timer Tick    */
    
    word oldtimerhandle[2]={};  /* Old Interrupt address handler for INT 1C */
    word oldtsrhandle[2]={};    /* Old Interrupt address handler for INT 15 */
    byte display="[00:00:00]";
    word cursor=0,pos=0;
    
    //
    //  This function was called 18.2 time/sec and read the system time and
    //  display it on the upper right corner.
    //
    interrupt timerhandle()
    {
    $ PUSHF                     //
    $ CS:                       //   Simulates the call to the old handler
    $ CALL FAR oldtimerhandle;  //
    $ PUSH DS                   //
    $ PUSH SI                   //  Preserve all the necessary
    $ PUSH AX                   //  Registers
    $ PUSH BX                   //
    $ PUSH CX                   //
    $ PUSH DX                   //
    DS = CS;
    AH=2;                       // get current status of led
    $ INT 0x16
    if(AL&16!=16){              // if scroll lock is not active show the clock
      AH=2;                     // get current time from bios
      $INT 0x1A
      BL=CL;                    //
      SI=#display;              //
      CL=4;                     //  Transform the time which is
      AL=CH;                    //  in BCD format into the ASCII format
      $SAR AL,CL                //
      IF(ZEROFLAG){             //
        AL+=32;
      }
      ELSE{
        AL+=48;
      }
      DSBYTE[SI+1]=AL;
      AH=CH;
      AH&=0x0F;
      AH+=48;
      DSBYTE[SI+2]=AH;
      AL=BL;
      $SAR AL,CL
      AL+=48;
      DSBYTE[SI+4]=AL;
      AH=BL;
      AH&=0x0F;
      AH+=48;
      DSBYTE[SI+5]=AH;
      AL=DH;
      $SAR AL,CL
      AL+=48;
      DSBYTE[SI+7]=AL;
      AH=DH;
      AH&=0x0F;
      AH+=48;
      DSBYTE[SI+8]=AH;
    
      AH=3;                 // get cursor position and size
      BH=0;
      $INT 0x10;
      cursor=CX;
      pos=DX;
      CX=0x2000;
      AH=1;
      $INT 0x10             // and then hide it
      AH=0x0F;
      $INT 0x10             // tell me how many columns are on the screen
      DH=0;
      DL=AH-10;
      AH=2;
      $INT 0x10                 // display the cursor in the upper right corner
      @GWRITESTR(#display,15);  // display the time
      DX=pos;
      AH=2;
      $INT 0x10                 // reset the old saved cursor position
      CX=cursor;
      AH=1;
      $INT 0x10                 // reset the old saved cursor size
    }
    $ POP DX                    //
    $ POP CX                    //
    $ POP BX                    // Restore the original Register's state
    $ POP AX                    //
    $ POP SI                    //
    $ POP DS                    //
    }
    
    //
    // Test su le progr resident est install‚,
    // Remet l'ancien vecteur d'interruption si on retir le programme resident
    //
    interrupt comtsrhandle()
    {
    IF(AX==0x5200){
      IF(CX==HI){
        IF(DX==LO){
          BX=CS;
          CX><DX;
        }
        ELSE{
          $JMP NEXT
        }
      }
      ELSE{
        $JMP NEXT
      }
    }
    ELSE IF(AX==0X5201){
      IF(CX==HI){
        IF(DX==LO){
          $PUSH DS
          DX=CSWORD[#oldtimerhandle];
          DS=CSWORD[#oldtimerhandle+2];
          @SETINTVECT( ,TIMERINT,DS,DX);
          DX=CSWORD[#oldtsrhandle];
          DS=CSWORD[#oldtsrhandle+2];
          @SETINTVECT( ,TSRINT,DS,DX);
          BX=CS;
          $POP DS
        }
        ELSE{
          $JMP NEXT
        }
      }
      ELSE{
        $JMP NEXT
      }
    }
    ELSE {
      NEXT:
      $ CS:
      $ JMP FAR oldtsrhandle;
    }
    }
    
    //
    //
    //
    main ()
    {
    WRITESTR("HEU_TSR  Horloge residente en memoire  V.O. by Gerardo Maiorano.\n");
    if(@PARAMCOUNT()==0){   // Test si un parametre est pass‚ dans la commnde
      AX=0x5200;            // si aucun parametre, verifie si le progr est deja installe
      CX=HI;                // une fois.
      DX=LO;
      $INT 0X15
      IF(CX==LO){
        IF(DX==HI){
          WRITESTR("Programme Resident HEUR_STR deja install‚\007.\n");
          WAIT(10);
         EXIT(0);
        }
      }
      GETINTVECT(#oldtsrhandle,TSRINT);        // Detournement du vecteur horloge
      SETINTVECT( ,TSRINT,CS,#comtsrhandle);   // pour ponter sur le programme resident
      GETINTVECT(#oldtimerhandle,TIMERINT);    //
      SETINTVECT( ,TIMERINT,CS,#timerhandle);
      WRITESTR("Prog CLOCK Resident installe.\n");
      WAIT(10);
      ES=CSWORD[0x2C];
      AH=0x49;
      $INT 0x21                 // Free the environment block
      @ KEEP( , , ,#main+1);
    }
    else{                       // Si un parametre est passe dans la ligne de commande
      @STR_UP(PARAMSTR(0));     // le decoder et verifier si c'est REMOVE  pour l'ENLEVER
      AL=@STRCMP(PARAMSTR(0),"REMOVE");
      if(AL==0){
        AX=0x5200;
        CX=HI;
        DX=LO;
        $INT 0X15               // Verifie si HEUR_TSRest vraiment installe
        IF(CX==LO){             // Si oui, veriie s'il y a d'autre TSR
         IF(DX==HI){
    	AX=BX;
    	$DEC AX
    	ES=AX;
    	DX=CS;
        P1:                      // Scan pour l'entree suivante du MemoryContolBlock
    	AX+=ESWORD[3];       // sa propre entree et
    	$INC AX              // ensuite les suivantes
    	ES=AX;
    	$CMP DX,ESWORD[1]
    	$JZ A1
    	IF(ESWORD[1]!=0){   // Si il y a d'autre TSR installe pares HEUR_TSR
             WRITESTR("CImpossible d'enlever HEUR_TSR !\007\n");
    	  EXIT(1);// Exit whit error
    
    	}
    	$JMP P1             // sinon on l'enleve
        A1:
    	$PUSH AX            //
    	$INC AX             //
    	$CMP AX,DX          // Si le pointeur CS de la copy residente est egale
    	$POP AX             // au dernier MCB teste alors on est sure
    	$JNZ P1             // qu'il n'ya pas d'autres TSR suivant
    	AX=0x5201;          //
    	CX=HI;              //
    	DX=LO;              //
    	$INT 0x15           //
    	ES=BX;
    	AH=0x49;
    	$INT 0x21           // libere le block
    	WRITESTR("Prg Resident HEUR_TSR enleve !!!\n");
    	EXIT(0);
          }
        }
        WRITESTR("HEUR_TSR non installe.\007\n");
        EXIT(0);
      }
      else{
        WRITESTR("Usage:\nHEUR_STR : Installe le Prg HEUR_TSR resident \n");
        WRITESTR("HEUR_TSR ?       : Montre l'aide\n");
        WRITESTR("HEUR_TSR REMOVE  : Essai d'enlever le Prg resident.\n");
        EXIT(0);
      }
    }
    }
    
    /* end of HEUR_TSR.C-- */
    
    /*
    LOADING C-- Compiler . . .
    
    SPHINX C-- Compiler   Version 0.203
    Created by Peter Cellik. Copyright Peter Cellik (C) 1995. All rights reserved.
    SPHINX Programming 1995
    
    Compiling Commenced . . .
    COMPILING FINISHED.   Errors: 0   Lines: 245
    DOS required: 1.0 or greater.
    Code: 838 bytes, Data: 417 bytes, Post: 131 bytes, Stack: 2048 bytes
    Run File Saved (1269 bytes).
    
    Press Any Key To Enter C-- WORK BENCH.
    */
    Fichiers attachés Fichiers attachés

  11. #10
    invite46ba2680

    Re : Afficher l'heure et la date constamment sous dos en c

    Merci poour ton code, mais je ne suis pas assez expérimenté pour l'utiliser.

Discussions similaires

  1. Probleme sur le programme pour afficher l'heure et la date
    Par invite489d7312 dans le forum Électronique
    Réponses: 20
    Dernier message: 31/03/2010, 14h01
  2. PIC, afficher l'heure sur un LCD ?
    Par invite116c4f9b dans le forum Électronique
    Réponses: 2
    Dernier message: 23/10/2007, 18h34
  3. Lire la date doit être aussi simple que lire l'heure ?
    Par invite249f153b dans le forum Discussions scientifiques
    Réponses: 3
    Dernier message: 24/06/2007, 14h52
  4. 2e disque dur détecté mais vide sous XP, et pas sous DOS
    Par invite02709600 dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 16/07/2004, 20h59