home *** CD-ROM | disk | FTP | other *** search
- #include<ctype.h>
- #include<stdlib.h>
- #include<string.h>
- #include<kiwi_inc.h>
- #include<kiwi_vs.h>
- #include<kiwipro.h>
- #include<kiwi_mem.h>
- #include<dos.h>
-
-
-
- /* Dieses Beispiel zeigt, was mit der scanf_mask Funktion, der
- Procedure Table und einer Maske alles gemacht werden kann.
-
- Compilieren im Medium mode mit kw[t,m]c32m und fertig
- */
-
-
-
- int pre_list1(struct inter_func_com *ipc); /* Prototypendefinitionen für */
- int post_list1(struct inter_func_com *ipc); /* Procedure Table notwendig */
- int pre_list2(struct inter_func_com *ipc);
- int post_list2(struct inter_func_com *ipc);
- int init_tools(void);
- void reset_tools(void);
-
-
- static char pfadl[DATEI_PFAD_NAME_LEN]; /* Einige Statische, Globale */
- static char pfadr[DATEI_PFAD_NAME_LEN]; /* Strings zu Aufnahme der */
- static char pfadl1[DATEI_PFAD_NAME_LEN]; /* Pfadnamen und Dateinamen */
- static char pfadr1[DATEI_PFAD_NAME_LEN];
- char datei1[DATEI_NAME_LEN],datei2[DATEI_NAME_LEN];
- static PICK_LIST list1,list2; /* Argumente für die Maske vom */
- /* Typ Pickliste */
-
-
-
-
-
-
-
-
- main()
- {
- int i,c;
- char *ptr;
- WINDOW win=0;
-
- init_tools();
-
- set_window_scroll_bar(ON); /* Bitte mit Scrollbalken */
- init_procedure_table(10); /* Procedure Table mit 10 Einträgen */
- set_procedure_table_entry(1,"pre_list1",0,pre_list1); /* Hier werden die Einträge */
- set_procedure_table_entry(2,"post_list1",0,post_list1); /* festgesetzt. Danach können */
- set_procedure_table_entry(3,"pre_list2",0,pre_list2); /* diese Funktionen nur per */
- set_procedure_table_entry(4,"post_list2",0,post_list2); /* "Namen" aufgerufen werden, */
- /* was scanf_mask auch tut */
- init_string(pfadl,sizeof(pfadl)); /* Die Strings löschen */
- init_string(pfadr,sizeof(pfadr));
- init_string(pfadl1,sizeof(pfadl1));
- init_string(pfadr1,sizeof(pfadr1));
-
- list1.data=(char *)malloc(100*DATEI_NAME_LEN); /* Platz schaffen für die Listen */
- if(list1.data==NULL)abort(); /* die von der Funktion get_file_list */
- list2.data=(char *)malloc(100*DATEI_NAME_LEN); /* gefüllt werden sollen. */
- if(list2.data==NULL)abort();
-
- init_string(list1.data,100*DATEI_NAME_LEN); /* Listenfelder löschen */
- init_string(list2.data,100*DATEI_NAME_LEN);
-
- strcpy(pfadl,"*.c"); /* Pfade setzen */
- strcpy(pfadr,"*.c");
-
- for(i=0;i<DATEI_PFAD_NAME_LEN;i++)pfadl1[i]=pfadl[i]; /* Kopieren */
- for(i=0;i<DATEI_PFAD_NAME_LEN;i++)pfadr1[i]=pfadr[i];
-
- list1.anzahl=get_file_list(pfadl,&ptr); /* Erstes Feld initialisieren */
- list1.breite=12; /* Dateinamen sind 12 Zeichen breit */
- list1.hoehe=9; /* Listenfeld soll 9 Zeilen hoch sein */
- c=MIN(100,list1.anzahl); /* Wie viele Einträge hat Liste */
- for(i=0;i<c*DATEI_NAME_LEN;i++) /* Kopiere Einträge in Feld */
- list1.data[i]=(*(ptr+i));
- reset_get_file_list(); /* Befreie Speicher von get_file_list */
-
- list2.anzahl=get_file_list(pfadr,&ptr); /* Gleiche Procedure wie bei der 1 Liste*/
- list2.breite=12;
- list2.hoehe=9;
-
- c=MIN(100,list2.anzahl);
- for(i=0;i<c*DATEI_NAME_LEN;i++)
- list2.data[i]=(*(ptr+i));
- reset_get_file_list(); /* Felder sind besetzt, es geht los */
-
- set_scanf_exit_code(1,F5); /* scanf_mask soll bei F5 terminieren */
- set_scanf_exit_code(2,F6); /* scnaf_mask soll bei F6 terminieren */
-
- do /* Bis der Tod oder escape uns scheidet */
- {
-
- win=load_window("list.wnd"); /* Lade die Maske und Zeige den Inhalt */
- c=scanf_mask(win,0,"x", pfadl, /* Hauptfunktion, die die ganze Arbeit macht */
- &list1, /* Zuerst der Pfad, dann die Liste */
- datei1, /* dann der Dateiname des ersten Pfads */
- pfadr, /* Dann das selbige von Liste 2 */
- &list2,
- datei2 /* Dieser Source wurde vom SM erzeugt, deshalb die Buttons */
- /* Button Lade Links */ /* Erzeugt F5 Taste */
- /* Button Lade Rechts */ /* Erzeugt F6 Taste */
- /* Button Hilfe */ /* Erzeugt F1 Taste */
- /* Button Abbruch */); /* Erzeugt ESCAPE Taste */
-
-
- close_window(win); /* Scanf ist beendet, als Window zu */
-
-
- win=open_window("Ergebnis",AM,AM,40,10,DOPPELT); /* Zeige Ergebnis von scanf */
- display_string("Die Maske wurde wie folgt beendet",win,AM,1);
- if(c==F5){
- display_string("Lade die obere Datei",win,AM,3);
- display_string2(datei1,win,AM,4,sizeof(datei1));}
- else if(c==F6){
- display_string("Lade die untere Datei",win,AM,3);
- display_string2(datei2,win,AM,4,sizeof(datei2));}
- else if(c==27)display_string("Auswahl abgebrochen mit Escape",win,AM,3);
-
- display_string("Beliebige taste für Weiter",win,AM,5);
- wait_input();
-
- }while(c!=27);
-
- free(list1.data); /* Befreie Speicher Liste 1 */
- free(list2.data); /* Befreie Speicher Liste 2 */
- reset_tools(); /* Ende des Spasses */
-
- return(0);
- }
-
-
- /* Diese Funktion wird bei Eintritt in die Liste 1 aufgerufen. Sie
- vergleicht, ob der Pfad geändert worden ist. Wenn ja, holt Sie die
- neue Liste mittels get_file_list, sonst passiert gar nichts */
- int pre_list1(struct inter_func_com *ipc)
- {
- int i,c;
- char *ptr;
-
- if(strncmp(pfadl,pfadl1,DATEI_PFAD_NAME_LEN))
- {
- list1.anzahl=get_file_list(pfadl,&ptr);
-
- c=MIN(100,list1.anzahl);
- for(i=0;i<c*DATEI_NAME_LEN;i++)
- list1.data[i]=(*(ptr+i));
-
- for(i=0;i<DATEI_PFAD_NAME_LEN;i++)
- pfadl[i]=pfadl1[i];
-
- reset_get_file_list();
-
- return(1);
- }
-
- return(0);
- }
-
-
-
-
- /* Diese Funktion wird bei Eintritt in die Liste 2 aufgerufen. Sie
- vergleicht, ob der Pfad geändert worden ist. Wenn ja, holt Sie die
- neue Liste mittels get_file_list, sonst passiert gar nichts */
- int pre_list2(struct inter_func_com *ipc)
- {
- int i,c;
- char *ptr;
-
- if(strncmp(pfadr,pfadr1,DATEI_PFAD_NAME_LEN))
- {
- list2.anzahl=get_file_list(pfadr,&ptr);
-
- c=MIN(100,list2.anzahl);
- for(i=0;i<c*DATEI_NAME_LEN;i++)
- list2.data[i]=(*(ptr+i));
-
- for(i=0;i<DATEI_PFAD_NAME_LEN;i++)
- pfadr[i]=pfadr1[i];
-
- reset_get_file_list();
-
- return(1);
- }
-
- return(0);
- }
-
-
-
- /* Diese Funktion wird bei Austritt aus die Liste 1 aufgerufen. Sie
- kopiert die ausgewählte Datei in des passende Feld. Da dieses Feld
- als Daueranzeige konzipiert wurde, wird die Änderung direkt in der
- Maske angezeigt. */
- int post_list1(struct inter_func_com *ipc)
- {
- int i,c;
-
- c=list1.auswahl*list1.breite;
- for(i=0;i<DATEI_NAME_LEN;i++)
- datei1[i]=(*(list1.data+c+i));
-
- return(0);
- }
-
-
-
- /* Diese Funktion wird bei Austritt aus die Liste 2 aufgerufen. Sie
- kopiert die ausgewählte Datei in des passende Feld. Da dieses Feld
- als Daueranzeige konzipiert wurde, wird die Änderung direkt in der
- Maske angezeigt. */
- int post_list2(struct inter_func_com *ipc)
- {
- int i,c;
-
-
- c=list2.auswahl*list2.breite;
- for(i=0;i<DATEI_NAME_LEN;i++)
- datei2[i]=(*(list2.data+c+i));
-
- return(0);
- }
-
-
-
-
- /* Initialisiere das TOOL Paket */
- int init_tools()
- {
-
-
- init_screen(VBLAU,HWEIS,VWEIS,HBLAU,MUSTER,DIREKT);
-
- cls(); /* Loesche Schirm mit zeichen */
- init_window(10); /* Mache Platz fuer 30 Fenster */
- init_virtuell_screen(10);
-
- init_window_manager();
- set_winman_mask(WINDOW_MOVE);
- set_window_move_mode(MIT_RAND);
- set_cursor_size(CURSOR_WEG); /* Verstecke Cursor */
- install_error_handler();
-
- /* Mouse */
- set_mouse_cursor_size(CURSOR_VOLL); /* Setze Mauscursorform */
- init_mouse(); /* Aktiviere Maus wenn da */
- limit_mouse_area(1,1,get_screen_wide(),get_screen_height());
- set_help_mask(F1);
-
- return(0);
- }
-
-
-
- /* Reinitialisiere das Tool Paket */
- void reset_tools()
- {
- reset_mouse(); /* Maus weg */
- reset_virtuell_screen(); /* Screens weg */
- reset_window(); /* Fenster frei */
- reset_screen(); /* Bildschirm frei */
- set_video_mode(C_80x25);
-
- clear(); /* Loesche Bildschirm */
- exit(0);
-
- return;
- }
-
-
-
- /* Hile haben wir nicht, deshalb als Ersatz 3 Piepser */
- void check_if_get_help()
- {
- WINDOW win;
-
- win=load_window("List1.wnd");
- wait_of_action();
- close_window(win);
-
- return;
- }
-
-
- /* Windowmanager ist idle */
- int check_window_manager(mode,mx,my)
- int mode;
- unsigned mx,my;
- {
- return(window_manager(mode,mx,my));
- }
-