{{{  comments
; macros to set a mode dependend on the currently edited file.
; Known modes are:
;  TEX/ROFF/C/PASCAL/MIRANDA/OCCAM
; and the pseudo-mode `no other mode set'
; The modes are set if:
;   folding-language is Inmos              -> OCCAM
;   folding-language is ROFF               -> ROFF
;   filename ending on .c                  -> C
;   filename ending on .p                  -> PASCAL
;   filename ending on .m                  -> MIRANDA
;   filename ending on .h
;     and c-mode was active before         -> C
;   filename ending on .h
;     and pascal-mode was active before    -> PASCAL
;   filename ending on .ms                 -> ROFF
;   filename ending on .1                  -> ROFF
;   filename ending on .man                -> ROFF
;   filename ending on .tex                -> TEX
;   filename ending on .tsr                -> OCCAM
;   filename ending on .top                -> OCCAM
;
}}}
{{{  description
; mode-number mode-tag mode-name
;      0/1    ()       ()            (undefined=none)
;      2      c-mode   C-Mode
;      3      p-mode   PASCAL-M
;      4      r-mode   ROFF-M
;      5      t-mode   TEX-Mode
;      6      o-mode   OCCAM-M
;      7      m-mode   MIRA-M
;      8      s-mode   SCRIPT-M
; other tags
;      mode-number
;      got-c-mode
;      got-p-mode
;      start-up-moved
;      start-up-x
;      start-up-y
}}}
@if-using not(STARTUP)
  @use (STARTUP)
  {{{  libs
  {{{F fun/fillpara
  :::F fun/fillpara
  }}}
  }}}
  {{{  vars
  ( defvar
     ( no-auto
       start-up-moved
       start-up-x
       start-up-y
       p-mode
       got-p-mode
       c-mode
       got-c-mode
       r-mode
       s-mode
       t-mode
       m-mode
       o-mode
       tab-width
       tab-count
       tab-width-1
       tab-count-1
       mode-number
       xxx
       first-auto-call
     )
  )
  }}}
  {{{  definition of my modes
  (defmodestring AUT "Auto-Macro "AM )

  (defmodestring TEX "TEX-mode "TX-m)
  (defmodestring ROF "ROFF-mode "RF-m)
  (defmodestring CM  "C-mode "C-m)
  (defmodestring PM  "PASCAL-mode "P-m)
  (defmodestring MM  "MIRANDA-mode "M-m)
  (defmodestring OCC "OCCAM-mode "O-m)
  (defmodestring SM  "SCRIPT-mode "S-m )
  }}}
  {{{  toggle-auto-macro
  (deffun toggle-auto-macro (
    if counter>0 no-auto (
      set-counter no-auto 0
      set-user-mode AUT
    ) else (
      set-counter no-auto 1
      reset-user-mode AUT
    ) fi
  ))
  }}}
  {{{  set-mode
  {{{  jump-back
  (deffun jump-back (
    if counter>0 start-up-moved (
      goto-line-counter start-up-y
      goto-counter start-up-x
      set-counter start-up-moved 0
    ) fi
  ))
  }}}
  (deffun set-mode (
    {{{  handle c/p store
    if counter>0 c-mode (set-counter got-c-mode 1 set-counter got-p-mode 0) fi
    if counter>0 p-mode (set-counter got-p-mode 1 set-counter got-c-mode 0) fi
    }}}
    {{{  reset all modes
    set-counter c-mode 0 reset-user-mode CM
    set-counter m-mode 0 reset-user-mode MM
    set-counter p-mode 0 reset-user-mode PM
    set-counter r-mode 0 reset-user-mode ROF
    set-counter t-mode 0 reset-user-mode TEX
    set-counter o-mode 0 reset-user-mode OCC
    set-counter s-mode 0 reset-user-mode SM
    set-counter tab-width 0
    status-line-on
    delete-mode-wrap
    }}}
    {{{  mode-number=2 ->c
    set-counter mode-number +(mode-number -2)
    if counter-0 mode-number (
      set-counter mode-number 2
      set-counter c-mode 1
      set-counter got-c-mode 1
      set-counter got-p-mode 0
      set-counter tab-width 2
      set-counter tab-count 1
      set-counter tab-width-1 3
      set-counter tab-count-1 -1
      set-user-mode CM
      if not(test-language "C) (set-language "C) fi
      jump-back
      return-from-macro
    ) fi
    }}}
    {{{  mode-number=3 ->pascal
    set-counter mode-number +(mode-number -1)
    if counter-0 mode-number (
      set-counter mode-number 3
      set-counter p-mode 1
      set-counter got-c-mode 0
      set-counter got-p-mode 1
      set-counter tab-width 2
      set-user-mode PM
      if not(test-language "P) (set-language "P) fi
      jump-back
      return-from-macro
    ) fi
    }}}
    {{{  mode-number=4 ->roff
    set-counter mode-number +(mode-number -1)
    if counter-0 mode-number (
      set-counter mode-number 4
      set-counter r-mode 1
      set-counter tab-width 1
      set-counter single-blank 0
      set-user-mode ROF
      add-mode-wrap
      if not(test-language "R) (set-language "R) fi
      jump-back
      return-from-macro
    ) fi
    }}}
    {{{  mode-number=5 ->tex
    set-counter mode-number +(mode-number -1)
    if counter-0 mode-number (
      set-counter mode-number 5
      set-counter t-mode 1
      set-counter tab-width 1
      set-counter single-blank 0
      set-counter t-mode 1
      add-mode-wrap
      set-user-mode TEX
      if not(test-language "T) (set-language "T) fi
      jump-back
      return-from-macro
    ) fi
    }}}
    {{{  mode-number=6 ->occam
    set-counter mode-number +(mode-number -1)
    if counter-0 mode-number (
      status-line-off
      set-counter mode-number 6
      set-counter o-mode 1
      set-counter tab-width 2
      set-user-mode OCC
      if not(or(test-language "O,test-language "I)) (set-language "O) fi
      jump-back
      return-from-macro
    ) fi
    }}}
    {{{  mode-number=7 ->miranda
    set-counter mode-number +(mode-number -1)
    if counter-0 mode-number (
      set-counter mode-number 7
      set-counter m-mode 1
      set-counter tab-width 8
      set-user-mode MM
      if not(test-language "U) (set-language "U "|| newline-and-indent newline-and-indent) fi
      jump-back
      return-from-macro
    ) fi
    }}}
    {{{  mode-number=8 ->script
    set-counter mode-number +(mode-number -1)
    if counter-0 mode-number (
      set-counter mode-number 8
      set-counter s-mode 1
      set-counter tab-width 8
      set-counter tab-count -1
      set-user-mode SM
      if not(test-language "S) (set-language "S) fi
      jump-back
      return-from-macro
    ) fi
    }}}
    {{{  else          ->none
    set-counter single-blank 1
    set-counter mode-number 0
    jump-back
    }}}
  ))
  }}}
  {{{  skip-mode
  (deffun skip-mode (
    set-counter xxx +(read-repeat -1)
    if counter>0 xxx (
      set-counter mode-number +(xxx 1)
    ) else (
      if counter-0 mode-number (
        set-counter mode-number 8
      ) else (
        set-counter mode-number +(mode-number -1)
      ) fi
    ) fi
    set-counter start-up-moved 0
    set-mode
  ))
  }}}
  {{{  startup
  (deffun start-up (
    if counter>0 no-auto (return-from-macro) fi
    set-counter mode-number 0
    case
      (test-language "I ( set-counter mode-number 6 set-mode ))
      (test-language "R ( set-counter mode-number 4 set-mode ))
      (test-language "S ( set-counter mode-number 8 set-mode ))
    default
     {{{  test filename
     (
      set-counter start-up-x store-pos
      set-counter start-up-y store-line
      set-counter start-up-moved 1
      beginning-of-fold
      end-of-line
      backward-character
      case
        {{{  files ending on c
        (test-char "c (
          backward-character
          if test-char ". (set-counter mode-number 2) fi
        ))
        }}}
        {{{  files ending on p
        (test-char "p (
          backward-character
          if test-char ". (set-counter mode-number 3) fi
        ))
        }}}
        {{{  files ending on m
        (test-char "m (
          backward-character
          if test-char ". (set-counter mode-number 7) fi
        ))
        }}}
        {{{  files ending on h
        (test-char "h (
          backward-character
          if test-char ". (
            if counter>0 got-c-mode ( set-counter mode-number 2) fi
            if counter>0 got-p-mode ( set-counter mode-number 3) fi
          ) fi
        ))
        }}}
        {{{  files ending on s
        (test-char "s (
          backward-character
          if test-char "m (
            backward-character
            if test-char ". (set-counter mode-number 4) fi
          ) fi
        ))
        }}}
        {{{  files ending on 1
        (test-char "1 (
          backward-character
          if test-char ". (set-counter mode-number 4) fi
        ))
        }}}
        {{{  files ending on n
        (test-char "n (
          backward-character
          if test-char "a (
            backward-character
            if test-char "m (
              backward-character
              if test-char ". (set-counter mode-number 4) fi
            ) fi
          ) fi
        ))
        }}}
        {{{  files ending on x
        (test-char "x (
          backward-character
          if test-char "e (
            backward-character
            if test-char "t (
              backward-character
              if test-char ". (set-counter mode-number 5) fi
            ) fi
          ) fi
        ))
        }}}
        {{{  files ending on r
        (test-char "r (
          backward-character
          if test-char "s (
            backward-character
            if test-char "t (
              backward-character
              if test-char ". (set-counter mode-number 6) fi
            ) fi
          ) fi
        ))
        }}}
        {{{  files ending on p
        (test-char "p (
          backward-character
          if test-char "o (
            backward-character
            if test-char "t (
              backward-character
              if test-char ". (set-counter mode-number 6) fi
            ) fi
          ) fi
        ))
        }}}
        {{{  files ending on e
        (test-char "e (
          backward-character
          if test-char "l (
            backward-character
            if test-char "i (
              backward-character
              if test-char "f (
                backward-character
                if test-char "e (
                  backward-character
                  if test-char "k (
                    backward-character
                    if test-char "a (
                      backward-character
                      if or(test-char "M,test-char "m) (

                        set-counter mode-number 8    ; filename is Makefile :-)

                      ) fi
                    ) fi
                  ) fi
                ) fi
              ) fi
            ) fi
          ) fi
        ))
        }}}
      esac
      set-mode
     )
     }}}
    esac
    {{{  empty file -> move to end of
    if test-bottom ( previous-line end-of-line ) fi
    }}}
    set-file-unchanged
    {{{  if first call (from startup origami), init some vars, ..
    if counter-0 first-auto-call (
      @if-using (init_kbd) init_kbd_mac @fi
      set-user-mode AUT
      set-counter first-auto-call 1
      message-exit ( "Have "  "a "  "nice "  "day )
    ) fi
    }}}
   )
  )
  }}}
@fi
