



                 D E R   R E S O U R C E - T O - C - W A N D L E R
                 =================================================



                                        von

                                 Dieter Fiebelkorn
                                  Grner Weg  29a
                              4370 Marl 1  (Brassert)

                       (Entwickelt mit dem Turbo-C Compiler)
                    (Idee und die rsrc_load-Routine entstammen
                    der ST-Computer Dezember '87 Seite 129 f.)


                            >>>>  PUBLIC - DOMAIN  <<<<





 Dieses Programm wird vielleicht vielen C Programmierer helfen mit Resourcen
 zu arbeiten.
 
 So kann zum Beispiel ein Programm entwickelt werden, da ganz auf
 externe Resourcen verzichten kann.
 Dazu werden einfach die Resoucen mit diesem Wandler geladen und auf
 Wunsch bearbeitet und abgespeichert. Das gespeicherte File hat die
 Form einer C-Source, die lediglich compiliert und zu dem eigentlichen
 Programm hinzugelinkt werden mu. Das Hauptprogramm mu nicht abgendert
 werden, da der Aufruf der rsrc_load und "rsrc_free" - Routine 
 syntaktisch mit den Betriebssystemfunktionen bereinstimmt.

 Eine andere Mglichkeit besteht darin die "#include" - Anweisungen
 der erzeugten Source zu entfernen und die Source selbst als Include-
 File fr das Hauptprogramm zu benutzen.

 Weiterhin wird nach dem Laden der Resource eine Kurzinformation der
 Resource angezeigt, es ist der sogenannte Resource-Header.

 
 ACHTUNG  : FALLS EIN EDITOBJEKT GLEICHZEITIG AUCH DAS LASTOBJEKT EINES
 =======    BAUMES IST KOMMT DAS BETRIEBSSYSTEM DURCHEINANDER.
            ES IST DANN MGLICH DIE EDITIERFELDER DES IM SPEICHER FOLGENDEN
            BAUMES ZU BENUTZEN.
            NACH ABSCHLU DER EDITIERARBEITEN KANN ES ZUM ABSTURZ KOMMEN
            FALLS DIESE UNERLAUBTEN EDITIERFELDER BENUTZT WURDEN.
            DA DIE RESOURCE-CONSTRUCTION-SET'S DIESEN UMSTAND SCHEINBAR NICHT
            BEACHTEN EMPFIEHLT ES SICH IN DER C-SOURCE EINE UMGRUPPIERUNG DER
            OBJEKTE VORZUNEHMEN. (VORAUSSETZUNG IST, DA SIE BER DEN GENAUEN
            AUFBAU EINES OBJEKTBAUMES BESCHEID WISSEN.
            UND VERGESSEN SIE NICHT EVTL. DIE '*.H'-DATEI ZU NDERN ODER BEI
            ERGNZUNGEN UND EINFGUNGEN DIE "BAUMADRESSEN" ABZUNDERN
            'rs_trindex' !!!)
            




 ACHTUNG : "FREE_IMAGES" und "FREE_STRINGS" werden nicht untersttzt !




 
 Noch zwei Tips:
     1. Wollen Sie eine interne und externe Resource benutzen, so benennen
        Sie die Routinen der erzeugten Source um z.B. in r_load bzw. r_free
        und sichern Sie die evtl. schon bestehende Resource.


            extern int     global[];
            static int     rsrcload_flag = 0;
            static int     rsrcsave_flag = 0;               <<-- Einfgen
            static OBJECT  rsc_save;                        <<-- Einfgen



            T0OBJ = 12;
            :
            :

            /*        ========= Resource-Load-Segment =========          */

            int r_load (RscFile)
            char *RscFile;
            {
            int         dx,
                        dy,
                        Obj;

            OBJECT  **GEM_rsc;

            GEM_rsc = (OBJECT **) &global[5];
            if (rsrcsave_flag == 0)                             <<-- Einfgen
            {                                                   <<-- Einfgen
                rsc_save = *GEM_rsc;                            <<-- Einfgen
                rsrcsave_flag = 1;                              <<-- Einfgen
            }                                                   <<-- Einfgen
            *GEM_rsc = (OBJECT *) &rs_trindex[0];
 
            if (rsrcload_flag == 0)
            {
            :
            :
            }
        }

        int r_free ()
        {
            OBJECT  **GEM_rsc;

            if (rsrcsave_flag == 1)                             <<-- Einfgen
            {                                                   <<-- Einfgen
                GEM_rsc = (OBJECT **) &global[5];               <<-- Einfgen
                *GEM_rsc = rsc_save;                            <<-- Einfgen
                rsrcsave_flag = 0;                              <<-- Einfgen
            }                                                   <<-- Einfgen
            return(1);
        }



     2. Wollen Sie jedoch zwei interne Resource benutzen, so mssen Sie 
        zustzlich die Variablen einer "Resource" umbenennen.




 Ich wnsche viel Spa mit dem

                      RESOURCE-TO-C-WANDLER


                                                        D I E T E R






 P.S.   : Wie schon angefhrt entstannt die Idee dieses Wandles beim Lesen
          des Artikels der aus des ST-Computer die rsrc_load - Routine wurde
          diesem Artikel entnommen und fr dieses Programm in geeigneter
          Weise modifiziert und in ein, wie ich glaube, sinnvolles Programm
          integriert.

          Ich hoffe auf Verstndnis bei dem Autoren dieses Artikel und beim
          Heim-Verlag.


 P.P.S. : Fr Angabe von Fehlern in diesem Programm und Verbesserungs-
          vorschlgen wre ich sehr dankbar.
            (Bei Fehlern bitte eine mglichst genaue Beschreibung des
             Vorganges der zu dem Fehler fhrte)





~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                              Vorliegende Dateien
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


    - RSC_TO_C.PRG  : "Das Programm ! "
    - README.TXT    : "Schon gelesen. (hoffe ich jedenfalls)"

