From d0b17b4b00cac19aec55dccf2736aeed65644dac Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Mon, 6 Apr 2026 11:39:15 -0700 Subject: [PATCH] Remove deleted --- deleted/SOURCES/AFONT | 463 ------------------------------------ deleted/SOURCES/AFONT.DFASL | Bin 6642 -> 0 bytes 2 files changed, 463 deletions(-) delete mode 100644 deleted/SOURCES/AFONT delete mode 100644 deleted/SOURCES/AFONT.DFASL diff --git a/deleted/SOURCES/AFONT b/deleted/SOURCES/AFONT deleted file mode 100644 index 96e8e6d9..00000000 --- a/deleted/SOURCES/AFONT +++ /dev/null @@ -1,463 +0,0 @@ -(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) - -(FILECREATED "22-Jul-2025 23:20:06"  -{DSK}kaplan>Local>medley3.5>working-medley>sources>AFONT.;15 27510 - - :EDIT-BY rmk - - :CHANGES-TO (VARS AFONTCOMS) - - :PREVIOUS-DATE "21-Jul-2025 00:14:04" -{DSK}kaplan>Local>medley3.5>working-medley>sources>AFONT.;14) - - -(PRETTYCOMPRINT AFONTCOMS) - -(RPAQQ AFONTCOMS - [ - (* ;; "AC font file support. ACFONT.FILEP is on FONT") - - (XCL:FILE-ENVIRONMENTS "AFONT") - (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS BOUNDINGBOX FONTBOUNDINGBOX)) - (FNS ACFONT.FILEP ACFONT.GETCHARSET \READACFONTBOXES \READACFONTFILE \ACCHARIMAGELIST - \ACCHARWIDTHLIST \GETFBB \ACCHARPOSLIST \ACROTATECHAR \FACECODE \FAMILYCODE) - (ADDVARS (DISPLAYCHARSETFNS (AC ACFONT.FILEP ACFONT.GETCHARSET]) - - - -(* ;; "AC font file support. ACFONT.FILEP is on FONT") - - -(XCL:DEFINE-FILE-ENVIRONMENT "AFONT" :PACKAGE "IL" - :READTABLE "INTERLISP" - :COMPILER :COMPILE-FILE) -(DECLARE%: EVAL@COMPILE DONTCOPY -(DECLARE%: EVAL@COMPILE - -(RECORD BOUNDINGBOX ( - - (* * The bounding box for a character in an AC file) - - BBOX (* Offset from the left edge of the - bounding box to the character's origin) - BBOY (* Offset from the bottom of the - bounding box to the character's origin) - BBDX (* Width of the character's bounding - box in pixels) - BBDY (* Height of the bounding box in bits; - -1 if this character doesn't really - exist) - RASTERWIDTHX (* Width of the character's image - (i.e., the escapement for this - character) in raster bits) - RASTERWIDTHY (* Amount this char moves in Y, in - raster units.) - )) - -(RECORD FONTBOUNDINGBOX (FBBBDX FBBBDY FBBBOX FBBBOY)) -) -) -(DEFINEQ - -(ACFONT.FILEP - [LAMBDA (FILE) (* ; "Edited 15-May-2025 17:48 by rmk") - (RESETLST - (CL:UNLESS (OPENP FILE 'INPUT) - [RESETSAVE (SETQ FILE (OPENSTREAM FILE 'INPUT 'OLD)) - `(PROGN (CLOSEF? OLDVALUE]) - - (* ;; "This is the length of a standard index header. Other files could also have this value, but it's a pretty good discriminator") - - (* ;; "Skip to byte 25; do it with BINS so works for non-randaccessp devices. This skips the standard name header, then look for type 3 in the following header") - - (CL:WHEN (EQ (\WIN FILE) - (LOGOR (LLSH 16 8) - 12)) - (FRPTQ 22 (\BIN FILE)) (* ; "(SETFILEPTR STRM 25)") - (EQ 3 (LRSH (\BIN FILE) - 4))))]) - -(ACFONT.GETCHARSET - [LAMBDA (STRM CHARSET) (* ; "Edited 14-Jul-2025 19:50 by rmk") - (* ; "Edited 17-May-2025 10:15 by rmk") - - (* ;; - "STRM must be good for this CHARSET. This defaults the padding arguments of \READACFONTFILE") - - (\READACFONTFILE STRM]) - -(\READACFONTBOXES - [LAMBDA (FILE STARTCHAR ENDCHAR) (* jds "15-Jun-85 11:48") - (* ; - "GETACCHARSPECS returns (bbox bboy bbdx bbdy)") - (* ; - "if bbdx and bbdy are both zero, then treat it as a space.") - - (SETFILEPTR FILE 48) (* ; - "Move to the start of AC file's width info.") - - (for X from STARTCHAR to ENDCHAR collect (* ; - "Now collect the 4 bounding box values into a list") - - (create BOUNDINGBOX - RASTERWIDTHX _ (PROG1 (\WIN FILE) - (* ; - "Read a fraction, and truncate it to an integer # of raster bits") - - (\WIN FILE)) - RASTERWIDTHY _ (PROG1 (\WIN FILE) - (* ; - "Read a fraction, and truncate it to an integer # of raster bits") - - (\WIN FILE)) - BBOX _ (SIGNED (\WIN FILE) - BITSPERWORD) - BBOY _ (SIGNED (\WIN FILE) - BITSPERWORD) - BBDX _ (SIGNED (\WIN FILE) - BITSPERWORD) - BBDY _ (SIGNED (\WIN FILE) - BITSPERWORD]) - -(\READACFONTFILE - [LAMBDA (STRM PAD.LEFT DONT.PAD.RIGHT) (* ; "Edited 14-Jul-2025 19:49 by rmk") - (* ; "Edited 8-Jul-2025 22:04 by rmk") - (* ; "Edited 9-Jun-2025 14:17 by rmk") - (* ; "Edited 16-May-2025 17:44 by rmk") - (* ; "Edited 1-Sep-87 10:04 by Snow") - (RESETLST - (PROG [FBBLIST STARTCHAR ENDCHAR CHARWIDTHLIST CHARIMAGEWIDTHLIST OFFSETS WIDTHS IMAGEWIDTHS - FONTDESC FBBBITMAP CHARBITMAP STARTWORDLIST BBOXLIST DUMMYCHAROFFSET DUMMYWIDTH - (CSINFO (create CHARSETINFO - IMAGEWIDTHS _ (\CREATECSINFOELEMENT) - LEFTKERN _ (\CREATEKERNELEMENT] - (CL:UNLESS (GETSTREAM STRM 'INPUT T) - [RESETSAVE (SETQ STRM (OPENSTREAM STRM 'INPUT 'OLD)) - `(PROGN (CLOSEF? OLDVALUE]) - [COND - ((AND (GETSTREAM STRM 'INPUT T) - (RANDACCESSP STRM)) (* ; - "Presumably open from \READDISPLAYFONTFILE") - (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) - STRM))) - (T - (* ;; "This is necessary unless we figure out how to read the AC file sequentially. When we figure this out, we can factor the RESETSAVE back in \READDISPLAYFONTFILE") - - (SETQ STRM (OPENSTREAM (CLOSEF? STRM) - 'INPUT)) - (RESETSAVE NIL (LIST (FUNCTION CLOSEF?) - STRM)) - (COPYBYTES STRM (SETQ STRM (OPENSTREAM '{NODIRCORE} 'BOTH] - (SETFILEPTR STRM 0) - (CL:UNLESS (ACFONT.FILEP STRM) - (ERROR "Not an AC font file" STRM)) - (SETFILEPTR STRM 28) (* ; - "Starting at 28 skips the family and face bytes.") - (SETQ STARTCHAR (BIN STRM)) (* ; - "Get the first and last characters in this font") - (SETQ ENDCHAR (BIN STRM)) - (SETQ BBOXLIST (\READACFONTBOXES STRM STARTCHAR ENDCHAR)) - (* ; - "Read the list of bounding boxes for all the chars in the font") - (SETQ FBBLIST (\GETFBB BBOXLIST)) - (SETQ CHARWIDTHLIST (\ACCHARIMAGELIST BBOXLIST)) - (* ; - "And the escapement for each character.") - (SETQ CHARIMAGEWIDTHLIST (\ACCHARWIDTHLIST BBOXLIST FBBLIST)) - (* ; - "Create the list of character widths for the characters in the font.") - (COND - ([EVERY (CDR CHARWIDTHLIST) - (FUNCTION (LAMBDA (WID) - (OR (ZEROP WID) - (EQP WID (CAR CHARWIDTHLIST] - (* ; - "Fixed-pitch font. Make the dummy character (for non-existent chars) the same width.") - (SETQ DUMMYWIDTH (CAR CHARWIDTHLIST))) - (T (* ; "Otherwise, make the dummy 6 wide.") - (SETQ DUMMYWIDTH 6))) - (COND - ((NULL (REMOVE 0 CHARIMAGEWIDTHLIST)) - (ERROR "No raster mages" NIL) - (RETURN))) - (FOR I FROM STARTCHAR TO ENDCHAR AS BOX IN BBOXLIST - DO (* ; "set the left kerning values. the default value is ZERO which is set when the element is created. Currently it is an array because kerning values can be negative values.") - (\FSETLEFTKERN CSINFO I (FFETCH (BOUNDINGBOX BBOX) OF BOX))) - (SETQ IMAGEWIDTHS (fetch (CHARSETINFO IMAGEWIDTHS) of CSINFO)) - (for I from 0 to (ADD1 \MAXTHINCHAR) do (\FSETIMAGEWIDTH IMAGEWIDTHS I DUMMYWIDTH)) - (SETQ WIDTHS (fetch (CHARSETINFO WIDTHS) of CSINFO)) - (for I from 0 to (ADD1 \MAXTHINCHAR) do (\FSETWIDTH WIDTHS I DUMMYWIDTH)) - - (* ;; "Create the array of character widths, assuming the dummy width for all characters--we'll write over it later") - - [for X from STARTCHAR to ENDCHAR as Y in CHARIMAGEWIDTHLIST - do - (* ;; "Fill in the image widths (the width of the image, as against how far to space over after printing the character)") - - (\FSETIMAGEWIDTH IMAGEWIDTHS X (COND - ((ZEROP Y) - 0) - (T (IPLUS Y (COND - (PAD.LEFT 1) - (T 0)) - (COND - (DONT.PAD.RIGHT 0) - (T 1] - (* ; - "And the array of image escapements") - (for X from STARTCHAR to ENDCHAR as Y in CHARWIDTHLIST - do (\FSETWIDTH WIDTHS X Y)) - [replace CHARSETDESCENT of CSINFO with (IMAX 0 (IMINUS (fetch (FONTBOUNDINGBOX FBBBOY) - of FBBLIST] - [replace CHARSETASCENT of CSINFO with (IMAX 0 (IPLUS (fetch (FONTBOUNDINGBOX FBBBDY) - of FBBLIST) - (fetch (FONTBOUNDINGBOX FBBBOY) - of FBBLIST] - [replace CHARSETBITMAP of CSINFO with (SETQ CHARBITMAP - (BITMAPCREATE (IPLUS (SETQ DUMMYCHAROFFSET - (for (X _ STARTCHAR) - to ENDCHAR - sum (\FGETWIDTH - IMAGEWIDTHS - X))) - DUMMYWIDTH) - (fetch (FONTBOUNDINGBOX FBBBDY) - of FBBLIST] - (SETQ OFFSETS (fetch (CHARSETINFO OFFSETS) of CSINFO)) - (for I from 0 to (ADD1 \MAXTHINCHAR) do (\FSETOFFSET OFFSETS I DUMMYCHAROFFSET)) - (SETQ STARTWORDLIST (\ACCHARPOSLIST STRM STARTCHAR ENDCHAR)) - (bind (DESTLEFT _ 0) for NTHCHAR from STARTCHAR to ENDCHAR as BBLIST in BBOXLIST - as STARTWORD in STARTWORDLIST as CHARWIDTH in CHARWIDTHLIST - do (PROG (RASTERINFO BBOX BBBITMAP BBBMBASE)(* ; - "\ACCHARPOSLIST returns NIL if no raster exists for the code") - (COND - ((NULL STARTWORD) - - (* ;; "This character has no image; use the dummy char's offset (already in the offset and width arrays from earlier)") - - (add DESTLEFT (\FGETWIDTH IMAGEWIDTHS NTHCHAR)) - (\FSETWIDTH WIDTHS NTHCHAR DUMMYWIDTH) - (\FSETIMAGEWIDTH IMAGEWIDTHS NTHCHAR DUMMYWIDTH) - (GO L2))) - (SETFILEPTR STRM STARTWORD) (* ; - "If could flush this, would work on non-randaccessp devices") - (SETQ RASTERINFO (\WIN STRM)) - (COND - ((EQ -1 (fetch BBDY of BBLIST)) - (\FSETWIDTH WIDTHS NTHCHAR DUMMYWIDTH) - (\FSETIMAGEWIDTH IMAGEWIDTHS NTHCHAR DUMMYWIDTH) - (GO L2))) (* ; - "\ACCHARPOSLIST returns NIL if no raster exists for the code") - (SETQ BBOX (fetch BBOX of BBLIST)) - (COND - ((AND (ZEROP (fetch BBDX of BBLIST)) - (ZEROP (fetch BBDY of BBLIST))) - (* ; - "The image is zero wide or zero high. Don't bother reading a bitmap image") - ) - ((SETQ BBBITMAP (BITMAPCREATE (TIMES 16 (FOLDLO RASTERINFO 1024)) - (IMOD RASTERINFO 1024))) - (SETQ BBBMBASE (fetch BITMAPBASE of BBBITMAP)) - - (* ;; "STARTWORD is the characters raster information word. The high 6 bits record number of words per scan line and the lower 10 bits is the same as bbdx bbdx. The raster for the char follows STARTWORD") - - (\BINS STRM BBBMBASE 0 (TIMES 2 (FOLDLO RASTERINFO 1024) - (IMOD RASTERINFO 1024))) - (SETQ BBBITMAP (\ACROTATECHAR BBBITMAP)) - (* ; - "here is the place to add a rotation function to manipulate the character images coming off *.ac") - (BITBLT BBBITMAP 0 0 CHARBITMAP [PLUS DESTLEFT - (IMAX 0 (COND - (PAD.LEFT (ADD1 BBOX)) - (T BBOX] - (DIFFERENCE (fetch BBOY of BBLIST) - (fetch (FONTBOUNDINGBOX FBBBOY) of FBBLIST)) - (\FGETWIDTH IMAGEWIDTHS NTHCHAR) - (CADDDR BBLIST) - 'INPUT - 'REPLACE) (* ; - "ADD1 to BBOX because we add an empty column to each raster image to the left") - )) - (\FSETOFFSET OFFSETS NTHCHAR DESTLEFT) - - (* ;; "on screen ac fonts, there are no spaces stored so that the width of the char is exactly that of the character image without any spacing columns") - - (add DESTLEFT (\FGETWIDTH IMAGEWIDTHS NTHCHAR)) - L2 (* ; - "add 2 because of the two blank columns we add; one on either side of the ac raster image") - )) - (BITBLT NIL 0 0 CHARBITMAP (ADD1 DUMMYCHAROFFSET) - 0 - (IDIFFERENCE DUMMYWIDTH 2) - NIL - 'TEXTURE - 'REPLACE BLACKSHADE) (* ; - "Fill in the dummy-character black blot") - (RETURN CSINFO)))]) - -(\ACCHARIMAGELIST - [LAMBDA (BOXLIST) (* jds "15-Jun-85 11:37") - - (* ;; "Returns a list of the ESCAPEMENTS (ie how far to move after printng this character) for each char in the font.") - - (for BOX in BOXLIST collect (fetch (BOUNDINGBOX RASTERWIDTHX) of BOX]) - -(\ACCHARWIDTHLIST - [LAMBDA (BOXLIST FBBOX) (* jds " 4-Dec-84 16:05") - (* ; - "GETACCHARSPECS returns (bbox bboy bbdx bbdy)") - (* ; - "if bbdx and bbdy are both zero, then treat it as a space.") - - (for BOX in BOXLIST bind (STARTWORD BBOX BBOY BBDX BBDY) - collect (SETQ BBOX (fetch BBOX of BOX)) - (SETQ BBOY (fetch BBOY of BOX)) - (SETQ BBDX (fetch BBDX of BOX)) - (SETQ BBDY (fetch BBDY of BOX)) - (COND - ((AND (ZEROP BBDX) - (ZEROP BBDY)) (* ; - "we've found a Space. Smash in a quarter of the maximum width. Maybe should be an explicit em?") - - (IMAX 2 (FOLDLO (IPLUS 2 (fetch (FONTBOUNDINGBOX FBBBDX) of FBBOX)) - 4))) - (T (COND - ((EQ BBDX -1) - 0) - (T (IPLUS BBDX (IMAX 0 BBOX]) - -(\GETFBB - [LAMBDA (BOXLIST) (* jds "17-May-85 10:22") - (* ; - "Read a font bounding box from an AC file") - - (PROG (RESULTLIST CHARCOUNT BBLIST MAXBBOX MAXBBOY MINBBOX MINBBOY MAXSUMBBOXBBDX MAXSUMBBOYBBDY - BBOX BBOY BBDX BBDY) (* ; - "\GETFBB returns the fbbdx fbbdy fbbox fbboy of an acfont") - - (SETQ MINBBOX 32767) - (SETQ MINBBOY 32767) - (SETQ MAXBBOX -32768) - (SETQ MAXBBOY -32768) - (SETQ MAXSUMBBOXBBDX -32768) - (SETQ MAXSUMBBOYBBDY -32768) - [for BOX in BOXLIST do (SETQ BBOX (fetch (BOUNDINGBOX BBOX) of BOX)) - (SETQ BBOY (fetch (BOUNDINGBOX BBOY) of BOX)) - (SETQ BBDX (fetch (BOUNDINGBOX BBDX) of BOX)) - (SETQ BBDY (fetch (BOUNDINGBOX BBDY) of BOX)) - (* ; - "GETACCHARSPECS returns bbox bboy bbdx bbdy") - - (COND - [(IEQP BBDY -1) (* ; - "This character doesn't exist. Create a dummy bounding box for it") - - (SETQ BBLIST '(0 0 0 -1] - (T (COND - ((IGREATERP BBOX MAXBBOX) - (SETQ MAXBBOX BBOX))) - (COND - ((ILESSP BBOX MINBBOX) - (SETQ MINBBOX BBOX))) - (COND - ((IGREATERP BBOY MAXBBOY) - (SETQ MAXBBOY BBOY))) - (COND - ((ILESSP BBOY MINBBOY) - (SETQ MINBBOY BBOY))) - [COND - ((IGREATERP (IPLUS BBOX BBDX) - MAXSUMBBOXBBDX) - (SETQ MAXSUMBBOXBBDX (IPLUS BBOX BBDX] - (COND - ((IGREATERP (IPLUS BBOY BBDY) - MAXSUMBBOYBBDY) - (SETQ MAXSUMBBOYBBDY (IPLUS BBOY BBDY] - (* ; - "\GETFBB returns the fbbdx fbbdy fbbox fbboy of an acfont") - - (RETURN (create FONTBOUNDINGBOX - FBBBDX _ (IDIFFERENCE MAXSUMBBOXBBDX MINBBOX) - FBBBDY _ (IDIFFERENCE MAXSUMBBOYBBDY MINBBOY) - FBBBOX _ MINBBOX - FBBBOY _ MINBBOY]) - -(\ACCHARPOSLIST - [LAMBDA (FILE STARTCHAR ENDCHAR) (* jds "10-NOV-83 20:19") - (* ; - "\ACCHARPOSLIST returns the word position of the raster for the nth character of the file") - - [SETFILEPTR FILE (IPLUS 48 (ITIMES 16 (ADD1 (IDIFFERENCE ENDCHAR STARTCHAR] - (bind HIWORD LOWORD [DIRECTORYSTART _ (IPLUS 48 (ITIMES 16 (ADD1 (IDIFFERENCE ENDCHAR STARTCHAR] - first (SETFILEPTR FILE DIRECTORYSTART) for X from STARTCHAR to ENDCHAR - collect (SETQ HIWORD (\WIN FILE)) - (SETQ LOWORD (\WIN FILE)) (* ; - "If the position of the acchar is given as -1,-1 then the raster does not exist so return nil") - - (COND - ((AND (IEQP HIWORD 65535) - (IEQP LOWORD 65535)) - NIL) - (T (IPLUS (LLSH HIWORD 17) - (LLSH LOWORD 1) - DIRECTORYSTART]) - -(\ACROTATECHAR - [LAMBDA (BITMAP) (* ; "Edited 28-Jul-87 18:49 by Snow") - - (* ;; "(prog (new.bitmap (width (|fetch| (bitmap bitmapwidth) |of| bitmap)) (height (|fetch| (bitmap bitmapheight) |of| bitmap))) (setq new.bitmap (bitmapcreate height width)) (|for| y |from| 0 |to| (sub1 height) |do| (|for| x |from| 0 |to| (sub1 width) |bind| (y1 _ (idifference (sub1 height) y)) |do| (bitmapbit new.bitmap y1 x (bitmapbit bitmap x y)))) (return new.bitmap))") - - (ROTATE-BITMAP-LEFT BITMAP]) - -(\FACECODE - [LAMBDA (FACE) (* rmk%: "27-FEB-81 12:16") - (IPLUS (SELECTQ (fetch (FONTFACE EXPANSION) of FACE) - (REGULAR 0) - (COMPRESSED 6) - (EXPANDED 12) - (SHOULDNT)) - (SELECTQ (fetch (FONTFACE WEIGHT) of FACE) - (MEDIUM 0) - (BOLD 2) - (LIGHT 4) - (SHOULDNT)) - (SELECTQ (fetch (FONTFACE SLOPE) of FACE) - (REGULAR 0) - (ITALIC 1) - (SHOULDNT]) - -(\FAMILYCODE - [LAMBDA (FAMILY WSTRM) (* rmk%: "11-Sep-84 10:54") - - (* ;; "Returns the family CODE for FAMILY in a standard widths file, leaving the file positioned at the beginning of the next file entry. Returns NIL if FAMILY not found. If FAMILY is T, returns the code for the first family in the index.") - - (SETFILEPTR WSTRM 0) - (bind TYPE CODE LENGTH (NCHARS _ (NCHARS FAMILY)) - (NEXT _ 0) - do (SETFILEPTR WSTRM NEXT) - (SETQ TYPE (\BIN WSTRM)) - (SETQ LENGTH (\BIN WSTRM)) - (add NEXT (LLSH (IPLUS LENGTH (LLSH (LOGAND TYPE 15) - 8)) - 1)) - (SELECTQ (LRSH TYPE 4) - (1 (SETQ CODE (\WIN WSTRM)) - (COND - ([OR (EQ FAMILY T) - (AND (EQ NCHARS (\BIN WSTRM)) - (for I from 1 to NCHARS always (EQ (\BIN WSTRM) - (NTHCHARCODE FAMILY I] - (SETFILEPTR WSTRM NEXT) (* ; "Move file to next entry") - - (RETURN CODE)))) - (0 (RETURN NIL)) - NIL]) -) - -(ADDTOVAR DISPLAYCHARSETFNS (AC ACFONT.FILEP ACFONT.GETCHARSET)) -(DECLARE%: DONTCOPY - (FILEMAP (NIL (2626 27417 (ACFONT.FILEP 2636 . 3520) (ACFONT.GETCHARSET 3522 . 3914) (\READACFONTBOXES - 3916 . 6143) (\READACFONTFILE 6145 . 18986) (\ACCHARIMAGELIST 18988 . 19345) (\ACCHARWIDTHLIST 19347 - . 20613) (\GETFBB 20615 . 23895) (\ACCHARPOSLIST 23897 . 24947) (\ACROTATECHAR 24949 . 25513) ( -\FACECODE 25515 . 26109) (\FAMILYCODE 26111 . 27415))))) -STOP diff --git a/deleted/SOURCES/AFONT.DFASL b/deleted/SOURCES/AFONT.DFASL deleted file mode 100644 index 9338e3cfce097131782c19f74ddb8b3f509788bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6642 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 E|NY$c$N&HU