home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_09 / KOBOLD3E.LZH / KOBOLD_3 / TOOLS / GERUEST.C
Text File  |  1979-12-03  |  10KB  |  268 lines

  1. /********* Achtung! Höchstens für Programmierer interessant!... ****************/
  2.  
  3. /* ----------- Schnittstellen-Nachrichten -------------------------------------*/
  4.  
  5. #define KOBOLD_JOB 0x2F10          /* Speicherjob starten                      */
  6. #define KOBOLD_JOB_NO_WINDOW 0x2F11/* Dito, ohne Hauptdialog                   */
  7.  
  8. #define KOBOLD_ANSWER 0x2F12       /* Antwort vom KOBOLD mit Status in Wort 3  */
  9.                                    /* und Zeile in Wort 4                      */
  10.  
  11. #define KOBOLD_CONFIG 0x2F13       /* Konfiguration erfragen. Dazu mu₧ in Wort */
  12.                                    /* 3 & 4 ein Zeiger auf eine KOBOLD_CONFIGU-*/
  13.                                    /* RATION Struktur übergeben werden.        */
  14.  
  15. #define KOBOLD_FIRST_SLCT 0x2F14   /* Erfragt die aktuelle Selektion im Quell- */
  16. #define KOBOLD_NEXT_SLCT 0x2F15    /* fenster. Mit ..FIRST.. erhält man das    */
  17.                                    /* erste Objekt, mit ..NEXT.. alle weiteren.*/
  18.                                    /* In Wort 3 & 4 mu₧ ein Zeiger auf einen   */
  19.                                    /* 128 Bytes langen Speicherbereich über-   */
  20.                                    /* geben werden (unter MultiTos als 'global'*/
  21.                                    /* alloziert!), in den der komplette Pfad   */
  22.                                    /* geschrieben wird. In der KOBOLD_ANSWER   */
  23.                                    /* steht in Wort 3:                         */
  24.                                    /*      -1: Keine weiteren Objekte          */
  25.                                    /*       0: Objekt ist eine Datei           */
  26.                                    /*       1: Objekt ist ein Ordner           */
  27.  
  28. #define KOBOLD_CLOSE 0x2F16        /* Dient zum expliziten Schlie₧en des       */
  29.                                    /* KOBOLD, falls Antwortstatus != FINISHED  */
  30.  
  31. #define KOBOLD_FREE_DRIVES 0x2F17   /* Gibt evt. belegte Laufwerke frei und     */
  32.                                     /* löscht eingelesene Verzeichnisse         */
  33.  
  34. /*-----------------------------------------------------------------------------*/
  35. /* Ein Zeiger auf die folgende Struktur mu₧ dem Kobold in Wort 3+4 des
  36. Message-Puffers für den Code KOBOLD_CONFIG übergeben werden. Die entsprechende
  37. Speicherstruktur mu₧ unter MultiTos für andere Prozesse als beschreibbar
  38. ('global') alloziert werden (Mxalloc(size,0x1mode)). Kobold füllt dann die
  39. Daten auf und teilt mit einer KOBOLD_ANSWER Message die Beendigung mit.      */
  40.  
  41. typedef struct
  42. {
  43.     unsigned int 
  44.         version,                    /* Version, z.B. 0x205 für version 2.05     */
  45.         reserved[8]                 /* Reserviert                               */
  46.                         
  47.         buffer,         /* Freier Dateipuffer zum Zeitpunkt der Abfrage         */
  48.         
  49.         kobold_active,  /* 1 = KOBOLD aktiv, 0 = KOBOLD inaktiv                 */
  50.         kobold_dialog,  /* 0 = keine Hauptdialoganzeige, 1 = Hauptformular offen*/
  51.                 
  52.         no_of_files,    /* Anzahl der im Quellaufwerk selektierten Dateien      */
  53.         no_of_folders,  /* Anzahl der im Quellaufwerk selektierten Ordner       */
  54.         total_kb;       /* Auswahlumfang in Kilobytes                           */
  55.  
  56.     int source_drive,   /* Quellaufwerk, -1 = Keins                             */
  57.         dest_drive;     /* Ziellaufwerk, -1 = Keins                             */
  58.  
  59.     unsigned long 
  60.         gemdos_mode;    /* Bitvektor: Bit 0: Laufwerk A usw.                    */
  61.                         /* Bit gesetzt = GEMDOS-Modus                           */
  62. } KOBOLD_CONFIGURATION;
  63.  
  64.  
  65. #define MiNT 0x4d694e54L /* MiNT-Cookie */
  66.  
  67.  
  68. /* -----------------  Fehlercodes in der Antwort  ---------------------------- */
  69.  
  70. #define FINISHED            -1   /* KOBOLD wurde beendet */
  71. #define OK                  0    /* Job abgeschlossen, aber
  72.                                     KOBOLD noch aktiv */
  73. #define ERROR               1
  74. #define NO_MEMORY           2
  75. #define USER_BREAK          3
  76. #define INVALID_POINTER     4
  77. #define LOW_BUFFER          5
  78. #define WRONG_DRIVE         6
  79. #define WRONG_PARAMETER     7
  80. #define UNEXPECTED_COMMAND  8
  81. #define INVALID_MEMSIZE     9
  82. #define NO_SUCH_OBJECT      10
  83. #define NO_DRIVE_SELECTED   11
  84. #define NO_FOLDER_CREATION  12
  85. #define WRITE_PROTECTION    13
  86. #define LOW_SPACE           14
  87. #define LOW_ROOT            15
  88. #define INVALID_PATH        16
  89. #define BUFFER_IN_USE       17
  90. #define BAD_BPB             18
  91. #define BAD_READ            19
  92. #define BAD_WRITE           20
  93. #define UNKNOWN_COMMAND     21
  94. #define NO_WINDOW           22
  95. #define TOO_MANY_GOSUBS     23
  96. #define TOO_MANY_RETURNS    24
  97. #define LABEL_NOT_FOUND     25
  98. #define NO_SUCH_FOLDER      26
  99. #define REORGANIZED_MEMORY  27
  100. #define NO_SELECTION_MODE   28
  101. #define DRIVEVAR_NOT_SPECIFIED 29
  102. #define MULTIPLE_LABEL      30
  103. #define EXEC_ERROR          31
  104.  
  105. /* ---------------  Job Kommandos --------------------------------------------*/
  106.  
  107. #define _SRC_SELECT         0
  108. #define _DST_SELECT         1
  109. #define _DIALOG_LEVEL       2
  110. #define _KEEP_FLAGS         3
  111. #define _IGNORE_WP          4
  112. #define _ALERT              5
  113. #define _PAUSE              6
  114. #define _NEW_FOLDER         7
  115. #define _CHOOSE             8
  116. #define _RESET_STATUS       9
  117. #define _READ_INTO_BUFFER   10
  118. #define _WRITE_BUFFER       11
  119. #define _COPY               12
  120. #define _MOVE               13
  121. #define _DELETE             14
  122. #define _QUIT               15
  123. #define _GOTO               16
  124. #define _GOSUB              17
  125. #define _RETURN             18
  126. #define _PERMANENT          19
  127. #define _VERIFY             21
  128. #define _DATE               22
  129. #define _ARCHIVE_TREATMENT  23
  130. #define _GEMDOS_MODE        24
  131. #define _FORMAT_PARAMETER   25
  132. #define _FORMAT             26
  133. #define _SOFT_FORMAT        27
  134. #define _OFF                28
  135. #define _ON                 29
  136. #define _EVER_OFF           30
  137. #define _EVER_ON            31
  138. #define _CONSIDER_PATHS     32
  139. #define _ON_LEVEL           33
  140. #define _EXTENSIONS         34
  141. #define _ARCHIVE            35
  142. #define _FILE               36
  143. #define _KEEP_SEQUENCE      37
  144. #define _RESET_ARCHIVES     38
  145. #define _OPEN_FOLDERS       39
  146. #define _CURRENT            40
  147. #define _KEEP               41
  148. #define _SET                42
  149. #define _CLEAR              43
  150. #define _CLEARED            44
  151. #define _SI                 45
  152. #define _SE                 46
  153. #define _DI                 47
  154. #define _DE                 48
  155. #define _CLEAR_BUFFER       51
  156. #define _SOURCE_TREATMENT   52
  157. #define _DIALOG_WINDOWS     53
  158. #define _RENAME             54
  159. #define _BUFFER             55
  160. #define _BING               56
  161. #define _SWAP               57
  162. #define _DATE_DIFFERENT     58
  163. #define _DATE_EQUAL         59
  164. #define _DATE_YOUNGER       60
  165. #define _DATE_OLDER         61
  166. #define _DATE_ARBITRARY     62
  167. #define _SIZE_DIFFERENT     63
  168. #define _SIZE_EQUAL         64
  169. #define _SIZE_LARGER        65
  170. #define _SIZE_SMALLER       66
  171. #define _SIZE_ARBITRARY     67
  172. #define _FILE_ATTRIBUTES    68
  173. #define _SELECT_DRIVE       69
  174. #define _BRANCH_ON_DRIVE    70
  175. #define _EXECUTE            71
  176. #define _SET_DRIVE          72
  177. #define _NEXT_DRIVE         73
  178. #define _EXIT               74
  179. /*-----------------------------------------------------------------------------*/
  180.  
  181. int kobold_nr,sendbuf[8],status,zeile;
  182.  
  183. char kobold_id[] = {"KOBOLD_3"},
  184.      job[] = {"src_select c:\  ... etc.  "},
  185.                 /* Oder einfacher {"#0 c:\ ... etc. "}  */
  186.      *job_package;
  187.  
  188.           .
  189.           .
  190.           .
  191. appl_id = appl_init();
  192.  
  193. if (appl_id != -1)
  194. {
  195.   if (_GemParBlk.global[0] >= 0x400 && find_cookie(MiNT))
  196.     multiTos = TRUE;
  197.   else
  198.     multiTos = FALSE;
  199.  
  200.  
  201.            .
  202.            .
  203.            .
  204.  
  205. if (multiTos)
  206.     job_package = Mxalloc(strlen(job) + 1,0x42);
  207.      /* Unter Memory-Protection: ST-preferred (z.B.), readable */
  208. else
  209.     job_package = Malloc(strlen(job) + 1);
  210.  
  211.  
  212. kobold_nr = appl_find(kobold_id);     /* Acc-Nr. finden   */
  213.  
  214. if ((kobold_nr >= 0) && job_package)  /* Acc vorhanden &  */
  215.                                       /* Speicher bekommen*/
  216. {
  217.   sendbuf[0] = KOBOLD_JOB_NO_WINDOW;  /* Message: Kopieren*/
  218.                                       /* ohne Fenster     */
  219.   sendbuf[1] = appl_id;               /* Eigene ID        */
  220.   sendbuf[2] = 0;                     /* Keine Überlänge  */
  221.  
  222.   strcpy(job_package,job);   /* Job in den auch für andere */
  223.                              /* Prozesse unter MultiTos    */
  224.                              /* lesbaren Bereich kopieren  */
  225.  
  226.   *((char **) &sendbuf[3]) = job_package;/* Zeiger auf Job*/
  227.  
  228.   appl_write(kobold_nr,16,sendbuf);   /* abschicken       */
  229.  
  230.  
  231. /* Achtung! Ab hier darf nichts mehr per 'wind_update'    */
  232. /* blockiert sein!                                        */
  233.  
  234.   do      /*           Kopierende abwarten               */
  235.   {
  236.       evnt_mesag(sendbuf);
  237.  
  238.   } while(sendbuf[0] != KOBOLD_ANSWER);
  239.  
  240.   Mfree(job_package);
  241.  
  242.   status = sendbuf[3];                /* Abschlu₧status   */
  243.   zeile = sendbuf[4];                 /* Letzte Zeile     */
  244.  
  245.   if (status != FINISHED)   /* KOBOLD ist noch aktiv */
  246.   {
  247.     sendbuf[0] = KOBOLD_CLOSE;  /* Message: Beenden*/
  248.     sendbuf[1] = appl_id;       /* Eigene ID        */
  249.     sendbuf[2] = 0;             /* Keine Überlänge  */
  250.  
  251.     appl_write(kobold_nr,16,sendbuf);   /* abschicken       */
  252.  
  253.     do          /* ...und Freigabe von Speicher und Lauf-   */
  254.     {           /*    werken abwarten.                      */
  255.         evnt_mesag(sendbuf);
  256.  
  257.     } while(sendbuf[0] != KOBOLD_ANSWER);
  258.  
  259.   }
  260.  
  261.           .
  262.           .  /* Ab hier Fehlerbehandlung */
  263.           .
  264.  
  265. }
  266. /* =========================================================================== */
  267.  
  268.