Commit 20b858ef authored by Paul Eggert's avatar Paul Eggert

Prefer \... to control chars in .el literals

parent 00c1f771
......@@ -1095,7 +1095,7 @@ Marks the function with their arguments, and returns a list of variables."
(set-buffer (get-buffer-create docbuf))
(insert-file-contents-literally
(expand-file-name internal-doc-file-name doc-directory)))
(while (re-search-forward "\\([VF]\\)" nil t)
(while (re-search-forward "\^_\\([VF]\\)" nil t)
(when (setq sym (intern-soft (buffer-substring (point)
(line-end-position))))
(if (string-equal (match-string 1) "V")
......@@ -1104,7 +1104,7 @@ Marks the function with their arguments, and returns a list of variables."
(if (boundp sym) (setq vars (cons sym vars)))
;; Function.
(when (fboundp sym)
(when (re-search-forward "\\(^(fn.*)\\)?" nil t)
(when (re-search-forward "\\(^(fn.*)\\)?\^_" nil t)
(backward-char 1)
;; FIXME distinguish no args from not found.
(and (setq args (match-string 1))
......
......@@ -41,13 +41,13 @@
'((:around "\300\301\302\003#\207" 5)
(:before "\300\301\002\"\210\300\302\002\"\207" 4)
(:after "\300\302\002\"\300\301\003\"\210\207" 5)
(:override "\300\301\"\207" 4)
(:override "\300\301\002\"\207" 4)
(:after-until "\300\302\002\"\206\013\000\300\301\002\"\207" 4)
(:after-while "\300\302\002\"\205\013\000\300\301\002\"\207" 4)
(:before-until "\300\301\002\"\206\013\000\300\302\002\"\207" 4)
(:before-while "\300\301\002\"\205\013\000\300\302\002\"\207" 4)
(:filter-args "\300\302\301!\"\207" 5)
(:filter-return "\301\300\302\"!\207" 5))
(:filter-args "\300\302\301\003!\"\207" 5)
(:filter-return "\301\300\302\003\"!\207" 5))
"List of descriptions of how to add a function.
Each element has the form (WHERE BYTECODE STACK) where:
WHERE is a keyword indicating where the function is added.
......
......@@ -39,464 +39,464 @@
;;;Here are some macros that exercise SES. Set `pause' to t if you want the
;;;macros to pause after each step.
(let* ((pause nil)
(x (if pause "q" ""))
(y "ses-test.ses\r<"))
(x (if pause "\^Xq" ""))
(y "\^X\^Fses-test.ses\r\^[<"))
;;Fiddle with the existing spreadsheet
(fset 'ses-exercise-example
(concat "" data-directory "ses-example.ses\r<"
x "10"
x " "
x ""
x "pses-center\r"
x "p\r"
x "\t\t"
x "\r A9 B9\r"
x ""
x "\r 2\r"
x ""
(concat "\^X\^F" data-directory "ses-example.ses\r\^[<"
x "\^U10\^N"
x "\^K"
x "\^_"
x "\^P\^P\^Fpses-center\r"
x "\^Fp\r"
x "\^U\^P\t\t"
x "\r\^B A9 B9\r"
x "\^U\^N\^B\^B\^B"
x "\r\^A\^K2\r"
x "\^N\^N\^F"
x "50\r"
x "4"
x " "
x ""
x "(+ o\0"
x "-1o \r"
x ""
x "\^U4\^_"
x "\^C\^[\^L"
x "\^_"
x "(+ \^Xo\^N\^N\^F\0\^F\^F"
x "\^U-1\^Xo\^C\^R \^C\^S\r\^B"
x "\^_"
x))
;;Create a new spreadsheet
(fset 'ses-exercise-new
(concat y
x "\"%.8g\"\r"
x "\^C\^P\"%.8g\"\r"
x "2\r"
x ""
x ""
x "2"
x "\^O"
x "\^P"
x "\^U2\^O"
x "\"Header\r"
x "(sqrt 1\r"
x "pses-center\r"
x "(sqrt 1\r\^B"
x "pses-center\r\^F"
x "\t"
x "(+ A2 A3\r"
x "(* B2 A3\r"
x "2"
x "\rB3\r"
x ""
x "\^P(+ A2 A3\r"
x "\^F(* B2 A3\r"
x "\^U2\^C\^[\^H"
x "\r\^?\^?\^?B3\r"
x "\^X\^S"
x))
;;Basic cell display
(fset 'ses-exercise-display
(concat y ":(revert-buffer t t)\r"
x ""
x "\"Very long\r"
(concat y "\^[:(revert-buffer t t)\r"
x "\^E"
x "\"Very long\r\^B"
x "w3\r"
x "w3\r"
x "(/ 1 0\r"
x "234567\r"
x "5w"
x "\t1\r"
x ""
x "234567\r"
x "\t"
x ""
x "345678\r"
x "3w"
x "\0>"
x ""
x ""
x ""
x ""
x ""
x ""
x ""
x "1\r"
x ""
x ""
x "\"1234567-1234567-1234567\r"
x "123\r"
x "2"
x "\"1234567-1234567-1234567\r"
x "123\r"
x "w8\r"
x "\"1234567\r"
x "w5\r"
x "(/ 1 0\r\^B"
x "234567\r\^B"
x "\^U5w"
x "\t1\r\^B"
x "\^B\^C\^C"
x "\^F234567\r\^B"
x "\t\^D\^B"
x "\^B\^C\^C"
x "345678\r\^B"
x "\^U3w"
x "\0\^[>"
x "\^C\^C"
x "\^X\^X"
x "\^E"
x "\^X\^X\^A"
x "\^E"
x "\^F\^E"
x "\^C\^C"
x "1\r\^B"
x "\^C\^C\^F"
x "\^E"
x "\^B\^B\^B\"1234567-1234567-1234567\r\^B"
x "123\r\^B"
x "\^U2\^O"
x "\^N\"1234567-1234567-1234567\r\^B"
x "123\r\^B"
x "\^F\^Fw8\r"
x "\^B\^B\"1234567\r"
x "\^N\^Bw5\r"
x))
;;Cell formulas
(fset 'ses-exercise-formulas
(concat y ":(revert-buffer t t)\r"
(concat y "\^[:(revert-buffer t t)\r"
x "\t\t"
x "\t"
x "(* B1 B2 D1\r"
x "(* B2 B3\r"
x "(apply '+ (ses-range B1 B3)\r"
x "(apply 'ses+ (ses-range B1 B3)\r"
x "(apply 'ses+ (ses-range A2 A3)\r"
x "(mapconcat'number-to-string(ses-range B2 B4) \"-\"\r"
x "(apply 'concat (reverse (ses-range A3 D3))\r"
x "(* (+ A2 A3) (ses+ B2 B3)\r"
x ""
x "2"
x "5\t"
x "(apply 'ses+ (ses-range E1 E2)\r"
x "(apply 'ses+ (ses-range A5 B5)\r"
x "(apply 'ses+ (ses-range E1 F1)\r"
x "(apply 'ses+ (ses-range D1 E1)\r"
x "(* B1 B2 D1\r\^B"
x "(* B2 B3\r\^B"
x "\^N(apply '+ (ses-range B1 B3)\r\^B"
x "(apply 'ses+ (ses-range B1 B3)\r\^B"
x "\^N(apply 'ses+ (ses-range A2 A3)\r\^B"
x "\^N(mapconcat'number-to-string(ses-range B2 B4) \"-\"\r\^B"
x "\^B(apply 'concat (reverse (ses-range A3 D3))\r\^B"
x "\^B(* (+ A2 A3) (ses+ B2 B3)\r\^B"
x "\^N"
x "\^U2\^O"
x "\^U5\t"
x "\^P(apply 'ses+ (ses-range E1 E2)\r\^B"
x "\^P(apply 'ses+ (ses-range A5 B5)\r\^B"
x "\^P(apply 'ses+ (ses-range E1 F1)\r\^B"
x "\^P(apply 'ses+ (ses-range D1 E1)\r\^B"
x "\t"
x "(ses-average (ses-range A2 A5)\r"
x "(apply 'ses+ (ses-range A5 A6)\r"
x "k"
x " "
x ""
x "2"
x "3 "
x "o"
x "2o"
x "3k"
x "(ses-average (ses-range B3 E3)\r"
x "k"
x "12345678\r"
x "(ses-average (ses-range A2 A5)\r\^B"
x "\^N(apply 'ses+ (ses-range A5 A6)\r\^B"
x "\^B\^B\^[k"
x "\^N\^N\^K"
x "\^P\^P\^P\^O"
x "\^N\^U2\^O"
x "\^P\^U3\^K"
x "\^B\^B\^B\^[o"
x "\^F\^U2\^[o"
x "\^B\^U3\^[k"
x "\^F(ses-average (ses-range B3 E3)\r\^B"
x "\^B\^[k"
x "\^N\^P12345678\r\^B"
x))
;;Recalculating and reconstructing
(fset 'ses-exercise-recalc
(concat y ":(revert-buffer t t)\r"
x " "
(concat y "\^[:(revert-buffer t t)\r"
x "\^C\^[\^L"
x "\t\t"
x ""
x "(/ 1 0\r"
x ""
x "\^C\^C"
x "(/ 1 0\r\^B"
x "\^C\^C"
x "\n"
x ""
x "\"%.6g\"\r"
x " "
x ">nw"
x "\0>xdelete-region\r"
x " "
x "8"
x "\0>xdelete-region\r"
x " "
x ""
x " k"
x " "
x "\"Very long\r"
x ""
x "\r\r"
x ""
x "o"
x ""
x "\"Very long2\r"
x "o"
x ""
x "\rC3\r"
x "\rC2\r"
x "\0"
x "\rC4\r"
x "\rC2\r"
x "\0"
x ""
x "xses-mode\r"
x "<"
x "2k"
x "\^C\^C"
x "\^C\^P\"%.6g\"\r"
x "\^C\^[\^L"
x "\^[>\^Xnw\^F\^F\^F"
x "\0\^[>\^[xdelete-region\r"
x "\^C\^[\^L"
x "\^U8\^N"
x "\0\^[>\^[xdelete-region\r"
x "\^C\^[\^L"
x "\^C\^N"
x "\^N\^K\^B\^[k"
x "\^C\^L"
x "\^B\"Very long\r"
x "\^P\^C\^T"
x "\^B\r\r"
x "\^N\^C\^T"
x "\^F\^[o"
x "\^F\^C\^T"
x "\^B\^B\"Very long2\r"
x "\^B\^[o\^F"
x "\^C\^T"
x "\r\^?\^?\^?C3\r"
x "\^N\r\^?\^?\^?C2\r"
x "\^P\0\^N\^F\^C\^C"
x "\r\^?\^?C4\r"
x "\^N\^N\r\^?\^?\^?C2\r"
x "\^F\0\^B\^P\^P"
x "\^C\^C"
x "\^[xses-mode\r"
x "\^[<\^O"
x "\^U2\^[k"
x))
;;Header line
(fset 'ses-exercise-header-row
(concat y ":(revert-buffer t t)\r"
x "<"
x ">"
x "6<"
x ">"
x "7<"
x ">"
x "8<"
x "2<"
x ">"
x "3w"
x "10<"
x ">"
x "2 "
(concat y "\^[:(revert-buffer t t)\r"
x "\^X<"
x "\^X>"
x "\^U6\^X<"
x "\^X>"
x "\^U7\^X<"
x "\^X>"
x "\^U8\^X<"
x "\^U2\^X<"
x "\^X>"
x "\^F\^U3w\^B"
x "\^U10\^X<"
x "\^X>"
x "\^U2\^K"
x))
;;Detecting unsafe formulas and printers
(fset 'ses-exercise-unsafe
(concat y ":(revert-buffer t t)\r"
(concat y "\^[:(revert-buffer t t)\r"
x "p(lambda (x) (delete-file x))\rn"
x "p(lambda (x) (delete-file \"ses-nothing\"))\ry"
x "\0n"
x "(delete-file \"x\"\rn"
x "(delete-file \"ses-nothing\"\ry"
x "\0n"
x "(open-network-stream \"x\" nil \"localhost\" \"smtp\"\ry"
x "\0n"
x "\0\^F\^W\^Yn"
x "\^N(delete-file \"x\"\rn"
x "(delete-file \"ses-nothing\"\ry\^B"
x "\0\^F\^W\^Yn"
x "(open-network-stream \"x\" nil \"localhost\" \"smtp\"\ry\^B"
x "\0\^F\^W\^Yn"
x))
;;Inserting and deleting rows
(fset 'ses-exercise-rows
(concat y ":(revert-buffer t t)\r"
x ""
x "\"%s=\"\r"
x "20"
x "p\"%s+\"\r"
x ""
x "123456789\r"
x "\021"
x ""
x " "
x "(not B25\r"
x "k"
(concat y "\^[:(revert-buffer t t)\r"
x "\^N\^F"
x "\^C\^P\"%s=\"\r"
x "\^U20\^O"
x "\^[p\"%s+\"\r"
x "\^N\^O"
x "123456789\r\^B"
x "\0\^U21\^N\^F"
x "\^C\^C"
x "\^[\^L"
x "\^P\^P(not B25\r\^B"
x "\^N\^[k"
x "jA3\r"
x "19 "
x " "
x "100" ;Make this approx your CPU speed in MHz
x "\^U19\^K"
x "\^P\^F\^K"
x "\^U100\^O" ;Make this approx your CPU speed in MHz
x))
;;Inserting and deleting columns
(fset 'ses-exercise-columns
(concat y ":(revert-buffer t t)\r"
x "\"%s@\"\r"
x "o"
x ""
x "o"
x " "
x "k"
(concat y "\^[:(revert-buffer t t)\r"
x "\^C\^P\"%s@\"\r"
x "\^[o"
x "\^O"
x "\^[o"
x "\^K"
x "\^[k"
x "w8\r"
x "p\"%.7s*\"\r"
x "o"
x ""
x "2o"
x "3k"
x "\"%.6g\"\r"
x "26o"
x "\026\t"
x "26o"
x "0\r"
x "26\t"
x "400"
x "50k"
x "\0D"
x "\^[p\"%.7s*\"\r"
x "\^[o"
x "\^F"
x "\^U2\^[o"
x "\^U3\^[k"
x "\^C\^P\"%.6g\"\r"
x "\^U26\^[o"
x "\0\^U26\t"
x "\^U26\^[o"
x "\^C\^[\^H0\r"
x "\^U26\t"
x "\^U400\^B"
x "\^U50\^[k"
x "\0\^N\^N\^F\^F\^C\^[\^SD"
x))
(fset 'ses-exercise-editing
(concat y ":(revert-buffer t t)\r"
x "1\r"
x "('x\r"
x ""
x ""
(concat y "\^[:(revert-buffer t t)\r"
x "\^N\^N\^N1\r\^B"
x "\^F(\^B'\^Fx\r\^B"
x "\^B\^P\^P\^P\^O"
x "\^_"
x "\r\r"
x "w9\r"
x "\r.5\r"
x "\r 10\r"
x "\^N\r\^B.5\r"
x "\^N\^F\r\^B 10\r"
x "w12\r"
x "\r'\r"
x "\r\r"
x "\r\^A'\r"
x "\r\^A\^D\r"
x "jA4\r"
x "(+ A2 100\r"
x "3\r"
x "(+ A2 100\r\^B"
x "\^P\^P3\r\^B"
x "jB1\r"
x "(not A1\r"
x "\"Very long\r"
x ""
x "h"
x "H"
x ""
x ">\t"
x ""
x ""
x "2"
x ""
x "o"
x "h"
x "\0"
x "\"Also very long\r"
x "H"
x "\0'\r"
x "'Trial\r"
x "'qwerty\r"
x "(concat o<\0"
x "-1o\r"
x "(apply '+ o<\0-1o\r"
x "2"
x "-2"
x "-2"
x "2"
x " "
x "H"
x "\0"
x "\"Another long one\r"
x "H"
x ""
x "<"
x ""
x ">"
x "\0"
x "(not A1\r\^B"
x "\^B\"Very long\r\^B"
x "\^C\^C"
x "\^[h"
x "\^[H"
x "\^C\^C"
x "\^[>\t"
x "\^P\^P\^D"
x "\^P\^D"
x "\^F\^F\^U2\^?"
x "\^P\^?"
x "\^[o"
x "\^[h"
x "\0\^O\^F"
x "\"Also very long\r\^B"
x "\^N\^F\^[H"
x "\0'\r\^B"
x "'Trial\r\^B"
x "\^N\^B'qwerty\r\^B"
x "\^F(concat \^Xo\^[<\0\^N\^N"
x "\^U-1\^Xo\^C\^R\r\^B"
x "(apply '+ \^Xo\^[<\0\^N\^F\^U-1\^Xo\^C\^S\r\^B"
x "\^P\^U2\^?"
x "\^U-2\^?"
x "\^U-2\^D"
x "\^U2\^D"
x "\^B\^P\^P\^K"
x "\^N\^F\^[H"
x "\^B\^P\0\^O"
x "\"Another long one\r\^B"
x "\^N\^N\^F\^[H"
x "\^A\^P\^E"
x "\^C\^C\^[<"
x "\^N\^E"
x "\^[>\^P\^O"
x "\0\^E\^F\^E"
x))
;;Sorting of columns
(fset 'ses-exercise-sort-column
(concat y ":(revert-buffer t t)\r"
(concat y "\^[:(revert-buffer t t)\r"
x "\"Very long\r"
x "99\r"
x "o13\r"
x "\^F99\r"
x "\^F\^[o13\r"
x "(+ A3 B3\r"
x "7\r8\r(* A4 B4\r"
x "\0A\r"
x "\0B\r"
x "\0C\r"
x "o"
x "\0C\r"
x "\0\^P\^P\^P\^C\^[\^SA\r"
x "\^N\0\^P\^P\^P\^C\^[\^SB\r"
x "\^P\^P\^F\0\^N\^N\^F\^F\^C\^[\^SC\r"
x "\^F\^[o\^P\^O"
x "\^B\0\^N\^N\^N\^U\^C\^[\^SC\r"
x))
;;Simple cell printers
(fset 'ses-exercise-cell-printers
(concat y ":(revert-buffer t t)\r"
x "\"4\t76\r"
x "\"4\n7\r"
(concat y "\^[:(revert-buffer t t)\r"
x "\^F\"4\^Q\t76\r\^B"
x "\"4\^Q\n7\r\^B"
x "p\"{%S}\"\r"
x "p(\"[%s]\")\r"
x "p(\"<%s>\")\r"
x "\0"
x "\^B\0\^F\^F"
x "p\r"
x "pnil\r"
x "pses-dashfill\r"
x "48\r"
x "48\r\^B"
x "\t"
x "\0p\r"
x "p\r"
x "\^B\0\^Fp\r"
x "\^Fp\r"
x "pses-dashfill\r"
x "\0pnil\r"
x "5\r"
x "\^B\0\^F\^Fpnil\r"
x "5\r\^B"
x "pses-center\r"
x "\"%s\"\r"
x "\^C\^P\"%s\"\r"
x "w8\r"
x "p\r"
x "p\"%.7g@\"\r"
x "\r"
x "\"%.6g#\"\r"
x "\"%.6g.\"\r"
x "\"%.6g.\"\r"
x "pidentity\r"
x "6\r"
x "\"UPCASE\r"
x "pdowncase\r"
x "(* 3 4\r"
x "p(lambda (x) '(\"Hi\"))\r"
x "p(lambda (x) '(\"Bye\"))\r"
x "\^[p\r"
x "\^[p\"%.7g@\"\r"
x "\^C\^P\r"
x "\^C\^P\"%.6g#\"\r"
x "\^C\^P\"%.6g.\"\r"
x "\^C\^P\"%.6g.\"\r"
x "\^[pidentity\r"
x "6\r\^B"
x "\^N\"UPCASE\r\^B"
x "\^[pdowncase\r"
x "(* 3 4\r\^B"
x "p(lambda\^Q (x)\^Q '(\"Hi\"))\r"
x "p(lambda\^Q (x)\^Q '(\"Bye\"))\r"
x))
;;Spanning cell printers
(fset 'ses-exercise-spanning-printers
(concat y ":(revert-buffer t t)\r"
x "p\"%.6g*\"\r"
(concat y "\^[:(revert-buffer t t)\r"
x "\^[p\"%.6g*\"\r"
x "pses-dashfill-span\r"
x "5\r"
x "5\r\^B"