(FILECREATED "14-Jan-86 10:03:52" {DANTE}<RCLARKE>MODEL>FILLPRINT.;3 3920 changes to: (FNS FILLPRINT) previous date: "15-Dec-85 13:04:11" {FLOPPY}FILLPRINT.;1) (PRETTYCOMPRINT FILLPRINTCOMS) (RPAQQ FILLPRINTCOMS ((* Functions for paragraph formatted printing into windows.) (FNS FILLPRIN FILLPRINT))) (* Functions for paragraph formatted printing into windows.) (DEFINEQ (FILLPRIN [LAMBDA (WORD DSTRM LMARG RMARG) (* M.Model "26-Nov-85 21:48") (* print WORD on DSTRM, inserting LF first if it won't fit on current line. If a new line is needed, begin it at DSPXPOSITION LMARG (DSPLEFTMARGIN if NIL). - The right edge of the line is specified by RMARG (DSPRIGHTMARGIN if NIL).) (COND [(IGREATERP (IPLUS (DSPXPOSITION NIL DSTRM) (STRINGWIDTH WORD DSTRM)) (OR RMARG (DSPRIGHTMARGIN NIL DSTRM))) (COND ([OR (NEQ (CHARCODE % ) (CHCON1 WORD)) (for N from 2 to (NCHARS WORD) thereis (NEQ (QUOTE % ) (NTHCHAR WORD N] (* slight efficiency hack: looking at first character is cheap; if first is space, probably the rest are too so check explicitly.) (TERPRI DSTRM) (AND LMARG (DSPXPOSITION LMARG DSTRM)) (PRIN3 WORD DSTRM] (T (PRIN3 WORD DSTRM]) (FILLPRINT [LAMBDA (STR DSTRM INDENT LMARG RMARG FONT) (* edited: "14-Jan-86 10:01") (* Print a string in a window, inserting carriage returns whenever there is no room on the current line for the next word. - The first line will start at INDENT+LMARG (current if NIL) and subsequent lines (if necessary) will begin at LMARG (DSPLEFTMARGIN if NIL). - RMARG specifies the right edge for printing (default is DSPRIGHTMARGIN) - Return maximum DSPXPOSITION reached.) (* 14-NOV-84: changed from packing atoms to creating strings then from unpacking STR to walking it and using SUBSTRING. This cut the time in about half and essentially eliminated swapping; traded some string space for lots of lists.) (RESETLST [RESETSAVE (DSPFONT FONT DSTRM) (QUOTE (PROGN (DSPFONT OLDVALUE DSTRM] (bind (TAILPOS ← 0) POS MAXX eachtime (SETQ POS (ADD1 TAILPOS)) (SETQ TAILPOS (STRPOS " " STR POS)) repeatwhile TAILPOS first (DSPXPOSITION [SETQ MAXX (IPLUS (OR INDENT 0) (OR LMARG (DSPXPOSITION NIL DSTRM] DSTRM) do (AND (NTHCHAR STR POS) (NEQ (NTHCHAR STR POS) (QUOTE % )) (FILLPRIN (SUBSTRING STR POS (AND TAILPOS (SUB1 TAILPOS)) (CONSTANT "ADSF.")) DSTRM LMARG RMARG)) (* EQ only when first char is a space, in which case pass on FILLPRIN but process the space.) (SETQ MAXX (MAX MAXX (DSPXPOSITION NIL DSTRM))) [COND ((IGREATERP (IPLUS (DSPXPOSITION NIL DSTRM) (STRINGWIDTH " " DSTRM)) (OR RMARG (DSPRIGHTMARGIN NIL DSTRM))) (TERPRI DSTRM) (DSPXPOSITION LMARG DSTRM)) (T (OR (EQUAL LMARG (DSPXPOSITION NIL DSTRM)) (PRIN3 " " DSTRM] finally (COND ((NOT (EQUAL (OR LMARG (DSPLEFTMARGIN NIL DSTRM)) (DSPXPOSITION NIL DSTRM))) (SETQ MAXX (MAX MAXX (DSPXPOSITION NIL DSTRM))) (TERPRI DSTRM))) (RETURN MAXX]) ) (PUTPROPS FILLPRINT COPYRIGHT (NONE)) (DECLARE: DONTCOPY (FILEMAP (NIL (404 3860 (FILLPRIN 414 . 1509) (FILLPRINT 1511 . 3858))))) STOP