home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ST-Computer Leser 1998 October
/
STC_CD_10_1998.iso
/
BASE
/
PD_PATCH
/
EASYFSEL.C
next >
Wrap
C/C++ Source or Header
|
1998-09-26
|
7KB
|
234 lines
/********************************************************************/
/* EASYFSEL.C */
/* */
/* Routine zum leichten und AES-Versions abhängigen Aufruf der */
/* GEM-Fileselectorbox mit Auswertung des 'FSEL' - Cookies. */
/* Au₧erdem sind einige Routinen zum Umgang mit Dateien enthalten, */
/* sowie zum Suchen eines Cookies. */
/* */
/* Version : 1.27 */
/* Datum : 15.06.1992 */
/* Autor : Andreas Papula (falls nicht anders angegeben) */
/* */
/* Copyright 1992 by MAXON Computer GmbH */
/********************************************************************/
/*------------------------------------------------------------------*/
/* Include-Files einbinden. */
/*------------------------------------------------------------------*/
#include "easyfsel.h"
#include <aes.h>
#include <stddef.h>
DTA Dta;
#define _sysbase (0x4f2l)
/* -------------------------------------------------------------------- */
/* Globale Variablen */
/* -------------------------------------------------------------------- */
/* -------------------------------------------------------------------- */
/* lokale Funktionsprototypen */
/* -------------------------------------------------------------------- */
long * get_cookie_ptr(long cookie_name);
/*------------------------------------------------------------------*/
/* BOOLEAN easy_fsel(BYTE *pfad, BYTE *dateiname, BYTE *text) */
/* */
/* Zeigt die Fileselectorbox je nach AES-Version und 'FSEL'-Cookie */
/* an und übernimmt die Auswertung. */
/* Bei einer AES-Version >= 0x0014 oder gesetztem 'FSEL-Cookie' */
/* wird fsel_exinput() aufgerufen, sonst fsel_input(). */
/* */
/* Parameter:Pfad und Dateiname, mit denen die Fileselectorbox */
/* aufgerufen werden soll. */
/* Rückgabe :TRUE, wenn alles glattging und der Benutzer OK ge- */
/* drückt hat, FALSE falls ein Fehler aufgetreten ist */
/* oder Abbruch gewählt wurde. Der neue Pfad steht */
/* in 'pfad', der ausgewählte Dateiname in dateiname'. */
/*------------------------------------------------------------------*/
BOOLEAN easy_fsel(BYTE *pfad, BYTE *dateiname, BYTE *text)
{
WORD button;
WORD result;
LONG c_wert = 0;
char *blank;
/* DYJ ' ' im Pfad- und Dateinamen eliminieren*/
if((blank=strchr(pfad,' '))!=NULL)
*blank=0;
if((blank=strchr(dateiname,' '))!=NULL)
*blank=0;
/* Entsprechend der Version und des 'FSEL' - Cookies */
/* fsel_input() oder fsel_exinput() aufrufen */
if(_GemParBlk.global[0] < 0x0140 && get_cookie('FSEL', &c_wert) == FALSE)
result = fsel_input(pfad, dateiname, &button);
else
result = fsel_exinput(pfad, dateiname, &button, text);
/* Wenn Fehler aufgetreten oder Abbruch ausgewählt */
if(result == 0 || button == 0)
return FALSE;
else
return TRUE;
}
/*------------------------------------------------------------------*/
/* VOID build_filename(BYTE *dest, BYTE *pfad, BYTE *dateiname) */
/* */
/* Bastelt Pfad- und Dateinamen zusammen. */
/* */
/* Parameter:dest = Zielstring. */
/* pfad = Pfadname. */
/* dateiname = Dateiname. */
/* Rückgabe :Das Ergebnis befindet sich in dest. */
/*------------------------------------------------------------------*/
VOID build_filename(BYTE *dest, BYTE *pfad, BYTE *dateiname)
{
BYTE *xyz;
strcpy(dest, pfad);
xyz = strrchr(dest, (int) '\\');
strcpy(++xyz, dateiname);
}
/*------------------------------------------------------------------*/
/* BYTE *get_akt_path(BYTE *path) */
/* */
/* Gibt das aktuelle Laufwerk und dessen Pfad zurück. */
/* */
/* Parameter: Zeiger auf einen String. */
/* Rückgabe : Zeiger auf das aktuelle Laufwerk und Directory. */
/*------------------------------------------------------------------*/
BYTE *get_akt_path(BYTE *path)
{
strcpy(path, " :");
path[0] = 'A' + getdisk(); /* Laufwerk */
getcurdir(0, path+2); /* Directory */
strcat(path,"\\");
return(path);
}
/* Ermittelt die Länge eines offenen Files */
long lof(FILE *stream)
{ long pos,len;
pos=ftell(stream);
fseek(stream,0,SEEK_END);
len=ftell(stream);
fseek(stream,pos,SEEK_SET);
return(len);
}
BOOLEAN get_cookie(long cookie_name, LONG *cookie_value)
{
LONG *cookie;
int ret=1;
/* Zuerst einen Zeiger auf den Cookie holen */
cookie = get_cookie_ptr(cookie_name);
/* Ist der Cookiejar vorhanden ? */
if(!cookie)
ret=0;
else
{ if(!cookie[0])
ret=0;
else
*cookie_value=cookie[1];
}
return(ret);
}
/*------------------------------------------------------------------*/
/* long get_cookie_jar() */
/* */
/* Ermittelt die Adresse des Cookie Jar. */
/* */
/* Parameter:keine */
/* Rückgabe :Adresse, falls der Cookie Jar gefunden wurde, */
/* NULL falls kein Cookie-Jar */
/* Besonderheit: mu₧ per Supexec aufgerufen werden */
/* (c) by Dimitri Junker 1996 */
/*------------------------------------------------------------------*/
long get_cookie_jar()
{
LONG *cookiejar;
cookiejar = *((LONG **) 0x5a0L);
return((long)cookiejar);
}
/*------------------------------------------------------------------*/
/* long *get_cookie_ptr(BYTE *cookie_name) */
/* */
/* Sucht nach einem Cookie 'cookie_name' und liefert dessen */
/* Adresse zurück. */
/* */
/* Parameter:Name des Cookies */
/* Rückgabe :Adresse, falls der Cookie gefunden wurde, */
/* Adresse des NULL-cookie falls nicht vorhanden */
/* NULL falls kein Cookie-Jar */
/* (c) by Dimitri Junker 1996 */
/*------------------------------------------------------------------*/
long * get_cookie_ptr(long cookie_name)
{
LONG *cookiejar;
/* Zuerst einen Zeiger auf den Cookiejar holen */
cookiejar = (long *)Supexec(get_cookie_jar);
/* Ist der Cookiejar vorhanden ? */
if(!cookiejar)
return(NULL);
else
{
do
{
/* Ist es unser Cookie ? */
if(*cookiejar== cookie_name)
break;
else
{
/* nächster Cookie aus Jar */
cookiejar = &(cookiejar[2]);
}
}
while(cookiejar[0]); /* solange nicht NULL-Cookie */
return(cookiejar);;
}
}
/*----------------------- Ende der Datei. --------------------------*/
/*------------------------------------------------------------------*/
/* long get_act_pd() */
/* */
/* Gibt die Basepage des aktuellen Proz. zurück */
/* */
/* Parameter: keiner */
/* Rückgabe :Die Funktion liefert als Ergebnis den Pointer, */
/* allerdings als long, wegen Supexec */
/* (c) by Dimitri Junker 1996 */
/* nach Profibuch S.185 */
/* Besonderheit: mu₧ per Supexec aufgerufen werden */
/*------------------------------------------------------------------*/
long get_act_pd(void)
{ BASPAG *bp;
SYSHDR *os;
os=*(SYSHDR **)_sysbase;
os=os->os_base;
bp=*os->_run;
return((long)bp);
}