home *** CD-ROM | disk | FTP | other *** search
/ The Developer Connection…ice Driver Kit for OS/2 3 / DEV3-D1.ISO / editors / epm / sampmacs / rexxkeys.e < prev    next >
Encoding:
Text File  |  1993-09-29  |  6.6 KB  |  205 lines

  1. /**********************************************************************/
  2. /*                             REXKEYS.E                              */
  3. /*                                                                    */
  4. /* The c_enter and space bar keys have been defined to do specific    */
  5. /* REXX syntax structures.                                            */
  6. /*                                                                    */
  7. /* Based on EKEYS.E (part of the base E3 code)                        */
  8. /* Written by B. Thompson, 22 Sep 1987                                */
  9. /*                                                                    */
  10. /**********************************************************************/
  11. /*  Updated by Larry Margolis for EOS2 and EPM.  To include, set in   */
  12. /*  your MYCNF.E:   REXX_SYNTAX_ASSIST = 1                            */
  13. /*                                                                    */
  14. /**********************************************************************/
  15.  
  16. compile if not defined(REXX_SYNTAX_INDENT)
  17. const
  18.    REXX_SYNTAX_INDENT = SYNTAX_INDENT
  19. compile endif
  20.  
  21. compile if INCLUDING_FILE <> 'EXTRA.E'  -- Following only gets defined in the base
  22. compile if EVERSION >= '4.12'
  23. defload
  24.    universal load_ext
  25. compile if EPM
  26.    universal load_var
  27. compile endif
  28.    if load_ext='BAT' | load_ext='CMD' | load_ext='EXC' | load_ext='EXEC' | load_ext='XEDIT' | load_ext='ERX' then
  29.       getline line,1
  30.       if substr(line,1,2)='/*' or (line='' & .last = 1) then
  31.          keys   rexx_keys
  32.  compile if REXX_TABS <> 0
  33.   compile if EPM
  34.          if not (load_var // 2) then  -- 1 would be on if tabs set from EA EPM.TABS
  35.   compile endif
  36.          'tabs' REXX_TABS
  37.   compile if EPM
  38.          endif
  39.   compile endif
  40.  compile endif
  41.  compile if REXX_MARGINS <> 0
  42.   compile if EPM
  43.          if not (load_var%2 - 2*(load_var%4)) then  -- 2 would be on if tabs set from EA EPM.MARGINS
  44.   compile endif
  45.          'ma'   REXX_MARGINS
  46.   compile if EPM
  47.          endif
  48.   compile endif
  49.  compile endif
  50.       endif
  51.    endif
  52. compile endif
  53.  
  54. compile if WANT_CUA_MARKING & EPM
  55.  defkeys rexx_keys clear
  56. compile else
  57.  defkeys rexx_keys
  58. compile endif
  59.  
  60. compile if EVERSION >= 5
  61. def space=
  62. compile else
  63. def ' '=
  64. compile endif
  65.    universal expand_on
  66.    if expand_on then
  67.       if not rex_first_expansion() then
  68.          keyin ' '
  69.       endif
  70.    else
  71.       keyin ' '
  72.    endif
  73.  compile if EVERSION >= '5.20'
  74.    undoaction 1, junk                -- Create a new state
  75.  compile endif
  76.  
  77. compile if ASSIST_TRIGGER = 'ENTER'
  78. def enter=
  79.  compile if ENHANCED_ENTER_KEYS & ENTER_ACTION <> ''
  80.    universal enterkey
  81.  compile endif
  82. compile else
  83. def c_enter=
  84.  compile if ENHANCED_ENTER_KEYS & c_ENTER_ACTION <> ''
  85.    universal c_enterkey
  86.  compile endif
  87. compile endif
  88.    universal expand_on
  89.  
  90. compile if EVERSION >= 5
  91.    if expand_on then
  92. compile else
  93.    if expand_on & not command_state() then
  94. compile endif
  95. compile if EVERSION >= '4.12'
  96.       if not rex_second_expansion() then
  97. compile else
  98.       if rex_second_expansion() then
  99.          call maybe_autosave()
  100.       else
  101. compile endif
  102. compile if ASSIST_TRIGGER = 'ENTER'
  103.  compile if ENHANCED_ENTER_KEYS & ENTER_ACTION <> ''
  104.          call enter_common(enterkey)
  105.  compile else
  106.          call my_enter()
  107.  compile endif
  108. compile else  -- ASSIST_TRIGGER
  109.  compile if ENHANCED_ENTER_KEYS & c_ENTER_ACTION <> ''
  110.          call enter_common(c_enterkey)
  111.  compile else
  112.          call my_c_enter()
  113.  compile endif
  114. compile endif -- ASSIST_TRIGGER
  115.       endif
  116.    else
  117. compile if ASSIST_TRIGGER = 'ENTER'
  118.  compile if ENHANCED_ENTER_KEYS & ENTER_ACTION <> ''
  119.       call enter_common(enterkey)
  120.  compile else
  121.       call my_enter()
  122.  compile endif
  123. compile else  -- ASSIST_TRIGGER
  124.  compile if ENHANCED_ENTER_KEYS & c_ENTER_ACTION <> ''
  125.       call enter_common(c_enterkey)
  126.  compile else
  127.       call my_c_enter()
  128.  compile endif
  129. compile endif -- ASSIST_TRIGGER
  130.    endif
  131.  
  132. def c_x=       -- Force expansion if we don't have it turned on automatic
  133.    if not rex_first_expansion() then
  134.       call rex_second_expansion()
  135.    endif
  136. compile endif  -- EXTRA
  137.  
  138. compile if not EXTRA_EX or INCLUDING_FILE = 'EXTRA.E'  -- Following gets defined in EXTRA.EX if it's being used
  139. defproc rex_first_expansion            -- Called by space bar
  140.    retc = 0                            -- Default, enter a space
  141. compile if EVERSION >= 5
  142.    if .line then
  143. compile else
  144.    if .line and (not command_state()) then
  145. compile endif
  146.       w=strip(textline(.line),'T')
  147.       wrd=upcase(w)
  148.       If wrd='IF' Then
  149.          replaceline w' then'
  150.          insertline substr(wrd,1,length(wrd)-2)'else',.line+1
  151.          if not insert_state() then insert_toggle
  152. compile if EVERSION >= '5.50'
  153.              call fixup_cursor()
  154. compile endif
  155.          endif
  156.       elseif wrd='WHEN' Then
  157.          replaceline w' then'
  158.          if not insert_state() then insert_toggle
  159. compile if EVERSION >= '5.50'
  160.              call fixup_cursor()
  161. compile endif
  162.          endif
  163.       elseif wrd='DO' Then
  164.          insertline substr(wrd,1,length(wrd)-2)'end /* do */',.line+1
  165. ;        if not insert_state() then insert_toggle endif
  166.       endif
  167.    endif
  168.    return retc
  169.  
  170. defproc rex_second_expansion
  171.    retc=1                               -- Default, don't insert a line
  172.    if .line then
  173.       getline line
  174.       line = upcase(line)
  175.       parse value line with firstword .
  176.       c=max(1,verify(line,' '))-1  -- Number of blanks before first word.
  177.  
  178.       If firstword='SELECT' then
  179.          insertline substr('',1,c+REXX_SYNTAX_INDENT)'when',.line+1
  180.          insertline substr('',1,c /*+REXX_SYNTAX_INDENT*/)'otherwise',.line+2
  181.          insertline substr('',1,c)'end  /* select */',.line+3
  182.          '+1'                             -- Move to When clause
  183.          .col = c+REXX_SYNTAX_INDENT+5         -- Position the cursor
  184.       Elseif firstword = 'DO' then
  185.          call einsert_line()
  186.          .col=.col+REXX_SYNTAX_INDENT
  187.       Elseif Pos('THEN DO',line) > 0 or Pos('ELSE DO',line) > 0 Then
  188.          call einsert_line()
  189.          .col=.col+REXX_SYNTAX_INDENT
  190.          insertline substr('',1,c)'end  /* Do */',.line+1
  191. ;     Elseif pos('/*',line) then          -- Annoying to me, as I don't always
  192. ;        if not pos('*/',line) then       -- want a comment closed on that line
  193. ;           end_line;keyin' */'           -- Enable if you wish by uncommenting
  194. ;        endif
  195. ;        call einsert_line()
  196.       Else
  197.          retc = 0                         -- Insert a blank line
  198.       Endif
  199.    Else
  200.       retc=0
  201.    Endif
  202.    Return(retc)
  203.  
  204. compile endif  -- EXTRA
  205.