home *** CD-ROM | disk | FTP | other *** search
-
- /*
- ***************************************************************************
- *
- * Datei:
- * fd2rsys.rexx
- *
- * Bemerkungen:
- * Dieses Arexx-Programm erzeugt aus den aktuellen FD-Einträgen
- * Eine für RSys lesbare Datei namens RSysLibOff.dat. Damit kann
- * die Datei ganz einfach an andere AmigaOS-Versionen angepaßt werden.
- *
- * Erstellungsdatum:
- * 25-Sep-93 Rolf Böhme
- *
- * Änderungen:
- * 25-Sep-93 Rolf Böhme Erstellung
- *
- ***************************************************************************
- */
-
- PARSE ARG outputfile
- OPTIONS RESULTS
-
- IF outputfile = "" THEN outputfile = "T:RSysLibOff.dat"
-
- /*
- * Alle zu lesenden FD-Files
- */
- libfd.1.name = "FD:dos_lib.fd"
- libfd.2.name = "FD:exec_lib.fd"
- libfd.3.name = "FD:expansion_lib.fd"
- libfd.4.name = "FD:gadtools_lib.fd"
- libfd.5.name = "FD:graphics_lib.fd"
- libfd.6.name = "FD:icon_lib.fd"
- libfd.7.name = "FD:intuition_lib.fd"
- libfd.8.name = "FD:keymap_lib.fd"
- libfd.9.name = "FD:layers_lib.fd"
- libfd.10.name = "FD:utility_lib.fd"
- libfd.11.name = "FD:wb_lib.fd"
- libfd.12.name = "FD:console_lib.fd"
- libfd.13.name = "FD:input_lib.fd"
-
- alldata = 13
-
- CR = '0A'X
-
- commentline = "###################"
-
- /*
- * Read the Files...
- */
- IF OPEN("RSysData", outputfile ,"WRITE") ~= 0 THEN DO
-
- /*
- * Datei-Header schreiben
- */
- CALL MakeDate dateit
- dateit = RESULT
-
- line = commentline || CR || "# Libraryoffsets für RSys 1.3" || CR
- line = line || "# " || "(Stand: " || dateit || ")"
- WRITELN("RSysData", line)
-
- /*
- * Alle FD-Dateien auslesen und umformatieren
- */
- DO i = 1 TO alldata
- bias = 0
- public = 1
- closeit = 0
- func = 1
- j = 1
-
- SAY "Reading " libfd.i.name "..."
-
- /*
- * Den Namen der FD-Datei auslesen und wegschreiben
- */
- line = commentline || CR || "# FD-File: " || libfd.i.name
- WRITELN("RSysData", line)
-
- /*
- * Den entsprechenden FD-File öffnen
- */
- IF OPEN("fdfile", libfd.i.name, "READ") ~= 0 THEN DO
-
- /*
- * Den Namen der Library oder des Devices bestimmen und
- * damit den Typ festlegen
- */
- line = READLN("fdfile")
- PARSE VAR line kennung '"' libname '"'
-
- line = "LIBNAME = " || libname
- WRITELN("RSysData", line)
-
- IF INDEX(libname, ".device") ~= 0 THEN line = "TYP = D"
- ELSE
- line = "TYP = L"
-
- WRITELN("RSysData", line)
-
- /*
- * Alle restlichen Einträge im FD-File auslesen
- */
- DO UNTIL EOF("fdfile") | (closeit = 1)
-
- line = READLN("fdfile")
-
- SELECT
- /*
- * Variablenname der Library auslesen
- */
- WHEN INDEX(line, "##base") = 1 THEN DO
- PARSE VAR line kennung " " baselib
- base = baselib
-
- line = "BASE = " || base
- WRITELN("RSysData", line)
- END
-
- /*
- * Ersten Offset der Library festlegen oder
- * neuen definieren
- */
- WHEN INDEX(line, "##bias") = 1 THEN DO
- PARSE VAR line kennung " " biasstr
- bias = biasstr
- END
-
- /*
- * Typ der Funktion bestimmen, öffentlich oder
- * Commodore privat
- */
- WHEN INDEX(line, "##public") = 1 THEN DO
- public = 1
- END
-
- WHEN INDEX(line, "##private") = 1 THEN DO
- public = 0
- END
-
- /*
- * Ende der Funktionen einer Library oder eines
- * Devices
- */
- WHEN INDEX(line, "##end") = 1 THEN DO
- closeit = 1
- END
-
- /*
- * Eine Kommentarzeile vom FD-Eintrag in die Datei schreiben
- * und zur Kontrolle auf dem Bildschirm ausgeben
- */
- WHEN INDEX(line, "*") = 1 THEN DO
- PARSE VAR line "*" line
- IF line ~= "" THEN DO
- WRITELN("RSysData", "##" || line)
- SAY "#" || line
- END
- END
-
- /*
- * Funktion mit derem Offset auslesen
- */
- OTHERWISE DO
- PARSE VAR line funct "(" rest
-
- line = "FUNCTION = " || funct || "," || bias || ","
-
- IF public = 1 THEN line = line || "1"
- ELSE line = line || "0"
-
- WRITELN("RSysData", line)
-
- j = j + 1
- bias = bias + 6
- END
-
- END
- END
-
- /*
- * Ende der Funktionenliste markieren
- */
- line = "END" || CR || commentline
- WRITELN("RSysData", line)
-
- CLOSE("fdfile")
- END
- ELSE
- SAY "Error opening file " libfd.i.name
- END
-
- CLOSE("RSysData")
- END
- ELSE
- SAY "Error opening file " outputfile
-
- EXIT
-
- /*
- * Diese Prozedur ermittelt das Systemdatum für den Header der
- * Datei RSysLibOff.dat
- */
- MakeDate : PROCEDURE
- ARG ddd
-
- address command "date >T:datefile"
-
- succ = Open(df,"T:datefile","READ")
- if succ = 0 then do
- okay1 "Das war nix!"
- exit 0
- end
-
- dateline = READLN(df)
- close(df)
-
- ddd = subword(dateline,2,1)
-
- RETURN ddd
-