home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / PC_V11_B.LZH / DEMO_PC / PCGEM5.C < prev    next >
C/C++ Source or Header  |  1991-08-29  |  9KB  |  188 lines

  1. /************************************************************************/
  2. /*                                                                      */
  3. /*       Beispielprogramm:                              FORM_ALERT( )   */
  4. /*                                                      FORM_ERROR( )   */
  5. /*                                 FSEL_INPUT( ) oder FSEL_EXINPUT( )   */
  6. /*                                                                      */
  7. /*       Öffnen einer Datei mit Fehlerbehandlung.                       */
  8. /*                                                                      */
  9. /*       Copyright (c) 1989 Borland International                       */
  10. /*       All rights reserved.                                           */
  11. /*                                                                      */
  12. /************************************************************************/
  13.  
  14. /* -------------------------------------------------------------------- */
  15. /*       Include-Files einbinden.                                       */
  16. /* -------------------------------------------------------------------- */
  17.  
  18. #include <aes.h>
  19. #include <tos.h>
  20. #include <string.h>
  21. #include <stdlib.h>
  22. #include <errno.h>
  23.  
  24. /* -------------------------------------------------------------------- */
  25. /*       Konstantendefinitionen.                                        */
  26. /* -------------------------------------------------------------------- */
  27.                                  /* Indizes für Meldungen:              */
  28.                                  /* ----------------------------------- */
  29. #define MOPENED               0  /* Datei konnte geöffnet werden        */
  30. #define MFSEL                 1  /* Programmende                        */
  31. #define MERROR                2  /* Datei konnte nicht geöffnet werden  */
  32.  
  33. #define STFILELEN            13  /* Maximale Länge eines Filenamens     */
  34. #define STPATHLEN            64  /* Maximale Länge eines Pfades         */
  35.  
  36. #define EOS                '\0'  /* Ende eines Strings                  */
  37. #define BACKSLASH          '\\'
  38.  
  39. /* -------------------------------------------------------------------- */
  40. /*       Funktionsprototypen.                                           */
  41. /* -------------------------------------------------------------------- */
  42.  
  43. void close_vwork( void );        /* aus PCFRAME.C                       */
  44.  
  45. void gem_prg( void );
  46. void usage( int m );
  47. void build_fname( char *dest, char *s1, char *s2 );
  48. int  op_fbox( void );
  49.  
  50. /* -------------------------------------------------------------------- */
  51. /*       Globale Variablen.                                             */
  52. /* -------------------------------------------------------------------- */
  53.  
  54. char Path[STPATHLEN] = "A:\\*.*";
  55.  
  56. char *Mess[] =                      /* Texte für Meldungen              */
  57. {
  58.     "[2][Datei konnte geöffnet werden.][Ende|Weiter]",
  59.     "[3][Abbruch der Dateiauswahl.][ Ok ]"
  60. };
  61.  
  62. /* -------------------------------------------------------------------- */
  63. /*       void gem_prg( void );                                          */
  64. /*                                                                      */
  65. /*       Beispiel für die Verwendung der Funktion fsel_input( ).        */
  66. /*       (Bzw. der Dateiauswahl unter GEM generell.)                    */
  67. /*                                                                      */
  68. /*       ->                      Nichts.                                */
  69. /*                                                                      */
  70. /*       <-                      Nichts.                                */
  71. /* -------------------------------------------------------------------- */
  72.  
  73. void gem_prg( void )
  74. {
  75.    Path[0] = (char) Dgetdrv( ) + 'A';  /* Aktuelles Laufwerk in Pfad */
  76.  
  77.    while ( op_fbox( ) != 0 )           /* Solange erfolgreich gewählt   */
  78.       usage( MOPENED );                /* wurde weiter.                 */
  79.    usage( MFSEL );                     /* Jetzt aber Schlu₧.            */
  80. }
  81.  
  82. /* -------------------------------------------------------------------- */
  83. /*       void usage( int m );                                           */
  84. /*                                                                      */
  85. /*       Ausgabe einer vordefinierten Meldung.                          */
  86. /*                                                                      */
  87. /*       -> m                    Nummer der Meldung.                    */
  88. /*                                                                      */
  89. /*       <-                      Nichts.                                */
  90. /* -------------------------------------------------------------------- */
  91.  
  92. void usage( int m )
  93. {
  94.    int endcode = 0;
  95.  
  96.    if ( m < 2 )
  97.    {
  98.       if( form_alert( 1, Mess[m] ) == 2) /* Wenn die Datei vorhanden    */
  99.                                          /* ist, und der Benutzer im    */
  100.                                          /* Programm weitermachen will, */
  101.          return;                         /* dann Programm fortsetzen.   */
  102.    }
  103.    else                                  /* Datei ist nicht vorhanden.  */
  104.    {
  105.       form_error( ENOENT );
  106.       endcode = -1;
  107.    }
  108.  
  109.    close_vwork( );                       /* Sonst Programmabbruch.      */
  110.    exit( endcode );
  111. }
  112.  
  113. /* -------------------------------------------------------------------- */
  114. /*       int op_fbox( void )                       open file via box    */
  115. /*                                                                      */
  116. /*       Datei mittels Dateiauswahlbox öffnen.                          */
  117. /*                                                                      */
  118. /*       ->                      Nichts.                                */
  119. /*                                                                      */
  120. /*       <-                      0  Falls das Programm beendet werden   */
  121. /*                                  soll.                               */
  122. /* -------------------------------------------------------------------- */
  123.  
  124. int op_fbox( void )
  125. {
  126.    char n[STFILELEN],                  /* Buffer für Dateinamen         */
  127.         x[STPATHLEN + STFILELEN];      /* Buffer für Pfadnamen + Datei- */
  128.                                        /* namen.                        */
  129.    int  b;                             /* Enthält Code des Buttons der  */
  130.                                        /* zum Abbruch der Dateiauswahl  */
  131.                                        /* führte.                       */
  132.    int  version;                       /* wird GEMDOS-Versionsnummer    */
  133.                                        /* erhalten.                     */
  134.    int  result;
  135.  
  136.    *n = EOS;                           /* Dateinamen löschen.           */
  137.  
  138.    version = Sversion ( );             /* Berechne die GEMDOS-Version,  */
  139.    version >>= 8;                      /* da fsel_exinput erst ab  */
  140.                                        /* Version 1.40 zur Verfügung    */
  141.                                        /* steht.                        */
  142.  
  143.    if ( version <= 20 )
  144.                                        /* Dateiauswahl.                 */
  145.       result = fsel_input( Path, n, &b );
  146.    else
  147.       result = fsel_exinput( Path, n, &b, "Testauswahl" );
  148.  
  149.    if ( result == 0 )
  150.       usage( result );                 /* Fehler dabei aufgetreten.     */
  151.    else if ( b != 0)
  152.    {
  153.       build_fname( x, Path, n );       /* Pfad- und Dateinamen konkat.  */
  154.                                        /* Datei 'testen'.               */
  155.       if ( Fattrib( x, 0, 0 ) < 0 )
  156.          usage( MERROR );              /* Fehler dabei aufgetreten.     */
  157.    }
  158.  
  159.    return ( b );
  160. }
  161.  
  162. /* -------------------------------------------------------------------- */
  163. /*                                                  build a file name   */
  164. /*       void build_fname( char *dest, char *s1, char *s2 );            */
  165. /*                                                                      */
  166. /*       Konkatoniere Pfadnamen und Dateinamen.                         */
  167. /*                                                                      */
  168. /*       -> dest                 Zielstring.                            */
  169. /*          s1                   Pfadname.                              */
  170. /*          s2                   Dateiname.                             */
  171. /*                                                                      */
  172. /*       <-                      Ergebnis befindet sich in 'dest'.      */
  173. /* -------------------------------------------------------------------- */
  174.  
  175. void build_fname( char *dest, char *s1, char *s2 )
  176. {
  177.    char *cptr;
  178.  
  179.    strcpy( dest, s1 );                 /* Pfad kopieren.                */
  180.    cptr = strrchr( dest, (int) BACKSLASH);
  181.    strcpy( ++cptr, s2);                /* Schlie₧lich den Dateinamen    */
  182. }                                      /* dranhängen.                   */
  183.  
  184. /* -------------------------------------------------------------------- */
  185. /*       Ende der Beispielprogramms für FORM_ALERT( ), FORM_ERROR( ),   */
  186. /*       und FSEL_INPUT() (oder FSEL_EXINPUT( )).                       */
  187. /* -------------------------------------------------------------------- */
  188.