;ELC   
;;; Compiled by buildd@akateko.buildd on Fri Oct 25 13:52:54 2013
;;; from file /build/buildd/emacs23-23.4+1/debian/build-x/lisp/ses.el
;;; in Emacs version 23.4.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.

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


(byte-code "\300\301!\210\302\303\304\305\306\307\310\311\312\313&	\207" [require unsafep custom-declare-group ses nil "Simple Emacs Spreadsheet." :group applications :prefix "ses-" :version "21.1"] 10)
#@67 Initial size of a new spreadsheet, as a cons (NUMROWS . NUMCOLS).
(custom-declare-variable 'ses-initial-size ''(1 . 1) '(#$ . 736) :group 'ses :type '(cons (integer :tag "numrows") (integer :tag "numcols")))
#@48 Initial width of columns in a new spreadsheet.
(custom-declare-variable 'ses-initial-column-width '7 '(#$ . 950) :group 'ses :type '(integer :match (lambda (widget value) (> value 0))))
#@48 Initial default printer for a new spreadsheet.
(custom-declare-variable 'ses-initial-default-printer '"%.7g" '(#$ . 1142) :group 'ses :type '(choice string (list :tag "Parenthesized string" string) function))
#@149 Things to do after entering a value into a cell.
An abnormal hook that usually runs a cursor-movement function.
Each function is called with ARG=1.
(custom-declare-variable 'ses-after-entry-functions ''(forward-char) '(#$ . 1358) :group 'ses :type 'hook :options '(forward-char backward-char next-line previous-line))
#@50 Hook functions to be run upon entering SES mode.
(custom-declare-variable 'ses-mode-hook 'nil '(#$ . 1682) :group 'ses :type 'hook)
#@43 List of formulas that have been typed in.
(defvar ses-read-cell-history nil (#$ . 1820))
#@52 List of printer functions that have been typed in.
(defvar ses-read-printer-history nil (#$ . 1915))
#@72 Context menu when mouse-3 is used on the header-line in an SES buffer.
(defvar ses-header-line-menu nil (#$ . 2022))
(easy-menu-do-define 'ses-header-line-menu nil "Context menu when mouse-3 is used on the header-line in an SES buffer." '("SES header row" ["Set current row" ses-set-header-row t] ["Unset row" ses-unset-header-row (> ses--header-row 0)]))
#@44 Local keymap for Simple Emacs Spreadsheet.
(defconst ses-mode-map (byte-code "\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\327\331\332BBBBBBBBBBBBBBBBBBBBBBBB\333 \211\203P \334	\n@\n\211A@)#\210\n\211AA)\211\2049 	*\207" [ses-header-line-menu newmap keys x "\214" ses-reconstruct-all "\f" ses-recalculate-all "" ses-renarrow-buffer "" ses-recalculate-cell "\223" ses-sort-column "\210" ses-set-header-row "" ses-truncate-cell "\n" ses-jump "" ses-read-default-printer "\214" ses-reprint-all [33554444] [header-line down-mouse-3] ([header-line mouse-2] ses-sort-column-click) make-sparse-keymap define-key] 26) (#$ . 2384))
#@24 Menu bar menu for SES.
(defvar ses-menu nil (#$ . 3073))
(easy-menu-do-define 'ses-menu ses-mode-map "Menu bar menu for SES." '("SES" ["Insert row" ses-insert-row (ses-in-print-area)] ["Delete row" ses-delete-row (ses-in-print-area)] ["Insert column" ses-insert-column (ses-in-print-area)] ["Delete column" ses-delete-column (ses-in-print-area)] ["Set column printer" ses-read-column-printer t] ["Set column width" ses-set-column-width t] ["Set default printer" ses-read-default-printer t] ["Jump to cell" ses-jump t] ["Set cell printer" ses-read-cell-printer t] ["Recalculate cell" ses-recalculate-cell t] ["Truncate cell display" ses-truncate-cell t] ["Export values" ses-export-tsv t] ["Export formulas" ses-export-tsf t]))
#@47 Local keymap for SES minibuffer cell-editing.
(defconst ses-mode-edit-map (byte-code "\303\304 \305\n\"\210	\203 \306	\211A@	\211A@#\210\202\n *\207" [newmap keys minibuffer-local-map ("" ses-insert-range "" ses-insert-ses-range [S-mouse-3] ses-insert-range-click [C-S-mouse-3] ses-insert-ses-range-click "\211" lisp-complete-symbol) make-sparse-keymap set-keymap-parent define-key] 5) (#$ . 3806))
(byte-code "\306\307\310\311\312\313 \314\315\"\210	G\316\fW\203, \317	\f\211TO\320#\210\fT\211\202 *\n\203J \321\n@\n\211A@)\322 $\210\n\211AA)\211\2041 \317\323\324#\210\203k \317@\211A@)#\210\211AA)\211\204T ,\"\210\307B\325\307K!\210\306\326\327\330! \317 \331\332\333B#\210\317 \334\335\336B#\210 )\"\207" [newmap numeric repl keys x --dotimes-limit-- defalias ses-mode-print-map ([backtab] backward-char [tab] ses-forward-or-insert "	" ses-forward-or-insert "\357" ses-insert-column "" ses-insert-row "" ses-edit-cell "\353" ses-delete-column "\371" ses-yank-pop "" ses-delete-row "\n" ses-append-row-jump-first-column "\350" ses-mark-row "\310" ses-mark-column "" ses-clear-cell-forward "" ses-clear-cell-backward "(" ses-read-cell "\"" ses-read-cell "'" ses-read-symbol "=" ses-edit-cell "c" ses-recalculate-cell "j" ses-jump "p" ses-read-cell-printer "t" ses-truncate-cell "w" ses-set-column-width "x" ses-export-keymap "\360" ses-read-column-printer) (clipboard-kill-region ses-kill-override end-of-line ses-end-of-line kill-line ses-delete-row kill-region ses-kill-override open-line ses-insert-row) "0123456789.-" make-keymap suppress-keymap t 0 define-key ses-read-cell substitute-key-definition current-global-map [(menu-bar) edit cut] ses-kill-override (lambda (#1=#:defconst-tmp-var) (defconst ses-mode-print-map #1#)) ses-export-keymap make-sparse-keymap "SES export" "T" " tab-formulas" ses-export-tsf "t" " tab-values" ses-export-tsv current-load-list map] 8)
#@71 Marker string denoting the boundary between print area and data area.
(defconst ses-print-data-boundary "\n\f\n" (#$ . 5740))
#@77 Initial contents for the three-element list at the bottom of the data area.
(defconst ses-initial-global-parameters "\n( ;Global parameters (these are read first)\n 2 ;SES file-format\n 1 ;numrows\n 1 ;numcols\n)\n\n" (#$ . 5872))
#@71 Initial contents for the file-trailer area at the bottom of the file.
(defconst ses-initial-file-trailer ";; Local Variables:\n;; mode: ses\n;; End:\n" (#$ . 6109))
#@47 The initial contents of an empty spreadsheet.
(defconst ses-initial-file-contents (concat "       \n" ses-print-data-boundary "(ses-cell A1 nil nil nil nil)\n" "\n" "(ses-column-widths [7])\n" "(ses-column-printers [nil])\n" "(ses-default-printer \"%.7g\")\n" "(ses-header-row 0)\n" ses-initial-global-parameters ses-initial-file-trailer) (#$ . 6280))
#@73 Display properties to create a raised box for cells in the header line.
(defconst ses-box-prop '(:box (:line-width 2 :style released-button)) (#$ . 6638))
#@269 List of print functions to be included in initial history of printer
functions.  None of these standard-printer functions is suitable for use as a
column printer or a global-default printer because they invoke the column or
default printer and then modify its output.
(defconst ses-standard-printer-functions '(ses-center ses-center-span ses-dashfill ses-dashfill-span ses-tildefill-span) (#$ . 6800))
#@37 Buffer-local variables used by SES.
(defconst ses-localvars '(ses--blank-line ses--cells ses--col-printers ses--col-widths ses--curcell ses--curcell-overlay ses--default-printer ses--deferred-narrow ses--deferred-recalc ses--deferred-write ses--file-format ses--header-hscroll ses--header-row ses--header-string ses--linewidth ses--numcols ses--numrows ses--symbolic-formulas ses--data-marker ses--params-marker mode-line-process next-line-add-newlines transient-mark-mode) (#$ . 7208))
(put 'ses--symbolic-formulas 'safe-local-variable 'consp)
#@101 Offsets from 'Global parameters' line to various parameter lines in the
data area of a spreadsheet.
(defconst ses-paramlines-plist '(ses--col-widths -5 ses--col-printers -4 ses--default-printer -3 ses--header-row -2 ses--file-format 1 ses--numrows 2 ses--numcols 3) (#$ . 7760))
#@318 Set by `ses-relocate-formula' and `ses-relocate-range', read by
`ses-relocate-all'.  Set to 'delete if a cell-reference was deleted from a
formula--so the formula needs recalculation.  Set to 'range if the size of a
`ses-range' was changed--so both the formula's value and list of dependents
need to be recalculated.
(defvar ses-relocate-return nil (#$ . 8046))
#@200 Set to t if last cell printer invoked by `ses-call-printer' requested
left-justification of the result.  Set to error-signal if ses-call-printer
encountered an error during printing.  Otherwise nil.
(defvar ses-call-printer-return nil (#$ . 8415))
#@107 Time when current operation started.  Used by `ses-time-check' to decide
when to emit a progress message.
(defvar ses-start-time nil (#$ . 8670))
#@73 Return the cell structure that stores information about cell (ROW,COL).
(defalias 'ses-get-cell '(macro . #[(row col) "\302\211\303E	E\207" [row col aref ses--cells] 4 (#$ . 8822)]))
(defalias 'ses-make-cell #[(&optional symbol formula printer references) "\304	\n$\207" [symbol formula printer references vector] 5])
(put 'ses-make-cell 'byte-optimizer 'byte-compile-inline-expand)
#@112 From a CELL or a pair (ROW,COL), get the symbol that names the local-variable holding its value.  (0,0) => A1.
(defalias 'ses-cell-symbol '(macro . #[(row &optional col) "\302\203\f \303	E\202 	\304BB\207" [col row aref ses-get-cell (0)] 4 (#$ . 9215)]))
#@76 From a CELL or a pair (ROW,COL), get the function that computes its value.
(defalias 'ses-cell-formula '(macro . #[(row &optional col) "\302\203\f \303	E\202 	\304BB\207" [col row aref ses-get-cell (1)] 4 (#$ . 9479)]))
#@74 From a CELL or a pair (ROW,COL), get the function that prints its value.
(defalias 'ses-cell-printer '(macro . #[(row &optional col) "\302\203\f \303	E\202 	\304BB\207" [col row aref ses-get-cell (2)] 4 (#$ . 9708)]))
#@104 From a CELL or a pair (ROW,COL), get the list of symbols for cells whose
functions refer to its value.
(defalias 'ses-cell-references '(macro . #[(row &optional col) "\302\203\f \303	E\202 	\304BB\207" [col row aref ses-get-cell (3)] 4 (#$ . 9936)]))
#@71 From a CELL or a pair (ROW,COL), get the current value for that cell.
(defalias 'ses-cell-value '(macro . #[(row &optional col) "\302\303	ED\207" [row col symbol-value ses-cell-symbol] 4 (#$ . 10196)]))
#@34 Return the width for column COL.
(defalias 'ses-col-width '(macro . #[(col) "\301\302E\207" [col aref ses--col-widths] 3 (#$ . 10406)]))
#@44 Return the default printer for column COL.
(defalias 'ses-col-printer '(macro . #[(col) "\301\302E\207" [col aref ses--col-printers] 3 (#$ . 10550)]))
#@125 From a cell-symbol SYM, gets the cons (row . col).  A1 => (0 . 0).  Result
is nil if SYM is not a symbol that names a cell.
(defalias 'ses-sym-rowcol '(macro . #[(sym) "\301\302D\303\304BBE\207" [sym and symbolp get ('ses-cell)] 5 (#$ . 10709)]))
#@269 Load a cell SYM from the spreadsheet file.  Does not recompute VALUE from
FORMULA, does not reprint using PRINTER, does not check REFERENCES.  This is a
macro to prevent propagate-on-load viruses.  Safety-checking for FORMULA and
PRINTER are deferred until first use.
(defalias 'ses-cell '(macro . #[(sym value formula printer references) "9\205 \306N\307\n!\210\310!\210\n:\203  \f\311=\204  \312\nD\2033 ;\2043 \f\311=\2043 \313D	@H	A\n\314\n$,I\210)L\210\207" [sym rowcol formula printer safe-functions ses--cells ses-cell ses-formula-record ses-printer-record t ses-safe-formula ses-safe-printer vector references symbol value] 7 (#$ . 10965)]))
#@116 Load the vector of column widths from the spreadsheet file.  This is a
macro to prevent propagate-on-load viruses.
(defalias 'ses-column-widths '(macro . #[(widths) "\305!\203 G	U\204 \306\307!\210\310\311\312\313\314\"#\315\316\"\317P\320\207" [widths ses--numcols ses--col-widths ses--linewidth ses--blank-line vectorp error "Bad column-width vector" apply + -1 mapcar 1+ make-string 32 "\n" t] 6 (#$ . 11652)]))
#@145 Load the vector of column printers from the spreadsheet file and checks
them for safety.  This is a macro to prevent propagate-on-load viruses.
(defalias 'ses-column-printers '(macro . #[(printers) "\305!\203 G	U\204 \306\307!\210	\310\nW\203+ \n\311\nH!I\210\nT\211\202 *\312\313\"\210\314\207" [printers ses--numcols x --dotimes-limit-- ses--col-printers vectorp error "Bad column-printers vector" 0 ses-safe-printer mapc ses-printer-record t] 6 (#$ . 12084)]))
#@140 Load the global default printer from the spreadsheet file and checks it
for safety.  This is a macro to prevent propagate-on-load viruses.
(defalias 'ses-default-printer '(macro . #[(def) "\302!\303!\210\304\207" [def ses--default-printer ses-safe-printer ses-printer-record t] 2 (#$ . 12569)]))
#@128 Load the header row from the spreadsheet file and checks it
for safety.  This is a macro to prevent propagate-on-load viruses.
(defalias 'ses-header-row '(macro . #[(row) "\303!\203 \304	!\204 	W\204 \305\306!\210\307\207" [row ses--numrows ses--header-row wholenump zerop error "Bad header-row" t] 2 (#$ . 12875)]))(if macro-declaration-function (funcall macro-declaration-function (quote ses-dorange) (quote (declare (indent defun) (debug (form body))))))
#@198 Execute BODY repeatedly, with the variables `row' and `col' set to each
cell in the range specified by CURCELL.  The range is available in the
variables `minrow', `maxrow', `mincol', and `maxcol'.
(defalias 'ses-dorange '(macro . #[(curcell &rest body) "\306\307!\306\310!\306\311!\306\312!\306\313!\314\fD\315\316\317\fD\320\fD\fFDD\n\315\316\317\fD\321\fD\fFDDE\322\323\320DD\324\320\nDD\325\321DD\326\321\nDD\327BBBB\330\331	\332B\333\334\335	\336BBE\331\337B\333\340\335\341BBE\"BBBFFE-\207" [c r max min cur curcell make-symbol "cur" "min" "max" "r" "c" let* ses-sym-rowcol if consp car cdr let minrow maxrow mincol maxcol (row col) (if (or (> minrow maxrow) (> mincol maxcol)) (error "Empty range")) dotimes ((- maxrow minrow -1)) setq row + (minrow) ((- maxcol mincol -1)) col (mincol) body] 15 (#$ . 13347)]))
#@90 For code-coverage testing, indicate that FORM is expected to always have
the same value.
(defalias '1value '(macro . #[(form) "\207" [form] 1 (#$ . 14183)]))
#@76 For code-coverage testing, indicate that FORM will always signal an error.
(defalias 'noreturn '(macro . #[(form) "\207" [form] 1 (#$ . 14348)]))
#@93 Create a new vector which is one larger than ARRAY and has NEW inserted
before element IDX.
(defalias 'ses-vector-insert #[(array idx new) "G\306	T\n\"	\307\fW\203- \fW\203 \f\202! \fT\fHI\210\fT\211\202 **\207" [array len new result x --dotimes-limit-- make-vector 0 idx] 5 (#$ . 14501)])
#@224 Create a new vector which is a copy of ARRAY with COUNT objects removed
starting at element IDX.  ARRAY is either a vector or a symbol whose value
is a vector--if a symbol, the new vector is assigned as the symbol's value.
(defalias 'ses-vector-delete #[(array idx count) "\306!\203\n \202\f J\211G\nZ\307\310\"\311\n\nW\203> \f	W\2031 \2024 \n\\HI\210T\211\202 *9\203H \fL\210\f+\207" [array a count len result x arrayp make-vector nil 0 --dotimes-limit-- idx] 6 (#$ . 14812)])
#@37 Like `kill-line', but no kill ring.
(defalias 'ses-delete-line #[(count) "`	y\210`|)\207" [pos count] 2 (#$ . 15320)])
#@62 Signals an error if PRINTER is not a valid SES cell printer.
(defalias 'ses-printer-validate #[(printer) "\203 ;\204 \301!\204 \242;\203 A\203 \302\303!\210\207" [printer functionp error "Invalid printer function"] 2 (#$ . 15447)])
#@123 Add PRINTER to `ses-read-printer-history' if not already there, after first
checking that it is a valid printer function.
(defalias 'ses-printer-record #[(printer) "\301!\210\205 \302\303\304!\"\207" [printer ses-printer-validate add-to-list ses-read-printer-history prin1-to-string] 4 (#$ . 15697)])
#@99 If FORMULA is of the form 'symbol, adds it to the list of symbolic formulas
for this spreadsheet.
(defalias 'ses-formula-record #[(formula) "\242\302=\205 \211A@)9\205 \303\304\305\211A@)!C\"\207" [formula x quote add-to-list ses--symbolic-formulas symbol-name] 5 (#$ . 16008)])
#@99 Return the alphabetic name of column number COL.
0-25 become A-Z; 26-701 become AA-ZZ, and so on.
(defalias 'ses-column-letter #[(col) "\302\303\304\246\\!\304W\203 	\202 \305\304\245S!	P)\207" [col units char-to-string 65 26 ses-column-letter] 4 (#$ . 16300)])
#@64 Produce a symbol that names the cell (ROW,COL).  (0,0) => 'A1.
(defalias 'ses-create-cell-symbol #[(row col) "\302\303!\304	T!P!\207" [col row intern ses-column-letter number-to-string] 4 (#$ . 16574)])
#@61 Create buffer-local variables for cells.  This is undoable.
(defalias 'ses-create-cell-variable-range #[(minrow maxrow mincol maxcol) "\306\307	\n\257\fB\310\211\211	ZT\311W\205i \nZT\311W\203_ \\\n\\\312\"\313\314B#\210\315!\210T\211\202/ *T\211\202 -\207" [minrow maxrow mincol maxcol buffer-undo-list xcol apply ses-destroy-cell-variable-range nil 0 ses-create-cell-symbol put ses-cell make-local-variable xrow sym row --dotimes-limit-- col] 7 (#$ . 16784)])
#@62 Destroy buffer-local variables for cells.  This is undoable.
(defalias 'ses-destroy-cell-variable-range #[(minrow maxrow mincol maxcol) "\306	\nZT\307\fW\203P ZT\307\fW\203H \310\n\\\\\"\311!\203; \312\313\211JFB\314!\210T\211\202 *T\211\202\n +\312\315\n	\257B\211\207" [sym maxrow minrow row --dotimes-limit-- maxcol nil 0 ses-create-cell-symbol boundp apply ses-set-with-undo kill-local-variable ses-create-cell-variable-range mincol col buffer-undo-list] 7 (#$ . 17308)])
#@90 Flags the header string for update.  Upon undo, the header string will be
updated again.
(defalias 'ses-reset-header-string #[nil "\302B\303\211\207" [buffer-undo-list ses--header-hscroll (apply ses-reset-header-string) -1] 2 (#$ . 17830)])
#@138 If `ses-start-time' is more than a second ago, call `message' with FORMAT
and (eval ARG) and reset `ses-start-time' to the current time.
(defalias 'ses-time-check #[(format arg) "\303 Z\304V\203 \305	\306\n!\"\210\303 \307\207" [ses-start-time format arg float-time 1.0 message eval nil] 4 (#$ . 18081)])
#@172 Install VAL as the contents for field FIELD (named by a quoted symbol) of
cell (ROW,COL).  This is undoable.  The cell's data will be updated through
`post-command-hook'.
(defalias 'ses-set-cell #[(row col field val) "	H\nH\306\307\"\310\204 \311\312\310\"\210\313=\203( \314\315H\"\202/ \316#\211\203; \317\320	\nB\"\210+\310\207" [ses--cells row col field change elt plist-get (value t symbol 0 formula 1 printer 2 references 3) nil signal args-out-of-range t ses-set-with-undo 0 ses-aset-with-undo add-to-list ses--deferred-write cell val] 5 (#$ . 18396)])
#@349 Store a new formula for (ROW . COL) and enqueues the cell for
recalculation via `post-command-hook'.  Updates the reference lists for the
cells that this cell refers to.  Does not update cell value or reprint the
cell.  To avoid inconsistencies, this function is not interruptible, which
means Emacs will crash if FORMULA contains a circular list.
(defalias 'ses-cell-set-formula #[(row col formula) "	H\nH\211\306H\307H\310\f!\310!\311\312\211\211\313\314\"\210\312\211\203u @\211>\204l 9\205L \315N\211@A\316\317\320HH\321H\"$\210A\211\2046 *\312\211\203\303 @\2119\205\217 \315N\211@AHH\321H>\204\272 \316\317B$\210A\211\204\201 *\322!\210\316	\n\305$.	\207" [ses--cells row col cell old formula 1 0 ses-formula-references t nil add-to-list ses--deferred-recalc ses-cell ses-set-cell references delq 3 ses-formula-record xcol xrow x inhibit-quit newref oldref sym ref --dolist-tail--] 9 (#$ . 18982)])
#@463 Calculate and print the value for cell (ROW,COL) using the cell's formula
function and print functions, if any.  Result is nil for normal operation, or
the error signal if the formula or print function failed.  The old value is
left unchanged if it was *skip* and the new value is nil.
  Any cells that depend on this cell are queued for update after the end of
processing for the current keystroke, unless the new value is the same as
the old and FORCE is nil.
(defalias 'ses-calculate-cell #[(row col force) "	H\nH\306\211\211\307HJ\310H\306\242\311=\2034 \311\211A@)!\312	\n\313$\210\314\315\316\217\210\204H \317=\203H \317\204U =\204\205 \320\321	\nB\"\210\312	\n\322$\210\323H\306\211\203\204 @\320\324\"\210A\211\204p *+\325	\n\"\f\206\220 +\207" [ses--cells row col printer-error formula-error cell nil 0 1 ses-safe-formula ses-set-cell formula sig (byte-code "\302!\302\207" [formula newval eval] 2) ((error (byte-code "\303\211\207" [sig formula-error newval *error*] 2))) *skip* add-to-list ses--deferred-write value 3 ses--deferred-recalc ses-print-cell newval oldval x force ref --dolist-tail--] 6 (#$ . 19999)])
#@48 Delete formula and printer for cell (ROW,COL).
(defalias 'ses-clear-cell #[(row col) "\302	\303\304$\210\305	\304#\207" [row col ses-set-cell printer nil ses-cell-set-formula] 5 (#$ . 21188)])
#@188 Recalculate cells in LIST, checking for dependency loops.  Prints
progress messages every second.  Dependent cells are not recalculated
if the cell's value is unchanged and FORCE is nil.
(defalias 'ses-update-cells #[(list &optional force) "\211`\306\211\211\211\307\306 !\310\216!\203' \311  \312\313!\"\210\203\271 \232\204\271 \203> \312\314G\"\210\306\f\203\202 \f@9\205U \f@\315N\"\n@H\nAH\316H\317\320\215\204{ #\203r \321\322!\204{ \323\n@\nA$#\210\fA\211\204K \306\211%\203\241 %@\324\325\"\210%A\211%\204\215 *\326\327!\330\"\211\232\203' \324\325\331\"\210\202' \203\371 \306&\211%\203\362 %@\211&9\205\327 &\315N\332\n@\nA\333\334$\210\335\n@\nA\"\210)%A\211%\204\311 *\321\336\"\210\312\307!\210+b.\207" [list formula rowcol prevlist curlist pos nil " " ((byte-code "\203 	\203 \302\303	\"\210\202 \302\304!\210\304\207" [#1=#:with-temp-message #2=#:current-message message #3="%s" nil] 3)) current-message message #3# "Recalculating... (%d cells left)" ses-cell 1 ref (byte-code "\305!\306\211\205, \n@\211>\204 	\f>\203$ \307\304@\"\210\310\301\311\"\210\nA\211\204\n \306*\207" [formula ref --dolist-tail-- curlist ses--deferred-recalc ses-formula-references nil add-to-list throw t] 4) error "Quit" ses-calculate-cell add-to-list nextlist sort copy-sequence string< t ses-set-cell value *error* ses-print-cell "Circular references: %s" ses--deferred-recalc #2# #1# ses--cells quit-flag force --dolist-tail-- x] 8 (#$ . 21390)])
#@53 Returns t if point is in print area of spreadsheet.
(defalias 'ses-in-print-area #[nil "`X\207" [ses--data-marker] 2 (#$ . 22922)])
#@46 Move point to print area for cell (ROW,COL).
(defalias 'ses-goto-print #[(row col) "\306\307eb\210\ny\210\307\fW\203$ \310\f\fH\311#\fT\211\202 *\312!V\2053 l\2053 \313u*\207" [n inhibit-point-motion-hooks row col c --dotimes-limit-- t 0 + 1 move-to-column nil ses--col-widths] 5 (#$ . 23061)])
#@118 Sets `ses--curcell' to the current cell symbol, or a cons (BEG,END) for a
region, or nil if cursor is not at a cell.
(defalias 'ses-set-curcell #[nil "\203 	\204 \306 \307 U\203 \310`\311\"\202A \310\306 \311\"\310\307 S\311\"\307 U\2034 \310\307 \312Z\311\"\f\205? \205? \fB*\313\207" [mark-active deactivate-mark ses--curcell ecell bcell ses--data-marker region-beginning region-end get-text-property intangible 2 nil] 4 (#$ . 23376)])
#@226 Signal an error if ses--curcell is inappropriate.  The end marker is
appropriate if some argument is 'end.  A range is appropriate if some
argument is 'range.  A single cell is appropriate unless some argument is
'needrange.
(defalias 'ses-check-curcell #[(&rest args) "\302=\203	 \303 \210\204 \304	>\2065 \305\306!\207:\203, \307	>\2065 \310	>\2065 \305\311!\207\310	>\2055 \305\312!\207" [ses--curcell args t ses-set-curcell end error "Not at cell" range needrange "Can't use a range" "Need a range"] 2 (#$ . 23833)])
#@484 Format and print the value of cell (ROW,COL) to the print area.
Use the cell's printer function.  If the cell's new print form is too wide,
it will spill over into the following cell, but will not run off the end of the
row or overwrite the next non-nil field.  Result is nil for normal operation,
or the error signal if the printer function failed and the cell was formatted
with "%s".  If the cell's value is *skip*, nothing is printed because the
preceding cell has spilled over.
(defalias 'ses-print-cell #[(row col) "\300\301\215\207" [ses-print-cell (byte-code "	H\nH\211\306HJ\307H\nT/\310\21101\310\21123\f\311=\203- \312\313\310\"\210\202s \f\314=\203? \3154\nH\316\"0\202s \242\317=\203W \320	\n\305\317\2113A@)!\211$\210\321\206e 5\nH\206e 6\f\"07:\203s 714\nH\3220!8989W\203\252 \31598Z\323\"87\324=\203\240 08P\202\245 80P0\202k89V\203k9:8:V\203\375 /;W\203\375 	H/H\306HJ\2113\203\334 3\311=\203\375 3\204\351 \320	/\304\311$\210\325:4/H\326#:/T/\202\266 8:X\2030\315:8Z\323\"P0\202j\327\3300E1\f;\203.\3310:\306\323$0\202j\f\247\203c\332\3330\"\203c\306\3348:\306\225\306\224Z#\2119Y\203c0\306\211\2249ZO0\306\225\310OP0\202j\315:\316\"0)*\335\336\3370#0\340	\n\"\210`2\324\211<=\324>`\341i\3220!\\!\210`T|\210)0/;W\203\242\342\202\243\343P3\344\3063G\3103$\210\3453!\210\3462`\347\306H$\210\350	!\203\341\350\n!\203\341\346e`\351\352$\210\346e`\353\354$\210\346eeT\355\324$\210*	?SU\203\355\356 \210/;W\203	H/H\306HJ\311=\203\320	/\304\310$\210\313	/\"\2102b\2101.\207" [ses--cells row col cell value printer 0 2 nil *skip* throw ses-print-cell *error* make-string 35 ses-safe-printer ses-set-cell ses-call-printer string-width 32 t + 1 error "Too wide" truncate-string-to-width string-match "\\.[0-9]+" - replace-regexp-in-string "[	\n]" "?" ses-goto-print move-to-column " " "\n" set-text-properties insert-and-inherit put-text-property intangible zerop keymap ses-mode-print-map read-only ses front-sticky ses-reset-header-string maxcol text sig startpos x ses--col-widths ses--col-printers ses--default-printer ses-call-printer-return len width maxwidth ses--numcols inhibit-quit inhibit-read-only inhibit-point-motion-hooks ses--header-row] 7)] 2 (#$ . 24365)])
#@363 Invokes PRINTER (a string or parenthesized string or function-symbol or
lambda of one argument) on VALUE.  Result is the printed cell as a string.
The variable `ses-call-printer-return' is set to t if the printer used
parenthesis to request left-justification, or the error-signal if the
printer signaled one (and "%s" is used as the default printer), else nil.
(defalias 'ses-call-printer #[(printer &optional value) "\302	\204 \303\304\305\306\217\207" [ses-call-printer-return value nil "" signal (byte-code ";\203\n \303	\"\207\242;\203 \304\303@	\"\207	!\211;\203# 	\207	\242;\204- \305\306!\210\304	@\207" [printer value ses-call-printer-return format t error "Printer should return \"string\" or (\"string\")"] 4) ((error (byte-code "\303\n\304\"\207" [signal ses-call-printer-return value prin1-to-string t] 3)))] 3 (#$ . 26680)])
#@154 Insert CHANGE spaces in front of column COL, or at end of line if
COL=NUMCOLS.  Deletes characters if CHANGE < 0.  Caller should bind
inhibit-quit to t.
(defalias 'ses-adjust-print-width #[(col change) "\306\307V\205 \310\311\"	\nU\312\313\\\"\210\312\314\310\311\"\315P\"\210\307W\205\\ \316	\"\210\203D \306\317u\210)\f\203N \fc\210\202S \320[!\210T\211\202- -\207" [change col ses--numcols at-end blank inhibit-read-only t 0 make-string 32 ses-set-with-undo ses--linewidth ses--blank-line "\n" ses-goto-print -1 delete-char ses--numrows row --dotimes-limit-- inhibit-point-motion-hooks] 6 (#$ . 27540)])
#@176 Same as ses-print-cell, except if the cell's value is *skip*, the preceding
nonskipped cell is reprinted.  This function is used when the width of
cell (ROW,COL) has changed.
(defalias 'ses-print-cell-new-width #[(row col) "	H\nH\304HJ\305=\204 \306	\n\"\207\307	\n\"\210\310u\210\311`\312\"9\205( \311`\312\"\313N\306@A\")\207" [ses--cells row col rowcol 0 *skip* ses-print-cell ses-goto-print -1 get-text-property intangible ses-cell] 3 (#$ . 28185)])
(defalias 'ses-narrowed-p #[nil "deZ\300 U?\207" [buffer-size] 2])
#@61 Turn off narrowing, to be reenabled at end of command loop.
(defalias 'ses-widen #[nil "\301 \203 \302~\207" [ses--deferred-narrow ses-narrowed-p t] 1 (#$ . 28717)])
#@234 Move point to data area for (DEF,COL).  If DEF is a row
number, COL is the column number for a data cell -- otherwise DEF
is one of the symbols ses--col-widths, ses--col-printers,
ses--default-printer, ses--numrows, or ses--numcols.
(defalias 'ses-goto-data #[(def &optional col) "\306 \210\307	\203 \nb\210\310\311\fT_	#y\202, \312\"\211\204& \313\314\315\"\210b\210y)\207" [inhibit-point-motion-hooks col ses--data-marker def ses--numcols ses-paramlines-plist ses-widen t + 1 plist-get signal args-out-of-range nil ses--params-marker] 5 (#$ . 28892)])
#@232 Set parameter DEF to VALUE (with undo) and write the value to the data area.
See `ses-goto-data' for meaning of DEF.  Newlines in the data are escaped.
If ELEM is specified, it is the array subscript within DEF to be set to VALUE.
(defalias 'ses-set-parameter #[(def value &optional elem) "\212\306!\210\307\310\311\"\312\f\203  J\fHJ\fI\210\202' JL\210\312`\313 |\210\314\nJ\"c\210)\315\316	\f\257B\211,\207" [def oldval fmt inhibit-read-only elem value ses-goto-data t plist-get (ses--col-widths "(ses-column-widths %S)" ses--col-printers "(ses-column-printers %S)" ses--default-printer "(ses-default-printer %S)" ses--header-row "(ses-header-row %S)" ses--file-format " %S ;SES file-format" ses--numrows " %S ;numrows" ses--numcols " %S ;numcols") nil line-end-position format apply ses-set-parameter buffer-undo-list] 5 (#$ . 29462)])
#@107 Write cells in `ses--deferred-write' from local variables to data area.
Newlines in the data are escaped.
(defalias 'ses-write-cells #[nil "\306\211\307\211\307\211\307\211 !\307\211\"#\310 $\311\307%&\312\216&\2033 \313 %\314\315&\"\210\212'\203\307 \316\317\320\"\210'\211A'@\211@\nA(H\fH\211\321H \322H!\323H\"!\242\324=\203t !\211)A@)!\"\242\325=\203\206 \"\211)A@)\"\326\327 !\311\330 J!\311\330!!\311\330\"!\311\331H:\204\247 \332\202\261 \333\334\327\331H\311#\335Q\335\260#\336\f\"\210`\337 |\210#c\210\2024 )\314\311!.\207" [inhibit-read-only print-escape-newlines rowcol row col cell t nil float-time " " ((byte-code "\203 	\203 \302\303	\"\210\202 \302\304!\210\304\207" [#1=#:with-temp-message #2=#:current-message message #3="%s" nil] 3)) current-message message #3# ses-time-check "Writing... (%d cells left)" (length ses--deferred-write) 0 1 2 ses-safe-formula ses-safe-printer "(ses-cell " symbol-name prin1-to-string 3 "nil" "(" mapconcat ")" ses-goto-data line-end-position sym formula printer text ses-start-time #2# #1# ses--deferred-write ses--cells x] 15 (#$ . 30330)])
#@216 Produce a list of symbols for cells that this formula's value
refers to.  For recursive calls, RESULT-SO-FAR is the list being constructed,
or t to get a wrong-type-argument error when the first reference is found.
(defalias 'ses-formula-references #[(formula &optional result-so-far) ":\204 9\203t \305N\203t \306\304\"\210\202t \307\211\203s \n@\2119\2036 	\305N\2036 \306\304	\"\210\202l 	\242\310=\203[ \311	!A\307\211\203W \n@\306\304\"\210\nA\211\204H *\202l 	:\203l 	@\312=\204l \313	\f\"\nA\211\204  *\f\207" [formula cur --dolist-tail-- x result-so-far ses-cell add-to-list nil ses-range macroexpand quote ses-formula-references] 4 (#$ . 31482)])
#@159 Relocate one symbol SYM, whichs corresponds to ROWCOL (a cons of ROW and
COL).  Cells starting at (STARTROW,STARTCOL) are being shifted
by (ROWINCR,COLINCR).
(defalias 'ses-relocate-symbol #[(sym rowcol startrow startcol rowincr colincr) "@A\211W\204 	\fW\203 \202> \n\\	\\\nY\205> 	\fY\205> \n	W\205> 	\nW\205> \306\n	\"*\207" [rowcol col row startrow startcol sym ses-create-cell-symbol rowincr colincr ses--numrows ses--numcols] 4 (#$ . 32161)])
(put 'ses-relocate-symbol 'byte-optimizer 'byte-compile-inline-expand)
#@492 Produce a copy of FORMULA where all symbols that refer to cells in row
STARTROW or above and col STARTCOL or above are altered by adding ROWINCR
and COLINCR.  STARTROW and STARTCOL are 0-based. Example:
	(ses-relocate-formula '(+ A1 B2 D3) 1 2 1 -1)
	=> (+ A1 B2 C4)
If ROWINCR or COLINCR is negative, references to cells being deleted are
removed.  Example:
	(ses-relocate-formula '(+ A1 B2 D3) 0 1 0 -1)
	=> (+ A1 C3)
Sets `ses-relocate-return' to 'delete if cell-references were removed.
(defalias 'ses-relocate-formula #[(formula startrow startcol rowincr colincr) "\306\211\n:\203 \n@\307=\203\200 \n9\205 \n\310N\211\203| \n	\f	@	A\211W\204A \fW\203F \202w \\\\Y\205w \fY\205w W\205w W\205w \311\".\202`\n\202`\n\306\211\203]@\2119\205\230 \310N\211\203	\f	@	A\211W\204\302 \fW\203\307 \202\370 \\\\Y\205\370 \fY\205\370 W\205\370 W\205\370 \311\".\211\203B\202T\204T\312\202T\242\313=\2032\314\f%\211\203TB\202T:\203@@\307=\203HB\202T\315\f%BA\211\204\212 *\237*\207" [result rowcol formula startrow startcol rowincr nil quote ses-cell ses-create-cell-symbol delete ses-range ses-relocate-range ses-relocate-formula colincr sym col row ses--numrows ses--numcols cur --dolist-tail-- ses-relocate-return] 7 (#$ . 32705)])
#@410 Relocate one RANGE, of the form '(ses-range min max).  Cells starting
at (STARTROW,STARTCOL) are being shifted by (ROWINCR,COLINCR).  Result is the
new range, or nil if the entire range is deleted.  If new rows are being added
just beyond the end of a row range, or new columns just beyond a column range,
the new rows/columns will be added to the range.  Sets `ses-relocate-return'
if the range was altered.
(defalias 'ses-relocate-range #[(range startrow startcol rowincr colincr) "\211A@)\2119\205 \n\306N\n\f@A\211\fW\2049 W\203> \202p \\\\\fY\205p Y\205p W\205p W\205p \307\".\3108\2119\205\202 \306N\f@A\211\fW\204\257 W\203\264 \202\346 \\\\\fY\205\346 Y\205\346 W\205\346 W\205\346 \307\".\311\204\374 \204\374 \311\202\304\312!\203d\313\204\307\fA\"\300\204;\314V\203-\307SA\"\202\304\307\fSA\"\300\202\304\314V\203\304@\fSU\203\304AAU\203\304\307\315\f\316#A\"\202\304\317\204v\307@\"\300\204\236\314V\203\217\307@S\"\202\304\307@S\"\300\202\304\314V\203\304ASU\203\304@@U\203\304\307@\315\316#\"\205\372!!Z9\205\336\306N!9\205\353\306N!ZU\204\364\300\320E.\207" [range x minorig minrowcol startrow startcol ses-cell ses-create-cell-symbol 2 nil zerop car 0 + -1 cdr ses-range rowincr colincr rowcol sym col row ses--numrows ses--numcols min maxorig maxrowcol max field ses-relocate-return] 7 (#$ . 34118)])
#@170 Alter all cell values, symbols, formulas, and reference-lists to relocate
the rectangle (MINROW,MINCOL)..(NUMROWS,NUMCOLS) by adding ROWINCR and COLINCR
to each symbol.
(defalias 'ses-relocate-all #[(minrow mincol rowincr colincr) "\306\211\306\307\310\311\307###W\203\274 $\307%&%&W\203\236 \306'(H%H\312\n\313H)*+,%\314%\315	$\210'\316=\203V %BB'\203d \317\320\321%\"\"\210\312\n\322H)*+,%\314%\323	$\210)Y\203\225 %*Y\203\225 \314%\324\321%\"$\210%T\211%\202! *\fT\211--@Y\203\270 \325-\"\210*\202 \326\f!\210-\306\211\211\211\211./012+\307X\203\207,\307X\203\207)Z\307\310\327\307)Z#344W\203~)\\1$*Z\307%&%&W\203_%*\\01+Z/0,Z./W\203C.$W\203C(/H.H\307HJ2\202L\321/.\"J2\31410\3302$\210%T\211%\202	*3T\211--@Y\203z\325-\"\210*\202\360 \3263!\210+\202M\331+!\203I\331,!\203IS$S\306\2110156)Z\307\310\327\307)Z#788W\203?6Z1$*Z\307%&%&W\203 5%Z01+Z/0,Z./)W\204\372.*W\203 \3062\202(/H.H\307HJ2\31410\3302$\210%T\211%\202\317*7T\211--@Y\203;\325-\"\210*\202\266\3267!\210.\202M\332\333!\210-\205\222\334\335!\210\306\211%\336 9\203\216\337\340\341\"\210\211:@@)\211:@A)%A\342%(H%H\313H#\210\202_*\334\306!)\207" [reform newval mycell ses--numrows #1=#:--dotimes-temp2-- row nil 0 make-progress-reporter "Relocating formulas..." ses-relocate-formula 1 ses-set-cell formula range add-to-list ses--deferred-recalc ses-create-cell-symbol 3 references symbol progress-reporter-do-update progress-reporter-done "Relocating variables..." value wholenump error "ROWINCR and COLINCR must have the same sign" message "Fixing ses-ranges..." float-time ses-time-check "Fixing ses-ranges... (%d left)" (length reform) ses-cell-set-formula #2=#:--dotimes-temp-- ses--numcols col --dotimes-limit-- ses-relocate-return ses--cells minrow mincol rowincr colincr reporter xcol xrow mycol myrow oldval #3=#:--dotimes-temp2-- #4=#:--dotimes-temp-- distx disty #5=#:--dotimes-temp2-- #6=#:--dotimes-temp-- ses-start-time x] 8 (#$ . 35718)])
#@65 For undo, remember point before we start changing hidden stuff.
(defalias 'ses-begin-change #[nil "\301\302\303!\210`S`|)\207" [inhibit-read-only t insert-and-inherit "X"] 2 (#$ . 37874)])
#@60 Like set, but undoable.  Result is t if value has changed.
(defalias 'ses-set-with-undo #[(sym newval) "\303!\205 J	\232\205 	;??\205/ \303!\203# \304\305\211JF\202' \304\306E\nB	L\210\307\207" [sym newval buffer-undo-list boundp apply ses-set-with-undo ses-unset-with-undo t] 4 (#$ . 38070)])
#@43 Set SYM to be unbound.  This is undoable.
(defalias 'ses-unset-with-undo #[(sym) "\302!\205 \303\304\211JF	B\305!\207" [sym buffer-undo-list boundp apply ses-set-with-undo makunbound] 4 (#$ . 38379)])
#@62 Like aset, but undoable.  Result is t if element has changed
(defalias 'ses-aset-with-undo #[(array idx newval) "	H\n\232?\205 \304\305		H\257B	\nI\210\306\207" [array idx newval buffer-undo-list apply ses-aset-with-undo t] 6 (#$ . 38591)])
#@114 Parse the current buffer and sets up buffer-local variables.  Does not
execute cell formulas or print functions.
(defalias 'ses-load #[nil "~\210db\210\306\307\310\311#\210\312\313!\210\314 \310\315\316\217\317	!\320U\203I 	@\247\203I 	\211A@)\247\203I 	\211A@)\321Y\203I \322	8\247\203I \322	8\321V\204M \323\324!\210	@	\211A@)\322	8\313U\203u \3104\325\326!\210\327c\210\330\303\322\"\210\331\332!\210)\322U\204 \323\333!\210\334\321\fS\321S$\210\335\f\310\"5\f\3216767W\203\257 56\335\310\"I\2106T\2116\202\226 +eb\210\fy\210\3368!\204\301 \323\337!\210\313u\210\314 98GSu\210\340\341:\"\210\310;\f\3216767W\203J\321<7<7W\2036\342p!\211\243\2429\205\n\243\242\343N=\336\344!\203$\n\242\343=\203$6=@=\203$<=A=\204(\323\345!\210\346\n!\210*<T\211<\202\355 *\336\347!\204A\323\350!\2106T\2116\202\337 *\342p!`f\342p!`f\342p!`f\342p!`f>?@ABCD\211E\242\351=\203\252D\352U\203\252C\242\353=\203\252B\352U\203\252A\242\354=\203\252@\352U\203\252?\242\355=\203\252>\352U\204\256\323\356!\210\346E!\210\346A!\210\346C!\210\346?!\210.\313u\210\336\357\360\361F#!\204\326\323\362!\210\320y\210`G\325\304!\210`GU\206\352\323\363!)\207" [ses--params-marker params x ses--file-format ses--numrows ses--numcols search-backward ";; Local Variables:\n" nil t backward-list 1 point-marker (byte-code "\300p!\207" [read] 2) ((error)) safe-length 3 0 2 error "Invalid SES file" ses-goto-data ses--header-row "(ses-header-row 0)\n" ses-set-parameter message "Upgrading from SES-1 file format" "This file needs a newer version of the SES library code" ses-create-cell-variable-range make-vector looking-at "Missing marker between print and data areas" mapc ses-printer-record read ses-cell "\n" "Cell-def error" eval "\n\n" "Missing blank line between rows" ses-column-widths 10 ses-column-printers ses-default-printer ses-header-row "Invalid SES global parameters" replace-regexp-in-string "1" "[0-9]+" "Problem with column-defs or global-params" "Extraneous newlines someplace?" buffer-undo-list ses--cells row --dotimes-limit-- ses-print-data-boundary ses--data-marker ses-standard-printer-functions ses--symbolic-formulas col rowcol n4 head-row n3 def-printer n2 printers n1 widths ses-initial-global-parameters start] 9 (#$ . 38847)])
#@193 Set up for display of only the printed cell values.

Narrows the buffer to show only the print area.  Gives it `read-only' and
`intangible' properties.  Sets up highlighting for current cell.
(defalias 'ses-setup #[nil "e\306\211\307 \310\211\311\312\211\"\210\313`d\310#\210\314\315\316ed\"\"\210\317e`S\320\321$\210\317e`S\322\323$\210\317eeT\324\306$\210%\312\325\326\312%#&'('(W\203\361 )\312*+*+W\203\320 ,'H*H\312H*)SW\203\230 ,'H*TH\312HJ\327=\203\230 \330-*H\331#*T\211*\202m \212	b\210\332\330i	Z-*H#!\210l\203\272 \330-*H\331#\202\276 \310u\210`)\317	\333$\210*T\211*\202X *&'T\211'././@Y\203\355 \334/.\"\210*\202G \335&!\210+\n\204\336\310!\210\337 \210\340 \210.\341eTeT\"0\3420\343\344#\207" [sym pos was-modified inhibit-point-motion-hooks inhibit-read-only end t buffer-modified-p nil ses-goto-data 0 set-text-properties mapc delete-overlay overlays-in put-text-property read-only ses keymap ses-mode-print-map front-sticky make-progress-reporter "Finding cells..." *skip* + 1 move-to-column intangible progress-reporter-do-update progress-reporter-done restore-buffer-modified-p buffer-disable-undo buffer-enable-undo make-overlay overlay-put face underline ses--numrows #1=#:--dotimes-temp2-- row #2=#:--dotimes-temp-- ses--numcols col --dotimes-limit-- ses--cells ses--col-widths value reporter ses--curcell-overlay] 7 (#$ . 41164) nil])
#@114 Cleanup when changing a buffer from SES mode to something else.
Delete overlays, remove special text properties.
(defalias 'ses-cleanup #[nil "~\210\303\304\305 \306ed\304#\210\307\310\311ed\"\"\210?\205 \312\304!+\207" [was-modified buffer-file-name inhibit-read-only t nil buffer-modified-p set-text-properties mapc delete-overlay overlays-in restore-buffer-modified-p] 5 (#$ . 42589)])
#@331 Major mode for Simple Emacs Spreadsheet.
See "ses-example.ses" (in `data-directory') for more info.

Key definitions:
\{ses-mode-map}
These key definitions are active only in the print area (the visible part):
\{ses-mode-print-map}
These are active only in the minibuffer, when entering or editing a formula:
\{ses-mode-edit-map}
(defalias 'ses-mode #[nil "\306\300!\205	 \307=?\205\314 \310 \210\311\312	\"\210\307\313\314\315\314*\315+\314,\316\317\320\314\315$\210\316\321\320\314\315$\210\314\211-.\314/\3220\3231\324\325 !\326 23\2123\203W 4c\210\327 \210\330 \210)3\203\264 56\232\204p \3315!\21078\332HU\204\200 \333\3327\"\210\334 \2109@:V\203\223 \3359@S!\2109A;V\203\243 \3369AS!\210\337 \210\3402!\210\341 \210\342 \210eb\210*\343<!\210\307\316\344\345\314\315$\210\346\347\314\345#\210\350\351!\207" [ses--deferred-narrow ses-localvars major-mode mode-name next-line-add-newlines truncate-lines boundp ses-mode kill-all-local-variables mapc make-local-variable "SES" nil t add-hook change-major-mode-hook ses-cleanup before-revert-hook -1 (:eval (progn (when (/= (window-hscroll) ses--header-hscroll) (setq ses--header-hscroll (window-hscroll)) (ses-create-header-string)) ses--header-string)) zerop buffer-size buffer-modified-p ses-load ses-setup ses-read-default-printer 0 ses-set-column-width ses-set-curcell ses-insert-row ses-insert-column ses-write-cells restore-buffer-modified-p buffer-disable-undo buffer-enable-undo use-local-map post-command-hook ses-command-hook run-with-idle-timer 0.01 run-mode-hooks ses-mode-hook show-trailing-whitespace transient-mark-mode indent-tabs-mode ses--curcell ses--deferred-recalc ses--deferred-write ses--header-hscroll header-line-format was-modified was-empty ses-initial-file-contents ses-initial-default-printer ses--default-printer ses-initial-column-width ses--col-widths ses-initial-size ses--numrows ses--numcols ses-mode-map] 6 (#$ . 42990) nil])
(put 'ses-mode 'mode-class 'special)
#@245 Invoked from `post-command-hook'.  If point has moved to a different cell,
moves the underlining overlay.  Performs any recalculations or cell-data
writes that have been deferred.  If buffer-narrowing has been deferred,
narrows the buffer now.
(defalias 'ses-command-hook #[nil "\300\301\302\217\210\303\207" [err (byte-code "\306=\203\225 	\203 	\307\310\n!\210)\203 \311 \210\312\fB\203) e}\210\307\313 \210=\204f \204C \307\202c :\204T \314\315!D\202c \316\315@!\317\315A!F\320 \210)<\203w \321\322\211#\210\202\207 \323`\324\"\321`S#\210)\325 \204\225 \326\327\307\330#\210\331\307\207" [major-mode ses--deferred-recalc old ses--deferred-write buffer-undo-list ses--deferred-narrow ses-mode nil ses-update-cells ses-write-cells (apply ses-widen) ses-set-curcell " cell " symbol-name " range " "-" force-mode-line-update move-overlay 2 next-single-property-change intangible pos-visible-in-window-p run-with-idle-timer 0.01 ses-command-hook t ses--data-marker ses--curcell oldcell mode-line-process ses--curcell-overlay next] 5) ((error (byte-code "\204 \302 \210\303\304\305	!\"\207" [executing-kbd-macro err ding message "%s" error-message-string] 4))) nil] 3 (#$ . 44981)])
#@125 Set up `ses--header-string' as the buffer's header line.
Based on the current set of columns and `window-hscroll' position.
(defalias 'ses-create-header-string #[nil "\306 [\307\211\211\310\311\312\313#\nB\f\314W\203\235 H\315	\316#\211\316U\2033 \311\nB\316V\203\226 \314V\203m \212\317S\"\210\320``	\\\"\321\322\"\203\\ \314\211\224OGY\203i \314TO)\202q \323!\310\324 #\nB\310\325\312\326\327SEC\324 %\nB\310\311\312\326\327EC#\nBT\211\202 *\314V\203\261 \310\330\331\"\312\332#\nB\333\334\n\237\"\211!,\207" [x width result totwidth ses--numcols col window-hscroll nil propertize " " display ((space :align-to 0)) 0 + 1 ses-goto-print buffer-substring-no-properties string-match "[ 	]+\\'" ses-column-letter face "." space :align-to format "  [row %d]" ((height (- 1))) apply concat --dotimes-limit-- ses--col-widths ses--header-row ses-box-prop ses--header-string] 7 (#$ . 46217)])
#@25 Move point to cell SYM.
(defalias 'ses-jump #[(sym) "9\205 \302N\211\204 \303\304!\210J\305=\203 \303\306!\210\307	@	A\")\207" [sym rowcol ses-cell error "Invalid cell name" *skip* "Cell is covered by preceding cell" ses-goto-print] 4 (#$ . 47161) "SJump to cell: "])
#@48 Like `ses-jump', but no error if invalid cell.
(defalias 'ses-jump-safe #[(cell) "\300\301\302\217\207" [nil (ses-jump cell) ((error))] 3 (#$ . 47442)])
#@101 Recreate the display area.  Calls all printer functions.  Narrows to
print area if NONARROW is nil.
(defalias 'ses-reprint-all #[(&optional nonarrow) "~\210\204 \306\307`\310\"\306\311 \210eb\210\312\f!\210\fG[u\210e`|\210\313W\203> \314!\210T\211\202* *\313\315\316\313#W\203\257 H\313H\313HJ\317=\203k \320\313\321\322$\210\313  W\203\212 \323 \"\210 T\211 \202t *\324\325!\210T\211!!@Y\203\253 \326!\"\210*\202L \327!\210+\330!*\207" [nonarrow ses--deferred-narrow inhibit-read-only startcell ses-print-data-boundary ses--numrows t get-text-property intangible ses-begin-change search-forward 0 insert-and-inherit make-progress-reporter "Reprinting..." *skip* ses-set-cell value nil ses-print-cell beginning-of-line 2 progress-reporter-do-update progress-reporter-done ses-jump-safe row --dotimes-limit-- ses--blank-line #1=#:--dotimes-temp2-- #2=#:--dotimes-temp-- ses--cells ses--numcols col reporter] 7 (#$ . 47602) "*P"])
#@298 Recalculate and reprint the current cell or range.

For an individual cell, shows the error if the formula or printer
signals one, or otherwise shows the cell's complete value.  For a range, the
cells are recalculated in "natural" order, so cells that other cells refer
to are recalculated first.
(defalias 'ses-recalculate-cell #[nil "\306\307!\210\310 \210\311\312 \n:\204% \n9\205 \n\313N\314@A\315#\202\337 \n\211:\2031 @\2022 9\205C :\203@ @\202A \313N:\203N A\202O 9\205` :\203] A\202^ \313N\f@@\fAA\311\211 !\"#$\211%$V\204\206 #\"V\203\212 \316\317!\210\320$%\321#\322&'&'W\203\335 &%\\!\320\"#\321#\322('('W\203\323 (#\\ \323\324\325\"\210\311\326\327\217\210(T\211(\202\263 *&T\211&\202\230 .)*\311)\330\331\332\217\210)\203\371 \333\334\335!\"\202\n:\203\333\336!\202\337\nJ!)\207" [sig ses-start-time ses--curcell #1=#:cur #2=#:min #3=#:max ses-check-curcell range ses-begin-change nil float-time ses-cell ses-calculate-cell t error "Empty range" - -1 0 ses-time-check "Recalculating... %s" (ses-cell-symbol row col) (byte-code "\304	H\nH\305H\306\"\210\307	\n\306#\304\207" [ses--cells row col sig ses-formula-references 1 t ses-calculate-cell] 4) ((wrong-type-argument (byte-code "\303\304	H\nH\305H\"\207" [ses--cells row col add-to-list ses--deferred-recalc 0] 4))) hold (ses-update-cells x t) ((error (byte-code "\302\207" [hold sig nil] 1))) message "%s" error-message-string " " princ col row maxcol mincol maxrow minrow #4=#:r --dotimes-limit-- #5=#:c ses--deferred-recalc x] 7 (#$ . 48607) "*"])
#@36 Recalculate and reprint all cells.
(defalias 'ses-recalculate-all #[nil "\305`\306\"\307	SH\nSH\310HB\311 \210\312\f!*\207" [ses--cells ses--numrows ses--numcols ses--curcell startcell get-text-property intangible A1 0 ses-recalculate-cell ses-jump-safe] 4 (#$ . 50201) "*"])
#@77 Reprint current cell, but without spillover into any following blank
cells.
(defalias 'ses-truncate-cell #[nil "\306 \2109\205 \307N\211@	A\211\fSW\205F \nHTH\310HJ\311=\205F \312\313\nHTH\310H\314BC\315BB!\210\316\nT\317\320$\210\321\nT\"+\207" [ses--curcell rowcol row col ses--numcols ses--cells ses-check-curcell ses-cell 0 *skip* eval let (t) ((ses-print-cell row col)) ses-set-cell value nil ses-print-cell] 6 (#$ . 50486) "*"])
#@66 Reconstruct buffer based on cell data stored in Emacs variables.
(defalias 'ses-reconstruct-all #[nil "\306 \210\307\211\211\310\311\312\310#$$W\203Y !\310%&%&W\203; \313%\314\307$\210%T\211%\202$ *\fT\211'('(@Y\203U \315('\"\210*\202 \316\f!\210+\310\311\317\310#)**W\203\363 !\310%&%&W\203\324 \320+H%H\321H!\307,\211-\203\312 -@\211,9\205\242 ,\322N\211@\nA\313	\314+H%H\310H+	HH\323HB$\210-A\211-\204\224 *%T\211%\202z *)T\211'('(@Y\203\357 \315('\"\210*\202j \316)!\210.\324 \210\325.db\210\326\327\307\325#\203e`|\210\202ed|\210/c\210eb\210\310&&W\20340c\210T\211\202#*1c\2101GS[u\210\330 21GSu\210\331!T_\332\"c\210\333c\2103c\2103GS[u\210\330 43GSu\210)\334\335\"\210\334\336\"\210\334\337\"\210\334\340 \"\210\334\303\"\210\334\341!\"\210\342 \210\343 \210eb\207" [ycol yrow x ses--numrows #1=#:--dotimes-temp2-- row ses-begin-change nil 0 make-progress-reporter "Deleting references..." ses-set-cell references progress-reporter-do-update progress-reporter-done "Computing references..." ses-formula-references 1 ses-cell 3 ses-widen t search-backward ";; Local Variables:\n" point-marker make-string 10 "\n\n\n\n" ses-set-parameter ses--col-widths ses--col-printers ses--default-printer ses--header-row ses--numcols ses-setup ses-recalculate-all #2=#:--dotimes-temp-- col --dotimes-limit-- value reporter #3=#:--dotimes-temp2-- #4=#:--dotimes-temp-- ses--cells ref --dolist-tail-- inhibit-read-only ses-initial-file-trailer ses--blank-line ses-print-data-boundary ses--data-marker ses-initial-global-parameters ses--params-marker] 8 (#$ . 50939) "*"])
#@131 Display current cell contents in minibuffer, for editing.  Returns nil if
cell formula was unsafe and user declined confirmation.
(defalias 'ses-edit-cell #[(row col newval) "\303\304\"\205 \305 \210\306	\n#\210\307\207" [newval row col ses-warn-unsafe unsafep ses-begin-change ses-cell-set-formula t] 4 (#$ . 52616) (progn (barf-if-buffer-read-only) (ses-check-curcell) (let* ((rowcol (ses-sym-rowcol ses--curcell)) (row (car rowcol)) (col (cdr rowcol)) (formula (ses-cell-formula row col)) initial) (if (eq (car-safe formula) 'ses-safe-formula) (setq formula (cadr formula))) (if (eq (car-safe formula) 'quote) (setq initial (format "'%S" (cadr formula))) (setq initial (prin1-to-string formula))) (if (stringp formula) (setq initial (cons initial (length initial)))) (list row col (read-from-minibuffer (format "Cell %s: " ses--curcell) initial ses-mode-edit-map t 'ses-read-cell-history))))])
#@53 Self-insert for initial character of cell function.
(defalias 'ses-read-cell #[(row col newval) "\306	\n#\205# \307 \210\310\211\205\" @\211\311!\210A\211\204 \310*\207" [row col newval ses-after-entry-functions x --dolist-tail-- ses-edit-cell ses-command-hook nil 1] 5 (#$ . 53522) (let* ((initial (this-command-keys)) (rowcol (progn (ses-check-curcell) (ses-sym-rowcol ses--curcell))) (curval (ses-cell-formula (car rowcol) (cdr rowcol)))) (barf-if-buffer-read-only) (list (car rowcol) (cdr rowcol) (read-from-minibuffer (format "Cell %s: " ses--curcell) (cons (if (equal initial "\"") "\"\"" (if (equal initial "(") "()" initial)) 2) ses-mode-edit-map t 'ses-read-cell-history (prin1-to-string (if (eq (car-safe curval) 'ses-safe-formula) (cadr curval) curval)))))])
#@151 Self-insert for a symbol as a cell formula.  The set of all symbols that
have been used as formulas in this spreadsheet is available for completions.
(defalias 'ses-read-symbol #[(row col symb) "\306	\n#\205# \307 \210\310\211\205\" @\211\311!\210A\211\204 \310*\207" [row col symb ses-after-entry-functions x --dolist-tail-- ses-edit-cell ses-command-hook nil 1] 5 (#$ . 54308) (let ((rowcol (progn (ses-check-curcell) (ses-sym-rowcol ses--curcell))) newval) (barf-if-buffer-read-only) (setq newval (completing-read (format "Cell %s ': " ses--curcell) ses--symbolic-formulas)) (list (car rowcol) (cdr rowcol) (if (string= newval "") nil (list 'quote (intern newval)))))])
#@109 Delete formula and printer for current cell and then move to next cell.
With prefix, deletes several cells.
(defalias 'ses-clear-cell-forward #[(count) "\305W\203 \306[!\207\307 \210\310 \210\305	\nW\205B \311 \2109\205& \312N\211\2040 \313\314\315\"\210\316\f@\fA\"\210)\317u\210	T\211\202 *\207" [count x --dotimes-limit-- ses--curcell rowcol 0 ses-clear-cell-backward ses-check-curcell ses-begin-change ses-set-curcell ses-cell signal end-of-buffer nil ses-clear-cell 1] 4 (#$ . 54997) "*p"])
#@80 Move to previous cell and then delete it.  With prefix, deletes several
cells.
(defalias 'ses-clear-cell-backward #[(count) "\305W\203 \306[!\207\307\310!\210\311 \210\305	\nW\205: \312u\210\313 \2109\205* \314N\315\f@\fA\"\210)	T\211\202 *\207" [count x --dotimes-limit-- ses--curcell rowcol 0 ses-clear-cell-forward ses-check-curcell end ses-begin-change -1 ses-set-curcell ses-cell ses-clear-cell] 4 (#$ . 55510) "*p"])
#@171 Common code for `ses-read-cell-printer', `ses-read-column-printer', and `ses-read-default-printer'.
PROMPT should end with ": ".  Result is t if operation was cancelled.
(defalias 'ses-read-printer #[(prompt default) "\304 \210\305=\203 \306\202 \307\310	\311\312O#\313	\314\n\305\315\316!&\211\232\203. \305\202J \317!\210\203J ;\204J \242;\204J \320\321\"\204J \305)\207" [default prompt ses-mode-edit-map new barf-if-buffer-read-only t "" format "%s [currently %S]: " 0 -2 read-from-minibuffer nil ses-read-printer-history prin1-to-string ses-printer-validate ses-warn-unsafe unsafep-function] 9 (#$ . 55951)])
#@499 Set the printer function for the current cell or range.

A printer function is either a string (a format control-string with one
%-sequence -- result from format will be right-justified), or a list of one
string (result from format will be left-justified), or a lambda-expression of
one argument, or a symbol that names a function of one argument.  In the
latter two cases, the function's result should be either a string (will be
right-justified) or a list of one string (will be left-justified).
(defalias 'ses-read-cell-printer #[(newval) "\306=?\205\306 \307 \210	\211:\203 \n@\202 \n9\205( \n:\203% \n@\202& \n\310N\n:\2033 \nA\2024 \n9\205E \n:\203B \nA\202C \n\310N@\f@A\fA\311\211\211V\204j V\203n \312\313!\210\314\315#\316W\205\304 \\\314\315#\316W\203\272 \\\317\320$\210\321\"\210T\211\202\227 *T\211\202| .\207" [newval ses--curcell #1=#:cur #2=#:min #3=#:max col t ses-begin-change ses-cell nil error "Empty range" - -1 0 ses-set-cell printer ses-print-cell row maxcol mincol maxrow minrow #4=#:r --dotimes-limit-- #5=#:c] 7 (#$ . 56590) (let ((default t) x) (ses-check-curcell 'range) (catch 'ses-read-cell-printer (ses-dorange ses--curcell (setq x (ses-cell-printer row col)) (if (eq (car-safe x) 'ses-safe-printer) (setq x (cadr x))) (if (eq default t) (setq default x) (unless (equal default x) (setq default t) (throw 'ses-read-cell-printer t))))) (list (ses-read-printer (format "Cell %S printer: " ses--curcell) default)))])
#@96 Set the printer function for the current column.  See
`ses-read-cell-printer' for input forms.
(defalias 'ses-read-column-printer #[(col newval) "\305=?\205( \306 \210\307\310	#\210\212\n\311\fW\205' \312	\"\210T\211\202 +\207" [newval col ses--numrows row --dotimes-limit-- t ses-begin-change ses-set-parameter ses--col-printers 0 ses-print-cell] 5 (#$ . 58118) (let ((col (cdr (ses-sym-rowcol ses--curcell)))) (ses-check-curcell) (list col (ses-read-printer (format "Column %s printer: " (ses-column-letter col)) (ses-col-printer col))))])
#@110 Set the default printer function for cells that have no other.  See
`ses-read-cell-printer' for input forms.
(defalias 'ses-read-default-printer #[(newval) "\301=?\205 \302 \210\303\304\"\210\305\301!\207" [newval t ses-begin-change ses-set-parameter ses--default-printer ses-reprint-all] 3 (#$ . 58676) (list (ses-read-printer "Default printer: " ses--default-printer))])
#@94 Insert a new row before the current one.  With prefix, insert COUNT rows
before current one.
(defalias 'ses-insert-row #[(count) "\306\307!\210\310V\204 \311\312\313\"\210\314 \210\315\211	9\205 	\316N@\206! \n\313+\317\n\320\n\321#\310,S$\210\322\302\n\\\"\210\323\f\310\"\210\310\324\325\310#-././W\203\312 \326,\313\",\3100101W\203\217 0\313\211\211\2112345\3275432$,I\2100T\2110\202d *\330\f#\331\332\333\f\334BBBB6B67c\210-.T\211.8989@Y\203\306 \33598\"\210*\202M \336-!\210+\337\f\310\"\210\340,T_\341\"c\210\342\f\310\310$\210\343\344:\313#\344;!<\211=G\310V\204<G\310V\203=\310.1.1W\203<,\3100101W\2032\345.\f\\0\"\2100T\2110\202*.T\211.\202**&\fV\203P\322\346&\\\"\210\347 \210,\350 \210\3516B6	\203b\352	!\207\323\nS\310\"\207" [count ses--curcell ses--numrows newrow row inhibit-read-only ses-check-curcell end 0 signal args-out-of-range nil ses-begin-change t ses-cell ses-create-cell-variable-range + -1 ses-set-parameter ses-goto-print make-progress-reporter "Inserting row..." make-vector vector ses-vector-insert apply ses-vector-delete ses--cells (1) progress-reporter-do-update progress-reporter-done ses-goto-data make-string 10 ses-relocate-all mapconcat ses-call-printer ses-print-cell ses--header-row ses-reset-header-string ses-setup (apply ses-widen) ses-jump-safe inhibit-quit ses--numcols #1=#:--dotimes-temp2-- x #2=#:--dotimes-temp-- col --dotimes-limit-- references printer formula symbol buffer-undo-list ses--blank-line value reporter ses--col-printers ses--default-printer global cols] 8 (#$ . 59058) "*p"])
#@89 Delete the current row.  With prefix, Deletes COUNT rows starting from the
current one.
(defalias 'ses-delete-row #[(count) "\306 \210\307V\204 \310\311\312\"\210\313\211	9\205 	\314N@\nZ^\315 \210\316\305Z\"\210\317\n\307\"\210\320!\210\321\n\307\"\210\320T_!\210\322\323\324\n#\"\210\325\n\307[\307$\210\326\327\330#\307S$\210\nV\203\204 \n\\X\203y \316\331\307\"\210\202\201 \316\331Z\"\210\332 \210+\333 \210\334B\335	!\207" [count ses--curcell row inhibit-read-only inhibit-quit ses--numrows ses-check-curcell 0 signal args-out-of-range nil t ses-cell ses-begin-change ses-set-parameter ses-goto-print ses-delete-line ses-goto-data ses-set-with-undo ses--cells ses-vector-delete ses-relocate-all ses-destroy-cell-variable-range + -1 ses--header-row ses-reset-header-string ses-setup (apply ses-widen) ses-jump-safe ses--numcols buffer-undo-list] 6 (#$ . 60698) "*p"])
#@242 Insert a new column before COL (default is the current one).
With prefix, insert COUNT columns before current one.
If COL is specified, the new column(s) get the specified WIDTH and PRINTER
(otherwise they're taken from the current column).
(defalias 'ses-insert-column #[(count &optional col width printer) "\306 \210\307V\204 \310\311\312\"\210	\204% \n9\205 \n\313NA	H	H%\314 \210\315\211\312&'()*\316\307+S\317\320#$\210\307\321\322\307#,-.-.W\203\373 \323	\fT\"\210\324\325T\"\210+\307/0/0W\203\311 	TW\203\221 1/H	H\307HJ\326=\203\221 \315&\3271/\3301/H	\312\211\211\2112%34\33143%2$,##\210\332/	\"\210\333c\210/T\211/\202q *\330(	\f#(\330'	%#',-T\211-5656@Y\203\367 \33465\"\210*\202S \335,!\210+\324\303(\"\210\324\305'\"\210\336 \210\337\307	\307$\210&\203#\340\315!\210\202t\341%!G\307V\2047\3417!G\307V\203q+\307-0-0W\203p\3078080W\203f\342-8	\\\"\2108T\2118\202N*-T\211-\202@*\343 \210-\344\n!\207" [count col ses--curcell ses--col-widths width ses--col-printers ses-check-curcell 0 signal args-out-of-range nil ses-cell ses-begin-change t ses-create-cell-variable-range + -1 make-progress-reporter "Inserting column..." ses-adjust-print-width ses-set-parameter ses--numcols *skip* ses-aset-with-undo ses-vector-insert vector ses-goto-data 10 progress-reporter-do-update progress-reporter-done ses-reset-header-string ses-relocate-all ses-reprint-all ses-call-printer ses-print-cell-new-width ses-setup ses-jump-safe printer has-skip printers widths inhibit-read-only inhibit-quit ses--numrows #1=#:--dotimes-temp2-- x #2=#:--dotimes-temp-- row --dotimes-limit-- ses--cells references formula symbol value reporter ses--default-printer y] 12 (#$ . 61614) "*p"])
#@95 Delete the current column.  With prefix, Deletes COUNT columns starting
from the current one.
(defalias 'ses-delete-column #[(count) "\306 \210\307V\204 \310\311\312\"\210\313\211	9\205 	\314N\307\312\211\211'()'@'A\fZ^\211U\203@ \315\316!\210\307*+*+W\203c \317\f*\\H\320#*T\211*\202H *\321 \210\322\323Z\"\210\324\f[\"\210,\307\325\326\307,#-././W\203\357 \327.\f\"\210\330!\2100.H\fH\307HJ\331=\204\275 \fW\203\277 0.H\f\\H\307HJ\331=\203\277 \313\3320.\3330.H\f##\210-.T\211.1212@Y\203\353 \33421\"\210*\202\204 \335-!\210+\322\336\333\f#\"\210\322\337\333\f#\"\210\340 \210\341\307\f\307[$\210\342\307,S\317\343#$\210\n\203.\344\313!\210\2021\345 \210\fY\203;\fS\346\f\".\207" [count ses--curcell has-skip origrow col width ses-check-curcell 0 signal args-out-of-range nil t ses-cell error "Can't delete all columns!" + 1 ses-begin-change ses-set-parameter ses--numcols ses-adjust-print-width make-progress-reporter "Deleting column..." ses-goto-data ses-delete-line *skip* ses-aset-with-undo ses-vector-delete progress-reporter-do-update progress-reporter-done ses--col-widths ses--col-printers ses-reset-header-string ses-relocate-all ses-destroy-cell-variable-range -1 ses-reprint-all ses-setup ses-goto-print rowcol inhibit-read-only inhibit-quit x --dotimes-limit-- ses--numrows #1=#:--dotimes-temp2-- row #2=#:--dotimes-temp-- ses--cells value reporter] 9 (#$ . 63394) "*p"])
#@143 Move to next cell in row, or inserts a new cell if already in last one, or
inserts a new row if at bottom of print area.  Repeat COUNT times.
(defalias 'ses-forward-or-insert #[(&optional count) "\306\307!\210\310	\311\nW\205T \312 \210\f\204! \313 \210\314\315!\210\202J \f9\205) \f\316NA\317`\320\"Sf\321U\204I \313 \210\322	\nZHH$\210)\323u\210\nT\211\202 *\207" [deactivate-mark count x --dotimes-limit-- ses--curcell col ses-check-curcell end t 0 ses-set-curcell barf-if-buffer-read-only ses-insert-row 1 ses-cell next-single-property-change intangible 32 ses-insert-column nil ses--numcols ses--col-widths ses--col-printers] 7 (#$ . 64877) "p"])
#@67 Insert a new row after current one and jumps to its first column.
(defalias 'ses-append-row-jump-first-column #[nil "\300 \210\301 \210\302\303!\210\304 \210\305\306!\207" [ses-check-curcell ses-begin-change beginning-of-line 2 ses-set-curcell ses-insert-row 1] 2 (#$ . 65550) "*"])
#@38 Set the width of the current column.
(defalias 'ses-set-column-width #[(col newwidth) "\306W\203\n \307\310!\210\311 \210\312 \210\212\313\314\n\nHZ\"\210\315\303\n#\210)\f\316W\205; \317\n\"\210T\211\202) +\207" [newwidth inhibit-quit col ses--col-widths ses--numrows row 1 error "Invalid column width" ses-begin-change ses-reset-header-string t ses-adjust-print-width ses-set-parameter 0 ses-print-cell-new-width --dotimes-limit--] 6 (#$ . 65839) (let ((col (cdr (progn (ses-check-curcell) (ses-sym-rowcol ses--curcell))))) (barf-if-buffer-read-only) (list col (if current-prefix-arg (prefix-numeric-value current-prefix-arg) (read-from-minibuffer (format "Column %s width [currently %d]: " (ses-column-letter col) (ses-col-width col)) nil nil t nil (number-to-string (ses-col-width col))))))])
(byte-code "\300\301\302\303\304$\210\305\301\306\307\310B#\210\311\301\304\"\207" [ad-add-advice copy-region-as-kill (ses-copy-region-as-kill nil t (advice lambda nil "It doesn't make sense to copy read-only or intangible attributes into the\nkill ring.  It probably doesn't make sense to copy keymap properties.\nWe'll assume copying front-sticky properties doesn't make sense, either.\n\nThis advice also includes some SES-specific code because otherwise it's too\nhard to override how mouse-1 works." (when (> beg end) (let ((temp beg)) (setq beg end end temp))) (if (not (and (eq major-mode 'ses-mode) (eq (get-text-property beg 'read-only) 'ses) (eq (get-text-property (1- end) 'read-only) 'ses))) ad-do-it (kill-new (ses-copy-region beg end)) (if transient-mark-mode (setq deactivate-mark t)) nil))) around nil ad-set-advice-info-field cache #[(beg end) "\306	\nV\203 	\n)\f\307=\203( \310	\311\"\312=\203( \310\nS\311\"\312=\2040 \313	\n\"\202> \314\315	\n\"!\210\203> \316)\207" [ad-return-value beg end temp major-mode transient-mark-mode nil ses-mode get-text-property read-only ses ad-Orig-copy-region-as-kill kill-new ses-copy-region t deactivate-mark] 4 #("Advice doc string" 0 17 (ad-advice-info copy-region-as-kill)) "r"] (nil (ses-copy-region-as-kill) nil function t t) ad-activate] 5)
#@149 Treat the region as rectangular.  Convert the intangible attributes to
SES attributes recording the contents of the cell as of the time of copying.
(defalias 'ses-copy-region #[(beg end) "	U\203	 	S\305\306\307\310S\"\311#\312\313\fG\314\f$\210\f*\207" [end ses--data-marker inhibit-point-motion-hooks beg x t mapconcat ses-copy-region-helper extract-rectangle "\n" remove-text-properties 0 (read-only t intangible t keymap t front-sticky t)] 5 (#$ . 67971)])
#@179 Converts one line (of a rectangle being extracted from a spreadsheet) to
external form by attaching to each print cell a 'ses attribute that records
the corresponding data cell.
(defalias 'ses-copy-region-helper #[(line) "G\306V\204 \307\310!\210\311\312\313\211\211\211\203V \314\315#\316\315#\n9\2050 \n\317N	@H	AH\320\206B G\321\f\312H\f\306H\f\322HE%\210\211\204 .\207" [line rowcol sym next mycell pos 1 error "Empty range" t 0 nil get-text-property intangible next-single-property-change ses-cell put-text-property ses 2 inhibit-read-only ses--cells] 9 (#$ . 68444)])
#@104 Generic override for any commands that kill text.  We clear the killed
cells instead of deleting them.
(defalias 'ses-kill-override #[(beg end) "\306\307!\210\310\311\312\313\217\210)\314 \210\315 \210	\211:\203 \n@\202 \n9\2050 \n:\203- \n@\202. \n\316N\n:\203; \nA\202< \n9\205M \n:\203J \nA\202K \n\316N@\f@A\fA\317\211\211V\204r V\203v \320\321!\210\322\323#\324W\203\304 \\\322\323#\324W\203\272 \\\325\"\210T\211\202\237 *T\211\202\204 .\326	@!\207" [buffer-read-only ses--curcell #1=#:cur #2=#:min #3=#:max col ses-check-curcell needrange t x (byte-code "\302\303 \304 \"	\"\207" [beg end lookup-key current-global-map this-command-keys] 3) ((buffer-read-only)) barf-if-buffer-read-only ses-begin-change ses-cell nil error "Empty range" - -1 0 ses-clear-cell ses-jump row maxcol mincol maxrow minrow #4=#:r --dotimes-limit-- #5=#:c] 7 (#$ . 69054) "r"])
(byte-code "\300\301\302\303\304$\210\305\301\306\307\310B#\210\311\301\304\"\207" [ad-add-advice yank (ses-yank nil t (advice lambda nil "In SES mode, the yanked text is inserted as cells.\n\nIf the text contains 'ses attributes (meaning it went to the kill-ring from a\nSES buffer), the formulas and print functions are restored for the cells.  If\nthe text contains tabs, this is an insertion of tab-separated formulas.\nOtherwise the text is inserted as the formula for the current cell.\n\nWhen inserting cells, the formulas are usually relocated to keep the same\nrelative references to neighboring cells.  This is best if the formulas\ngenerally refer to other cells within the yanked text.  You can use the C-u\nprefix to specify insertion without relocation, which is best when the\nformulas refer to cells outsite the yanked text.\n\nWhen inserting formulas, the text is treated as a string constant if it doesn't\nmake sense as a sexp or would otherwise be considered a symbol.  Use 'sym to\nexplicitly insert a symbol, or use the C-u prefix to treat all unmarked words\nas symbols." (if (not (and (eq major-mode 'ses-mode) (eq (get-text-property (point) 'keymap) 'ses-mode-print-map))) ad-do-it (ses-check-curcell 'end) (push-mark (point)) (let ((text (current-kill (cond ((listp arg) 0) ((eq arg '-) -1) (t (1- arg)))))) (or (ses-yank-cells text arg) (ses-yank-tsf text arg) (ses-yank-one (ses-yank-resize 1 1) text 0 (if (memq (aref text (1- (length text))) '(9 10)) (1- (length text))) arg))) (if (consp arg) (exchange-point-and-mark))))) around nil ad-set-advice-info-field cache #[(&optional arg) "\304	\305=\203 \306`\307\"\310=\204 \311\n!\202f \312\313!\210\314`!\210\315\n<\203* \316\2026 \n\317=\2034 \320\2026 \nS!\321\n\"\204] \322\n\"\204] \323\324\325\211\"\316\211GSH\326>\205Z GS\n%\210)\n:\203f \327 \210)\207" [ad-return-value major-mode arg text nil ses-mode get-text-property keymap ses-mode-print-map ad-Orig-yank ses-check-curcell end push-mark current-kill 0 - -1 ses-yank-cells ses-yank-tsf ses-yank-one ses-yank-resize 1 (9 10) exchange-point-and-mark] 6 #("Advice doc string" 0 17 (ad-advice-info yank)) "*P"] (nil (ses-yank) nil function t t) ad-activate] 5)
#@362 Replace just-yanked stretch of killed text with a different stretch.
This command is allowed only immediately after a `yank' or a `yank-pop', when
the region contains a stretch of reinserted previously-killed text.  We
replace it with a different stretch of killed text.
  Unlike standard `yank-pop', this function uses `undo' to delete the
previous insertion.
(defalias 'ses-yank-pop #[(arg) "\303=\204\n \304\305!\210\306 \210\307 \210\303	\206 \310T!\210\303\211\207" [last-command arg this-command yank error "Previous command was not a yank" undo ses-set-curcell 1] 2 (#$ . 72204) "*p"])
#@335 If the TEXT has a proper set of 'ses attributes, inserts the text as
cells, else return nil.  The cells are reprinted--the supplied text is
ignored because the column widths, default printer, etc. at yank time might
be different from those at kill-time.  ARG is a list to indicate that
formulas are to be inserted without relocation.
(defalias 'ses-yank-cells #[(text arg) "\306\307\310#\306GS\310#\211\205\315	\205\315\n@9\205  \n@\311N	@9\205+ 	@\311N\312	@\n@\313#\312	A\nA\313#\314\f\"\211@\n@Z!A\nAZ\"\307#\315\211$%\315&\307\316\317\307#'()()W\203\305(@\\$\f\307*+*+W\203\212*A\\%\306#\310#\320#\310##	@9\205\245 	@\311N&	\204\303 $!Z\321\f\"\313#B&\315\211\211E#S#&@$!ZU\204\323 \322\323!\210%\"Z&AW\203%,%\"Z&AW\203\324$%\"\210*T*%T\211%\202\345 \325$,S\"\210)	@\203\201\326	8\211&-$H%H\326H\232\204I&\203?&;\204?&\242\327=\204?\327&D&\330$%\331&$\210	\211&A@)&.:\204d\332&\307\211!\"%&&:\203x&\242\333=\204x\333&D&\334$%&#\210*T\211*\202 *#\203\245\306#\310#\203\235\322\335!\210\320#\310##'(T\211(/0/0@Y\203\301\3360/\"\210*\202h \337'!\210.\f\340*\207" [text last first needrows needcols rowcol get-text-property 0 ses ses-cell - -1 ses-yank-resize nil make-progress-reporter "Yanking..." next-single-property-change + error "Cell row error" ses-clear-cell ses-print-cell 2 ses-safe-printer ses-set-cell printer ses-relocate-formula ses-safe-formula ses-cell-set-formula "Missing newline between rows" progress-reporter-do-update progress-reporter-done t rowincr colincr pos myrow mycol x #1=#:--dotimes-temp2-- row #2=#:--dotimes-temp-- col --dotimes-limit-- oldcol ses--cells arg value reporter] 7 (#$ . 72807)])
#@150 Insert the substring [FROM,TO] of TEXT as the formula for cell ROWCOL (a
cons of ROW and COL).  Treat plain symbols as strings unless ARG is a list.
(defalias 'ses-yank-one #[(rowcol text from to arg) "\306\307\310\217\211A	\206 \nGW\203 \n	O\202< @\2039 @9\2039 \f:\2031 \311@D\202< \n	O\202< @@A\f:\203M \312D\313\f#+\207" [val to text from arg rowcol nil (read-from-string text from to) ((error (cons nil from))) quote ses-safe-formula ses-cell-set-formula col row] 5 (#$ . 74572)])
#@247 If TEXT contains tabs and/or newlines, treats the tabs as
column-separators and the newlines as row-separators and inserts the text as
cell formulas--else return nil.  Treat plain symbols as strings unless ARG
is a list.  Ignore a final newline.
(defalias 'ses-yank-tsf #[(text arg) "\306\307\"?\206 \310\225GU?\205\323 \211GSH\311U\204 \312P\313\211C\310\211\314\211\306\307T#\211\203f B\fTH\311=\203- \n\204T \f\202^ \n\fU\204^ \315\316!\210\310T\202- \317\n\"\310W\203\300 \n\310W\203\266 \320\321	@[\313$\321	A\n[\313$B\211A@)T@%\210AT\211\202\201 *T\211\202s *\322\321	@\313#\321	A\n\313#\"\210.\323\207" [text rowcol needcols needrows cols spots string-match "[	\n]" 0 10 "\n" -1 nil error "Inconsistent row lengths" ses-yank-resize ses-yank-one + ses-goto-print t pos row --dotimes-limit-- col x arg] 8 (#$ . 75090)])
#@192 If this yank will require inserting rows and/or columns, asks for
confirmation and then inserts them.  Result is (row,col) for top left of yank
spot, or error signal if user requests cancel.
(defalias 'ses-yank-resize #[(needrows needcols) "\306 \210\203 9\205 \307N\202 	\310B\311\211\211@\\	Z\fA\\Z\310V\310V\204< \n\203\226 \312\313\314\203J \313\315\"\202K \316\203W \n\203W \317\202X \316\n\203d \313\320\"\202e \316$!\204n \321\322!\210\203 \311\212\323	\310\"\210\324!\210*\n\203\226 \325SHSH$\210\f+\207" [ses--curcell ses--numrows colbool rowbool rowcol needrows ses-begin-change ses-cell 0 nil y-or-n-p format "Yank will insert %s%s%s.  Continue? " "%d rows" "" " and " "%d columns" error "Cancelled" ses-goto-print ses-insert-row ses-insert-column needcols ses--numcols ses--col-widths ses--col-printers] 9 (#$ . 75996)])
#@124 Export values from the current range, with tabs between columns and
newlines between rows.  Result is placed in kill ring.
(defalias 'ses-export-tsv #[(beg end) "\300\301!\207" [ses-export-tab nil] 2 (#$ . 76880) "r"])
#@126 Export formulas from the current range, with tabs between columns and
newlines between rows.  Result is placed in kill ring.
(defalias 'ses-export-tsf #[(beg end) "\300\301!\207" [ses-export-tab t] 2 (#$ . 77106) "r"])
#@217 Export the current range with tabs between columns and newlines between
rows.  Result is placed in kill ring.  The export is values unless
WANT-FORMULAS is non-nil.  Newlines and tabs in the export text are escaped.
(defalias 'ses-export-tab #[(want-formulas) "\306\307!\210\310\311\211\211:\203 \f@\202 \f9\205( \f:\203% \f@\202& \f\312N\f:\2033 \fA\2024 \f9\205E \f:\203B \fA\202C \f\312N@@AA\311\211 !\"#\211$#V\204n \"!V\203r \313\314!\210\315#$\316#\317%&%&W\2031%$\\ \315!\"\316#\317'&'&W\203''\"\\(\203\272 ) HH\320H\202\305 ) HH\317HJ\211\242\321=\203\325 \211*A@)\203\337 \322=\203\341 \323\242\324=\203\364 \325	B\211*A@)\326\310\"\327\330\331#\211	B!W\203\330	B\202 #W\203\332	B'T\211'\202\233 *%T\211%\202\200 .\333\334	\237\"\335	!+\207" [item result print-escape-newlines ses--curcell #1=#:cur #2=#:min ses-check-curcell needrange t nil ses-cell error "Empty range" - -1 0 1 ses-safe-formula *skip* "" quote "'" prin1-to-string replace-regexp-in-string "	" "\\\\t" "\n" apply concat kill-new #3=#:max col row maxcol mincol maxrow minrow #4=#:r --dotimes-limit-- #5=#:c want-formulas ses--cells x] 7 (#$ . 77332)])
#@32 Select the default header row.
(defalias 'ses-unset-header-row #[nil "\300\301!\207" [ses-set-header-row 0] 2 (#$ . 78558) nil])
#@258 Set the ROW to display in the header-line.
With a numerical prefix arg, use that row.
With no prefix arg, use the current row.
With a \[universal-argument] prefix arg, prompt the user.
The top row is row 1.  Selecting row 0 displays the default header row.
(defalias 'ses-set-header-row #[(row) "\305W\204\f 	V\203 \306\307!\210\310 \210\n\311\312\302\"\210)\313\314E\fB)\315 \207" [row ses--numrows ses--header-row oldval buffer-undo-list 0 error "Invalid header-row" ses-begin-change nil ses-set-parameter apply ses-set-header-row ses-reset-header-string] 3 (#$ . 78694) (list (if (numberp current-prefix-arg) current-prefix-arg (let ((currow (1+ (car (ses-sym-rowcol ses--curcell))))) (if current-prefix-arg (read-number "Header row: " currow) currow))))])
#@47 Marks the entirety of current row as a range.
(defalias 'ses-mark-row #[nil "\302\303!\210\242\206\n 9\205 \242\206 \304N@\305`!\210\306	T\307\"\210\305`\310\311#\210\306	\307\")\207" [ses--curcell row ses-check-curcell range ses-cell push-mark ses-goto-print 0 nil t] 4 (#$ . 79468) nil])
#@50 Marks the entirety of current column as a range.
(defalias 'ses-mark-column #[nil "\305\306!\210\242\206\n 9\205 \242\206 \307NA\310\311`!\210\312S\n\"\210\313u\210\311`\314\315#\210\f	H\nH\310HJ\316=\203@ 	T\202- \312	\n\"*\207" [ses--curcell row col ses--numrows ses--cells ses-check-curcell range ses-cell 0 push-mark ses-goto-print 1 nil t *skip*] 4 (#$ . 79771) nil])
#@34 Move point to last cell on line.
(defalias 'ses-end-of-line #[nil "\306\307\310\"\210\205~ 	S\311\2119\203\" 9\205 \312N@\202_ `\313 W\203. @\2020 A9\205D `\313 W\203@ @\202B A\312N\211A\fSX\203S \n@\202_ \n@T\211U\203_ \314W\205} H\fH\314HJ\315=\203y \fS\202e \316\f\"+\207" [ses--curcell ses--numcols rowcol row col ses--numrows ses-check-curcell end range nil ses-cell mark 0 *skip* ses-goto-print ses--cells] 4 (#$ . 80160) nil])
#@75 Narrow the buffer so only the print area is visible.  Use after \[widen].
(defalias 'ses-renarrow-buffer #[nil "\301\211\207" [ses--deferred-narrow t] 2 (#$ . 80625) nil])
#@78 Sorts the range by a specified column.  With prefix, sorts in
REVERSE order.
(defalias 'ses-sort-column #[(sorter &optional reverse) "\306\307!\210@9\205 @\310NA9\205 A\310N\211@\nA	@	A\311\211\211$%&'\312(\313P!9\205B \312(\313P!\310NA\211(\203Y (&Y\203Y ($X\204] \314\315!\210\316%'\317#\320)*)*W\203\226 \321')\\(\"\210\322`\323\"\324`\"')\\BB)T\211)\202k *\325\326\"+\204\244 \237\311)\211,\203\326 ,@)\321)A$T\"\210`\321)A&\"\210\327`\"\fB,A\211,\204\256 *\311-.\204\344 -\2038/\2030\203\330 \203\331\332!\203\333\332\324\334 \335 \"\"\210-\204$.\336=\204.\242\337=\203$.A\204$\311\211.\2027.\242\337=\2031.A.\3110\340\341!\210)\316%'\317#\320)*)*W\205l\321')\\&\"\210\342 \210\343\f\211A@\311\"\210)T\211)\202G.\207" [ses--curcell max min end extracts keys ses-check-curcell needrange ses-cell nil intern "1" error "Invalid sort column" - -1 0 ses-goto-print next-single-property-change intangible buffer-substring-no-properties sort #[(x y) "@	@\231\207" [x y] 2] ses-copy-region display-selections-p x-selection-owner-p PRIMARY x-set-selection region-beginning region-end lambda only run-hooks deactivate-mark-hook ses-set-curcell ses-yank-cells maxcol maxrow mincol minrow sorter x --dotimes-limit-- reverse --dolist-tail-- force transient-mark-mode select-active-regions mark-active] 8 (#$ . 80804) "*sSort column: \nP"])
#@37 Mouse version of `ses-sort-column'.
(defalias 'ses-sort-column-click #[(event reverse) "\211:\203 \3068:\203 \306\202 \3078\202 \310 `\311\312F)\313\211@)!\210\314!@\312\211W\203L \f\nHV\203L \315\f\nH\307#\nT\211\2020 \nY\203W \316 \202] \317\320\n!\")\207" [event position col ses--numcols ses--col-widths reverse 2 1 selected-window (0 . 0) 0 select-window posn-col-row - ding ses-sort-column ses-column-letter] 5 (#$ . 82246) "*e\nP"])
#@85 Inserts into minibuffer the list of cells currently highlighted in the
spreadsheet.
(defalias 'ses-insert-range #[nil "\303r\304	!q\210\305 \210\306\307!\210\310\311\n@\nAE!A)\312\237!\313\314Oc)\207" [x minibuffer-scroll-window ses--curcell nil window-buffer ses-command-hook ses-check-curcell needrange macroexpand ses-range prin1-to-string 1 -1] 4 (#$ . 82713) "*"])
#@110 Inserts "(ses-range x y)" in the minibuffer to represent the currently
highlighted range in the spreadsheet.
(defalias 'ses-insert-ses-range #[nil "\303r\304	!q\210\305 \210\306\307!\210\310\311\n@\nA#)c)\207" [x minibuffer-scroll-window ses--curcell nil window-buffer ses-command-hook ses-check-curcell needrange format "(ses-range %S %S)"] 4 (#$ . 83093) "*"])
#@38 Mouse version of `ses-insert-range'.
(defalias 'ses-insert-range-click #[(event) "\301!\210\302 \207" [event mouse-set-point ses-insert-range] 2 (#$ . 83465) "*e"])
#@42 Mouse version of `ses-insert-ses-range'.
(defalias 'ses-insert-ses-range-click #[(event) "\301!\210\302 \207" [event mouse-set-point ses-insert-ses-range] 2 (#$ . 83637) "*e"])
#@76 Returns PRINTER if safe, or the substitute printer `ses-unsafe' otherwise.
(defalias 'ses-safe-printer #[(printer) ";\204 \242;\204 \203 \301\302\"\203 \207\303\207" [printer ses-warn-unsafe unsafep-function ses-unsafe] 3 (#$ . 83821)])
#@72 Returns FORMULA if safe, or the substitute formula *unsafe* otherwise.
(defalias 'ses-safe-formula #[(formula) "\301\302\"\203	 \207\303\304DD\207" [formula ses-warn-unsafe unsafep ses-unsafe quote] 3 (#$ . 84073)])
#@224 Applies CHECKER to FORMULA.  If result is non-nil, asks user for
confirmation about FORMULA, which might be unsafe.  Returns t if formula
is safe or user allows execution anyway.  Always returns t if
`safe-functions' is t.
(defalias 'ses-warn-unsafe #[(formula checker) "\303=\203 \303\207	\n!\211\204 \303\207\304\305\306\n	#!\207" [safe-functions checker formula t y-or-n-p format "Formula %S\nmight be unsafe %S.  Process it? "] 6 (#$ . 84299)])
#@252 Expands to a list of cell-symbols for the range.  The range automatically
expands to include any new row or column inserted into its middle.  The SES
library code specifically looks for the symbol `ses-range', so don't create an
alias for this macro!
(defalias 'ses-range '(macro . #[(from to) "\306	\nB\211:\203 @\202 9\205\" :\203 @\202  \307N:\203- A\202. 9\205? :\203< A\202= \307N\f@@\fAA\306\211\211V\204e V\203i \310\311!\210\312\313#\314W\203\277 \\\312\313#\314W\203\265 \\HH\314HBT\211\202\222 *T\211\202w .\315)B\207" [result from to #1=#:cur #2=#:min #3=#:max nil ses-cell error "Empty range" - -1 0 list col row maxcol mincol maxrow minrow #4=#:r --dotimes-limit-- #5=#:c ses--cells] 7 (#$ . 84759)]))
#@73 Return ARGS reversed, with the blank elements (nil and *skip*) removed.
(defalias 'ses-delete-blanks #[(&rest args) "\304	\304\211\203 @\211\305>\204 \nBA\211\204\n *)\207" [result args cur --dolist-tail-- nil (nil *skip*)] 3 (#$ . 85572)])
#@52 Compute the sum of the arguments, ignoring blanks.
(defalias 'ses+ #[(&rest args) "\301\302\301\303\"\"\207" [args apply + ses-delete-blanks] 5 (#$ . 85831)])
#@153 Computes the sum of the numbers in LIST, divided by their length.  Blanks
are ignored.  Result is always floating-point, even if all args are integers.
(defalias 'ses-average #[(list) "\301\302\"\303\301\304\"!G\245\207" [list apply ses-delete-blanks float +] 4 (#$ . 85998)])
#@246 Select cells in FROMRANGE that are `equal' to TEST.  For each match, return
the corresponding cell from TORANGE.  The ranges are macroexpanded but not
evaluated so they should be either (ses-range BEG END) or (list ...).  The
TEST is evaluated.
(defalias 'ses-select '(macro . #[(fromrange test torange) "\306!A\306	!A\307\n!G	GU\204 \310\311!\210\312\312\211\203= @\n\fJ\232\2033 	@B	AA\211\204$ *\313)B\207" [fromrange torange test result x --dolist-tail-- macroexpand eval error "ses-select: Ranges not same length" nil list] 3 (#$ . 86286)]))
(byte-code "\302\303\211\203 	@\304\305\306#\210	A\211\204 *\303\207" [x --dolist-tail-- (ses-cell-value ses-range ses-delete-blanks ses+ ses-average ses-select) nil put side-effect-free t] 5)
#@188 Print VALUE, centered within column.  FILL is the fill character for
centering (default = space).  SPAN indicates how many additional rightward
columns to include in width (default = 0).
(defalias 'ses-center #[(value &optional span fill) "	H\206 \n	H\306\204 \307\204 \310\311\"\310W\203N \312\313\312	[#H#T\211\2020 *\314!Z\211\310X\203a \202z \315\316\245\"\211\f\316\246\310V\205y \317!R+\207" [ses--col-printers col ses--default-printer ses--col-widths half width nil 32 0 ses-call-printer + 1 string-width make-string 2 char-to-string printer fill span value x --dotimes-limit--] 9 (#$ . 87058)])
#@173 Print VALUE, centered within the span that starts in the current column
and continues until the next nonblank column.  FILL specifies the fill
character (default = space).
(defalias 'ses-center-span #[(value &optional fill) "T\211\nW\203 \fH	H\306HJ\307>\203 	T\211\202 \310\311	\312##)\207" [col end ses--numcols ses--cells row value 0 (nil *skip*) ses-center - 1 fill] 7 (#$ . 87727)])
#@114 Print VALUE centered using dashes.  SPAN indicates how many rightward
columns to include in width (default = 0).
(defalias 'ses-dashfill #[(value &optional span) "\302	\303#\207" [value span ses-center 45] 4 (#$ . 88133)])
#@132 Print VALUE, centered using dashes within the span that starts in the
current column and continues until the next nonblank column.
(defalias 'ses-dashfill-span #[(value) "\301\302\"\207" [value ses-center-span 45] 3 (#$ . 88364)])
#@132 Print VALUE, centered using tildes within the span that starts in the
current column and continues until the next nonblank column.
(defalias 'ses-tildefill-span #[(value) "\301\302\"\207" [value ses-center-span 126] 3 (#$ . 88603)])
#@45 Substitute for an unsafe formula or printer
(defalias 'ses-unsafe #[(value) "\300\301!\207" [error "Unsafe formula or printer"] 2 (#$ . 88843)])
(byte-code "\303B\304\211\203 \n@\305	\306\307#\210\nA\211\204\n *\304\207" [ses-standard-printer-functions x --dolist-tail-- ses-unsafe nil put side-effect-free t] 5)
#@38 Unload the Simple Emacs Spreadsheet.
(defalias 'ses-unload-function #[nil "\304\305\211\203\" 	@\306\307\310\311\312!P!#\210\313!\210	A\211\204 *r\314 \305\211\203I 	@\211q\210\315=\203B \316\303!\206@ \317 \210	A\211\204- +\305\207" [fun --dolist-tail-- buf major-mode (copy-region-as-kill yank) nil ad-remove-advice around intern "ses-" symbol-name ad-update buffer-list ses-mode default-value fundamental-mode] 8 (#$ . 89168)])
(provide 'ses)
