(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP" BASE 10)
(FILECREATED "27-Sep-87 16:14:14" {DSK}<OST>ANSICHATFONT.;28 44240  

      changes to%:  (VARS ANSICHATFONTCOMS)
                    (PROPS (ANSICHATFONT MAKEFILE-ENVIRONMENT))
                    (FNS ANSI-Chat-Build-Font-Descriptors ANSI-Chat-Copy-CharSet 
                         ANSI-Chat-Copy-CharSet-DoubleHeight ANSI-Chat-Copy-CharSet-DoubleWide)
                    (FILES FONTDECLS)

      previous date%: "26-Sep-87 15:20:54" {DSK}<OST>ANSICHATFONT.;27)


(PRETTYCOMPRINT ANSICHATFONTCOMS)

(RPAQQ ANSICHATFONTCOMS 
       ((PROP MAKEFILE-ENVIRONMENT ANSICHATFONT)
        (PROP FILETYPE ANSICHATFONT)
        (FNS ANSI-Chat-Build-Font-Descriptors ANSI-Chat-Copy-CharSet 
             ANSI-Chat-Copy-CharSet-DoubleHeight ANSI-Chat-Copy-CharSet-DoubleWide 
             ANSI-Chat-Font-Initialize)
        (INITVARS (ANSI-Chat-Font NIL))
        (GLOBALVARS ANSI-Chat-Font-Descriptor-Cache ANSI-Chat-Font)
        (ADDVARS (MISSINGDISPLAYFONTCOERCIONS ((ANSITERMINAL)
                                               (TERMINAL)))
               (ASCIITONSTRANSLATIONS (ANSITERMINAL NIL TERMINAL)))
        (FNS ANSI-Chat-Initialize-Character-Translations ANSI-Chat-Build-Map)
        (GLOBALVARS ANSI-ASCII-Graphics-Character-Set ANSI-Supplemental-Graphics-Character-Set 
               ANSI-Special-Graphics-Character-Set ANSI-British-NRC-Character-Set 
               ANSI-Dutch-NRC-Character-Set ANSI-Finnish-NRC-Character-Set 
               ANSI-French-NRC-Character-Set ANSI-French-Canadian-NRC-Character-Set 
               ANSI-German-NRC-Character-Set ANSI-Italian-NRC-Character-Set 
               ANSI-Norwegian/Danish-NRC-Character-Set ANSI-Spanish-NRC-Character-Set 
               ANSI-Swedish-NRC-Character-Set ANSI-Swiss-NRC-Character-Set)
        (P (ANSI-Chat-Initialize-Character-Translations)
           (ANSI-Chat-Font-Initialize))
        (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (SOURCE)
                                                FONTDECLS))))

(PUTPROPS ANSICHATFONT MAKEFILE-ENVIRONMENT (:READTABLE "INTERLISP" :PACKAGE "INTERLISP" :BASE 10))

(PUTPROPS ANSICHATFONT FILETYPE TCOMPL)
(DEFINEQ

(ANSI-Chat-Build-Font-Descriptors
  [LAMBDA NIL
    (DECLARE (GLOBALVARS PROMPTWINDOW ANSI-Chat-Font-Descriptor-Cache ANSI-Chat-Font)
           (CONSTANTS \MAXCHARSET))                       (* ; "Edited 27-Sep-87 15:22 by R.Beeman")
          
          (* ;; "Need eight (8) FontDescriptors Normal (MRR), DoubleWide (MIR), DoubleHeightTop (MIE), DoubleHeightBottom (MIC), Bold (BRR), BoldDoubleWide (BIR), BoldDoubleHeightTop (BIE), BoldDoubleHeightBottom (BIC)")
          
          (* ;; 
          "First get the Normal and Bold conventionally, then copy them to the VIDEOTERMINAL family")

    (LET*
     [[BaseFont (FONTCREATE (OR [AND (BOUNDP 'ANSI-Chat-Font)
                                     ANSI-Chat-Font
                                     (FONTUNPARSE (FONTCOPY ANSI-Chat-Font 'FACE 'MRR]
                                '(ANSITERMINAL 10]
      (BaseBoldFont (FONTCOPY BaseFont 'WEIGHT 'BOLD]
     (COND
        ((AND (BOUNDP 'ANSI-Chat-Font-Descriptor-Cache)
              (EQP (LENGTH ANSI-Chat-Font-Descriptor-Cache)
                   3)
              (EQ BaseFont (CAR ANSI-Chat-Font-Descriptor-Cache))
              (EQ BaseBoldFont (CADR ANSI-Chat-Font-Descriptor-Cache)))
                                                             (* ; "Have already done the work")

         NIL)
        (T
         (PROMPTPRINT "Building Font Descriptors ")
          
          (* ;; "Force in the Character Sets")

         (for CharacterSpecification
            in '(0,040 41,142 42,041 46,163 50,043 356,176 357,344 360,270 361,41 375,320)
            do (LET ((CharacterCode (APPLY* (FUNCTION CHARCODE)
                                           CharacterSpecification)))
                    (CHARWIDTH CharacterCode BaseFont)
                    (PRINTOUT PROMPTWINDOW ".")
                    (CHARWIDTH CharacterCode BaseBoldFont)
                    (PRINTOUT PROMPTWINDOW ".")))
         [LET
          ((CharSet0AverageWidth (\AVGCHARWIDTH BaseFont))
           (SourceCharSet0 (\GETCHARSETINFO 0 BaseFont)))
          (SETQ ANSI-Chat-Font-Descriptor-Cache
           (LIST BaseFont BaseBoldFont
                 (COND
                    (SourceCharSet0
          
          (* ;; "Create Font Descriptors")

                     (LET ((CharSet0Ascent (fetch (CHARSETINFO CHARSETASCENT) of SourceCharSet0))
                           (CharSet0Descent (fetch (CHARSETINFO CHARSETDESCENT) of SourceCharSet0))
                           (NormalFont (create FONTDESCRIPTOR))
                           (DoubleWideFont (create FONTDESCRIPTOR))
                           (DoubleHeightTopFont (create FONTDESCRIPTOR))
                           (DoubleHeightBottomFont (create FONTDESCRIPTOR))
                           (BoldFont (create FONTDESCRIPTOR))
                           (BoldDoubleWideFont (create FONTDESCRIPTOR))
                           (BoldDoubleHeightTopFont (create FONTDESCRIPTOR))
                           (BoldDoubleHeightBottomFont (create FONTDESCRIPTOR)))
                          (PRINTOUT PROMPTWINDOW ".")
                          [for FD in (LIST NormalFont DoubleWideFont DoubleHeightTopFont 
                                           DoubleHeightBottomFont BoldFont BoldDoubleWideFont 
                                           BoldDoubleHeightTopFont BoldDoubleHeightBottomFont)
                             as Face in '(MRR MIR MIE MIC BRR BIR BIE BIC)
                             bind (Size ← (FONTPROP BaseFont 'SIZE))
                             do (replace (FONTDESCRIPTOR FONTDEVICE) of FD with 'DISPLAY)
                                (replace (FONTDESCRIPTOR FONTFAMILY) of FD with 'VIDEOTERMINAL)
                                (replace (FONTDESCRIPTOR FONTSIZE) of FD with Size)
                                (replace (FONTDESCRIPTOR FONTFACE) of FD with Face)
                                (replace (FONTDESCRIPTOR \SFAscent) of FD with CharSet0Ascent)
                                (replace (FONTDESCRIPTOR \SFDescent) of FD with CharSet0Descent)
                                (replace (FONTDESCRIPTOR \SFHeight) of FD with (+ CharSet0Ascent 
                                                                                  CharSet0Descent))
                                (replace (FONTDESCRIPTOR ROTATION) of FD with 0)
                                (replace (FONTDESCRIPTOR FONTDEVICESPEC) of FD
                                   with (LIST 'VIDEOTERMINAL Size Face 0 'DISPLAY))
                                (replace (FONTDESCRIPTOR FONTAVGCHARWIDTH) of FD
                                   with (SELECTQ Face
                                            ((MRR BRR) 
                                                 CharSet0AverageWidth)
                                            (RSH CharSet0AverageWidth -1]
                          (PRINTOUT PROMPTWINDOW ".")
          
          (* ;; "Copy Base Font Descriptors to ANSI-Chat Font Descriptors")

                          (for BFD in (LIST BaseFont BaseBoldFont) as SWFD
                             in (LIST NormalFont BoldFont)
                             do (for CharacterSet
                                   in '(0 33 34 38 40 238 239 240 241 253)
                                   do [LET ((SourceCharSet (\GETCHARSETINFO CharacterSet BFD)))
                                           (COND
                                              (SourceCharSet (\SETCHARSETINFO (fetch (FONTDESCRIPTOR
                                                                                      
                                                                                    FONTCHARSETVECTOR
                                                                                      ) of SWFD)
                                                                    CharacterSet
                                                                    (ANSI-Chat-Copy-CharSet 
                                                                           SourceCharSet 
                                                                           CharSet0Ascent 
                                                                           CharSet0Descent 
                                                                           CharSet0AverageWidth]
                                      (PRINTOUT PROMPTWINDOW ".")))
          
          (* ;; "Next create DoubleWides")

                          (for SWFD in (LIST NormalFont BoldFont) as DWFD
                             in (LIST DoubleWideFont BoldDoubleWideFont)
                             do (for CharacterSet
                                   in '(0 33 34 38 40 238 239 240 241 253)
                                   do [LET ((SourceCharSet (\GETCHARSETINFO CharacterSet SWFD)))
                                           (COND
                                              (SourceCharSet (\SETCHARSETINFO (fetch (FONTDESCRIPTOR
                                                                                      
                                                                                    FONTCHARSETVECTOR
                                                                                      ) of DWFD)
                                                                    CharacterSet
                                                                    (
                                                                    ANSI-Chat-Copy-CharSet-DoubleWide
                                                                     SourceCharSet
                                                                     (RSH CharSet0AverageWidth -1]
                                      (PRINTOUT PROMPTWINDOW ".")))
          
          (* ;; "Finally create DoubleHeights")

                          [for DWFD in (LIST DoubleWideFont BoldDoubleWideFont) as DHTFD
                             in (LIST DoubleHeightTopFont BoldDoubleHeightTopFont) as DHBFD
                             in (LIST DoubleHeightBottomFont BoldDoubleHeightBottomFont)
                             do (for CharacterSet
                                   in '(0 33 34 38 40 238 239 240 241 253)
                                   do (LET ((SourceCharSet (\GETCHARSETINFO CharacterSet DWFD)))
                                           (COND
                                              (SourceCharSet (\SETCHARSETINFO (fetch (FONTDESCRIPTOR
                                                                                      
                                                                                    FONTCHARSETVECTOR
                                                                                      ) of DHTFD)
                                                                    CharacterSet
                                                                    (
                                                                  ANSI-Chat-Copy-CharSet-DoubleHeight
                                                                     SourceCharSet
                                                                     (RSH CharSet0AverageWidth -1)
                                                                     'Top))
                                                     (PRINTOUT PROMPTWINDOW ".")
                                                     (\SETCHARSETINFO (fetch (FONTDESCRIPTOR 
                                                                                    FONTCHARSETVECTOR
                                                                                    ) of DHBFD)
                                                            CharacterSet
                                                            (ANSI-Chat-Copy-CharSet-DoubleHeight
                                                             SourceCharSet
                                                             (RSH CharSet0AverageWidth -1)
                                                             'Bottom))
                                                     (PRINTOUT PROMPTWINDOW "."]
                          (LIST (LIST 3 DoubleHeightTopFont 4 DoubleHeightBottomFont 5 NormalFont 6 
                                      DoubleWideFont)
                                3 BoldDoubleHeightTopFont 4 BoldDoubleHeightBottomFont 5 BoldFont 6 
                                BoldDoubleWideFont)))
                    (T 
          
          (* ;; " Things are terribly wrong, just supply BaseFont and BoldBaseFont ")

                       (LIST (LIST 5 BaseFont)
                             5 BaseBoldFont]
         (PRINTOUT PROMPTWINDOW " Done" T)))
     (CADDR ANSI-Chat-Font-Descriptor-Cache])

(ANSI-Chat-Copy-CharSet
  [LAMBDA (Source Ascent Descent Width)
    (DECLARE (CONSTANTS \MAXTHINCHAR WORDSPERCELL))       (* ; "Edited 27-Sep-87 15:21 by R.Beeman")

    (LET* ((Height (+ Ascent Descent))
           (SourceWidths (fetch (CHARSETINFO WIDTHS) of Source))
           (SourceOffsets (fetch (CHARSETINFO OFFSETS) of Source))
           (SourceCharSetBitMap (fetch (CHARSETINFO CHARSETBITMAP) of Source))
           (SourceImageWidths (fetch (CHARSETINFO IMAGEWIDTHS) of Source))
           (SourceCharSetAscent (fetch (CHARSETINFO CHARSETASCENT) of Source))
           (SourceCharSetDescent (fetch (CHARSETINFO CHARSETDESCENT) of Source))
           (UnknownOffset (\FGETOFFSET SourceOffsets (ADD1 \MAXTHINCHAR)))
           (CharSetInfo (create CHARSETINFO))
           (DestinationWidths (fetch (CHARSETINFO WIDTHS) of CharSetInfo))
           (DestinationOffsets (fetch (CHARSETINFO OFFSETS) of CharSetInfo))
           (DestinationImageWidths (\CREATECSINFOELEMENT))
           (DestinationOffset 0)
           [DestinationUnknownOffset (ITIMES (ADD1 Width)
                                            (for Index from 0 to \MAXTHINCHAR
                                               count (NOT (EQ (\FGETOFFSET SourceOffsets Index)
                                                              UnknownOffset]
           (DestinationCharSetBitMap (BITMAPCREATE (+ DestinationUnknownOffset Width)
                                            Height 1)))
          (replace (CHARSETINFO IMAGEWIDTHS) of CharSetInfo with DestinationImageWidths)
          (replace (CHARSETINFO CHARSETBITMAP) of CharSetInfo with DestinationCharSetBitMap)
          (replace (CHARSETINFO CHARSETASCENT) of CharSetInfo with Ascent)
          (replace (CHARSETINFO CHARSETDESCENT) of CharSetInfo with Descent)
          (\FSETWIDTH DestinationWidths (ADD1 \MAXTHINCHAR)
                 Width)
          (\FSETOFFSET DestinationOffsets (ADD1 \MAXTHINCHAR)
                 DestinationUnknownOffset)
          (\FSETIMAGEWIDTH DestinationImageWidths (ADD1 \MAXTHINCHAR)
                 Width)
          [LET* [(SourceCharSetBitMapHeight (BITMAPHEIGHT SourceCharSetBitMap))
                 (SourceYOffset (IMAX 0 (- SourceCharSetDescent Descent)))
                 [DestinationYOffset (IMIN (SUB1 Height)
                                           (IMAX 0 (- (+ SourceCharSetAscent Descent)
                                                      SourceCharSetBitMapHeight]
                 (BLTHeight (IMAX 0 (IMIN (- SourceCharSetBitMapHeight SourceYOffset)
                                          (- Height DestinationYOffset]
                (for Index from 0 to \MAXTHINCHAR
                   do (LET [(SourceOffset (\FGETOFFSET SourceOffsets Index))
                            (SourceImageWidth (IMIN Width (\FGETIMAGEWIDTH SourceImageWidths Index]
                           (\FSETWIDTH DestinationWidths Index Width)
                           (\FSETIMAGEWIDTH DestinationImageWidths Index Width)
                           (COND
                              ((EQ SourceOffset UnknownOffset)
                               (\FSETOFFSET DestinationOffsets Index DestinationUnknownOffset))
                              (T (\FSETOFFSET DestinationOffsets Index DestinationOffset)
                                 [COND
                                    ((NOT (ZEROP BLTHeight))
                                     (BITBLT SourceCharSetBitMap SourceOffset SourceYOffset 
                                            DestinationCharSetBitMap DestinationOffset 
                                            DestinationYOffset SourceImageWidth BLTHeight
                                            'INPUT
                                            'REPLACE]
                                 (SETQ DestinationOffset (+ DestinationOffset Width 1]
          (BLTSHADE BLACKSHADE DestinationCharSetBitMap (ADD1 DestinationUnknownOffset)
                 Descent
                 (- Width 2)
                 Ascent
                 'REPLACE)
          CharSetInfo])

(ANSI-Chat-Copy-CharSet-DoubleHeight
  [LAMBDA (Source Width Half)
    (DECLARE (CONSTANTS \MAXTHINCHAR WORDSPERCELL))       (* ; "Edited 27-Sep-87 15:22 by R.Beeman")

    (LET* ((SourceWidths (fetch (CHARSETINFO WIDTHS) of Source))
           (SourceOffsets (fetch (CHARSETINFO OFFSETS) of Source))
           (SourceCharSetBitMap (fetch (CHARSETINFO CHARSETBITMAP) of Source))
           (SourceImageWidths (fetch (CHARSETINFO IMAGEWIDTHS) of Source))
           (SourceCharSetAscent (fetch (CHARSETINFO CHARSETASCENT) of Source))
           (SourceCharSetDescent (fetch (CHARSETINFO CHARSETDESCENT) of Source))
           (Height (+ SourceCharSetAscent SourceCharSetDescent))
           (UnknownOffset (\FGETOFFSET SourceOffsets (ADD1 \MAXTHINCHAR)))
           (CharSetInfo (create CHARSETINFO))
           (DestinationWidths (fetch (CHARSETINFO WIDTHS) of CharSetInfo))
           (DestinationOffsets (fetch (CHARSETINFO OFFSETS) of CharSetInfo))
           (DestinationImageWidths (\CREATECSINFOELEMENT))
           (DestinationOffset 0)
           (DestinationCharSetBitMap (BITMAPCOPY SourceCharSetBitMap)))
          (replace (CHARSETINFO IMAGEWIDTHS) of CharSetInfo with DestinationImageWidths)
          (replace (CHARSETINFO CHARSETBITMAP) of CharSetInfo with DestinationCharSetBitMap)
          (replace (CHARSETINFO CHARSETASCENT) of CharSetInfo with SourceCharSetAscent)
          (replace (CHARSETINFO CHARSETDESCENT) of CharSetInfo with SourceCharSetDescent)
          (for Index from 0 to (ADD1 \MAXTHINCHAR) do (\FSETWIDTH DestinationWidths Index
                                                             (\FGETWIDTH SourceWidths Index))
                                                      (\FSETOFFSET DestinationOffsets Index
                                                             (\FGETOFFSET SourceOffsets Index))
                                                      (\FSETIMAGEWIDTH DestinationImageWidths Index
                                                             (\FGETIMAGEWIDTH SourceImageWidths Index
                                                                    )))
          (LET [(YsMiddle (IQUOTIENT Height 2))
                (Top (SUB1 Height))
                (Odd (NOT (ZEROP (IMOD Height 2]
               (SELECTQ Half
                   (Top (if Odd
                            then (BITBLT SourceCharSetBitMap 0 YsMiddle DestinationCharSetBitMap 0 0 
                                        UnknownOffset 1 'SOURCE 'REPLACE))
                        (for Ys from Top to (ADD1 YsMiddle) by -1 as Yd from Top by -2
                           do (BITBLT SourceCharSetBitMap 0 Ys DestinationCharSetBitMap 0 Yd 
                                     UnknownOffset 1 'SOURCE 'REPLACE)
                              (BITBLT SourceCharSetBitMap 0 Ys DestinationCharSetBitMap 0
                                     (SUB1 Yd)
                                     UnknownOffset 1 'SOURCE 'REPLACE)))
                   (Bottom (if Odd
                               then (BITBLT SourceCharSetBitMap 0 YsMiddle DestinationCharSetBitMap 0 
                                           Top UnknownOffset 1 'SOURCE 'REPLACE))
                           (for Ys from 0 to (SUB1 YsMiddle) as Yd from 0 by 2
                              do (BITBLT SourceCharSetBitMap 0 Ys DestinationCharSetBitMap 0 Yd 
                                        UnknownOffset 1 'SOURCE 'REPLACE)
                                 (BITBLT SourceCharSetBitMap 0 Ys DestinationCharSetBitMap 0
                                        (ADD1 Yd)
                                        UnknownOffset 1 'SOURCE 'REPLACE)))
                   NIL))
          CharSetInfo])

(ANSI-Chat-Copy-CharSet-DoubleWide
  [LAMBDA (Source Width)
    (DECLARE (CONSTANTS \MAXTHINCHAR WORDSPERCELL))       (* ; "Edited 27-Sep-87 15:23 by R.Beeman")

    (LET* ((SourceWidths (fetch (CHARSETINFO WIDTHS) of Source))
           (SourceOffsets (fetch (CHARSETINFO OFFSETS) of Source))
           (SourceCharSetBitMap (fetch (CHARSETINFO CHARSETBITMAP) of Source))
           (SourceImageWidths (fetch (CHARSETINFO IMAGEWIDTHS) of Source))
           (SourceCharSetAscent (fetch (CHARSETINFO CHARSETASCENT) of Source))
           (SourceCharSetDescent (fetch (CHARSETINFO CHARSETDESCENT) of Source))
           (Height (+ SourceCharSetAscent SourceCharSetDescent))
           (UnknownOffset (\FGETOFFSET SourceOffsets (ADD1 \MAXTHINCHAR)))
           (CharSetInfo (create CHARSETINFO))
           (DestinationWidths (fetch (CHARSETINFO WIDTHS) of CharSetInfo))
           (DestinationOffsets (fetch (CHARSETINFO OFFSETS) of CharSetInfo))
           (DestinationImageWidths (\CREATECSINFOELEMENT))
           (DestinationOffset 0)
           [DestinationUnknownOffset (ITIMES (ADD1 Width)
                                            (for Index from 0 to (ADD1 \MAXTHINCHAR)
                                               count (NOT (EQ (\FGETOFFSET SourceOffsets Index)
                                                              UnknownOffset]
           (DestinationCharSetBitMap (BITMAPCREATE (+ DestinationUnknownOffset Width)
                                            Height 1)))
          (replace (CHARSETINFO IMAGEWIDTHS) of CharSetInfo with DestinationImageWidths)
          (replace (CHARSETINFO CHARSETBITMAP) of CharSetInfo with DestinationCharSetBitMap)
          (replace (CHARSETINFO CHARSETASCENT) of CharSetInfo with SourceCharSetAscent)
          (replace (CHARSETINFO CHARSETDESCENT) of CharSetInfo with SourceCharSetDescent)
          (\FSETWIDTH DestinationWidths (ADD1 \MAXTHINCHAR)
                 Width)
          (\FSETOFFSET DestinationOffsets (ADD1 \MAXTHINCHAR)
                 DestinationUnknownOffset)
          (\FSETIMAGEWIDTH DestinationImageWidths (ADD1 \MAXTHINCHAR)
                 Width)
          [for Index from 0 to \MAXTHINCHAR
             do (LET ((SourceOffset (\FGETOFFSET SourceOffsets Index)))
                     (\FSETWIDTH DestinationWidths Index Width)
                     (\FSETIMAGEWIDTH DestinationImageWidths Index Width)
                     (COND
                        ((EQ SourceOffset UnknownOffset)
                         (\FSETOFFSET DestinationOffsets Index DestinationUnknownOffset))
                        (T (\FSETOFFSET DestinationOffsets Index DestinationOffset)
                           (for X from 1 to (IMIN Width (\FGETIMAGEWIDTH SourceImageWidths Index))
                              as Xs from SourceOffset as Xd from DestinationOffset by 2
                              do (BITBLT SourceCharSetBitMap Xs 0 DestinationCharSetBitMap Xd 0 1 
                                        Height 'SOURCE 'REPLACE)
                                 (BITBLT SourceCharSetBitMap Xs 0 DestinationCharSetBitMap
                                        (ADD1 Xd)
                                        0 1 Height 'SOURCE 'REPLACE))
                           (SETQ DestinationOffset (+ DestinationOffset Width 1]
          (BLTSHADE BLACKSHADE DestinationCharSetBitMap (ADD1 DestinationUnknownOffset)
                 SourceCharSetDescent
                 (- Width 2)
                 SourceCharSetAscent
                 'REPLACE)
          CharSetInfo])

(ANSI-Chat-Font-Initialize
  [LAMBDA NIL
    (DECLARE (GLOBALVARS ANSI-Chat-Font))                 (* ; "Edited 25-Sep-87 20:06 by R.Beeman")
          
          (* ;; "Force Character Sets into memory")

    (PROMPTPRINT "Forcing Character Sets into memory ")
    [LET* [[BaseFont (FONTCREATE (OR [AND (BOUNDP 'ANSI-Chat-Font)
                                          ANSI-Chat-Font
                                          (FONTUNPARSE (FONTCOPY ANSI-Chat-Font 'FACE 'MRR]
                                     '(ANSITERMINAL 10]
           (BoldFont (FONTCOPY BaseFont 'WEIGHT 'BOLD]
          (for CharacterSpecification
             in '(0,040 41,142 42,041 46,163 50,043 356,176 357,344 360,270 361,41 375,320)
             do (LET ((CharacterCode (APPLY* (FUNCTION CHARCODE)
                                            CharacterSpecification)))
                     (CHARWIDTH CharacterCode BaseFont)
                     (PRINTOUT PROMPTWINDOW ".")
                     (CHARWIDTH CharacterCode BoldFont)
                     (PRINTOUT PROMPTWINDOW "."]
    (PRINTOUT PROMPTWINDOW " Done" T)
          
          (* ;; "Now build Font Descriptors")

    (ANSI-Chat-Build-Font-Descriptors])
)

(RPAQ? ANSI-Chat-Font NIL)
(DECLARE%: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS ANSI-Chat-Font-Descriptor-Cache ANSI-Chat-Font)
)

(ADDTOVAR MISSINGDISPLAYFONTCOERCIONS ((ANSITERMINAL)
                                       (TERMINAL)))

(ADDTOVAR ASCIITONSTRANSLATIONS (ANSITERMINAL NIL TERMINAL))
(DEFINEQ

(ANSI-Chat-Initialize-Character-Translations
  [LAMBDA NIL
    (DECLARE (GLOBALVARS ANSI-ASCII-Graphics-Character-Set ANSI-Supplemental-Graphics-Character-Set 
                    ANSI-Special-Graphics-Character-Set ANSI-British-NRC-Character-Set 
                    ANSI-Dutch-NRC-Character-Set ANSI-Finnish-NRC-Character-Set 
                    ANSI-French-NRC-Character-Set ANSI-French-Canadian-NRC-Character-Set 
                    ANSI-German-NRC-Character-Set ANSI-Italian-NRC-Character-Set 
                    ANSI-Norwegian/Danish-NRC-Character-Set ANSI-Spanish-NRC-Character-Set 
                    ANSI-Swedish-NRC-Character-Set ANSI-Swiss-NRC-Character-Set))
                                                          (* ; "Edited 22-Sep-87 20:07 by R.Beeman")

    (LET [[ANSI-ASCII-Graphics-Exceptions '(($ 0,44]
          [ANSI-Supplemental-Graphics-Exceptions '((! 0,241)
                                                   (%" 0,242)
                                                   (%# 0,243)
                                                   ($ 0,40)
                                                   (%% 0,245)
                                                   (& 0,40)
                                                   (%' 0,247)
                                                   (%( 0,44)
                                                   (%) 0,323)(* 0,343)
                                                   (+ 0,253)
                                                   (%, 0,40)
                                                   (- 0,40)
                                                   (%. 0,40)
                                                   (/ 0,40)
                                                   (0 0,260)
                                                   (1 0,261)
                                                   (2 0,262)
                                                   (3 0,263)
                                                   (4 0,40)
                                                   (5 0,265)
                                                   (6 0,266)
                                                   (7 0,267)
                                                   (8 0,40)
                                                   (9 0,321)
                                                   (%: 0,353)
                                                   (; 0,273)
                                                   (< 0,274)
                                                   (= 0,275)
                                                   (> 0,40)
                                                   (? 0,277)
                                                   (@ 361,41)
                                                   (A 361,42)
                                                   (B 361,43)
                                                   (C 361,44)
                                                   (D 361,47)
                                                   (E 361,50)
                                                   (F 0,341)
                                                   (G 361,55)
                                                   (H 361,60)
                                                   (I 361,61)
                                                   (J 361,62)
                                                   (K 361,65)
                                                   (L 361,76)
                                                   (M 361,77)
                                                   (N 361,100)
                                                   (O 361,104)
                                                   (P 0,40)
                                                   (Q 361,114)
                                                   (R 361,117)
                                                   (S 361,120)
                                                   (T 361,121)
                                                   (U 361,122)
                                                   (V 361,124)
                                                   (W 0,352)
                                                   (X 0,351)
                                                   (Y 361,137)
                                                   (Z 361,140)
                                                   (%[ 361,141)
                                                   (\ 361,145)
                                                   (%] 361,155)
                                                   (↑ 0,40)
                                                   (← 0,373)
                                                   (%` 361,241)
                                                   (a 361,242)
                                                   (b 361,243)
                                                   (c 361,244)
                                                   (d 361,247)
                                                   (e 361,250)
                                                   (f 0,361)
                                                   (g 361,255)
                                                   (h 361,260)
                                                   (i 361,261)
                                                   (j 361,262)
                                                   (k 361,265)
                                                   (l 361,276)
                                                   (m 361,277)
                                                   (n 361,300)
                                                   (o 361,304)
                                                   (p 0,40)
                                                   (q 361,314)
                                                   (r 361,317)
                                                   (s 361,320)
                                                   (t 361,321)
                                                   (u 361,322)
                                                   (v 361,324)
                                                   (w 0,372)
                                                   (x 0,371)
                                                   (y 361,337)
                                                   (z 361,340)
                                                   ({ 361,341)
                                                   (%| 361,345)
                                                   (} 361,355)
                                                   (~ 0,40]
          [ANSI-Special-Graphics-Exceptions '(($ 0,44)
                                              (← 0,040)
                                              (%` 42,041)
                                              (a 360,313)
                                              (b 360,271)
                                              (c 360,273)
                                              (d 360,274)
                                              (e 360,272)
                                              (f 0,260)
                                              (g 0,261)
                                              (h 360,275)
                                              (i 360,270)
                                              (j 50,045)
                                              (k 50,044)
                                              (l 50,043)
                                              (m 50,046)
                                              (n 357,346)
                                              (o 375,320)
                                              (p 375,321)
                                              (q 357,345)
                                              (r 375,322)
                                              (s 375,323)
                                              (t 50,047)
                                              (u 50,051)
                                              (v 50,052)
                                              (w 50,050)
                                              (x 357,344)
                                              (y 41,145)
                                              (z 41,146)
                                              ({ 46,163)
                                              (%| 41,142)
                                              (} 0,243)
                                              (~ 0,267]
          [ANSI-British-NRC-Exceptions '((%# 0,243)
                                         ($ 0,44]
          [ANSI-Dutch-NRC-Exceptions '((%# 0,243)
                                       ($ 0,44)
                                       (@ 0,276)
                                       (%[ 0,366)
                                       (\ 0,275)
                                       (%] 0,174)
                                       ({ 0,310)
                                       (%| 357,242)
                                       (} 0,274)
                                       (~ 0,302]
          [ANSI-Finnish-NRC-Exceptions '(($ 0,44)
                                         (%[ 361,047)
                                         (\ 361,124)
                                         (%] 361,050)
                                         (↑ 361,145)
                                         (%` 361,261)
                                         ({ 361,247)
                                         (%| 361,324)
                                         (} 361,345)
                                         (~ 0,373]
          [ANSI-French-NRC-Exceptions '((%# 0,243)
                                        ($ 0,44)
                                        (@ 361,241)
                                        (%[ 0,312)
                                        (\ 361,255)
                                        (%] 0,247)
                                        ({ 361,261)
                                        (%| 361,337)
                                        (} 361,260)
                                        (~ 0,310]
          [ANSI-French-Canadian-NRC-Exceptions '(($ 0,44)
                                                 (@ 361,241)
                                                 (%[ 361,243)
                                                 (\ 361,255)
                                                 (%] 361,262)
                                                 (↑ 361,300)
                                                 (%` 361,321)
                                                 ({ 361,261)
                                                 (%| 361,337)
                                                 (} 361,260)
                                                 (~ 361,341]
          [ANSI-German-NRC-Exceptions '(($ 0,44)
                                        (@ 0,247)
                                        (%[ 361,047)
                                        (\ 361,124)
                                        (%] 361,145)
                                        ({ 361,247)
                                        (%| 361,324)
                                        (} 361,345)
                                        (~ 0,373]
          [ANSI-Italian-NRC-Exceptions '((%# 0,243)
                                         ($ 0,44)
                                         (@ 0,247)
                                         (%[ 0,312)
                                         (\ 361,255)
                                         (%] 361,262)
                                         (%` 361,337)
                                         ({ 361,241)
                                         (%| 361,317)
                                         (} 361,260)
                                         (~ 361,277]
          [ANSI-Norwegian/Danish-NRC-Exceptions '(($ 0,44)
                                                  (@ 361,047)
                                                  (%[ 0,341)
                                                  (\ 0,351)
                                                  (%] 361,050)
                                                  (↑ 361,145)
                                                  (%` 361,247)
                                                  ({ 0,361)
                                                  (%| 0,371)
                                                  (} 361,250)
                                                  (~ 361,345]
          [ANSI-Spanish-NRC-Exceptions '((%# 0,243)
                                         ($ 0,44)
                                         (@ 0,247)
                                         (%[ 0,241)
                                         (\ 361,114)
                                         (%] 0,277)
                                         ({ 0,312)
                                         (%| 361,314)
                                         (} 361,255]
          [ANSI-Swedish-NRC-Exceptions '(($ 0,44)
                                         (@ 361,061)
                                         (%[ 361,047)
                                         (\ 361,124)
                                         (%] 361,050)
                                         (↑ 361,145)
                                         (%` 361,261)
                                         ({ 361,247)
                                         (%| 361,324)
                                         (} 361,250)
                                         (~ 361,345]
          (ANSI-Swiss-NRC-Exceptions '((%# 361,337)
                                       ($ 0,44)
                                       (@ 361,241)
                                       (%[ 361,261)
                                       (\ 361,255)
                                       (%] 361,262)
                                       (↑ 361,300)
                                       (← 361,260)
                                       (%` 361,321)
                                       ({ 361,247)
                                       (%| 361,324)
                                       (} 361,345)
                                       (~ 361,341]
         (SETQ ANSI-ASCII-Graphics-Character-Set (ANSI-Chat-Build-Map ANSI-ASCII-Graphics-Exceptions)
          )
         (SETQ ANSI-Supplemental-Graphics-Character-Set (ANSI-Chat-Build-Map 
                                                               ANSI-Supplemental-Graphics-Exceptions)
          )
         (SETQ ANSI-Special-Graphics-Character-Set (ANSI-Chat-Build-Map 
                                                          ANSI-Special-Graphics-Exceptions))
         (SETQ ANSI-British-NRC-Character-Set (ANSI-Chat-Build-Map ANSI-British-NRC-Exceptions))
         (SETQ ANSI-Dutch-NRC-Character-Set (ANSI-Chat-Build-Map ANSI-Dutch-NRC-Exceptions))
         (SETQ ANSI-Finnish-NRC-Character-Set (ANSI-Chat-Build-Map ANSI-Finnish-NRC-Exceptions))
         (SETQ ANSI-French-NRC-Character-Set (ANSI-Chat-Build-Map ANSI-French-NRC-Exceptions))
         (SETQ ANSI-French-Canadian-NRC-Character-Set (ANSI-Chat-Build-Map 
                                                             ANSI-French-Canadian-NRC-Exceptions))
         (SETQ ANSI-German-NRC-Character-Set (ANSI-Chat-Build-Map ANSI-German-NRC-Exceptions))
         (SETQ ANSI-Italian-NRC-Character-Set (ANSI-Chat-Build-Map ANSI-Italian-NRC-Exceptions))
         (SETQ ANSI-Norwegian/Danish-NRC-Character-Set (ANSI-Chat-Build-Map 
                                                              ANSI-Norwegian/Danish-NRC-Exceptions))
         (SETQ ANSI-Spanish-NRC-Character-Set (ANSI-Chat-Build-Map ANSI-Spanish-NRC-Exceptions))
         (SETQ ANSI-Swedish-NRC-Character-Set (ANSI-Chat-Build-Map ANSI-Swedish-NRC-Exceptions))
         (SETQ ANSI-Swiss-NRC-Character-Set (ANSI-Chat-Build-Map ANSI-Swiss-NRC-Exceptions])

(ANSI-Chat-Build-Map
  [LAMBDA (Exceptions)                                    (* ; "Edited  9-Sep-87 16:51 by R.Beeman")

    (LET ((Table (ARRAY 95 'WORD 0 0)))
         (for Index from 0 to 94 as CharacterCode from (CHARCODE SPACE)
            do (SETA Table Index CharacterCode))
         [for Exception in Exceptions do (SETA Table (- (APPLY* (FUNCTION CHARCODE)
                                                               (CAR Exception))
                                                        (CHARCODE SPACE))
                                               (APPLY* (FUNCTION CHARCODE)
                                                      (CADR Exception]
         Table])
)
(DECLARE%: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS ANSI-ASCII-Graphics-Character-Set ANSI-Supplemental-Graphics-Character-Set 
       ANSI-Special-Graphics-Character-Set ANSI-British-NRC-Character-Set 
       ANSI-Dutch-NRC-Character-Set ANSI-Finnish-NRC-Character-Set ANSI-French-NRC-Character-Set 
       ANSI-French-Canadian-NRC-Character-Set ANSI-German-NRC-Character-Set 
       ANSI-Italian-NRC-Character-Set ANSI-Norwegian/Danish-NRC-Character-Set 
       ANSI-Spanish-NRC-Character-Set ANSI-Swedish-NRC-Character-Set ANSI-Swiss-NRC-Character-Set)
)
(ANSI-Chat-Initialize-Character-Translations)
(ANSI-Chat-Font-Initialize)
(DECLARE%: EVAL@COMPILE DONTCOPY 
(FILESLOAD (SOURCE)
       FONTDECLS)
)
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (2212 26462 (ANSI-Chat-Build-Font-Descriptors 2222 . 13337) (ANSI-Chat-Copy-CharSet 
13339 . 17562) (ANSI-Chat-Copy-CharSet-DoubleHeight 17564 . 21481) (ANSI-Chat-Copy-CharSet-DoubleWide 
21483 . 25219) (ANSI-Chat-Font-Initialize 25221 . 26460)) (26770 43515 (
ANSI-Chat-Initialize-Character-Translations 26780 . 42779) (ANSI-Chat-Build-Map 42781 . 43513)))))
STOP