/* $VER: Version 1.66 (.08.97) by Thorsten Willert * * FinalWriter-ARexx-Macro, zur automatischen Generierung von Schrift-Listen um * einen Überblick der Schriften in einem Verzeichnis zu gewinnen. * ---------------------------------------------------------------------------------------- */ ADDRESS = 'FinaW' OPTIONS CACHE RESULTS STATUS PORTNAME FW = RESULT ADDRESS = FW SIGNAL ON BREAK_C SIGNAL ON HALT /*------------------------------------------------------*/ R='0A'X Found = 0 Info.Version = "Version 1.66" Info.Date = "19.08.1997" Info.Copyright = "© 1997, by Thorsten Willert" Tmp.Files = "T:FileListe_AFL.TMP" Tmp.Fonts = "T:FontListe_AFL.TMP" Tmp.LOG = "T:Font-Auto-List.LOG" Prefs.Prefs = "AutoFontList.prefs" Prefs.Suffix = "AutoFontListSuffix.prefs" RT.Title = "Auto-Font-List:" RT.Para1 = "rtez_flags = ezreqf_centertext" RT.Para2 = "rt_pubscrname = FinalWriterPubScreen rtfi_flags = freqf_nofiles" /*------------- HAUPTPROGRAMM ---------------------------- ---------------------------------------------------------*/ IF ~show('L',"rexxreqtools.library") THEN DO IF ~addlib('rexxreqtools.library',0,-30,0) THEN DO 'ShowMessage 1 1 "Fehler ..." "Benötige RexxReqTools.library!" "" "Abbruch !!" "" ""' EXIT END END IF ~show('L',"datatypes.library") THEN DO IF ~addlib('datatypes.library',0,-30,0) THEN DO rtezrequest("Fehler .... "||R, "Benötige datatypes.library!","Abbruch",RT.Title,RT.Para1) EXIT END END /*---------------------------------------------------------*/ CALL PrefsLoad1 CALL PrefsLoad2 rtezrequest( RT.Title || R ||, Info.Version || "," || R ||, "© 1997 by Thorsten Willert" || R || R ||, "Macro um eine Übersicht über" || R ||, "seine Schriften zu erhalten","_Weiter|_Optionen","FinalWriter-Macro:",RT.Para1) IF rtresult = 0 THEN CALL Startoptionen rtezrequest("Das Macro braucht ein leeres Dokument!" || R ||, "Das aktuelle löschen?","_löschen|_Abbruch",RT.Title,RT.Para1) IF rtresult == 1 THEN ClearDoc Force ELSE CALL BREAK_C IF Protokoll =1 & EXISTS( Viewer ) THEN OffenLOG = OPEN( LOG, Tmp.LOG,"W") ELSE OffenLOG = 0 CALL Verzeichniswahl ADDRESS command Sortiere Tmp.Files Tmp.Files ADDRESS(FW) OffenDatei1 = OPEN( Datei1,Tmp.Files,"R" ) OffenDatei2 = OPEN( Datei2,Tmp.Fonts,"W") CALL Dateianalyse CLOSE( Datei1 ) CLOSE( Datei2 ) ADDRESS command Sortiere Tmp.Fonts Tmp.Fonts OffenDatei3 = OPEN(Datei3,Tmp.Fonts,"R") IF SEEK( Datei3,0,"E" ) = 0 THEN DO CALL NoFonts CALL Ende END SEEK(Datei3,0,"B") CALL Deckblatt Status ParaPos ParaPos1 = result CALL Schriftausgabe CLOSE( Datei3 ) Status ParaPos ParaPos2 = result IF ParaPos1 ~= ParaPos2 THEN CALL Rahmen ELSE DO ClearDoc Force CALL NoFonts CALL Ende END MoveToLine 1 0 IF Speed=1 THEN View 100 ScreenToFront CALL Ende /*---------------------------------------------------------*/ /* ---------- PROGRAMMENDE ------------------------*/ EXIT /* Unterroutinen: */ /* --------------------------------------------------------*/ Startoptionen: Title = rtgetstring('Schriftprobe','Überschrift des Dokuments:',RT.Title,'_Weiter',RT.Para1) IF Title = "" THEN Title = "Schriftprobe" IF FullAuto = 1 THEN RETURN rtezrequest('Schriftidentifikation:','_Keine|_Datei|_Pfad+Datei',RT.Title,RT.Para1) SchriftID = rtresult rtezrequest('Schrift-Typ ausgeben' || R ||, '(wenn möglich)?','_Ja|_Nein','Auto-Font-List:',RT.Para1) SchriftTyp= rtresult rtezrequest('Bildschirmausgabe:','_schnell|_normal',RTTitle,RT.Para1) Speed = rtresult RETURN /*---------------------------------------------------------*/ Verzeichniswahl: dir=rtfilerequest("FWFonts/SWOLFonts/",,"Verzeichnis auswählen...",,RT.Para2) IF dir="" THEN DO rtezrequest("Kein Verzeichnis ausgewählt!" || R ||, "Macro wird abgebrochen","_Weiter",RT.Title,RT.Para1) EXIT END rtezrequest('Mit Unterverzeichnissen?','_Nein|_Ja',RT.Title,RT.Para1) Rekursiv = rtresult IF Rekursiv == 1 THEN DO dir=d2c(34)||dir||d2c(34) ADDRESS command 'list ' dir ' to= ' Tmp.Files || ' files lformat "%s%s"' END ELSE DO dir=d2c(34)||dir||d2c(34) ADDRESS command 'list ' dir ' to= ' Tmp.Files || ' all files lformat "%s%s"' IF FullAuto = 1 THEN SchriftID = 0 END IF OPEN('file',Tmp.Files,"R") THEN DO IF Seek("file",0,"E")=0 THEN DO rtezrequest("Verzeichnis ist leer!" || R ||, "Macro wird abgebrochen","_Weiter",RT.Title,RT.Para1) ADDRESS "REXX" CLOSE("file") EXIT END END ADDRESS "REXX" CLOSE("file") RETURN /*---------------------------------------------------------*/ Deckblatt: IF Speed=1 THEN View 20 GetDocItemPrefs Decimal Punkt=RESULT IF Punkt="Comma" THEN DocItemPrefs Decimal Period Pagesetup Pagetype SeitenG Orient Tall Pages RightOnly PrinterType Drucker Top 0.4763 Bottom 0.9 Number ByDocument SectionSetup Top 2.54 Bottom 2.54 Inside 3 Outside 3 FirstPage 1 PageNumFormat RomanUpper Footer 1.5 MPageOpt AllPages Justify Center Style Underline Font DocTitleFont Fontsize 14 Type DocTitle ||R Justify Left Style Normal NewParagraph Verzeichnis = STRIP(dir,"B",'"') VerzeichnisL = LENGTH(Verzeichnis) Font DocFont FontSize 12 IF UPPER(DocInfoLine1) = "DEFAULT" THEN type "Schriften in: "Verzeichnis ||R ELSE type DocInfoLine1 ||R IF UPPER(DocInfoLine2) = "DEFAULT" THEN type "Schriftgröße: 12"||R||R||R||R ELSE type DocInfoLine2 ||R||R||R||R RETURN /*---------------------------------------------------------*/ Dateianalyse: DO FOREVER Datei=READLN( Datei1 ) IF EOF( Datei1 ) THEN DO CLOSE( Schrift ) RETURN END CALL EXAMINEDT(Datei,dtStem.,STEM) CALL SuffixFilter( Datei ) IF Iter = 1 THEN ITERATE IF POS("BINARY",dtStem.DataType) = 0 &, POS("ascii",dtStem.DataType) = 0 THEN ITERATE OffenSchrift = OPEN(Schrift,Datei,"R") IF OffenSchrift THEN DO Zeile=READCH(Schrift,2000) ZeileGreat = UPPER(Zeile) CALL Adobe1Filter IF Iter = 1 THEN ITERATE IF POS("ascii",dtStem.DataType) ~= 0 THEN ITERATE CALL NimbusQFilter IF Iter = 1 THEN ITERATE CALL SaveDateiInfos( RealFontName Datei FontType) ITERATE END END RETURN /*---------------------------------------------------------*/ SuffixFilter: PROCEDURE EXPOSE ExklDateien Iter PARSE ARG Zeile Iter = 0 PunktPos = LASTPOS(".",Zeile) IF PunktPos = 0 THEN RETURN FontNameGreat = UPPER( Zeile ) FontNameGreatLange=LENGTH(FontNameGreat) Suffix = RIGHT(FontNameGreat,FontNameGreatLange-PunktPos) IF Suffix = "PFB" THEN RETURN SELECT WHEN FIND(ExklDateien,Suffix) ~= 0 THEN Iter = 1 WHEN FontNameGreat = " " THEN Iter = 1 OTHERWISE NOP END RETURN Iter /*---------------------------------------------------------*/ Adobe1Filter: AdobeStartPos = POS( "FONTNAME",ZeileGreat ) /* Adobe-Font-Analyse */ SELECT WHEN AdobeStartPos > 1 THEN DO Zeile2 = SUBSTR( Zeile,AdobeStartPos ) Zeile2 = DELSTR( Zeile2,1,9) RealFontName = SUBWORD( Zeile2,1,1) RealFontName = STRIP( RealFontName, "B", "/" ) RealFontName = STRIP( RealFontName, "L", "(" ) /* leider auch in Klammern */ Pos2 = POS( ")", RealFontName) Lang = LENGTH(RealFontName) RealFontName = STRIP( RealFontName, "B", ')' ) IF Pos2 ~= Lang & Pos2 > 3 THEN RealFontName = DELSTR( RealFontName, Pos2, Lang-Pos2+1 ) FontType = "Adobe-Type-1, " CLOSE( Schrift ) Iter = 1 END OTHERWISE DO FontType = "" RealFontName = "" CLOSE( Schrift ) Iter = 0 RETURN END END CALL SaveDateiInfos( RealFontName Datei FontType) RETURN /*---------------------------------------------------------*/ NimbusQFilter: RealFontName = "" SELECT WHEN POS( "ISOLATIN1 ENCODING",ZeileGreat ) > 1 THEN DO FontType="NimbusQ, " CLOSE(Schrift) Iter=1 END OTHERWISE DO FontType="" CLOSE(Schrift) RETURN END END CALL SaveDateiInfos( RealFontName Datei FontType) RETURN /*---------------------------------------------------------*/ SaveDateiInfos: pos = max(index(Datei,':'),lastpos('/',Datei)) IF (pos~=0) THEN FontName=RIGHT(Datei, LENGTH(Datei)-pos) IF RealFontName = "" THEN RealFontName = FontName IF OldRealFontName = RealFontName THEN RETURN IF RenameFile = 1 THEN DO IF RealFontName ~= FontName THEN DO IF OffenLOG THEN WRITELN( LOG, "Der Name von" RealFontName "weicht vom Dateinamen" FontName "ab." ) IF RenameFForce = 0 THEN DO rtezrequest(" Der Name von:" ||R, RealFontName ||R, "weicht vom Dateinamen:"||R, FontName "ab." ||R||R, "Datei umbenennen?","_Ja|Nein",RT.Title) IF rtresult == 1 THEN CALL RenFont END IF RenameFForce = 1 THEN Call RenFont END END RealFontName=TRANSLATE(RealFontName,"#"," ") Datei=TRANSLATE(Datei,"#"," ") FontName=TRANSLATE(FontName,"#"," ") SchriftNamen = RealFontName Datei FontName FontType IF OffenDatei2 THEN WRITELN( Datei2,SchriftNamen ) OldRealFontName = RealFontName RETURN /*---------------------------------------------------------*/ Schriftausgabe: DO FOREVER Iter = 0 FontT = "" ADDRESS(FW) Status NumFonts IF RESULT = SchriftenMax + 3 THEN CALL Zwischenspeichern ADDRESS "REXX" DateiInfo=ReadLn(Datei3) PARSE VAR DateiInfo RealFontName FontName DateiName1 FontType RealFontName=TRANSLATE(RealFontName," ","#") DateiName=TRANSLATE(DateiName1," ","#") FontName=TRANSLATE(FontName," ","#") IF EOF(Datei3) THEN DO CLOSE(Datei3) RETURN END IF FontName = "" THEN ITERATE ADDRESS(FW) TextTool IF SuffixLearn = 1 & Found = 1 THEN DO CALL SuffixFilter( FontName ) IF Iter = 1 THEN ITERATE END Font FontName a=RC IF a=10 & SuffixLearn = 1 THEN CALL FWNotLoad( DateiName1, Found) IF a=0 THEN DO Font DocFont Type RealFontName IF SchriftTyp = 1 THEN FontT = FontType SELECT WHEN SchriftID=2 THEN DO FontSize 8 Type " ( "FontT || DateiName" )"||R END WHEN SchriftID=0 THEN DO FontName2 = SUBSTR( FontName,VerzeichnisL ) FontSize 8 Type " ( "FontT || FontName2" )"||R END OTHERWISE NewParagraph END FontSize 12 Font FontName Type BeispielText||R||R END END END RETURN /*---------------------------------------------------------*/ Rahmen: Address(FW) Justify Right Font SoftSans_Italic FontSize 6 Type "erstellt mit Auto-Font-List," Info.Copyright Status Pages Seiten=RESULT GetPageSetup Width Height PARSE VAR RESULT BWidth BHeight B1Height = BHeight - 8.6 B2Height = BHeight - 5.8 BWidth = BWidth - 4.1 BoxPrefs TextFlow None Fill Transparent LineWt RahmenDicke DrawBox 1 2 5.29 BWidth B1Height Rahmen IF Seiten > 1 THEN DO DO I=2 TO Seiten DrawBox I 2 2.5 BWidth B2Height Rahmen END END RETURN /*---------------------------------------------------------*/ FWNotLoad: PROCEDURE EXPOSE PrefsDatei2 ExklDateien Found SuffixLearnS LOG OffenLOG PARSE ARG Datei IF OffenLOG THEN WRITELN( LOG , Datei ' konnte FinalWriter nicht als Schrift laden.' ) PunktPos = LASTPOS(".",Datei) IF PunktPos = 0 THEN DO Found = 0 RETURN END FontNameGreat = UPPER( Datei ) FontNameGreatLange=LENGTH(FontNameGreat) Suffix = RIGHT(FontNameGreat,FontNameGreatLange-PunktPos) IF FIND(ExklDateien,Suffix) ~= 0 THEN RETURN ELSE DO ExklDateien = ExklDateien Suffix Found = 1 IF OffenLOG THEN WRITELN( LOG, 'Neues Suffix erlernt:' Suffix ) END RETURN /*---------------------------------------------------------*/ PrefsLoad1: /* Prefs Laden */ IF EXISTS( "ENV:" || Prefs.Prefs ) THEN CALL LoadPrefs1 ELSE DO OffenDatei5 = OPEN( Datei5, "ENVARC:" || Prefs.Prefs, "W") WRITELN( Datei5, '/* $VER AutoFontList-Prefs: ' Info.Version ' */' ) /* Parameter bezogen auf FullAuto */ WRITELN( Datei5, 'FullAuto = 1') WRITELN( Datei5, 'SchriftID = 2') WRITELN( Datei5, 'SchriftTyp = 1') WRITELN( Datei5, 'SuffixLearn = 1') WRITELN( Datei5, 'SuffixLearnS = 0') WRITELN( Datei5, 'Speed = 1') /* Dateien umbenennen */ WRITELN( Datei5, 'RenameFile = 1') WRITELN( Datei5, 'RenameFForce = 0') /* Statistik */ WRITELN( Datei5, 'Protokoll = 0') /* Sonstiges */ WRITELN( Datei5, 'SchriftenMax = 50') /* Dokumenten Layout */ WRITELN( Datei5, 'DocTitle = "Schriftprobe"') WRITELN( Datei5, 'DocTitleFont = "SoftSans_Italic"') WRITELN( Datei5, 'DocInfoLine1 = "Default"') WRITELN( Datei5, 'DocInfoLine2 = "Default"') WRITELN( Datei5, 'BeispielText = "The quick brown fox jumped over the lazy dog. ÄÖÜäöüß, 1234567890"') WRITELN( Datei5, 'DocFont = "SoftSans"') WRITELN( Datei5, 'Drucker = "Deskjet"') WRITELN( Datei5, 'SeitenG = "A4"') WRITELN( Datei5, 'Rahmen = "Bevel"') WRITELN( Datei5, 'RahmenDicke = 1') /* Externe Commandos */ WRITELN( Datei5, 'Sortiere = "C:Sort"') WRITELN( Datei5, 'Viewer = "SYS:Utilities/MultiView"') CLOSE( Datei5 ) ADDRESS command 'C:copy ' "ENVARC:" || Prefs.Prefs " ENV:" || Prefs.Prefs CALL LoadPrefs1 END RETURN /*---------------------------------------------------------*/ LoadPrefs1: OffenDatei5 = OPEN( Datei5, "ENV:" || Prefs.Prefs, "R") DO WHILE 1 IF EOF( Datei5 ) THEN DO CLOSE( Datei5 ) IF LENGTH(DocInfoLine1) > 40 THEN DocInfoLine1 = DELSTR( DocInfoLIne1,40 ) IF LENGTH(DocInfoLine2) > 40 THEN DocInfoLine2 = DELSTR( DocInfoLine2,40 ) IF FullAuto = 1 THEN DO SchriftID = 2 SchriftType = 1 SuffixLearn = 1 SuffixLearnS = 0 Speed = 1 DocInfoLine1 = "Default" DocInfoLine2 = "Default" END IF ~EXISTS( Sortiere ) THEN Sortiere = "C:SORT" RETURN END Einstellungen = READLN( Datei5 ) INTERPRET Einstellungen END CLOSE( Datei5 ) RETURN /*-------------------------------------------------------*/ PrefsLoad2: /* Suffixe laden (für Dateien die nicht geprüft werden!) */ IF EXISTS( "ENV:" || Prefs.Suffix ) THEN CALL LoadPrefs2 ELSE DO OffenDatei4 = OPEN( Datei4, "ENVARC:" || Prefs.Suffix, "W") ExklDateien = " ABF PFA PFM AFM TFM BMA FM VFM TTF FONT FNT OTAG TYPE TYPES INFO INF README DIZ TXT ASC ASCII FW TEX DVI WRI WMF RTF FTXT GUIDE IXML DOC DOK MAN HTML HTM DB CSV WKS WQ1 WQ2 WQ3 DIF SYLK CHK GIF JPEG JPG PNG TARGA TGA ILBM IFF PAL DR2D BRU BRUSH 8SVX HAM HAM6 HAM8 BPM PCX JFIF TIFF TIF QRT EPS PS PIC ANIM ANIM5 ANIM8 ANIMB MPEG MPG AVI FLI MID MIDI WAV VOC LZX LHA LZH TAR XPK XAR PP RUN ZIP ARJ HQX SIT CPT ASM C++ C BAS RX REXX AREXX BAK BACKUP EXE EX_ BAT BA_ SYS SY_ COM CO_ DLL DL_ DRV DR_ ICO IC_ HLP HL_ DAT DA_ INI IN_ LST LS_ FRM FR_ CFG CF_ CONFIG LOG PRE PREFS LOCALE LIB LIBRARY DEVICE IMAGE GADGET DATATYPE LANGUAGE CATALOG BACKDROP MUI MCC MTFD" WRITELN( Datei4, ExklDateien) CLOSE( Datei4 ) ADDRESS command 'C:copy ' "ENVARC:" || Prefs.Suffix " ENV:" || Prefs.Suffix CALL LoadPrefs2 END RETURN /*---------------------------------------------------------*/ LoadPrefs2: OffenDatei4 = OPEN( Datei4, "ENV:" || Prefs.Suffix, "R") ExklDateien = READLN( Datei4 ) ExklDateien = UPPER( ExklDateien ) CLOSE( Datei4) RETURN /*---------------------------------------------------------*/ NoFonts: rtezrequest("Keine verwendbaren Schriften gefunden!","_Weiter",RT.Title,RT.Para1) RETURN /*---------------------------------------------------------*/ Zwischenspeichern: rtresult = 1 DO WHILE rtresult ~= 0 SaveAs IF RC = 10 THEN rtezrequest("Soll das Dokument wirklich" || R ||, "verworfen werden?","_Nein|_Ja",RT.Title,RT.Para1) ELSE LEAVE END ClearDoc Force CALL Deckblatt RETURN /*---------------------------------------------------------*/ RenFont: SlashPos = LASTPOS( "/",Datei) DateiPfad = DELSTR( Datei,SlashPos + 1 ) NewDatei = DateiPfad || RealFontName ADDRESS command 'rename ' Datei NewDatei' QUIET' IF RC = 0 THEN DO Datei = NewDatei FontName = RealFontName IF OffenLOG THEN WRITELN( LOG, Datei 'in' NewDatei 'umbenannt.' ) END ELSE DO RenameFile = 0 IF RenameFForce = 0 THEN rtezrequest(" Fehler beim Umbenennen von:"||R, Datei||R, "in:"||R, NewDatei,"_Weiter",RT.Title) IF OffenLOG THEN WRITELN( LOG, "Fehler beim umbenennen von" Datei "in" NewDatei ) END RETURN /*---------------------------------------------------------*/ Ende: IF SuffixLearn = 1 & Found = 1 THEN DO OffenDatei4 = OPEN(Datei4, "ENV:" || Prefs.Suffix, "W") IF OffenDatei4 THEN WRITELN( Datei4, ExklDateien ) IF OffenLOG THEN WRITELN( LOG, 'Sichere erlernte Suffixe nach ENV:' || Prefs.Suffix ) CLOSE( Datei4 ) IF SuffixLearnS = 1 THEN DO OffenDatei4 = OPEN(Datei4, "ENVARC:" || Prefs.Suffix, "W") IF OffenDatei4 THEN WRITELN( Datei4, ExklDateien ) IF OffenLOG THEN WRITELN( LOG, 'Sichere erlernte Suffixe nach ENVARC:' || Prefs.Suffix ) CLOSE( Datei4 ) END END CLOSE( LOG ) ADDRESS command 'C:delete 'Tmp.Files' QUIET' ADDRESS command 'C:delete 'Tmp.Fonts' QUIET' ADDRESS command 'RUN >NIL:' Viewer Tmp.LOG rtezrequest(" Fertig! ","_Weiter",RT.Title,RT.Para1) EXIT /*---------------------------------------------------------*/ HALT: BREAK_C: rtezrequest("Macro wurde abgebrochen ... ","Weiter",RT.Title,RT.Para1) ADDRESS command 'C:delete 'Tmp.Files' QUIET' ADDRESS command 'C:delete 'Tmp.Fonts' QUIET' EXIT /*---------------------------------------------------------*/