(FILECREATED "28-Nov-84 22:57:10" {ERIS}<LISPCORE>LIBRARY>NSTOASCIIDISPLAYFONT.;2 5226 changes to: (FNS NSTOASCIIDISPLAYFONT READNSDISPLAYFONTFILE) previous date: "28-Nov-84 22:27:11" {ERIS}<LISPCORE>LIBRARY>NSTOASCIIDISPLAYFONT.;1) (* Copyright (c) 1984 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT NSTOASCIIDISPLAYFONTCOMS) (RPAQQ NSTOASCIIDISPLAYFONTCOMS ((FNS NSTOASCIIDISPLAYFONT READNSDISPLAYFONTFILE) (FILES (FROM VALUEOF LISPUSERSDIRECTORIES) EDITFONT))) (DEFINEQ (NSTOASCIIDISPLAYFONT [LAMBDA (ASCIITONSMAPARRAY ASCIITONSFIXARRAY ASCIIFAMILY NSFAMILY SIZE FONTFACE ROTATION DEVICE) (* rmk: "28-Nov-84 22:56") (* Produces an ASCII displayfont by getting bitmaps and widths from NS character sets, as determined by the translation table) (* ASCIITONSFIXARRAY is for temporary problems with font compatibility between printer and widths/screen. in OS5.0 fonts) (PROG (CHARSETDIR [ASCIITONSMAP (fetch (ARRAYP BASE) of (\DTEST (OR ASCIITONSFIXARRAY ASCIITONSMAPARRAY) (QUOTE ARRAYP] (FD (READNSDISPLAYFONTFILE NSFAMILY SIZE FONTFACE))) (OR FD (RETURN NIL)) (SETQ CHARSETDIR (CONS (CONS 0 FD))) [for I NSCODE CS from 0 to 255 unless (OR (EQ I (SETQ NSCODE (\GETBASE ASCIITONSMAP I))) (ASSOC (SETQ CS (NSCHARSET NSCODE)) CHARSETDIR)) do (* Run thru the translate table looking for non-0 charsets. Add their width info to the directory) (push CHARSETDIR (CONS CS (COND ((READNSDISPLAYFONTFILE NSFAMILY SIZE FONTFACE CS)) (T (* There isn't any info for that character. Warn the guy, but continue.) (FRESHLINE PROMPTWINDOW) (printout PROMPTWINDOW "Warning: Information about character set " .I3.8 CS " missing from font " ASCIIFAMILY , SIZE ".") NIL] (* Return if one of the fonts couldn't be found) (bind CHARSETINFO for I NSCODE (WD ←(fetch \SFWidths of FD)) from 0 to 255 unless (EQ I (SETQ NSCODE (\GETBASE ASCIITONSMAP I))) when (SETQ CHARSETINFO (CDR (ASSOC (NSCHARSET NSCODE) CHARSETDIR))) do (* For each non-ASCII character, look for width info in the right NS place. If none, use zero width.) (PUTCHARBITMAP I FD (GETCHARBITMAP (NSCHAR NSCODE) CHARSETINFO))) (RETURN FD]) (READNSDISPLAYFONTFILE [LAMBDA (FAMILY SIZE FACE CHARSET) (* rmk: "28-Nov-84 22:25") (DECLARE (GLOBALVARS DISPLAYFONTEXTENSIONS DISPLAYFONTDIRECTORIES)) (SELECTQ (SYSTEMTYPE) (J (PROG ((FONTFILE (\FONTFILENAME FAMILY SIZE FACE)) FONTDESC STRM) (COND ((SETQ STRM (AND FONTDIRECTORIES (FINDFILE FONTFILE T FONTDIRECTORIES))) (SETQ STRM (OPENSTREAM FONTFILE (QUOTE INPUT))) (SETQ FONTDESC (\READJERICHOFONTFILE FAMILY SIZE FACE STRM)) (CLOSEF STRM))) (replace FONTSCALE of FONTDESC with 1) (RETURN FONTDESC))) [D (for E FONTFILE FONTDESC STRM inside DISPLAYFONTEXTENSIONS when (SETQ FONTFILE (FINDFILE (\FONTFILENAME FAMILY SIZE FACE E CHARSET) T DISPLAYFONTDIRECTORIES)) do (SETQ STRM (OPENSTREAM FONTFILE (QUOTE INPUT))) [RESETLST (SETQ FONTDESC (SELECTQ (FONTFILEFORMAT STRM T) (STRIKE (RESETSAVE NIL (LIST (FUNCTION CLOSEF) STRM)) (\READSTRIKEFONTFILE STRM FAMILY SIZE FACE)) (AC (* CLOSEF is guaranteed inside \READACFONTFILE, against the possibility that we have to copy to make randaccessp) (\READACFONTFILE STRM FAMILY SIZE FACE)) (PROG1 (CLOSEF STRM) (* This would get done by RESETSAVE if AC's were read sequentially and we could factor the RESETSAVE) ] (* If not a recognizable format, I guess we should keep looking for another possible extension, altho it would also be nice to tell the user that he has a bogus file.) (COND (FONTDESC (replace FONTSCALE of FONTDESC with 1) (RETURN FONTDESC] (SHOULDNT]) ) (FILESLOAD (FROM VALUEOF LISPUSERSDIRECTORIES) EDITFONT) (PUTPROPS NSTOASCIIDISPLAYFONT COPYRIGHT ("Xerox Corporation" 1984)) (DECLARE: DONTCOPY (FILEMAP (NIL (520 5074 (NSTOASCIIDISPLAYFONT 530 . 3015) (READNSDISPLAYFONTFILE 3017 . 5072))))) STOP