Beiträge von Omega im Thema „Disk-Befehl Scratch funktioniert in manchen Vice-Versionen nicht richtig?“
-
-
Dann darfst du dich zumindest nicht auf den Output des Fehlerkanals verlassen und brauchst etwas komplett neues welches auf allen Systemen funktioniert, inklusive dem "echten" C64

Im Moment habe ich nur zwei Test-Systeme.
1.) TheC64 (Mini)
2.) VICE 3.3
Die liefern beim Löschen leicht andere Daten im Fehlerkanal.
Da ich z.Z. keine anderen Testsysteme zur Verfügung habe, nehme ich das vorerst als Grundlage für meine Programmierung.
Wenn sich später gravierende Probleme mit anderen Systemen herausstellen, dann muss ich das dann sehen und updaten.
Wahrscheinlich bin ich aber ohnehin der einzige, der das Programm benutzt. Daher lasse ich das mal auf mich zukommen...
-
if b$ = "files scratched" then print b$":",c

Das funktioniert dann aber nicht mit dem TheC64. Der liefert nämlich im Fehlerkanal beim Löschen einer nicht existierenden Datei:
b$="file not found", c=01
Da würde bei Deinem Code dann stehen: (Gar nichts.)
Im Grunde ging es mir ja darum, meine Komfortfunktionen (ob sinnvoll oder nicht sei mal dahingestellt) so umzusetzen, dass sie sowohl auf dem TheC64 als auch mit VICE 3.3 funktionieren.
-
...aber die sinnvolle Vorgehensweise wäre die, den Laufwerksstatus zu holen und diesen einfach nur unverändert dem Benutzer anzuzeigen.
Ich weiß nicht wie Du programmiertst. Aber ich persönlich versuche immer meine Vorstellungen von einem Programm so umzusetzen, wie ich es mir in meinem Konzept ausgedacht habe. Und nicht irgendwie anders weil das einfacher und/oder bequemer ist.
Im konkreten Fall: Wenn der Anwender eine Datei löscht, die nicht existiert, dann würde das nach Deiner sinnvollen Vorgehensweise zu der Meldung führen:
01, files scratched, 00, 00
Und der unbedarfte C64 Anwender denkt dann: "Toll. 1 Datei gelöscht."
Was natürlich nicht stimmt. Aber woher soll er das wissen?
Wenn die Meldung hingegen lautet: Fehler beim Löschen: Datei nicht gefunden. dann weiß sogar ein Anfänger, was damit gemeint ist.
Aber jeder hat da anscheinend seine eigenen Vorstellungen. Ich verwende gerne etwas Zeit darauf, ein Programm für den Anwender besser verständlich zu machen. Wieso auch nicht? Ich hab's ja nicht eilig. (Zumindest nicht bei meinen privaten Entwicklungen.)
-
Und der Kontext? Schreibst Du gerade sowas wie eine DOS SHELL?
Der Kontext ist ein Zeichensatzeditor. Der hat Funktionen für:
1.) Directory anzeigen
2.) Datei speichern
3.) Datei laden
4.) Datei löschen
5.) Datei umbenennen
Und nochmal: ist das Ergebnis, ob die Datei(en) jetzt gelöscht ist (bzw. sind), für den erfolgreichen(!) Weiterbetrieb(!!) des Programms in irgendeiner Weise relevant?
Ja.
Wenn der Anwender eine Datei löschen will, die gar nicht existiert, dann bekommt er nach derzeitigem Stand der Dinge in VICE 3.3 die Meldung:
LOESCHEN ERFOLGREICH
(ANZAHL = 1)
Auf dem TheC64 bekommt er hingegen die Meldung
FEHLER BEIM LOESCHEN:
FILE NOT FOUND
Kann sein, dass das manch einen nicht stören würde. Aber mich stört es.
Aber ich krieg das schon in den Griff. Ich musste nur erstmal verstehen, was da los ist und warum die falsche Anzeige auftritt.
Das ist jetzt nur noch eine Frage der Zeit, bis ich das gelöst habe. Danke für Deine Hilfe.
-
Mike: Es geht nicht um das Erzeugen einer neuen Dateien. Das funktioniert sowohl in VICE als auch auf dem TheC64. Es geht nur um das reine Löschen.
Bis jetzt habe ich das so geprüft:
Wenn b$="files scratched" dann: alles okay. Anzahl der gelöschten Dateien = a.
Wenn b$<>"files scratched" dann: Fehler beim Löschen. Konkrete Fehlermeldung = b$ (z.B. "file not found", "disk full" usw.).
Jetzt muß ich das ein bisschen umstricken damit beide VICEs zufrieden sind.
-
-
-
-
Das heißt ja, dass man je nach verwendetem VICE mal mit "Files Scratched" und mal mit "File not Found" rechnen muss.
Du kennst nicht zufällig eine Methode, wie man trotz unterschiedlicher Vice-Versionen zu einem allgemeingültigen Resultat kommen kann?
Du brauchst zum Lesen der Fehlermeldung übrigens keinen zweiten Kommandokanal zu öffnen. Die Meldung kannst Du in deinem Beispiel auch in File Bitte melde dich an, um diesen Link zu sehen. abrufen, wenn Du die Zeilen 20 und 50 wegläßt, und Zeile 30 auf 30 INPUTBitte melde dich an, um diesen Link zu sehen.,... änderst.
Ach, so. Das wusste ich nicht. Danke für den Tipp.
-
Ich habe hier zwei Systeme an denen ich mich vergnüge:
1.) Einen Ubuntu PC mit Vice 3.3
2.) Einen TheC64 Mini mit aktueller Firmware 1.6.1.
Meistens benutze ich den TheC64 Mini.
Mir ist aufgefallen, wenn ich den Disk-Befehl zum Löschen sende, dann verhalten die sich unterschiedlich.
Beispiel: Ich habe eine Diskette auf der keine Datei namens "hallo" vorhanden ist.
Dann lasse ich den folgenden Code im V2 BASIC laufen:
Code10 open1,8,15,"s:hallo" 20 open2,8,15 30 input#2,a,b$,c,d 40 print a;b$;c;d 50 close2 60 close1Auf dem PC mit Vice Emulator bekomme ich im Fehlerkanal folgende falsche Rückmeldung:
01, FILES SCRATCHED, 00, 00
Auf dem TheC64 Mini bekomme ich hingegen folgende richtige Rückmeldung:
62, FILE NOT FOUND, 01, 00
Das Verhalten des VICE-Emulators auf dem PC ist offenbar falsch. Auf dem TheC64 Mini ist es hingegen richtig.
Es ist auch egal, ob ich beim PC "True Drive Emulation" ein- oder ausgeschaltet habe. Das Resultat ist immer verkehrt.
Wie ist das bei euch? Ist das ein gängiger Fehler in Vice? Oder hab ich ein Brett vorm Kopf?