atari-home.de - Foren

Software => Coding => Thema gestartet von: simoncam am So 27.09.2015, 07:30:12

Titel: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: simoncam 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!
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: 1ST1 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.
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: simonsunnyboy 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.
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: simoncam am So 27.09.2015, 20:35:11
Alles klar! Danke!
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: Burkhard Mankel 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!
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: guest3744 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
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: Burkhard Mankel 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!
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: 1ST1 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.
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: simoncam 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!
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: guest3744 am Mo 28.09.2015, 15:39:25
Es gibt über 999 Wege.....

Gruss
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: 1ST1 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.
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: simonsunnyboy 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.
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: simoncam 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! :)
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: Burkhard Mankel 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ß ...
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: guest3744 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
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: Burkhard Mankel 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!
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: guest3744 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
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: 1ST1 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.
Titel: Re: Dateien Kopieren aus GFA Basic haraus?
Beitrag von: guest3744 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