Autor Thema: Dateien Kopieren aus GFA Basic haraus?  (Gelesen 16042 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline simoncam

  • Benutzer
  • Beiträge: 128
Dateien Kopieren aus GFA Basic haraus?
« am: So 27.09.2015, 07:30:12 »
Hallo! Fühle mich gerade ein bisschen doof.
Bin ich blind oder gibt es das nicht?:
Ich versuche für mein neues STe Spiel ANARCHO RIDE eine kleine Festplatten Installations-Option zu schreiben – in GFA Basic.
Dazu suche ich ein Datei/Verzeichnis kopier Kommando. Aber ich finde keines in der GFA Referenz. Gibt es das nicht oder bin ich blind? (Umbenennen und Löschen gefunden)
Komisch… hab das noch nie gebraucht und gesucht.
(MD-DOS Äquivalent wäre etwa so was: „copy a:\file.prg c:\ARNARCO\“)
Danke für jede Hilfe!

Offline 1ST1

  • Benutzer
  • Beiträge: 8.661
  • Gesperrter User
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #1 am: So 27.09.2015, 10:46:40 »
Ich weiß nicht, ob es dafür eine GEMDOS-Funktion gibt, die du nur aufrufen musst, schau mal ins Profibuch. Ansonsten Quelldatei öffnen, Zieldatei anlegen, Byte-weise lesen und schreiben.
Ausgeloggter Mitleser, der hier NIE mehr aktiv wird. Am besten, meine Inhalte komplett löschen. Dabei berufe ich mich auf mein Urheberrecht, die DSGVO und auf die Rechte, die mir unter Impressunm&Datenschutz zugestanden werden. Tschö!

Offline simonsunnyboy

  • Moderator
  • *****
  • Beiträge: 1.807
  • Rock'n'Roll is the thing - Jerry Lee is the king!
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #2 am: So 27.09.2015, 13:45:13 »
Nein, es gibt keinen direkten Kopierbefehl für Dateien, Sowas musst du dir mit OPEN/CLOSE/BGET/BPUT und Schleifen über die Dateilänge selbstbauen.

Wenn die Dateien klein sind, kannst du es mit geschicktem BLOAD und BSAVE und einem gemeinsamen Puffer mit Längenangabe auch realisieren.
Paradize - ST Offline Tournament
Stay cool, stay Atari!
1x2600jr, 1x1040STFm, 1x1040STE 4MB+TOS2.06+SatanDisk, 1xF030 14MB+FPU+NetUS-Bee

Offline simoncam

  • Benutzer
  • Beiträge: 128
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #3 am: So 27.09.2015, 20:35:11 »
Alles klar! Danke!

Burkhard Mankel

  • Gast
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #4 am: So 27.09.2015, 21:32:17 »
Ich habe mir mal eine kurze Copy-Routine mit "a=INP(#1)" und "? CHR$(a)" (innerhalb einer Scheife - zuvor natürlich Dateien zum Lesen und Schreiben öffnen). Der Gegenpart zu "INP" ist allerdings "OUT", aber damit hatte ich immer Schwierigkeiten! So wird Byteweise kopiert! Auch mit Dauerschleifen (DO ... LOOP) und sowas wie "WHILE UNTIL EOF(#1)=FALSE ... WEND" habe ich Schwierigkeiten - ich setze daher eine "FOR ... NEXT" Schleife ein, nachdem ich die Länge der Quelldatei (Desktop "Zeige Info") abgefragt habe!
In etwa könnte das so aussehen:
cl #1
cl #2
o "I",#1,infile$
o "O",#2,outfile$
f i=1 to {länge infile$}
a=inp(#1)
?#2;chr$(a);
n i
cl 1
cl 2
(hier die Kürzel, die Du eintippen mußt - probiere es mal aus!

edit: Falls die Zeile mit dm Semikolon hinter "?chr$ #2" zu einer Fehlermeldung führt, versuche es mit einem Komma - ich bin mir da nicht ganz sicher!
« Letzte Änderung: So 27.09.2015, 21:42:24 von Burkhard Mankel »

guest3744

  • Gast
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #5 am: So 27.09.2015, 21:57:13 »
Mit Bload und Bsave ist das einfachste.  Natürlich wenn du das Programm weiter gibst, dann musst du es mit Byte lesen und schreiben machen. Weil die Speichergröße  des anderen dir ja nicht bekannt ist

Gruss

Burkhard Mankel

  • Gast
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #6 am: So 27.09.2015, 23:04:19 »
Wieso - die Routine in etwa habe ich schon für viele Doodle-Bilder benutzt - da ist eine FOR NEXT genau mit "FOR i=1 TO 32000" zu beginnen!

edit: Außerdem hatte ich ja geschrieben, daß "Byteweise kopiert wird - "a=INP #1" holt sich ein Byte und speichert den ASCII Code in "a" und "? #2; CHR$(a)" schreibt das Byte dann wieder!
« Letzte Änderung: So 27.09.2015, 23:10:38 von Burkhard Mankel »

Offline 1ST1

  • Benutzer
  • Beiträge: 8.661
  • Gesperrter User
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #7 am: Mo 28.09.2015, 12:41:49 »
Eine For-Schleife kann man machen, aber ich würde einfach eine while-do-Schleife nehmen, die auf EOF (End of File) als Abbruchbedingung prüft. Noch eleganter ist, sich eine feste Blockgröße zu nehmen, die man in einem Rutsch einlesen kann und dann die Dateigröße durch diese Blockgröße zu teilen, und das Ergebnis (ohne Kommastellen) als Endwert für die For-Schleife zu nehmen, und den Rest dann per while-do mit EOF als Abbruchbedingung. Die Blockgröße sollte sinnvollerweise was zwischen Sektorgröße, Clustergröße oder Vielfachem davon sein. Wenn man ganze Blöcke auf einmal einliest, das ist viel schneller und kann DMA nutzen. Mit deiner For-Schrleife und byteweise lesen und schreiben, das wird sehr langsam, weil jeder Sektor für jedes byte erneut angefasst würde, überleg mal was das bedeutet, wenn die Routine zwischen zwei Floppylaufwerken kopieren müsste.
« Letzte Änderung: Mo 28.09.2015, 12:48:35 von 1ST1 »
Ausgeloggter Mitleser, der hier NIE mehr aktiv wird. Am besten, meine Inhalte komplett löschen. Dabei berufe ich mich auf mein Urheberrecht, die DSGVO und auf die Rechte, die mir unter Impressunm&Datenschutz zugestanden werden. Tschö!

Offline simoncam

  • Benutzer
  • Beiträge: 128
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #8 am: Mo 28.09.2015, 13:54:01 »
Ich hab es jetzt mit BLOAD UND BSAVE gelöst.
Vielleicht nicht die "hochwertigste" Lösung, aber es scheint zu funktionieren und ich bekomme damit ein kompaktes Programm hin.
Es wird ein Harddisc Installer für "ANARCHO RIDE" - ein einzelnes Programm, das sowohl die Installation des Grundspiels als auch die der (technisch möglichen) Expansion Packs übernimmt. Idee: das selbe "HDINSTAL.PRG" kommt auf jede Diskette (bzw. Diskimage). Der Rest passiert automatisch.

Wer von Diskette spielen will, muss wechseln. Wer eine Festplatte hat, kann sich alles auf die Festplatte zusammen fassen lassen - und muss sich nicht selbst um das kopieren kümmern. Beides soll möglich sein.

Danke für die Hilfe!

guest3744

  • Gast
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #9 am: Mo 28.09.2015, 15:39:25 »
Es gibt über 999 Wege.....

Gruss

Offline 1ST1

  • Benutzer
  • Beiträge: 8.661
  • Gesperrter User
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #10 am: Mo 28.09.2015, 17:10:05 »
Bitte unbedingt in dem Installer den User den Installationspfad/Partition auswählen lassen. Ich lasse mir nur ungern einfach alles irgendwo hin klatschen.
Ausgeloggter Mitleser, der hier NIE mehr aktiv wird. Am besten, meine Inhalte komplett löschen. Dabei berufe ich mich auf mein Urheberrecht, die DSGVO und auf die Rechte, die mir unter Impressunm&Datenschutz zugestanden werden. Tschö!

Offline simonsunnyboy

  • Moderator
  • *****
  • Beiträge: 1.807
  • Rock'n'Roll is the thing - Jerry Lee is the king!
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #11 am: Mo 28.09.2015, 17:36:45 »
Es gibt über 999 Wege.....

Gruss

..und der von Burkhard ist schnarchlangsam ;)  SCNR

Ja, technisch machbar, aber effizienter ist es, in großen Blöcken zu kopieren.
Paradize - ST Offline Tournament
Stay cool, stay Atari!
1x2600jr, 1x1040STFm, 1x1040STE 4MB+TOS2.06+SatanDisk, 1xF030 14MB+FPU+NetUS-Bee

Offline simoncam

  • Benutzer
  • Beiträge: 128
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #12 am: Di 29.09.2015, 09:07:32 »
Bitte unbedingt in dem Installer den User den Installationspfad/Partition auswählen lassen. Ich lasse mir nur ungern einfach alles irgendwo hin klatschen.

Ja aber selbstverständlich! :) Es ist sogar abgefangen dass nicht irgend ein Depp den Quell-Ordner oder einen Unterordner davon als Ziel angibt. Und ein "ANARCHO" Unterorder im Zielordner kann - muss aber nicht - automatisch angelegt werden!
Und "Expansion Packs" können nur in ein Ziel installiert werden auf dem schon ein ANARCHO Spiel installiert ist.
Ich bin ganz brav! :)

Burkhard Mankel

  • Gast
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #13 am: Di 29.09.2015, 10:02:18 »
..und der von Burkhard ist schnarchlangsam ;)  SCNR

Ja, technisch machbar, aber effizienter ist es, in großen Blöcken zu kopieren.
Mag ja vielleicht sein - aber wie erwähnt, es funzt vortrefflich, während die anderen möglichen Arten aufgrund mangellnder Kenntnis zum korrekten Programmieren immer wieder zu Fehlern führte! Ich habe mir auch mal auf ähnliche Weise ein Vorprogramm zum Diskettiketierer Delta X 2.6 gebastelt, weil mir die maximal möglichen 48 Balkengrafiken für die Hauptseite nicht nicht für alle benötigten Ettiketten ausreichend schien. Delta X lädt beim Start ein Arbeitsbild mit dem Namen AUTOLOAD.SCR, auf dem rechts und links jeweils 12 Schaltflächen für eine Balkengrafik sind, die am Ende den oberen Bereich der Diskettenvorderseite zieren. Mittig davon sieht man im oberen Bereich den eigentlichen Disklabel und unten die "Bedien-Tasten". Mein Vorprogramm vergleicht nun das benötigte Bild mit AUTOLOAD.SCR, um unnötiges Kopiern zu vermeiden (falls bei der letzten Sitzung ein ähnliches Ettikett für die gleiche Rubrik erzeugt worden war) und wenn sie nicht übereinstimmen, wird kopiert. Alles läuft jedenfalls schnell genug ab, so daß ich mir eine kleine Abschlußspielerei einfallen ließ ...

guest3744

  • Gast
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #14 am: Di 29.09.2015, 18:04:59 »
Hallo Burkhard, dein Programm ist aber doch fix.
Wenn ich"OUT #2,a" bei dir setze wird das compilat noch etwas schneller.

Gruss

Burkhard Mankel

  • Gast
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #15 am: Di 29.09.2015, 18:19:14 »
Hallo Burkhard, dein Programm ist aber doch fix.
Wenn ich"OUT #2,a" bei dir setze wird das compilat noch etwas schneller.

Gruss
Ja - und das wäre auch der korrektere Weg! Aber komischer Weise führte genau das führte im Interpreter auch zu Fehlern - leider weiß ich nicht mehr, welcher Art! Mit der Ausgabe über ?#2;chr$(a); hatte ich dann die korrekte Kopie erreicht!
Und gemessen an den Arbeitszeiten heutiger PC-Programmen liefen die Kopieraufgaben am Atari eigentlich immer erschreckend schnell ab!

guest3744

  • Gast
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #16 am: Di 29.09.2015, 21:59:36 »
Ich habe es mit Gfabasic 3.5 und 3.6 zum laufen gebracht.

Lass die Abkürzungen, das Programm ist dadurch schlecht lesbar.

'
infile$="C:\DATEIEN\TEST.TXT"
outfile$="C:\DATEIEN\TEST1.TXT"
'
CLOSE #1
CLOSE #2
OPEN "I",#1,infile$
OPEN "O",#2,outfile$
'
WHILE EOF(#1)=0
  a|=INP(#1)
  OUT #2,a|
WEND
CLOSE #1
CLOSE #2

Gruss

Offline 1ST1

  • Benutzer
  • Beiträge: 8.661
  • Gesperrter User
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #17 am: Di 29.09.2015, 22:30:15 »
Ja, so geht das, aber so wird jedes Byte einzeln aus dem Sektor gelsesen und geschrieben. Für jedes Byte muss zwischen zwei Laifwerken hin und her geschaltet werden. Für jedes Byte muss (ohne Cache) der ganze Sektor auf dem Quelllaufwerk, das Byte rauskopiert werden , dann der Zielsektor auf dem Ziellaufwerk gelesen werden, das einzelne Byte eingefügt werden und der Sektor wieder geschrieben werden. Natürlich wird von TOS gecacht, so dass der Sektor schon im RAM steht, bzw nach soundso vielen Bytes in den Cache der Sektor erst nach einem Timeout oder beim Sektorwechsel geschrieben wird, aber heute muss so programmiert werden, dass auch Multitasking unterstützt werden, und da ist es wahrscheinlich dass ein anderer Task den gecachten Sektor aus dem RAM drängt, und dann wirds langsam. Deswegen sollte man immer 512 Bytes auf einmal einlesen, oder ein Vielfaches davon, Und das auch in einem Rutsch geschrieben werden.
Ausgeloggter Mitleser, der hier NIE mehr aktiv wird. Am besten, meine Inhalte komplett löschen. Dabei berufe ich mich auf mein Urheberrecht, die DSGVO und auf die Rechte, die mir unter Impressunm&Datenschutz zugestanden werden. Tschö!

guest3744

  • Gast
Re: Dateien Kopieren aus GFA Basic haraus?
« Antwort #18 am: Di 29.09.2015, 22:49:23 »
Zitat
aber heute muss so programmiert werden, dass auch Multitasking unterstützt werden

Das GFA-Basic ist für ruhige ST gedacht, danach kommt C...

Wenn ich etwas ernsthaftes machen möchte nehme ich einen PC.
Es ist nur ein Hobby, was funktionieren sollte....Zeit spielt keine Rolle.
Man ist stolz wenn man nach mehreren Wochen mit so einen ST-Knochen ins Internet kommt ohne
Multitask und Timeout.

Nostalgie pur ob Firebee,  Suska Board, MIST-FPGA, Falcon und co und wenn  es hoch kommt mit schlappen 14 MB Speicher , 25 Mhz und 64 MB Festplatte. Da fängt die Kunst wieder an, etwas davon zu machen.

Ich werde mir mal im nächsten Jahr das Suska Board anschaffen.
Bis dahin werkel ich mit dem MIST-FPGA-Board.

Aber ASM Spezies gibt es hier im Forum fast gar nicht.
Es sollte auch mal eine ASM-Ecke hier im Forum geben? Klein anfangen...(Es gibt keine dummen Fragen !)

Gruss