home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / misc / 544 / oribin / doc / origami.doc < prev    next >
Encoding:
Text File  |  1991-07-23  |  55.1 KB  |  1,969 lines

  1. M
  2.  
  3.  
  4.  
  5.  
  6.  
  7.                           Origami User Manual
  8.  
  9.  
  10.  
  11. J②                      An universal folding editor
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. J②                              _✓M_✓a_✓r_✓t_✓i_✓n _✓G_✓r_✓e_✓e_✓n
  25. J②                            _✓C_✓h_✓a_✓r_✓l_✓i_✓e _✓L_✓a_✓w_✓r_✓e_✓n_✓c_✓e
  26. J②                             _✓M_✓i_✓c_✓h_✓a_✓e_✓l _✓H_✓a_✓a_✓r_✓d_✓t
  27. J②                           _✓W_✓o_✓l_✓f_✓g_✓a_✓n_✓g _✓S_✓t_✓u_✓m_✓v_✓o_✓l_✓l
  28. J②                           _✓M_✓i_✓c_✓h_✓a_✓e_✓l _✓S_✓c_✓h_✓w_✓i_✓n_✓g_✓e_✓n
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45. J②                           Aachen, July 1991
  46.  
  47.  
  48.  
  49.                                      GOrigami User Guide
  50.  
  51.  
  52.                                            HMichael Haardt
  53.  
  54.                                           Auf der Hoern 40
  55.                                              5100 Aachen
  56.                                                 Germany
  57.  
  58.  
  59.                              July 23, 1991
  60.  
  61.  
  62.  
  63.  
  64.  
  65.                                  - 2 -
  66.  
  67.  
  68.  
  69.  
  70. J②                                _✓A_✓B_✓S_✓T_✓R_✓A_✓C_✓T
  71.  
  72. J②           This document explains the principles of  folding  edi-
  73.       tors in general, because most people have never used such an
  74.       editor.  It gives an example of an Origami  editing  session
  75.       to  show the advantages of folding program sources.  It then
  76.       explains how to compile and install Origami.  All  functions
  77.       of  Origami  are  listed  and described.  It never refers to
  78.       concrete keys, because the Emacs-like and the  TDS  keybind-
  79.       ings  are  completely different.  This document explains the
  80.       Origami control language (OCL) detail, because very  compli-
  81.       cated editor commands can be created.
  82.  
  83.  
  84.  
  85. _✓1.  _✓I_✓n_✓t_✓r_✓o_✓d_✓u_✓c_✓t_✓i_✓o_✓n
  86.  
  87. _✓1._✓1.  _✓O_✓r_✓i_✓g_✓a_✓m_✓i
  88.  
  89. Origami is a `folding editor', similar to, and inspired by,  the  editor
  90. included  in the Inmos TDS (Transputer Development System).  Those of us
  91. who have become familiar with the TDS editor have long bemoaned the lack
  92. of a similar editor for use with other languages, for example Pascal and
  93. C.
  94.  
  95.      Origami is not a word processor  (although  many  of  its  features
  96. would  be  useful  in  a word processor), but it comes into its own as a
  97. program editor for structured languages and documents.  The  structuring
  98. of  the  code  or text is obvious from the screen display (if Origami is
  99. sensibly used!), although no actual code may be visible.
  100.  
  101.      Existing files, not produced using Origami, may  be  imported  into
  102. Origami,  and  then  folded  up for future use, and ease of development.
  103. These files may be further edited either using  Origami  or  some  other
  104. editor  (if you can bear to use one after Origami!), and compiled in the
  105. normal way.
  106.  
  107. _✓1._✓2.  _✓T_✓h_✓e _✓F_✓o_✓l_✓d_✓i_✓n_✓g _✓E_✓d_✓i_✓t_✓o_✓r
  108.  
  109. A `folding editor' extends the principle of tree structured  directories
  110. to  editing  text  files.  This allows the simultaneous display of large
  111. amounts of text by `folding' sections of text away behind a  descriptive
  112. heading.   This  results  in  a  tree  structure  very similar to a sub-
  113. directory structure of, for example, UNIX.
  114.  
  115.      By suitable structuring of a text it should be  possible,  in  most
  116. circumstances,  to ensure that no display exceeds a single screen at any
  117. time.  To access text which is folded away you can either ENTER the con-
  118. taining  fold, in which case the contents of the fold and its header are
  119. the only displayed text, or you can OPEN the fold,  in  which  case  the
  120. contents are displayed in the context of the surrounding text.
  121.  
  122.  
  123. J②                             July 23, 1991
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                  - 3 -
  130.  
  131.  
  132.      The advantage of this system is that it  eliminates  the  need  for
  133. seemingly  endless  paging  through  long  files  to find the section of
  134. interest, allowing you to move down the tree  structure,  following  the
  135. (hopefully) descriptive headers to locate the text you require.
  136.  
  137. _✓1._✓3.  _✓E_✓x_✓a_✓m_✓p_✓l_✓e_✓s _✓o_✓f _✓O_✓r_✓i_✓g_✓a_✓m_✓i _✓F_✓o_✓l_✓d_✓i_✓n_✓g
  138.  
  139. As an example, a Pascal file might look like this at the top  level  (eg
  140. immediately after starting Origami):
  141.  
  142. program test;
  143. ...  CONSTs
  144. ...  TYPEs
  145. ...  VARs
  146. ...  procedures
  147. ...  main body of code
  148.  
  149. OPENing the VARs fold might lead to the following display:
  150.  
  151. program test;
  152. ...  CONSTs
  153. ...  TYPEs
  154. {{{  VARs
  155. VAR  i : integer;
  156.      x : real;
  157. }}}
  158. ...  procedures
  159. ...  main body of code
  160.  
  161. ENTERing the procedures fold might give:
  162.  
  163. {{{  procedures
  164. ...   statistical procedures
  165. ...   string handling procedures
  166. ...   procedure user_input
  167. }}}
  168.  
  169. Each of these folds can be ENTERed further until actual code is  reached
  170. - for example if we ENTER the `procedure user_input' fold we might find:
  171.  
  172. {{{  procedure user_input
  173. procedure user_input(prompt : str_type; var reply : str_type);
  174. ...  local declarations
  175. ...  local procedures
  176.   begin
  177.     repeat
  178.       write(prompt);
  179.       readln(reply);
  180.     until verify_reply(reply);
  181.   end;
  182. }}}
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.                              July 23, 1991
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                  - 4 -
  196.  
  197.  
  198. _✓2.  _✓I_✓n_✓s_✓t_✓a_✓l_✓l_✓i_✓n_✓g _✓O_✓r_✓i_✓g_✓a_✓m_✓i
  199.  
  200. _✓2._✓1.  _✓C_✓o_✓m_✓p_✓i_✓l_✓i_✓n_✓g _✓O_✓r_✓i_✓g_✓a_✓m_✓i
  201.  
  202. Before compiling Origami,  you  have  to  generate  makefiles  for  your
  203. machine.  There are cpp-makefiles with explanations on how to do this at
  204. their heads.  If you port Origami to a new machine,  please  change  the
  205. cpp-makefile  and  send  me  cdiffs for everything.  Origami tries to be
  206. POSIX compatible.  Not BSD, not v7, not system V.  POSIX!  After compil-
  207. ing  everything, copy the binaries to /usr/local/bin.  I suggest to copy
  208. the keybind-files and the learn directory to a  public  readable  direc-
  209. tory, where every user can get them to modify them for his personal use.
  210. At last, you have to make your choice, which keybindings you  personally
  211. want to use.  Read the next sections to see how to install them.
  212.  
  213. _✓2._✓2.  _✓S_✓t_✓a_✓r_✓t_✓u_✓p-_✓f_✓i_✓l_✓e_✓s
  214.  
  215. Origami uses startup-files to determine its behaviour.  Every used  com-
  216. mand  must be bound to keyboard-inputs explicitly.  You can also declare
  217. ``user defined commands''.  These features are explained in the  chapter
  218. ``Programming in OCL''.
  219.  
  220. Used startup-files and their meanings:
  221.  
  222. $HOME/.origamirc
  223.      This file contains the keybinding table and all user  defined  com-
  224.      mands.   Every  command  you  want to use is bound to a sequence of
  225.      keyboard  inputs.    Origami   won't   start   missing   the   file
  226.      ``$HOME/.origamirc''.
  227.  
  228. $HOME/.origamibind
  229.      This file contains a help,  decribing  the  keysequences  for  each
  230.      bound  command.  Its displayed when calling the command ``describe-
  231.      bindings''.
  232.  
  233. $HOME/.origamihelp
  234.      There is no standardfile for it.  It's displayed using the  special
  235.      origami  command  ``O_HELP''.   You  can use it for ``user-defined-
  236.      helps'' (all the stuff you always forget).
  237.  
  238. The      namebase      ``.origami''       in       ``$HOME/.origamirc'',
  239. ``$HOME/.origamibind'' and ``$HOME/.origamihelp'' is generated using the
  240. commandname (argv[0]) and the following rules:
  241.  
  242. j⇨.J⇨    If there are any path-limiters ``/'', only the string following the
  243.      last ``/'' is used.
  244.  
  245. j⇨.J⇨    All ``.'' at begin of the remaining string are removed.
  246.  
  247. j⇨.J⇨    The startupfilenames are generated by adding ``$HOME/.''  at  front
  248.      and ``rc'', ``bind'' or ``help'' at end of the string.
  249.  
  250. This way of getting the startup-files makes it possibly to  use  origami
  251. with  several  startup-files.   Renaming  the  binary  or  using  a link
  252.  
  253.  
  254.  
  255.                              July 23, 1991
  256.  
  257.  
  258.  
  259.  
  260.  
  261.                                  - 5 -
  262.  
  263.  
  264. switches to other startup-files.  For example:
  265.  
  266. origami
  267.      using a normal text-installation.  No special commands.
  268.      Uses ``$HOME/.origamirc'', ...
  269.  
  270. morigami
  271.      using special mail-macros.
  272.      Uses ``$HOME/.morigamirc'', ...
  273.  
  274. To use such an environment, create a link named  ``morigami''  and  gen-
  275. erate  startup-files ``$HOME/.morigamirc``, ...  containing bindings and
  276. macros needed for mailing.
  277.  
  278. _✓2._✓3.  _✓K_✓e_✓y_✓b_✓i_✓n_✓d_✓i_✓n_✓g_✓s
  279.  
  280. _✓2._✓3._✓1.  _✓S_✓y_✓n_✓o_✓p_✓s_✓i_✓s _✓o_✓f _✓K_✓e_✓y_✓b_✓i_✓n_✓d
  281.  
  282. The keybind program compiles a  keybinding-file  into  the  startupfiles
  283. ``$HOME/.origamirc'' and ``$HOME/.origamibind''.  Its synopsis is:
  284.  
  285.         keybind [-hlsv?] [-o<namebase>] _✓k_✓e_✓y_✓b_✓i_✓n_✓d_✓i_✓n_✓g-_✓f_✓i_✓l_✓e
  286.         keybind -k<number>
  287.  
  288. Options:
  289.  
  290. -s   the entries in bind are sorted
  291.  
  292. -o<name>
  293.      the  outputfiles  are  named  $HOME/<name>rc  and  $HOME/<name>bind
  294.      instead  of  $HOME/.origamirc  etc.   Useful  for using origami via
  295.      link, renamed binary or with commandline option ``-k<basename>''.
  296.  
  297. -k<number>
  298.      display the names of the origami function with token-value  number.
  299.      This  is  useful,  if keybind complains about your keybinding (dif-
  300.      ferent functions bound to the same keysequence etc.).
  301.  
  302. -?   display usage
  303.  
  304. -h   same
  305.  
  306. -l   list all keywords known in origami and keybind.
  307.  
  308. -v   during compilation of the sourcefile print information about needed
  309.      resources.
  310.  
  311. Be careful with keybind, it overwrites existing files!
  312.  
  313. _✓2._✓3._✓2.  _✓T_✓h_✓e _✓k_✓e_✓y_✓b_✓i_✓n_✓d_✓i_✓n_✓g _✓f_✓i_✓l_✓e
  314. J②
  315. This file contains a list of ASCII rules to bind keysequences to Origami
  316. functions.   It  looks  like  LISP,  but it isn't LISP.  The language is
  317. named OCL  (Origami  control  language).   This  section  describes  all
  318.  
  319.  
  320. J②                             July 23, 1991
  321.  
  322.  
  323.  
  324.  
  325.  
  326.                                  - 6 -
  327.  
  328.  
  329. functions  used  for  binding  functions to keys.  OCL is described in a
  330. later chapter, because it is not necessary for  keybindings  and  it  is
  331. very  powerful,  perhaps  too  powerful for learning it while installing
  332. Origami.
  333. J②
  334. (defbinding <name-of-binding>)
  335.  
  336.    Defines a name for the binding, which is displayed in the statusline
  337.    of Origami.  Multiple usage of this command is not allowed.  The
  338.    name is limited to 16 characters.
  339. J②
  340. (keybind <operation> <keysequence>)
  341.  
  342.    The Origami-operation named <operation> is bound to the keyboard
  343.    input  <keysequence>.   The  file  .origamibind  contains  an  entry
  344.    ``<operation> <keysequence>''
  345. J②
  346. (alias <name> <keysequence>)
  347.  
  348.    The keyboard input <keysequence> can be named $<name> in the follow-
  349.    ing definitions.  Using $<name> puts name in the file .origamibind
  350.    instead of the sequence of keys.
  351. J②
  352. <_✓n_✓a_✓m_✓e> is a normal identifier
  353. J②
  354. A <_✓k_✓e_✓y_✓s_✓e_✓q_✓u_✓e_✓n_✓c_✓e> is a sequence of <key> enclosed in parentheses.
  355. J②
  356. <_✓k_✓e_✓y> specifies a single key (or two keys,  because  M-"a  requires  two
  357. keystrokes):
  358.  
  359. "_✓x          is a single character
  360.  
  361. _✓C-_✓X         is control-x
  362.  
  363. _✓C-?         is the delete-key (127)
  364.  
  365. _✓M-"_✓x        means Meta-key (ESC) followed by x (case-sensitive)
  366.  
  367. _✓M-_✓C-_✓X       META-control-x
  368.  
  369. $_✓n_✓a_✓m_✓e       represents the keys defined in (alias name ..)
  370. J②
  371. Newlines can be used anywhere in the  text  between  syntactical  struc-
  372. tures.   Comments  can  be  put  in the same way.  A comment starts with
  373. ``;'' and ends at the end of the line.  The braces ``{'' and ``}''  have
  374. the  same effect as ``;'', so you can use origami with language None and
  375. filed-folds are included automatically.
  376.  
  377. These aliases can be used without declaration:
  378.  
  379. J②
  380.  
  381.  
  382.                              July 23, 1991
  383.  
  384.  
  385.  
  386.  
  387.  
  388.                                  - 7 -
  389.  
  390.  
  391.  
  392.         $esc = escape-key = 27
  393.         $tab = tab-key = 9
  394.         $return = return-key = 13 (yes!)
  395.  
  396. The following default aliases are available, if your  terminal  has  the
  397. termcap  capabilities  in  parentheses:  $backspace (kb), $backtab (kB),
  398. $rubout (kD), $clreol (kE), $delline (kL), $home (kh),  $end  (kH),  $up
  399. (ku),  $down  (kd), $left (kl), $right (kr), $prev_page (kN), $next_page
  400. (kP) $f0 (k0), $f1 (k1), $f2 (k2), $f3 (k3), $f4  (k4),  $f5  (k5),  $f6
  401. (k6), $f7 (k7), $f8 (k8), $f9 (k9), $f10 (k;)
  402.  
  403.      Your termcap(5) manual explains all capabilities  in  detail.   The
  404. above  keys mentioned do not represent all capabilities, but those which
  405. are frequently used.
  406.  
  407. _✓2._✓3._✓3.  _✓E_✓x_✓a_✓m_✓p_✓l_✓e
  408.  
  409. The following examples are only written to  explain  the  syntax.   They
  410. will not really work, because you will not be able to move the cursor or
  411. even quit Origami.
  412.  
  413.         ; This is a simple keybind-file
  414.         (keybind newline-and-indent C-M)
  415.  
  416. The operation `newline-and-indent' is activated through C-M.   The  key-
  417. bindinghelp contains `newline-and-indent C-M'.  You can achieve the same
  418. keybinding by using an alias:
  419.  
  420.         ; This keybinding uses alias
  421.         (alias return C-M)
  422.         (keybind newline-and-indent $return)
  423.  
  424. The operation `newline-and-indent' is also activated  through  C-M,  but
  425. the keybinding help contains now `newline-and-indent return'.
  426.  
  427. _✓2._✓4.  _✓R_✓e_✓q_✓u_✓i_✓r_✓e_✓d _✓t_✓e_✓r_✓m_✓c_✓a_✓p _✓c_✓a_✓p_✓a_✓b_✓i_✓l_✓i_✓t_✓i_✓e_✓s
  428.  
  429. Origami uses the termcap database.  It requires a  few  capabilities  to
  430. work.   It does not need intelligent terminals.  The following capabili-
  431. ties are required:
  432.  
  433. cm   cursor motion
  434.  
  435. ce   clear to end of line
  436.  
  437. cd   clear to end of display
  438.  
  439. co   number of columns
  440.  
  441. li   number of lines
  442.  
  443. The following capabilities are optional:
  444.  
  445.  
  446.  
  447.  
  448.                              July 23, 1991
  449.  
  450.  
  451.  
  452.  
  453.  
  454.                                  - 8 -
  455.  
  456.  
  457. ti   termcap usage initialization
  458.  
  459. te   termcap usage end
  460.  
  461. al   add line
  462.  
  463. dl   delete line
  464.  
  465. so   stand out
  466.  
  467. se   standout end
  468.  
  469. sg   standout glitch
  470.  
  471. _✓2._✓5.  _✓L_✓i_✓m_✓i_✓t_✓a_✓t_✓i_✓o_✓n_✓s _✓o_✓f _✓O_✓r_✓i_✓g_✓a_✓m_✓i
  472.  
  473. Origami stores the complete file in memory while  editing  which  limits
  474. the  size of files to 24 kByte on PC MINIX 1.5.10.  The length of a line
  475. is limited to 256 characters, and the depth of  folding  is  limited  to
  476. 256.   When  reading  files, longer lines are splitted.  Indenting folds
  477. may generate long lines and this case isn't  handled  correct.   Origami
  478. expands  tab characters to blanks.  You should never edit Makefiles with
  479. Origami, because make needs tab characters.  Otherwise, it is unable  to
  480. work.  In my opinion, this is a (documented!) bug in make.  If your file
  481. contains `{{{', `:::', `...' or `}}}', Origami will  think  of  them  as
  482. folding  marks!   Origami  may  die  on such things.  There is a problem
  483. editing ``C''-files, if you use the preprocessor-mark ``#''  within  the
  484. fold-structure.  Origami only allows input, when the current position is
  485. behind current indentation.  Use option -p to  change  the  position  of
  486. leading  ``#''  while writing or reading files.  If Origami is reading a
  487. file or a pipe, you cannot abort it.  So you cannot abort  the  entering
  488. of a filed fold.
  489.  
  490. _✓3.  _✓U_✓s_✓i_✓n_✓g _✓O_✓r_✓i_✓g_✓a_✓m_✓i
  491.  
  492. _✓3._✓1.  _✓G_✓e_✓t_✓t_✓i_✓n_✓g _✓S_✓t_✓a_✓r_✓t_✓e_✓d
  493.  
  494. At this point, you have the choice either  to  read  the  next  chapters
  495. about  using  Origami  or  to  use the tutorial to learn by doing.  This
  496. tutorial is similar to the well-known teach-emacs tutorial.  You need  a
  497. copy of the learn directory.  Change to this directory and type start-me
  498. <return>.  This tutorial must be used in Emacs-mode.
  499.  
  500.      It is assumed, that Origami is installed and ready to use  on  your
  501. system.   It  is  invoked  by  typing `origami' after the system prompt.
  502. Filenames may be typed after `origami' - if this is not  done  a  prompt
  503. for a filename will be issued.
  504.  
  505.      If the file being read contains tab characters,  Origami  will  ask
  506. for  the  tab size in order to preserve your formatting.  If you have no
  507. write permissions for the specified file, Origami will switch  to  view-
  508. only mode.  Look at the manual page for advanced command line options.
  509.  
  510.  
  511.  
  512.  
  513.  
  514.                              July 23, 1991
  515.  
  516.  
  517.  
  518.  
  519.  
  520.                                  - 9 -
  521.  
  522.  
  523. _✓3._✓2.  _✓T_✓h_✓e _✓S_✓c_✓r_✓e_✓e_✓n _✓F_✓o_✓r_✓m_✓a_✓t
  524.  
  525. On starting an Origami session, a status line appears near the bottom of
  526. the screen.  This line will remain throughout your edit, and any prompts
  527. or warnings issued by the editor will appear below this  line.   If  you
  528. started  typing a key sequence bound to a command, this sequence will be
  529. displayed under the status line, too.  If the second  character  of  the
  530. line  is  a  star,  your  file  contains  unsaved  changes.  The current
  531. language and the active modes are indicated in parentheses:
  532.  
  533. Folding/F   is displayed during creating a fold.
  534.  
  535. DefMac/D    is displayed during defining a keyboardmacro.
  536.  
  537. ExMac/E     is displayed during the execution of a  macro  (keyboard  or
  538.             fix).
  539.  
  540. View/V      is displayed if origami is in view-only mode.
  541.  
  542. Over/O      Origami is in overwrite-mode.
  543.  
  544. ArgRep/R    Origami is in argument-repeat-mode.
  545.  
  546. AutoSave/S  Origami is in auto-save-mode.  Origami will save your  files
  547.             periodically.
  548.  
  549. The short forms are used if the statusline is too long.  If there  is  a
  550. name defined in your keybinding file, it is displayed to the left of the
  551. language indicator.  If the filename is to long to be displayed  in  the
  552. statusline,  origami  tries to cut the path and displays ``...'' instead
  553. of the missing part of the path.
  554.  
  555. _✓3._✓3.  _✓T_✓h_✓e _✓E_✓d_✓i_✓t_✓o_✓r _✓B_✓u_✓f_✓f_✓e_✓r_✓s
  556.  
  557. There are three buffers in Origami.  The `move buffer' that contains  up
  558. to one textline, the `pick buffer' in which several lines can be accumu-
  559. lated before inserting them back into the file, and the `delete buffer',
  560. which  holds  the last deleted line (in each case a line can be a closed
  561. fold, with all its contents).  The operations of these buffers  in  Ori-
  562. gami are slightly different from TDS - move, delete and pick buffers are
  563. lost on exit from Origami.
  564.  
  565. _✓3._✓4.  _✓P_✓r_✓o_✓c_✓e_✓s_✓s_✓i_✓n_✓g _✓O_✓r_✓i_✓g_✓a_✓m_✓i _✓F_✓i_✓l_✓e_✓s
  566.  
  567. If a saved file should pass a particular compiler,  the  fold  structure
  568. must  appear  to  the compiler as comments.  As comments differ from one
  569. language to another, this means choosing the language  before  saving  a
  570. new  file  for the first time, although on reading a file back into Ori-
  571. gami the language type is retained (provided the file contained at least
  572. one fold).  As a consequence of this you should take care not to include
  573. strings which the compiler would recognise as comments within  the  fold
  574. header,  as  this  will lead to nested comments which are not allowed in
  575. some languages.
  576.  
  577.  
  578.  
  579.  
  580.                              July 23, 1991
  581.  
  582.  
  583.  
  584.  
  585.  
  586.                                  - 10 -
  587.  
  588.  
  589.      Origami knows the languages None, Occam,  Pascal,  C,  Lisp,  Roff,
  590. Fortran,  TeX, Script, User and Inmos.  You can specify your own comment
  591. strings using language User.  Inmos allows to edit  files  generated  by
  592. Tds  and  MultiTool  without  converting them.  Script is useful for sh,
  593. csh, remind etc.
  594.  
  595. _✓4.  _✓A_✓l_✓l _✓O_✓r_✓i_✓g_✓a_✓m_✓i _✓f_✓u_✓n_✓c_✓t_✓i_✓o_✓n_✓s
  596.  
  597. This chapter lists all Origami functions with their keybind names.  Most
  598. of  them have an Emacs-like and a TDS name.  If you want to create a new
  599. keybinding, regard the Emacs-like and the TDS binding as examples.
  600.  
  601. _✓4._✓1.  _✓M_✓o_✓v_✓i_✓n_✓g _✓a_✓r_✓o_✓u_✓n_✓d
  602.  
  603. backward-character, O_LEFT
  604.  
  605. forward-character, O_RIGHT
  606.  
  607. previous-line, O_UP
  608.  
  609. next-line, O_DOWN
  610.  
  611. beginning-of-line, O_START_OF_LINE
  612.  
  613. end-of-line, O_END_OF_LINE
  614.  
  615. backward-word, O_WORD_LEFT
  616.  
  617. forward-word, O_WORD_RIGHT
  618.  
  619. previous-page, O_PAGE_UP
  620.  
  621. next-page, O_PAGE_DOWN
  622.  
  623. beginning-of-fold, O_TOP_OF_FOLD
  624.  
  625.    Moves to the beginning of the entered fold.
  626.  
  627.    end-of-fold, O_BOT_OF_FOLD
  628.  
  629.    Moves to the end of the entered fold
  630.  
  631.    goto-line, O_GOTO_LINE
  632.  
  633.    Prompts for a line number and moves cursor to this line.  If needed,
  634.    Origami opens closed folds to reach this line.  Warning: goto-line
  635.    counts lines from the beginning of an entered fold.  This may be not
  636.    the beginning of the file.
  637.  
  638.    _✓4._✓2.  _✓F_✓o_✓l_✓d_✓i_✓n_✓g
  639.  
  640.    open-fold, O_OPEN_FOLD
  641.  
  642.  
  643.  
  644.  
  645.  
  646.                              July 23, 1991
  647.  
  648.  
  649.  
  650.  
  651.  
  652.                                  - 11 -
  653.  
  654.  
  655.    Open fold, and show the contents in the context of the current
  656.    level.  You can not open file-folds, only entering them is allowed.
  657.  
  658.    close-fold, O_CLOSE_FOLD
  659.  
  660.    If the cursor is located within an opened fold, close this fold.
  661.  
  662.    enter-fold, O_ENTER_FOLD
  663.  
  664.    Enter the fold at the current line.  Entering a filed-fold saves the
  665.    current file.
  666.  
  667.    exit-fold, O_EXIT_FOLD
  668.  
  669.    Exit fold.  Exiting a filed fold saves it.
  670.  
  671.    unfold-fold, O_REMOVE_FOLD
  672.  
  673.    Remove fold at the current line - deletes the fold structure and
  674.    inserts the contents of the fold instead.
  675.  
  676.    create-fold, O_CREATE_FOLD
  677.  
  678.    Create fold.  Use twice - first to indicate the top of a new fold,
  679.    then to indicate the bottom of it.  Lines to be included within the
  680.    fold must not be indented less than the fold itself.  Several other
  681.    keys are disabled while Create Fold is in operation.
  682.  
  683.    create-auto-fold, O_AUTO_FOLD
  684.  
  685.    Autofold: takes all lines to the first blank line, folds them up,
  686.    inserts the first line as the fold header, and positions the cursor
  687.    on the next non-blank line.
  688.  
  689.    auto-header, O_FIRST_LINE_TO_FOLD_HEADER
  690.  
  691.    When the cursor is on a closed fold this key will copy the first
  692.    line enclosed by that fold onto the fold line.
  693.  
  694.    toggle-create-file-fold, O_FILE_FOLD
  695.  
  696.    File (create new file) or unfile a fold.
  697.    Creating a file writes the contents of the fold into a new file
  698.    named by the fold-comment (up to the first whitespace).  Unlike TDS
  699.    origami does not create a new filename, if the chosen one is already
  700.    used.  It doesn't matter, if you change the fold-comment after fil-
  701.    ing a fold, because the filename is stored internally.
  702.    Unfile a filed-fold removes the link and puts the file-contents into
  703.    the text.  Unlike TDS origami doesn't remove the file.
  704.  
  705.    open-file-fold, O_ATTACH_FILE
  706.  
  707.    Attach a file to a fold.  This function open a existing file instead
  708.    of creating a new one (and thus differs from O_FILE_FOLD).  The
  709.  
  710.  
  711.  
  712.                              July 23, 1991
  713.  
  714.  
  715.  
  716.  
  717.  
  718.                                  - 12 -
  719.  
  720.  
  721.    filename is taken from the comment of the empty fold the cursor is
  722.    placed on.  The filename begins behind the foldmark and ends at the
  723.    first whitespace.  The rest of the line has no influence on the
  724.    attach.  After attaching files you can change the fold-header.
  725.    Fileinformation are stored internally.
  726.  
  727.    _✓4._✓3.  _✓E_✓d_✓i_✓t_✓i_✓n_✓g
  728.  
  729.    delete-to-end-of-line, O_DEL_TO_EOL
  730.  
  731.    Delete to end of line. There is no `undo' for this operation.
  732.  
  733.    delete-line, O_DEL_LINE
  734.  
  735.    Transfers the current line to the `delete buffer', and overwrite the
  736.    old contents of the delete buffer.
  737.  
  738.    undo-delete-line, O_UNDEL_LINE
  739.  
  740.    Transfers the line currently stored in the delete buffer back into
  741.    the file before the current line.  This can be done for exact one
  742.    line.
  743.  
  744.    delete-character, O_DEL_CHAR_RIGHT
  745.  
  746.    Delete character under the cursor.  If the cursor was at the right
  747.    margin, the next line will be appended to this line.
  748.  
  749.    delete-previous-character, O_DELETE
  750.  
  751.    Deletes the character to the left of the cursor.  If the cursor was
  752.    at the left margin, this line will be appended to the previous line.
  753.  
  754.    undo-delete-character
  755.  
  756.    Undeletes the last deleted character.  Until the next ``O_DELETE''
  757.    or ``O_DEL_CHAR_RIGHT'' the character inserted in the text is always
  758.    the same.
  759.  
  760.    transpose-characters
  761.  
  762.    transposes the character left of the cursor with the character under
  763.    the cursor and moves the cursor right one character.
  764.  
  765.    case-word-capitalize
  766.  
  767.    Capitalizes the character under the cursor and puts the rest of the
  768.    word to lower case.  If the character under cursor is no letter,
  769.    nothing happens, otherwise it moves to the next non-letter after the
  770.    word.
  771.  
  772.    case-word-upper
  773.  
  774.  
  775.  
  776.  
  777.  
  778.                              July 23, 1991
  779.  
  780.  
  781.  
  782.  
  783.  
  784.                                  - 13 -
  785.  
  786.  
  787.    Same as case-word-capitalize, but changes all letters to capitals.
  788.  
  789.    case-word-lower
  790.  
  791.    Same as case-word-capitalize, but changes all letters to small ones.
  792.  
  793.    O_TOGGLE_CASE
  794.  
  795.    Characters under the cursor change their case.
  796.  
  797.    newline-and-indent, O_RETURN
  798.  
  799.    Opens the line at cursor position and indents the right part like
  800.    the left part.  This works for fold comments only at end of line.
  801.  
  802.    kill-line, O_PICK
  803.  
  804.    Removes a line from the file and adds it to the end of the `pick
  805.    buffer'.  Note that the `pick buffer' is lost on exiting Origami,
  806.    unlike TDS.
  807.  
  808.    copy-to-kill-buffer, O_COPY_PICK
  809.  
  810.    Copies a line to the end of the `pick buffer' without deleting it
  811.    from the file.  Note that the `pick buffer' is lost on exiting Ori-
  812.    gami, unlike TDS.
  813.  
  814.    fold-kill-buffer, O_PUT_PICK
  815.  
  816.    Places the `pick buffer' before the current line.
  817.  
  818.    move-line, O_MOVE
  819.  
  820.    If the move buffer is empty, the current line from the file is moved
  821.    to the `move buffer'.  Otherwise the `move buffer' is inserted
  822.    before the current line.  Note that the `move buffer' is lost on
  823.    exiting Origami, unlike TDS.
  824.  
  825.    double-line, O_COPY
  826.  
  827.    Duplicates the current line in the file.  Lines containing filed-
  828.    folds cannot be duplicated.
  829.  
  830.    _✓4._✓4.  _✓S_✓e_✓a_✓r_✓c_✓h _✓a_✓n_✓d _✓r_✓e_✓p_✓l_✓a_✓c_✓e
  831.  
  832.    search-forward, O_FIND
  833.  
  834.    Prompts for a search string and displays next occurence.  An empty
  835.    search string uses the last search string.
  836.  
  837.    search-reverse, O_FIND_REVERSE
  838.  
  839.    Same as search-forward, but searches backward.
  840.  
  841.  
  842.  
  843.  
  844.                              July 23, 1991
  845.  
  846.  
  847.  
  848.  
  849.  
  850.                                  - 14 -
  851.  
  852.  
  853.    replace-string
  854.  
  855.    Asks for a search and a replace string and replaces all occurences.
  856.  
  857.    query-replace-string
  858.  
  859.    Same as replace-string, but asks before replacing each occurence.
  860.  
  861.    incremental-search
  862.  
  863.    Searches the text for a string.  String can be entered incremental.
  864.    Deleting characters invokes a jump to the position, where the char-
  865.    acter was added to the search-string.  Adding a character tries to
  866.    find the string.  Aborting this command jumps to the calling-
  867.    position.    O_RETURN   ends   the   search.    O_UP,   O_LEFT   and
  868.    O_FIND_REVERSE switch the searchdirection to backwards and search
  869.    the string.  O_DOWN, O_RIGHT and O_FIND switch the searchdirection
  870.    to forward and search the string.
  871.  
  872.    incremental-reverse
  873.  
  874.    Same as ``incremental-search'', but it starts with searchdirection
  875.    backwards.
  876.  
  877.    _✓4._✓5.  _✓F_✓i_✓l_✓e_✓s
  878.  
  879.    read-file, O_OPEN_NEW_FILE
  880.  
  881.    Read another file for editing, saving the current one if required.
  882.  
  883.    next-file
  884.  
  885.    Read next file given in commandline, saving the current one if
  886.    required.
  887.  
  888.    previous-file
  889.  
  890.    Read previous file given in commandline, saving the current one if
  891.    required.
  892.  
  893.    save-file, O_SAVE_FILE
  894.  
  895.    saves the current file with the current name and language.
  896.  
  897.    write-file
  898.  
  899.    Prompts for a filename and `listing-mode'.  The text is written to a
  900.    new file with the current language.  If `listing-mode' is set, the
  901.    generated file is modified in the following way:
  902.  
  903.            the `language-definition-line' is removed
  904.            in `begin-fold'-comments `{{{' are removed
  905.            the `end-fold'-comments are removed
  906.  
  907.  
  908.  
  909.  
  910.                              July 23, 1991
  911.  
  912.  
  913.  
  914.  
  915.  
  916.                                  - 15 -
  917.  
  918.  
  919.    While using the language `Tds' it is impossible to set `listing-
  920.    mode', because the the generated files have an incompatible struc-
  921.    ture.
  922.  
  923.    insert-file, O_INSERT_FILE
  924.  
  925.    Insert File.  Prompts for a filename, and imports this file into the
  926.    file being edited at the current position.
  927.  
  928.    filter-buffer
  929.  
  930.    Filters the current text.  Origami prompts for the name of a filter.
  931.    The current text is saved and piped through this filter.  Origami
  932.    tries to move the cursor to the line where the cursor stood before
  933.    executing this command.  Environment variables ORIFILE, ORILINE and
  934.    ORIWORD are set to current filename, textline and word.
  935.  
  936.    pipe-from-command
  937.  
  938.    Prompts for a command.  This will be executed and its standard out-
  939.    put is inserted in the text at current position.  Environment vari-
  940.    ables ORIFILE, ORILINE and ORIWORD are set to current filename,
  941.    textline and word.
  942.  
  943.    pipe-to-command
  944.  
  945.    Prompts for a command.  The current file will be piped to this com-
  946.    mand as standard input.  Environment variables ORIFILE, ORILINE and
  947.    ORIWORD are set to current filename, textline and word.
  948.  
  949.    _✓4._✓6.  _✓M_✓a_✓c_✓r_✓o_✓s
  950.  
  951.    define-macro, O_DEFINE_MACRO
  952.  
  953.    Records all keys into the keyboard macro buffer until define-macro
  954.    is pressed again.  Calling fix-macros is allowed during define-
  955.    macro.
  956.  
  957.    execute-macro, O_EXECUTE_MACRO
  958.  
  959.    Call keyboard macro.
  960.  
  961.    execute-macro-??, O_CALL_FIX_?? (1<=??<=64)
  962.  
  963.    execute the fix-macro with number ??.  These macrobuffers are also
  964.    used from (defmacro ...  ) in keybind, so that using these operation
  965.    has the same effect as calling the keysequence from macro!.  Buffers
  966.    not used from keybind are empty.
  967.  
  968.    O_DEFINE_FIX
  969.  
  970.    Asks for the number of the fix macro buffer.  The contents of the
  971.    keyboard macro buffer is copied to this fix macro buffer.  Using
  972.    (deffun .. ) in keybind makes it impossible to overwrite the fix
  973.  
  974.  
  975.  
  976.                              July 23, 1991
  977.  
  978.  
  979.  
  980.  
  981.  
  982.                                  - 16 -
  983.  
  984.  
  985.    buffer.
  986.  
  987.    _✓4._✓7.  _✓S_✓h_✓e_✓l_✓l _✓c_✓o_✓m_✓m_✓a_✓n_✓d_✓s
  988.  
  989.    i-shell, O_SHELL
  990.  
  991.    Creates a shell.  Exiting from this shell will return to Origami.
  992.    Environment variables ORIFILE, ORILINE and ORIWORD are set to
  993.    current filename, textline and word.
  994.  
  995.    shell-command
  996.  
  997.    Prompts for a command and starts a shell which executes it.
  998.    Environment variables ORIFILE, ORILINE and ORIWORD are set to
  999.    current filename, textline and word.
  1000.  
  1001.    suspend-origami
  1002.  
  1003.    If your system has job control, origami will be stopped and the cal-
  1004.    ling shell is reactivated.
  1005.  
  1006.    _✓4._✓8.  _✓A_✓r_✓g_✓u_✓m_✓e_✓n_✓t_✓s
  1007.  
  1008.    Like in Emacs, you can repeat each command by using an numerical
  1009.    argument.  The first digit is given by set-argument-<digit>.  These
  1010.    functions read more digits of the argument until you type a non-
  1011.    digit.  This non-digit may be a key sequence bound to a command or
  1012.    just a single character.  It will be executed <argument> times.
  1013.    Pressing the abort-key will abort the repeated execution.  These
  1014.    commands can not be used in macros.  If you are defining a
  1015.    keyboard-macro, the repeated Operation is stored <argument> times in
  1016.    the buffer.
  1017.  
  1018.    set-argument-0 ... set-argument-9
  1019.  
  1020.    _✓4._✓9.  _✓S_✓p_✓e_✓c_✓i_✓a_✓l _✓f_✓u_✓n_✓c_✓t_✓i_✓o_✓n_✓s
  1021.  
  1022.    quote-character, O_QUOTE
  1023.  
  1024.    The next character typed in will be returned to the editor ignoring
  1025.    all keysequences starting with it.
  1026.  
  1027.    redraw-display, O_REFRESH
  1028.  
  1029.    Refresh and center screen.  This is useful after getting things like
  1030.    ``Message from ...''.  If you are working with a window environment
  1031.    which does not send a window-changed signal, you may use this com-
  1032.    mand after resizing a window.
  1033.  
  1034.    help, O_HELP
  1035.  
  1036.    Displays the helpfile $HOME/.origamihelp.  Since there is no default
  1037.    file for this function, you can create your own helpfile.  It may be
  1038.    useful for new and very complicated macros or other things you
  1039.  
  1040.  
  1041.  
  1042.                              July 23, 1991
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.                                  - 17 -
  1049.  
  1050.  
  1051.    always forget.
  1052.  
  1053.    describe-bindings
  1054.  
  1055.    Displays the keybinding file $HOME/.origamibind created by the key-
  1056.    bind compiler.  If you are using multiple keyboards, origami will
  1057.    only display the entries concerning the current keytab.
  1058.  
  1059.    set-language, O_LANGUAGE
  1060.  
  1061.    Allows you to select the language for which the code is to be saved
  1062.    - ie the format in which folds are to be saved.  If you choose
  1063.    `User', origami prompts for the begin- and end-commentstring used
  1064.    for hiding the foldcomments.  Each string can be up to three charac-
  1065.    ters in length.
  1066.  
  1067.    describe-fold, O_FOLD_INFO
  1068.  
  1069.    Returns information on the fold depth, position and indentation of
  1070.    the current line, plus information about any fold the cursor is on.
  1071.  
  1072.    add-mode-view
  1073.  
  1074.    Sets view-only mode.
  1075.  
  1076.    delete-mode-view
  1077.  
  1078.    Sets edit mode.
  1079.  
  1080.    add-mode-overwrite
  1081.  
  1082.    Sets overwrite mode.  Text input will overwrite other text.
  1083.  
  1084.    delete-mode-overwrite
  1085.  
  1086.    Sets insert mode.  Text input will be inserted.
  1087.  
  1088.    add-mode-echo
  1089.  
  1090.    Incomplete keysequences are displayed under the statusline.
  1091.  
  1092.    delete-mode-echo
  1093.  
  1094.    Do not show unfinished keysequences.
  1095.  
  1096.    add-mode-auto-save
  1097.  
  1098.    Prompts for the auto-save duration.  Origami will save your files
  1099.    periodically in auto-save mode.  Default time is 8 minutes.
  1100.  
  1101.    delete-mode-auto-save
  1102.  
  1103.    auto-save is switched of.
  1104.  
  1105.  
  1106.  
  1107.  
  1108.                              July 23, 1991
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.                                  - 18 -
  1115.  
  1116.  
  1117.    set-user-mode
  1118.  
  1119.    Prompts for a string, which is displayed as additional mode in the
  1120.    statusline.  Doing this again will overwrite the string.
  1121.  
  1122.    reset-user-mode
  1123.  
  1124.    No `user-mode'-string is displayed.
  1125.  
  1126.    O_PIPE_KBD
  1127.  
  1128.    Prompts for a command.  This command will be executed and its stan-
  1129.    dardoutput  will  be  read  as  keyboardinput  for  origami.   Using
  1130.    O_PIPE_KBD while reading from a file instead of the keyboard will
  1131.    close all pipes! Environment variables ORIFILE, ORILINE and ORIWORD
  1132.    are set to current filename, textline and word.  The general-abort-
  1133.    key stops the reading from a pipe.
  1134.  
  1135.    NOP
  1136.  
  1137.    No operation.  This command can be used to disable keyboardinputs
  1138.    explicitly.
  1139.  
  1140.    abort
  1141.  
  1142.    Aborts any operation.  There are several commands which can be
  1143.    aborted by this key.  This operation can only be bound to a _✓s_✓i_✓n_✓g_✓l_✓e
  1144.    key.  This key even stops a running macro, which may be useful if it
  1145.    contains an endless loop.  If you are anxious of Origami doing some-
  1146.    thing wrong, this key brings you back to a safe state.
  1147.  
  1148.    _✓4._✓1_✓0.  _✓H_✓o_✓w _✓t_✓o _✓g_✓e_✓t _✓o_✓u_✓t
  1149.  
  1150.  
  1151.    quick-exit, O_FINISH
  1152.  
  1153.    If needed exit entered folds, save the file and exit from Origami.
  1154.  
  1155.    exit-origami, O_QUIT
  1156.  
  1157.    If your file was changed since last save, Origami asks you if you
  1158.    want to leave anyway.
  1159.  
  1160.    _✓5.  _✓P_✓r_✓o_✓g_✓r_✓a_✓m_✓m_✓i_✓n_✓g _✓i_✓n _✓O_✓C_✓L
  1161.  
  1162.    This chapter describes OCL (Origami control language) and gives some
  1163.    examples to show how powerful it is.  OCL is a programming language
  1164.    offering capabilities to use conditional statements, subroutines,
  1165.    loops, variables and recursion.  The keybind program compiles human
  1166.    readable OCL source code to a binary which will be interpreted by
  1167.    Origami.  The functions described in the chapter explaining keybind-
  1168.    ings are very simple OCL statements.
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.                              July 23, 1991
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.                                  - 19 -
  1181.  
  1182.  
  1183.    _✓5._✓1.  _✓O_✓C_✓L _✓s_✓y_✓n_✓t_✓a_✓x _✓a_✓n_✓d _✓s_✓e_✓m_✓a_✓n_✓t_✓i_✓c
  1184.  
  1185.    This sections describes all other OCL elements.  It is assumed that
  1186.    you are familiar with other programming languages.  You will find
  1187.    examples in a later section.
  1188.  
  1189.    _✓5._✓1._✓1.  _✓O_✓t_✓h_✓e_✓r _✓m_✓a_✓r_✓k_✓s _✓f_✓o_✓r _✓f_✓o_✓l_✓d_✓s
  1190.  
  1191.    (defmark <name> ( <mark1> <mark2> <mark3> <mark4> ))
  1192.  
  1193.    This option puts data in the rcfile, so that origami can switch to
  1194.    other marks for folds if it is invoked with commandline option
  1195.    `-mname'.  The format for <mark> is:
  1196.  
  1197.            ( <single-char> <single-char> <single-char> )
  1198.  
  1199.    where <single-char> is a ``"x'' definition like in (keybind ... ).
  1200.    The meanings of <mark1> ... <mark4> are:
  1201.  
  1202.            <mark1> begin of fold, standard is `{{{'
  1203.            <mark2> closed fold, standard is `...'
  1204.            <mark3> name of filed/attached fold, standard is `:::'
  1205.            <mark4> end of fold, standard is `}}}'
  1206.  
  1207.  
  1208.    _✓5._✓1._✓2.  _✓S_✓u_✓b_✓r_✓o_✓u_✓t_✓i_✓n_✓e_✓s _✓a_✓n_✓d _✓m_✓a_✓c_✓r_✓o_✓s
  1209.  
  1210.    (defmac <name> (<statement> ... ) )
  1211.  
  1212.    The Origami operations defined in (<statement> ...  ) are further-
  1213.    more reproducable as <name> too, so you can use them to define other
  1214.    macros.  Remark that these are really macros, they are only copied
  1215.    to the calling macrodefinition.  Inside of (<statement> ...  ) you
  1216.    are allowed to use <name>.  The effect is, that (<statement> ...  )
  1217.    is executed and afterwards the following statements are executed.
  1218.  
  1219.    (deffun <name> (<statement> ... ) )
  1220.  
  1221.    The operations in (<statement> ... ) are written to the .origamirc-
  1222.    file so that origami can initialize a fix-macro-buffer.  Recursion
  1223.    is allowed. You can use <name> in the following OCL-text as
  1224.    subroutine-calls or for keybinds.  You cannot redefine the fix-
  1225.    macro-buffer.
  1226.  
  1227.    (initfun <name> (<statement> ... ) )
  1228.  
  1229.    Same  as  above.   But  the  macro  can  be  redefined  with
  1230.    ``O_DEFINE_FIX''.  Using the commands `defmac' and `initmac' uses
  1231.    the fix-macro-buffers 64,63, etc.
  1232.  
  1233.    (forward <name>)
  1234.  
  1235.    <name> is declared as a name for a macro defined with ``initfun'' or
  1236.    ``deffun''.  <name> can be used from now on as normal macro-call.
  1237.  
  1238.  
  1239.  
  1240.                              July 23, 1991
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.                                  - 20 -
  1247.  
  1248.  
  1249.    The definition with ``(deffun <name> ...  '' can be put somewhere in
  1250.    the following script.
  1251.  
  1252.    (automacro <name>)
  1253.  
  1254.    If Origami is invoked using the ``-A'' flag, the macro named <name>
  1255.    is called every time you are exiting a filed fold, entering it or
  1256.    opening a new file.
  1257.  
  1258.    Warning: Using ``O_DEFINE_FIX x'' has no effect on macros defined
  1259.    with ``initfun'' or ``defmac'' when calling them by their name.  If
  1260.    you want to use such an effect you must use ``O_CALL_FIX x''.
  1261.  
  1262.    _✓5._✓1._✓3.  _✓C_✓o_✓n_✓t_✓r_✓o_✓l _✓s_✓t_✓r_✓u_✓c_✓t_✓u_✓r_✓e_✓s
  1263.  
  1264.    A <statement> can be one of the following control structures or
  1265.    functions:
  1266.  
  1267.    while <condition> (<statement> ... )
  1268.  
  1269.    Prechecked loop, the macro is repeated while the condition is true.
  1270.  
  1271.    do (<stament> ... ) while <condition>
  1272.  
  1273.    Postchecked loop, the macro is repeated until the condition is
  1274.    false.
  1275.  
  1276.    if <condition> (<statement> ... ) fi
  1277.    if <condition> (<statement> ... ) else (<statement> ... ) fi
  1278.  
  1279.    Conditional statement.  If condition is true, the first macro is
  1280.    executed.  If condition is false, the second macro, if any, is exe-
  1281.    cuted.
  1282.  
  1283.    case (<condition> (<statement> ... )) ... esac
  1284.    case (<condition> (<statement> ... )) ... default (<statement> ... )
  1285.    esac
  1286.  
  1287.    Conditional statement.  The block of statements following the first
  1288.    conditional expression evaluating to TRUE is executed.  If no condi-
  1289.    tion is true, the given default-statements are executed.
  1290.  
  1291.    repeat <number> (<statement> ... )
  1292.  
  1293.    (<statement> ... ) is repeated <number> times.
  1294.    ATTENTION: The tokens are stored <number> times!.  This cannot be
  1295.    done in another way, because origami knows no local variables!.  If
  1296.    you want to repeat big macros, think about an implementation with
  1297.    counters.
  1298.  
  1299.    prompt <prompt>
  1300.  
  1301.    Displays <prompt> below the statusline.  <prompt> can be:
  1302.  
  1303.  
  1304.  
  1305.  
  1306.                              July 23, 1991
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.                                  - 21 -
  1313.  
  1314.  
  1315.  
  1316.            <string>
  1317.            (<prompt-item> ...  )
  1318.  
  1319.    where <prompt-item> can be:
  1320.  
  1321.            counter <name>
  1322.            <string>
  1323.  
  1324.    Origami  displays  the  ``prompt''  and  waits  till  you  type  a
  1325.    ``O_RETURN'' on your keyboard.
  1326.  
  1327.    exit
  1328.  
  1329.    The macroexecution is aborted.  Origami waits for keyboardinput.
  1330.  
  1331.    message-exit <prompt>
  1332.  
  1333.    Same as exit.  <prompt> is displayed under the statusline.
  1334.  
  1335.    return-from-macro
  1336.  
  1337.    The currently executed macro ends and the caller (keyboard or macro)
  1338.    continues again.
  1339.  
  1340.    local (<name> ... ) (<statement> ...)
  1341.  
  1342.    The values of the variables <name> ...  are saved during the execu-
  1343.    tion of ``<statement> ...''.  After the execution of the ``local''-
  1344.    statement all saved variables are reset to their original values.
  1345.    ATTENTION: ``<statement> ...'' is executed as a subroutine, so using
  1346.    ``return-from-macro'' inside ``<statement> ...'' will only leave
  1347.    ``<statement> ...'', and not the current macro.
  1348.  
  1349.    <origami-command>
  1350.  
  1351.    All Origami commands you can use from keyboard can be used by their
  1352.    names.
  1353.  
  1354.    <strings>
  1355.  
  1356.    Normal text can be used. The syntax is:
  1357.  
  1358.            "text
  1359.            where text can be a any string not containing: <space> " )
  1360.            "<space> for <space>
  1361.            ") for )
  1362.            "" for "
  1363.  
  1364.  
  1365.    Warning: if you use origami to edit a OCL-file: "<space> should not
  1366.    be the last statement of a line, because origami deletes all spaces
  1367.    at end of line. If you put a comment after the "<space> command you
  1368.    have no problems.
  1369.  
  1370.  
  1371.  
  1372.                              July 23, 1991
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.                                  - 22 -
  1379.  
  1380.  
  1381.    _✓5._✓1._✓4.  _✓V_✓a_✓r_✓i_✓a_✓b_✓l_✓e_✓s
  1382.  
  1383.    OCL allows to use variables.  OCL variables are global integer vari-
  1384.    ables.  They are declared by using them.  They are initialized to
  1385.    zero when Origami starts up.  The following functions deal with
  1386.    variables and can be used in the same way like the above mentioned
  1387.    statements:
  1388.  
  1389.    set-counter <name> <number>
  1390.  
  1391.    The counter-variable <name> is set to the value of <number>.
  1392.  
  1393.    prompt-counter <name> <prompt>
  1394.  
  1395.    Prompts <string> below the statusline and reads the new value for
  1396.    <name> from keyboard.  Input ``y'' sets it to 1, ``n'' sets it to 0.
  1397.    All other inputs have to be decimals or a simple O_RETURN.  <prompt>
  1398.    is explained in section ``Control structures''.
  1399.  
  1400.    read-repeat <name>
  1401.  
  1402.    The  counter-variable  <name>  takes  its  value  of  the  ``repeat-
  1403.    argument-counter''.  This counter is set to 0, so that the macro-
  1404.    call is not repeated.  The value of ``repeat-macro-counter'' is the
  1405.    number of remaining loops when using ``set-argument-x'', otherwise
  1406.    0.
  1407.  
  1408.    add-counter <name> <number>
  1409.  
  1410.    The counter-variable <name> is set to <name>+<number>.
  1411.  
  1412.    sum-counter <name1> <name2>
  1413.  
  1414.    The counter-variable <name1> is set to <name1>+<name2>.
  1415.  
  1416.    inv-counter <name>
  1417.  
  1418.    The counter-variable <name> is set to -<name>.
  1419.  
  1420.    goto <number>
  1421.  
  1422.    Move the cursor on x-position <number>.  1 is the first displayed
  1423.    character.  If you enter a indented fold, position 1 is not the
  1424.    first character on that line.
  1425.  
  1426.    goto-counter <name>
  1427.  
  1428.    Same as above, except that the position is the value of variable
  1429.    <name>.
  1430.  
  1431.    store-pos <name>
  1432.  
  1433.    The x-position of the cursor is stored in the variable <name>.
  1434.  
  1435.  
  1436.  
  1437.  
  1438.                              July 23, 1991
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.                                  - 23 -
  1445.  
  1446.  
  1447.    goto-line-counter <name>
  1448.  
  1449.    Like O_GOTO_LINE.  The linenumber is the value of variable <name>.
  1450.  
  1451.    store-line <name>
  1452.  
  1453.    The current line-number is stored in the variable <name>.
  1454.  
  1455.    counter <name>
  1456.  
  1457.    The current value of <name> is returned as ASCII-text.
  1458.  
  1459.    _✓5._✓1._✓5.  _✓B_✓o_✓o_✓l_✓e_✓a_✓n _✓e_✓x_✓p_✓r_✓e_✓s_✓s_✓i_✓o_✓n_✓s
  1460.  
  1461.    The above mentioned boolean expressions <condition> can be:
  1462.  
  1463.    not(<condition>)
  1464.  
  1465.    The value of <condition> is inverted.
  1466.  
  1467.    and(<condition>,<condition>)
  1468.  
  1469.    is true, if both <condition>'s are true.
  1470.  
  1471.    or(<condition>,<condition>)
  1472.  
  1473.    is true, if one of the <condition>'s is true.
  1474.  
  1475.    pre (<statement> ... ) <condition>
  1476.  
  1477.    The sequence of statements will be executed before the evaluation of
  1478.    <condition>.
  1479.  
  1480.    test-file-changed
  1481.  
  1482.    is true, if the current file has been changed.
  1483.  
  1484.    test-filed
  1485.  
  1486.    is true if the current line is a file-folded-line.
  1487.  
  1488.    test-fold-line
  1489.  
  1490.    is true if the current line is a closed-fold-line.
  1491.  
  1492.    test-begin-fold
  1493.  
  1494.    is true if the current line is the {{{ line of a open fold.
  1495.  
  1496.    test-end-fold
  1497.  
  1498.    is true if the current line is the }}} line of a open fold
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.                              July 23, 1991
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.                                  - 24 -
  1511.  
  1512.  
  1513.    test-text
  1514.  
  1515.    is true if the current line is a normal text-line.
  1516.  
  1517.    test-top
  1518.  
  1519.    is true if the current line is the top of the entered fold.
  1520.  
  1521.    test-bottom
  1522.  
  1523.    is true if the current line is the bottom of the entered fold.
  1524.  
  1525.    test-char "x
  1526.  
  1527.    is true if the character under the cursor is equal to x.
  1528.  
  1529.    test-language "x
  1530.  
  1531.    is true if x is the language used by ``set-language''.
  1532.  
  1533.    counter-0 <name>
  1534.  
  1535.    is true if the variable <name> is 0.
  1536.  
  1537.    counter>0 <name>
  1538.  
  1539.    is true if the variable <name> is greater than 0.
  1540.  
  1541.    test-begin-line
  1542.  
  1543.    is true if the cursor stands on or before the first non-space-
  1544.    character of the current line.
  1545.  
  1546.    test-end-line
  1547.  
  1548.    is true if the cursor stand behind the last non-space-character of
  1549.    the current line.
  1550.  
  1551.    test-behind-counter
  1552.  
  1553.    is true if the position in line is after the value of the counter-
  1554.    variable.
  1555.  
  1556.    OCL uses short-circuit evaluation for ``and'' and ``or''.  Boolean
  1557.    expressions can be used everywhere in the code.  When ``Origami'' is
  1558.    prompting for information (for example, if a existing file should be
  1559.    overwriten during O_FILE_FOLD), you can only use ``and'', ``or'',
  1560.    ``not'' and the following basic-expressions:
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.                              July 23, 1991
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.                                  - 25 -
  1577.  
  1578.  
  1579.  
  1580.            test-file-changed
  1581.            test-language
  1582.            test-text
  1583.            test-begin-fold
  1584.            test-fold-line
  1585.            test-end-fold
  1586.            test-filed
  1587.            test-counter-0
  1588.            test-counter>0
  1589.  
  1590.  
  1591.    _✓5._✓1._✓6.  _✓M_✓u_✓l_✓t_✓i_✓p_✓l_✓e _✓k_✓e_✓y_✓b_✓o_✓a_✓r_✓d_✓m_✓o_✓d_✓e_✓s
  1592.  
  1593.    To create more complex keybindings (for example a ``vi''-emulation
  1594.    with modes), OCL offers the possibility to use up to four different
  1595.    keyboard-translation-tables.  To do this, you must declare the used
  1596.    keytabs with:
  1597.  
  1598.    (defmodes <name> ... )
  1599.  
  1600.    where <name> is a normal string.  This command has two effects:
  1601.  
  1602.    j⇨.J⇨      Keybind initializes a keytable for each <name>.
  1603.  
  1604.    j⇨.J⇨      The macros <name> are defined and can be used within other
  1605.           macrodefinitions to switch to a certain keytab.  They are not
  1606.           stores in fixmacrobuffers, but you can use them for your one
  1607.           macrodefinitions.
  1608.  
  1609.    The first mentioned mode is active when starting origami.  The
  1610.    definition of a declared keyboard can be done with:
  1611.  
  1612.    (mode <name> (keybind ... ) ... )
  1613.  
  1614.    All given bindings are put into the keytable for <name>.  ``(keybind
  1615.    abort ...  )'' must be declared outside a ``(mode ...  )''-
  1616.    statement, which results in the fact that you can only have one
  1617.    abort-key for all modes.  If using multiple keyboard modes, no other
  1618.    ``(keybind ...  )''-statement is allowed outside ``(mode ...  )''-
  1619.    statements.
  1620.  
  1621.    _✓5._✓1._✓7.  _✓H_✓a_✓n_✓d_✓l_✓i_✓n_✓g _✓o_✓f _✓f_✓i_✓l_✓e_✓d-_✓f_✓o_✓l_✓d_✓s
  1622.  
  1623.    Using language ``NONE'', keybind will automatically include the con-
  1624.    tents of filed-folds when reading the source-file.  Normally multi-
  1625.    ple includes of the same file won't work , because redefining macros
  1626.    isn't allowed.  To build a clean macro-library, you can use:
  1627.  
  1628.    nodup
  1629.  
  1630.    The current file will only be read once even if you have another
  1631.    filed-fold entry for this file.  This command makes it possible to
  1632.    have macro-libraries like:
  1633.  
  1634.  
  1635.  
  1636.                              July 23, 1991
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.                                  - 26 -
  1643.  
  1644.  
  1645.  
  1646.            file1:
  1647.                      :
  1648.                 ...F helps
  1649.                      :
  1650.  
  1651.            file2:
  1652.                      :
  1653.                 ...F helps
  1654.                      :
  1655.  
  1656.            keyboard:
  1657.                      :
  1658.                 ...F file1
  1659.                 ...F file2
  1660.                      :
  1661.  
  1662.  
  1663.    _✓5._✓2.  _✓O_✓C_✓L _✓e_✓x_✓a_✓m_✓p_✓l_✓e_✓s
  1664.  
  1665.    This section explains some useful OCL applications.  They are useful
  1666.    for understanding OCL.  Perhaps you missed some functions while
  1667.    reading the previous chapters.  Some of them are written in OCL and
  1668.    you will find them here.  It is assumed that you are familiar with
  1669.    Origami before you start writing in OCL.
  1670.  
  1671.    _✓5._✓2._✓1.  _✓A _✓f_✓i_✓r_✓s_✓t _✓e_✓x_✓a_✓m_✓p_✓l_✓e
  1672.  
  1673.    The first OCL example does not use any control structures.  It
  1674.    defines a little macro named byebye.  You should play a little bit
  1675.    with such macros for understanding how to compile them and for get-
  1676.    ting some syntax errors.
  1677.  
  1678.            ; this is an example for a macro-definition:
  1679.            (deffun byebye
  1680.            (
  1681.              O_BOT_OF_FOLD
  1682.              O_START_OF_LINE
  1683.              O_RETURN
  1684.              O_UP
  1685.              "end "  "of " "text
  1686.            ))
  1687.  
  1688.            (keybind byebye (M-"x "bye))
  1689.  
  1690.    byebye creates a new line containing `end of text' at the end of the
  1691.    entered fold.
  1692.  
  1693.    _✓5._✓2._✓2.  _✓S_✓h_✓e_✓l_✓l _✓v_✓e_✓r_✓s_✓i_✓o_✓n _✓c_✓o_✓n_✓t_✓r_✓o_✓l
  1694.  
  1695.    Two more little macros deal with SVC.  Note that the check-out macro
  1696.    is only for personal use of SVC.  If you are working in a group,
  1697.    someone else may have edited the file, which will not change your
  1698.    own read-only copy.  The advantage is that you can visit a file and
  1699.  
  1700.  
  1701.  
  1702.                              July 23, 1991
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.                                  - 27 -
  1709.  
  1710.  
  1711.    decide if you want to change it.
  1712.  
  1713.            (deffun check-out (
  1714.              delete-mode-view
  1715.              shell-command "co "  "-l "  "$ORIFILE
  1716.            ))
  1717.  
  1718.            (deffun check-in (
  1719.              save-file
  1720.              add-mode-view
  1721.              shell-command "ci "  "-u "  "$ORIFILE
  1722.            ))
  1723.  
  1724.  
  1725.    _✓5._✓2._✓3.  _✓M_✓T_✓o_✓o_✓l-_✓v_✓e_✓r_✓s_✓i_✓o_✓n _✓o_✓f _✓O__✓T_✓O_✓P__✓O_✓F__✓F_✓O_✓L_✓D
  1726.  
  1727.    This a macro-version of the command O_TOP_OF_FOLD as it is used in
  1728.    the mtool-system.  The cursor moves to the begin of the currently
  1729.    opened fold.
  1730.  
  1731.            ; example for a more complex macro
  1732.            (deffun mtool-top
  1733.              (
  1734.                if test-end-fold (O_UP) fi
  1735.                while and(not(test-begin-fold),not(test-top)) (
  1736.                  if test-end-fold (mtool-top) fi
  1737.                  O_UP
  1738.                )
  1739.              )
  1740.            )
  1741.  
  1742.    While the cursor is not being located on top of a fold (entered or
  1743.    opened) the cursor is moved up. If the macro finds the end-of-fold
  1744.    line from another opened fold, this fold is skipped by a recursive
  1745.    call of mtool-top.
  1746.  
  1747.    _✓5._✓2._✓4.  _✓F_✓i_✓l_✓l _✓p_✓a_✓r_✓a_✓g_✓r_✓a_✓p_✓h
  1748.  
  1749.    The following example is an advanced macro.  It is too long for
  1750.    printing it here, but it is included in the file fill-paragraph.
  1751.  
  1752.         fill-paragraph fills all lines from cursor position to the next
  1753.    line with a blank or a dot in the first column.  An end of a fold
  1754.    stops filling too.  The first column of a line is here the first
  1755.    character in currently entered fold, not opened fold!  Filling a
  1756.    line means to add words from the next line if it is too short or to
  1757.    put words to the next line if it is too long.  The default right
  1758.    margin is set to column 72.  If there are unfillable lines, fill-
  1759.    paragraph stops filling and complains.
  1760.  
  1761.    The filling can be done in the following 3 ways:
  1762.  
  1763.    roff-mode (switched on when origami starts)
  1764.        All ``. '' are expanded to ``.  ''.
  1765.  
  1766.  
  1767.  
  1768.                              July 23, 1991
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.                                  - 28 -
  1775.  
  1776.  
  1777.    block-mode
  1778.        All `` '' are expanded to ``   '',  till  the  line  reaches  the
  1779.        fill-margin.
  1780.  
  1781.    ragged-mode
  1782.        All ``  '' are replaced bye `` ''.
  1783.  
  1784.    The macro inv-blank-handle switches between these modes.
  1785.  
  1786.    The macro set-fill-column allows to change to right margin.  To do
  1787.    so, you can either use a numeric argument or put the cursor to the
  1788.    position of the new right margin or put it to the left and wait for
  1789.    Origami asking you about the new column width.
  1790.  
  1791.    _✓5._✓2._✓5.  _✓G_✓o_✓t_✓o _✓m_✓a_✓t_✓c_✓h_✓i_✓n_✓g _✓f_✓e_✓n_✓c_✓e
  1792.  
  1793.    If you are writing programs, you often want to know which closing
  1794.    paren in a complicated expression fits to another opening paren.
  1795.    goto-matching-fence performs this function.  It uses the character
  1796.    under the cursor to determine if you are looking for a paren, a
  1797.    bracket or a { and if you want to jump to the opening or the closing
  1798.    one.  If the cursor stands somewhere in usual text, nothing will
  1799.    happen.  Hereafter the macro searches the matching fence.  If it
  1800.    can't find it, it will jump back to your old position.  If neces-
  1801.    sary, this macro opens and closes folds.  Do not worry if it does
  1802.    not seem to stop searching.  If your text is very long and there is
  1803.    no fitting fence, you will be amazed how many folds you are using
  1804.    and how fast they can be opened and closed, but usually goto-
  1805.    matching-fence goes back to your old position.
  1806.  
  1807.    _✓5._✓2._✓6.  _✓T_✓h_✓e _✓t_✓o_✓w_✓e_✓r_✓s _✓o_✓f _✓h_✓a_✓n_✓o_✓i
  1808.  
  1809.    This is a funny macro to demonstrate the power of OCL.  You should
  1810.    type a string of a few characters without blanks, then start this
  1811.    macro and have fun.  Warning: If you type more than about eight to
  1812.    ten characters, the game will require a long time.
  1813.  
  1814.         I am sure that you will invent more useful OCL macros.  If you
  1815.    wrote a really new and good one, please post it to the USENET news-
  1816.    group comp.editors.
  1817.  
  1818.    _✓6.  _✓M_✓i_✓s_✓c_✓e_✓l_✓l_✓a_✓n_✓o_✓u_✓s _✓t_✓h_✓i_✓n_✓g_✓s
  1819.  
  1820.    Sometimes, it is useful to know if a document contains ``dangerous''
  1821.    strings for Origami.  The following simple shell script searches
  1822.    these strings.
  1823.  
  1824.            fgrep '{{{' <filename>
  1825.            fgrep '}}}' <filename>
  1826.            fgrep ':::' <filename>
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.                              July 23, 1991
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.                                  - 29 -
  1841.  
  1842.  
  1843.    _✓7.  _✓C_✓o_✓p_✓y_✓r_✓i_✓g_✓h_✓t _✓a_✓p_✓p_✓o_✓i_✓n_✓t_✓m_✓e_✓n_✓t_✓s
  1844.  
  1845.    This chapter wasn't included in earlier versions, but a discussion
  1846.    on USENET convinced me to write it.  Please read it careful.
  1847.  
  1848.         Each part of this software can and must be copied free.  If you
  1849.    copy binaries, you must not prevent people from copying sources,
  1850.    too.  You must not remove my name from this program.  If you want to
  1851.    use parts of it for your own purposes, point out what is your code
  1852.    and what is mine.
  1853.  
  1854.         If this software is used on a machine, no one may forbid other
  1855.    people to use it on the same machine.  (A little bit uncommon.  I
  1856.    hope it prevents some braindamaged teaching methods I saw here at
  1857.    the RWTH in Aachen recently.  No more comments at this place.) If
  1858.    you have problems with this restriction then send me mail, please.
  1859.    I will try to get a clearance.
  1860.  
  1861.         No part of this software may be used for military purposes.  I
  1862.    will make no execptions for this point.
  1863.  
  1864.         If someone want to use software from this package for commer-
  1865.    cial purposes, he needs a written non-exclusive license.
  1866.  
  1867.         There are no remarks in the other files of this package about
  1868.    copyright and these things, because program code and comments about
  1869.    it are two different things, but the above conditions are valid for
  1870.    the whole package!
  1871.  
  1872.    _✓8.  _✓A_✓c_✓k_✓n_✓o_✓w_✓l_✓e_✓d_✓g_✓e_✓m_✓e_✓n_✓t_✓s
  1873.  
  1874.    Most of this manual was written by me, but the original was written
  1875.    by someone else, who didn't leave his name in it.  The concept of
  1876.    the folding editor was originally implemented as part of the Tran-
  1877.    sputer development system at INMOS Ltd., Bristol, UK.  The editor
  1878.    was a part of the TDS D700, and was written in Occam.  It first ran
  1879.    on a 68000 based Sage/Stride development system, and later was Tran-
  1880.    sputer resident on the PC development system.
  1881.  
  1882.         Origami was rewritten from scratch in Turbo Pascal by Martin
  1883.    Green while at Ferranti Ltd, Cheadle Heath, Stockport, England, and
  1884.    used the same key mappings and editor functions as the TDS editor.
  1885.  
  1886.         It was then converted from Turbo Pascal by p2c and ported by
  1887.    Charlie Lawrence, while at Eastman Kodak Co.  He added lex/yacc
  1888.    based keyfiles, and did the considerable work needed to get it run-
  1889.    ning in C.
  1890.  
  1891.         I fixed some bugs in memory managment and otherwhere, ported it
  1892.    to MINIX, changed its user interface to look more Emacs-like and
  1893.    added new features.  A friend of mine, Wolfgang Stumvoll, wrote the
  1894.    OCL code and the keybind compiler.  He also made beta tests of all
  1895.    my new versions by using them for his daily work, which helped a lot
  1896.    to find existing and new bugs.  Last but not least, he wrote the OCL
  1897.  
  1898.  
  1899.  
  1900.                              July 23, 1991
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.                                  - 30 -
  1907.  
  1908.  
  1909.    fill-paragraph,  goto-matching-fence  and  towers-of-hanoi  macros.
  1910.    Both of us made a general code clean-up, which was highly overdue.
  1911.  
  1912.         Michael Schwingen ported Origami to Atari TOS and fixed a few
  1913.    minor bugs.
  1914.  
  1915.         I maintain the whole Origami source code, which means that I
  1916.    will answer or forward mail concerning Origami, decide if and how
  1917.    extensions should be made, give advices for people who are porting
  1918.    it, post new versions and update the documentation.
  1919.  
  1920.  
  1921.  
  1922.  
  1923.  
  1924.  
  1925.  
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.                              July 23, 1991
  1967.  
  1968.  
  1969. @