home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / menu / kiwi / examples / list.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-02  |  8.0 KB  |  300 lines

  1. #include<ctype.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<kiwi_inc.h>
  5. #include<kiwi_vs.h>
  6. #include<kiwipro.h>
  7. #include<kiwi_mem.h>
  8. #include<dos.h>
  9.  
  10.  
  11.  
  12. /* Dieses Beispiel zeigt, was mit der scanf_mask Funktion, der 
  13.    Procedure Table und einer Maske alles gemacht werden kann.
  14.  
  15.    Compilieren im Medium mode mit kw[t,m]c32m und fertig
  16. */
  17.  
  18.  
  19.  
  20. int pre_list1(struct inter_func_com *ipc);    /* Prototypendefinitionen für     */
  21. int post_list1(struct inter_func_com *ipc);    /* Procedure Table notwendig    */
  22. int pre_list2(struct inter_func_com *ipc);
  23. int post_list2(struct inter_func_com *ipc);
  24. int init_tools(void);
  25. void reset_tools(void);
  26.  
  27.  
  28. static char pfadl[DATEI_PFAD_NAME_LEN];        /* Einige Statische, Globale    */
  29. static char pfadr[DATEI_PFAD_NAME_LEN];        /* Strings zu Aufnahme der    */
  30. static char pfadl1[DATEI_PFAD_NAME_LEN];        /* Pfadnamen und Dateinamen    */    
  31. static char pfadr1[DATEI_PFAD_NAME_LEN];
  32. char datei1[DATEI_NAME_LEN],datei2[DATEI_NAME_LEN];
  33. static PICK_LIST list1,list2;            /* Argumente für die Maske vom    */
  34.                         /* Typ Pickliste        */
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43. main()
  44. {
  45. int i,c;
  46. char *ptr;
  47. WINDOW win=0;
  48.  
  49. init_tools();
  50.  
  51. set_window_scroll_bar(ON);            /* Bitte mit Scrollbalken        */
  52. init_procedure_table(10);            /* Procedure Table mit 10 Einträgen    */
  53. set_procedure_table_entry(1,"pre_list1",0,pre_list1);    /* Hier werden die Einträge    */
  54. set_procedure_table_entry(2,"post_list1",0,post_list1);    /* festgesetzt. Danach können    */
  55. set_procedure_table_entry(3,"pre_list2",0,pre_list2);    /* diese Funktionen nur per    */
  56. set_procedure_table_entry(4,"post_list2",0,post_list2);    /* "Namen" aufgerufen werden,    */
  57.                             /* was scanf_mask auch tut    */
  58. init_string(pfadl,sizeof(pfadl));        /* Die Strings löschen        */               
  59. init_string(pfadr,sizeof(pfadr));
  60. init_string(pfadl1,sizeof(pfadl1));
  61. init_string(pfadr1,sizeof(pfadr1));
  62.  
  63. list1.data=(char *)malloc(100*DATEI_NAME_LEN);    /* Platz schaffen für die Listen    */
  64. if(list1.data==NULL)abort();            /* die von der Funktion get_file_list    */
  65. list2.data=(char *)malloc(100*DATEI_NAME_LEN);    /* gefüllt werden sollen.        */
  66. if(list2.data==NULL)abort();
  67.  
  68. init_string(list1.data,100*DATEI_NAME_LEN);    /* Listenfelder löschen            */
  69. init_string(list2.data,100*DATEI_NAME_LEN);
  70.  
  71. strcpy(pfadl,"*.c");                /* Pfade setzen                */
  72. strcpy(pfadr,"*.c");
  73.  
  74. for(i=0;i<DATEI_PFAD_NAME_LEN;i++)pfadl1[i]=pfadl[i];    /* Kopieren            */
  75. for(i=0;i<DATEI_PFAD_NAME_LEN;i++)pfadr1[i]=pfadr[i];
  76.  
  77. list1.anzahl=get_file_list(pfadl,&ptr);        /* Erstes Feld initialisieren        */
  78. list1.breite=12;                /* Dateinamen sind 12 Zeichen breit    */
  79. list1.hoehe=9;                    /* Listenfeld soll 9 Zeilen hoch sein    */
  80. c=MIN(100,list1.anzahl);            /* Wie viele Einträge hat Liste        */
  81. for(i=0;i<c*DATEI_NAME_LEN;i++)            /* Kopiere Einträge in Feld        */
  82.     list1.data[i]=(*(ptr+i));        
  83. reset_get_file_list();                /* Befreie Speicher von get_file_list    */
  84.  
  85. list2.anzahl=get_file_list(pfadr,&ptr);        /* Gleiche Procedure wie bei der 1 Liste*/
  86. list2.breite=12;
  87. list2.hoehe=9;
  88.  
  89. c=MIN(100,list2.anzahl);
  90. for(i=0;i<c*DATEI_NAME_LEN;i++)
  91.     list2.data[i]=(*(ptr+i));        
  92. reset_get_file_list();                          /* Felder sind besetzt, es geht los    */
  93.  
  94. set_scanf_exit_code(1,F5);            /* scanf_mask soll bei F5 terminieren    */    
  95. set_scanf_exit_code(2,F6);            /* scnaf_mask soll bei F6 terminieren    */
  96.  
  97. do                        /* Bis der Tod oder escape uns scheidet    */
  98. {
  99.  
  100.     win=load_window("list.wnd");        /* Lade die Maske und Zeige den Inhalt    */
  101.     c=scanf_mask(win,0,"x",    pfadl,        /* Hauptfunktion, die die ganze Arbeit macht    */
  102.                 &list1,        /* Zuerst der Pfad, dann die Liste    */
  103.                 datei1,        /* dann der Dateiname des ersten Pfads    */
  104.                 pfadr,        /* Dann das selbige von Liste 2        */
  105.                 &list2,
  106.                 datei2        /* Dieser Source wurde vom SM erzeugt, deshalb die Buttons    */
  107.                 /* Button Lade Links */        /* Erzeugt F5 Taste    */            
  108.                 /* Button Lade Rechts */     /* Erzeugt F6 Taste    */ 
  109.                 /* Button Hilfe    */        /* Erzeugt F1 Taste    */
  110.                 /* Button Abbruch    */);     /* Erzeugt ESCAPE Taste    */                                
  111.  
  112.  
  113.     close_window(win);            /* Scanf ist beendet, als Window zu    */
  114.  
  115.  
  116.     win=open_window("Ergebnis",AM,AM,40,10,DOPPELT);    /* Zeige Ergebnis von scanf    */
  117.     display_string("Die Maske wurde wie folgt beendet",win,AM,1);
  118.          if(c==F5){
  119.         display_string("Lade die obere Datei",win,AM,3);
  120.         display_string2(datei1,win,AM,4,sizeof(datei1));}
  121.     else if(c==F6){
  122.         display_string("Lade die untere Datei",win,AM,3);
  123.         display_string2(datei2,win,AM,4,sizeof(datei2));}
  124.     else if(c==27)display_string("Auswahl abgebrochen mit Escape",win,AM,3);
  125.  
  126.     display_string("Beliebige taste für Weiter",win,AM,5);
  127.     wait_input();
  128.  
  129. }while(c!=27);
  130.  
  131. free(list1.data);        /* Befreie Speicher Liste 1    */
  132. free(list2.data);        /* Befreie Speicher Liste 2    */
  133. reset_tools();            /* Ende des Spasses        */
  134.  
  135. return(0);
  136. }
  137.  
  138.  
  139. /* Diese Funktion wird bei Eintritt in die Liste 1 aufgerufen. Sie
  140.    vergleicht, ob der Pfad geändert worden ist. Wenn ja, holt Sie die
  141.    neue Liste mittels get_file_list, sonst passiert gar nichts    */
  142. int pre_list1(struct inter_func_com *ipc)
  143. {
  144. int i,c;
  145. char *ptr;
  146.  
  147. if(strncmp(pfadl,pfadl1,DATEI_PFAD_NAME_LEN))
  148. {
  149.     list1.anzahl=get_file_list(pfadl,&ptr);
  150.  
  151.     c=MIN(100,list1.anzahl);
  152.     for(i=0;i<c*DATEI_NAME_LEN;i++)
  153.         list1.data[i]=(*(ptr+i));        
  154.  
  155.     for(i=0;i<DATEI_PFAD_NAME_LEN;i++)
  156.         pfadl[i]=pfadl1[i];
  157.  
  158.     reset_get_file_list();
  159.  
  160.     return(1);
  161. }
  162.  
  163. return(0);
  164. }
  165.  
  166.  
  167.  
  168.  
  169. /* Diese Funktion wird bei Eintritt in die Liste 2 aufgerufen. Sie
  170.    vergleicht, ob der Pfad geändert worden ist. Wenn ja, holt Sie die
  171.    neue Liste mittels get_file_list, sonst passiert gar nichts    */
  172. int pre_list2(struct inter_func_com *ipc)
  173. {
  174. int i,c;
  175. char *ptr;
  176.  
  177. if(strncmp(pfadr,pfadr1,DATEI_PFAD_NAME_LEN))
  178. {
  179.     list2.anzahl=get_file_list(pfadr,&ptr);
  180.  
  181.     c=MIN(100,list2.anzahl);
  182.     for(i=0;i<c*DATEI_NAME_LEN;i++)
  183.         list2.data[i]=(*(ptr+i));        
  184.  
  185.     for(i=0;i<DATEI_PFAD_NAME_LEN;i++)
  186.         pfadr[i]=pfadr1[i];
  187.  
  188.     reset_get_file_list();
  189.  
  190.     return(1);
  191. }
  192.  
  193. return(0);
  194. }
  195.  
  196.  
  197.  
  198. /* Diese Funktion wird bei Austritt aus die Liste 1 aufgerufen. Sie
  199.    kopiert die ausgewählte Datei in des passende Feld. Da dieses Feld
  200.    als Daueranzeige konzipiert wurde, wird die Änderung direkt in der
  201.    Maske angezeigt.                        */
  202. int post_list1(struct inter_func_com *ipc)
  203. {
  204. int i,c;
  205.  
  206. c=list1.auswahl*list1.breite;
  207. for(i=0;i<DATEI_NAME_LEN;i++)
  208.     datei1[i]=(*(list1.data+c+i));
  209.  
  210. return(0);
  211. }
  212.  
  213.  
  214.  
  215. /* Diese Funktion wird bei Austritt aus die Liste 2 aufgerufen. Sie
  216.    kopiert die ausgewählte Datei in des passende Feld. Da dieses Feld
  217.    als Daueranzeige konzipiert wurde, wird die Änderung direkt in der
  218.    Maske angezeigt.                        */
  219. int post_list2(struct inter_func_com *ipc)
  220. {
  221. int i,c;
  222.  
  223.  
  224. c=list2.auswahl*list2.breite;
  225. for(i=0;i<DATEI_NAME_LEN;i++)
  226.     datei2[i]=(*(list2.data+c+i));
  227.  
  228. return(0);
  229. }
  230.  
  231.  
  232.  
  233.  
  234. /* Initialisiere das TOOL Paket            */
  235. int init_tools()
  236. {
  237.  
  238.  
  239. init_screen(VBLAU,HWEIS,VWEIS,HBLAU,MUSTER,DIREKT);
  240.  
  241. cls();                    /* Loesche Schirm mit zeichen     */
  242. init_window(10);            /* Mache Platz fuer 30 Fenster    */
  243. init_virtuell_screen(10);
  244.  
  245. init_window_manager();
  246. set_winman_mask(WINDOW_MOVE);
  247. set_window_move_mode(MIT_RAND);
  248. set_cursor_size(CURSOR_WEG);        /* Verstecke Cursor        */ 
  249. install_error_handler();
  250.  
  251. /* Mouse                    */
  252. set_mouse_cursor_size(CURSOR_VOLL);    /* Setze Mauscursorform        */
  253. init_mouse();                /* Aktiviere Maus wenn da    */
  254. limit_mouse_area(1,1,get_screen_wide(),get_screen_height());
  255. set_help_mask(F1);
  256.  
  257. return(0);
  258. }
  259.  
  260.  
  261.  
  262. /* Reinitialisiere das Tool Paket            */
  263. void reset_tools()
  264. {
  265. reset_mouse();            /*    Maus weg    */
  266. reset_virtuell_screen();    /*    Screens weg    */
  267. reset_window();            /*     Fenster frei    */
  268. reset_screen();            /*     Bildschirm frei    */
  269. set_video_mode(C_80x25);
  270.  
  271. clear();            /*     Loesche Bildschirm    */         
  272. exit(0);
  273.  
  274. return;
  275. }
  276.  
  277.  
  278.  
  279. /* Hile haben wir nicht, deshalb als Ersatz 3 Piepser    */
  280. void check_if_get_help()
  281. {
  282. WINDOW win;
  283.  
  284. win=load_window("List1.wnd");
  285. wait_of_action();
  286. close_window(win);
  287.  
  288. return;
  289. }
  290.  
  291.  
  292. /* Windowmanager ist idle                */
  293. int check_window_manager(mode,mx,my)
  294. int mode;
  295. unsigned mx,my;
  296. {
  297. return(window_manager(mode,mx,my));
  298. }
  299.  
  300.