AtarimaniaAtarimania

Atari ST - ?

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

Header-Umwandlung von RCS-Files für GFA-Basic 3.0 — screenshot 1
1 / 3
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
Germany
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