Software > Coding
Loader für mehrere Progs auf einer Disk unter GfA BASIC
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