MMCT TEAM
Server IP : 111.118.215.189  /  Your IP : 18.117.158.174
Web Server : Apache
System : Linux md-in-83.webhostbox.net 4.19.286-203.ELK.el7.x86_64 #1 SMP Wed Jun 14 04:33:55 CDT 2023 x86_64
User : a1673wkz ( 2475)
PHP Version : 8.2.25
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /usr/share/emacs/24.3/lisp/textmodes/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : //usr/share/emacs/24.3/lisp/textmodes/artist.elc
;ELC
;;; Compiled by mockbuild@buildfarm06-new.corp.cloudlinux.com on Fri Oct 11 10:11:46 2024
;;; from file /builddir/build/BUILD/emacs-24.3/lisp/textmodes/artist.el
;;; in Emacs version 24.3.1
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.

;;; This file does not contain utf-8 non-ASCII characters,
;;; and so can be loaded in Emacs versions earlier than 23.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(defconst artist-version "1.2.6")
(defconst artist-maintainer-address "tab@lysator.liu.se")
(byte-code "\300\301\302\303\304\305%\210\300\306\302\307\304\301%\210\310\311\312\313\304\301\314\315&\210\310\316\317\320\304\301\314\321&\210\310\322\323\324\304\301\314\321&\210\310\325\312\326\304\301\314\315&\207" [custom-declare-group artist nil "Customization of the Artist mode." :group mouse artist-text "Customization of the text rendering." custom-declare-variable artist-rubber-banding t "Interactively do rubber-banding when non-nil." :type boolean artist-first-char 49 "Character to set at first point when not rubber-banding." character artist-second-char 50 "Character to set at second point when not rubber-banding." artist-interface-with-rect "Whether to interface with the rect package or not.\n\nInterfacing to the rect package means that the Copy and Paste operations\nwill use the rectangle buffer when accessing the copied area.  This means\nthat you can insert a rectangle which is copied using the artist package\nand vice versa.\n\nIf this causes any problem for you (for example, if the implementation of\nthe rectangle package changes), you can set this variable to nil, and the\nartist package will use its own copy buffer."] 8)
#@292 A vector of characters to use as arrows.

The vector is 8 elements long and contains a character for each
direction, or nil if there is no suitable character to use for arrow
in that direction.

The directions are as follows:

			  5  6  7
			   \ | /
			 4 - * - 0
			   / | \
			  3  2  1
(defvar artist-arrows [62 nil 118 76 60 nil 94 nil] (#$ . 1815))
(byte-code "\300\301\302\303\304\305\306\307&\210\300\310\311\312\304\305\306\313&\210\300\314\315\316\304\305\306\317&\210\300\320\311\321\304\305\306\313&\210\300\322\323\324\304\305\306\325&\210\300\326\327\330\304\305\306\325&\210\300\331\311\332\304\305\306\313&\210\300\333\302\334\304\305\306\335&\207" [custom-declare-variable artist-aspect-ratio 1 "Defines the character height-to-width aspect ratio.\nThis is used when drawing squares and circles." :group artist :type number artist-trim-line-endings t "Whether or not to remove white-space at end of lines.\n\nIf non-nil, line-endings are trimmed (that is, extraneous white-space\nat the end of the line is removed) when the shape is drawn." boolean artist-flood-fill-right-border 'window-width "Right edge definition, used when flood-filling.\n\nWhen flood-filling, if the area is not closed off to the right, then\nflood-filling will fill no more to the right than specified by this\nvariable.  This limit is called the fill-border." (choice (const :tag "limited to window" window-width) (const :tag "limited to value of `fill-column'" fill-column)) artist-flood-fill-show-incrementally "Whether or not to incrementally update display when flood-filling.\n\nIf non-nil, incrementally update display when flood-filling.\nIf set to non-nil, this currently implies discarding any input events\nduring the flood-fill." artist-ellipse-right-char 41 "Character to use at the rightmost position when drawing narrow ellipses.\n\nIn this figure, it is the right parenthesis (the ``)'' character):\n             -----\n            (     )\n             -----" character artist-ellipse-left-char 40 "Character to use at the leftmost position when drawing narrow ellipses.\n\nIn this figure, it is the left parenthesis (the ``('' character):\n             -----\n            (     )\n             -----" artist-picture-compatibility "Whether or not picture mode compatibility is on." artist-vaporize-fuzziness "How to vaporize lines that are cut off.\n\nAccept this many characters cutting off a line and still treat\nit as one line.\nExample:\n If `artist-vaporize-fuzziness' is 2, then those will be recognized as\n lines from A to B (provided you start vaporizing them at the ``*''):\n                         /\n            A----*------/-----------B\n                      \\/\n            A----*----/\\------------B\n                     /  \\\n\n but this one won't, since it is cut off by more than 2 characters:\n                      \\/ /\n            A----*----/\\/----------B\n                     / /\\\n (in fact, only the left part [between the A and the leftmost ``/''\n crossing the line] will be vaporized)." integer] 8)
#@71 If in X Windows, use this pointer shape while drawing with the mouse.
(defvar artist-pointer-shape (byte-code "\302=\205	\207" [window-system x-pointer-crosshair x] 2) (#$ . 4875))
(byte-code "\300\301\302\303\304\305\306\307&\210\310\311\301\"\210\300\312\313\314\304\305\306\315&\210\300\316\317\320\304\305\306\315&\210\300\321\322\323\304\305\306\315&\210\300\324\325\326\304\327\306\330&\210\300\331\332\333\304\327\306\334&\207" [custom-declare-variable artist-text-renderer-function 'artist-figlet "Function for doing text rendering." :group artist-text :type symbol defvaralias artist-text-renderer artist-figlet-program "figlet" "Program to run for `figlet'." string artist-figlet-default-font "standard" "Default font for `figlet'." artist-figlet-list-fonts-command "for dir in `figlet -I2`; do cd $dir; ls *.flf; done" "Command to run to get list of available fonts." artist-spray-interval 0.2 "Number of seconds between repeated spraying." artist number artist-spray-radius 4 "Size of the area for spraying." integer] 8)
#@180 Characters (``color'') to use when spraying.
They should be ordered from the ``lightest'' to the ``heaviest''
since spraying replaces a light character with the next heavier one.
(defvar artist-spray-chars '(32 46 45 43 109 37 42 35) (#$ . 5924))
#@240 Initial character to use when spraying.
This character is used if spraying upon a character that is not in
`artist-spray-chars'.  The character defined by this variable should
be in `artist-spray-chars', or spraying will behave strangely.
(defvar artist-spray-new-char 46 (#$ . 6178))
#@53 Non-nil to enable `artist-mode' and nil to disable.
(defvar artist-mode nil (#$ . 6469))
(make-variable-buffer-local 'artist-mode)
#@72 Name of Artist mode beginning with a space (appears in the mode-line).
(defvar artist-mode-name " Artist" (#$ . 6606))
#@38 Current selected graphics operation.
(defvar artist-curr-go 'pen-line (#$ . 6731))
(make-variable-buffer-local 'artist-curr-go)
#@75 Boolean to tell whether user has set some char to use when drawing lines.
(defvar artist-line-char-set nil (#$ . 6865))
(make-variable-buffer-local 'artist-line-char-set)
#@33 Char to use when drawing lines.
(defvar artist-line-char nil (#$ . 7042))
(make-variable-buffer-local 'artist-line-char)
#@69 Boolean to tell whether user has set some char to use when filling.
(defvar artist-fill-char-set nil (#$ . 7169))
(make-variable-buffer-local 'artist-fill-char-set)
#@27 Char to use when filling.
(defvar artist-fill-char nil (#$ . 7340))
(make-variable-buffer-local 'artist-fill-char)
#@27 Char to use when erasing.
(defvar artist-erase-char 32 (#$ . 7461))
(make-variable-buffer-local 'artist-erase-char)
#@59 Char to use when a fill-char is required but none is set.
(defvar artist-default-fill-char 46 (#$ . 7583))
(make-variable-buffer-local 'artist-default-fill-char)
#@14 Copy buffer.
(defvar artist-copy-buffer nil (#$ . 7751))
#@59 Line-number for top-most visited line for draw operation.
(defvar artist-draw-region-min-y 0 (#$ . 7814))
(make-variable-buffer-local 'artist-draw-region-min-y)
#@62 Line-number for bottom-most visited line for draw operation.
(defvar artist-draw-region-max-y 0 (#$ . 7981))
(make-variable-buffer-local 'artist-draw-region-max-y)
#@88 When non-nil, draw shapes without border.
The fill char is used instead, if it is set.
(defvar artist-borderless-shapes nil (#$ . 8151))
(make-variable-buffer-local 'artist-borderless-shapes)
#@373 Assoc list for looking up next and/or previous draw operation.
The structure is as follows:  (OP . (PREV-OP . NEXT-OP))
where the elements are as follows:
* OP is an atom: the KEY-SYMBOL in the `artist-mt' structure
* PREV-OP and NEXT-OP are strings: the KEYWORD in the `artist-mt' structure

This variable is initialized by the `artist-make-prev-next-op-alist' function.
(defvar artist-prev-next-op-alist nil (#$ . 8350))
(byte-code "\203\302\303!\210\302\304!\210	\203\302\305!\210\302\207" [artist-interface-with-rect artist-picture-compatibility require rect reporter picture] 2)
(defvar artist-key-is-drawing nil)
(defvar artist-key-endpoint1 nil)
(defvar artist-key-poly-point-list nil)
(defvar artist-key-shape nil)
(defvar artist-key-draw-how nil)
(defvar artist-popup-menu-table nil)
(defvar artist-key-compl-table nil)
(defvar artist-rb-save-data nil)
(defvar artist-arrow-point-1 nil)
(defvar artist-arrow-point-2 nil)
(defvar artist-menu-map (byte-code "\303 \304\305\306#\210\304\307\310#\210\304\311\312#\210\304\313\314#\210\304\315\316#\210\304\317\320#\210\304\321\322#\210\304\323\324#\210\325\326\211\203f\n@\304\327\330	8!\331	@	A@\332\333\334	@\"\335\336\337\340\341\330	8DF\257#\210\nA\211\204;*)\207" [map op --dolist-tail-- make-sparse-keymap define-key [spray-chars] (menu-item "Characters for Spray" artist-select-spray-chars :help "Choose characters for sprayed by the spray-can") [borders] (menu-item "Draw Shape Borders" artist-toggle-borderless-shapes :help "Toggle whether shapes are drawn with borders" :button (:toggle not artist-borderless-shapes)) [trimming] (menu-item "Trim Line Endings" artist-toggle-trim-line-endings :help "Toggle trimming of line-endings" :button (:toggle . artist-trim-line-endings)) [rubber-band] (menu-item "Rubber-banding" artist-toggle-rubber-banding :help "Toggle rubber-banding" :button (:toggle . artist-rubber-banding)) [set-erase] (menu-item "Character to Erase..." artist-select-erase-char :help "Choose a specific character to erase") [set-line] (menu-item "Character for Line..." artist-select-line-char :help "Choose the character to insert when drawing lines") [set-fill] (menu-item "Character for Fill..." artist-select-fill-char :help "Choose the character to insert when filling in shapes") [artist-separator] (menu-item "--") (("Vaporize" artist-select-op-vaporize-lines vaporize-lines) ("Erase" artist-select-op-erase-rectangle erase-rect) ("Spray-can" artist-select-op-spray-set-size spray-get-size) ("Text" artist-select-op-text-overwrite text-ovwrt) ("Ellipse" artist-select-op-circle circle) ("Poly-line" artist-select-op-straight-poly-line spolyline) ("Square" artist-select-op-square square) ("Rectangle" artist-select-op-rectangle rectangle) ("Line" artist-select-op-straight-line s-line) ("Pen" artist-select-op-pen-line pen-line)) nil vector 2 menu-item :help format "Draw using the %s style" :button :radio eq artist-curr-go quote] 16))
#@33 Keymap for `artist-minor-mode'.
(defvar artist-mode-map (byte-code "\303 \303 \304\305\306#\210\304\307\306#\210\304\310\311#\210\304\312\311#\210\304\313\314#\210\304\315\314#\210\304\316\317#\210\304\320\321#\210\304\322\323#\210\304\324\325#\210\304\326\325#\210\304\327\330#\210\304\331\330#\210\304\332\333#\210\304\334\333#\210\304\335\336#\210\304\337\336#\210\304\340\341#\210\304\342\343#\210\304\344\345#\210\304\346\347#\210\304\350\351#\210\304\352\353#\210\304\354\355#\210\304\356\357#\210\304\360\361#\210\304\362\363#\210\304\364\365#\210\304\366\367#\210\304\370\371#\210\304\372\373#\210\304\374\373#\210\304\375\376#\210\304\377\201@#\210\304\201A\201B#\210\304\201C\201D#\210\304\201E\201F#\210\304\201G\201H#\210\304\201I\201J#\210\304\201K\201L#\210\304\201M\201N#\210\304\201O\201P#\210\304\201Q\201R#\210\304\201S\201T#\210\304\201U\201V#\210\304\201W\201X#\210\304\201Y\201Z#\210\304\201[\201\\#\210\304\201]\201^#\210\304\201_\201`\nB#\210)\207" [map artist-mode-map artist-menu-map make-sparse-keymap define-key [down-mouse-1] artist-down-mouse-1 [S-down-mouse-1] [down-mouse-2] artist-mouse-choose-operation [S-down-mouse-2] [down-mouse-3] artist-down-mouse-3 [S-down-mouse-3] [C-mouse-4] artist-select-prev-op-in-list [C-mouse-5] artist-select-next-op-in-list "
" artist-key-set-point [up] artist-previous-line "" [down] artist-next-line "" [left] artist-backward-char "" [right] artist-forward-char "" "<" artist-toggle-first-arrow ">" artist-toggle-second-arrow "" artist-select-erase-char "" artist-select-fill-char "\f" artist-select-line-char "" artist-select-operation "" artist-toggle-rubber-banding "" artist-toggle-trim-line-endings "" artist-toggle-borderless-shapes "" artist-mode-off "l" artist-select-op-line "L" artist-select-op-straight-line "r" artist-select-op-rectangle "R" artist-select-op-square "s" "p" artist-select-op-poly-line "P" artist-select-op-straight-poly-line "e" artist-select-op-ellipse "c" artist-select-op-circle "t" artist-select-op-text-see-thru "T" artist-select-op-text-overwrite "S" artist-select-op-spray-can "z" artist-select-op-spray-set-size "" artist-select-op-erase-char "E" artist-select-op-erase-rectangle "v" artist-select-op-vaporize-line "V" artist-select-op-vaporize-lines "" artist-select-op-cut-rectangle "\367" artist-select-op-copy-rectangle "" artist-select-op-paste "f" artist-select-op-flood-fill "" artist-submit-bug-report [menu-bar artist] "Artist"] 5) (#$ . 11304))
#@46 Replacement table for `artist-replace-char'.
(defvar artist-replacement-table (make-vector 256 0) (#$ . 13928))
#@5659 Master Table for `artist-mode'.
This table is primarily a table over the different graphics operations
available in Artist mode, but it also holds layout information for the
popup menu.

The master table is a list of table elements.  The elements of this table
have the layout

  (TAG INFO-PART)

There are three kinds of TAG:

  `menu'                -- a sub-menu
  `separator'           -- produce a separator in the popup menu
  `function-call'       -- call a function
  `graphics-operation'  -- a graphics operation

The layout of the INFO-PART for `menu' is

  (TITLE ((TAG-1 INFO-PART-1) (TAG-2 INFO-PART-2) ...))

TITLE is the title of the submenu; this is followed by a list of
menu items, each on the general form (TAG INFO-PART).


The layout of the INFO-PART for `separator' is empty and not used.


This is the layout of the INFO-PART for `function-call':

  (KEYWORD SYMBOL FN)

KEYWORD is a string naming the operation, and appears in the popup menu.
SYMBOL is the symbol for the operations.
FN is the function performing the operation.  This function
  is called with no arguments.  Its return value is ignored.


The layout of the INFO-PART for `graphics-operation' is

  (TITLE (UNSHIFTED SHIFTED))

TITLE is the title that appears in the popup menu.  UNSHIFTED
and SHIFTED specify for unshifted and shifted operation.  Both
have the form

  (KEYWORD KEY-SYMBOL MODE-LINE ARROW-PRED ARROW-SET-FN
   INIT-FN PREP-FILL-FN EXIT-FN DRAW-HOW DRAW-FN EXTRA-DRAW-INFO)

KEYWORD is a string specifying the name of the shape to draw.
  This is used when selecting drawing operation.
KEY-SYMBOL is the key which is used when looking up members
  through the functions `artist-go-get-MEMBER-from-symbol'
  and `artist-fc-get-MEMBER-from-symbol'.
MODE-LINE is a string that appears in the mode-line when drawing
  the shape.
ARROW-PRED is a function that is called to find out if the shape
  can have arrows.  The function is called with no arguments and
  must return nil or t.
ARROW-SET-FN is a function that is called to set arrow end-points.
  Arguments and return values for this function are described below.
INIT-FN is, if non-nil, a function that is called when the first
  point of the shape is set.  Arguments and return values for
  this function are described below.
PREP-FILL-FN is, if non-nil, a function that is called after
  the last point is set, but before the filling is done.
  Arguments and return values for this function are described below.
EXIT-FN is, if non-nil, a function that is called after filling
  is done.  Arguments and return values for this function are
  described below.
DRAW-HOW defines the kind of shape.  The kinds of shapes are:
  `artist-do-continously'  -- Do drawing operation continuously,
                              as long as the mouse button is held down.
  `artist-do-poly'         -- Do drawing operation many times.
  1                        -- Do drawing operation only once.
  2                        -- The drawing operation requires two points.
DRAW-FN is the function to call for drawing.  Arguments and
  return values for this function are described below.
EXTRA-DRAW-INFO the layout of this depends on the value of DRAW-HOW:
  If DRAW-HOW is `artist-do-continously':

    (INTERVAL-FN)

    INTERVAL-FN is, if non-nil, a function to call for getting
      an interval between repeated calls to the DRAW-FN.
      This function is called with no arguments and must
      return a number, the interval in seconds.
      If nil, calls to DRAW-FN are done only when the mouse
      or cursor is moved.

  If DRAW-HOW is either `artist-do-poly' or 2:

    (UNDRAW-FN FILL-PRED FILL-FN)

    UNDRAW-FN is a function to call for undrawing the shape.
      Arguments and return values for this function are
      described below.
    FILL-PRED is a function that is called to find out if the shape
      can have arrows.  The function must take no arguments and
      return nil or t.
    FILL-FN  is a function to call for filling the shape.
      Arguments and return values for this function are
      described below.

  If DRAW-HOW is 1:

    ()

Note! All symbols and keywords (both in the `function-call' INFO-PART
      as well as in the `graphics-operation' INFO-PART) must be unique.

The following table describe function arguments and return value
for different functions and DRAW-HOWs.

If DRAW-HOW is either `artist-do-continously' or 1:

  INIT-FN       X Y ==> ignored
  PREP-FILL-FN  X Y ==> ignored
  EXIT-FN       X Y ==> ignored
  ARROW-SET-FN  X Y ==> ignored
  DRAW-FN       X Y ==> ignored

If DRAW-HOW is 2:

  INIT-FN       X1 Y1  ==> ignored
  PREP-FILL-FN  X1 Y1 X2 Y2 ==> ignored
  EXIT-FN       X1 Y1 X2 Y2 ==> ignored
  ARROW-SET-FN  X1 Y1 X2 Y2 ==> ignored
  DRAW-FN       X1 Y1 X2 Y2 ==> (ENDPOINT-1 ENDPOINT-2 SHAPE)
  UNDRAW-FN     (ENDPOINT-1 ENDPOINT-2 SHAPE) ==> ignored
  FILL-FN	 (ENDPOINT-1 ENDPOINT-2 SHAPE) X1 Y1 X2 Y2 ==> ignored

  ENDPOINT-1 and ENDPOINT-2 are endpoints which are created with
  `artist-make-endpoint'
  SHAPE is an opaque structure, created by the DRAW-FN and intended
  to be used only by the UNDRAW-FN.

If DRAW-HOW is `artist-do-poly':

  INIT-FN       X1 Y1
  PREP-FILL-FN  POINT-LIST
  ARROW-SET-FN  POINT-LIST
  EXIT-FN       POINT-LIST
  DRAW-FN       X-LAST Y-LAST X-NEW Y-NEW ==> (ENDPOINT-1 ENDPOINT-2 SHAPE)
  UNDRAW-FN     (ENDPOINT-1 ENDPOINT-2 SHAPE)
  FILL-FN       POINT-LIST

  ENDPOINT-1 and ENDPOINT-2 are endpoints which are created with
  `artist-make-endpoint'.
  SHAPE is an opaque structure, created by the DRAW-FN and intended
  to be used only by the UNDRAW-FN.
  POINT-LIST is a list of vectors [X Y].
(defvar artist-mt '((menu ("Drawing" ((function-call ("Undo" do-undo undo)) (separator) (graphics-operation ("Pen" (("Pen" pen-char "pen-c" artist-no-arrows nil nil nil nil artist-do-continously artist-pen (nil)) ("Pen Line" pen-line "pen-l" artist-arrows artist-pen-set-arrow-points artist-pen-reset-last-xy nil nil artist-do-continously artist-pen-line (nil))))) (graphics-operation ("Line" (("line" line "line" artist-arrows artist-set-arrow-points-for-2points nil nil nil 2 artist-draw-line (artist-undraw-line artist-nil nil)) ("straight line" s-line "sline" artist-arrows artist-set-arrow-points-for-2points nil nil nil 2 artist-draw-sline (artist-undraw-sline artist-nil nil))))) (graphics-operation ("Rectangle" (("rectangle" rect "rect" artist-no-arrows nil nil nil nil 2 artist-draw-rect (artist-undraw-rect artist-t-if-fill-char-set artist-fill-rect)) ("square" square "square" artist-no-arrows nil nil nil nil 2 artist-draw-square (artist-undraw-square artist-t-if-fill-char-set artist-fill-square))))) (graphics-operation ("Poly-line" (("poly-line" polyline "poly" artist-arrows artist-set-arrow-points-for-poly nil nil nil artist-do-poly artist-draw-line (artist-undraw-line artist-nil nil)) ("straight poly-line" spolyline "s-poly" artist-arrows artist-set-arrow-points-for-poly nil nil nil artist-do-poly artist-draw-sline (artist-undraw-sline artist-nil nil))))) (graphics-operation ("Ellipse" (("ellipse" ellipse "ellipse" artist-no-arrows nil nil nil nil 2 artist-draw-ellipse (artist-undraw-ellipse artist-t-if-fill-char-set artist-fill-ellipse)) ("circle" circle "circle" artist-no-arrows nil nil nil nil 2 artist-draw-circle (artist-undraw-circle artist-t-if-fill-char-set artist-fill-circle))))) (graphics-operation ("Text" (("text see-thru" text-thru "text-thru" artist-no-arrows nil nil nil nil 1 artist-text-see-thru nil) ("text overwrite" text-ovwrt "text-ovwrt" artist-no-arrows nil nil nil nil 1 artist-text-overwrite nil)))) (graphics-operation ("Spray-can" (("spray-can" spray-can "spray-can" artist-no-arrows nil nil nil nil artist-do-continously artist-spray (artist-spray-get-interval)) ("spray set size" spray-get-size "spray-size" artist-no-arrows nil nil artist-spray-clear-circle artist-spray-set-radius 2 artist-draw-circle (artist-undraw-circle artist-nil nil))))) (graphics-operation ("Erase" (("erase char" erase-char "erase-c" artist-no-arrows nil nil nil nil artist-do-continously artist-erase-char (nil)) ("erase rectangle" erase-rect "erase-r" artist-no-arrows nil nil nil nil 2 artist-draw-rect (artist-undraw-rect artist-t artist-erase-rect))))) (graphics-operation ("Vaporize" (("vaporize line" vaporize-line "vaporize-1" artist-no-arrows nil nil nil nil 1 artist-vaporize-line nil) ("vaporize lines" vaporize-lines "vaporize-n" artist-no-arrows nil nil nil nil 1 artist-vaporize-lines nil))))))) (menu ("Edit" ((graphics-operation ("Cut" (("cut rectangle" cut-r "cut-r" artist-no-arrows nil nil nil nil 2 artist-draw-rect (artist-undraw-rect artist-t artist-cut-rect)) ("cut square" cut-s "cut-s" artist-no-arrows nil nil nil nil 2 artist-draw-square (artist-undraw-square artist-t artist-cut-square))))) (graphics-operation ("Copy" (("copy rectangle" copy-r "copy-r" artist-no-arrows nil nil nil nil 2 artist-draw-rect (artist-undraw-rect artist-t artist-copy-rect)) ("copy square" copy-s "copy-s" artist-no-arrows nil nil nil nil 2 artist-draw-square (artist-undraw-square artist-t artist-copy-square))))) (graphics-operation ("Paste" (("paste" paste "paste" artist-no-arrows nil nil nil nil 1 artist-paste nil) ("paste" paste "paste" artist-no-arrows nil nil nil nil 1 artist-paste nil)))) (graphics-operation ("Flood-fill" (("flood-fill" flood-fill "flood" artist-no-arrows nil nil nil nil 1 artist-flood-fill nil) ("flood-fill" flood-fill "flood" artist-no-arrows nil nil nil nil 1 artist-flood-fill nil))))))) (menu ("Settings" ((function-call ("Set Fill" set-fill artist-select-fill-char)) (function-call ("Set Line" set-line artist-select-line-char)) (function-call ("Set Erase" set-erase artist-select-erase-char)) (function-call ("Rubber-banding" rubber-band artist-toggle-rubber-banding)) (function-call ("Trimming" trimming artist-toggle-trim-line-endings)) (function-call ("Borders" borders artist-toggle-borderless-shapes)) (function-call ("Spray-chars" spray-chars artist-select-spray-chars)))))) (#$ . 14048))
#@59 Retrieve the tag component from the master table ELEMENT.
(defalias 'artist-mt-get-tag #[(element) "\301\234\207" [element 0] 2 (#$ . 24088)])
#@65 Retrieve the info part component from the master table ELEMENT.
(defalias 'artist-mt-get-info-part #[(element) "\301\234\207" [element 1] 2 (#$ . 24238)])
#@73 Retrieve the description component from a graphics operation INFO-PART.
(defalias 'artist-go-get-desc #[(info-part) "\301\234\207" [info-part 0] 2 (#$ . 24400)])
(put 'artist-go-get-desc 'byte-optimizer 'byte-compile-inline-expand)
#@66 Retrieve the unshifted info from a graphics operation INFO-PART.
(defalias 'artist-go-get-unshifted #[(info-part) "\301\234\302\234\207" [info-part 1 0] 2 (#$ . 24639)])
(put 'artist-go-get-unshifted 'byte-optimizer 'byte-compile-inline-expand)
#@64 Retrieve the shifted info from a graphics operation INFO-PART.
(defalias 'artist-go-get-shifted #[(info-part) "\301\234\301\234\207" [info-part 1] 2 (#$ . 24891)])
(put 'artist-go-get-shifted 'byte-optimizer 'byte-compile-inline-expand)
#@131 Retrieve the keyword component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
(defalias 'artist-go-get-keyword #[(info-variant-part) "\301\234\207" [info-variant-part 0] 2 (#$ . 25136)])
(put 'artist-go-get-keyword 'byte-optimizer 'byte-compile-inline-expand)
#@130 Retrieve the symbol component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
(defalias 'artist-go-get-symbol #[(info-variant-part) "\301\234\207" [info-variant-part 1] 2 (#$ . 25456)])
(put 'artist-go-get-symbol 'byte-optimizer 'byte-compile-inline-expand)
#@133 Retrieve the mode line component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
(defalias 'artist-go-get-mode-line #[(info-variant-part) "\301\234\207" [info-variant-part 2] 2 (#$ . 25773)])
(put 'artist-go-get-mode-line 'byte-optimizer 'byte-compile-inline-expand)
#@139 Retrieve the arrow predicate component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
(defalias 'artist-go-get-arrow-pred #[(info-variant-part) "\301\234\207" [info-variant-part 3] 2 (#$ . 26099)])
(put 'artist-go-get-arrow-pred 'byte-optimizer 'byte-compile-inline-expand)
#@133 Retrieve the arrow set component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
(defalias 'artist-go-get-arrow-set-fn #[(info-variant-part) "\301\234\207" [info-variant-part 4] 2 (#$ . 26433)])
(put 'artist-go-get-arrow-set-fn 'byte-optimizer 'byte-compile-inline-expand)
#@137 Retrieve the init function component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
(defalias 'artist-go-get-init-fn #[(info-variant-part) "\301\234\207" [info-variant-part 5] 2 (#$ . 26765)])
(put 'artist-go-get-init-fn 'byte-optimizer 'byte-compile-inline-expand)
#@149 Retrieve the fill preparation function component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
(defalias 'artist-go-get-prep-fill-fn #[(info-variant-part) "\301\234\207" [info-variant-part 6] 2 (#$ . 27091)])
(put 'artist-go-get-prep-fill-fn 'byte-optimizer 'byte-compile-inline-expand)
#@128 Retrieve the exit component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
(defalias 'artist-go-get-exit-fn #[(info-variant-part) "\301\234\207" [info-variant-part 7] 2 (#$ . 27439)])
(put 'artist-go-get-exit-fn 'byte-optimizer 'byte-compile-inline-expand)
#@132 Retrieve the draw how component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
(defalias 'artist-go-get-draw-how #[(info-variant-part) "\301\234\207" [info-variant-part 8] 2 (#$ . 27756)])
(put 'artist-go-get-draw-how 'byte-optimizer 'byte-compile-inline-expand)
#@137 Retrieve the draw function component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
(defalias 'artist-go-get-draw-fn #[(info-variant-part) "\301\234\207" [info-variant-part 9] 2 (#$ . 28079)])
(put 'artist-go-get-draw-fn 'byte-optimizer 'byte-compile-inline-expand)
#@262 Retrieve the undraw function component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
This interval function component is available only if the `draw-how'
component is other than `artist-do-continously' or 1.
(defalias 'artist-go-get-undraw-fn #[(info-variant-part) "\301\234\302\234\207" [info-variant-part 10 0] 2 (#$ . 28405)])
(put 'artist-go-get-undraw-fn 'byte-optimizer 'byte-compile-inline-expand)
#@248 Retrieve the interval function component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
This interval function component is available only if the `draw-how'
component is `artist-do-continously'.
(defalias 'artist-go-get-interval-fn #[(info-variant-part) "\301\234\302\234\207" [info-variant-part 10 0] 2 (#$ . 28871)])
(put 'artist-go-get-interval-fn 'byte-optimizer 'byte-compile-inline-expand)
#@261 Retrieve the fill predicate component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
This interval function component is available only if the `draw-how'
component is other than `artist-do-continously' or 1.
(defalias 'artist-go-get-fill-pred #[(info-variant-part) "\301\234\302\234\207" [info-variant-part 10 1] 2 (#$ . 29327)])
(put 'artist-go-get-fill-pred 'byte-optimizer 'byte-compile-inline-expand)
#@260 Retrieve the fill function component from an INFO-VARIANT-PART.
An INFO-VARIANT-PART is the shifted or unshifted info from a info-part.
This interval function component is available only if the `draw-how'
component is other than `artist-do-continously' or 1.
(defalias 'artist-go-get-fill-fn #[(info-variant-part) "\301\234\302\234\207" [info-variant-part 10 2] 2 (#$ . 29792)])
(put 'artist-go-get-fill-fn 'byte-optimizer 'byte-compile-inline-expand)
#@69 Retrieve the keyword component from a graphics operation INFO-PART.
(defalias 'artist-fc-get-keyword #[(info-part) "\301\234\207" [info-part 0] 2 (#$ . 30251)])
(put 'artist-fc-get-keyword 'byte-optimizer 'byte-compile-inline-expand)
#@68 Retrieve the symbol component from a graphics operation INFO-PART.
(defalias 'artist-fc-get-symbol #[(info-part) "\301\234\207" [info-part 1] 2 (#$ . 30492)])
(put 'artist-fc-get-symbol 'byte-optimizer 'byte-compile-inline-expand)
#@70 Retrieve the function component from a graphics operation INFO-PART.
(defalias 'artist-fc-get-fn #[(info-part) "\301\234\207" [info-part 2] 2 (#$ . 30730)])
(put 'artist-fc-get-fn 'byte-optimizer 'byte-compile-inline-expand)
#@67 Retrieve the title component from a graphics operation INFO-PART.
(defalias 'artist-mn-get-title #[(info-part) "\301\234\207" [info-part 0] 2 (#$ . 30962)])
(put 'artist-mn-get-title 'byte-optimizer 'byte-compile-inline-expand)
#@67 Retrieve the items component from a graphics operation INFO-PART.
(defalias 'artist-mn-get-items #[(info-part) "\301\234\207" [info-part 1] 2 (#$ . 31197)])
(put 'artist-mn-get-items 'byte-optimizer 'byte-compile-inline-expand)
#@108 Find the last non-nil draw operation in OP-LIST.
Optional LAST-NON-NIL will be returned if OP-LIST is nil.
(defalias 'artist-get-last-non-nil-op #[(op-list &optional last-non-nil) "\203\302A@@\206	\"\207	\207" [op-list last-non-nil artist-get-last-non-nil-op] 3 (#$ . 31433)])
#@51 Find the first non-nil draw operation in OP-LIST.
(defalias 'artist-get-first-non-nil-op #[(op-list) "@@\206\n\301A!\207" [op-list artist-get-first-non-nil-op] 2 (#$ . 31723)])
#@33 Check whether OP is in OP-LIST.
(defalias 'artist-is-in-op-list-p #[(op op-list) "\205@@\203	@@\230\206\302	A\"\207" [op-list op artist-is-in-op-list-p] 3 (#$ . 31909)])
#@166 Build an assoc-list of OP-LIST.
The arguments LAST-NON-NIL-ARG, FIRST-NON-NIL-ARG, PREV-ENTRY and
PREV-OP-ARG are used when invoked recursively during the build-up.
(defalias 'artist-make-prev-next-op-alist #[(op-list &optional last-non-nil-arg first-non-nil-arg prev-entry prev-op-arg) "\206\306	!\206\307	!
\206\n\f
@@\310!\211\f\311BB
\2035\203?\312
A\"\203M\313
A\n\f\f%\202v\203YA\241\210
\203o\313
A\n\f%B\202vA\f\241\210\311.\207" [last-non-nil-arg artist-key-compl-table last-non-nil first-non-nil-arg first-non-nil prev-op-arg artist-get-last-non-nil-op artist-get-first-non-nil-op artist-mt-get-symbol-from-keyword nil artist-is-in-op-list-p artist-make-prev-next-op-alist prev-op op-list op opsym entry prev-entry] 8 (#$ . 32096)])
#@48 Cyclically select next drawing mode operation.
(defalias 'artist-select-next-op-in-list #[nil "\303	\"AA\304\n!\210\305\306\n\")\207" [artist-curr-go artist-prev-next-op-alist next-op assoc artist-select-operation message "%s"] 3 (#$ . 32900) nil])
#@52 Cyclically select previous drawing mode operation.
(defalias 'artist-select-prev-op-in-list #[nil "\303	\"A@\304\n!\210\305\306\n\")\207" [artist-curr-go artist-prev-next-op-alist prev-op assoc artist-select-operation message "%s"] 3 (#$ . 33157) nil])
#@91 Non-nil if Artist mode is enabled.
Use the command `artist-mode' to change this variable.
(defvar artist-mode nil (#$ . 33418))
(make-variable-buffer-local 'artist-mode)
#@7582 Toggle Artist mode.
With argument ARG, turn Artist mode on if ARG is positive.
Artist lets you draw lines, squares, rectangles and poly-lines,
ellipses and circles with your mouse and/or keyboard.

How to quit Artist mode

 Type \[artist-mode-off] to quit artist-mode.


How to submit a bug report

 Type \[artist-submit-bug-report] to submit a bug report.


Drawing with the mouse:

 mouse-2
 shift mouse-2	Pops up a menu where you can select what to draw with
		mouse-1, and where you can do some settings (described
		below).

 mouse-1
 shift mouse-1	Draws lines, rectangles or poly-lines, erases, cuts, copies
		or pastes:

		Operation	Not shifted		  Shifted
		--------------------------------------------------------------
                Pen             fill-char at point        line from last point
                                                          to new point
		--------------------------------------------------------------
		Line		Line in any direction	  Straight line
		--------------------------------------------------------------
		Rectangle	Rectangle		  Square
		--------------------------------------------------------------
		Poly-line	Poly-line in any dir	  Straight poly-lines
		--------------------------------------------------------------
		Ellipses	Ellipses		  Circles
		--------------------------------------------------------------
		Text		Text (see thru)		  Text (overwrite)
		--------------------------------------------------------------
		Spray-can	Spray-can		  Set size for spray
		--------------------------------------------------------------
		Erase		Erase character		  Erase rectangle
		--------------------------------------------------------------
		Vaporize	Erase single line	  Erase connected
							  lines
		--------------------------------------------------------------
		Cut		Cut rectangle		  Cut square
		--------------------------------------------------------------
		Copy		Copy rectangle		  Copy square
		--------------------------------------------------------------
		Paste		Paste			  Paste
		--------------------------------------------------------------
		Flood-fill	Flood-fill		  Flood-fill
		--------------------------------------------------------------

		* Straight lines can only go horizontally, vertically
		  or diagonally.

		* Poly-lines are drawn while holding mouse-1 down.  When you
		  release the button, the point is set.  If you want a segment
		  to be straight, hold down shift before pressing the
		  mouse-1 button.  Click mouse-2 or mouse-3 to stop drawing
		  poly-lines.

		* See thru for text means that text already in the buffer
		  will be visible through blanks in the text rendered, while
		  overwrite means the opposite.

		* Vaporizing connected lines only vaporizes lines whose
		  _endpoints_ are connected.  See also the variable
		  `artist-vaporize-fuzziness'.

		* Cut copies, then clears the rectangle/square.

		* When drawing lines or poly-lines, you can set arrows.
		  See below under ``Arrows'' for more info.

		* The mode line shows the currently selected drawing operation.
		  In addition, if it has an asterisk (*) at the end, you
		  are currently drawing something.

		* Be patient when flood-filling -- large areas take quite
		  some time to fill.


 mouse-3	Erases character under pointer
 shift mouse-3	Erases rectangle


Settings

 Set fill	Sets the character used when filling rectangles/squares

 Set line	Sets the character used when drawing lines

 Erase char	Sets the character used when erasing

 Rubber-banding	Toggles rubber-banding

 Trimming	Toggles trimming of line-endings (that is: when the shape
		is drawn, extraneous white-space at end of lines is removed)

 Borders        Toggles the drawing of line borders around filled shapes


Drawing with keys

 \[artist-key-set-point]		Does one of the following:
		For lines/rectangles/squares: sets the first/second endpoint
		For poly-lines: sets a point (use C-u \[artist-key-set-point] to set last point)
		When erase characters: toggles erasing
		When cutting/copying: Sets first/last endpoint of rect/square
		When pasting: Pastes

 \[artist-select-operation]	Selects what to draw

 Move around with \[artist-next-line], \[artist-previous-line], \[artist-forward-char] and \[artist-backward-char].

 \[artist-select-fill-char]	Sets the character to use when filling
 \[artist-select-line-char]	Sets the character to use when drawing
 \[artist-select-erase-char]	Sets the character to use when erasing
 \[artist-toggle-rubber-banding]	Toggles rubber-banding
 \[artist-toggle-trim-line-endings]	Toggles trimming of line-endings
 \[artist-toggle-borderless-shapes]	Toggles borders on drawn shapes


Arrows

 \[artist-toggle-first-arrow]		Sets/unsets an arrow at the beginning
		of the line/poly-line

 \[artist-toggle-second-arrow]		Sets/unsets an arrow at the end
		of the line/poly-line


Selecting operation

 There are some keys for quickly selecting drawing operations:

 \[artist-select-op-line]	Selects drawing lines
 \[artist-select-op-straight-line]	Selects drawing straight lines
 \[artist-select-op-rectangle]	Selects drawing rectangles
 \[artist-select-op-square]	Selects drawing squares
 \[artist-select-op-poly-line]	Selects drawing poly-lines
 \[artist-select-op-straight-poly-line]	Selects drawing straight poly-lines
 \[artist-select-op-ellipse]	Selects drawing ellipses
 \[artist-select-op-circle]	Selects drawing circles
 \[artist-select-op-text-see-thru]	Selects rendering text (see thru)
 \[artist-select-op-text-overwrite]	Selects rendering text (overwrite)
 \[artist-select-op-spray-can]	Spray with spray-can
 \[artist-select-op-spray-set-size]	Set size for the spray-can
 \[artist-select-op-erase-char]	Selects erasing characters
 \[artist-select-op-erase-rectangle]	Selects erasing rectangles
 \[artist-select-op-vaporize-line]	Selects vaporizing single lines
 \[artist-select-op-vaporize-lines]	Selects vaporizing connected lines
 \[artist-select-op-cut-rectangle]	Selects cutting rectangles
 \[artist-select-op-copy-rectangle]	Selects copying rectangles
 \[artist-select-op-paste]	Selects pasting
 \[artist-select-op-flood-fill]	Selects flood-filling


Variables

 This is a brief overview of the different variables.  For more info,
 see the documentation for the variables (type \[describe-variable] <variable> RET).

 artist-rubber-banding		Interactively do rubber-banding or not
 artist-first-char		What to set at first/second point...
 artist-second-char		...when not rubber-banding
 artist-interface-with-rect	If cut/copy/paste should interface with rect
 artist-arrows			The arrows to use when drawing arrows
 artist-aspect-ratio		Character height-to-width for squares
 artist-trim-line-endings	Trimming of line endings
 artist-flood-fill-right-border	Right border when flood-filling
 artist-flood-fill-show-incrementally	Update display while filling
 artist-pointer-shape		Pointer shape to use while drawing
 artist-ellipse-left-char	Character to use for narrow ellipses
 artist-ellipse-right-char	Character to use for narrow ellipses
 artist-borderless-shapes       If shapes should have borders
 artist-picture-compatibility   Whether or not to be picture mode compatible
 artist-vaporize-fuzziness      Tolerance when recognizing lines
 artist-spray-interval          Seconds between repeated sprayings
 artist-spray-radius            Size of the spray-area
 artist-spray-chars             The spray-``color''
 artist-spray-new-chars         Initial spray-``color''

Hooks

 Turning the mode on or off runs `artist-mode-hook'.


Keymap summary

\{artist-mode-map}
(defalias 'artist-mode #[(&optional arg) "\303 	\304=\203\n?\202\305	!\306V\211\204\307 \210\202!\310 \210\311\312\n\203+\313\202,\314\"\210\315\316!\203M\303 \203@\303 \232\203M\317\320\n\203J\321\202K\322\"\210)\323 \210\n\207" [#1=#:last-message arg artist-mode current-message toggle prefix-numeric-value 0 artist-mode-exit artist-mode-init run-hooks artist-mode-hook artist-mode-on-hook artist-mode-off-hook called-interactively-p any message "Artist mode %sabled" "en" "dis" force-mode-line-update] 4 (#$ . 33596) (list (or current-prefix-arg 'toggle))])
(byte-code "\301\302\303\304\211%\207" [artist-mode-map add-minor-mode artist-mode artist-mode-name nil] 6)
#@64 Init Artist mode.  This will call the hook `artist-mode-hook'.
(defalias 'artist-mode-init #[nil "\306\211\307W\203	\211I\210T\211\202)	\310\311I\210	\312\311I\210	\306\311I\210\313\302!\210\313\303!\210\313\304!\210\313\305!\210\313\314!\210\313\315!\210\313\316!\210\313\317!\210\313\320!\210\313\321!\210\313\322!\210\323\211\323\211\324 !
\325 !\326!\327\330\306\"\323\211\313\331!\210\332\333!!\f\"\203\226#\334=\204\226\334 \210\335\336!\210\337\n!\207" [i artist-replacement-table artist-key-is-drawing artist-key-endpoint1 artist-key-poly-point-list artist-key-shape 0 256 10 32 9 make-local-variable artist-key-draw-how artist-popup-menu-table artist-key-compl-table artist-prev-next-op-alist artist-rb-save-data artist-arrow-point-1 artist-arrow-point-2 nil artist-compute-popup-menu-table artist-compute-key-compl-table artist-make-prev-next-op-alist make-vector 7 next-line-add-newlines t artist-go-get-draw-how-from-symbol picture-mode message "" artist-mode-line-show-curr-operation artist-mt artist-curr-go artist-picture-compatibility major-mode] 4 (#$ . 41870)])
#@64 Exit Artist mode.  This will call the hook `artist-mode-hook'.
(defalias 'artist-mode-exit #[nil "\203
	\302=\203
\303 \210\304\305!\207" [artist-picture-compatibility major-mode picture-mode picture-mode-exit kill-local-variable next-line-add-newlines] 2 (#$ . 42991)])
#@23 Turn Artist mode off.
(defalias 'artist-mode-off #[nil "\300\301!\210\302 \207" [artist-mode -1 force-mode-line-update] 2 (#$ . 43271) nil])
#@22 Repaint the display.
(defalias 'artist-update-display #[nil "\300\301!\207" [sit-for 0] 2 (#$ . 43418)])
#@65 Show current operation in mode-line.  If IS-DRAWING, show that.
(defalias 'artist-mode-line-show-curr-operation #[(is-drawing) "\305\306	!\n\203
\307\202\310R\311\f\236C\241\210)\312 \207" [artist-mode-name artist-curr-go is-drawing mtext minor-mode-alist "/" artist-go-get-mode-line-from-symbol "/*" "" artist-mode force-mode-line-update] 4 (#$ . 43529)])
#@58 Return the value of the variable `artist-fill-char-set'.
(defalias 'artist-t-if-fill-char-set #[nil "\207" [artist-fill-char-set] 1 (#$ . 43898)])
#@18 Always return t.
(defalias 'artist-t #[nil "\300\207" [t] 1 (#$ . 44052)])
#@20 Always return nil.
(defalias 'artist-nil #[nil "\300\207" [nil] 1 (#$ . 44133)])
#@20 Say yes to arrows!
(defalias 'artist-arrows #[nil "\300\207" [t] 1 (#$ . 44220)])
#@19 Say no to arrows!
(defalias 'artist-no-arrows #[nil "\300\207" [nil] 1 (#$ . 44308)])
#@101 Create a menu from MENU-TABLE data.
The returned value is suitable for the `x-popup-menu' function.
(defalias 'artist-compute-popup-menu-table #[(menu-table) "\301\302!B\207" [menu-table "Artist menu" artist-compute-popup-menu-table-sub] 3 (#$ . 44401)])
#@70 Compute operation table suitable for `x-popup-menu' from MENU-TABLE.
(defalias 'artist-compute-popup-menu-table-sub #[(menu-table) "\301\302\"\207" [menu-table mapcar #[(element) "\306!\211\307=\203.\310!\211\211\311\234)\n\211\312\234\311\234)\211\211\312\234),D\202\204	\313=\203Q\310!\211\211\311\234)\n\211\312\234)+D\202\204	\314=\203[\315\202\204	\316=\203\200\310!\211\211\311\234)\n\211\312\234)\317!+B\202\204\320\321	\")\207" [element element-tag info-part descr unshifted info-variant-part artist-mt-get-tag graphics-operation artist-mt-get-info-part 0 1 function-call separator (#1="" #1#) menu artist-compute-popup-menu-table-sub error "Internal error: unknown element-tag: \"%s\"" symbol keyword title items] 4]] 3 (#$ . 44663)])
#@75 Compute completion table from MENU-TABLE, suitable for `completing-read'.
(defalias 'artist-compute-key-compl-table #[(menu-table) "\301\302\303\304\305\306\"\"\"\207" [menu-table apply nconc remq nil mapcar #[(element) "\306!\211\307=\203;\310!\211\211\311\234\312\234)\n\211\311\234\311\234)\211\312\234)\f\211\312\234)C-CD\202V	\313=\203U\310!\211\211\311\234)\314!*\202V\315)\207" [element element-tag info-part unshifted shifted info-variant-part artist-mt-get-tag graphics-operation artist-mt-get-info-part 1 0 menu artist-compute-key-compl-table nil unshifted-kwd shifted-kwd items] 3]] 7 (#$ . 45460)])
#@60 Search master table for keyword KWD and return its symbol.
(defalias 'artist-mt-get-symbol-from-keyword #[(kwd) "\302	\"\207" [artist-mt kwd artist-mt-get-symbol-from-keyword-sub] 3 (#$ . 46108)])
#@53 Search TABLE for keyword KWD and return its symbol.
(defalias 'artist-mt-get-symbol-from-keyword-sub #[(table kwd) "\300\301\215\207" [found (byte-code "\301\302\"\210\303\207" [table mapc #[(element) "\306!\211\307=\203`\310!\211\211\311\234\312\234)\n\211\311\234\311\234)\211\312\234)\f\211\312\234)\211\311\234)\f\211\311\234)\230\203N\313\314\"\210\230\205[\313\314\".\202\263	\315=\203\213\310!\211\211\312\234)\n\211\311\234)\230\205\207\313\314\"+\202\263	\316=\203\262\310!\211\211\311\234)\317\"\211\205\256\313\314\"+\202\263\320)\207" [element element-tag info-part unshifted shifted info-variant-part artist-mt-get-tag graphics-operation artist-mt-get-info-part 1 0 throw found function-call menu artist-mt-get-symbol-from-keyword-sub nil unshifted-kwd shifted-kwd unshifted-sym shifted-sym kwd keyword symbol items answer] 4] nil] 3)] 2 (#$ . 46312)])
#@138 Search the master table for a graphics operation SYMBOL.
Calls RETRIEVE-FN to retrieve information from that symbol's
info-variant-part.
(defalias 'artist-go-retrieve-from-symbol #[(symbol retrieve-fn) "\303	\n#\207" [artist-mt symbol retrieve-fn artist-go-retrieve-from-symbol-sub] 4 (#$ . 47258)])
#@131 Search the TABLE for a graphics operation SYMBOL.
Calls RETRIEVE-FN to retrieve information from that symbol's
info-variant-part.
(defalias 'artist-go-retrieve-from-symbol-sub #[(table symbol retrieve-fn) "\300\301\215\207" [found (byte-code "\301\302\"\210\303\207" [table mapc #[(element) "\306!\211\307=\203\\\310!\211\211\311\234\312\234)\n\211\311\234\311\234)\211\311\234)\f\211\311\234)=\203<\202I=\203H\f\202I\313\211\205W\314\315!\".\202\202	\316=\205\202\310!\211\211\311\234)\317#\211\205\201\314\315\"+)\207" [element element-tag info-part unshifted shifted info-variant-part artist-mt-get-tag graphics-operation artist-mt-get-info-part 1 0 nil throw found menu artist-go-retrieve-from-symbol-sub unshifted-sym shifted-sym symbol variant-part retrieve-fn items answer] 5] nil] 3)] 2 (#$ . 47566)])
#@72 Search the master table, get keyword from a graphics operation SYMBOL.
(defalias 'artist-go-get-keyword-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-keyword] 3 (#$ . 48438)])
#@74 Search the master table, get mode-line from a graphics operation SYMBOL.
(defalias 'artist-go-get-mode-line-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-mode-line] 3 (#$ . 48668)])
#@75 Search the master table, get arrow-pred from a graphics operation SYMBOL.
(defalias 'artist-go-get-arrow-pred-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-arrow-pred] 3 (#$ . 48904)])
#@77 Search the master table, get arrow-set-fn from a graphics operation SYMBOL.
(defalias 'artist-go-get-arrow-set-fn-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-arrow-set-fn] 3 (#$ . 49143)])
#@72 Search the master table, get init-fn from a graphics operation SYMBOL.
(defalias 'artist-go-get-init-fn-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-init-fn] 3 (#$ . 49388)])
#@77 Search the master table, get prep-fill-fn from a graphics operation SYMBOL.
(defalias 'artist-go-get-prep-fill-fn-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-prep-fill-fn] 3 (#$ . 49618)])
#@72 Search the master table, get exit-fn from a graphics operation SYMBOL.
(defalias 'artist-go-get-exit-fn-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-exit-fn] 3 (#$ . 49863)])
#@72 Search the master table, get draw-fn from a graphics operation SYMBOL.
(defalias 'artist-go-get-draw-fn-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-draw-fn] 3 (#$ . 50093)])
#@73 Search the master table, get draw-how from a graphics operation SYMBOL.
(defalias 'artist-go-get-draw-how-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-draw-how] 3 (#$ . 50323)])
#@74 Search the master table, get undraw-fn from a graphics operation SYMBOL.
(defalias 'artist-go-get-undraw-fn-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-undraw-fn] 3 (#$ . 50556)])
#@76 Search the master table, get interval-fn from a graphics operation SYMBOL.
(defalias 'artist-go-get-interval-fn-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-interval-fn] 3 (#$ . 50792)])
#@74 Search the master table, get fill-pred from a graphics operation SYMBOL.
(defalias 'artist-go-get-fill-pred-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-fill-pred] 3 (#$ . 51034)])
#@72 Search the master table, get fill-fn from a graphics operation SYMBOL.
(defalias 'artist-go-get-fill-fn-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-go-retrieve-from-symbol artist-go-get-fill-fn] 3 (#$ . 51270)])
#@147 Search for (shifted or unshifted) graphics operation SYMBOL.
If IS-SHIFTED is non-nil, return the shifted symbol,
otherwise the unshifted symbol.
(defalias 'artist-go-get-symbol-shift #[(symbol is-shifted) "\303	\n#\207" [artist-mt symbol is-shifted artist-go-get-symbol-shift-sub] 4 (#$ . 51501)])
#@143 Search TABLE for (shifted or unshifted) graphics SYMBOL.
If IS-SHIFTED is non-nil, return the shifted symbol,
otherwise the unshifted symbol.
(defalias 'artist-go-get-symbol-shift-sub #[(table symbol is-shifted) "\300\301\215\207" [found (byte-code "\301\302\"\210\303\207" [table mapc #[(element) "\306!\211\307=\203S\310!\211\211\311\234\312\234)\n\211\311\234\311\234)\211\311\234)\f\211\311\234)=\204@=\205O\313\314\203L\202N\"-\202y	\315=\205y\310!\211\211\311\234)\316#\211\205x\313\314\"+)\207" [element element-tag info-part unshift-variant shift-variant info-variant-part artist-mt-get-tag graphics-operation artist-mt-get-info-part 1 0 throw found menu artist-go-get-symbol-shift-sub unshift-sym shift-sym symbol is-shifted items answer] 5] nil] 3)] 2 (#$ . 51808)])
#@133 Search the master table for a function call SYMBOL.
Calls RETRIEVE-FN to retrieve information from that symbol's
info-variant-part.
(defalias 'artist-fc-retrieve-from-symbol #[(symbol retrieve-fn) "\303	\n#\207" [artist-mt symbol retrieve-fn artist-fc-retrieve-from-symbol-sub] 4 (#$ . 52645)])
#@122 Search TABLE for a function-call SYMBOL.
Calls RETRIEVE-FN to retrieve information from that symbol's
info-variant-part.
(defalias 'artist-fc-retrieve-from-symbol-sub #[(table symbol retrieve-fn) "\300\301\215\207" [found (byte-code "\301\302\"\210\303\207" [table mapc #[(element) "\306!\211\307=\203%\310!\211\211\311\234)\211\f=\205!\312\313
\n!\"*\202I	\314=\205I\310!\211\211\311\234)\315\f
#\211\205H\312\313\"+)\207" [element element-tag info-part fc-symbol symbol retrieve-fn artist-mt-get-tag function-call artist-mt-get-info-part 1 throw found menu artist-fc-retrieve-from-symbol-sub items answer] 5] nil] 3)] 2 (#$ . 52948)])
#@70 Search the master table to get function from a function call SYMBOL.
(defalias 'artist-fc-get-fn-from-symbol #[(symbol) "\301\302\"\207" [symbol artist-fc-retrieve-from-symbol artist-fc-get-fn] 3 (#$ . 53614)])
#@47 Call function FN with ARGS, if FN is not nil.
(defalias 'artist-funcall '(macro . #[(fn &rest args) "\302\303	BBE\207" [fn args if funcall] 5 (#$ . 53832)]))
#@76 Remove consecutive duplicates in list L.  Comparison is done with `equal'.
(defalias 'artist-uniq #[(l) "\204\301\207A\204
\207@A@\232\203\302A!\207@\302A!B\207" [l nil artist-uniq] 3 (#$ . 53998)])
#@75 Split string STR at occurrences of regexp R, returning a list of strings.
(defalias 'artist-string-split #[(str r) "\305\306\211\307\f	#\211\203\310\f	O!\nB\306\225\202\n\204(\fC\202=\306\225\fGSW\203:\f\306\225\fGO\nB\311\n!+\207" [match-pos start res r str nil 0 string-match copy-sequence reverse] 4 (#$ . 54216)])
#@37 Write string STR to file FILE-NAME.
(defalias 'artist-string-to-file #[(str file-name) "\302\303	\304\305%\207" [str file-name write-region end-is-ignored nil no-message] 6 (#$ . 54556)])
#@41 Read from file FILE-NAME into a string.
(defalias 'artist-file-to-string #[(file-name) "\212\303\304\305Q!\211q\210eb\210\306\307\211\211\310%\210\311ed{!\312	!\210\n+\207" [file-name tmp-buffer str get-buffer-create "*artist-" "*" insert-file-contents nil t copy-sequence kill-buffer] 7 (#$ . 54751)])
#@31 Clear contents of buffer BUF.
(defalias 'artist-clear-buffer #[(buf) "rq\210eb\210\301deZ\302\")\207" [buf delete-char nil] 3 (#$ . 55064)])
#@167 Run PROGRAM synchronously with the contents of string STDIN to stdin.
Optional args PROGRAM-ARGS are arguments to PROGRAM.
Return a list (RETURN-CODE STDOUT STDERR).
(defalias 'artist-system #[(program stdin &optional program-args) "\212\205\306\307!\310\311\n\312Q!\306\313!\314\211\203\"\315	\"\210\316!\210\317\216\203H\320\321\n	\fD\314;\203AC\202C&\202O\321\n	\fD#\211rq\210ed{)\322\f!E.\207" [stdin tmp-stdin-file-name program tmp-stdout-buffer tmp-stderr-file-name binary-process-input make-temp-file "artist-stdin." get-buffer-create "*artist-" "*" "artist-stdout." nil artist-string-to-file artist-clear-buffer ((byte-code "\203\304	!\203\305	!\210\304\n!\203\305\n!\210\306 >\203#\307!\210\304\207" [stdin tmp-stdin-file-name tmp-stderr-file-name tmp-stdout-buffer file-exists-p delete-file buffer-list kill-buffer] 2)) apply call-process artist-file-to-string binary-process-output program-args res] 8 (#$ . 55213)])
#@32 Return point's current column.
(defalias 'artist-current-column #[nil "i\207" [] 1 (#$ . 56189)])
(put 'artist-current-column 'byte-optimizer 'byte-compile-inline-expand)
#@68 Return point's current line, buffer-relative.  Top of buffer is 0.
(defalias 'artist-current-line #[nil "\300\301\302`\"i\303U\203\302\202\303\304#\207" [+ count-lines 1 0 -1] 4 (#$ . 56366)])
(put 'artist-current-line 'byte-optimizer 'byte-compile-inline-expand)
#@68 Move to column X, at row Y from the top of buffer.  Top line is 0.
(defalias 'artist-move-to-xy #[(x y) "\305\306\307`\"i\310U\203\307\202\310\311#Zy\210\312\313\305\306\307`\"i\310U\203(\307\202)\310\311#Zy\"\210\314	\310]\315\"\210\305\306\307`\"i\310U\203E\307\202F\310\311#\211^\n\f]\211)\207" [y x curr-y artist-draw-region-min-y artist-draw-region-max-y + count-lines 1 0 -1 insert-char 10 move-to-column t] 8 (#$ . 56640)])
(put 'artist-move-to-xy 'byte-optimizer 'byte-compile-inline-expand)
#@120 Return the character found at column X, row Y.
Also updates the variables `artist-draw-min-y' and `artist-draw-max-y'.
(defalias 'artist-get-char-at-xy #[(x y) "		\305\306\307`\"i\310U\203\307\202\310\311#Zy\210\312\313	\305\306\307`\"i\310U\203,\307\202-\310\311#Zy\"\210\314\310]\315\"\210\305\306\307`\"i\310U\203I\307\202J\310\311#\211^\n\f]\211+\210\305\306\307`\"i\310U\203g\307\202h\310\311#\211^\n\f])g\207" [x y curr-y artist-draw-region-min-y artist-draw-region-max-y + count-lines 1 0 -1 insert-char 10 move-to-column t] 8 (#$ . 57161)])
(put 'artist-get-char-at-xy 'byte-optimizer 'byte-compile-inline-expand)
#@138 Retrieve a replacement for character C from `artist-replacement-table'.
The replacement is used to convert tabs and new-lines to spaces.
(defalias 'artist-get-replacement-char #[(c) "	GW\203	H\207\207" [c artist-replacement-table] 2 (#$ . 57812)])
(put 'artist-get-replacement-char 'byte-optimizer 'byte-compile-inline-expand)
#@74 Retrieve the character at X, Y, converting tabs and new-lines to spaces.
(defalias 'artist-get-char-at-xy-conv #[(x y) "\212	\211		\306\307\310`\"i\311U\203\310\202\311\312#Zy\210\313\314	\306\307\310`\"i\311U\2031\310\2022\311\312#Zy\"\210\315\311]\316\"\210\306\307\310`\"i\311U\203N\310\202O\311\312#\211^\n\f]\211+\210\306\307\310`\"i\311U\203l\310\202m\311\312#\211^\n\f])g*\211GW\203\213
H\202\214
*\207" [x y curr-y artist-draw-region-min-y artist-draw-region-max-y c + count-lines 1 0 -1 insert-char 10 move-to-column t artist-replacement-table] 8 (#$ . 58150)])
#@47 Replace the character at point with NEW-CHAR.
(defalias 'artist-replace-char #[(new-char) "\306\307\310\211
GW\203
\fH\202\f)\311\312!+\207" [blink-matching-paren fill-column overwrite-mode new-char c artist-replacement-table overwrite-mode-textual 32765 nil self-insert-command 1 last-command-event] 4 (#$ . 58758)])
#@71 Replace characters at point with NEW-CHAR.  COUNT chars are replaced.
(defalias 'artist-replace-chars #[(new-char count) "\306\300!\203\263\307U\203\263\306\301!\203\263	\310X\203\263\n\211\fGW\203'\fH\202()\311
\"i\\\312\313\314`\"i\315U\203D\314\202E\315\316#\312\313\314`\"i\315U\203\\\314\202]\315\316#Zy\210\317\320\312\313\314`\"i\315U\203u\314\202v\315\316#Zy\"\210\321\315]\322\"\210\312\313\314`\"i\315U\203\223\314\202\224\315\316#\211^]\211+\210\323[!\210c*\207\324\325\326 !\n\211\fGW\203\313\fH\202\314)\"\327!+\207" [emacs-major-version emacs-minor-version new-char c artist-replacement-table replaced-c boundp 20 3 make-string + count-lines 1 0 -1 insert-char 10 move-to-column t delete-char overwrite-mode-textual 32765 nil self-insert-command count replaced-s y x curr-y artist-draw-region-min-y artist-draw-region-max-y blink-matching-paren fill-column overwrite-mode last-command-event] 8 (#$ . 59093)])
#@145 Replace contents at point with STRING.
With optional argument SEE-THRU set to non-nil, text in the buffer
``shines thru'' blanks in the STRING.
(defalias 'artist-replace-string #[(string &optional see-thru) "\306\307\"\310\311\307\211\205\264\f@\203\247
\211GW\203(
H\202)
)\312U\203\247iT\313\314\315`\"i\316U\203@\315\202A\316\317#\313\314\315`\"i\316U\203X\315\202Y\316\317#Zy\210\320\321\313\314\315`\"i\316U\203q\315\202r\316\317#Zy\"\210\322\316]\323\"\210\313\314\315`\"i\316U\203\217\315\202\220\316\317#\211^]\211+\210\202\253\324
!\210)\fA\211\204\307,\207" [string blink-matching-paren fill-column overwrite-mode char-list c append nil overwrite-mode-textual 32765 32 + count-lines 1 0 -1 insert-char 10 move-to-column t artist-replace-char see-thru artist-replacement-table y x curr-y artist-draw-region-min-y artist-draw-region-max-y] 8 (#$ . 60086)])
(put 'artist-replace-string 'byte-optimizer 'byte-compile-inline-expand)
#@41 Unsets point 1 when not rubber-banding.
(defalias 'artist-no-rb-unset-point1 #[nil "i\306\307\310`\"i\311U\203\310\202\311\312#\311H\310H\n		\306\307\310`\"i\311U\2031\310\2022\311\312#Zy\210\313\314	\306\307\310`\"i\311U\203I\310\202J\311\312#Zy\"\210\315\n\311]\316\"\210\306\307\310`\"i\311U\203f\310\202g\311\312#\211^
]\211+\210\317\320H!\210\f	\306\307\310`\"i\311U\203\223\310\202\224\311\312#Zy\210\313\314	\306\307\310`\"i\311U\203\253\310\202\254\311\312#Zy\"\210\315\n\311]\316\"\210\306\307\310`\"i\311U\203\310\310\202\311\311\312#\211^
]\211.\207" [artist-rb-save-data y x y-now x-now curr-y + count-lines 1 0 -1 insert-char 10 move-to-column t artist-replace-char 2 artist-draw-region-min-y artist-draw-region-max-y] 7 (#$ . 61082)])
#@46 Set point 1 at X, Y when not rubber-banding.
(defalias 'artist-no-rb-set-point1 #[(x y) "i\306\307\310`\"i\311U\203\310\202\311\312#\n\311I\210\n\310\fI\210\n\313\f\211\f\f\306\307\310`\"i\311U\2039\310\202:\311\312#Zy\210\314\315\f\306\307\310`\"i\311U\203Q\310\202R\311\312#Zy\"\210\316\311]\317\"\210\306\307\310`\"i\311U\203n\310\202o\311\312#\211^
]\211+\210\306\307\310`\"i\311U\203\220\310\202\221\311\312#\211^
])g*I\210\f\f\306\307\310`\"i\311U\203\271\310\202\272\311\312#Zy\210\314\315\f\306\307\310`\"i\311U\203\321\310\202\322\311\312#Zy\"\210\316\311]\317\"\210\306\307\310`\"i\311U\203\356\310\202\357\311\312#\211^
]\211+\210\320!\210	\f\306\307\310`\"i\311U\203\310\202\311\312#Zy\210\314\315\f\306\307\310`\"i\311U\2032\310\2023\311\312#Zy\"\210\316\311]\317\"\210\306\307\310`\"i\311U\203O\310\202P\311\312#\211^
]\211+\210\n\321\311I*\207" [y-now x-now artist-rb-save-data x y curr-y + count-lines 1 0 -1 2 insert-char 10 move-to-column t artist-replace-char 6 artist-draw-region-min-y artist-draw-region-max-y artist-first-char] 10 (#$ . 61884)])
#@55 This function unsets point 2 when not rubber-banding.
(defalias 'artist-no-rb-unset-point2 #[nil "\306H\307U\205\343i\310\311\307`\"i\312U\203\307\202\312\313#\314H\315H\n		\310\311\307`\"i\312U\2039\307\202:\312\313#Zy\210\316\317	\310\311\307`\"i\312U\203Q\307\202R\312\313#Zy\"\210\320\n\312]\321\"\210\310\311\307`\"i\312U\203n\307\202o\312\313#\211^
]\211+\210\322\323H!\210\f	\310\311\307`\"i\312U\203\233\307\202\234\312\313#Zy\210\316\317	\310\311\307`\"i\312U\203\263\307\202\264\312\313#Zy\"\210\320\n\312]\321\"\210\310\311\307`\"i\312U\203\320\307\202\321\312\313#\211^
]\211.\207" [artist-rb-save-data y x y-now x-now curr-y 6 1 + count-lines 0 -1 3 4 insert-char 10 move-to-column t artist-replace-char 5 artist-draw-region-min-y artist-draw-region-max-y] 7 (#$ . 63039)])
#@46 Set point 2 at X, Y when not rubber-banding.
(defalias 'artist-no-rb-set-point2 #[(x y) "i\306\307\310`\"i\311U\203\310\202\311\312#\n\313I\210\n\314\fI\210\n\315\f\211\f\f\306\307\310`\"i\311U\2039\310\202:\311\312#Zy\210\316\317\f\306\307\310`\"i\311U\203Q\310\202R\311\312#Zy\"\210\320\311]\321\"\210\306\307\310`\"i\311U\203n\310\202o\311\312#\211^
]\211+\210\306\307\310`\"i\311U\203\220\310\202\221\311\312#\211^
])g*I\210\f\f\306\307\310`\"i\311U\203\271\310\202\272\311\312#Zy\210\316\317\f\306\307\310`\"i\311U\203\321\310\202\322\311\312#Zy\"\210\320\311]\321\"\210\306\307\310`\"i\311U\203\356\310\202\357\311\312#\211^
]\211+\210\322!\210	\f\306\307\310`\"i\311U\203\310\202\311\312#Zy\210\316\317\f\306\307\310`\"i\311U\2032\310\2023\311\312#Zy\"\210\320\311]\321\"\210\306\307\310`\"i\311U\203O\310\202P\311\312#\211^
]\211+\210\n\323\310I*\207" [y-now x-now artist-rb-save-data x y curr-y + count-lines 1 0 -1 3 4 5 insert-char 10 move-to-column t artist-replace-char 6 artist-draw-region-min-y artist-draw-region-max-y artist-second-char] 10 (#$ . 63881)])
#@61 This function unsets point 1 and 2 when not rubber-banding.
(defalias 'artist-no-rb-unset-points #[nil "\300 \210\301 \207" [artist-no-rb-unset-point1 artist-no-rb-unset-point2] 1 (#$ . 65041)])
#@284 Calculates intersection character when drawing a NEW-C on top of an OLD-C.
Return character according to this scheme:

		OLD-C	NEW-C		return
		 -	 |		   +
		 |	 -		   +
		 +	 |		   +
		 +	 -		   +
		 \	 /		   X
		 /	 \		   X
		 X	 /		   X
		 X	 \		   X
		other combinations	   NEW-C
(defalias 'artist-intersection-char #[(new-c old-c) "\302U\203	\303U\203\304\207\303U\203	\302U\203\304\207\304U\203*	\302U\203*\304\207\304U\2038	\303U\2038\304\207\305U\203F	\306U\203F\307\207\306U\203T	\305U\203T\307\207\307U\203b	\306U\203b\307\207\307U\203p	\305U\203p\307\207	\207" [old-c new-c 45 124 43 92 47 88] 2 (#$ . 65243)])
#@248 Restore character to before intersection when removing LINE-C from BUFFER-C.
Return character according to this scheme:

		LINE-C	BUFFER-C	return
		 -	 +		   |
		 |	 +		   -
		 \	 X		   /
		 /	 X		   \
		other combinations	   `artist-erase-char'.
(defalias 'artist-unintersection-char #[(line-c buffer-c) "\303U\203	\304U\203\305\207\305U\203	\304U\203\303\207\306U\203*	\307U\203*\310\207\310U\2038	\307U\2038\306\207	U\203@\n\207	\207" [line-c buffer-c artist-erase-char 45 43 124 92 88 47] 2 (#$ . 65899)])
#@296 Compute which character to use for lines, if any.
Return value is either nil for the default characters that make up lines, or
a character chosen depending on the variables `artist-borderless-shapes',
`artist-fill-char-set', `artist-fill-char' and
`artist-line-char-set' and `artist-line-char'.
(defalias 'artist-compute-line-char #[nil "\203\n	\203\n\n\207\205\f\207" [artist-borderless-shapes artist-fill-char-set artist-fill-char artist-line-char-set artist-line-char] 1 (#$ . 66434)])
(put 'artist-compute-line-char 'byte-optimizer 'byte-compile-inline-expand)
#@148 Table used for stepping x and y coordinates in a specific direction.
This table is also used for determining which char to use for that direction.
(defvar artist-direction-info [[1 0 45] [1 1 92] [0 1 124] [-1 1 47] [-1 0 45] [-1 -1 92] [0 -1 124] [1 -1 47]] (#$ . 67012))
#@73 Return the x-step for DIRECTION from the `artist-direction-info' table.
(defalias 'artist-direction-step-x #[(direction) "	H\302H\207" [artist-direction-info direction 0] 2 (#$ . 67291)])
(put 'artist-direction-step-x 'byte-optimizer 'byte-compile-inline-expand)
#@73 Return the y-step for DIRECTION from the `artist-direction-info' table.
(defalias 'artist-direction-step-y #[(direction) "	H\302H\207" [artist-direction-info direction 1] 2 (#$ . 67561)])
(put 'artist-direction-step-y 'byte-optimizer 'byte-compile-inline-expand)
#@76 Return the character for DIRECTION from the `artist-direction-info' table.
(defalias 'artist-direction-char #[(direction) "	H\302H\207" [artist-direction-info direction 2] 2 (#$ . 67831)])
#@161 Find the direction from point X1,Y1 to X2,Y2.
Returns a DIRECTION, a number 0--7, coded as follows:

			 5  6  7
			  \ | /
			4 - * - 0
			  / | \
			 3  2  1
(defalias 'artist-find-direction #[(x1 y1 x2 y2) "	Z\nZ\211\306\f!\307_Y\203\310\202\f\306
!\307_Y\203$\307\202
[\306\f!\307_Y\2033\311\202\f[\306
!\307_Y\203B\312\202
\310Y\203R\f\310Y\203R\313\202
\310X\203b\f\310Y\203b\314\202
\310X\203r\f\310X\203r\315\202
\310Y\205\f\310X\205\316*\207" [x2 x1 y2 y1 delta-y delta-x abs 2 0 4 6 1 3 5 7] 4 (#$ . 68028)])
#@72 Calculate length for a straight line in DIRECTION from X1,Y1 to X2,Y2.
(defalias 'artist-straight-calculate-length #[(direction x1 y1 x2 y2) "\305U\204\306U\204\307U\203	\nZT\207\310U\204)\311U\204)\312U\203.\n	ZT\207\313\fZ!T\207" [direction x2 x1 y2 y1 7 0 1 3 4 5 abs] 3 (#$ . 68586)])
#@45 Create a straight line from X1,Y1 to X2,Y2.
(defalias 'artist-sline #[(x1 y1 x2 y2) "\306	\n$\307\f	\n%\310
\311\\\"\211
\312	I\210
\313
I\210
\314\fI\210
+\207" [x1 y1 x2 y2 direction length artist-find-direction artist-straight-calculate-length make-vector 4 1 2 3 line] 7 (#$ . 68897)])
#@31 Save characters under a LINE.
(defalias 'artist-save-chars-under-sline #[(line) "\306H\307H\310H\311\\\312H\311	W\203\303	
\f\211\f\f\313\314\307`\"i\306U\2034\307\2025\306\315#Zy\210\316\317\f\313\314\307`\"i\306U\203L\307\202M\306\315#Zy\"\210\320
\306]\321\"\210\313\314\307`\"i\306U\203i\307\202j\306\315#\211^]\211+\210\313\314\307`\"i\306U\203\215\307\202\216\306\315#\211^])g*I\210
\n\nH\306H)\\\f\n\nH\307H)\\	T\211\202-\207" [line i direction length y x 0 1 2 4 3 + count-lines -1 insert-char 10 move-to-column t curr-y artist-draw-region-min-y artist-draw-region-max-y artist-direction-info] 10 (#$ . 69204)])
#@53 Table used by line drawing algorithm (eight point).
(defvar artist-octant-info [[2 1 1 0 1 1] [1 2 1 1 0 1] [-1 2 0 1 -1 1] [-2 1 -1 1 -1 0] [-2 -1 -1 0 -1 -1] [-1 -2 -1 -1 0 -1] [1 -2 0 -1 1 -1] [2 -1 1 -1 1 0]] (#$ . 69890))
#@37 Retrieve dfdx component for OCTANT.
(defalias 'artist-get-dfdx-init-coeff #[(octant) "	SH\302H\207" [artist-octant-info octant 0] 2 (#$ . 70123)])
(put 'artist-get-dfdx-init-coeff 'byte-optimizer 'byte-compile-inline-expand)
#@37 Retrieve dfdy component for OCTANT.
(defalias 'artist-get-dfdy-init-coeff #[(octant) "	SH\302H\207" [artist-octant-info octant 1] 2 (#$ . 70355)])
(put 'artist-get-dfdy-init-coeff 'byte-optimizer 'byte-compile-inline-expand)
#@51 Retrieve x-step component for OCTANT when q >= 0.
(defalias 'artist-get-x-step-q>=0 #[(octant) "	SH\302H\207" [artist-octant-info octant 2] 2 (#$ . 70587)])
(put 'artist-get-x-step-q>=0 'byte-optimizer 'byte-compile-inline-expand)
#@51 Retrieve y-step component for OCTANT when q >= 0.
(defalias 'artist-get-y-step-q>=0 #[(octant) "	SH\302H\207" [artist-octant-info octant 3] 2 (#$ . 70825)])
(put 'artist-get-y-step-q>=0 'byte-optimizer 'byte-compile-inline-expand)
#@49 Retrieve x-step component for OCTANT for q < 0.
(defalias 'artist-get-x-step-q<0 #[(octant) "	SH\302H\207" [artist-octant-info octant 4] 2 (#$ . 71063)])
(put 'artist-get-x-step-q<0 'byte-optimizer 'byte-compile-inline-expand)
#@49 Retrieve y-step component for OCTANT for q < 0.
(defalias 'artist-get-y-step-q<0 #[(octant) "	SH\302H\207" [artist-octant-info octant 5] 2 (#$ . 71297)])
(put 'artist-get-y-step-q<0 'byte-optimizer 'byte-compile-inline-expand)
#@137 Find octant for a line from X1,Y1 to X2,Y2.
Octant are numbered 1--8, anti-clockwise as:

		 \3|2/
		 4\|/1
		---+---
		 5/|\8
		 /6|7\
(defalias 'artist-find-octant #[(x1 y1 x2 y2) "	X\203)\nX\203	Z\nZY\203\304\207\305\207	Z\nZ[Y\203'\306\207\307\207\nX\203>	Z[\nZY\203<\310\207\311\207	Z[\nZ[Y\203L\312\207\313\207" [x1 x2 y1 y2 1 2 8 7 4 3 5 6] 3 (#$ . 71532)])
#@139 Create a new coordinate at X,Y for use in a line.
Optional argument NEW-CHAR can be used for setting the new-char component
in the coord.
(defalias 'artist-new-coord #[(x y &optional new-char) "\304\305\"\211\306\nI\210	\307I\210	)\207" [x coord y new-char make-vector 4 1 3] 4 (#$ . 71924)])
(put 'artist-new-coord 'byte-optimizer 'byte-compile-inline-expand)
#@38 Retrieve the x component of a COORD.
(defalias 'artist-coord-get-x #[(coord) "\301H\207" [coord 0] 2 (#$ . 72294)])
(put 'artist-coord-get-x 'byte-optimizer 'byte-compile-inline-expand)
#@38 Retrieve the y component of a COORD.
(defalias 'artist-coord-get-y #[(coord) "\301H\207" [coord 1] 2 (#$ . 72487)])
(put 'artist-coord-get-y 'byte-optimizer 'byte-compile-inline-expand)
#@42 Set the x component of a COORD to NEW-X.
(defalias 'artist-coord-set-x #[(coord new-x) "\302	I\210\207" [coord new-x 0] 3 (#$ . 72680)])
(put 'artist-coord-set-x 'byte-optimizer 'byte-compile-inline-expand)
#@42 Set the y component of a COORD to NEW-Y.
(defalias 'artist-coord-set-y #[(coord new-y) "\302	I\210\207" [coord new-y 1] 3 (#$ . 72895)])
(put 'artist-coord-set-y 'byte-optimizer 'byte-compile-inline-expand)
#@47 Retrieve the saved char component of a COORD.
(defalias 'artist-coord-get-saved-char #[(coord) "\301H\207" [coord 2] 2 (#$ . 73110)])
(put 'artist-coord-get-saved-char 'byte-optimizer 'byte-compile-inline-expand)
#@45 Retrieve the new char component of a COORD.
(defalias 'artist-coord-get-new-char #[(coord) "\301H\207" [coord 3] 2 (#$ . 73330)])
(put 'artist-coord-get-new-char 'byte-optimizer 'byte-compile-inline-expand)
#@56 Set the saved char component of a COORD to SAVED-CHAR.
(defalias 'artist-coord-add-saved-char #[(coord saved-char) "\302	I\210\207" [coord saved-char 2] 3 (#$ . 73544)])
(put 'artist-coord-add-saved-char 'byte-optimizer 'byte-compile-inline-expand)
#@52 Set the new char component of a COORD to NEW-CHAR.
(defalias 'artist-coord-add-new-char #[(coord new-char) "\302	I\210\207" [coord new-char 3] 3 (#$ . 73801)])
(put 'artist-coord-add-new-char 'byte-optimizer 'byte-compile-inline-expand)
#@52 Set the new char component of a COORD to NEW-CHAR.
(defalias 'artist-coord-set-new-char #[(coord new-char) "\302	I\210\207" [coord new-char 3] 3 (#$ . 74046)])
(put 'artist-coord-set-new-char 'byte-optimizer 'byte-compile-inline-expand)
#@48 In POINT-LIST, store a ``pixel'' at coord X,Y.
(defalias 'artist-put-pixel '(macro . #[(point-list x y) "\303\304\305\306	\nEDEE\207" [point-list x y setq append list artist-new-coord] 8 (#$ . 74291)]))
#@76 Run the eight-point algorithm to get a list of coords from X1,Y1 to X2,Y2.
(defalias 'artist-eight-point #[(x1 y1 x2 y2) "\306\307	\n\f$\211
SH\310H)

SH\311H)

SH\312H)

SH\313H)

SH\314H)

SH\315H)\f\nZ[	Z	\n\310\316\312___#\317\306\320\314\"\211\311I\210\313I\210,C\"=\203\254\f=\204.\310Y\203\324\\\\\316__#\202\362\\\\\316__#\316\312___#\317\306\320\314\"\211\311I\210\313I\210,C\"\202\236.\207" [point-list x1 y1 x2 y2 octant nil artist-find-octant 0 1 2 3 4 5 + append make-vector artist-octant-info dfdx-coeff dfdy-coeff x-step-q>=0 y-step-q>=0 x-step-q<0 y-step-q<0 dfdx dfdy x y f q new-char coord] 6 (#$ . 74502)])
#@46 Save characters originally under POINT-LIST.
(defalias 'artist-save-chars-under-point-list #[(point-list) "\301\302\"\207" [point-list mapcar #[(coord) "\211\211\306H)\211\307H)\211		\310\311\307`\"i\306U\203#\307\202$\306\312#Zy\210\313\314	\310\311\307`\"i\306U\203;\307\202<\306\312#Zy\"\210\315\n\306]\316\"\210\310\311\307`\"i\306U\203X\307\202Y\306\312#\211\f^
]\211+\210\310\311\307`\"i\306U\203v\307\202w\306\312#\211\f^
])g*\211\317I\210*\207" [coord y x curr-y artist-draw-region-min-y artist-draw-region-max-y 0 1 + count-lines -1 insert-char 10 move-to-column t 2 saved-char] 9]] 3 (#$ . 75312)])
#@69 Return a line-char to use when moving from LAST-COORD to NEW-COORD.
(defalias 'artist-calculate-new-char #[(last-coord new-coord) "\211\306H)\211\307H)\n\211\306H)\n\211\307H)
\f
V\203<
W\203.\310\202f
V\2038\311\202f\312\202f\f
W\203[
W\203M\311\202f
V\203W\310\202f\312\202f
=\203e\313\202f\314,\207" [last-coord coord new-coord new-y new-x last-y 0 1 47 92 45 111 124 last-x] 6 (#$ . 75958)])
#@73 Return a list of coords with line-chars calculated.  Input: POINT-LIST.
(defalias 'artist-calculate-new-chars #[(point-list) "A\204@\304\211\305	I\210\n*C\207@@\306A@@\"\211\305	I\210\n*\307\310A\")B\207" [point-list new-char coord last-coord 111 3 artist-calculate-new-char mapcar #[(this-coord) "\304	\"\211\305\nI\210*\207" [this-coord last-coord new-char coord artist-calculate-new-char 3] 5]] 5 (#$ . 76391)])
#@84 Replace intersecting characters in POINT-LIST.
This function returns a point-list.
(defalias 'artist-modify-new-chars #[(point-list) "\301\302\"\207" [point-list mapcar #[(coord) "\211\305H)\211\306H)\307	\n\"\211\305\fI\210-\207" [coord new-c saved-c modified-c new-char 3 2 artist-intersection-char] 4]] 3 (#$ . 76833)])
#@29 Create an endpoint at X, Y.
(defalias 'artist-make-endpoint #[(x y) "\303\304\"\211\305\nI\210	)\207" [x new-endpoint y make-vector 2 1] 4 (#$ . 77175)])
#@42 Retrieve the x component of an ENDPOINT.
(defalias 'artist-endpoint-get-x #[(endpoint) "\301H\207" [endpoint 0] 2 (#$ . 77337)])
#@42 Retrieve the y component of an ENDPOINT.
(defalias 'artist-endpoint-get-y #[(endpoint) "\301H\207" [endpoint 1] 2 (#$ . 77473)])
#@64 Create a 2-point object of ENDPOINT1, ENDPOINT2 and SHAPEINFO.
(defalias 'artist-make-2point-object #[(endpoint1 endpoint2 shapeinfo) "	\nE\207" [endpoint1 endpoint2 shapeinfo] 3 (#$ . 77609)])
#@54 Retrieve the first endpoint of a 2-point object OBJ.
(defalias 'artist-2point-get-endpoint1 #[(obj) "\301\234\207" [obj 0] 2 (#$ . 77810)])
#@55 Retrieve the second endpoint of a 2-point object OBJ.
(defalias 'artist-2point-get-endpoint2 #[(obj) "\301\234\207" [obj 1] 2 (#$ . 77957)])
#@59 Retrieve the shapeinfo component of a 2-point object OBJ.
(defalias 'artist-2point-get-shapeinfo #[(obj) "\301\234\207" [obj 2] 2 (#$ . 78105)])
#@240 Draw a line from X1, Y1 to X2, Y2.

Output is a line, which is a list (END-POINT-1 END-POINT-2 SHAPE-INFO).

END-POINT-1 and END-POINT-2 are two-element vectors on the form [X Y].
SHAPE-INFO is a list of vectors [X Y SAVED-CHAR NEW-CHAR].
(defalias 'artist-draw-line #[(x1 y1 x2 y2) "\306	\"\306\n\"\307
\f\310\311\312\313\314\315	\n$!!!\"#*\207" [x1 y1 x2 y2 endpoint2 endpoint1 artist-make-endpoint artist-make-2point-object mapcar #[(coord) "\211\306H)\211\307H)	\310\311\307`\"i\306U\203\307\202\306\312#Zy\210\313\314	\310\311\307`\"i\306U\2036\307\2027\306\312#Zy\"\210\315\n\306]\316\"\210\310\311\307`\"i\306U\203S\307\202T\306\312#\211\f^
]\211+\210\203o\317!\210\202x\317\211\320H)!\210\207" [coord y x curr-y artist-draw-region-min-y artist-draw-region-max-y 0 1 + count-lines -1 insert-char 10 move-to-column t artist-replace-char 3 artist-line-char-set artist-line-char] 8] artist-modify-new-chars artist-calculate-new-chars artist-save-chars-under-point-list artist-eight-point] 13 (#$ . 78258)])
#@14 Undraw LINE.
(defalias 'artist-undraw-line #[(line) "\301\302\303!\"\207" [line mapcar #[(coord) "\211\306H)\211\307H)	\310\311\307`\"i\306U\203\307\202\306\312#Zy\210\313\314	\310\311\307`\"i\306U\2036\307\2027\306\312#Zy\"\210\315\n\306]\316\"\210\310\311\307`\"i\306U\203S\307\202T\306\312#\211\f^
]\211+\210\317\211\320H)!\210\207" [coord y x curr-y artist-draw-region-min-y artist-draw-region-max-y 0 1 + count-lines -1 insert-char 10 move-to-column t artist-replace-char 2] 8] artist-2point-get-shapeinfo] 4 (#$ . 79308)])
#@489 Draw a straight line from X1, Y1 to X2, Y2.
Straight lines are vertical, horizontal or diagonal lines.
They are faster to draw and most often they are what you need
when drawing a simple image.

Output is a straight line, which is a list on the form
(END-POINT-1 END-POINT-2 SHAPE-INFO).

END-POINT-1 and END-POINT-2 are two-element vectors on the form [X Y].
SHAPE-INFO is a vector [START-X START-Y LENGTH-OF-LINE DIRECTION
                        ORIGINAL-CHAR-1 ORIGINAL-CHAR-2 ... ].
(defalias 'artist-draw-sline #[(x1 y1 x2 y2) "\306\307	\n$!\211\310H\f\311H\f\312H\313\\\f\314H\315!\313\316
\"\317 W\203\354
\320\321\311`\"i\310U\203P\311\202Q\310\322#Zy\210\323\324\320\321\311`\"i\310U\203i\311\202j\310\322#Zy\"\210\325
\310]\326\"\210\320\321\311`\"i\310U\203\206\311\202\207\310\322#\211!\"^\"!#]\211#+\210$\203\250\327%!\210\202\263\327\330\fH\"!\210TW\204\303\316
\" 
&H\310H)\\&H\311H)\\T\211\2023\331 \f#.	\207" [x1 y1 x2 y2 line x artist-save-chars-under-sline artist-sline 0 1 2 4 3 artist-direction-char artist-make-endpoint nil + count-lines -1 insert-char 10 move-to-column t artist-replace-char artist-intersection-char artist-make-2point-object y length direction line-char i endpoint1 endpoint2 curr-y artist-draw-region-min-y artist-draw-region-max-y artist-line-char-set artist-line-char artist-direction-info] 8 (#$ . 79866)])
#@30 Undraw a straight line LINE.
(defalias 'artist-undraw-sline #[(line) "\205\253\306!\211\307H	\310H	\311H\312\\	\313H\312\211\fW\205\251\n\314\315\310`\"i\307U\2037\310\2028\307\316#Zy\210\317\320\314\315\310`\"i\307U\203O\310\202P\307\316#Zy\"\210\321\n\307]\322\"\210\314\315\310`\"i\307U\203l\310\202m\307\316#\211^]\211+\210\323	H!\210\n

H\307H)\\

H\310H)\\T\211\202.\207" [line shape-info x y length direction artist-2point-get-shapeinfo 0 1 2 4 3 + count-lines -1 insert-char 10 move-to-column t artist-replace-char i curr-y artist-draw-region-min-y artist-draw-region-max-y artist-direction-info] 8 (#$ . 81315)])
#@260 Draw a rectangle with corners at X1, Y1 and X2, Y2.

Output is a rectangle, which is a list on the form
(END-POINT-1 END-POINT-2 SHAPE-INFO).

END-POINT-1 and END-POINT-2 are two-element vectors on the form [X Y].
SHAPE-INFO is a list of four straight lines.
(defalias 'artist-draw-rect #[(x1 y1 x2 y2) "\203\f	\203\f\n\202\205\f\211\306
	\n	$\306\n	\n\f$
\306\n\f
\f$\306
\f
	$\307
	\"\307\n\f\"\310
F#.\207" [artist-borderless-shapes artist-fill-char-set artist-fill-char artist-line-char-set artist-line-char x1 artist-draw-sline artist-make-endpoint artist-make-2point-object y1 x2 line1 y2 line2 line3 line4 endpoint1 endpoint2] 8 (#$ . 81996)])
#@19 Undraw RECTANGLE.
(defalias 'artist-undraw-rect #[(rectangle) "\205 \302!\303	\304\234!\210\303	\305\234!\210\303	\306\234!\210\303	\307\234!)\207" [rectangle shape-info artist-2point-get-shapeinfo artist-undraw-sline 3 2 1 0] 3 (#$ . 82701)])
#@206 Compute square corners from rectangle corners at X1, Y1 and X2, Y2.
The square's first corner will be X1, Y1.  The position of the second
corner depends on which of X2 and Y2 is most far away from X1, Y1.
(defalias 'artist-rect-corners-squarify #[(x1 y1 x2 y2) "	Z\fZ\n\306W\203\307\202\310\f
\306W\203\307\202 \310
\311\211\312\n!\312
!V\203G\f\313\312\n!
_\245!\\\202Y\313	\312
!\f__\\!	\fF.\207" [x2 x1 delta-x y2 y1 delta-y 0 -1 1 nil abs round delta-x-sign delta-y-sign new-x2 new-y2 artist-aspect-ratio] 5 (#$ . 82956)])
#@254 Draw a square with corners at X1, Y1 and X2, Y2.

Output is a square, which is a list on the form
(END-POINT-1 END-POINT-2 SHAPE-INFO).

END-POINT-1 and END-POINT-2 are two-element vectors on the form [X Y].
SHAPE-INFO is a list of four straight lines.
(defalias 'artist-draw-square #[(x1 y1 x2 y2) "\203\f	\203\f\n\202\205\f\211\306
$\211\307\234\310\234\311\234\312\234\313\"\313\"\314$\314$\314$\314$\315F#.
\207" [artist-borderless-shapes artist-fill-char-set artist-fill-char artist-line-char-set artist-line-char x1 artist-rect-corners-squarify 0 1 2 3 artist-make-endpoint artist-draw-sline artist-make-2point-object y1 x2 y2 square-corners new-x1 new-y1 new-x2 new-y2 endpoint1 endpoint2 line1 line2 line3 line4] 8 (#$ . 83530)])
#@16 Undraw SQUARE.
(defalias 'artist-undraw-square #[(square) "\205 \302!\303	\304\234!\210\303	\305\234!\210\303	\306\234!\210\303	\307\234!)\207" [square shape-info artist-2point-get-shapeinfo artist-undraw-sline 3 2 1 0] 3 (#$ . 84370)])
#@42 Fill rectangle RECT from X1,Y1 to X2,Y2.
(defalias 'artist-fill-rect #[(rect x1 y1 x2 y2) "	^T\n^T	]\n]
Z\fW\205\226\306\307\310`\"i\311U\203:\310\202;\311\312#Zy\210\313\314\306\307\310`\"i\311U\203S\310\202T\311\312#Zy\"\210\315\311]\316\"\210\306\307\310`\"i\311U\203q\310\202r\311\312#\211^]\211+\210\317\"\210T\211\202-\207" [x1 x2 y1 y2 y-max x-max + count-lines 1 0 -1 insert-char 10 move-to-column t artist-replace-chars y x w curr-y artist-draw-region-min-y artist-draw-region-max-y artist-fill-char] 8 (#$ . 84617)])
#@36 Fill a SQUARE from X1,Y1 to X2,Y2.
(defalias 'artist-fill-square #[(square x1 y1 x2 y2) "\306	\n$\211\307\234\f\310\234\f\311\234\f\312\234
^T^T
]]ZW\205\272\313\314\310`\"i\307U\203^\310\202_\307\315#Zy\210\316\317\313\314\310`\"i\307U\203w\310\202x\307\315#Zy\"\210\320\307]\321\"\210\313\314\310`\"i\307U\203\225\310\202\226\307\315#\211^]\211+\210\322\"\210T\211\202?.\n\207" [x1 y1 x2 y2 square-corners new-x1 artist-rect-corners-squarify 0 1 2 3 + count-lines -1 insert-char 10 move-to-column t artist-replace-chars new-y1 new-x2 new-y2 x y x-max y-max w curr-y artist-draw-region-min-y artist-draw-region-max-y artist-fill-char] 8 (#$ . 85209)])
#@97 Draw a character at X1, Y1.
The character is replaced with the character in `artist-fill-char'.
(defalias 'artist-pen #[(x1 y1) "	\n\306\307\310`\"i\311U\203\310\202\311\312#Zy\210\313\314\n\306\307\310`\"i\311U\203,\310\202-\311\312#Zy\"\210\315\311]\316\"\210\306\307\310`\"i\311U\203I\310\202J\311\312#\211
^\f]\211+\210\317\203e\202q\203o\202q!\207" [x1 y1 y x curr-y artist-draw-region-min-y + count-lines 1 0 -1 insert-char 10 move-to-column t artist-replace-char artist-draw-region-max-y artist-line-char-set artist-line-char artist-fill-char-set artist-fill-char artist-default-fill-char] 7 (#$ . 85950)])
#@322 Draw a line from last pen position to X1, Y1.
The character is replaced with the character in `artist-fill-char'.
This will store all points in `artist-key-poly-point-list' in reversed
order (I assume it is faster to cons to the beginning of the list than
to append to the end of the list, when doing free-hand drawing).
(defalias 'artist-pen-line #[(x1 y1) "\203	\202\n\203\202\f
@@
@A\211\306\307\310`\"i\311U\2034\310\2025\311\312#Zy\210\313\314\306\307\310`\"i\311U\203M\310\202N\311\312#Zy\"\210\315\311]\316\"\210\306\307\310`\"i\311U\203k\310\202l\311\312#\211^]\211+\210\317	!\210\320$\210*B
B\211)\207" [artist-line-char-set artist-line-char artist-fill-char-set artist-fill-char artist-default-fill-char artist-key-poly-point-list + count-lines 1 0 -1 insert-char 10 move-to-column t artist-replace-char artist-draw-line y-last x-last y x curr-y artist-draw-region-min-y artist-draw-region-max-y x1 y1] 8 (#$ . 86603)])
#@65 Reset the last x and y points to X1, Y1 when doing pen-drawing.
(defalias 'artist-pen-reset-last-xy #[(x1 y1) "\303 \210	BC\211\207" [x1 y1 artist-key-poly-point-list artist-clear-arrow-points] 2 (#$ . 87597)])
#@100 Set arrow points for pen drawing using X1, Y1.
Also, the `artist-key-poly-point-list' is reversed.
(defalias 'artist-pen-set-arrow-points #[(x1 y1) "\306!\211G\307Y\205c@@@AA@@A@A\310\311!\211@@@AA@@A@A\310\f
\312
$\f\312\n
\f$\313\f#\313
\f	#\211.\n\207" [artist-key-poly-point-list dirn yn-1 xn-1 yn xn artist-uniq 2 nil reverse artist-find-direction artist-make-arrow-point dir0 y1 x1 y0 x0 artist-arrow-point-1 artist-arrow-point-2] 6 (#$ . 87817)])
#@102 Run figlet rendering TEXT using FONT.
EXTRA-ARGS for figlet, for the command line, may be specified.
(defalias 'artist-figlet-run #[(text font extra-args) "\203	\203\306P\307	\310\"B\202)\203\306P\202)	\203(\307	\310\"\202)\311\312\f\n#\211\313\234
\314\234
\315\234\313U\204N\316\317#\210-\207" [font extra-args figlet-args artist-figlet-program text figlet-output "-f" artist-string-split "[ 	]+" nil artist-system 0 1 2 error "Failed to render font: %s (%d)" exit-code stdout stderr] 5 (#$ . 88322)])
#@66 Read fonts in with the shell command.
Returns a list of strings.
(defalias 'artist-figlet-get-font-list #[nil "\306	\307\n\310#\211\311\234\312\234\313\234\f\311U\204$\314\315\f#\210\316
\317\".\207" [cmd-interpreter artist-figlet-list-fonts-command ls-cmd result exit-code stdout "/bin/sh" artist-system nil 0 1 2 error "Failed to read available fonts: %s (%d)" artist-string-split ".flf\n" stderr] 5 (#$ . 88864)])
#@38 Read any extra arguments for figlet.
(defalias 'artist-figlet-choose-font #[nil "\303 \304\305	\306Q\307\310\"\"\211\311\230\203	\202\n*\207" [avail-fonts artist-figlet-default-font font artist-figlet-get-font-list completing-read "Select font (default " "): " mapcar #[(font) "\211B\207" [font] 2] ""] 6 (#$ . 89301) nil])
#@38 Read any extra arguments for figlet.
(defalias 'artist-figlet-get-extra-args #[nil "\301\302!\211\303\230?\205\f)\207" [extra-args read-string "Extra args to figlet: " ""] 3 (#$ . 89639)])
#@27 Render TEXT using figlet.
(defalias 'artist-figlet #[(text) "\303 \304 \305\n	#*\207" [figlet-font figlet-extra-args text artist-figlet-choose-font artist-figlet-get-extra-args artist-figlet-run] 4 (#$ . 89837)])
#@116 At position X, Y, insert text TEXT.
If SEE-THRU is non-nil, then blanks in TEXT do not replace text
in the buffer.
(defalias 'artist-text-insert-common #[(x y text see-thru) "\306\307\"\310	G\nW\205B\f
\n\\
\311\312\313`\"i\310U\203&\313\202'\310\314#Zy\210\315\316
\311\312\313`\"i\310U\203>\313\202?\310\314#Zy\"\210\317\f\310]\320\"\210\311\312\313`\"i\310U\203[\313\202\\\310\314#\211^]\211+\210	@\321\322\"\323\324\322\211\2055@ \203% \211 !GW\203\252! H\202\254 )\325U\203%iT\311\312\313`\"i\310U\203\303\313\202\304\310\314#
\311\312\313`\"i\310U\203\330\313\202\331\310\314#Zy\210\315\316
\311\312\313`\"i\310U\203\360\313\202\361\310\314#Zy\"\210\317\f\310]\320\"\210\311\312\313`\"i\310U\203
\313\202\310\314#\211^]\211+\210\202*\326 !\210)A\211\204\214\322.\210	A\nT\211\202+\207" [text string-list i len x y artist-string-split "\n" 0 + count-lines 1 -1 insert-char 10 move-to-column t append nil overwrite-mode-textual 32765 32 artist-replace-char curr-y artist-draw-region-min-y artist-draw-region-max-y see-thru string blink-matching-paren fill-column overwrite-mode char-list c artist-replacement-table] 8 (#$ . 90060)])
#@94 At position X, Y, insert text TEXT.
Let text already in buffer shine thru the TEXT inserted.
(defalias 'artist-text-insert-see-thru #[(x y text) "\303	\n\304$\207" [x y text artist-text-insert-common t] 5 (#$ . 91296)])
#@98 At position X, Y, insert text TEXT.
Let blanks in TEXT overwrite any text already in the buffer.
(defalias 'artist-text-insert-overwrite #[(x y text) "\303	\n\304$\207" [x y text artist-text-insert-common nil] 5 (#$ . 91523)])
#@269 Prompt for text to render, render it at X,Y.
This is done by calling the function specified by
`artist-text-renderer-function', which must return a list of strings,
to be inserted in the buffer.

Text already in the buffer ``shines thru'' blanks in the rendered text.
(defalias 'artist-text-see-thru #[(x y) "\305\306!	\205	!\307\f\n#*\207" [input-text artist-text-renderer-function rendered-text x y read-string "Type text to render: " artist-text-insert-see-thru] 4 (#$ . 91758)])
#@259 Prompt for text to render, render it at X,Y.
This is done by calling the function specified by
`artist-text-renderer-function', which must return a list of strings,
to be inserted in the buffer.

Blanks in the rendered text overwrite any text in the buffer.
(defalias 'artist-text-overwrite #[(x y) "\305\306!	\205	!\307\f\n#*\207" [input-text artist-text-renderer-function rendered-text x y read-string "Type text to render: " artist-text-insert-overwrite] 4 (#$ . 92254)])
#@43 Retrieve the interval for repeated spray.
(defalias 'artist-spray-get-interval #[nil "\207" [artist-spray-interval] 1 (#$ . 92741)])
#@117 Generate N random points within a radius of RADIUS.
Returns a list of points.  Each point is on the form (X1 . Y1).
(defalias 'artist-spray-random-points #[(n radius) "\306	\307V\2031\310\311!\n\312\245_\310\f!\313
\314!_!\313
\315!_!B\211B+	S\211\202)\207" [points n float-pi angle radius dist nil 0 random 359 180 round cos sin point] 6 (#$ . 92882)])
#@18 Spray at X1, Y1.
(defalias 'artist-spray #[(x1 y1) "\211_\306	\"\211\205\265\n@\f@\\A\\\307
\"\211>\211\2042\202BA\204>@\202BA@
\310\311\312`\"i\313U\203[\312\202\\\313\314#Zy\210\315\316\310\311\312`\"i\313U\203t\312\202u\313\314#Zy\"\210\317
\313]\320\"\210\310\311\312`\"i\313U\203\221\312\202\222\313\314#\211^]\211+\210\321!\210.\nA\211\204
\322*\207" [artist-spray-radius num-points spray-points point x1 x artist-spray-random-points artist-get-char-at-xy-conv + count-lines 1 0 -1 insert-char 10 move-to-column t artist-replace-char nil y1 y buf-c artist-spray-chars this-c artist-spray-new-char next-c curr-y artist-draw-region-min-y artist-draw-region-max-y] 8 (#$ . 93256)])
#@47 Clear circle CIRCLE at X1, Y1 through X2, Y2.
(defalias 'artist-spray-clear-circle #[(circle x1 y1 x2 y2) "\301!\207" [circle artist-undraw-circle] 2 (#$ . 94014)])
#@56 Set spray radius from CIRCLE at X1, Y1 through X2, Y2.
(defalias 'artist-spray-set-radius #[(circle x1 y1 x2 y2) "	Z\nZ\306\307
\211_\f\211_\\!!\211\n\310U\205\311\211\n*\207" [x2 x1 y2 y1 dy dx round sqrt 0 1 artist-spray-radius] 6 (#$ . 94186)])
#@99 Erase a character at X1, Y1.
The character is replaced with the character in `artist-erase-char'.
(defalias 'artist-erase-char #[(x1 y1) "	\n\306\307\310`\"i\311U\203\310\202\311\312#Zy\210\313\314\n\306\307\310`\"i\311U\203,\310\202-\311\312#Zy\"\210\315\311]\316\"\210\306\307\310`\"i\311U\203I\310\202J\311\312#\211
^\f]\211+\210\317!\207" [x1 y1 y x curr-y artist-draw-region-min-y + count-lines 1 0 -1 insert-char 10 move-to-column t artist-replace-char artist-draw-region-max-y artist-erase-char] 7 (#$ . 94448)])
#@43 Erase rectangle RECT from X1, Y1, X2, Y2.
(defalias 'artist-erase-rect #[(rect x1 y1 x2 y2) "\306\211\211\307
	\n$\210\310\f
	\n%,\207" [artist-erase-char artist-fill-char artist-line-char artist-fill-char-set artist-line-char-set x1 t artist-draw-rect artist-fill-rect y1 x2 y2 rect] 6 (#$ . 94994)])
#@450 Find one endpoint for line through X1, Y1.
The endpoint is searched for in the direction defined by STEP-X, STEP-Y,
accepting characters in the list ACCEPT-SET, stopping immediately
when finding characters in the list REJECT-SET.  Fuzziness, that is
the number of consecutive characters not in ACCEPT-SET to allow as
part of the line, is determined by the variable `artist-vaporize-fuzziness'.
An endpoint is a cons pair, (ENDPOINT-X . ENDPOINT-Y).
(defalias 'artist-vap-find-endpoint #[(x1 y1 step-x step-y accept-set reject-set) "		\306\n\n\204\236\307\n
\"\211\f>\203\"\310\202\232
>\203M\n
\n\\\n
\\\n\311W\204H
\311W\203\232\310\202\232\n
\211\311V\203\205
>\204\205\\\\\307\"S\211\202Y
>\203\227\n\202\231\310+)\202\f-B\207" [x1 y1 done y-last x-last y nil artist-get-char-at-xy-conv t 0 x c reject-set accept-set step-x step-y artist-vaporize-fuzziness y-tmp x-tmp fuzziness] 6 (#$ . 95317)])
#@107 Find endpoints for a horizontal line through X, Y.
An endpoint is a cons pair, (ENDPOINT-X . ENDPOINT-Y).
(defalias 'artist-vap-find-endpoints-horiz #[(x y) "\302	\303\304\305\306&\302	\307\304\310\311&D\207" [x y artist-vap-find-endpoint 1 0 (45 43) (32) -1 (45 43) (32)] 8 (#$ . 96310)])
#@105 Find endpoints for a vertical line through X, Y.
An endpoint is a cons pair, (ENDPOINT-X . ENDPOINT-Y).
(defalias 'artist-vap-find-endpoints-vert #[(x y) "\302	\303\304\305\306&\302	\303\307\310\311&D\207" [x y artist-vap-find-endpoint 0 1 (124 43) (32) -1 (124 43) (32)] 8 (#$ . 96611)])
#@119 Find endpoints for a diagonal line (made by /'s) through X, Y.
An endpoint is a cons pair, (ENDPOINT-X . ENDPOINT-Y).
(defalias 'artist-vap-find-endpoints-swne #[(x y) "\302	\303\304\305\306&\302	\304\303\307\310&D\207" [x y artist-vap-find-endpoint 1 -1 (47 88) (32) (47 88) (32)] 8 (#$ . 96911)])
#@119 Find endpoints for a diagonal line (made by \'s) through X, Y.
An endpoint is a cons pair, (ENDPOINT-X . ENDPOINT-Y).
(defalias 'artist-vap-find-endpoints-nwse #[(x y) "\302	\303\211\304\305&\302	\306\211\307\310&D\207" [x y artist-vap-find-endpoint 1 (92 88) (32) -1 (92 88) (32)] 8 (#$ . 97221)])
#@128 Given a point X1, Y1, return a list of endpoints of lines through X, Y.
An endpoint is a cons pair, (ENDPOINT-X . ENDPOINT-Y).
(defalias 'artist-vap-find-endpoints #[(x y) "?\205f\304	\n\"\211\305=\203\306	\n\"\202e\307=\203$\310	\n\"\202e\311=\2031\312	\n\"\202e\313=\203>\314	\n\"\202e\315=\203Q\316\306	\n\"\310	\n\"\"\202e\317=\203d\316\312	\n\"\314	\n\"\"\202e\320)\207" [artist-line-char-set x y c artist-get-char-at-xy-conv 45 artist-vap-find-endpoints-horiz 124 artist-vap-find-endpoints-vert 47 artist-vap-find-endpoints-swne 92 artist-vap-find-endpoints-nwse 43 append 88 nil] 6 (#$ . 97531)])
#@36 Group elements in list L in pairs.
(defalias 'artist-vap-group-in-pairs #[(l) "\204\301\207A\204
\207\302@A@DC\303AA!\"\207" [l nil append artist-vap-group-in-pairs] 4 (#$ . 98162)])
#@95 Given ENDPOINT1 and ENDPOINT2, vaporize the line between them.
An endpoint is a pair (X . Y).
(defalias 'artist-vaporize-by-endpoints #[(endpoint1 endpoint2) "@A@A\306	\n\f
$\307H\310H\311H\312\f	Z!\312\f	Z!\312
\nZ!\312
\nZ!\312	\fZ!\312	\fZ!\312\n
Z!\312\n
Z!\257\234	\n\313Y\205\364\314\"\315\"\316\317\320`\"i\313U\203\213\320\202\214\313\321#Zy\210\322\323\316\317\320`\"i\313U\203\244\320\202\245\313\321#Zy\"\210\324\313]\325\"\210\316\317\320`\"i\313U\203\302\320\202\303\313\321#\211 !^! \"]\211\"+\210\326!\210*\\\\S\211\202].\207" [endpoint1 x1 y1 endpoint2 x2 y2 artist-find-direction [1 1 0 -1 -1 -1 0 1] [0 1 1 1 0 -1 -1 -1] [45 92 124 47 45 92 124 47] abs 0 artist-get-char-at-xy-conv artist-unintersection-char + count-lines 1 -1 insert-char 10 move-to-column t artist-replace-char dir x-step y-step line-c line-len x y buffer-c new-c curr-y artist-draw-region-min-y artist-draw-region-max-y] 11 (#$ . 98360)])
#@247 Vaporize (erase) the straight line through X1, Y1.
Do this by replacing the characters that forms the line with
`artist-erase-char'.  Output is a list of endpoints for lines through
X1, Y1.  An endpoint is a cons pair, (ENDPOINT-X . ENDPOINT-Y).
(defalias 'artist-vaporize-line #[(x1 y1) "\303	\"\304\305\306\n!\"\210\n)\207" [x1 y1 endpoints artist-vap-find-endpoints mapc #[(endpoints) "@A@\303\n	\"*\207" [endpoints ep2 ep1 artist-vaporize-by-endpoints] 3] artist-vap-group-in-pairs] 4 (#$ . 99386)])
#@45 Vaporize lines reachable from point X1, Y1.
(defalias 'artist-vaporize-lines #[(x1 y1) "\305\306\307\310	\n\"\"\210??\205&\211A@\311@A\"\306\312\f\"\210*\202\n)\207" [ep-stack x1 y1 vaporize-point new-endpoints nil mapc #[(ep) "	B\211\207" [ep ep-stack] 2] artist-vap-find-endpoints artist-vaporize-line #[(endpoint) "	B\211\207" [endpoint ep-stack] 2]] 5 (#$ . 99902)])
#@125 Create a point-list for first quadrant.
Points go from (X-RADIUS, 0) to (0, Y-RADIUS).
Quadrant is generated around origin.
(defalias 'artist-ellipse-generate-quadrant #[(x-radius y-radius) "\211_\n\211_	\306_\306_\307\310\n\310\f_\307\311\307\312\313\"\211\314I\210\315I\210,C\"\316\317	\n_[\320	_#!W\203\305T
\\\310W\203\202\317#\202\231S\fZ\317[$\311\307\312\313\"\211\314I\210\315I\210,C\"\202\\\316\317\321\322\\\323\\#\321	SS#	_[#!\310V\203LS\fZ\310V\203	\317	[#\202 T
\\\317	[$\311\307\312\313\"\211\314I\210\315I\210,C\"\202\343.\n\207" [x-radius rx2 y-radius ry2 2rx2 2ry2 2 nil 0 append make-vector 4 1 3 round + 0.25 * 0.5 0.5 p x y px py point-list new-char coord] 7 (#$ . 100294)])
#@94 Create a new item at X, Y, with WIDTH.
This is for use in fill-info in ellipses and circles.
(defalias 'artist-new-fill-item #[(x y width) "\304\305\"\211\306\nI\210	\307I\210	)\207" [x new-item y width make-vector 3 1 2] 4 (#$ . 101190)])
(put 'artist-new-fill-item 'byte-optimizer 'byte-compile-inline-expand)
#@42 Retrieve the x component of a FILL-ITEM.
(defalias 'artist-fill-item-get-x #[(fill-item) "\301H\207" [fill-item 0] 2 (#$ . 101511)])
(put 'artist-fill-item-get-x 'byte-optimizer 'byte-compile-inline-expand)
#@46 Set the x component of a FILL-ITEM to NEW-X.
(defalias 'artist-fill-item-set-x #[(fill-item new-x) "\302	I\210\207" [fill-item new-x 0] 3 (#$ . 101725)])
(put 'artist-fill-item-set-x 'byte-optimizer 'byte-compile-inline-expand)
#@42 Retrieve the y component of a FILL-ITEM.
(defalias 'artist-fill-item-get-y #[(fill-item) "\301H\207" [fill-item 1] 2 (#$ . 101961)])
(put 'artist-fill-item-get-y 'byte-optimizer 'byte-compile-inline-expand)
#@46 Set the y component of a FILL-ITEM to NEW-Y.
(defalias 'artist-fill-item-set-y #[(fill-item new-y) "\302	I\210\207" [fill-item new-y 1] 3 (#$ . 102175)])
(put 'artist-fill-item-set-y 'byte-optimizer 'byte-compile-inline-expand)
#@46 Retrieve the width component of a FILL-ITEM.
(defalias 'artist-fill-item-get-width #[(fill-item) "\301H\207" [fill-item 2] 2 (#$ . 102411)])
(put 'artist-fill-item-get-width 'byte-optimizer 'byte-compile-inline-expand)
#@54 Set the width component of a FILL-ITEM to NEW-WIDTH.
(defalias 'artist-fill-item-set-width #[(fill-item new-width) "\302	I\210\207" [fill-item new-width 2] 3 (#$ . 102637)])
(put 'artist-fill-item-set-width 'byte-optimizer 'byte-compile-inline-expand)
#@65 Add offsets X-CENTER and Y-CENTER to coordinates in POINT-LIST.
(defalias 'artist-ellipse-point-list-add-center #[(x-center y-center point-list) "\301\302\"\207" [point-list mapcar #[(p) "	\211\306H)\\\211\306I\210\n*\210\f\211\307H)\\\211\307
I\210\n*\207" [p x-center coord new-x y-center new-y 0 1] 5]] 3 (#$ . 102897)])
#@63 Add offsets X-CENTER and Y-CENTER to fill-items in FILL-INFO.
(defalias 'artist-ellipse-fill-info-add-center #[(x-center y-center fill-info) "\301\302\"\207" [fill-info mapcar #[(p) "	\211\306H)\\\211\306I\210\n*\210\f\211\307H)\\\211\307
I\210\n*\207" [p x-center fill-item new-x y-center new-y 0 1] 5]] 3 (#$ . 103239)])
#@65 Remove fill-infos from FILL-INFO that fills a zero-width field.
(defalias 'artist-ellipse-remove-0-fills #[(fill-info) "\204\302\207@\211\303H)\304U\203\305A!\207\306@C\305A!\"\207" [fill-info fill-item nil 2 0 artist-ellipse-remove-0-fills append] 5 (#$ . 103580)])
#@115 Compute fill info for ellipse around 0,0 from POINT-LIST.
The POINT-LIST is expected to cover the first quadrant.
(defalias 'artist-ellipse-compute-fill-info #[(point-list) "\304\211\211\305\306\"\210\307\n\305\310\311\n!A\"\"\312	!+\207" [last-y both-halves first-half point-list nil mapc #[(coord) "\211\306H)\211\307H)	\310_S\306]	Z
\203#\n
U\204D\311\f\f\n\312\313	\"\211
\307\nI\210
\310I\210
,C\"\f\n\211,\207" [coord x y width left-edge last-y 0 1 2 append make-vector 3 first-half new-item] 6] append #[(i) "\211\306H)\211\307H)[\211\310H)\311\312\f\"\211\307I\210
\310\nI\210
,\207" [i fill-item width y x new-item 0 1 2 make-vector 3] 5] reverse artist-ellipse-remove-0-fills] 6 (#$ . 103864)])
#@77 Mirror a POINT-LIST describing first quadrant to create a complete ellipse.
(defalias 'artist-ellipse-mirror-quadrant #[(point-list) "\306\211\307\n!@\211\211\310H)\311U\203\"
\211\310I\210\f*\210)\312\n\313\314\315\n!A\"\"\313\316\317\315	!A!\"\312	\"*\207" [left-half right-half point-list last-coord coord artist-ellipse-right-char nil last 3 47 append mapcar #[(coord) "\211\305H)\211\306H)\211\307H)[	\310U\203\311\202)	\311U\203(\310\202)	\312\313\f\"\211\307I\210\305\nI\210-\207" [coord c new-char y x 3 0 1 47 92 make-vector 4] 5] reverse #[(coord) "\211\306H)\211\307H)[\211\310H)	\311U\203\312\2023	\312U\203(\311\2023	\nU\2032\2023	
\313\314
\"\211\310
I\210\306\fI\210-\207" [coord c artist-ellipse-right-char artist-ellipse-left-char new-char y 3 0 1 47 92 make-vector 4 x] 5] butlast new-char] 7 (#$ . 104613)])
#@489 Draw an ellipse with center at X1, Y1 and X-RADIUS and Y-RADIUS.

Output is an ellipse, which is a list (END-POINT-1 END-POINT-2 SHAPE-INFO).

END-POINT-1 and END-POINT-2 are two-element vectors on the form [X Y].
SHAPE-INFO is a two-element vector on the form [POINT-LIST FILL-INFO].

POINT-LIST is a list of vectors on the form [X Y SAVED-CHAR NEW-CHAR].
FILL-INFO is a list of vectors on the form [X Y ELLIPSE-WIDTH-ON-THIS-LINE].

Ellipses with zero Y-RADIUS are not drawn correctly.
(defalias 'artist-draw-ellipse-general #[(x1 y1 x-radius y-radius) "\306	\"\307\n!\310\311\312\"\313\n!\314\n!\315
\n#\316
#\317\320\321\322\n!!\"\f\312\nI\210\f\323I\210\324\325
\"\325	\"\f#+\207" [x-radius y-radius point-list fill-info shape-info x1 artist-ellipse-generate-quadrant artist-ellipse-compute-fill-info make-vector 2 0 artist-calculate-new-chars artist-ellipse-mirror-quadrant artist-ellipse-point-list-add-center artist-ellipse-fill-info-add-center mapcar #[(coord) "\211\306H)\211\307H)	\310\311\307`\"i\306U\203\307\202\306\312#Zy\210\313\314	\310\311\307`\"i\306U\2036\307\2027\306\312#Zy\"\210\315\n\306]\316\"\210\310\311\307`\"i\306U\203S\307\202T\306\312#\211\f^
]\211+\210\203o\317!\210\202x\317\211\320H)!\210\207" [coord y x curr-y artist-draw-region-min-y artist-draw-region-max-y 0 1 + count-lines -1 insert-char 10 move-to-column t artist-replace-char 3 artist-line-char-set artist-line-char] 8] artist-modify-new-chars artist-save-chars-under-point-list 1 artist-make-2point-object artist-make-endpoint y1] 5 (#$ . 105502)])
#@492 Draw an ellipse with center at X1, Y1 and X-RADIUS and Y-RADIUS.

Output is an ellipse, which is a list (END-POINT-1 END-POINT-2 SHAPE-INFO).

END-POINT-1 and END-POINT-2 are two-element vectors on the form [X Y].
SHAPE-INFO is a two-element vector on the form [POINT-LIST FILL-INFO].

POINT-LIST is a list of vectors on the form [X Y SAVED-CHAR NEW-CHAR].
FILL-INFO is a list of vectors on the form [X Y ELLIPSE-WIDTH-ON-THIS-LINE].

The Y-RADIUS must be 0, but the X-RADIUS must not be 0.
(defalias 'artist-draw-ellipse-with-0-height #[(x1 y1 x-radius y-radius) "\306\307\310_!S\311\\	\307!ZT\n\203\202\312\311\306\211\313\310\311\"W\203\\ !!\306\"#$\313\314$\"\211%\315#I\210%\316\"I\210%,\211&!#\211$##$#\317\320\315`\"i\311U\203\205\315\202\206\311\321#Zy\210\322\323#\317\320\315`\"i\311U\203\236\315\202\237\311\321#Zy\"\210\324$\311]\325\"\210\317\320\315`\"i\311U\203\274\315\202\275\311\321#\211'(^(')]\211)+\210\317\320\315`\"i\311U\203\340\315\202\341\311\321#\211'(^(')]))g**\211%\310*I\210%*\210!#$#\317\320\315`\"i\311U\203\315\202\311\321#Zy\210\322\323#\317\320\315`\"i\311U\2035\315\2026\311\321#Zy\"\210\324$\311]\325\"\210\317\320\315`\"i\311U\203S\315\202T\311\321#\211'(^(')]\211)+\210\326!\210\327&C\"T+\202-\f\311I\210\f\315
I\210\330\331	 \"\331+\"\f#.\207" [x-radius x1 artist-line-char-set artist-line-char shape-info fill-info nil abs 2 0 45 make-vector 4 1 3 + count-lines -1 insert-char 10 move-to-column t artist-replace-char append artist-make-2point-object artist-make-endpoint point-list i line-char left-edge width line-x y1 line-y new-char y x coord new-coord curr-y artist-draw-region-min-y artist-draw-region-max-y saved-char y-radius] 11 (#$ . 107097)])
#@425 Draw an ellipse with center at X1, Y1 and point X2,Y2.

Output is an ellipse, which is a list (END-POINT-1 END-POINT-2 SHAPE-INFO).

END-POINT-1 and END-POINT-2 are two-element vectors on the form [X Y].
SHAPE-INFO is a two-element vector on the form [POINT-LIST FILL-INFO].

POINT-LIST is a list of vectors on the form [X Y SAVED-CHAR NEW-CHAR].
FILL-INFO is a list of vectors on the form [X Y ELLIPSE-WIDTH-ON-THIS-LINE].
(defalias 'artist-draw-ellipse #[(x1 y1 x2 y2) "\203\f	\203\f\n\202\205\f\211\306
\fZ!
\306Z!\307
\310\311!_!\307\310\311!_!\fU\203]\f
U\204]\312$\202g\313$.\207" [artist-borderless-shapes artist-fill-char-set artist-fill-char artist-line-char-set artist-line-char x2 abs round sqrt 2 artist-draw-ellipse-with-0-height artist-draw-ellipse-general x1 width y2 y1 height x-radius y-radius x y] 6 (#$ . 108920)])
#@17 Undraw ELLIPSE.
(defalias 'artist-undraw-ellipse #[(ellipse) "\205\302!\303H\304\305	\")\207" [ellipse point-list artist-2point-get-shapeinfo 0 mapcar #[(coord) "\211\306H)\211\307H)	\310\311\307`\"i\306U\203\307\202\306\312#Zy\210\313\314	\310\311\307`\"i\306U\2036\307\2027\306\312#Zy\"\210\315\n\306]\316\"\210\310\311\307`\"i\306U\203S\307\202T\306\312#\211\f^
]\211+\210\317\211\320H)!\210\207" [coord y x curr-y artist-draw-region-min-y artist-draw-region-max-y 0 1 + count-lines -1 insert-char 10 move-to-column t artist-replace-char 2] 8]] 3 (#$ . 109817)])
#@423 Draw a circle with center at X1, Y1 and point X2,Y2.

Output is an ellipse, which is a list (END-POINT-1 END-POINT-2 SHAPE-INFO).

END-POINT-1 and END-POINT-2 are two-element vectors on the form [X Y].
SHAPE-INFO is a two-element vector on the form [POINT-LIST FILL-INFO].

POINT-LIST is a list of vectors on the form [X Y SAVED-CHAR NEW-CHAR].
FILL-INFO is a list of vectors on the form [X Y ELLIPSE-WIDTH-ON-THIS-LINE].
(defalias 'artist-draw-circle #[(x1 y1 x2 y2) "\203\f	\203\f\n\202\205\f\211\306
\nZ!\306\f
Z!\307\310\211____\\!!\307\245!\311\n
$.\207" [artist-borderless-shapes artist-fill-char-set artist-fill-char artist-line-char-set artist-line-char x2 abs round sqrt artist-draw-ellipse-general x1 width y2 y1 height artist-aspect-ratio x-radius y-radius] 7 (#$ . 110416)])
(defalias 'artist-undraw-circle 'artist-undraw-ellipse)
#@68 Fill an ELLIPSE centered at X,Y with radius X-RADIUS and Y-RADIUS.
(defalias 'artist-fill-ellipse #[(ellipse x y x-radius y-radius) "\302!\303H\304\305	\")\207" [ellipse fill-info artist-2point-get-shapeinfo 1 mapcar #[(fill-item) "\211\306H)\211\307H)	\310\311\307`\"i\306U\203\307\202\306\312#Zy\210\313\314	\310\311\307`\"i\306U\2036\307\2027\306\312#Zy\"\210\315\n\306]\316\"\210\310\311\307`\"i\306U\203S\307\202T\306\312#\211\f^
]\211+\210\317\211\320H)\"\210\207" [fill-item y x curr-y artist-draw-region-min-y artist-draw-region-max-y 0 1 + count-lines -1 insert-char 10 move-to-column t artist-replace-chars 2 artist-fill-char] 8]] 3 (#$ . 111307)])
(defalias 'artist-fill-circle 'artist-fill-ellipse)
#@65 Copy rectangle RECT drawn from X1, Y1 to X2, Y2, then clear it.
(defalias 'artist-cut-rect #[(rect x1 y1 x2 y2) "\305!\210\306	\n\f$\210\307	\n\f%\207" [rect x1 y1 x2 y2 artist-undraw-rect artist-copy-generic artist-erase-rect] 6 (#$ . 112049)])
#@74 Copy a SQUARE drawn from X1, Y1 to X2, Y2 (made square), then clears it.
(defalias 'artist-cut-square #[(square x1 y1 x2 y2) "\306!\210\307	\n\f$\211\310\234
\311\234
\312\234
\313\234\314$\210\315%-\207" [square x1 y1 x2 y2 square-corners artist-undraw-square artist-rect-corners-squarify 0 1 2 3 artist-copy-generic artist-erase-rect new-x1 new-y1 new-x2 new-y2] 7 (#$ . 112305)])
#@76 Retrieve contents from the buffer at X, Y.  WIDTH characters are returned.
(defalias 'artist-get-buffer-contents-at-xy #[(x y width) "		\306\307\310`\"i\311U\203\310\202\311\312#Zy\210\313\314	\306\307\310`\"i\311U\203,\310\202-\311\312#Zy\"\210\315\311]\316\"\210\306\307\310`\"i\311U\203I\310\202J\311\312#\211^\n\f]\211+\210`\212
\\		\306\307\310`\"i\311U\203p\310\202q\311\312#Zy\210\313\314	\306\307\310`\"i\311U\203\210\310\202\211\311\312#Zy\"\210\315\311]\316\"\210\306\307\310`\"i\311U\203\245\310\202\246\311\312#\211^\n\f]\211+\210`)\317\"\210\212
\\		\306\307\310`\"i\311U\203\330\310\202\331\311\312#Zy\210\313\314	\306\307\310`\"i\311U\203\360\310\202\361\311\312#Zy\"\210\315\311]\316\"\210\306\307\310`\"i\311U\203
\310\202\311\312#\211^\n\f]\211+\210`){*\207" [x y curr-y artist-draw-region-min-y artist-draw-region-max-y width + count-lines 1 0 -1 insert-char 10 move-to-column t untabify there here] 8 (#$ . 112722)])
#@167 Copy a rectangular area with corners at X1, Y1 and X2, Y2.
Output is a copy buffer, a list of strings, representing the
original contents of that area in the buffer.
(defalias 'artist-copy-generic #[(x1 y1 x2 y2) "	^\f^	]	\f]\n	\nZT\306\f
\nX\2035\307\n
#\fB\f
T\211\202
\203D\310\f!\211\202K\310\f!\211.\207" [x1 x2 x y1 y2 y nil artist-get-buffer-contents-at-xy reverse x-max y-max w l artist-interface-with-rect killed-rectangle artist-copy-buffer] 5 (#$ . 113725)])
#@50 Copy rectangle RECT drawn from X1, Y1 to X2, Y2.
(defalias 'artist-copy-rect #[(rect x1 y1 x2 y2) "\305!\210\306	\n\f$\207" [rect x1 y1 x2 y2 artist-undraw-rect artist-copy-generic] 5 (#$ . 114232)])
#@62 Copy a SQUARE drawn from X1, Y1 to X2, Y2 (but made square).
(defalias 'artist-copy-square #[(square x1 y1 x2 y2) "\306!\210\307	\n\f$\211\310\234

\311\234
\312\234
\313\234\314
$-\207" [square x1 y1 x2 y2 square-corners artist-undraw-square artist-rect-corners-squarify 0 1 2 3 artist-copy-generic new-x1 new-y1 new-x2 new-y2] 6 (#$ . 114440)])
#@47 Paste the contents of the copy-buffer at X,Y.
(defalias 'artist-paste #[(x y) "\203	\202	\n\211\203B??\205E\f

\306\307\310`\"i\311U\203(\310\202)\311\312#Zy\210\313\314
\306\307\310`\"i\311U\203@\310\202A\311\312#Zy\"\210\315\f\311]\316\"\210\306\307\310`\"i\311U\203]\310\202^\311\312#\211^]\211+\210@\317\320\317\"\321\322\317\211\2056@ \203& \211 !GW\203\253! H\202\255 )\323U\203&iT\306\307\310`\"i\311U\203\304\310\202\305\311\312#
\306\307\310`\"i\311U\203\331\310\202\332\311\312#Zy\210\313\314
\306\307\310`\"i\311U\203\361\310\202\362\311\312#Zy\"\210\315\f\311]\316\"\210\306\307\310`\"i\311U\203\310\202\311\312#\211^]\211+\210\202+\324 !\210)A\211\204\215\317.\210A
T\202\325\326!)\207" [artist-interface-with-rect killed-rectangle artist-copy-buffer copy-buf x y + count-lines 1 0 -1 insert-char 10 move-to-column t nil append overwrite-mode-textual 32765 32 artist-replace-char message "Nothing to paste" curr-y artist-draw-region-min-y artist-draw-region-max-y see-thru string blink-matching-paren fill-column overwrite-mode char-list c artist-replacement-table] 8 (#$ . 114810)])
#@54 Determine if the position X is too far to the right.
(defalias 'artist-ff-too-far-right #[(x) "\247\203		V\207\303=\203	\303 \304ZV\207\302=\203 	\nV\207\305\306!\207" [artist-flood-fill-right-border x fill-column window-width 2 error "Invalid value for `artist-flood-fill-right-border'"] 3 (#$ . 116009)])
#@60 Find the rightmost position in this run, starting at X, Y.
(defalias 'artist-ff-get-rightmost-from-xy #[(x y) "\212\304	\"T\305!\204\"\304	\"U\203\"T\202\n+\207" [x y last-x char-at-xy artist-get-char-at-xy-conv artist-ff-too-far-right] 4 (#$ . 116330)])
#@67 Determine whether the position X,Y is on the topmost line or not.
(defalias 'artist-ff-is-topmost-line #[(x y) "\301U\207" [y 0] 2 (#$ . 116608)])
#@70 Determine whether the position X,Y is on the bottommost line or not.
(defalias 'artist-ff-is-bottommost-line #[(x y) "\212db\210\302 \210\303\304\305`\"i\306U\203\305\202\306\307#`dU\203'	SY\202*	Y*\207" [last-line y beginning-of-line + count-lines 1 0 -1] 4 (#$ . 116762)])
#@75 Flood-fill starting at X1, Y1.  Fill with the char in `artist-fill-char'.
(defalias 'artist-flood-fill #[(x1 y1) "\306\211\307	\"\n\203\202\f
U\204@	\306\310\311\"\211 \312I\210 \313I\210 ,B??\205\346\211A@\211 \211 \314H) \211 \312H)\314\211!\"\314#\306\211$%\315\211&'\316\"\"\317\"?$\320\"?%\"#\"\211\314Y\203
\307\"U\203$\203\364\307S\"\211(
U\203\357(&U\204\357S\306\310\311\"\211 \312I\210 \313I\210 ,B(&)#S\211\202\233#!\"\211!Y\203b%\203Y\307T\"\211)
U\203T)'U\204TT\306\310\311\"\211 \312I\210 \313I\210 ,B)')S\211\202\n!\321\322\312`\"i\314U\203{\312\202|\314\315#Zy\210\323\324\321\322\312`\"i\314U\203\224\312\202\225\314\315#Zy\"\210\325\314]\326\"\210\321\322\312`\"i\314U\203\262\312\202\263\314\315#\211*+^+*,]\211,+\210\327\"!ZT\"\210-\203\341\330 \203\336\331 \210\332 \210.\n\202@,\207" [x1 y1 artist-fill-char-set artist-fill-char artist-default-fill-char c nil artist-get-char-at-xy-conv make-vector 4 1 3 0 -1 artist-ff-get-rightmost-from-xy artist-ff-is-topmost-line artist-ff-is-bottommost-line + count-lines insert-char 10 move-to-column t artist-replace-chars input-pending-p discard-input artist-update-display input-queue stack new-char y x coord x-leftmost x-rightmost last-x lines-above lines-below last-c-above last-c-below c-above c-below curr-y artist-draw-region-min-y artist-draw-region-max-y artist-flood-fill-show-incrementally] 8 (#$ . 117052)])
#@133 Create an arrow point at X, Y for a line in direction DIRECTION.
Optional argument STATE can be used to set state (default is nil).
(defalias 'artist-make-arrow-point #[(x y direction &optional state) "\212\306\307\310\"\311 \n\312\313\314`\"i\310U\203\314\202\310\315#Zy\210\316\317\312\313\314`\"i\310U\2035\314\2026\310\315#Zy\"\210\320\n\310]\321\"\210\312\313\314`\"i\310U\203R\314\202S\310\315#\211
^\f]\211+\210	`\322\223\210\310	I\210\314\n\211\312\313\314`\"i\310U\203\207\314\202\210\310\315#Zy\210\316\317\312\313\314`\"i\310U\203\237\314\202\240\310\315#Zy\"\210\320\n\310]\321\"\210\312\313\314`\"i\310U\203\274\314\202\275\310\315#\211
^\f]\211+\210\312\313\314`\"i\310U\203\334\314\202\335\310\315#\211
^\f])g*I\210\323I\210\324I\210+\207" [arrow-point arrow-marker x y curr-y artist-draw-region-min-y make-vector 4 0 make-marker + count-lines 1 -1 insert-char 10 move-to-column t nil 2 3 artist-draw-region-max-y direction state] 10 (#$ . 118651)])
#@50 Retrieve the marker component of an ARROW-POINT.
(defalias 'artist-arrow-point-get-marker #[(arrow-point) "\301H\207" [arrow-point 0] 2 (#$ . 119680)])
(put 'artist-arrow-point-get-marker 'byte-optimizer 'byte-compile-inline-expand)
#@53 Retrieve the orig char component of an ARROW-POINT.
(defalias 'artist-arrow-point-get-orig-char #[(arrow-point) "\301H\207" [arrow-point 1] 2 (#$ . 119920)])
(put 'artist-arrow-point-get-orig-char 'byte-optimizer 'byte-compile-inline-expand)
#@53 Retrieve the direction component of an ARROW-POINT.
(defalias 'artist-arrow-point-get-direction #[(arrow-point) "\301H\207" [arrow-point 2] 2 (#$ . 120169)])
(put 'artist-arrow-point-get-direction 'byte-optimizer 'byte-compile-inline-expand)
#@49 Retrieve the state component of an ARROW-POINT.
(defalias 'artist-arrow-point-get-state #[(arrow-point) "\301H\207" [arrow-point 3] 2 (#$ . 120418)])
(put 'artist-arrow-point-get-state 'byte-optimizer 'byte-compile-inline-expand)
#@57 Set the state component of an ARROW-POINT to NEW-STATE.
(defalias 'artist-arrow-point-set-state #[(arrow-point new-state) "\302	I\207" [arrow-point new-state 3] 3 (#$ . 120655)])
(put 'artist-arrow-point-set-state 'byte-optimizer 'byte-compile-inline-expand)
#@26 Clear current endpoints.
(defalias 'artist-clear-arrow-points #[nil "\302\211\211\207" [artist-arrow-point-1 artist-arrow-point-2 nil] 3 (#$ . 120921)])
#@76 Generic function for setting arrow-points for poly-shapes from POINT-LIST.
(defalias 'artist-set-arrow-points-for-poly #[(point-list) "\306\234\307\234\310	!\311	!\310\n!\311\n!\312
\f$\313!@\313\314\"@\310!\311!\310!\311!\312$\315\f#\315#\211.\207" [point-list ep1 ep2 x1 y1 x2 0 1 artist-endpoint-get-x artist-endpoint-get-y artist-find-direction last 2 artist-make-arrow-point y2 dir1 epn epn-1 xn yn xn-1 yn-1 dirn artist-arrow-point-1 artist-arrow-point-2] 5 (#$ . 121082)])
#@119 Generic function for setting arrow-points for 2-point shapes.
The 2-point shape SHAPE is drawn from X1, Y1 to X2, Y2.
(defalias 'artist-set-arrow-points-for-2points #[(shape x1 y1 x2 y2) "\306!\307!\310	!\311	!\310\n!\311\n!\f\312\f\313
\f\f$#
\312
\f\313\f
\f$#\211.\207" [shape endpoint1 endpoint2 x1 y1 x2 artist-2point-get-endpoint1 artist-2point-get-endpoint2 artist-endpoint-get-x artist-endpoint-get-y artist-make-arrow-point artist-find-direction y2 artist-arrow-point-1 artist-arrow-point-2] 8 (#$ . 121629)])
#@53 Undraw current continuous shape with point at X, Y.
(defalias 'artist-key-undraw-continously #[(x y) "\300\207" [nil] 1 (#$ . 122172)])
#@47 Undraw current poly shape with point at X, Y.
(defalias 'artist-key-undraw-poly #[(x y) "\306!\307	!\310	!\211\205\f
!+\207" [artist-curr-go artist-key-endpoint1 y1 x1 undraw-fn artist-key-shape artist-go-get-undraw-fn-from-symbol artist-endpoint-get-x artist-endpoint-get-y] 5 (#$ . 122314)])
#@39 Undraw current 1-point shape at X, Y.
(defalias 'artist-key-undraw-1point #[(x y) "\300\207" [nil] 1 (#$ . 122620)])
#@39 Undraw current 2-point shape at X, Y.
(defalias 'artist-key-undraw-2points #[(x y) "\306!\307	!\310	!\211\205\f
!+\207" [artist-curr-go artist-key-endpoint1 y1 x1 undraw-fn artist-key-shape artist-go-get-undraw-fn-from-symbol artist-endpoint-get-x artist-endpoint-get-y] 5 (#$ . 122743)])
#@41 Common routine undrawing current shape.
(defalias 'artist-key-undraw-common #[nil "\306!i\307\310\311`\"i\312U\203\311\202\312\313#\211\314=\203'\315\n	\"\210\202`\316=\2035\317\n	\"\210\202`\247\203H\311U\203H\320\n	\"\210\202`\247\203[\321U\203[\322\n	\"\210\202`\323\324\"\210\n	\f\307\310\311`\"i\312U\203t\311\202u\312\313#Zy\210\325\326\f\307\310\311`\"i\312U\203\214\311\202\215\312\313#Zy\"\210\327
\312]\330\"\210\307\310\311`\"i\312U\203\251\311\202\252\312\313#\211^]\211.\207" [artist-curr-go row col draw-how y x artist-go-get-draw-how-from-symbol + count-lines 1 0 -1 artist-do-continously artist-key-undraw-continously artist-do-poly artist-key-undraw-poly artist-key-undraw-1point 2 artist-key-undraw-2points message "Undrawing \"%s\"s is not yet implemented" insert-char 10 move-to-column t curr-y artist-draw-region-min-y artist-draw-region-max-y] 8 (#$ . 123044)])
#@39 Draw current continuous shape at X,Y.
(defalias 'artist-key-draw-continously #[(x y) "\305!\211\205\f	\n\"\211)\207" [artist-curr-go draw-fn x y artist-key-shape artist-go-get-draw-fn-from-symbol] 4 (#$ . 123979)])
#@54 Draw current poly-point shape with nth point at X,Y.
(defalias 'artist-key-draw-poly #[(x y) "\306!\307	!\310	!\211\205\f\n
	$\211\n+\207" [artist-curr-go artist-key-endpoint1 y1 x1 draw-fn x artist-go-get-draw-fn-from-symbol artist-endpoint-get-x artist-endpoint-get-y y artist-key-shape] 6 (#$ . 124205)])
#@36 Draw current 1-point shape at X,Y.
(defalias 'artist-key-draw-1point #[(x y) "\305!\211\205\f	\n\"\211)\207" [artist-curr-go draw-fn x y artist-key-shape artist-go-get-draw-fn-from-symbol] 4 (#$ . 124528)])
#@36 Draw current 2-point shape at X,Y.
(defalias 'artist-key-draw-2points #[(x y) "\306!\307	!\310	!\211\205\f\n
	$\211\n+\207" [artist-curr-go artist-key-endpoint1 y1 x1 draw-fn x artist-go-get-draw-fn-from-symbol artist-endpoint-get-x artist-endpoint-get-y y artist-key-shape] 6 (#$ . 124746)])
#@43 Common routine for drawing current shape.
(defalias 'artist-key-draw-common #[nil "\306!i\307\310\311`\"i\312U\203\311\202\312\313#\211\314=\203'\315\n	\"\210\202`\316=\2035\317\n	\"\210\202`\247\203H\311U\203H\320\n	\"\210\202`\247\203[\321U\203[\322\n	\"\210\202`\323\324\"\210\n	\f\307\310\311`\"i\312U\203t\311\202u\312\313#Zy\210\325\326\f\307\310\311`\"i\312U\203\214\311\202\215\312\313#Zy\"\210\327
\312]\330\"\210\307\310\311`\"i\312U\203\251\311\202\252\312\313#\211^]\211.\207" [artist-curr-go row col draw-how y x artist-go-get-draw-how-from-symbol + count-lines 1 0 -1 artist-do-continously artist-key-draw-continously artist-do-poly artist-key-draw-poly artist-key-draw-1point 2 artist-key-draw-2points message "Drawing \"%s\"s is not yet implemented" insert-char 10 move-to-column t curr-y artist-draw-region-min-y artist-draw-region-max-y] 8 (#$ . 125054)])
#@32 Reset the current draw-region.
(defalias 'artist-draw-region-reset #[nil "\302\303\211\207" [artist-draw-region-max-y artist-draw-region-min-y 0 1000000] 2 (#$ . 125979)])
#@115 Trim lines in current draw-region from MIN-Y to MAX-Y.
Trimming here means removing white space at end of a line.
(defalias 'artist-draw-region-trim-line-endings #[(min-y max-y) "	W\203
	\n)\212	\211X\205\306\f\307\310\311`\"i\306U\203*\311\202+\306\312#Zy\210\313\314\f\307\310\311`\"i\306U\203B\311\202C\306\312#Zy\"\210\315
\306]\316\"\210\307\310\311`\"i\306U\203_\311\202`\306\312#\211^]\211+\210\317\210\320 \210T\211\202*\207" [max-y min-y tmp curr-y y x 0 + count-lines 1 -1 insert-char 10 move-to-column t nil delete-horizontal-space artist-draw-region-min-y artist-draw-region-max-y] 8 (#$ . 126160)])
#@41 Update current continuous shape at X,Y.
(defalias 'artist-key-do-continously-continously #[(x y) "\304!\211\205\f	\n\")\207" [artist-curr-go draw-fn x y artist-go-get-draw-fn-from-symbol] 4 (#$ . 126812)])
#@56 Update current poly-point shape with nth point at X,Y.
(defalias 'artist-key-do-continously-poly #[(x y) "\306!\307!\310	!\311	!\n\f
\204'\312 \210\313\n\"\202C\2032!\210\205@
\f
\f$\211.\207" [artist-curr-go artist-key-endpoint1 x y y2 x2 artist-go-get-draw-fn-from-symbol artist-go-get-undraw-fn-from-symbol artist-endpoint-get-x artist-endpoint-get-y artist-no-rb-unset-point2 artist-no-rb-set-point2 y1 x1 undraw-fn draw-fn artist-rubber-banding artist-key-shape] 6 (#$ . 127028)])
#@38 Update current 1-point shape at X,Y.
(defalias 'artist-key-do-continously-1point #[(x y) "\300\207" [nil] 1 (#$ . 127553)])
#@53 Update current 2-point shape with 2nd point at X,Y.
(defalias 'artist-key-do-continously-2points #[(x y) "\306!\307!\310	!\311	!\n\f
\204'\312 \210\313\n\"\202C\2032!\210\205@
\f
\f$\211.\207" [artist-curr-go artist-key-endpoint1 x y y2 x2 artist-go-get-draw-fn-from-symbol artist-go-get-undraw-fn-from-symbol artist-endpoint-get-x artist-endpoint-get-y artist-no-rb-unset-point2 artist-no-rb-set-point2 y1 x1 undraw-fn draw-fn artist-rubber-banding artist-key-shape] 6 (#$ . 127683)])
#@44 Common routine for updating current shape.
(defalias 'artist-key-do-continously-common #[nil "\306!i\307\310\311`\"i\312U\203\311\202\312\313#\211\314=\203'\315\n	\"\210\202`\316=\2035\317\n	\"\210\202`\247\203H\311U\203H\320\n	\"\210\202`\247\203[\321U\203[\322\n	\"\210\202`\323\324\"\210\n	\f\307\310\311`\"i\312U\203t\311\202u\312\313#Zy\210\325\326\f\307\310\311`\"i\312U\203\214\311\202\215\312\313#Zy\"\210\327
\312]\330\"\210\307\310\311`\"i\312U\203\251\311\202\252\312\313#\211^]\211.\207" [artist-curr-go row col draw-how y x artist-go-get-draw-how-from-symbol + count-lines 1 0 -1 artist-do-continously artist-key-do-continously-continously artist-do-poly artist-key-do-continously-poly artist-key-do-continously-1point 2 artist-key-do-continously-2points message "Drawing \"%s\"s is not yet implemented" insert-char 10 move-to-column t curr-y artist-draw-region-min-y artist-draw-region-max-y] 8 (#$ . 128208)])
#@48 Set point for current continuous shape at X,Y.
(defalias 'artist-key-set-point-continously #[(x y) "\306!\307!\310!\311!\312!\f\204'\203W
\"\210\202W\n\2032\n
\"\210
\203I
 \203I\f\203L\f
\"\210\202L\313 \210	\203W	
\"\210-\f?\211\f\207" [artist-curr-go exit-fn prep-fill-fn init-fn arrow-set-fn arrow-pred artist-go-get-arrow-pred-from-symbol artist-go-get-arrow-set-fn-from-symbol artist-go-get-init-fn-from-symbol artist-go-get-prep-fill-fn-from-symbol artist-go-get-exit-fn-from-symbol artist-clear-arrow-points artist-key-is-drawing x y] 6 (#$ . 129184)])
#@124 Set point for current poly-point shape at X,Y.
If optional argument THIS-IS-LAST-POINT is non-nil, this point is the last.
(defalias 'artist-key-set-point-poly #[(x y &optional this-is-last-point) "\306!\307!\310!\311!\312!\313!\314!\315! \204v\2035!\"\"\210#\204D\316!\"\"\210\202V\205T!\"!\"$$\317!\"\"%\317!\"\"C&\320 \210\321 \322\323\324\325!\"\202P\326%!\327%!!\"'()*#\204\244\330 \210\205\242*)('$$$\203\274\331$!+\326+!(\327+!')\332&\317('\"C\"&,\204(*')\317*)\"%#\204\355\316*)\"\210\202\377\205\375*)*)$$\322\333!\202O\203&!\210\f\203$\f \203$\203$$&\"\210\n\2039\n \2039	\203<	&!\210\202<\320 \210
\203E
&!\210\334\211$%\334\211 ,.\207" [artist-curr-go arrow-set-fn arrow-pred fill-fn fill-pred exit-fn artist-go-get-draw-fn-from-symbol artist-go-get-init-fn-from-symbol artist-go-get-prep-fill-fn-from-symbol artist-go-get-exit-fn-from-symbol artist-go-get-fill-pred-from-symbol artist-go-get-fill-fn-from-symbol artist-go-get-arrow-pred-from-symbol artist-go-get-arrow-set-fn-from-symbol artist-no-rb-set-point1 artist-make-endpoint artist-clear-arrow-points t message "%s" substitute-command-keys "First point set. Set next with \\[artist-key-set-point], set last with C-u \\[artist-key-set-point]" artist-endpoint-get-x artist-endpoint-get-y artist-no-rb-unset-points artist-2point-get-endpoint2 append "Point set" nil prep-fill-fn init-fn draw-fn artist-key-is-drawing x y artist-rubber-banding artist-key-shape artist-key-endpoint1 artist-key-poly-point-list y2 x2 y1 x1 endpoint2 this-is-last-point] 10 (#$ . 129788)])
#@45 Set point for current 1-point shape at X,Y.
(defalias 'artist-key-set-point-1point #[(x y) "\306!\307!\310!\311!\306!\312!\313!\203*\"\210\2035\"\210
\203@
\"\210\n\203W\n \203W	\203Z	\"\210\202Z\314 \210\f\203e\f\"\210.\315\211\211\207" [artist-curr-go arrow-set-fn arrow-pred draw-fn exit-fn prep-fill-fn artist-go-get-draw-fn-from-symbol artist-go-get-init-fn-from-symbol artist-go-get-prep-fill-fn-from-symbol artist-go-get-exit-fn-from-symbol artist-go-get-arrow-pred-from-symbol artist-go-get-arrow-set-fn-from-symbol artist-clear-arrow-points nil init-fn x y artist-key-shape artist-key-is-drawing] 9 (#$ . 131465)])
#@60 Set first or second point in current 2-point shape at X,Y.
(defalias 'artist-key-set-point-2points #[(x y) "\306!\307!\310!\311!\312!\313!\314!\315!\204h\2035\"\210\204D\316\"\210\202V\205T$\317\"\320 \210\321\211\202\371\322!\323! !\"\204\226\324 \210\205\224\"! $\203\251\"! %\210\f\203\303\f \203\303\203\303\"! %\210\n\203\340\n \203\340	\203\343	\"! %\210\202\343\320 \210
\203\364
\"! %\210\325\211,.\207" [artist-curr-go arrow-set-fn arrow-pred fill-fn fill-pred exit-fn artist-go-get-draw-fn-from-symbol artist-go-get-init-fn-from-symbol artist-go-get-prep-fill-fn-from-symbol artist-go-get-exit-fn-from-symbol artist-go-get-fill-pred-from-symbol artist-go-get-fill-fn-from-symbol artist-go-get-arrow-pred-from-symbol artist-go-get-arrow-set-fn-from-symbol artist-no-rb-set-point1 artist-make-endpoint artist-clear-arrow-points t artist-endpoint-get-x artist-endpoint-get-y artist-no-rb-unset-points nil prep-fill-fn init-fn draw-fn artist-key-is-drawing x y artist-rubber-banding artist-key-shape artist-key-endpoint1 y2 x2 y1 x1] 9 (#$ . 132149)])
#@90 Common routine for setting point in current shape.
With non-nil ARG, set the last point.
(defalias 'artist-key-set-point-common #[(arg) "\306!i\307\310\311`\"i\312U\203\311\202\312\313#		\204\"\314 \210
\315=\2035\316\f\"\210\317\f\"\210\202p
\320=\203E\321\f#\210\202p
\247\203X
\311U\203X\322\f\"\210\202p
\247\203k
\323U\203k\324\f\"\210\202p\325\326
\"\210\203\204\n\203\204	\204\204\327 \"\210\f!\"!\307\310\311`\"i\312U\203\233\311\202\234\312\313#Zy\210\330\331!\307\310\311`\"i\312U\203\264\311\202\265\312\313#Zy\"\210\332\"\312]\333\"\210\307\310\311`\"i\312U\203\322\311\202\323\312\313#\211#^# ]\211 +\210\334	!,\207" [artist-curr-go artist-key-is-drawing was-drawing row col draw-how artist-go-get-draw-how-from-symbol + count-lines 1 0 -1 artist-draw-region-reset artist-do-continously artist-key-set-point-continously artist-key-do-continously-continously artist-do-poly artist-key-set-point-poly artist-key-set-point-1point 2 artist-key-set-point-2points message "Drawing \"%s\"s is not yet implemented" artist-draw-region-trim-line-endings insert-char 10 move-to-column t artist-mode-line-show-curr-operation arg artist-trim-line-endings artist-draw-region-min-y artist-draw-region-max-y y x curr-y] 7 (#$ . 133350)])
#@100 Move cursor up N lines (default is 1), updating current shape.
If N is negative, move cursor down.
(defalias 'artist-previous-line #[(&optional n) "i	[y\210\303\304\"\210)\n\205\305 \207" [col n artist-key-is-drawing move-to-column t artist-key-do-continously-common] 3 (#$ . 134647) "p"])
#@100 Move cursor down N lines (default is 1), updating current shape.
If N is negative, move cursor up.
(defalias 'artist-next-line #[(&optional n) "i	y\210\303\304\"\210)\n\205\305 \207" [col n artist-key-is-drawing move-to-column t artist-key-do-continously-common] 3 (#$ . 134948) "p"])
#@102 Move cursor backward N chars (default is 1), updating current shape.
If N is negative, move forward.
(defalias 'artist-backward-char #[(&optional n) "\301V\203\302[!\207\302!\207" [n 0 artist-forward-char] 2 (#$ . 135244) "p"])
#@102 Move cursor forward N chars (default is 1), updating current shape.
If N is negative, move backward.
(defalias 'artist-forward-char #[(&optional n) "\306Y\203\n\307\202\310\311!i\306\n	_\\]
\204%\312\f\313\"\202,\312\f\313\"\210\314 ,\207" [n step-x distance curr-col new-col artist-key-is-drawing 0 1 -1 abs move-to-column t artist-key-do-continously-common] 4 (#$ . 135484) "p"])
#@76 Set a point for the current shape.  With optional ARG, set the last point.
(defalias 'artist-key-set-point #[(&optional arg) "\301!\207" [arg artist-key-set-point-common] 2 (#$ . 135884) "P"])
#@37 Set current fill character to be C.
(defalias 'artist-select-fill-char #[(c) "\303=\203\f\304\305\306!\207\307\305\310\"\207" [c artist-fill-char-set artist-fill-char 13 nil message "Fill canceled" t "Fill set to \"%c\""] 3 (#$ . 136084) "cType fill char (type RET to turn off): "])
#@37 Set current line character to be C.
(defalias 'artist-select-line-char #[(c) "\304=\203\305\306\307!\210\202\310\306\311\"\210\205\312 \207" [c artist-line-char-set artist-line-char artist-key-is-drawing 13 nil message "Normal lines" t "Line drawn with \"%c\"" artist-key-do-continously-common] 3 (#$ . 136380) "cType line char (type RET to turn off): "])
#@38 Set current erase character to be C.
(defalias 'artist-select-erase-char #[(c) "\303=\203\304\305\306!\210\202\305\307\"\210\n\205\310 \207" [c artist-erase-char artist-key-is-drawing 13 32 message "Normal erasing" "Erasing with \"%c\"" artist-key-do-continously-common] 3 (#$ . 136755) "cType char to use when erasing (type RET for normal): "])
#@55 Convert a list of characters, CHAR-LIST, to a string.
(defalias 'artist-charlist-to-string #[(char-list) "\260\207" [char-list] 1 (#$ . 137118)])
#@47 Convert a string, STR, to list of characters.
(defalias 'artist-string-to-charlist #[(str) "\301\302\"\207" [str append nil] 3 (#$ . 137272)])
#@71 Set current spray characters to be CHARS, starting with INITIAL-CHAR.
(defalias 'artist-select-spray-chars #[(chars initial-char) "\n\304\305\306!\307\n!#\207" [chars artist-spray-chars initial-char artist-spray-new-char message "Spray-chars set to \"%s\", initial: \"%s\"" artist-charlist-to-string char-to-string] 5 (#$ . 137422) (let* ((str (read-string "Select spray-can characters, lightest first: " (artist-charlist-to-string artist-spray-chars))) (char-list (artist-string-to-charlist str)) (initial (let* ((err-msg #1="") (ok nil) (first-char-as-str (char-to-string (car char-list))) (first-s) (first-c)) (while (not ok) (setq first-s (read-string (format (concat "%sSelect initial-character, " "one of \"%s\" (%s): ") err-msg str first-char-as-str))) (if (equal first-s #1#) (setq first-s first-char-as-str)) (setq first-c (car (artist-string-to-charlist first-s))) (setq ok (not (null (member first-c char-list)))) (if (not ok) (setq err-msg (format "Not in spray-chars: \"%s\". " (char-to-string first-c))))) first-c))) (list char-list initial))])
#@34 Select drawing operation OP-STR.
(defalias 'artist-select-operation #[(op-str) "\306!\211\205\307	!	\204\310\311\"\210\203#\f\n\232\204#\310\312!\210\203.
\203.\313 \210	\n\203D
\203D\f\314=\204D\315 \210*\316!\207" [op-str op-symbol draw-how artist-key-is-drawing artist-key-draw-how artist-rubber-banding artist-mt-get-symbol-from-keyword artist-go-get-draw-how-from-symbol error "Unknown drawing method: %s" "Cannot switch to a different kind of shape while drawing" artist-key-undraw-common 1 artist-key-draw-common artist-mode-line-show-curr-operation artist-curr-go] 4 (#$ . 138491) (list (completing-read "Select operation: " artist-key-compl-table))])
#@88 Toggle rubber-banding.
If optional argument STATE is positive, turn rubber-banding on.
(defalias 'artist-toggle-rubber-banding #[(&optional state) "\203\303\304!\210	\204\n?\202\305	!\306V\211\203\307\310!\207\307\311!\207" [artist-key-is-drawing state artist-rubber-banding error "Cannot toggle rubber-banding while drawing" prefix-numeric-value 0 message "Rubber-banding is now on" "Rubber-banding is now off"] 2 (#$ . 139179) nil])
#@92 Toggle trimming of line-endings.
If optional argument STATE is positive, turn trimming on.
(defalias 'artist-toggle-trim-line-endings #[(&optional state) "\204		?\202\302!\303V\211\203\304\305!\207\304\306!\207" [state artist-trim-line-endings prefix-numeric-value 0 message "Trimming is now on" "Trimming is now off"] 2 (#$ . 139630) nil])
#@84 Toggle borders of shapes.
If optional argument STATE is positive, turn borders on.
(defalias 'artist-toggle-borderless-shapes #[(&optional state) "\204		?\202\302!\303V\211\203\304\305!\207\304\306!\207" [state artist-borderless-shapes prefix-numeric-value 0 message "Borders are now off" "Borders are now on"] 2 (#$ . 139985) nil])
#@44 Toggle first arrow for shape, if possible.
(defalias 'artist-toggle-first-arrow #[nil "\212??\205W\211\211\306H)	\211\307H)	\211\310H)	\211\311H)\f\fH
\n?\312!b\210\203F
\203J\313
!\210\202J\313
!\210\211\306I.	)\207" [artist-arrow-point-1 arrow-point arrow-state arrow-marker direction orig-char 3 0 2 1 marker-position artist-replace-char artist-arrows arrow-char new-state] 4 (#$ . 140332) nil])
#@45 Toggle second arrow for shape, if possible.
(defalias 'artist-toggle-second-arrow #[nil "\212??\205W\211\211\306H)	\211\307H)	\211\310H)	\211\311H)\f\fH
\n?\312!b\210\203F
\203J\313
!\210\202J\313
!\210\211\306I.	)\207" [artist-arrow-point-2 arrow-point arrow-state arrow-marker direction orig-char 3 0 2 1 marker-position artist-replace-char artist-arrows arrow-char new-state] 4 (#$ . 140769) nil])
#@27 Select drawing pen lines.
(defalias 'artist-select-op-pen-line #[nil "\300\301!\207" [artist-select-operation "Pen Line"] 2 (#$ . 141208) nil])
#@23 Select drawing lines.
(defalias 'artist-select-op-line #[nil "\300\301!\207" [artist-select-operation "line"] 2 (#$ . 141358) nil])
#@32 Select drawing straight lines.
(defalias 'artist-select-op-straight-line #[nil "\300\301!\207" [artist-select-operation "straight line"] 2 (#$ . 141496) nil])
#@28 Select drawing rectangles.
(defalias 'artist-select-op-rectangle #[nil "\300\301!\207" [artist-select-operation "rectangle"] 2 (#$ . 141661) nil])
#@25 Select drawing squares.
(defalias 'artist-select-op-square #[nil "\300\301!\207" [artist-select-operation "square"] 2 (#$ . 141814) nil])
#@28 Select drawing poly-lines.
(defalias 'artist-select-op-poly-line #[nil "\300\301!\207" [artist-select-operation "poly-line"] 2 (#$ . 141958) nil])
#@37 Select drawing straight poly-lines.
(defalias 'artist-select-op-straight-poly-line #[nil "\300\301!\207" [artist-select-operation "straight poly-line"] 2 (#$ . 142111) nil])
#@26 Select drawing ellipses.
(defalias 'artist-select-op-ellipse #[nil "\300\301!\207" [artist-select-operation "ellipse"] 2 (#$ . 142291) nil])
#@25 Select drawing circles.
(defalias 'artist-select-op-circle #[nil "\300\301!\207" [artist-select-operation "circle"] 2 (#$ . 142438) nil])
#@35 Select rendering text (see thru).
(defalias 'artist-select-op-text-see-thru #[nil "\300\301!\207" [artist-select-operation "text see-thru"] 2 (#$ . 142582) nil])
#@36 Select rendering text (overwrite).
(defalias 'artist-select-op-text-overwrite #[nil "\300\301!\207" [artist-select-operation "text overwrite"] 2 (#$ . 142750) nil])
#@18 Select spraying.
(defalias 'artist-select-op-spray-can #[nil "\300\301!\207" [artist-select-operation "spray-can"] 2 (#$ . 142921) nil])
#@35 Select setting size for spraying.
(defalias 'artist-select-op-spray-set-size #[nil "\300\301!\207" [artist-select-operation "spray set size"] 2 (#$ . 143064) nil])
#@28 Select erasing characters.
(defalias 'artist-select-op-erase-char #[nil "\300\301!\207" [artist-select-operation "erase char"] 2 (#$ . 143234) nil])
#@28 Select erasing rectangles.
(defalias 'artist-select-op-erase-rectangle #[nil "\300\301!\207" [artist-select-operation "erase rectangle"] 2 (#$ . 143389) nil])
#@33 Select vaporizing single lines.
(defalias 'artist-select-op-vaporize-line #[nil "\300\301!\207" [artist-select-operation "vaporize line"] 2 (#$ . 143554) nil])
#@36 Select vaporizing connected lines.
(defalias 'artist-select-op-vaporize-lines #[nil "\300\301!\207" [artist-select-operation "vaporize lines"] 2 (#$ . 143720) nil])
#@28 Select cutting rectangles.
(defalias 'artist-select-op-cut-rectangle #[nil "\300\301!\207" [artist-select-operation "cut rectangle"] 2 (#$ . 143891) nil])
#@25 Select cutting squares.
(defalias 'artist-select-op-cut-square #[nil "\300\301!\207" [artist-select-operation "cut square"] 2 (#$ . 144052) nil])
#@28 Select copying rectangles.
(defalias 'artist-select-op-copy-rectangle #[nil "\300\301!\207" [artist-select-operation "copy rectangle"] 2 (#$ . 144204) nil])
#@25 Select copying squares.
(defalias 'artist-select-op-copy-square #[nil "\300\301!\207" [artist-select-operation "cut square"] 2 (#$ . 144367) nil])
#@17 Select pasting.
(defalias 'artist-select-op-paste #[nil "\300\301!\207" [artist-select-operation "paste"] 2 (#$ . 144520) nil])
#@23 Select flood-filling.
(defalias 'artist-select-op-flood-fill #[nil "\300\301!\207" [artist-select-operation "flood-fill"] 2 (#$ . 144654) nil])
#@52 Perform the update of the X Windows pointer shape.
(defalias 'artist-update-pointer-shape #[nil "\300\301!\207" [set-mouse-color nil] 2 (#$ . 144804)])
#@62 Set the shape of the X Windows pointer to NEW-POINTER-SHAPE.
(defalias 'artist-set-pointer-shape #[(new-pointer-shape) "\302 \207" [new-pointer-shape x-pointer-shape artist-update-pointer-shape] 1 (#$ . 144962)])
#@53 Check whether the shift-key is pressed in event EV.
(defalias 'artist-event-is-shifted #[(ev) "\301\302!>\207" [ev shift event-modifiers] 3 (#$ . 145183)])
(put 'artist-event-is-shifted 'byte-optimizer 'byte-compile-inline-expand)
#@29 Function that does nothing.
(defalias 'artist-do-nothing #[nil "\300\207" [nil] 1 (#$ . 145421) nil])
#@57 Compute the corresponding up key sequence for event EV.
(defalias 'artist-compute-up-event-key #[(ev) "\304!\211\305\306\307	!P!\310\311!>)\203 \312\313\"\202$\312\313\n\"+\207" [ev basic unshifted shifted event-basic-type make-symbol "S-" symbol-name shift event-modifiers make-vector 1] 5 (#$ . 145529)])
#@38 Perform drawing action for event EV.
(defalias 'artist-down-mouse-1 #[(ev) "\306	\307\310	!>)\"\311\n!\f!\"#\312=\205$%\313&\314	!'\315\316 '\"(\317\216#\312=\203?\320)!\210\321\316 '\322#\210\323 \210\324\325!\210\326=\203[\327	!\210\202\221\330=\203h\331	!\210\202\221\247\203z\332U\203z\333	!\210\202\221\247\203\214\334U\203\214\335	!\210\202\221\336\337\"\210*\203\234\340\f!\"\210
\"\211!.	\207" [artist-curr-go ev real draw-how artist-draw-region-min-y orig-draw-region-min-y artist-go-get-symbol-shift shift event-modifiers artist-go-get-draw-how-from-symbol x 10000 artist-compute-up-event-key lookup-key current-global-map ((byte-code "\305=\203\n\306	!\210\n\203\307\310 \n#\210\311\f!\207" [window-system orig-pointer-shape orig-button-up-binding key artist-key-is-drawing x artist-set-pointer-shape define-key current-global-map artist-mode-line-show-curr-operation] 4)) artist-set-pointer-shape define-key artist-do-nothing artist-draw-region-reset artist-mode-line-show-curr-operation t artist-do-continously artist-mouse-draw-continously artist-do-poly artist-mouse-draw-poly 1 artist-mouse-draw-1point 2 artist-mouse-draw-2points message "Drawing \"%s\"s is not yet implemented" artist-draw-region-trim-line-endings artist-draw-region-max-y orig-draw-region-max-y window-system x-pointer-shape orig-pointer-shape echoq-keystrokes key orig-button-up-binding artist-pointer-shape artist-trim-line-endings] 5 (#$ . 145852) "@e"])
#@49 Choose operation for event EV and operation OP.
(defalias 'artist-mouse-choose-operation #[(ev op) "\306=\203\307	!\310\311 \n\"\312\216\313\311 \n\314#\210+\315@!\316@!\211<\204\\\317@\320\"\317@\321\"	\322\323	!>)\211\203J\202L\324!\325!-\202e\f<?\205e\326\f!*\207" [op ev key orig-button-up-binding set-fn draw-fn no-popup-menus artist-compute-up-event-key lookup-key current-global-map ((byte-code "\304!\n\203\305\306 \n#\210\304\207" [artist-popup-menu-table op orig-button-up-binding key tmm-prompt define-key current-global-map] 4)) define-key artist-do-nothing artist-go-get-draw-fn-from-symbol artist-fc-get-fn-from-symbol artist-go-get-symbol-shift nil t shift event-modifiers artist-go-get-keyword-from-symbol artist-select-operation call-interactively unshifted shifted shift-state selected-op keyword] 5 (#$ . 147350) (progn (select-window (posn-window (event-start last-input-event))) (list last-input-event (if (display-popup-menus-p) (x-popup-menu last-nonmenu-event artist-popup-menu-table) 'no-popup-menus)))])
#@54 Erase character or rectangle, depending on event EV.
(defalias 'artist-down-mouse-3 #[(ev) "\303\304	!\210)\305\n!\207" [artist-curr-go ev artist-key-is-drawing erase-char artist-down-mouse-1 artist-mode-line-show-curr-operation] 2 (#$ . 148426) "@e"])
#@77 From the last SHIFT-STATE and EV, determine if the shift-state has changed.
(defalias 'artist-shift-has-changed #[(shift-state ev) "\300\207" [nil] 1 (#$ . 148686)])
(put 'artist-shift-has-changed 'byte-optimizer 'byte-compile-inline-expand)
#@77 Convert a window-relative coordinate COORD to a buffer-relative coordinate.
(defalias 'artist-coord-win-to-buf #[(coord) "@A\305 \212\306 b\210\307\310\311`\"i\312U\203\311\202\312\313#)\211\n\\	\\,B\207" [coord window-start-y window-start-x window-y window-x window-hscroll window-start + count-lines 1 0 -1] 8 (#$ . 148934)])
#@163 Generic function for shapes that require 1 point as input.
Operation is done continuously while the mouse button is hold down.
The event, EV, is the mouse event.
(defalias 'artist-mouse-draw-continously #[(ev) "\306\307\"\306\310\"\311\312!>)\211\203\n\202	\313
!$\314
!%\315
!&\316
!'\317
!(\320
!\211)\205B) *\321
!+\322
!,\323!\211-\211.@)/\324\325-!!\2110@10A2\307\21134\326-\211.@)!\210%\203\211%12\"\2105\204\225\32712\"\210\330\331!\2104\203\243\3324!\210&\203\260&12\"\210+\203\313+ \203\313,\203\316,12\"\210\202\316\333 \210'\203\333'12\"\21012676\334\335\336`\"i\337U\203\364\336\202\365\337\340#Zy\210\341\3426\334\335\336`\"i\337U\203
\336\202\337\340#Zy\"\210\3437\337]\310\"\210\334\335\336`\"i\337U\203+\336\202,\337\340#\21189^98:]\211:.\207" [artist-curr-go unshifted shifted ev shift-state op artist-go-get-symbol-shift nil t shift event-modifiers artist-go-get-draw-how-from-symbol artist-go-get-init-fn-from-symbol artist-go-get-prep-fill-fn-from-symbol artist-go-get-exit-fn-from-symbol artist-go-get-draw-fn-from-symbol artist-go-get-interval-fn-from-symbol artist-go-get-arrow-pred-from-symbol artist-go-get-arrow-set-fn-from-symbol event-start artist-coord-win-to-buf posn-col-row select-window artist-no-rb-set-point1 eval (track-mouse (byte-code "\211\242)\306=\204\307\310!\235\205\306\311\312\313!!!\211@\nA
\203(\314
!\210\313!\211@)=\203\277\210)\205F\f\"\f\315\316\317`\"i\320U\203_\317\202`\320\321#Zy\210\322\323\315\316\317`\"i\320U\203x\317\202y\320\321#Zy\"\210\324\320]\325\"\210\315\316\317`\"i\320U\203\226\317\202\227\320\321#\211 ^ !]\211!+\210\"\203\277\203\277\326\"\211\f%\327 \211\202\207" [ev object ev-start-pos x1 y1 timer mouse-movement down event-modifiers artist-coord-win-to-buf posn-col-row event-start cancel-timer + count-lines 1 0 -1 insert-char 10 move-to-column t run-at-time read-event initial-win position shift-state draw-fn shape y x curr-y artist-draw-region-min-y artist-draw-region-max-y interval] 8)) cancel-timer artist-clear-arrow-points + count-lines 1 0 -1 insert-char 10 move-to-column draw-how init-fn prep-fill-fn exit-fn draw-fn interval-fn interval arrow-pred arrow-set-fn ev-start position initial-win ev-start-pos x1 y1 shape timer artist-rubber-banding y x curr-y artist-draw-region-min-y artist-draw-region-max-y] 8 (#$ . 149280)])
#@99 Generic function for shapes requiring several points as input.
The event, EV, is the mouse event.
(defalias 'artist-mouse-draw-poly #[(ev) "\306\307!\210\310\311\"\310\312\"\313\314!>)\211\203\n\202 	\315
!(\316
!)\317
!*\320
!+\321
!,\322
!-\323
!.\324
!/\325
!0\326
!1\327!\2112\2113@)4\330\3312!!\2115@65A76879\312:\311\211;<\311=\3322\2113@)!\210)\203\234)67\"\210>\204\250\33367\"\210\334\335!\210\336<!<*\203\275*<!\210.\203\323. \203\323/\203\323/<!\210<\203\3610\203\3610 \203\3611\203\3641<!\210\202\364\337 \210+\203\377+<!\21089?@?\340\341\342`\"i\343U\203\342\202\343\344#Zy\210\345\346?\340\341\342`\"i\343U\2031\342\2022\343\344#Zy\"\210\347@\343]\312\"\210\340\341\342`\"i\343U\203O\342\202P\343\344#\211AB^BAC]\211C.\207" [artist-curr-go unshifted shifted ev shift-state op message "Mouse-1: set new point, mouse-2: set last point" artist-go-get-symbol-shift nil t shift event-modifiers artist-go-get-draw-how-from-symbol artist-go-get-init-fn-from-symbol artist-go-get-prep-fill-fn-from-symbol artist-go-get-exit-fn-from-symbol artist-go-get-draw-fn-from-symbol artist-go-get-undraw-fn-from-symbol artist-go-get-fill-pred-from-symbol artist-go-get-fill-fn-from-symbol artist-go-get-arrow-pred-from-symbol artist-go-get-arrow-set-fn-from-symbol event-start artist-coord-win-to-buf posn-col-row select-window artist-no-rb-set-point1 eval (track-mouse (byte-code "?\205W	\203X\306\307\n!\235\204\310\307\n!\235\203X\204/\311 \210\f\205-\f
/01$22\203F\3122!3\3133!\3143!/)\315
/\"4B4\316\2112\202M\317\307\n!\235\203p\320\n!\321\232\204M\320\n!\322\232\204M\306\307\n!\235\204\200\310\307\n!\235\203\225\320\n!\321\232\204\220\320\n!\322\232\203\225\323\202M	\204I\317\307\n!\235\203I\320\n!\324\232\203I5\3256\204\2667\202\2708!=\204\304\326\327!\210\202D\3309\316\"8\3309\323\"7\n\331\307\n!>)\2116\203\3457\202\3478:\325:!5\332:!\333:!;\334:!<\335:!=\336\337\340\n!!!\211>@0>A1\203.\f\205)\f
/01$2\202;\341
/\"\210\34201\"\210:9\343\323!\210)\323\202M\n\211?\242)\344=\203	\203@\340\n!\211A@)=\203\336\337\340\n!!!\211>@0>A1;\203\203;2!\210\203\231\f\205\224\f
/01$2\202\243\345 \210\34201\"\21001BCB\346\347\350`\"i\351U\203\274\350\202\275\351\352#Zy\210\353\354B\346\347\350`\"i\351U\203\325\350\202\326\351\352#Zy\"\210\355C\351]\323\"\210\346\347\350`\"i\351U\203\363\350\202\364\351\352#\211DE^EDF]\211F+\210\202M\n\211?\242)\344=\203(	\203(@\340\n!\211A@)=\203M\n\211?\242)\344=\2037	\203M	\203K\317\307\n!\235\203K\320\n!\324\232\204M\323\204\356 \202\207" [done is-down ev artist-rubber-banding draw-fn x1-last click event-modifiers drag artist-no-rb-unset-points artist-2point-get-endpoint2 artist-endpoint-get-x artist-endpoint-get-y artist-make-endpoint nil down event-basic-type mouse-2 mouse-3 t mouse-1 artist-go-get-draw-how-from-symbol message "Cannot switch operation" artist-go-get-symbol-shift shift artist-go-get-draw-fn-from-symbol artist-go-get-undraw-fn-from-symbol artist-go-get-fill-pred-from-symbol artist-go-get-fill-fn-from-symbol artist-coord-win-to-buf posn-col-row event-start artist-no-rb-set-point1 artist-no-rb-set-point2 artist-mode-line-show-curr-operation mouse-movement artist-no-rb-unset-point2 + count-lines 1 0 -1 insert-char 10 move-to-column read-event y1-last x2 y2 shape endpoint2 point-list draw-how shift-state shifted unshifted artist-curr-go op undraw-fn fill-pred fill-fn ev-start-pos object initial-win position y x curr-y artist-draw-region-min-y artist-draw-region-max-y] 8)) reverse artist-clear-arrow-points + count-lines 1 0 -1 insert-char 10 move-to-column draw-how init-fn prep-fill-fn exit-fn draw-fn undraw-fn fill-pred fill-fn arrow-pred arrow-set-fn ev-start position initial-win ev-start-pos x1-last y1-last x2 y2 is-down shape point-list done artist-rubber-banding y x curr-y artist-draw-region-min-y artist-draw-region-max-y] 8 (#$ . 151755) "@e"])
#@122 Generic function for shapes requiring only 1 point as input.
Operation is done once.  The event, EV, is the mouse event.
(defalias 'artist-mouse-draw-1point #[(ev) "\306\307\"\306\310\"\311\312!>)\211\203\n\202	\313
!\314
! \315
!!\316
!\"\317
!#\320
!$\321
!%\322!&\323\324&!!\211'@('A)\325&\211*@)!\210 \203m ()\"\210#\203z#()\"\210!\203\207!()\"\210$\203\242$ \203\242%\203\245%()\"\210\202\245\326 \210\"\203\262\"()\"\210()+,+\327\330\331`\"i\332U\203\313\331\202\314\332\333#Zy\210\334\335+\327\330\331`\"i\332U\203\344\331\202\345\332\333#Zy\"\210\336,\332]\310\"\210\327\330\331`\"i\332U\203\331\202\332\333#\211-.^.-/]\211/.\207" [artist-curr-go unshifted shifted ev shift-state op artist-go-get-symbol-shift nil t shift event-modifiers artist-go-get-draw-how-from-symbol artist-go-get-init-fn-from-symbol artist-go-get-prep-fill-fn-from-symbol artist-go-get-exit-fn-from-symbol artist-go-get-draw-fn-from-symbol artist-go-get-arrow-pred-from-symbol artist-go-get-arrow-set-fn-from-symbol event-start artist-coord-win-to-buf posn-col-row select-window artist-clear-arrow-points + count-lines 1 0 -1 insert-char 10 move-to-column draw-how init-fn prep-fill-fn exit-fn draw-fn arrow-pred arrow-set-fn ev-start ev-start-pos x1 y1 position y x curr-y artist-draw-region-min-y artist-draw-region-max-y] 8 (#$ . 155847) "@e"])
#@93 Generic function for shapes requiring 2 points as input.
The event, EV, is the mouse event.
(defalias 'artist-mouse-draw-2points #[(ev) "\306\307\"\306\310\"\311\312!>)\211\203\n\202	\313
!&\314
!'\315
!(\316
!)\317
!*\320
!+\321
!,\322
!-\323
!.\324
!/\325!\2110\2111@)2\326\3270!!\2113@43A5\307\21167\3078\3300\2111@)!\210'\203\215'45\"\2109\204\231\33145\"\210\332\333!\2109\204\267\334 \210*\205\265*4567$8(\203\312(84567%\210,\203\350, \203\350-\203\350-84567%\210.\203	. \203	/\203\f/84567%\210\202\f\335 \210)\203)84567%\21067:;:\336\337\340`\"i\341U\2038\340\2029\341\342#Zy\210\343\344:\336\337\340`\"i\341U\203Q\340\202R\341\342#Zy\"\210\345;\341]\310\"\210\336\337\340`\"i\341U\203o\340\202p\341\342#\211<=^=<>]\211>.\207" [artist-curr-go unshifted shifted ev shift-state op artist-go-get-symbol-shift nil t shift event-modifiers artist-go-get-draw-how-from-symbol artist-go-get-init-fn-from-symbol artist-go-get-prep-fill-fn-from-symbol artist-go-get-exit-fn-from-symbol artist-go-get-draw-fn-from-symbol artist-go-get-undraw-fn-from-symbol artist-go-get-fill-pred-from-symbol artist-go-get-fill-fn-from-symbol artist-go-get-arrow-pred-from-symbol artist-go-get-arrow-set-fn-from-symbol event-start artist-coord-win-to-buf posn-col-row select-window artist-no-rb-set-point1 eval (track-mouse (byte-code "\211\242)\306=\204\307\310!\235\205\320\311\312\313!!!\211@\nA
\313!\211@)=\203\311\203@\203C!\210\202C\314 \210\210)\203a\205\\\f$\202f\315\f\"\210\f ! \316\317\320`\"i\321U\203}\320\202~\321\322#Zy\210\323\324 \316\317\320`\"i\321U\203\226\320\202\227\321\322#Zy\"\210\325!\321]\326\"\210\316\317\320`\"i\321U\203\264\320\202\265\321\322#\211\"#^#\"$]\211$+\210\327 \211\202\207" [ev object ev-start-pos x2 y2 initial-win mouse-movement down event-modifiers artist-coord-win-to-buf posn-col-row event-start artist-no-rb-unset-point2 artist-no-rb-set-point2 + count-lines 1 0 -1 insert-char 10 move-to-column t read-event position artist-rubber-banding undraw-fn shape shift-state draw-fn x1 y1 y x curr-y artist-draw-region-min-y artist-draw-region-max-y] 8)) artist-no-rb-unset-points artist-clear-arrow-points + count-lines 1 0 -1 insert-char 10 move-to-column draw-how init-fn prep-fill-fn exit-fn draw-fn undraw-fn fill-pred fill-fn arrow-pred arrow-set-fn ev-start position initial-win ev-start-pos x1 y1 x2 y2 shape artist-rubber-banding y x curr-y artist-draw-region-min-y artist-draw-region-max-y] 8 (#$ . 157265) "@e"])
#@41 Submit via mail a bug report on Artist.
(defalias 'artist-submit-bug-report #[nil "\304\305!\210\306\307!\205\310\311\312	\"\210\313\314P	\315\211\316&*\207" [artist-maintainer-address vars to artist-version require reporter y-or-n-p "Do you want to submit a bug report on Artist? " (window-system window-system-version artist-rubber-banding artist-interface-with-rect artist-aspect-ratio artist-curr-go artist-key-poly-point-list artist-key-shape artist-key-draw-how artist-arrow-point-1 artist-arrow-point-2) mapc #[(x) "\302!\205J?\205\303	\"\211\207" [x vars boundp delq] 3] reporter-submit-bug-report "artist.el " nil "Hello Tomas,\n\nI have a nice bug report on Artist for you! Here it is:"] 7 (#$ . 159903) nil])
(provide 'artist)

MMCT - 2023