home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0040 - 0049 / ibm0040-0049 / ibm0040.tar / ibm0040 / DBRIEF.ZIP / SOURCE / PREPROC.M < prev    next >
Encoding:
Text File  |  1991-03-21  |  10.2 KB  |  381 lines

  1. ;dBRIEF Pre-Processor - v3.10
  2. ;Copyright (c) 1991 - Global Technologies Corporation
  3. ;ALL RIGHTS RESERVED
  4. #include "dbrief.h"
  5. (macro pre
  6.     (
  7.         (int                dpp_start_buffer
  8.                             dpp_flag
  9.         )
  10.         (string            dpp_extension
  11.                             dpp_buffer
  12.                             dpp_argument
  13.         )
  14.         (if (get_parm 0 dpp_argument "Preprocess current or all PRE buffers? [cA]: " 1 "A")
  15.             (
  16.                 (_sv)
  17.                 (= dpp_flag 1)
  18.                 (= dpp_start_buffer (inq_buffer))
  19.                 (while (== dpp_flag 1)
  20.                     (
  21.                         (inq_names NULL dpp_extension dpp_buffer)
  22.                         (if (== (upper dpp_extension) "PRE")
  23.                             (
  24.                                 (= dbr_current_buffer (inq_buffer))
  25.                                 (_preprocess)
  26.                                 (set_buffer dbr_current_buffer)
  27.                                 (attach_buffer dbr_current_buffer)
  28.                             )
  29.                         )
  30.                         (set_buffer (next_buffer))
  31.                         (attach_buffer (inq_buffer))
  32.                         (if (|| (== dpp_start_buffer (inq_buffer))(== (upper dpp_argument) "C"))
  33.                             (= dpp_flag 0)
  34.                         )
  35.                     )
  36.                 )
  37.                 (if (== dpp_extension "pre")
  38.                     (_display_popup_message "Preprocessing completed." "" 0)
  39.                 ;else
  40.                     (if (== (upper dpp_argument) "C")
  41.                         (_display_popup_message "Unable to preprocess %s extension." (upper dpp_extension) 1)
  42.                     ;else
  43.                         (_display_popup_message "Preprocessing completed." "" 0)
  44.                     )
  45.                 )
  46.                 (set_buffer dpp_start_buffer)
  47.                 (attach_buffer dpp_start_buffer)
  48.             )
  49.         )
  50.     )
  51. )
  52. (macro _preprocess
  53.     (
  54.         (string            dpp_full_name
  55.                             dpp_extension
  56.                             dpp_buffer_name
  57.                             dpp_prg_name
  58.         )
  59.         (inq_names dpp_full_name dpp_extension dpp_buffer_name)
  60.         (message "Preprocessing %s..." (upper dpp_buffer_name))
  61.         (if (inq_modified)
  62.             (write_buffer)
  63.         )
  64.         (= dpp_prg_name (+ (substr dpp_buffer_name 1 (- (index dpp_buffer_name ".") 1)) (+ "." (_get_dialect_info dbr_dialect 3))))
  65.         (if (exist dpp_prg_name)
  66.             (del dpp_prg_name)
  67.         )
  68.         (edit_file dpp_prg_name)
  69.         (top_of_buffer)
  70.         (drop_anchor)
  71.         (end_of_buffer)
  72.         (delete_block)
  73.         (read_file dpp_full_name)
  74.         (top_of_buffer)
  75.         (_import_includes dpp_buffer_name)
  76.         (_translate_defines dpp_buffer_name)
  77.         (_translate_ifdefs dpp_buffer_name)
  78.         (_translate_objects dpp_buffer_name)
  79.     )
  80. )
  81. (macro _import_includes
  82.     (
  83.         (string            dpp_include_file
  84.                             dpp_buffer_name
  85.         )
  86.         (get_parm 0 dpp_buffer_name)
  87.         (top_of_buffer)
  88.         (while (search_fwd "<{ @}|{\\t@}#include " 1 0)
  89.             (
  90.                 (= temp_str (ltrim (read)))
  91.                 (= temp_str (substr temp_str (+ (index temp_str "\"") 1)))
  92.                 (= dpp_include_file (substr temp_str 1 (- (index temp_str "\"") 1)))
  93.                 (message "Preprocessing %s..." (+ (+ (upper dpp_buffer_name) ": ") dpp_include_file))
  94.                 (beginning_of_line)
  95.                 (delete_to_eol)
  96.                 (insert (+ "*     dPP Included: " dpp_include_file))
  97.                 (beginning_of_line)
  98.                 (save_position)
  99.                 (move_rel 1 0)
  100.                 (insert "#beginning_of_include\n")
  101.                 (read_file dpp_include_file)
  102.                 (insert "#end_of_include\n")
  103.                 (restore_position)
  104.             )
  105.         )
  106.     )
  107. )
  108. (macro _translate_defines
  109.     (
  110.         (int                dpp_x
  111.                             dpp_y
  112.         )
  113.         (string            dpp_symbol
  114.                             dpp_constant
  115.                             dpp_parameter
  116.                             dpp_formula
  117.                             dpp_define
  118.                             dpp_pattern
  119.                             dpp_param
  120.                             dpp_buffer_name
  121.                             dpp_symbol_new
  122.                             temp_str_c
  123.                             symbol
  124.         )
  125.         (get_parm 0 dpp_buffer_name)
  126.         (top_of_buffer)
  127.         (while (search_fwd "<{ @}|{\\t@}#define " 1 0)
  128.             (
  129.                 (= temp_str (ltrim (read)))
  130.                 (= temp_str (ltrim (substr temp_str (index temp_str " "))))
  131.                 (= dpp_define temp_str)
  132.                 (delete_line)
  133.                 (save_position)
  134.                 (= dpp_symbol (trim (substr temp_str 1 (- (index temp_str " ") 1))))
  135.                 (if (index dpp_symbol "(")
  136.                     (
  137.                         (= dpp_parameter (substr dpp_symbol (+ (index dpp_symbol "(") 1)))
  138.                         (= dpp_parameter (substr dpp_parameter 1 (- (index dpp_parameter ")") 1)))
  139.                         (= dpp_symbol (substr dpp_symbol 1 (index temp_str "(")))
  140.                         (= dpp_formula (trim (ltrim (substr temp_str (index temp_str " ")))))
  141.                         (= dpp_pattern (+ dpp_symbol "\\c"))
  142.                         (message "Preprocessing %s..." (+ (+ (upper dpp_buffer_name) ": ") (+ dpp_symbol ")")))
  143.                         (while (search_fwd dpp_pattern 1 0)
  144.                             (
  145.                                 (= dpp_param (read))
  146.                                 (= dpp_param (substr dpp_param 1 (- (index dpp_param ")") 1)))
  147.                                 (beginning_of_line)
  148.                                 (= temp_str_c (read))
  149.                                 (drop_anchor)
  150.                                 (end_of_line)
  151.                                 (translate (+ (+ dpp_symbol "*") ")") dpp_formula 1 1 1 1 0)
  152.                                 (end_of_line)
  153.                                 (translate dpp_parameter dpp_param 1 1 1 1 0)
  154.                                 (raise_anchor)
  155.                                 (inq_position dpp_x dpp_y)
  156.                                 (beginning_of_line)
  157.                                 (= temp_str (read))
  158.                                 (beginning_of_line)
  159.                                 (if (&& (index temp_str "&&")(!= dbr_comment_tab 0))
  160.                                     (
  161.                                         (delete_to_eol)
  162.                                         (insert (trim (substr temp_str 1 (- (index temp_str "&&") 1))))
  163.                                         (if (<  (strlen (trim (substr temp_str 1 (- (index temp_str "&&") 1)))) dbr_comment_tab)
  164.                                             (move_abs 0 dbr_comment_tab)
  165.                                         ;else
  166.                                             (
  167.                                                 (end_of_line)
  168.                                                 (move_rel 0 2)
  169.                                             )
  170.                                         )
  171.                                         (insert (trim (substr temp_str_c (index temp_str_c "&&"))))
  172.                                     )
  173.                                 )
  174.                                 (if (|| (== (substr (ltrim temp_str_c) 1 1) "*") (== (substr (ltrim (upper temp_str_c)) 1 4) "NOTE"))
  175.                                     (
  176.                                         (insert (trim temp_str_c))
  177.                                         (delete_to_eol)
  178.                                     )
  179.                                 )
  180.                                 (move_abs dpp_x dpp_y)
  181.                             )
  182.                         )
  183.                     )
  184.                 ;else (it must be a constant #define)
  185.                     (
  186.                         (= dpp_constant (trim (ltrim (substr temp_str (index temp_str " ")))))
  187.                         (message "Preprocessing %s..." (+ (+ (upper dpp_buffer_name) ": ") dpp_symbol))
  188.                         (sprintf symbol "<|[ +/=*\\t]\\c%s[ +/=*\\t\\n]" (trim dpp_symbol))
  189.                         (while (search_fwd symbol 1 0)
  190.                             (
  191.                                 ;(beginning_of_line)
  192.                                 ;(= temp_str_c (read))
  193.                                 (drop_anchor)
  194.                                 (end_of_line)
  195.                                 (translate (trim dpp_symbol) dpp_constant 1 1 1 1)
  196.                                 (raise_anchor)
  197.                                 (inq_position dpp_x dpp_y)
  198.                                 (beginning_of_line)
  199.                                 (= temp_str (read))
  200.                                 (if (&& (index temp_str "&&")(!= dbr_comment_tab 0))
  201.                                     (
  202.                                         (beginning_of_line)
  203.                                         (delete_to_eol)
  204.                                         (insert (trim (substr temp_str 1 (- (index temp_str "&&") 1))))
  205.                                         (if (< (strlen (trim (substr temp_str 1 (- (index temp_str "&&") 1)))) dbr_comment_tab)
  206.                                             (move_abs 0 dbr_comment_tab)
  207.                                         ;else
  208.                                             (
  209.                                                 (end_of_line)
  210.                                                 (move_rel 0 2)
  211.                                             )
  212.                                         )
  213.                                         (insert (trim (substr temp_str_c (index temp_str_c "&&"))))
  214.                                     )
  215.                                 )
  216.                                 (if (|| (== (substr (ltrim temp_str_c) 1 1) "*") (== (substr (ltrim (upper temp_str_c)) 1 4) "NOTE"))
  217.                                     (
  218.                                         (insert (trim temp_str_c))
  219.                                         (delete_to_eol)
  220.                                     )
  221.                                 )
  222.                                 (move_abs dpp_x dpp_y)
  223.                             )
  224.                         )
  225.                     )
  226.                 )
  227.                 (restore_position)
  228.                 (insert (+ "* dPP Translated: " dpp_define))
  229.                 (beginning_of_line)
  230.             )
  231.         )
  232.         (top_of_buffer)
  233.         (while (search_fwd "#beginning_of_include" 0 0)
  234.             (
  235.                 (drop_anchor)
  236.                 (search_fwd "#end_of_include" 0 0)
  237.                 (end_of_line)
  238.                 (delete_block)
  239.             )
  240.         )
  241.     )
  242. )
  243. (macro _translate_ifdefs
  244.     (
  245.         (string            dpp_buffer_name
  246.                             dpp_end_str
  247.         )
  248.         (get_parm 0 dpp_buffer_name)
  249.         (top_of_buffer)
  250.         (while (search_fwd "<{ @}|{\\t@}#ifdef " 1 0 0)
  251.             (
  252.                 (move_rel 0 7)
  253.                 (= temp_str (ltrim(read)))
  254.                 (= temp_str (substr temp_str 1 (- (strlen temp_str) 1)))
  255.                 (message "Preprocessing %s... " (+ "ifdef: " temp_str))
  256.                 (= temp_str (substr temp_str 1 1))
  257.                 (delete_line)
  258.                 (if (== temp_str "1")
  259.                     (
  260.                         (search_fwd "<{ @}|{\\t@}#e" 1 0 0)
  261.                         (= dpp_end_str (ltrim(read)))
  262.                         (delete_line)
  263.                         (= dpp_end_str (substr dpp_end_str 1 5))
  264.                         (if (== (upper dpp_end_str) "#ELSE")
  265.                             (
  266.                                 (beginning_of_line)
  267.                                 (drop_anchor)
  268.                                 (if (search_fwd "<{ @}|{\\t@}#end" 1 0 0)
  269.                                     (
  270.                                         (end_of_line)
  271.                                         (delete_block)
  272.                                     )
  273.                                 ;else
  274.                                     (raise_anchor)
  275.                                 )
  276.                             )
  277.                         )
  278.                     )
  279.                 ;else
  280.                     (
  281.                         (beginning_of_line)
  282.                         (drop_anchor)
  283.                         (search_fwd "<{ @}|{\\t@}#e" 1 0 0)
  284.                         (= dpp_end_str (ltrim(read)))
  285.                         (= dpp_end_str (substr dpp_end_str 1 5))
  286.                         (end_of_line)
  287.                         (delete_block)
  288.                         (if (== (upper dpp_end_str) "#ELSE")
  289.                             (
  290.                                 (search_fwd "<{ @}|{\\t@}#end" 1 0 0)
  291.                                 (delete_line)
  292.                             )
  293.                         )
  294.                     )
  295.                 )
  296.             )
  297.         )
  298.         (top_of_buffer)
  299.         (while (search_fwd "<{ @}|{\\t@}#ifndef " 1 0 0)
  300.             (
  301.                 (move_rel 0 8)
  302.                 (= temp_str (ltrim(read)))
  303.                 (message "Preprocessing %s... " (+ "ifndef: " temp_str))
  304.                 (= temp_str (substr temp_str 1 1))
  305.                 (delete_line)
  306.                 (if (!= temp_str "1")
  307.                     (
  308.                         (search_fwd "<{ @}|{\\t@}#e" 1 0)
  309.                         (= dpp_end_str (ltrim(read)))
  310.                         (delete_line)
  311.                         (= dpp_end_str (substr dpp_end_str 1 5))
  312.                         (if (== (upper dpp_end_str) "#ELSE")
  313.                             (
  314.                                 (beginning_of_line)
  315.                                 (drop_anchor)
  316.                                 (search_fwd "<{ @}|{\\t@}#end" 1 0 0)
  317.                                 (end_of_line)
  318.                                 (delete_block)
  319.                             )
  320.                         )
  321.                     )
  322.                 )
  323.             ;else
  324.                 (
  325.                     (beginning_of_line)
  326.                     (drop_anchor)
  327.                     (search_fwd "<{ @}|{\\t@}#e" 1 0 0)
  328.                     (= dpp_end_str (ltrim(read)))
  329.                     (= dpp_end_str (substr dpp_end_str 1 5))
  330.                     (end_of_line)
  331.                     (delete_block)
  332.                     (if (== (upper dpp_end_str) "#ELSE")
  333.                         (
  334.                             (search_fwd "<{ @}|{\\t@}#end" 1 0 0)
  335.                             (delete_line)
  336.                         )
  337.                     )
  338.                 )
  339.             )
  340.         )
  341.     )
  342. )
  343. (macro _translate_objects
  344.     (
  345.         (int            dpp_prg_buffer
  346.         )
  347.         (string        dpp_buffer_name
  348.                         dpp_object_name
  349.         )
  350.         (get_parm 0 dpp_buffer_name)
  351.         (= dpp_prg_buffer (inq_buffer))
  352.         (top_of_buffer)
  353.         (while (search_fwd "<{ @}|{\\t@}#" 1 0)
  354.             (
  355.                 (= dpp_object_name (substr (ltrim (read)) 2))
  356.                 (= dpp_object_name (substr (trim dpp_object_name) 1 (- (strlen dpp_object_name) 1)))
  357.                 (message "Preprocessing %s..." (+ (+ (upper dpp_buffer_name) ": ") dpp_object_name))
  358.                 (set_buffer library_buffer)
  359.                 (top_of_buffer)
  360.                 (if (search_fwd (+ "\\* " dpp_object_name) 1 0)
  361.                     (
  362.                         (beginning_of_line)
  363.                         (drop_anchor)
  364.                         (search_fwd "{note}|{\\* eof}" 1 0)
  365.                         (move_rel -1 0)
  366.                         (end_of_line)
  367.                         (copy)
  368.                         (set_buffer dpp_prg_buffer)
  369.                         (delete_to_eol)
  370.                         (paste)
  371.                     )
  372.                 ;else
  373.                     (
  374.                         (error "Library object %s not found." dpp_object_name)
  375.                     )
  376.                 )
  377.             )
  378.         )
  379.     )
  380. )
  381.