/****************************************************************** * Routine zum leichten und AES-Versionsabh„ngigen Aufruf der GEM * * Fileselectorbox inklusive Routinen zum Umgang mit Dateien * ******************************************************************/ #include #include #include "powergem.h" #include #include #include #include #include #ifndef _BYTE_ typedef unsigned char byte; #endif /* Funktionsprototypen */ boolean easy_fsel(char *pfad,char *dateiname,char *text); void build_filname(char *dest,char *pfad,char *dateiname); void extract_filename(char *pfad,char *dateiname,char *source); char *swap_extension(char *dateiname,char *ext); boolean check_extension(char *datei_name,char *ext); boolean exist_file(const char *dateiname); char *get_akt_path(char *path); void set_new_path(char *path); boolean get_cookie(char *cookiename,long *cookie_value); /**************************************************************** * Zeigt eine FSELBOX je nach AES-Version an und bernimmt Aus- * * wertung * * Input: pfad: Pfad der aufzurufenden Datei * * dateiname: Dateiname * * text: Infotext fr fselextinput() * * Output:TRUE oder FALSE * ****************************************************************/ boolean easy_fsel(char *pfad,char *dateiname,char *text) { int button,result; long c_wert=0; extern GEMPARBLK _GemParBlk; /* je nach AES_Version FSELBOX aufrufen */ if(_GemParBlk.global[0]<0x0014 && get_cookie("FSEL",&c_wert)==FALSE) { result=fsel_input(pfad,dateiname,&button); } else result=fsel_exinput(pfad,dateiname,&button,text); blank( 0,0,0,0,0); /* REDRAW */ /* Wenn Fehler aufgetreten oder Abbruch gew„hlt: */ if(result==0 || button==0) return FALSE; else return TRUE; } /**************************************************************** * Bastelt Pfad und Dateiname zusammen * * Input: dest: Zeiger auf Zielstring * * pfad: Pfadname * * dateiname: Dateiname * ****************************************************************/ void build_filname(char *dest,char *pfad,char *dateiname) { char *xyz; strcpy(dest,pfad); xyz=strrchr(dest,(int)'\\'); if(xyz) strcpy(++xyz,dateiname); } /*************************************************************** * Extrahiert Pfad und Dateiname aus String * * Input: pfad: Zeiger fr Zielpfad * * dateiname: Zeiger fr Zieldateiname * * source: Zeiger auf Pfaddateistring * ***************************************************************/ void extract_filename(char *pfad,char *dateiname,char *source) { char *xyz; strcpy(pfad,source); xyz=strrchr(pfad,(int)'\\'); if(xyz) strcpy(dateiname,xyz+1); strcpy(pfad,source); *xyz=0x0; } /*************************************************************** * Tauscht aktuelles Extension aus * * Input: dateiname Dateiname mit altem Extension * * ext neues Extension (ohne PUNKT !!! * ***************************************************************/ char *swap_extension(char *dateiname,char *ext) { char *xyz; xyz=strrchr(dateiname,(int)'.'); if(xyz) { if(ext[0] != 0x0) strcpy(++xyz,ext); else strcpy(xyz,ext); } else /* Keine Endung */ { if(ext[0] != 0x0) { strcat(dateiname,"." ); strcat(dateiname,ext); } } return(dateiname); } /*************************************************************** * Vergleicht Extension * * Input: datei_name mit seine Extension * * vergleichendes Extension * * Output:TRUE oder FALSE * ***************************************************************/ boolean check_extension(char *datei_name,char *ext) { char *xyz; xyz=strrchr(datei_name,(int)'.'); if(xyz) { if(!strnicmp( ++xyz,ext,3)) return TRUE; } else /* Keine Endung */ { if(ext[0] == 0x0) return TRUE; } return FALSE; } /**************************************************************** * Prft ob die Datei schon existiert * * Input: dateiname: Dateiname * ****************************************************************/ boolean exist_file(const char *dateiname) { if(Fsfirst(dateiname,FA_READONLY|FA_HIDDEN|FA_ARCHIVE|FA_SYSTEM)==0) return TRUE; else return FALSE; } /**************************************************************** * Gibt aktuelles Laufwerk und dessen Pfad zurck * * Input: path: Zeiger auf String * * Output: Zeiger auf aktuelle Laufwerk und Directory * ****************************************************************/ char *get_akt_path(char *path) { strcpy(path," :"); path[0]='A'+ getdisk(); /* Laufwerk */ getcurdir(0,path+2); /* Directory */ strcpy(path+strlen(path),"\\*.*"); return(path); } /**************************************************************** * Setzt neues Laufwerk und dessen Pfad * * Input: path: Zeiger auf Pfad * ****************************************************************/ void set_new_path(char *path) { char lw; if(path[1]== ':') { lw=path[0]-'A'; setdisk((int)lw); chdir(path+2); } else { lw=getdisk(); setdisk((int)lw); chdir(path+2); } } /**************************************************************** * Sucht nach einem Cookie, und liefert es bei Erfolg zurck * * Input: cookie_name: Name des zu suchenden ... * * cookie_value: Zeiger auf den sp„teren Inhalt des * * COOKIES * * Output: TRUE und Inhalt oder FALSE * ****************************************************************/ boolean get_cookie(char *cookiename,long *cookie_value) { long old_stack; long *cookiejar; old_stack=Super(0L); cookiejar= *((long **)0x5A0L); /* Zeiger auf Cookie holen */ Super((void *)old_stack); if(!cookiejar)return FALSE; /* Cookie vorhanden ? */ do { /* gesuchtes COOKIE ? */ if(!strncmp((char *)cookiejar,cookiename,4)) { if(cookie_value) { *cookie_value=cookiejar[1]; return TRUE; } } else cookiejar= &(cookiejar[2]); } while(cookiejar[0]); /* solange nicht NULL-COOKIE */ return FALSE; } /* EOF */