home *** CD-ROM | disk | FTP | other *** search
- (*------------------------------------------------------------------------------
- Project : FontList
- Module : FontList.mod
- Author : Robert Brandner (rb)
- Address : Schillerstr. 3 / A-8280 Fürstenfeld / AUSTRIA / EUROPE
- Copyright : Public Domain
- Language : Modula-II (M2Amiga V4.0d)
- History : V0.1 24-Mar 91, rb
- History : V0.5 25-Mar 91, rb Ausgabe auf unsichtbare Bitmap
- History : V0.6 22-Aug 91, rb Anpassung an V4.0
- Contents : Liste aller Fonts in FONTS: mit Schriftprobe ausdrucken.
- ------------------------------------------------------------------------------*)
-
- (*$ StackChk := FALSE *)
- (*$ RangeChk := FALSE *)
- (*$ OverflowChk := FALSE *)
- (*$ ReturnChk := FALSE *)
- (*$ LongAlign := FALSE *) (* make this TRUE for MC680x0, x>1 *)
- (*$ Volatile := FALSE *)
- (*$ LargeVars := FALSE *)
- (*$ StackParms := FALSE *)
-
- MODULE FontList;
-
- FROM DosD IMPORT sharedLock,FileInfoBlock,FileLockPtr,
- FileHandlePtr,newFile;
- FROM DosL IMPORT Lock,UnLock,Examine,ExNext,Open,Close,Write;
- FROM Arts IMPORT Terminate;
- FROM SYSTEM IMPORT ADR;
- FROM String IMPORT Copy,Concat,Length;
- FROM Conversions IMPORT StrToVal;
- FROM GraphicsD IMPORT TextAttr,TextFontPtr,normalFont,FontFlags,FontFlagSet,
- RastPortPtr,RastPort,ColorMapPtr,BitMap,
- ViewModeSet;
- FROM GraphicsL IMPORT SetFont,CloseFont,SetRGB4CM,SetRast,Move,Text,SetAPen,
- InitRastPort,InitBitMap,AllocRaster,FreeRaster,
- GetColorMap;
- FROM DiskFontL IMPORT OpenDiskFont;
- FROM HardCopy IMPORT DumpRPort;
- FROM Printer IMPORT Error,SpecialSet;
- FROM Terminal IMPORT WriteString,WriteLn;
-
- CONST TITLE="\[1mFontList V0.6\[0m © '91 Robert Brandner";
- TEXT="AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÄÖöÜü";
- FLAGS=FontFlagSet{romFont,diskFont,proportional,designed};
- PRTERROR="Can't open PRT:";
- BMERROR="No memory for Bitplane.";
- F1ERROR="FONTS: not found.";
- F2ERROR="FONTS: assigned to file.";
-
- VAR lock, lock2 : FileLockPtr;
- (*$ LongAlign := TRUE *) (* Dos braucht Variablen an Langwortgrenzen! *)
- info,info2 : FileInfoBlock;
- (*$ POP LongAlign *)
- ok, prtok : BOOLEAN;
- Path, FName : ARRAY[0..99] OF CHAR;
- size, max : LONGINT;
- rp : RastPort;
- bm : BitMap;
- cm : ColorMapPtr;
- ta : TextAttr;
- font : TextFontPtr;
- prterr : Error;
- printer : FileHandlePtr;
- newline : ARRAY[0..0] OF CHAR;
-
- (*------------------------------------------------------------------------------
- String auf Drucker ausgeben. (Drucker wird jedesmal wieder ge-
- schlossen, da es sonst zu Kollisionen mit DumpRPort kommt.
- ------------------------------------------------------------------------------*)
-
- PROCEDURE Print(txt:ARRAY OF CHAR);
- VAR act:LONGINT;
- BEGIN
- printer:=Open(ADR("PRT:"),newFile); (* Printer als File öffnen. *)
- IF printer=NIL THEN
- WriteString(PRTERROR); WriteLn; (* melden, daß Printer nicht *)
- Terminate; (* geöffnet werden konnte. *)
- END;
- (*$ StackParms := TRUE *)
- act:=Write(printer,ADR(txt),Length(txt)); (* Text ausgeben *)
- (* POP StackParms *)
- WriteString(txt); (* gleichen Text auf Screen *)
- Close(printer); printer:=NIL; (* Printer schließen. *)
- END Print;
-
- (*--- Anzeigen des Fonts <FName>.font, in Größe <max>. -----------------------*)
-
- PROCEDURE ShowFont;
- BEGIN
- Concat(FName,".font"); (* Fontnamen ergänzen *)
- WITH ta DO (* TextAttr-Struktur füllen *)
- name:=ADR(FName); (* Fontname *)
- ySize:=max; (* Fonthöhe *)
- style:=normalFont; (* normale Schriftart *)
- flags:=FLAGS; (* wenn möglich, prop. und designed *)
- END;
- font:=OpenDiskFont(ADR(ta)); (* Font öffnen *)
- IF font#NIL THEN (* erfolgreich geöffnet *)
- SetRast(ADR(rp),0); (* Screen löschen *)
- SetFont(ADR(rp),font); (* neuen Font verwenden *)
- Move(ADR(rp),5,5+rp.txBaseline);
- Text(ADR(rp),ADR(TEXT),58); (* Test-Text auf Bitmap ausgeben *)
- CloseFont(font); (* Font wieder schließen *)
- font:=NIL;
- prtok:=DumpRPort(ADR(rp),cm,ViewModeSet{},0,0,960,rp.txHeight+10,
- 960,rp.txHeight+10,SpecialSet{},prterr);
- ELSE
- Print("Couldn't open"); (* melden, daß Font nicht geöffnet *)
- Print(newline); (* werden konnte. *)
- END;
- END ShowFont;
-
- (*------------------------------------------------------------------------------
- Durchsuchen des FONTS:Fontname Directorys. Einträge sollten Files
- sein, und als Namen die Größe haben (8,9,11,...).
- ------------------------------------------------------------------------------*)
-
- PROCEDURE ScanSizes(Path:ARRAY OF CHAR);
- VAR ok,signed,err:BOOLEAN;
- BEGIN
- signed:=FALSE;
- max:=1;
- lock2:=Lock(ADR(Path),sharedLock);
- IF lock2=NIL THEN RETURN END; (* kann nicht zugreifen. *)
- ok:=Examine(lock2,ADR(info2));
- REPEAT (* Ganzes Dir. durchsuchen *)
- ok:=ExNext(lock2,ADR(info2));
- IF ok THEN
- IF info2.dirEntryType<0 THEN (* Ein File gefunden. *)
- StrToVal(info2.fileName,size, (* in Zahl umwandeln, zum *)
- signed,10,err); (* Größenvergleich *)
- IF size>max THEN (* max. Größe zu späteren *)
- max:=size; (* Öffnen des Fonts merken *)
- END;
- Print(info2.fileName); (* Alle Fontgrößen *)
- Print(", "); (* ausgeben. *)
- END;
- END;
- UNTIL NOT ok;
- UnLock(lock2); lock2:=NIL;
- Print(newline);
- ShowFont; (* Font in Grafik ausgeben *)
- END ScanSizes;
-
- (*------------------------------------------------------------------------------
- Durchsuchen des FONTS: Directorys. Gefundene Directorys weiter
- durchsuchen, sie sollten die versch. Größen enthalten.
- ------------------------------------------------------------------------------*)
-
- PROCEDURE ScanFonts;
- VAR NewPath:ARRAY[0..99] OF CHAR;
- BEGIN
- REPEAT (* ganzes Dir. durchsuchen *)
- ok:=ExNext(lock,ADR(info));
- IF ok THEN
- IF info.dirEntryType>0 THEN (* ein Directory gefunden. *)
- Copy(NewPath,Path); (* Neuen Pfad *)
- Concat(NewPath,info.fileName); (* zusammenbauen. *)
- Copy(FName,info.fileName); (* Fontnamen merken. *)
- Print(newline);
- Print("Font : ");
- Print(FName); Print(newline);
- Print("Sizes : ");
- ScanSizes(NewPath); (* Directory durchsuchen. *)
- END;
- END;
- UNTIL NOT ok;
- END ScanFonts;
-
- (*------------------------------------------------------------------------------
- Öffnen einer unsichtbaren Bitmap, und einrichten eines Rastports,
- sowie einer Colormap für diese Bitmap.
- ------------------------------------------------------------------------------*)
-
- PROCEDURE MakeBitMap;
- BEGIN
- InitBitMap(bm,1,960,200); (* 960 Pixels Druckerbreite *)
- InitRastPort(rp);
- rp.bitMap:=ADR(bm); (* Rastport und BMap verbinden. *)
- bm.planes[0]:=AllocRaster(960,200); (* Bitplane anfordern. *)
- IF bm.planes[0]=NIL THEN
- WriteString(BMERROR); WriteLn; (* melden, wenn keine Bitplane *)
- Terminate; (* bekommen, und abbrechen. *)
- END;
- cm:=GetColorMap(2); (* Colormap anfordern *)
- SetRGB4CM(cm,0,0FH,0FH,0FH); (* Hintergrund weiß. *)
- SetRGB4CM(cm,1,00H,00H,00H); (* Schriftfarbe schwarz. *)
- SetAPen(ADR(rp),1);
- END MakeBitMap;
-
- BEGIN
- WriteString(TITLE); WriteLn;
- Path:="FONTS:";
- newline[0]:=CHAR(10);
- lock:=Lock(ADR(Path),sharedLock);
- IF lock=NIL THEN
- WriteString(F1ERROR);WriteLn; (* FONTS: nicht da *)
- Terminate;
- END;
- ok:=Examine(lock,ADR(info));
- IF info.dirEntryType<0 THEN
- WriteString(F2ERROR);WriteLn; (* FONTS: ist auf ein *)
- Terminate; (* File assigned. *)
- END;
- MakeBitMap; (* Bitmap erzeugen. *)
- ScanFonts;
- WriteString("Ready");WriteLn;
- CLOSE
- IF lock#NIL THEN UnLock(lock) END;
- IF lock2#NIL THEN UnLock(lock2) END;
- IF font#NIL THEN CloseFont(font) END;
- IF printer#NIL THEN Close(printer) END;
- IF bm.planes[0]#NIL THEN FreeRaster(bm.planes[0],960,200) END;
- END FontList.
-
-