home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / sharew / accs / az_d / az_d.c < prev   
Encoding:
C/C++ Source or Header  |  1986-02-05  |  6.4 KB  |  205 lines

  1. /* Programm zur automatischen Zeitstellung
  2. Funktion: erzeugt alle 5 min eine Datei auf D: ( jede Harddisk hat D: , oder? ); 
  3.    beim Booten wird das Datum/die Uhrzeit dieser Datei eingestellt, wenn
  4.      die Systemzeit nicht jünger ist!
  5.    Gelingt das zum Ändern des Filedatums nötige Öffnen 2mal in Folge nicht,
  6.    so wird die Zeitkontrolle abgestellt. Das Programm beginnt wieder zu 
  7.    arbeiten, wenn es im Desktop angeklickt wird!
  8.      Bisher wurden folgende Unverträglichkeiten festgestellt:
  9. 5.1.90: 
  10.     Anfangsschwierigkeiten beruhten auf der Nichtverdopplung des \ in der
  11. Angabe von d:\\Autozeit.zei
  12.     Die Größe von über 10kB rührt von dem sprintf her, um den Fehler-
  13. code eines evtl. fehlgeschlagenen Fopen auszugeben.
  14.     sprintf durch einfache Umwandlungsroutinen ersetzt: intochar.
  15.    */
  16. #include <define.h>
  17. #include <stdio.h>
  18. #include <osbind.h>
  19. /*
  20. #include <osdefs.h>
  21. */
  22. #include <gemdefs.h>
  23. /*                  Erzeugungstext ( noch unten in form_alert eintragen )*/
  24. static BYTE *Orig="Autozeit.c V2R2 06.01.90 MStö ATARI ST/LASER-C";
  25. long _stksize=1000L;
  26. /* MDEBUG: Autozeit als normales Programm ausführbar; autozeit.zei auf B: ! */
  27. /*#define MDEBUG/**/
  28. /* ACCDEBUG: Meldungen während Installierung und Lauf! */
  29. /*#define ACCDEBUG/**/
  30.  
  31. #ifdef MDEBUG
  32.  
  33. #    define WARTEZEIT 5000
  34. #    define ANTDEF
  35. #    define DATEI "B:\\AUTOZEI.ZEI"
  36.  
  37. #else
  38.  
  39. #    define DATEI "D:\\AUTOZEI.ZEI"
  40. /*                            alle 5 min Zeit eintragen */
  41. #    define WARTEZEIT 300000L
  42. #endif
  43.  
  44.  
  45. extern void appl_exit(), _exit();
  46. extern char ant();                        /* Aus libv */
  47. extern _app;                                /* 0: Accessory */
  48.  
  49. static void mach_fz(roh,datzeit)
  50.      int roh[2];    datetime *datzeit;
  51. {    datzeit->realtime=(((LONG)roh[1]<<16)&0xffff0000L) |
  52.        ((LONG)roh[0]&0x0000ffffL);
  53. }
  54.  
  55. static void mach_roh(roh,syszeit)
  56. int roh[2]; datetime *syszeit;
  57. {    roh[1]=syszeit->realtime>>16 &0xffff;
  58.      roh[0]=syszeit->realtime &0xffff;
  59. }
  60. /*  Umwandeln einer ( kleinen ) Zahl in eine Zeichenfolge;
  61. ( Bem.: da Zahl eine int ist, können max. 5 Ziffern auftreten, entsprechend
  62.         ist nur wenig Stack nötig ) 
  63.     Aufruf: intochar(puffer,zahl):
  64.         puffer: In puffer wird die Zeichenkette erzeugt.
  65.         zahl: die umzuwandelnde Zahl, vorzeichenbehaftet.
  66.     
  67.     itc_convert(): Unterpogramm, das Dezimalenweise rekursiv die Umwandlung
  68.         erledigt.
  69. */
  70. static BYTE itc_zeichen[10]={'0','1','2','3','4','5','6','7','8','9'};
  71. static BYTE *itc_convert(string,zahl)    BYTE *string; WORD zahl;
  72. {    if ( zahl>9 ) 
  73.     {     WORD temp=zahl/10;
  74.         string=itc_convert(string,temp);
  75.         zahl -= temp*10;
  76.     }
  77.     *(string++) = itc_zeichen[zahl];
  78.     return string;
  79. }
  80.  
  81. static void *intochar(string,zahl)
  82. BYTE *string; WORD zahl;
  83. {    if ( zahl < 0 ) 
  84.     {    *(string++)='-';
  85.         zahl= - zahl;
  86.     }
  87.     if ( zahl==0)
  88.         *(string++)='0';
  89.     else                        /* Jetzt geht's los */    
  90.         string=itc_convert(string,zahl);
  91.     *string='\0';
  92. }
  93.  
  94. static void passiviere()
  95. {
  96.  
  97. #ifdef ACCDEBUG
  98. puts("Anfang passiviere()!"); ant();
  99. #endif
  100.  
  101. #ifdef MDEBUG
  102.      _exit();
  103. #else
  104.      FOREVER evnt_timer(0,3600);
  105. #endif
  106.  
  107. }
  108.  
  109. #ifndef MDEBUG
  110. void exit()
  111. {}
  112. #endif
  113.  
  114.  
  115. main()
  116. {    int app_id,fd,iercnt=0,ereignis,msgpuff[8],eintrag,
  117.           ereignis_maske=MU_MESAG|MU_TIMER;
  118.      register WORD i,j;
  119.      LONG diskmap,dummy;
  120.      datetime syszeit,filezeit;
  121.      int fz_roh[2];
  122.      diskmap=Drvmap();
  123.      syszeit.realtime=Gettime();   /* Hole Systemzeit */
  124.      app_id=appl_init();
  125.     if ( ! _app) eintrag=menu_register(app_id,"  Autozeit ");
  126.  
  127. /*   if ( diskmap & 4L ) */
  128.      {    if ( (fd=Fopen(DATEI,1))<0 )
  129.           {    if ((fd=Fcreate(DATEI,0))<=0 )
  130.                passiviere();  /* File kann nicht geöffnet werden! */
  131.                }
  132.                /*                  Zeitdatei existiert */
  133.           Fdatime(fz_roh,fd,0);
  134.           mach_fz(fz_roh,&filezeit);
  135. /*             Systemzeit ist, wenn nicht gesetzt: 128 ( + '80 ) !! */
  136. /*            Jahreszahlen in Register überführen */
  137.         i=syszeit.part.year; j=filezeit.part.year;
  138.           if ( ( i< j-1) || ( i > j ))
  139.           {         /* Setze Systemzeit nach filezeit */
  140.                Settime(filezeit.realtime);
  141.                syszeit.realtime=filezeit.realtime;
  142.           }
  143.           mach_roh(fz_roh,&syszeit);
  144. #ifdef ACCDEBUG
  145. puts("vor Dateizeit angleichen"); ant(); 
  146. #endif
  147.           Fclose(fd);
  148. /*
  149. -----------------------------------------------------------------
  150.                Die ewige Schleife                                */
  151. #ifdef MDEBUG
  152. {    int i; for ( i=0; i<5; i++ )
  153. #else
  154.           FOREVER
  155. #endif
  156.           {
  157. #ifdef ACCDEBUG
  158. puts("vor evnt_multi"); ant(); 
  159. #endif
  160. /*                  Message: eintrag angeklickt; Zeit */
  161.                ereignis=evnt_multi(ereignis_maske,
  162.                1,1,1,1,1,1,1,1,1,1,1,1,1,
  163.                msgpuff,(WORD)(WARTEZEIT&0xffff),(WORD)(WARTEZEIT>>16),
  164.                &dummy,&dummy,&dummy,&dummy,&dummy,&dummy);
  165.  
  166.                if ( ereignis&MU_TIMER )
  167.                {
  168.                     if ((fd=Fopen(DATEI,1))>0)
  169.                     {
  170.                          syszeit.realtime=Gettime();
  171.                          mach_roh(fz_roh,&syszeit);
  172.                          Fdatime(fz_roh,fd,1);
  173.                          Fclose(fd);    iercnt=0;
  174.                     }
  175.                     else if ( iercnt<1)
  176.                     {    BYTE zahl[8];
  177.                             intochar(zahl,fd);
  178.                             {    BYTE tt[100];
  179.                                 strcpy(tt,"[3][**** Autozeit ****|Datei DATEI |ist nicht beschreibbar!|Erg. Fopen=");
  180.                                 strcat(tt,zahl);
  181.                                 strcat(tt,"][ Ändern! ]");
  182.                              form_alert(1,tt);
  183.                              iercnt++;
  184.                          }
  185.                     }
  186.                     else      /* 2 Fehler -> autozeit passivieren, bis per
  187.                                    Menü wieder angeklickt!  */
  188.                     {    form_alert(1,
  189.      "[3][**** Autozeit ****|Abgeschaltet!!!|aktiv.: im Desktop anklicken!][OK]");
  190.                          ereignis_maske &= ~MU_TIMER;
  191.                     }
  192.                }
  193.                                                        /* Eintrag angeklickt */
  194.                if ( (ereignis &MU_MESAG)&&(msgpuff[0]==40)&&(msgpuff[4]==eintrag) )
  195.                {    form_alert(1,
  196.      "[1][Autozeit V2R2 ( MStö 6.1.89 )|Setzt Systemzeit entsprechend|Datum von  D:\\Autozeit.zei][OK]");
  197.                     ereignis_maske |= MU_TIMER;
  198.                }
  199.           }
  200. #ifdef MDEBUG
  201. }
  202. #endif
  203.      }
  204. }
  205.