home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #3 / Amiga Plus CD - 2002 - No. 03.iso / AmigaPlus / Tools / Development / envCPP31 / c++ / rexx / options.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  2002-01-01  |  10.4 KB  |  417 lines

  1. /* rexx macro */
  2.  
  3. options results                             /* enable return codes     */
  4.  
  5. if (left(address(), 6) ~= "GOLDED") then    /* not started by GoldEd ? */
  6.  
  7.     address 'GOLDED.1'
  8.  
  9. 'LOCK CURRENT RELEASE=4'                    /* lock GUI, gain access   */
  10.  
  11. if (RC ~= 0) then
  12.  
  13.     exit
  14.  
  15. options failat 6                            /* ignore warnings         */
  16.  
  17. signal on syntax                            /* ensure clean exit       */
  18.  
  19. /* ------------------------- INSERT YOUR CODE HERE: -------------------- */
  20.  
  21. /* INPUT: SOFTWARE/K (supported values: SAS/C,SAS/C-GNUMAKE,VBCC,DICE,DICE-GNUMAKE,STORMC,GENERIC) */
  22.  
  23. parse upper arg SOFTWARE .
  24.  
  25. if (SOFTWARE = "") then
  26.  
  27.     SOFTWARE = "GENERIC"
  28.  
  29. 'QUERY CAT'
  30.  
  31. if (RESULT = "deutsch") then do
  32.  
  33.     STRING.sNOFILE       = "Keine Konfigurationsdatei für «"
  34.     STRING.sNOFILE2      = "»|im aktuellen Verzeichnis. Neue Datei|erzeugen ?"
  35.     STRING.sCREATE       = "!ERZEUGEN|Abbre_chen"
  36.     STRING.sUNSUPPORTED  = "Diese Funktion wird von der aktuellen|C/C++-Umgebung nicht unterstützt !"
  37.     STRING.sOPTIONSERR   = "Kann Compileroptionen nicht speichern !"
  38.     STRING.sNAME         = "Projektname"
  39.     STRING.sPROJECTNAME  = "Projektname auswählen (unter diesem Namen*nwird das ausführbare Programm erzeugt):"
  40.     STRING.sUNNAMED      = "unbenannt"
  41. end
  42. else do
  43.  
  44.     STRING.sNOFILE       = "No configuration file for «"
  45.     STRING.sNOFILE2      = "»|in the current drawer. Create|a new configuration file ?"
  46.     STRING.sCREATE       = "!CREATE|_CANCEL"
  47.     STRING.sUNSUPPORTED  = "This function is not supported|by the current C/C++ mode !"
  48.     STRING.sOPTIONSERR   = "Can not save compiler options !"
  49.     STRING.sNAME         = "Projektname"
  50.     STRING.sPROJECTNAME  = "Choose a project name (this will be used*nas name for the generated executable):"
  51.     STRING.sUNNAMED      = "unnamed"
  52. end
  53.  
  54. if ((SOFTWARE ~= "SAS/C") & (SOFTWARE ~= "SAS/C-GNUMAKE") & (SOFTWARE ~= "VBCC") & (SOFTWARE ~= "GCC")) then do
  55.  
  56.     'REQUEST PROBLEM="' || STRING.sUNSUPPORTED || '"'
  57. end
  58. else do
  59.  
  60.     'QUERY PATH VAR=PATH'
  61.  
  62.     R = pragma('D', PATH)
  63.  
  64.     /* locate options file */
  65.  
  66.     if ((SOFTWARE = "SAS/C") | (SOFTWARE = "SAS/C-GNUMAKE")) then
  67.  
  68.         OPTIONSFILE = "scoptions"
  69.  
  70.     if (SOFTWARE = "GCC") then
  71.  
  72.         OPTIONSFILE = "gcc.options"
  73.  
  74.     if (SOFTWARE = "VBCC") then
  75.  
  76.         OPTIONSFILE = "vbcc.options"
  77.  
  78.     /* create new options file ? */
  79.  
  80.     if (exists(OPTIONSFILE) = 0) then do
  81.  
  82.         'REQUEST TITLE="' || PATH || '" BODY="' || STRING.sNOFILE || SOFTWARE || STRING.sNOFILE2 || '" BUTTON="' || STRING.sCREATE || '"'
  83.  
  84.         if ((RESULT = 0) | (RC ~= 0)) then do
  85.  
  86.             'UNLOCK'
  87.  
  88.             exit
  89.         end
  90.  
  91.         /* query project name (only SAS/C options file) */
  92.  
  93.         if ((SOFTWARE = "SAS/C") | (SOFTWARE = "SAS/C-GNUMAKE")) then do
  94.  
  95.             call getprojectname
  96.  
  97.             if (PROJECTNAME = "") then do
  98.  
  99.                 do until (PROJECTNAME ~= "")
  100.  
  101.                     'REQUEST STRING TITLE="' || STRING.sNAME || '" BODY="' || STRING.sPROJECTNAME || '" OLD="' || STRING.sUNNAMED || '" VAR=PROJECTNAME'
  102.  
  103.                     if ((PROJECTNAME = "") | (RC ~= 0)) then do
  104.  
  105.                         'UNLOCK'
  106.  
  107.                         exit
  108.                     end
  109.                 end
  110.             end
  111.         end
  112.  
  113.         call saveoptions(SOFTWARE)
  114.     end
  115.  
  116.     /* run options program */
  117.  
  118.     if (exists(OPTIONSFILE)) then do
  119.  
  120.         'QUERY SCREEN VAR=SCREEN'
  121.  
  122.         if (SOFTWARE = "VBCC") then
  123.  
  124.             'RUN ASYNC CMD="golded:add-ons/c++/tools/cprefs/bin/vbccprefs edit pubscreen=*"' || SCREEN || '*"" DIR="' || PATH || '"'
  125.  
  126.         else if (SOFTWARE = "GCC") then
  127.  
  128.             'RUN ASYNC CMD="golded:add-ons/c++/tools/cprefs/bin/gccprefs edit pubscreen=*"' || SCREEN || '*"" DIR="' || PATH || '"'
  129.         else
  130.             'RUN ASYNC CMD="scopts" DIR="' || PATH || '" SHANGHAI=5'
  131.     end
  132. end
  133.  
  134. /* ---------------------------- END OF YOUR CODE ----------------------- */
  135.  
  136. 'UNLOCK' /* VERY important: unlock GUI */
  137. EXIT
  138.  
  139. SYNTAX:
  140.  
  141. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  142. 'UNLOCK'
  143. EXIT
  144.  
  145. /* /// "getprojectname" */
  146.  
  147. getprojectname: procedure expose CONFIG. STRING. PROJECTNAME OBJFOLDER
  148.  
  149.     parse upper arg SOFTWARE
  150.  
  151.     /* try to read project name from options file or makefile */
  152.  
  153.     PROJECTNAME = ""
  154.     OBJFOLDER   = ""
  155.  
  156.     call readoptions(SOFTWARE)
  157.  
  158.     if (PROJECTNAME = "") then do
  159.  
  160.         call readmakefile(SOFTWARE)
  161.  
  162.         if (PROJECTNAME = "") then do
  163.  
  164.             if (SOFTWARE ~= "") then do
  165.  
  166.                 /* try again but ignore specified compiler */
  167.  
  168.                 call readoptions("")
  169.  
  170.                 if (PROJECTNAME = "") then
  171.  
  172.                     call readmakefile("")
  173.             end
  174.         end
  175.     end
  176.  
  177.     return
  178.  
  179. /* /// */
  180. /* /// "readoptions" */
  181.  
  182. readoptions: procedure expose CONFIG. STRING. PROJECTNAME OBJFOLDER GSTFILE
  183.  
  184.     /* read compiler-specific options file in project folder (if any exists) */
  185.  
  186.     parse upper arg SOFTWARE
  187.  
  188.     if ((SOFTWARE = "") | (SOFTWARE = "SAS/C") | (SOFTWARE = "SAS/C-GNUMAKE")) then do
  189.  
  190.         if (exists("scoptions")) then do
  191.  
  192.             if open('HANDLE', "scoptions", 'READ') then do
  193.  
  194.                 do until eof('HANDLE')
  195.  
  196.                     DATA = readln('HANDLE')
  197.  
  198.                     if (upper(left(DATA, 12)) = "PROGRAMNAME=") then do
  199.  
  200.                         PROJECTNAME = compress(substr(DATA, 13), '"')
  201.                     end
  202.                     else if (left(DATA, 11) = "OBJECTNAME=") then
  203.  
  204.                         OBJFOLDER = compress(substr(DATA, 12), '"')
  205.  
  206.                     else if (left(DATA, 18) = "GLOBALSYMBOLTABLE=") then
  207.  
  208.                         GSTFILE = compress(substr(DATA, 19), '"')
  209.                 end
  210.  
  211.                 R = close('HANDLE')
  212.             end
  213.         end
  214.     end
  215.  
  216.     return
  217.  
  218. /* /// */
  219. /* /// "saveoptions" */
  220.  
  221. saveoptions: procedure expose CONFIG. STRING. PROJECTNAME OBJFOLDER
  222.  
  223.     /* generate compiler-specific options file (only if none exists) */
  224.  
  225.     parse upper arg SOFTWARE
  226.  
  227.     if ((SOFTWARE = "SAS/C") | (SOFTWARE = "SAS/C-GNUMAKE")) then do
  228.  
  229.         if (exists("scoptions") = 0) then do
  230.  
  231.             R = open('HANDLE', "scoptions", 'WRITE')
  232.  
  233.             if (R = 0) then do
  234.  
  235.                 'REQUEST PROBLEM="' || STRING.sOPTIONSERR || '"'
  236.             end
  237.             else do
  238.  
  239.                 R = writeln('HANDLE', 'PROGRAMNAME="' || PROJECTNAME || '"')
  240.  
  241.                 if (OBJFOLDER ~= "") then
  242.  
  243.                     R = writeln('HANDLE', 'OBJECTNAME="'  || OBJFOLDER   || '"')
  244.  
  245.                 R = writeln('HANDLE', 'ERRORREXX')
  246.                 R = writeln('HANDLE', 'MODIFIED')
  247.                 R = writeln('HANDLE', 'NOLINK')
  248.                 R = writeln('HANDLE', 'IDENTIFIERLENGTH=80')
  249.                 R = writeln('HANDLE', 'NOICONS')
  250.                 R = writeln('HANDLE', 'VERBOSE')
  251.  
  252.                 R = close('HANDLE')
  253.             end
  254.         end
  255.     end
  256.     else if (SOFTWARE = "VBCC") then do
  257.  
  258.         if (exists("vbcc.options") = 0) then do
  259.  
  260.             R = open('HANDLE', "vbcc.options", 'WRITE')
  261.  
  262.             if (R = 0) then do
  263.  
  264.                 'REQUEST PROBLEM="' || STRING.sOPTIONSERR || '"'
  265.             end
  266.             else do
  267.  
  268.                 if (exists("env:vbcc.options")) then do
  269.  
  270.                     /* duplicate default configuration */
  271.  
  272.                     R = open('TEMPLATE', "env:vbcc.options", 'READ')
  273.  
  274.                     if (R = 0) then do
  275.  
  276.                         'REQUEST PROBLEM="' || STRING.sOPTIONSERR || '"'
  277.                     end
  278.                     else do
  279.  
  280.                         do until (eof('TEMPLATE'))
  281.  
  282.                             DATA = readln('TEMPLATE')
  283.  
  284.                             R = writeln('HANDLE', DATA)
  285.                         end
  286.  
  287.                         R = close('TEMPLATE')
  288.                     end
  289.                 end
  290.  
  291.                 R = close('HANDLE')
  292.             end
  293.         end
  294.     end
  295.     else if (SOFTWARE = "GCC") then do
  296.  
  297.         if (exists("gcc.options") = 0) then do
  298.  
  299.             R = open('HANDLE', "gcc.options", 'WRITE')
  300.  
  301.             if (R = 0) then do
  302.  
  303.                 'REQUEST PROBLEM="' || STRING.sOPTIONSERR || '"'
  304.             end
  305.             else do
  306.  
  307.                 if (exists("env:gcc.options")) then do
  308.  
  309.                     /* duplicate default configuration */
  310.  
  311.                     R = open('TEMPLATE', "env:gcc.options", 'READ')
  312.  
  313.                     if (R = 0) then do
  314.  
  315.                         'REQUEST PROBLEM="' || STRING.sOPTIONSERR || '"'
  316.                     end
  317.                     else do
  318.  
  319.                         do until (eof('TEMPLATE'))
  320.  
  321.                             DATA = readln('TEMPLATE')
  322.  
  323.                             R = writeln('HANDLE', DATA)
  324.                         end
  325.  
  326.                         R = close('TEMPLATE')
  327.                     end
  328.                 end
  329.  
  330.                 R = close('HANDLE')
  331.             end
  332.         end
  333.     end
  334.  
  335.     return
  336.  
  337. /* /// */
  338. /* /// "readmakefile" */
  339.  
  340. readmakefile: procedure expose CONFIG. STRING. PROJECTNAME
  341.  
  342.     parse upper arg SOFTWARE
  343.  
  344.     /* locate makefile */
  345.  
  346.     MAKEFILE = ""
  347.  
  348.     if ((SOFTWARE = "") | ((SOFTWARE ~= "SAS/C") & (SOFTWARE ~= "DICE"))) then do
  349.  
  350.         if (exists("makefile")) then
  351.  
  352.             MAKEFILE = "makefile"
  353.     end
  354.  
  355.     if (MAKEFILE = "") then do
  356.  
  357.         if ((SOFTWARE = "") | (SOFTWARE = "SAS/C")) then do
  358.  
  359.             if (exists("smakefile")) then
  360.  
  361.                 MAKEFILE = "smakefile"
  362.         end
  363.  
  364.         if (MAKEFILE = "") then do
  365.  
  366.             if ((SOFTWARE = "") | (SOFTWARE = "DICE")) then do
  367.  
  368.                 if (exists("dmakefile")) then
  369.  
  370.                     MAKEFILE = "dmakefile"
  371.             end
  372.         end
  373.     end
  374.  
  375.     /* try to locate executable name in makefile */
  376.  
  377.     if (MAKEFILE ~= "") then do
  378.  
  379.         if (open('HANDLE', MAKEFILE, 'READ') ~= 0) then do
  380.  
  381.             POS = 0
  382.  
  383.             do until (eof('HANDLE') | (PROJECTNAME ~= ""))
  384.  
  385.                 DATA = readln('HANDLE')
  386.  
  387.                 if (MAKEFILE = "smakefile") then do
  388.  
  389.                     if (pos("sc link to", DATA) ~= 0) then do
  390.  
  391.                         parse var DATA with 'sc' 'link' 'to' '"' PROJECTNAME '"' .
  392.  
  393.                         if (PROJECTNAME = "") then
  394.  
  395.                             parse var DATA with 'sc' 'link' 'to' PROJECTNAME .
  396.                     end
  397.                 end
  398.                 else if (left(DATA, 3) = "EXE") then do
  399.  
  400.                     parse var DATA with 'EXE' '=' '"' PROJECTNAME '"'.
  401.  
  402.                     if (PROJECTNAME = "") then
  403.  
  404.                         parse var DATA with 'EXE' '=' PROJECTNAME .
  405.                 end
  406.             end
  407.  
  408.             R = close('HANDLE')
  409.  
  410.             PROJECTNAME = compress(PROJECTNAME, '"')
  411.         end
  412.     end
  413.  
  414.     return
  415.  
  416. /* /// */
  417.