home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / monitors / rsys / rsysarexx.lha / fd2rsys.rexx next >
OS/2 REXX Batch file  |  1993-09-25  |  6KB  |  224 lines

  1.  
  2. /*
  3. ***************************************************************************
  4. *
  5. * Datei:
  6. *    fd2rsys.rexx
  7. *
  8. * Bemerkungen:
  9. *    Dieses Arexx-Programm erzeugt aus den aktuellen FD-Einträgen
  10. *    Eine für RSys lesbare Datei namens RSysLibOff.dat. Damit kann
  11. *    die Datei ganz einfach an andere AmigaOS-Versionen angepaßt werden.
  12. *
  13. * Erstellungsdatum:
  14. *    25-Sep-93    Rolf Böhme
  15. *
  16. * Änderungen:
  17. *    25-Sep-93    Rolf Böhme    Erstellung
  18. *
  19. ***************************************************************************
  20. */
  21.  
  22. PARSE ARG outputfile
  23. OPTIONS RESULTS
  24.  
  25. IF outputfile = "" THEN outputfile = "T:RSysLibOff.dat"
  26.  
  27.    /*
  28.     * Alle zu lesenden FD-Files
  29.     */
  30. libfd.1.name = "FD:dos_lib.fd"
  31. libfd.2.name = "FD:exec_lib.fd"
  32. libfd.3.name = "FD:expansion_lib.fd"
  33. libfd.4.name = "FD:gadtools_lib.fd"
  34. libfd.5.name = "FD:graphics_lib.fd"
  35. libfd.6.name = "FD:icon_lib.fd"
  36. libfd.7.name = "FD:intuition_lib.fd"
  37. libfd.8.name = "FD:keymap_lib.fd"
  38. libfd.9.name = "FD:layers_lib.fd"
  39. libfd.10.name = "FD:utility_lib.fd"
  40. libfd.11.name = "FD:wb_lib.fd"
  41. libfd.12.name = "FD:console_lib.fd"
  42. libfd.13.name = "FD:input_lib.fd"
  43.  
  44. alldata = 13
  45.  
  46. CR = '0A'X
  47.  
  48. commentline = "###################"
  49.  
  50.    /*
  51.     * Read the Files...
  52.     */
  53. IF OPEN("RSysData", outputfile ,"WRITE") ~= 0 THEN DO
  54.  
  55.       /* 
  56.        * Datei-Header schreiben
  57.        */
  58.    CALL MakeDate dateit
  59.    dateit = RESULT
  60.  
  61.    line = commentline || CR || "# Libraryoffsets für RSys 1.3" || CR
  62.    line = line || "# " || "(Stand: " || dateit || ")"
  63.    WRITELN("RSysData", line)
  64.  
  65.       /* 
  66.        * Alle FD-Dateien auslesen und umformatieren
  67.        */
  68.    DO i = 1 TO alldata
  69.       bias = 0
  70.       public = 1
  71.       closeit = 0
  72.       func = 1
  73.       j = 1
  74.  
  75.       SAY "Reading " libfd.i.name "..."
  76.  
  77.          /* 
  78.           * Den Namen der FD-Datei auslesen und wegschreiben
  79.           */
  80.       line = commentline || CR || "# FD-File: " || libfd.i.name
  81.       WRITELN("RSysData", line)
  82.  
  83.          /* 
  84.           * Den entsprechenden FD-File öffnen
  85.           */
  86.       IF OPEN("fdfile", libfd.i.name, "READ") ~= 0 THEN DO
  87.  
  88.             /* 
  89.              * Den Namen der Library oder des Devices bestimmen und
  90.              * damit den Typ festlegen
  91.              */
  92.          line = READLN("fdfile")
  93.          PARSE VAR line kennung '"' libname '"'
  94.  
  95.          line = "LIBNAME = " || libname
  96.          WRITELN("RSysData", line)
  97.  
  98.          IF INDEX(libname, ".device") ~= 0 THEN line = "TYP = D"
  99.          ELSE
  100.             line = "TYP = L"
  101.  
  102.          WRITELN("RSysData", line)
  103.  
  104.             /* 
  105.              * Alle restlichen Einträge im FD-File auslesen
  106.              */
  107.          DO UNTIL EOF("fdfile") | (closeit = 1)
  108.  
  109.             line = READLN("fdfile")
  110.  
  111.             SELECT
  112.                   /* 
  113.                    * Variablenname der Library auslesen
  114.                    */
  115.                WHEN INDEX(line, "##base") = 1 THEN DO
  116.                   PARSE VAR line kennung " " baselib
  117.                   base = baselib
  118.  
  119.                   line = "BASE = " || base
  120.                   WRITELN("RSysData", line)
  121.                END
  122.  
  123.                   /* 
  124.                    * Ersten Offset der Library festlegen oder
  125.                    * neuen definieren
  126.                    */
  127.                WHEN INDEX(line, "##bias") = 1 THEN DO
  128.                   PARSE VAR line kennung " " biasstr
  129.                   bias = biasstr
  130.                END
  131.  
  132.                   /* 
  133.                    * Typ der Funktion bestimmen, öffentlich oder
  134.                    * Commodore privat
  135.                    */
  136.                WHEN INDEX(line, "##public") = 1 THEN DO
  137.                   public = 1
  138.                END
  139.  
  140.                WHEN INDEX(line, "##private") = 1 THEN DO
  141.                   public = 0
  142.                END
  143.  
  144.                   /* 
  145.                    * Ende der Funktionen einer Library oder eines
  146.                    * Devices
  147.                    */
  148.                WHEN INDEX(line, "##end") = 1 THEN DO
  149.                   closeit = 1
  150.                END
  151.  
  152.                   /* 
  153.                    * Eine Kommentarzeile vom FD-Eintrag in die Datei schreiben
  154.                    * und zur Kontrolle auf dem Bildschirm ausgeben
  155.                    */
  156.                WHEN INDEX(line, "*") = 1 THEN DO
  157.                   PARSE VAR line "*" line
  158.                   IF line ~= "" THEN DO
  159.                      WRITELN("RSysData", "##" || line)
  160.                      SAY "#" || line
  161.                   END
  162.                END
  163.  
  164.                   /* 
  165.                    * Funktion mit derem Offset auslesen
  166.                    */
  167.                OTHERWISE DO
  168.                   PARSE VAR line funct "(" rest
  169.  
  170.                   line = "FUNCTION = " || funct || "," || bias || ","
  171.  
  172.                   IF public = 1 THEN line = line || "1"
  173.                   ELSE line = line || "0"
  174.  
  175.                   WRITELN("RSysData", line)
  176.  
  177.                   j = j + 1
  178.                   bias = bias + 6
  179.                END
  180.  
  181.             END
  182.          END
  183.  
  184.             /* 
  185.              * Ende der Funktionenliste markieren
  186.              */
  187.          line = "END" || CR || commentline
  188.          WRITELN("RSysData", line)
  189.  
  190.          CLOSE("fdfile")
  191.       END
  192.       ELSE
  193.          SAY "Error opening file " libfd.i.name
  194.    END
  195.  
  196.    CLOSE("RSysData")
  197. END
  198. ELSE
  199.    SAY "Error opening file " outputfile
  200.  
  201. EXIT
  202.  
  203.    /* 
  204.     * Diese Prozedur ermittelt das Systemdatum für den Header der
  205.     * Datei RSysLibOff.dat
  206.     */
  207. MakeDate : PROCEDURE
  208. ARG ddd
  209.  
  210. address command "date >T:datefile"
  211.  
  212. succ = Open(df,"T:datefile","READ")
  213. if succ = 0 then do
  214.    okay1 "Das war nix!"
  215.    exit 0
  216. end
  217.  
  218. dateline = READLN(df)
  219. close(df)
  220.  
  221. ddd = subword(dateline,2,1)
  222.  
  223. RETURN ddd
  224.