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 / cpage.cmd < prev    next >
OS/2 REXX Batch file  |  1996-04-25  |  8KB  |  345 lines

  1. ;    CPAGE.CMD:    C language MENU Page
  2. ;            for MicroEMACS 3.9e and above
  3. ;            (C)opyright 1988 by Daniel Lawrence
  4. ;
  5.  
  6. ; set up the "clean" procedure
  7. store-procedure clean
  8.     delete-buffer "[c-new-proc]"
  9.     delete-buffer "[c-new-func]"
  10.     delete-buffer "[c-new-if]"
  11.     delete-buffer "[c-new-while]"
  12.     delete-buffer "[c-new-repeat]"
  13.     delete-buffer "[c-new-switch]"
  14.     delete-buffer "[c-value]"
  15.     delete-buffer "[c-keys-up]"
  16.     delete-buffer "[c-find-com]
  17.     delete-buffer "[c-comment-block]"
  18.     delete-buffer "[drawbox]"
  19.     delete-buffer "[setpoints]"
  20.     set $cmode %oldmode
  21.     set $gmode %oldgmode
  22. !endm
  23.  
  24. ; make sure the function key window is up
  25.     set %rcfkeys FALSE
  26.     toggle-fkeys
  27.     write-message "Loading..."
  28.  
  29. ; Write out the page instructions
  30.     save-window
  31.     1 next-window
  32.     beginning-of-file
  33.     set $curcol 25
  34.     overwrite-string " F1 PROCEDURE             F2 function           "
  35.     next-line
  36.     set $curcol 25
  37.     overwrite-string " F3 if then else          F4 while              "
  38.     next-line
  39.     set $curcol 25
  40.     overwrite-string " F5 REPEAT                F6 switch             "
  41.     next-line
  42.     set $curcol 18
  43.     overwrite-string "C   "
  44.     set $curcol 25
  45.     overwrite-string " F7 VALUE                 F8 Reserved words UP  "
  46.     next-line
  47.     set $curcol 25
  48.     overwrite-string " F9 chk comment matching F10 Comment block      "
  49.     unmark-buffer
  50.     beginning-of-file
  51.     !force restore-window
  52.     update-screen
  53.  
  54. ;
  55.  
  56. store-procedure c-new-proc
  57. ;    set $debug TRUE
  58.         set %proc @"Procedure Name: "
  59.         insert-string &cat &cat "Procedure " %proc "~n"
  60.         insert-string "   ( VAR ~n"
  61.         insert-string "   );~n"
  62.         insert-string "~n"
  63.         insert-string &cat &cat "{ (* " %proc " *)~n"
  64.         insert-string &cat &cat "};  (* " %proc " *)~n"
  65.     previous-line
  66.         open-line
  67.         insert-string "   "
  68.     !force set $debug FALSE
  69. !endm
  70.  
  71. ;    Function
  72. store-procedure c-new-func
  73.         set %func @"Function Name: "
  74.         set %type @"Return type: "
  75.     insert-string %type
  76.     !if ¬ &sequal &right %type 1 "*"
  77.         insert-string " "
  78.     !endif                            
  79.         insert-string &cat %func "()~n~n{~n    ~n}~n"
  80.         3 backward-character
  81.     !force set $debug FALSE
  82. !endm
  83.  
  84. ;
  85.  
  86. store-procedure    c-new-if
  87.         set %cond @"Condition Expr: "
  88.         insert-string &cat &cat "if (" %cond ") {"
  89.     newline-and-indent
  90.     newline-and-indent
  91.         insert-string "} else {"
  92.     newline-and-indent
  93.     newline-and-indent
  94.            insert-string &cat &cat "}  /* if (" %cond ") */"
  95.     1 previous-line
  96.         end-of-line
  97.         handle-tab
  98.     2 previous-line
  99.         end-of-line
  100.         handle-tab
  101. !endm
  102.  
  103. ;
  104.  
  105. store-procedure    c-new-while
  106.         set %cond @"Condition Expr: "
  107.     ;set $debug TRUE
  108.         insert-string &cat &cat "while (" %cond ") {"
  109.     newline-and-indent
  110.     newline-and-indent
  111.         insert-string &cat &cat "}  /* while (" %cond ") */"
  112.     1 previous-line
  113.         end-of-line
  114.     handle-tab
  115. !endm
  116.  
  117. store-procedure c-new-repeat
  118.         set %cond @"Condition Expr: "
  119.     ;set $debug TRUE
  120.         set %curcol $curcol
  121.         insert-string &cat &cat "REPEAT~n"
  122.         %curcol insert-string " "
  123.         set $curcol %curcol
  124.         !if &EQUal  %curcol 3
  125.             insert-string &cat &cat "UNTIL " %cond ";"
  126.     !else
  127.             insert-string &cat      "UNTIL " %cond 
  128.     !endif
  129.         beginning-of-line
  130.         open-line
  131.         %curcol insert-string " "
  132.         insert-string "   "
  133.     !force set $debug FALSE
  134. !endm
  135.  
  136. store-procedure c-new-switch
  137.         set %expr @"Switch Expr: "
  138.     ;set $debug TRUE
  139.         set %curcol $curcol
  140.         insert-string &cat &cat "switch (" %expr ") {"
  141.     newline-and-indent
  142.     insert-string "}"
  143.     previous-line
  144.     end-of-line
  145.     newline-and-indent
  146.     handle-tab
  147.     insert-string "case "
  148.     !force set $debug FALSE
  149. !endm
  150.  
  151. store-procedure c-value
  152. ;    set $debug TRUE
  153.         set %curcol $curcol
  154.         set %value @"Value: "
  155.         insert-string &cat %value " : {~n"
  156.         %curcol insert-string " "
  157.         insert-string "    };~n"
  158.         %curcol insert-string " "
  159.     previous-line
  160.         beginning-of-line
  161.         open-line
  162.         %curcol insert-string " "
  163.         insert-string "       "
  164.     !force set $debug FALSE
  165. !endm
  166.  
  167. store-procedure    c-keys-up
  168. ;    set $debug TRUE
  169.         set %curcol $curcol
  170.     ;save-file
  171.         set-mark
  172.     beginning-of-file
  173.         write-message "[Replacing 'begin']
  174.     replace-string "begin" "BEGIN"
  175.  
  176.     beginning-of-file
  177.         write-message "[Replacing 'end']
  178.     replace-string "end" "END"
  179.  
  180.     beginning-of-file
  181.         write-message "[Replacing ' if']
  182.     replace-string " if" " IF"
  183.  
  184.     beginning-of-file
  185.         write-message "[Replacing ' else']
  186.     replace-string " else" " ELSE"
  187.  
  188.     beginning-of-file
  189.         write-message "[Replacing ' repeat']
  190.     replace-string " repeat" " REPEAT"
  191.  
  192.     beginning-of-file
  193.         write-message "[Replacing ' while']
  194.     replace-string " while" " WHILE"
  195.  
  196.         exchange-point-and-mark
  197.     !force set $debug FALSE
  198. !endm
  199.  
  200. store-procedure    c-find-com
  201. ;    This hunts down mismatched comment problems in C
  202.  
  203.     beginning-of-file
  204.     !force search-forward "/*"
  205.     !if &seq $status FALSE
  206.         !goto nend
  207.     !endif
  208.  
  209. *nxtopen
  210.     ;record the position of the open comment
  211.     update-screen
  212.     set %oline $curline
  213.     set %opos $curcol
  214.  
  215.     ;find the first close comment
  216.     !force search-forward "*/"
  217.     !if &seq $status FALSE
  218.         write-message "%%No close to this open comment"
  219.         !return
  220.     !endif
  221.  
  222.     ;record the position of the close comment
  223.     set %cline $curline
  224.     set %cpos $curcol
  225.  
  226.     ;go back to the open and find the next open
  227.     set $curline %oline
  228.     set $curcol %opos
  229.  
  230.     ;and now find the next open
  231.     !force search-forward "/*"
  232.     !if &seq $status FALSE
  233.         write-message "No errors"
  234.         !return
  235.     !endif
  236.     set %nline $curline
  237.     set %npos $curcol
  238.  
  239.     ;compare the close to the next open
  240.     !if &less %cline %nline
  241.         !goto getnext
  242.     !endif
  243.     !if &and &equ %cline %nline &less %cpos %npos
  244.         !goto getnext
  245.     !endif
  246.  
  247.     ;report a mismatch
  248.     set $curline %oline
  249.     set $curcol %opos
  250.     write-message "%%This comment does not terminate properly"
  251.     !return
  252.  
  253. *getnext
  254.     set $curline %nline
  255.     set $curcol %npos
  256.     !goto nxtopen 
  257. !endm
  258.  
  259. store-procedure c-comment-block
  260.     set %c1 "/"
  261.     set %c2 "*"
  262.     set %c3 "\"
  263.     set %c4 "\"
  264.     set %c5 "/"
  265.     set %c6 "*"
  266.     run drawbox    
  267. !endm
  268.  
  269. store-procedure drawbox
  270.     run setpoints
  271.     set $curline %mline
  272.     set $curcol %mcol
  273. ;draw top horizontal line
  274.     insert-string %c1
  275.     set %width &add 2 &sub %pcol %mcol
  276.     %width insert-string %c2
  277.      insert-string %c3
  278.     newline-and-indent
  279. ;draw bottom horizontal line
  280.     %pline goto-line
  281.     next-line
  282.     end-of-line
  283.        newline
  284.     %mcol insert-string " "
  285.     insert-string %c4
  286.     %width insert-string %c2
  287.     insert-string %c5
  288. ;bump pline 
  289.     set %pline &add %pline 1
  290. ;draw verticals -- go to top and work our way down
  291.     %mline goto-line
  292.     !while &less $curline %pline
  293.         next-line
  294.         end-of-line
  295.         !if &less $curcol %pcol
  296.             &sub %pcol $curcol insert-string " "
  297.         !endif
  298.         set $curcol %pcol
  299.         insert-string " "
  300.         insert-string %c6
  301.         set $curcol %mcol
  302.         insert-string %c6
  303.         insert-string " "
  304.     !endwhile
  305. ;return to point
  306.     %pline goto-line
  307.     next-line
  308.     beginning-of-line
  309.     &add 6 %width forward-character
  310. !endm
  311.  
  312. store-procedure setpoints
  313. ; procedure will set pcol, pline, mcol and mline. currently at point
  314. ; it will also detab the region
  315.     set %pcol $curcol
  316.     set %pline $curline
  317.     exchange-point-and-mark
  318.     set %mcol $curcol
  319.     set %mline $curline
  320.     exchange-point-and-mark
  321.     detab-region
  322.     set $curline %pline
  323.     set $curcol %pcol
  324. !endm
  325.  
  326. macro-to-key c-new-proc        S-FN1
  327. macro-to-key c-new-func        S-FN2
  328. macro-to-key c-new-if        S-FN3
  329. macro-to-key c-new-while    S-FN4
  330. macro-to-key c-new-repeat    S-FN5
  331. macro-to-key c-new-switch    S-FN6
  332. macro-to-key c-value        S-FN7
  333. macro-to-key c-keys-up        S-FN8
  334. macro-to-key c-find-com        S-FN9
  335. macro-to-key c-comment-block    S-FN0
  336. macro-to-key c-comment-block    A-FN0
  337.  
  338. ; Set up CMODE
  339. set %oldmode $cmode
  340. set %oldgmode $gmode
  341. add-mode CMODE
  342. add-global-mode CMODE
  343.  
  344. write-message "[C MENU page loaded]"
  345.