home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / memacs32.zip / ehelp.cmd < prev    next >
OS/2 REXX Batch file  |  1993-08-07  |  11KB  |  566 lines

  1. store-procedure    init-help
  2.  
  3.     clear-message-line
  4.     print "                [Loading Help System]"
  5.     set %oldscreen $scrname        ;remember the screen we were on
  6.     set %oldmode $modeflag        ;remember the original $modeflag
  7.     set $discmd FALSE
  8.     find-screen "HELP"        ;switch to the help screen
  9.  
  10.     set %oldres $sres
  11.     !if &or &or &or &seq $sres "EGA" &seq $sres "VGA" &seq $sres "CGA40" &seq $sres "VGA12"
  12.         set $sres "CGA"
  13.     !endif
  14.  
  15.      ;remember the original screen size and placement
  16.     set %oldwidth $curwidth
  17.     set %oldlen $pagelen
  18.     set %oldrow $orgrow
  19.     set %oldcol $orgcol
  20.     set %oldmmove $mmove
  21.  
  22.     ;make this screen the proper size for help
  23.     set $orgrow 0
  24.     set $orgcol 0
  25.     set $curwidth 80
  26.     !if ¬ &equ $pagelen 24
  27.         set $pagelen 25
  28.     !endif
  29.     set $mmove 0
  30.  
  31.     set $modeflag FALSE
  32.     set %done FALSE            ;not done with help
  33.     view-file &find ehelp1.txt    ;read in the help file!
  34.     set %helpfile 1            ;mark which help file we are in
  35.     delete-mode "view"        ;don't lock the help file
  36.     sethscreen
  37.     set %helpscreen "Main Menu"    ;start at the main menu
  38.     gethscreen
  39. !endm
  40.  
  41. store-procedure gethscreen    ;switch the current help screen
  42.  
  43. *gethbegin
  44.  
  45.     ;build the window ID line
  46.     1 next-window
  47.     beginning-of-file
  48.     set-mark
  49.     end-of-file
  50.     kill-region
  51.     !if &gre &len $version 5
  52.         insert-string "MicroEMACS version "
  53.     !else
  54.         insert-string "    MicroEMACS version "
  55.     !endif
  56.     insert-string $version
  57.     insert-string "        Help System    "
  58.     insert-string %helpscreen
  59.     beginning-of-line
  60.     unmark-buffer
  61.  
  62.     ;find and display the named helpscreen
  63.     2 next-window
  64.     beginning-of-file
  65.     set %tmp &cat "~n=>" %helpscreen
  66.     !force search-forward %tmp
  67.     !if &seq $status FALSE
  68.         !if &equ %helpfile 1
  69.             view-file &find ehelp2.txt ;read in the help file!
  70.             set %helpfile 2        ;mark which help file we are in
  71.         !else
  72.             view-file &find ehelp1.txt ;read in the help file!
  73.             set %helpfile 1        ;mark which help file we are in
  74.         !endif
  75.         delete-mode "view"        ;don't lock the help file
  76.             
  77.         beginning-of-file
  78.         !force search-forward %tmp
  79.         !if &seq $status FALSE
  80.             set %helpscreen "Main Menu"
  81.             print "          [Attempt to fetch illegal screen]"
  82.             !goto gethbegin
  83.         !endif
  84.     !endif
  85.     1 next-line
  86.     beginning-of-line
  87.     !if &equ $curchar 61
  88.         1 forward-character
  89.         set-mark
  90.         end-of-line
  91.         copy-region
  92.         set %helpscreen $kill
  93.         !goto gethbegin
  94.     !endif
  95.     1 next-line
  96.     beginning-of-line
  97.     1 redraw-display
  98.     update-screen
  99.     set %topline $curline
  100.     set %bottomline &add $curline 20
  101.  
  102.     firstsel    ;position us at the first selection
  103.  
  104. !endm
  105.  
  106. store-procedure sethscreen    ;set up the windows on the help screen
  107.  
  108.     find-screen "HELP"
  109.     delete-other-windows
  110.     beginning-of-file
  111.     split-current-window
  112.     0 resize-window
  113.     add-mode "red"
  114.     add-mode WHITE
  115.     select-buffer "Window ID"
  116.     next-window
  117.     split-current-window
  118.     19 resize-window
  119.     add-mode "blue"
  120.     add-mode WHITE
  121.     next-window
  122.     add-mode "red"
  123.     add-mode WHITE
  124.     beginning-of-file
  125.     !if &les $pagelen 25
  126.         4 next-line
  127.         1 redraw-display
  128.     !endif
  129. !endm
  130.  
  131. store-procedure firstsel    ;position us at the first selection
  132.  
  133.     9 set-mark        ;remember where we started from
  134.     set %endscreen &add $curline 20
  135.     search-forward "< >"    ;look for a selection
  136.     !if &gre $curline %endscreen
  137.  
  138.         ;no selections on this screen!
  139.         9 goto-mark
  140.         set %selflag FALSE
  141.     !else
  142.         2 backward-character
  143.         set %selflag TRUE
  144.         8 set-mark
  145.     !endif
  146.  
  147. !endm
  148.  
  149. store-procedure setsel        ;highlight the current selection
  150.  
  151.     !if &seq %selflag TRUE
  152.         delete-next-character
  153.         insert-string "*"
  154.         backward-character
  155.         unmark-buffer
  156.     !endif
  157. !endm
  158.  
  159. store-procedure clearsel        ;clear the current selection
  160.  
  161.     !if &seq %selflag TRUE
  162.         delete-next-character
  163.         insert-string " "
  164.         backward-character
  165.         unmark-buffer
  166.     !endif
  167. !endm
  168.  
  169. store-procedure nextcmd
  170.  
  171.     !if &seq $pending FALSE
  172.         update-screen
  173.     !endif
  174.  
  175.     set %cmd >cmd
  176.  
  177.     !if &or ¬ &seq $os "UNIX" ¬ &seq %cmd "^C"
  178.         !force set %cmd &bind %cmd
  179.     !else
  180.         !if ¬ $pending
  181.             write-message "FN-"
  182.         !endif
  183.         set %rcchar >key
  184.         set %rcchar &sindex "1234567890!@#$%^&*()" %rcchar
  185.         clear-message-line
  186.         !if &equ %rcchar 0
  187.             set %cmd "nop"
  188.             !return
  189.         !endif
  190.         set %rctmp "FN"
  191.         !if &gre %rcchar 10
  192.             set %rctmp &cat "S-" %rctmp
  193.         !endif
  194.         set %rcchar &mid "12345678901234567890" %rcchar 1
  195.         set %cmd &bind &cat %rctmp %rcchar
  196.     !endif
  197.  
  198.     clear-message-line
  199.  
  200. !endm
  201.  
  202. store-procedure execloop    ;execute a user screen
  203.  
  204.     setsel        ;mark the current selection
  205.     nextcmd        ;get the command
  206.     clearsel    ;clear the selection
  207.     execcmd        ;execute the command
  208.  
  209. !endm
  210.  
  211. store-procedure execcmd        ;execute the current command
  212.  
  213.     !if &seq %cmd &bind "MSm"
  214.         !return
  215.     !endif
  216.  
  217.     !if &seq %cmd "set"
  218.         !if &seq $debug TRUE
  219.             set $debug FALSE
  220.         !else
  221.             set $debug TRUE
  222.         !endif
  223.         !return
  224.     !endif
  225.  
  226.     !if &seq %selflag TRUE
  227.  
  228.         !if &seq %cmd "forward-character"
  229.             forward-selection
  230.             !return
  231.         !endif
  232.  
  233.         !if &seq %cmd "backward-character"
  234.             backward-selection
  235.             !return
  236.         !endif
  237.  
  238.         !if &seq %cmd "next-line"
  239.             next-selection
  240.             !return
  241.         !endif
  242.  
  243.         !if &seq %cmd "previous-line"
  244.             previous-selection
  245.             !return
  246.         !endif
  247.  
  248.         !if &seq %cmd "newline"
  249.             select-this
  250.             !return
  251.         !endif
  252.  
  253.     !endif
  254.  
  255.     !if &seq %cmd "next-page"
  256.         next-hscreen
  257.         !return
  258.     !endif
  259.  
  260.     !if &seq %cmd "newline"
  261.         next-hscreen
  262.         !return
  263.     !endif
  264.  
  265.     !if &seq %cmd "previous-page"
  266.         previous-hscreen
  267.         !return
  268.     !endif
  269.  
  270.     !if &seq %cmd &bind "FN6"
  271.         set %helpscreen "Index"
  272.         gethscreen
  273.         !return
  274.     !endif
  275.  
  276.     !if &seq %cmd "beginning-of-file"
  277.         set %helpscreen "Main Menu"
  278.         gethscreen
  279.         !return
  280.     !endif
  281.  
  282.     !if &seq %cmd "exit-emacs"
  283.         exit-help
  284.         !return
  285.     !endif
  286.  
  287.     !if &seq %cmd &bind "MSa"
  288.         select-mouse
  289.         !return
  290.     !endif
  291.  
  292.     !if &seq %cmd &bind "MSb"
  293.         !return
  294.     !endif
  295.  
  296.     !if &seq %cmd "abort-command"
  297.         print "[Help Aborted right HERE!]"
  298.         stop
  299.     !endif
  300.  
  301.     print "              [Not a legal command at this time]"
  302.  
  303. !endm
  304.  
  305. store-procedure forward-selection
  306.  
  307.     search-forward "< >"
  308.     !if &gre $curline %bottomline
  309.         set $curline %topline
  310.         search-forward "< >"
  311.     !endif
  312.     2 backward-character
  313.     8 set-mark
  314.  
  315. !endm
  316.  
  317. store-procedure backward-selection
  318.  
  319.     search-reverse "< >"
  320.     !if &less $curline %topline
  321.         set $curline %bottomline
  322.         search-reverse "< >"
  323.     !endif
  324.     1 forward-character
  325.     8 set-mark
  326.  
  327. !endm
  328.  
  329. store-procedure next-selection
  330.  
  331.     set %target $curcol
  332.     forward-selection
  333.     !while ¬ &equ %target $curcol
  334.         forward-selection
  335.     !endwhile
  336.  
  337. !endm
  338.  
  339. store-procedure previous-selection
  340.  
  341.     set %target $curcol
  342.     backward-selection
  343.     !while ¬ &equ %target $curcol
  344.         backward-selection
  345.     !endwhile
  346.  
  347. !endm
  348.  
  349. store-procedure select-this    ;select the currently highlighted selection
  350.  
  351.     next-word        ;jump to the beginning of the selection
  352.     7 set-mark        ;mark it so we can come back!
  353.     set-mark
  354.     set %tmpline $curline    ;remember what line we are on
  355.     search-forward "< >"    ;find the beginning of the next selection
  356.     !if ¬ &equ %tmpline $curline
  357.  
  358.         ;we are on a new line, try for a <tab>!
  359.         7 goto-mark
  360.         search-forward "~t"
  361.         !if ¬ &equ %tmpline $curline
  362.  
  363.             ;we are no longer on the same line, select the whole line
  364.             7 goto-mark
  365.             end-of-line
  366.         !else
  367.             ;backup over the tab
  368.             1 backward-character
  369.         !endif
  370.     !else
  371.  
  372.         ;select up to this selection
  373.         4 backward-character
  374.     !endif
  375.  
  376.     ;get the selection
  377.     copy-region
  378.     set %selection &trim $kill
  379. ;    print &cat &cat "[selecting :" %selection ":]"
  380.     set %helpscreen %selection
  381.     gethscreen
  382. !endm
  383.  
  384. store-procedure select-mouse
  385.  
  386.     9 set-mark
  387.     mouse-move-down
  388.  
  389.     set %cmd ""
  390.     !if &and &gre $ypos 20 &less $ypos 24
  391.  
  392.         ; a mouse click on a key in the key window/find the key
  393.         1 forward-character
  394.         !force search-reverse "["
  395.         !if &seq $status FALSE
  396.             search-forward "["
  397.         !else
  398.             1 forward-character
  399.         !endif
  400.         set-mark
  401.         search-forward "]"
  402.         1 backward-character
  403.         copy-region
  404.         2 next-window
  405.         set %cmd $kill
  406.     !else
  407.         ; a mouse click on a key in the text window?/find the key
  408.         set %tmpline $curline    ;remember what line we are on
  409.         set %tmpsline $cwline    ;and at what screen line
  410.         7 set-mark        ;remember where we started from
  411.         1 forward-character
  412.         !force search-reverse "["    ;find the beginning of the next selection
  413.         !if &and &seq $status TRUE &equ %tmpline $curline
  414.  
  415.             1 forward-character
  416.             set-mark
  417.             search-forward "]"
  418.             1 backward-character
  419.             copy-region
  420.             set %cmd $kill
  421.         !else
  422.             7 goto-mark
  423.             %tmpsline redraw-display
  424.             update-screen
  425.         !endif
  426.     !endif
  427.  
  428.     !if ¬ &seq %cmd ""
  429.  
  430.         !if &and &seq %selflag TRUE &seq %cmd "ENTER"
  431.             select-this
  432.             !return
  433.         !endif
  434.  
  435.         !if &seq %cmd "F10" 
  436.             exit-help
  437.             !return
  438.         !endif
  439.  
  440.         !if &seq %cmd "PG UP"
  441.             previous-hscreen
  442.             !return
  443.         !endif
  444.  
  445.         !if &seq %cmd "PG DOWN"
  446.             next-hscreen
  447.             !return
  448.         !endif
  449.  
  450.         !if &seq %cmd "F6"
  451.             set %helpscreen "Index"
  452.             gethscreen
  453.             !return
  454.         !endif
  455.  
  456.         !if &seq %cmd "HOME"
  457.             set %helpscreen "Main Menu"
  458.             gethscreen
  459.             !return
  460.         !endif
  461.     !endif
  462.  
  463.     !if &or &seq %selflag FALSE &or &gre $ypos 24 &equ $ypos 1
  464.         2 next-window
  465.         print "              [Not a legal command at this time]"
  466.         9 goto-mark
  467.         !return
  468.     !endif
  469.  
  470.     3 forward-character
  471.     backward-selection
  472.     select-this
  473.  
  474. !endm
  475.  
  476. store-procedure next-screen
  477.  
  478.     search-reverse "NEXT["
  479.     set-mark
  480.     search-forward "]"
  481.     backward-character
  482.     copy-region
  483.     set %helpscreen $kill
  484.     gethscreen
  485.  
  486. !endm
  487.  
  488. store-procedure next-hscreen
  489.  
  490.     search-reverse "NEXT["
  491.     5 forward-character
  492.     set-mark
  493.     search-forward "]"
  494.     backward-character
  495.     copy-region
  496.     set %helpscreen $kill
  497.     gethscreen
  498.  
  499. !endm
  500.  
  501. store-procedure previous-hscreen
  502.  
  503.     search-reverse "PREV["
  504.     5 forward-character
  505.     set-mark
  506.     search-forward "]"
  507.     backward-character
  508.     copy-region
  509.     set %helpscreen $kill
  510.     gethscreen
  511.  
  512. !endm
  513.  
  514. store-procedure exit-help
  515.  
  516.      ;restore the original screen size and placement
  517.     set $curwidth %oldwidth
  518.     set $pagelen %oldlen
  519.     set $orgrow %oldrow
  520.     set $orgcol %oldcol
  521.     set $mmove %oldmmove
  522.  
  523.     ;switch us to the screen we started on
  524.     find-screen %oldscreen
  525.     set $modeflag %oldmode
  526.  
  527.     ;and put us back in our original screen mode
  528.     !if ¬ &seq $sres %oldres
  529.         set $sres %oldres
  530.     !endif
  531.  
  532.     ;clear out all the buffers and macroes we used
  533.     delete-buffer "[init-help]"
  534.     delete-buffer "[gethscreen]"
  535.     delete-buffer "[sethscreen]"
  536.     delete-buffer "[firstsel]"
  537.     delete-buffer "[setsel]"
  538.     delete-buffer "[clearsel]"
  539.     delete-buffer "[nextcmd]"
  540.     delete-buffer "[forward-selection]"
  541.     delete-buffer "[backward-selection]"
  542.     delete-buffer "[next-selection]"
  543.     delete-buffer "[previous-selection]"
  544.     delete-buffer "[select-this]"
  545.     delete-buffer "[next-screen]"
  546.     delete-buffer "[next-hscreen]"
  547.     delete-buffer "[previous-hscreen]"
  548.     delete-screen HELP
  549.     !force delete-buffer ehelp1.txt
  550.     !force delete-buffer ehelp2.txt
  551.     set $discmd TRUE
  552.     set %done TRUE
  553. !endm
  554.  
  555. ;    Help main program
  556.  
  557. init-help
  558. !while ¬ %done
  559.     execloop
  560. !endwhile
  561.  
  562. delete-buffer "[select-mouse]"
  563. delete-buffer "[execloop]"
  564. delete-buffer "[execcmd]"
  565. delete-buffer "[exit-help]"
  566.