Software > Coding

Loader für mehrere Progs auf einer Disk unter GfA BASIC

<< < (3/4) > >>

simonsunnyboy:
Wenn die Datei größer als das Inline ist, dann wird soviel geladen, wie ins Inline passt, also abgeschnitten. 32034 reichen für ein normales Degasbiild.

Die Organisationsstruktur auf deiner Disk kannst Du frei wählen, mein Menu soll dir nur als Beispiel und Anregung dienen.

Burkhard Mankel:
Also - vor ein paar Tagen hatte ich mir gedacht, hier mal wieder weiterzhumachen und wollte Euch meine Copyroutinen vorstellen, umk vielleicht noch Verbesserungsvorschläge oder anderes zu "ernten", da fiel mir auf: Kopieren ist eigentlich eine nicht unbedingt gute Lösung. Erstens nicht gerade Diskschonend und dann vor allem Platzraubend! Die bessere Lösung ist es wohl, Dateien umzubenennen. Da der Autor - nochmals Besten Dank an ihn - des zur Verfügung gestellten PaketOrdners weiter oben zusagte:

--- Zitat von: simonsunnyboy am Di 30.07.2013, 19:16:06 ---Bis auf das Degasbild (welches speziell für Paradize gemacht und von mir angepasst wurde) darfst du gerne alle Teile direkt wiederverwenden.
--- Ende Zitat ---
... habe ich mich daran gemacht, seinen Quelltext entsprechend anzupassen. Hier nun die evtl. Lösung (um ein bißchen was erläutern zu können, hatte ich Zeilennummern zugefügt):

--- Code: ---128 PROCEDURE launch_program(entry%)
129   CLS
130   SDPOKE &HFFFF8240,&H0
131   SDPOKE &HFFFF825E,&H777
132   SELECT entry%
133   CASE 1
134     center("Original")
135     file$="A:\GRAPHICS\AIRFLOW.DA"
136     infile$=file$+"1"
137     IF EXIST(infile$)
138       @newname
139     ENDIF
140     file$="A:\GRAPHICS\BDATA.DA"
141     infile$=file$+"1"
142     IF EXIST(infile$)
143       @newname
144     ENDIF
145   CASE 2
146     center("Other Levels")
147     file$="A:\GRAPHICS\AIRFLOW.DA"
148     infile$=file$+"2"
149     IF EXIST(infile$)
150       @newname
151     ENDIF
152     file$="A:\GRAPHICS\BDATA.DA"
153     infile$=file$+"2"
154     IF EXIST(infile$)
155       @newname
156     ENDIF
157   CASE 3
158     center("Patching")
159     file$="A:\GRAPHICS\AIRFLOW.DA"
160     infile$=file$+"3"
161     IF EXIST(infile$)
162       @newname
163     ENDIF
164     file$="A:\GRAPHICS\BDATA.DA"
165     infile$=file$+"3"
166     IF EXIST(infile$)
167       @newname
168     ENDIF
169   CASE 4
170     center("Ultra Light")
171     file$="A:\GRAPHICS\AIRFLOW.DA"
172     infile$=file$+"4"
173     IF EXIST(infile$)
174       @newname
175     ENDIF
176     file$="A:\GRAPHICS\BDATA.DA"
177     infile$=file$+"4"
178     IF EXIST(infile$)
179       @newname
180     ENDIF
181   CASE 5
182     ' center("Bubble Bobble 2")
183     ' EXEC 0,"BUBBLE_2.PRG","",""
184   CASE 6
185     ' EXEC 0,"PARABOOT.PRG","",""
186   ENDSELECT
187   EXEC 0,"A:\BUBBLE.PRG","",""
188 RETURN
189 '
...
...
...
364 PROCEDURE newname
365   oldfile$=file$+"T"
366   FOR i=1 TO 4
367     newfile$=file$+STR$(i)
368     EXIT IF NOT EXIST(newfile$)
369   NEXT i
370   RENAME oldfile$ AS newfile$
371   RENAME infile$ AS oldfile$
372 RETURN
373 '
--- Ende Code ---
Erst einmal ein Beispiel: Ich hatte irgendwann als Letztes die Originalversion (Wahl 1) geladen gehabt. Dann müßten als maßgebliche Dateien AIRFLOW... ...DAT, ...DA2, ...DA3 und ...DA4 sowie equivalent BDATA (DAT, DA2, DA3, DA4) Nun möchte ich die Ultra Light Version (Wahl 4) spielen. Bezugnemende Programmzeilen: 170-180!
In 170 lege ich erst einmal für AIRFLOW die nicht zuverändernde Zeichenkette fest.
Die IF Anweisung (171-173) soll veststellen, ob AIRFLOW.DA4 vorhanden ist und da das nach meinem Beispiel der Fall ist in die Routine zum Umbenennen gesprungen, Nach der Rückkehr die gleiche Prozedur für BDATA.DA4.
In der Umbenennungsroutine versuche ich erstmal festzustellen, welch Datei fehlt. Das mache ich per FOR ... NEXT Schleife, die ich bei nicht vorhanden sein mit der EXIT IF NOT Anweisung ausbreche
Wenn die korrekten Dateien vorliegen startet das Hauptprogramm

Bin ich damit auf einem richtigen Wege oder was muß ich ändern?

1ST1:
Eine Menudisk wo man den Schreibschutz offen halten muss, fänd ich nicht so prickelnd. Kann man die verschiedenen Programmversionen nicht einfach in separate Ordner packen? Oder reicht es dann wegen teilweise doppelten Dateien platzmäßig nicht aus?

Burkhard Mankel:

--- Zitat von: 1ST1 am Di 06.08.2013, 08:42:49 ---Eine Menudisk wo man den Schreibschutz offen halten muss, fänd ich nicht so prickelnd. Kann man die verschiedenen Programmversionen nicht einfach in separate Ordner packen? Oder reicht es dann wegen teilweise doppelten Dateien platzmäßig nicht aus?

--- Ende Zitat ---
Es handelt sich um vier verschiedene Versionen eines Spiels - dh einmal das Original, dann eine mit veränderten Leveln und dann zwecks Erleichterter Spielmöglichkeiten von mir veränderte Versionen. Das Hauptprogramm im AUTO Ordner lädt zwei RSC vom Root, vobei in der über 50k großen "BUB1.RSC" die weiteren Dateinamen stehen. Mein erster Weg war, das Hauptprogramm aufs Root zu verschieben und 3x zu kopieren und unter neuen Dateinamen ablegen, mit Diskmonitor nach BUB1.RSC gesucht, und verändert, daß für die verschiedenen Versionen verschiedene RSC's genutzt werden können. Danach in den verschiedenen BUB1 nach den Dateinamen gesucht, deren Inhalt unterschiedlich ist und alles entsprechend angepaßt. Dann viel mir auf, daß mit kopieren sehr viel Diskspace sehr viel Diskplatz (etwa 200k) eingespart werden kann. Und durch Umbenennen läßt sich noch weiteres einsparen ...

1ST1:
Naja, aber solange ohne Schriebzugriffe alles auf eine Disk passt, ist es doch auch gut, oder?

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln