Seite 1 von 1

Einige Fragen...

Verfasst: Do 8. Jun 2006, 16:57
von schasskistn
Hallo TAP Entwickler,

Bin gerade bei der Entwicklung eines TAPs (wenn es was zu sehen/testen gibt, seit ihr natürlich die Ersten, die es bekommen). Da ich meistens ohne Topf auskommen muss (sitze im Keller, ausserdem bin ich sowieso mehr der Simulationsmensch) hätte ich ein paar Fragen bezüglich dem TAP-SDK:

-Was ist der Unterschied zwischen einem TSR TAP und einem "normal" startenden und beendbaren TAP? Der Hintergrund dieser Frage ist der, das es eigentlich für mich logisch einfacher ist, beim TAP_Main reinzuspringen und bei bestimmten Tasten eben das TAP aufzublenden und wegzumachen. Man würde sich eine Menge Ablauf(un)logik ersparen. GetKey hätte ich mit einer Event Routine gemacht, die eine Variable setzt für einen Tastendruck. Oder gibt der Topf dann irgendwelche Resourcen nicht frei, wenn ich TAP_Main nicht beende?

-Kann ich (und wie) bei den HDD funktionen direkt ein Verzeichnis angeben (zB "IBITSCHIE_SKIN\\singleline.img")? oder muss ich da zuerst in das Verzeichnis wechseln wenn ich darauf zugreifen möchte?

-Muss ich bezüglich StackSize u.ä. aufpassen?

-Kann ich normale String Operationen (string.h) verwenden? Generell, wie schaut es aus mit den Standard Library Sachen? Warum gibt es ein eigenes TAP_SPrint?

mmm, tja, das wars mal fürs Erste. Danke!!

Verfasst: Do 8. Jun 2006, 17:00
von StevieC
schasskistn hat geschrieben:Hallo TAP Entwickler,

Bin gerade bei der Entwicklung eines TAPs (wenn es was zu sehen/testen gibt, seit ihr natürlich die Ersten, die es bekommen).

Aber um was für ein tap es sich handelt kannst du uns schon verraten, oder? ;)

Gruß

StevieC

Verfasst: Do 8. Jun 2006, 17:52
von Happy
schasskistn hat geschrieben: -Was ist der Unterschied zwischen einem TSR TAP und einem "normal" startenden und beendbaren TAP? Der Hintergrund dieser Frage ist der, das es eigentlich für mich logisch einfacher ist, beim TAP_Main reinzuspringen und bei bestimmten Tasten eben das TAP aufzublenden und wegzumachen. Man würde sich eine Menge Ablauf(un)logik ersparen. GetKey hätte ich mit einer Event Routine gemacht, die eine Variable setzt für einen Tastendruck. Oder gibt der Topf dann irgendwelche Resourcen nicht frei, wenn ich TAP_Main nicht beende?
Prinzipiell geht das wohl, und ich habe auch schon mal ein solches Demotap gesehen. Da wurde im Eventhandler nur ein Flag für den Tastendruck gesetzt und im TAP_Main alles gemacht. Man muß dann nur selbst dafür sorgen, oft genug die Kontrolle an andere TAPs zu übergeben mit TAP_SystemProc (oder so ähnlich).
Da man sowieso auf Tastenevents wartet, ist das mit dem Eventhandler normalerweise eleganter.
schasskistn hat geschrieben: -Kann ich (und wie) bei den HDD funktionen direkt ein Verzeichnis angeben (zB "IBITSCHIE_SKIN\\singleline.img")? oder muss ich da zuerst in das Verzeichnis wechseln wenn ich darauf zugreifen möchte?
Man muß in das Verzeichnis wechseln, und kann dann erst die Datei aufmachen.
schasskistn hat geschrieben: -Kann ich normale String Operationen (string.h) verwenden? Generell, wie schaut es aus mit den Standard Library Sachen? Warum gibt es ein eigenes TAP_SPrint?
Die Stringoperationen scheinen alle zu funktionieren. sprtintf und Konsorten gehen nicht, sind daher in der Topfieldlibrary drin. Warum das so ist, weiß ich auch nicht

Mit dem Stack hatte ich noch keine Probleme, mehr weiß ich dazu nicht.

Gruß,
Happy

Verfasst: Do 8. Jun 2006, 18:58
von Jetson
schasskistn hat geschrieben: -Was ist der Unterschied zwischen einem TSR TAP und einem "normal" startenden und beendbaren TAP? Der Hintergrund dieser Frage ist der, das es eigentlich für mich logisch einfacher ist, beim TAP_Main reinzuspringen und bei bestimmten Tasten eben das TAP aufzublenden und wegzumachen. Man würde sich eine Menge Ablauf(un)logik ersparen. GetKey hätte ich mit einer Event Routine gemacht, die eine Variable setzt für einen Tastendruck. Oder gibt der Topf dann irgendwelche Resourcen nicht frei, wenn ich TAP_Main nicht beende?

Im Prinzip hast Du Recht. Wenn Du in TAP_Main() zyklisch TAP_SystemProc() aufrufst, reagiert dein TAP auch auf Tastendrücke der FB o.ä.
Es gibt aber einen wichtigen Grund, dein TAP als TSR zu starten:
Solange ein TAP läuft, das nicht als TSR gestartet wurde, liefert TAP_GetState() in state immer STATE_Tap zurück. Du würdest dadurch alle anderen TAPs blockieren die auf irgendwelche speziellen Systemstati warten (siehe Definition von TYPE_State in TAP.H). Obige Methode eignet sich deshalb nur für TAPs die auch wieder beendet werden und nicht permanent im Hintergrund laufen sollen.

Verzeichniswechsel

Verfasst: Do 8. Jun 2006, 19:47
von Elle4u
Und ein Verzeichniswechsel geht nicht - wie in der API beschrieben - mit "/".

Du kannst das aktuelle Verzeichnis auch nicht abfragen.

Daher habe ich hier die folgende Routine:

Code: Alles auswählen

void AWToolGotoRoot( void ){ //wechsel von überall in das Rootverzeichnis
	word a=0;      // avoid deadlocks
	TYPE_File file;
	TAP_Hdd_FindFirst(&file);
	while ((strcmp(file.name, "__ROOT__") != 0) && (a < 32)) {
		TAP_Hdd_ChangeDir("..");
		TAP_Hdd_FindFirst(&file);
		a++;
	}
}

//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.
bool AWToolGotoPath(char *path){ 
   char *startPos; 
   char *endePos; 
   bool ready; 
   AWToolGotoRoot(); 
   startPos=path; 
   if ((*startPos)!='/'){ //Fehler :P fad 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; 
}    

Evtl. hilft Dir das ja schonmal :up:

Verfasst: Do 8. Jun 2006, 22:18
von aledoe
In welchen Verz. ist man denn, wenn man ein TAP (im Applikationsmodus) startet? Das hier: TAP_Hdd_ChangeDir( "/MP3/Gift" ); hat bei mir nämlich komischerweise funktioniert ... :thinker:
Nur der hier: TAP_Hdd_ChangeDir( "/" ); funktioniert nicht.
Hängt das davon ab welschen Topf man hat?

Verfasst: Fr 9. Jun 2006, 09:59
von schasskistn
Suppi! Danke erstmal für die vielen Antworten.

@Happy: das mit dem DemoTAP war warscheinlich eh das von mir, ich habs bisher immer so gemacht, allerdings habe ich noch kein "echtes" TAP geschrieben, das mit einer Taste aufgerufen wird und wieder in den Hintergrund geschoben werden kann.

@Jetson: danke, ich werde also doch ein "echtes" TSR TAP machen :)

@Elle4u: Danke für den Source! Ich werde ihn, sofern du kein Problem damit hast, in meine TAP Routinensammlung (wo halt meine ganzen Hilfsfunktionen drinnen sind) aufnehmen.

@SteveC: Eigentlich möchte ich noch nicht verraten was ich für ein TAP schreibe, weil ich mir nicht sicher bin, ob ich die Zeit habe, es auch fertigzubringen. Ich bin jetzt, nach dem Release unseres Albums, ein bisschen eingeteilt für die Band, da weiss ich nicht, obs sobald mal was wird. Sorry!

Verfasst: Fr 9. Jun 2006, 10:11
von Elle4u
schasskistn hat geschrieben: @Elle4u: Danke für den Source! Ich werde ihn, sofern du kein Problem damit hast, in meine TAP Routinensammlung (wo halt meine ganzen Hilfsfunktionen drinnen sind) aufnehmen.
Kein Problem.

habe das selbst irgendwo zusammengesucht und evtl. hier und da nur ein wenig modifiziert... :wink: