home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / CMDS / memacs400_cmds.lzh / MEMACS400 / CMD / mdi.cmd < prev    next >
OS/2 REXX Batch file  |  1996-04-25  |  3KB  |  156 lines

  1. ;
  2. ; Screen juggling macroes for MicroEMACS 4.0 for Windows.
  3. ; Handles MDI features, including drag-and-drop.
  4. ;
  5. ; Pierre Perret - April 1993
  6. ; Updated for version 4.0 May 1995
  7. ;
  8.  
  9. global %scrwidth
  10. global %filename
  11. global %dropbuf
  12.  
  13. rename-screen $cbufname
  14. restore-screen
  15. set $newscreen TRUE    ; A new screen for each new file
  16. set %scrwidth 75
  17. ;set %scrwidth 80    ; 80 is more appropriate above 640x480
  18.  
  19. %scrwidth change-screen-width
  20.  
  21. set %filename ""
  22. set %dropbuf "Dropped files"    ; Special buffer used for drag-and-drop.
  23.  
  24. ;
  25. ; Reads files in an MDI manner.
  26. ; Overcomes a bug in the "new screen" mechanism by re-sizing the screen.
  27. ; Called by the drag-and-drop mechanism as well.
  28. ;
  29. store-procedure open-file
  30.     local %prevbuf
  31.     set %prevbuf $cbufname
  32.  
  33.     ;
  34.     ; Are we called from drop-files?
  35.     ;
  36.     !if &seq %filename ""
  37.         !force execute-named-command find-file
  38.     !else
  39.         !force find-file %filename &lower %filename
  40.         ; the second argument is there to supply an alternate buffer name
  41.     !endif
  42.     !if $status
  43.         %scrwidth change-screen-width
  44.     !else
  45.         ; find-file failed
  46.         !if ¬ &seq $cbufname %prevbuf
  47.             ; buf name changed ==> it is a new file
  48.             %scrwidth change-screen-width
  49.         !endif
  50.     !endif
  51.     set %filename ""
  52. !endm
  53. macro-to-key    open-file    ^X^F
  54. unbind-menu    ">&File>&Open..."
  55. macro-to-menu    open-file    "&Open...@0"
  56.  
  57. ;
  58. ; Reads files in an MDI manner, with VIEW mode.
  59. ; Overcomes a bug in the "new screen" mechanism by re-sizing the screen.
  60. ;
  61. store-procedure visit-file
  62.     local %prevbuf
  63.     set %prevbuf $cbufname
  64.  
  65.     !force execute-named-command view-file
  66.  
  67.     !if $status
  68.         %scrwidth change-screen-width
  69.     !else
  70.         ; view-file failed
  71.         !if ¬ &seq $cbufname %prevbuf
  72.             ; buf name changed ==> it is a new file
  73.             %scrwidth change-screen-width
  74.         !endif
  75.     !endif
  76. !endm
  77. macro-to-key    visit-file    ^X^V
  78. unbind-menu    ">&File>&View..."
  79. macro-to-menu    visit-file    "&View...@1"
  80.  
  81. ;
  82. ; Makes sure there is one screen per visible buffer.
  83. ; Does not affect screens whose name do not match an existing buffer.
  84. ;
  85. store-procedure rebuild-screens
  86.     local %lastbuf
  87.  
  88.     ;
  89.     ; If we happen to start with an invisible buffer, skip it.
  90.     ;
  91.     !if &equ $cbflags &band 1 1
  92.         !force next-buffer
  93.         !if ¬ $status
  94.             !return
  95.         !endif
  96.     !endif
  97.     set %lastbuf $cbufname
  98. *BufLoop
  99.         find-screen "Relay screen"
  100.         next-buffer
  101.         find-screen $cbufname
  102.         select-buffer $scrname
  103.         delete-other-windows
  104.         restore-screen
  105.         %scrwidth change-screen-width
  106.  
  107.         !if ¬ &seq %lastbuf $cbufname
  108.             !goto BufLoop
  109.         !endif
  110.  
  111.     !if &seq $scrname "Relay screen"
  112.         cycle-screens
  113.     !endif
  114.     !force delete-screen "Relay screen"
  115.     cascade-screens
  116. !endm
  117. macro-to-menu    rebuild-screens ">S&creen>&Rebuild@0"
  118.  
  119. ;
  120. ; Close both the screen and the buffer associated with it.
  121. ;
  122. store-procedure kill-screen
  123.     local %prevbuf
  124.     local %prevscr
  125.  
  126.     set %prevscr $scrname
  127.     set %prevbuf $cbufname
  128.     cycle-screens
  129.     !force delete-screen %prevscr
  130.     !if $status
  131.         !force delete-buffer %prevbuf
  132.     !endif
  133. !endm
  134. macro-to-key    kill-screen A-K
  135. macro-to-menu    kill-screen     ">S&creen>&Kill@6"
  136.  
  137. ;
  138. ; Handle a drag-and-drop.
  139. ;
  140. store-procedure drop-files
  141.     local %prevbuf
  142.  
  143.     ; Note that we pay no attention to the location of the drop.
  144.     set %prevbuf $cbufname
  145.     select-buffer %dropbuf
  146.     goto-line 2
  147.     select-buffer %prevbuf
  148.     set %filename #%dropbuf
  149.     !while ¬ &seq %filename "<END>"
  150.         run open-file
  151.         set %filename #%dropbuf
  152.     !endwhile
  153.     set %filename ""
  154. !endm
  155. macro-to-key    drop-files    MS!
  156.