(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