Registrieren FAQ Mitgliederliste Suchen TOPFIELD.de Board Foren-Übersicht

Einloggen, um private Nachrichten zu lesen
TOPFIELD.de Board Foren-Übersicht » TAP » Bestimmen, in welchem Verzeichnis das TAP arbeitet
Neuen Beitrag schreiben  Auf Beitrag antworten Vorheriges Thema anzeigen :: Nächstes Thema anzeigen 
Bestimmen, in welchem Verzeichnis das TAP arbeitet
BeitragVerfasst am: So 01. Mai 2005, 21:19 Antworten mit Zitat
Trridy
Benutzer
Benutzer
 
Anmeldungsdatum: 11.04.2005
Beiträge: 39


Hi,

Habe in der TAPI Doku keine Info darüber gefunden, wie ein TAP das "current working directory" feststellen kann. Gibt's da eine Lösung zu (eventuell über attr von TYPE_File)?

Danke, Trridy
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: Di 03. Mai 2005, 10:33 Antworten mit Zitat
Trridy
Benutzer
Benutzer
 
Anmeldungsdatum: 11.04.2005
Beiträge: 39


Hallo,

Gibt es wirklich keinen, der dazu was sagen kann? Mir wäre auch schon geholfen, wenn wer sagen würde: "Nein, geht nicht". Dann muß ich mich eben um andere Alternativen umschauen.

Kommt schon, Forumisten. Laßt mich nicht hängen.

Bye, Trridy
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: Di 03. Mai 2005, 10:42 Antworten mit Zitat
Gerti
Team topfield.de
Team topfield.de
 
Anmeldungsdatum: 07.01.2003
Beiträge: 4552
Wohnort: Bielefeld


Hi!

Soweit ich weiss kannst Du das nicht feststellen...
Du musst Dich von der obersten Ebene "hinabarbeiten"...

Gruß,
Gerti

_________________
ImproBox V1.4 - Mehr als eine Alternative zum Original...
Topfield TF5000PVR im Black Panther Gehäuse mit VF Display - Firmware 5.11.88 vom 10. Juni 05 - Samsung SV1604N - Astra / Hotbird - 100cm Gibertini-Schüssel - Humax-LNBs - Ankaro 9/4 Multiswitch - ImproBox - SmartEPG - Nice Display - PBK - Screensaver
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
BeitragVerfasst am: Di 03. Mai 2005, 10:43 Antworten mit Zitat
Lucky B
TAP-Guru
TAP-Guru
 
Anmeldungsdatum: 03.05.2004
Beiträge: 197


Trridy hat folgendes geschrieben::
Hallo,

Gibt es wirklich keinen, der dazu was sagen kann? Mir wäre auch schon geholfen, wenn wer sagen würde: "Nein, geht nicht". Dann muß ich mich eben um andere Alternativen umschauen.

Kommt schon, Forumisten. Laßt mich nicht hängen.

Bye, Trridy


Hi Trridy,

damit Du wenigstens mal eine Antwort hast, schreib ich halt mal was Wink

Also bis jetzt hab ich sowas noch nicht benötigt, deshalb hab ich auch keine Ahnung ob das geht oder nicht Sad

Aber ich kann heute abend mal checken ob ich was finde.

grüße
Lucky B

EDIT: Ups Gerti war schneller Cool
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
BeitragVerfasst am: Di 03. Mai 2005, 13:54 Antworten mit Zitat
Trridy
Benutzer
Benutzer
 
Anmeldungsdatum: 11.04.2005
Beiträge: 39


Hi,

Danke für die Infos. Dann weiß ich ja zumindest, woran ich bin.

Gerti hat folgendes geschrieben::
Du musst Dich von der obersten Ebene "hinabarbeiten"...


Wie meinst du das? Wenn ich ja nicht weiß, in welchem Verzeichnis ich gerade stehe, dann sehe ich auch keine eindeutige Möglichkeit mich dort hinab zu arbeiten. Es sei denn, ich habe für jedes Verzeichnis einen eindeutigen Namen, oder?

@TAP-Gurus
Wäre das nicht auch noch eine TAP-Funktion für einer der kommenden TAP-Releases?

Bye, Trridy
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: Di 03. Mai 2005, 14:05 Antworten mit Zitat
Eber
TAP-Guru
TAP-Guru
 
Anmeldungsdatum: 07.05.2004
Beiträge: 1696
Wohnort: Mainz


Probiere mal das:

static void AWToolGotoRoot(){
word a = 0;
TYPE_File file;
TAP_Hdd_FindFirst(&file);
while ( file.name[0]=='.' && a<32 ) {
if ( TAP_Hdd_ChangeDir("..") != 0 ){
break;
}
a=a+1;
TAP_Hdd_FindFirst(&file);
}
}
Damit kommst Du immer ins Root-Verzeichnis. Der Code kommt ursprünglich nicht von mir - ich habe nur vergessen von wem ich ihn habe Embarassed

_________________
(TF5000PVR mit 250 GB Samsung HD ,nur FreeToAir,Twin-LNB , TAPs: Smartepg, ImproBox)

Nützliche Infos findet man auch im Topfield-Wikipedia. Einfach hier klicken
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: Di 03. Mai 2005, 15:46 Antworten mit Zitat
Lucky B
TAP-Guru
TAP-Guru
 
Anmeldungsdatum: 03.05.2004
Beiträge: 197


Eber hat folgendes geschrieben::

Damit kommst Du immer ins Root-Verzeichnis. Der Code kommt ursprünglich nicht von mir - ich habe nur vergessen von wem ich ihn habe Embarassed



Hi Eber,

der Code kommt von mir, den hatte ich mal im Forum gepostet, da in vielen TAPS das wechseln ins root Verzeichnis mit häufigen aufrufen von wechseln ins nächst höhere Verzeichnis realisiert wurde und das ziemmlich lange dauerte.


gruß
Lucky B
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
BeitragVerfasst am: Di 03. Mai 2005, 16:17 Antworten mit Zitat
Eber
TAP-Guru
TAP-Guru
 
Anmeldungsdatum: 07.05.2004
Beiträge: 1696
Wohnort: Mainz


Dann noch nachträglich ein "Danke schön" - meine ursprüngliche Routine war deutlich langsamer als Deine Methode.

Grüße

Dann spende ich nun auch wieder was Laughing

Code:
static bool AWToolGotoPath(char *path){
   char *startPos;
   char *endePos;
   bool ready;
   AWToolGotoRoot();
   startPos=path;
   if ((*startPos)!='/'){
//Fehler:Pfad beginnt nicht mit /
      return FALSE;
   }
   startPos=startPos+1;
   ready=FALSE;
   while (ready==FALSE){
      endePos=startPos;
      while (((*endePos)!=0) && ((*endePos)!='/')){
         endePos=endePos+1;
      }
      if ((*endePos)==0){
         ready=TRUE;
         TAP_Hdd_ChangeDir(startPos);
      } else {
         (*endePos)=0;
         TAP_Hdd_ChangeDir(startPos);
         (*endePos)='/';
         startPos=endePos+1;
      }
   }
   return TRUE;
}   


Damit kann direkt in einen bestimmten Pfad springen
z.B. mit AWToolGotoPath("/MP3/PinkFloyd") direkt in den Ordner PinkFloyd, egal welches Verzeichnis gerade das aktuelle ist.


Grüße

_________________
(TF5000PVR mit 250 GB Samsung HD ,nur FreeToAir,Twin-LNB , TAPs: Smartepg, ImproBox)

Nützliche Infos findet man auch im Topfield-Wikipedia. Einfach hier klicken
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: Mi 04. Mai 2005, 8:41 Antworten mit Zitat
Trridy
Benutzer
Benutzer
 
Anmeldungsdatum: 11.04.2005
Beiträge: 39


Hallo,

Die Routinen kann ich sicher auch noch gebrauchen Wink Danke dafür. Allerdings helfen diese nicht, mein Problem zu lösen (oder doch?). Ich bräuchte eine Methode den aktuellen Verzeichnisnamen herauszubekommen. Wenn dies möglich ist, könnte ich mich z.B. mit AWToolGotoRoot() hinaufarbeiten und würde so den den kompletten Pfad erhalten.

Bye, Trridy
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: Mi 04. Mai 2005, 9:03 Antworten mit Zitat
Eber
TAP-Guru
TAP-Guru
 
Anmeldungsdatum: 07.05.2004
Beiträge: 1696
Wohnort: Mainz


das wird schwierig....eine Idee (aber seeehr mühsam). Im aktuellen Verzeichnis eine Dummy-Datei anlegen. Eine Verzeichnisebene höher wechseln. Alle direkten Unterverzeichnisse durchsuchen, ob sie die Dummy-Datei enthalten, falls ja diese löschen und Verzeichnisnamen merken und dann das Spiel auf dieser Ebene wiederholen bis im Root angekommen. Unterwegs die gesammelten Verzeichnisnamen zu einem Pfad zusammensetzen. (Und anschließend mit diesem Pfad ggf. wieder in das ursprüngliche Verzeichnis wechseln). Die Performance ist natürlich katastrophal.....

Grüße

_________________
(TF5000PVR mit 250 GB Samsung HD ,nur FreeToAir,Twin-LNB , TAPs: Smartepg, ImproBox)

Nützliche Infos findet man auch im Topfield-Wikipedia. Einfach hier klicken
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: Do 05. Mai 2005, 10:03 Antworten mit Zitat
Trridy
Benutzer
Benutzer
 
Anmeldungsdatum: 11.04.2005
Beiträge: 39


Hi,

@Eber
Hatte diesen Gedanken in ähnlicher Form. Würde die Dummydatei jedoch mit speziellen Namen versehen (z.b. "DirFile"). In dieser ist dann der gesamte Pfad abgelegt. Gibt es keine derartige Datei, wird diese mit deinem Vorschlag erstellt. Somit wäre die Performanceeinbuße nur beim erstmaligen Anlegen der Fall.
Bleibt nur noch das Problem bei einem update zu lösen, wenn ein Verzeichnis umbenannt od. verschoben wird...

@All
Einfacher wäre es, wenn hier von Topfiel eine entsprechene TAP-Funktion bereitgestellt würde. Wie beantrage ich das am besten?

Bye, Trridy
Benutzer-Profile anzeigen Private Nachricht senden
BeitragVerfasst am: So 15. Mai 2005, 16:15 Antworten mit Zitat
DeadBeef
Erfahrener Benutzer
Erfahrener Benutzer
 
Anmeldungsdatum: 28.03.2005
Beiträge: 90
Wohnort: am Schwäbischen Meer


Um den Pfad zu bestimmen, muss man die Startclusternummer des jeweils aktuellen Verzeichnises auf den Dateinamen im übergeordneten Verzeichnis mappen. Beispielcode:
Code:

// The function stores the current working directory to the
// memory pointed to by pPath.
void getCwd(char *pPath)
{
  // two string buffers
  char str1[255];
  char str2[255];
  TYPE_File file;
  char *pStr1 = str1;
  char *pStr2 = str2;
  int rc;
  int i;
  int startCluster;

  strcpy(str1,"/"); // default path

  // The implementation relies on the fact that the first
  // file in a directory is always the "." file (the directory
  // itsself).
  // TODO: Otherwise scan all file names in the directory for "."
  TAP_Hdd_FindFirst(&file);
  // loop until no "." is found (i.e. the current dir is the root)
  while(strcmp(file.name, ".") == 0)
  {
    // remember the start cluster
    startCluster = file.startCluster;

    if(TAP_Hdd_ChangeDir("..") != 0)
    {
      // no parent directory, should not happen
      // TODO: add error handling
      break;
    }

    // find the file with the matching startCluster number
    rc = TAP_Hdd_FindFirst(&file);
    for(i = 1; i < rc; i++)
    {
      if(file.startCluster == startCluster)
      {
        char *pTmp;
        // start clusters match
        // prepend the name
        // TODO: copy operation can be optimized
        strcpy(pStr2,"/");
        strcat(pStr2,file.name);
        strcat(pStr2,pStr1);
        // swap the string pointers
        pTmp = pStr1;
        pStr1 = pStr2;
        pStr2 = pTmp;
        break;
      }

      // get the next file
      TAP_Hdd_FindNext(&file);
    }

    if(i == rc)
    {
      // no matching file found
      // TODO: add error handling
    }

    // get the first file in the current directory
    TAP_Hdd_FindFirst(&file);
  }

  strcpy(pPath,pStr1);
}


Gruß
DeadBeef
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
BeitragVerfasst am: Fr 20. Mai 2005, 19:59 Antworten mit Zitat
Acade
Erfahrener Benutzer
Erfahrener Benutzer
 
Anmeldungsdatum: 19.04.2005
Beiträge: 56
Wohnort: Bayern


Man kann es aber auch rekursiv machen Smile, mit Bufferoverflow-Schutz und im gleichen Verzeichnis bleiben, in dem man vor dem Aufruf war
(Funktion liefert strlen(buf) zurück, bzw. im Fehlerfall <= 0):

Code:

int TAL_Dir_Get (char *buf, int size)
{
   TYPE_File file;
   dword cno;
   int len;

   TAP_Hdd_FindFirst (&file);

   if (strcmp (file.name, ".") || TAP_Hdd_ChangeDir (".."))
   {
      strcpy (buf, "/");
      return (1);
   }

   cno = file.startCluster;
   TAP_Hdd_FindFirst (&file);

   do
   {
      if (file.startCluster == cno)
      {
         if ((size -= (len = strlen (file.name) + 1)) > 0 &&
            (size = TAL_Dir_Get (buf, size)) > 0)
         {
            if (size == 1) size = 0;
            buf[size] = '/';
            strcpy (buf + size + 1, file.name);
            size += len;
         }

         TAP_Hdd_ChangeDir (file.name);
         return (size);
      }
   }
   while (TAP_Hdd_FindNext (&file));

   return (0);
}


Fertig verwendbar von http://acade.au7.de/tal.zip

Viel Spaß damit,
Acade

PS: Der Rest in tal.h kann gerne auch verwendet werden, aber richtige Doku gibt's dafür so schnell nicht. Bleibt aber alles für die Zukunft kompatibel, wenn ich auch noch nicht weiß, wieviel Zeit ich dafür spendieren werde ... Razz

_________________
TF5000PVR / FW 5.11.55
http://acade.au7.de/disasmips.htm
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
BeitragVerfasst am: Sa 21. Mai 2005, 0:03 Antworten mit Zitat
DeadBeef
Erfahrener Benutzer
Erfahrener Benutzer
 
Anmeldungsdatum: 28.03.2005
Beiträge: 90
Wohnort: am Schwäbischen Meer


Embarassed
Uups, mir ist ganz entgangen, dass in meinem Beispiel das ursprüngliche Verzeichnis nicht wiederhergestellt wird.

DeadBeef
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Bestimmen, in welchem Verzeichnis das TAP arbeitet
  TOPFIELD.de Board Foren-Übersicht » TAP
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst Deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst Deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Alle Zeiten sind GMT + 2 Stunden  
Seite 1 von 1  

  
  
 Neuen Beitrag schreiben  Auf Beitrag antworten  



Powered by phpBB 2.0.11 © phpBB Group phpBB Style by Trushkin.net