JiffyDOS File Copy im BASIC Code

  • Hallo zusammen.


    Ich spiele gerade etwas mit den JiffyDOS Kommandos rum. JiffyDOS hat je ein eingebautes File Copy, d.h. per /$ (Directory als Liste laden) und dann CTRL+A bzw. CTRL+W kann man ja die zu kopierenden Files markieren und auf eine per "@X Devicenummer" definiertes Ziellaufwerk speichern. Das ganze funktioniert auch im BASIC Code ebenfalls ungefähr so:


    Code
    1. 10 fi$="datei"
    2. 20 sd=8:dd=9:REM Quell und Ziellaufwerk
    3. 30 @X+dd:REM Ziel einstellen
    4. 40 *fi$PRG:REM COPY


    Interessant ist hierbei für mich jetzt Zeile 40. Über eine String Variable kann ich verschiedene Dateinamen zum kopieren verwenden. Allerdings muss auch der Datei Typ (PRG / SEQ / USR / REL) mit angehängt werden.
    Packe ich das in eine Variable, sagen wie ty$ und würde Zeile 40 so ändern:


    Code
    1. 40 *fi$+ty$

    dann wird zwar kopiert, die Datei auf dem Ziellaufwerk hat dann aber als Filetyp SEQ anstatt PRG. Habe das auch schon mit Semikolon fi$;ty$ und Werten wie fi$,1 versucht. Entweder Syntax Error oder im Ziel ist eine SEQ Datei.
    Wie bekomme ich das mit den unterschiedlichen Filetypen hin ?


    Und 2. Schritt: Könnte man die Zeile 40 irgendwie "maskieren", damit das wie ein "richtiger" BASIC Befehl, z.B. für einen Compiler aussieht ?

  • Code
    1. 40 *fi$+ty$

    dann wird zwar kopiert, die Datei auf dem Ziellaufwerk hat dann aber als Filetyp SEQ anstatt PRG. Habe das auch schon mit Semikolon fi$;ty$ und Werten wie fi$,1 versucht. Entweder Syntax Error oder im Ziel ist eine SEQ Datei.
    Wie bekomme ich das mit den unterschiedlichen Filetypen hin ?

    Das "*"-Kommando braucht die Typ-Angabe so, wie sie auch in einem geladenen Directory vorkommt, nämlich direkt als Buchstaben im Basic-Text. Mit Basic-Variablen funktioniert das also nicht.
    Aber Du kannst versuchen, den Typ als ",p" bzw. ",s" direkt an den Namensstring anzuhängen, das ist die DOS-Syntax, die Jiffy auch intern erzeugen würde. In Deinem Beispielcode müsste ty$ also nicht "prg", sondern ",p" enthalten. Tatsächlich kann man den Typ auch ausschreiben, aber das Komma ist wichtig.

  • Nein leider nicht. Das endet in einem Type Mismatch Error in Zeile 40, alternativ in einem Device not present Error, je nachdem wie ich das mache.


    Probiert:
    - ty$=",p" -> 40 *fi$(1)+ty$ und auch mal ;ty$ und auch direkt dran fi$(1)ty$ auch per fi$(1),ty$


    ebenso:
    - ty$="p" -> 40 *fi$(1)+ty$ und auch mal ;ty$ und auch direkt dran fi$(1)ty$ auch per fi$(1),ty$


    Ich habe die Befürchtung, dass das leider für BASIC Code nicht brauchbar ist.

  • Code
    1. 10 fi$(1)="datei":ty$="prg"
    2. 20 c$=fi$(1)+ty$
    3. 40 *c$

    Das führt dann zu:
    Source: File not found
    Destination: 31 Syntax Error


    Ersetze ich ty$="prg" mit z.B. ",p" führt das zu Device not present und im Ziel 31 Syntax Error.
    :(

  • Aber

    Code
    1. 40 *fi$ ty$


    legt ein SEQ File an, obwohl TY$=" PRG"

    Ein T ist ja auch kein P. Was in der Variable steht interessiert den Interpreter nicht, der Jiffy-File-Copier-Code schaut einfach nach dem Buchstaben in der BASIC-Zeile.

  • Ich habe die Befürchtung, dass das leider für BASIC Code nicht brauchbar ist.

    Da CMD damit geworben hat, dass sämtliche JiffyDOS-Funktionalität auch von Basic-Programmen aus verfügbar ist, muss das gehen. ;)


    Ich hab soeben mal ein ganz unorthodoxes Sakrileg begangen: Ich hab die Anleitung konsultiert. Und siehe da:

    Quote from CMD
    Code
    1. if ty$ = "p" then * na$ prg
    2. if ty$ = "s" then * na$ seq
    3. if ty$ = "u" then * na$ usr
    4. if ty$ = "r" then * na$ rel

    Ta-Daa! Was hab ich gewonnen?

  • Tja schade, mir sind zwar die für den Kopiervorgang vorgesehenen Dateinamen und Dateitypen bekannt, d.h. die ändern sich nicht,
    aber für mein "Bauchgefühl beim programmieren" ist das nicht akzeptabel Fliename und Typ im Code fix vorzugeben für rund 60 Files.
    Selbst das ganze aus DATA Zeilen auszulesen scheint nicht zu funktionieren.


    Und selbst wenn ich das je Datei im Code so unterbringe wie JiffyDOS das erwartet, dann hat mein Blitz Compiler ein Problem damit.
    Entweder bringt die Codezeile dann einen Syntax Error beim kompilieren, oder der Code wird zwar als Extension erkannt aber nicht richtig ausgeführt (Ziellaufwerk wird nicht gefunden).


    Dann werde ich wohl doch was in ML stricken müssen. Schade.

  • OK wow, kann es kaum fassen. Es geht inkl. Blitz Kompilat !


    Also für alle Interessieren, die ggf. mal so was ähnliches machen wollen, hier der knappe Quellcode:


    Kurze Erklärung: Die beiden Doppelpunkte vor den JiffyDOS Befehlen sind nötig, damit der Blitz Compiler diese als "Extension" erkennt und keinen Syntax Error beim kompilieren ausgibt.
    Warum auch immer, wurden gerade nur die Zeilen 40 - 43 als Extension erkannt, 27 und 30 nicht. Prgramm läuft hinterher trotzdem.
    Zeile 27 ist nötig, damit JiffyDOS vom richtigen Laufwerk aus startet. Getestet von Laufwerk 10 aus.


    Wer mag, kann sich das nun um eine Directory Einleseroutine erweitern, oder ggf. die Dateien und Typen in z.B. DATA Zeilen ablegen und per FOR...NEXT einlesen.


    Spaßeshalber noch das kompilierte Programm im Anhang.


    Danke an alle die geholfen haben ! :thumbup: