Atari ST - ?
Header-Umwandlung von RCS-Files für GFA-Basic 3.0

- Genre
- Programming - Aids / Routines / Tools
- Year
- —
- Language
- GFA BASIC
- Publisher
- [no publisher]
- Controls
- Mouse
- Distributor
- —
- Resolution
- Medium / High
- Developer
- [n/a]
- ST Type
- ST, STe / 0.5MB
- Licensed from
- —
- Programmer(s)
- Pichlmaier, Günther
- Country

- MIDI
- —
- Software
- German
- Version
- 2.0
- Box/Instructions
- German
- Number of Disks
- 1 / Double Sided / HD Installable
- License
- PD / Freeware / Shareware
- Dump
- Download
- Serial
- —
- Dump format
- MSA
- Protection
- —
INSTRUCTIONS
Header-Umwandlung von RCS-Files für GFA-Basic 3.0
Auf der Diskette des Interpreters GFA-Basic 3.0 liegt der Resource-Editor
von Digital Research in der Version 2.0 vor. Die bevorzugte Verwendung von
RSC-Files bietet sich durch die im Interpreter enthaltenen AES-Routinen an.
Durch Sie wird die Programmierung und die Pflege benutzerfreundlicher Prog-
gramme einfacher und einheitlicher.
Wie bereits in dem Kurs zum GFA-Basic 3.0 erlaütert müssen allen Objekten
die im Programm angesprochen werden sollen Namen gegeben werden.
Die Ausgabe der Namen erfolgt als Header File für C oder als LST File für
Basic. Ist dabei die programmtechnische Verarbeitung für viele Objekte
gleich, so ist es sinnvoll die Verarbeitung in einer Procedure durchzu-
führen und die Objekte über Indizes anzusprechen. Dadurch wird die prog-
technische Verarbeitung kürzer, einfacher und leichter durchschaubar(siehe
Beispiel SCHALTER auf Diskette). Da in den Masken der RCS eine Eingabe
von Sonderzeichen nicht erlaubt ist ist ein kleiner Patch am zugehörigen
RSC File nötig, der im Folgenden noch näher beschrieben wird.
Das Programm übernimmt anschließend die Aufbereitung jeder einzelnen Zeile
und die Dimensionierungen der verwendeten Array's, so daß das erzeugete
*.LST File nur noch mit MERGE ins eigentliche Programm eingebunden
werden muß.
Änderung am RCS V2.0 von DR (ist auf Diskette des Basic Interpreters):
Das RSC-file RSC2 in das RCS-Programm laden ,in den Objektbäumen
16,17,18,19,20 das Editfeld für Namenseingabe durch Doppelklick
öffnen, und dort die Maske von annnnnnn auf axxxxxxx ändern. Nach
Abspeichern des geänderten RSC2-Files können ab sofort auch () im
Namen anthalten sein (z.B. TASTE(1) ).
Sicherheitshalber an einer Kopie der Orginaldiskette ausprobieren !
Wenn Sie andere Resource Editoren bevorzugen:
1)Am RCP des Megamax-LASER-C sind keine Änderungen erforderlich
2)Beim Kuma Resource-Editor sind ebenfalls die Masken die Namenseingaben
erlauben auf axxxxxxx zu ändern.(Objektbäume durchsuchen !)
Bild 1 zeigt das danach vom RCS2 gelieferte LST File.
LET BAUM&=0 !RSC_TREE
LET S(1)&=3 !Obj in #0
LET S(2)&=4 !Obj in #0
LET S(3)&=5 !Obj in #0
LET S(4)&=6 !Obj in #0
LET S(5)&=7 !Obj in #0
LET S(6)&=8 !Obj in #0
LET S(7)&=9 !Obj in #0 Bild 1.
LET S(8)&=10 !Obj in #0
LET E_EINGAB&=12 !Obj in #0
LET B_OK&=16 !Obj in #0
LET F_UPDATE&=17 !Obj in #0
LET S_AUSGAB&=18 !Obj in #0
LET B_ENDE&=19 !Obj in #0
LET TEST&=1 !RSC_TREE
Die anderen RSC-Editoren erzeugen normalerweise nur Header
Files für C, Pascal, Fortran. Ein C-Header-File des KUMA RCS
zeigt Bild 2.
/* Resource-Set indicies fuer SCHALTER */
#define Baum 0 /* Formula/Dialog */
#define S(1) 3 /* BOXCHAR in Baum Baum */
#define S(2) 4 /* BOXCHAR in Baum Baum */
#define S(3) 5 /* BOXCHAR in Baum Baum */
#define S(4) 6 /* BOXCHAR in Baum Baum */
#define S(5) 7 /* BOXCHAR in Baum Baum */
#define S(6) 8 /* BOXCHAR in Baum Baum */ Bild 2.
#define S(7) 9 /* BOXCHAR in Baum Baum */
#define S(8) 10 /* BOXCHAR in Baum Baum */
#define E_eingab 12 /* FTEXT in Baum Baum */
#define B_Ok 16 /* BUTTON in Baum Baum */
#define F_update 17 /* BOX in Baum Baum */
#define S_ausgab 18 /* STRING in Baum Baum */
#define B_ende 19 /* BUTTON in Baum Baum */
#define Test 1 /* Formula/Dialog */
Um für beide Fälle eine Arbeitserleichterung für Basic Programmierer
zu schaffen wurden zwei Programme entwickelt die die entsprechenden
Umformungen und die Dimensionierung der Array's erledigen( H_UMWAND.GFA
für die C-Header Umwandlung aller gängigen Resource-Construktion-Set's
und LST_WAND.GFA für die Umwandlung der LST-Header des RCS2 von DR).
Den Output von LST_WAND.GFA zeigt Bild 3.
'Dimensionierung von Feldern für Resource-Datei:
DIM S&(8)
'
LET BAUM&=0 !RSC_TREE
LET S&(1)=3 !Obj in #0
LET S&(2)=4 !Obj in #0
LET S&(3)=5 !Obj in #0
LET S&(4)=6 !Obj in #0
LET S&(5)=7 !Obj in #0
LET S&(6)=8 !Obj in #0
LET S&(7)=9 !Obj in #0 BILD 3.
LET S&(8)=10 !Obj in #0
LET E_EINGAB&=12 !Obj in #0
LET B_OK&=16 !Obj in #0
LET F_UPDATE&=17 !Obj in #0
LET S_AUSGAB&=18 !Obj in #0
LET B_ENDE&=19 !Obj in #0
LET TEST&=1 !RSC_TREE
'
' Ende der Resource Headerdatei
Den Output von H_UMWAND.GFA zeigt Bild 4.
'Dimensionierung von Feldern für Resource-Datei:
DIM S&(8)
'
' Resource-Set indicies fuer SCHALTER
'
LET Baum&= 0 ! Formula Dialog
LET S&(1)= 3 ! BOXCHAR in Baum Baum
LET S&(2)= 4 ! BOXCHAR in Baum Baum
LET S&(3)= 5 ! BOXCHAR in Baum Baum
LET S&(4)= 6 ! BOXCHAR in Baum Baum
LET S&(5)= 7 ! BOXCHAR in Baum Baum
LET S&(6)= 8 ! BOXCHAR in Baum Baum Bild 4.
LET S&(7)= 9 ! BOXCHAR in Baum Baum
LET S&(8)= 10 ! BOXCHAR in Baum Baum
LET E_eingab&= 12 ! FTEXT in Baum Baum
LET B_Ok&= 16 ! BUTTON in Baum Baum
LET F_update&= 17 ! BOX in Baum Baum
LET S_ausgab&= 18 ! STRING in Baum Baum
LET B_ende&= 19 ! BUTTON in Baum Baum
'
LET Test&= 1 ! Formula Dialog
'
'
'
' Ende der Resource Headerdatei
Nach dem MERGE der gelieferten LST Files mit dem Verarbeitungsprogramms
sind die Leerzeilen und Blanks nach dem = entfernt und der Kommentar steht
in Spalte 30.
Das Listing in Bild 5 zeigt den Kern von LST_WAND.GFA. Das um Sicher-
heitsabfragen, Prüfungen, Ausgabe von Information auf Bildschirm
erweiterte Programm und das Programm H_UMWAND.PRG sind auf Diskette
enthalten.
Nach schreiben einer Überschrift und Selektion des umzuwandelden Files
wird das bestehende LST-File in .BAK umbenannt und Platz für den Ausgabetext
reserviert. Anschließend wird jede Zeile eingelesen und nach markanten
Zeichen durchsucht. Für jedes gefundene Array wird der Name und die Größe
in der Procedure Array festgestellt. Sind alle Ausgabezeilen zusammen-
gebastelt, werden noch die Dimensionierungen der Array's an den Anfang
geschrieben und der gesamte Text mit STORE auf Diskette geschrieben.
Das Listing in Bild 6 stellt ein Beispiel für die sinnvolle Verwendung
von Array's in Dialogboxen dar.
Bild 6.
' * Umwandlung der HEADER - Datei aus dem RSC *
'
DEFWRD "a-z"
DO
CLS
PRINT " ";CHR$(27);"p";" RCS LST - UMWANDLUNG für GFA-Basic V 1.0 von Günther Pichlmaier ";CHR$(27);"q"
PRINT
PRINT " Welche LST-HEADER-Datei soll umgewandelt werden ?"
FILESELECT "\*.LST","",a$ ! Datei LST oder BAK auswählen lassen
IF a$="" OR a$="\" ! bei leerer Auswahl
END ! Programm beenden
ENDIF ! Abbruch wurde angewählt
datei$=LEFT$(a$,LEN(a$)-3)+"BAK" ! alten Dateinamen ändern
RENAME a$ AS datei$ ! alte Datei umbenennen
OPEN "i",#1,datei$ ! Datei zum Lesen öffnen
'
DIM out_string$(10000) ! Zwischenspeicher für Ausgabe
DIM dim_arrays$(100)
DIM array_groesse(100)
' ! des LST-Files
CLR zeilen,arrays ! Zeilen-, Array- Zähler löschen
WHILE NOT EOF(#1) ! bis Ende der Datei von Disc lesen
INPUT #1,x$ ! Zeile einlesen (bis CRLF)
INC zeilen ! Zeilen-Zähler erhöhen
' Zeilen in Bereiche aufteilen
marke1=INSTR(x$,"(")
marke2=INSTR(x$,")")
marke3=INSTR(x$,"&")
marke4=INSTR(x$,"!")
IF marke1
GOSUB array ! Stelle
teil1$=LEFT$(x$,marke1-1)+"&" ! bis zur geöffneten Klammer
teil2$=MID$(x$,marke1,marke3-marke1) ! bis vor &
teil3$=MID$(x$,marke3+1,marke4-marke3-1) ! & ausblenden
teil4$=RIGHT$(x$,LEN(x$)-marke4+1) ! Kommentar
out_string$(zeilen)=teil1$+teil2$+teil3$+SPACE$(30-marke4)+teil4$
ELSE
IF marke4
out_string$(zeilen)=LEFT$(x$,marke4-1)+SPACE$(30-marke4)+RIGHT$(x$,LEN(x$)-marke4+1)
ELSE
out_string$(zeilen)="'"
ENDIF
ENDIF
PRINT out_string$(zeilen)
WEND
' Array Dimensionierungen ausgeben
IF arrays
INC zeilen
INSERT out_string$(0)="'Dimensionierung von Feldern für Resource-Datei:"
PRINT out_string$(0)
FOR i=1 TO arrays
INC zeilen
INSERT out_string$(i)="DIM "+dim_arrays$(i)+"&("+STR$(array_groesse(i))+")"
PRINT out_string$(i)
INC zeilen
INSERT out_string$(i+1)="'"
NEXT i
ENDIF
INC zeilen
OPEN "o",#2,a$ ! Datei zum Schreiben öffnen
STORE #2,out_string$(),zeilen ! Textfile schreiben
CLOSE ! alle Dateien schließen
LOOP UNTIL abbruch! ! bis Abbruch Button
CLEAR
END
'
PROCEDURE array
'
array_name$=UPPER$(MID$(x$,5,marke1-5))! Name des zu Dimensionierenden Arrays
groesse=VAL(MID$(x$,marke1+1)) ! ( => akt. Größe des "
FOR i=0 TO arrays ! Suchschleife für bereits
gefunden!=FALSE ! für bereits gespeicherte Namen
IF array_name$=dim_arrays$(i)
array_groesse(i)=MAX(array_groesse(i),groesse)
gefunden!=TRUE ! nach Größenkorrektur ausstieg
ENDIF
EXIT IF gefunden!
NEXT i
IF NOT gefunden! ! wenn nicht vorhanden
INC arrays ! Array-Zähler hochsetzen
dim_arrays$(arrays)=array_name$ ! und Erstinformation
array_groesse(arrays)=groesse ! übernehmen
ENDIF
RETURN
