home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / basmify_v1.1 / assemble.ced next >
Text File  |  1977-12-31  |  10KB  |  380 lines

  1. /* Assemble the source in the current window of CygnusEd using BAsm.
  2. **
  3. ** This ARexx script assembles the source found in the currently
  4. ** active window of CygnusEd (which activates this script).
  5. **
  6. ** Written and copyright 1995-1996 by Ulrich Flegel.
  7. ** All rights are reserved to the author Ulrich Flegel.
  8. **
  9. ** Publication and distribution only allowed by explicitly written permission from the author.
  10. ** This software may be distribute on the Aminet CD-ROMs.
  11. **
  12. ** system requirements:
  13. **    NextError.ced        (V1.1    or higher)
  14. **    CygnusEd        (V3.5    or higher)
  15. **    BAsm            (V1.123  or higher)
  16. **    Run            (AmigaOS release)
  17. **    WaitForPort        (ARexx   release)
  18. **    rx            (ARexx   release)
  19. **
  20. ** current version of this script:
  21. **
  22. ** $VER: Assemble.ced V1.1 (06-Jan-95)
  23. **
  24. ** usage:
  25. ** call as ARexx Macro from CygnusEd as: "Assemble.ced [LOCALE «Language»] [OPT «BAsmOptions»]"
  26. ** Example «Language»: deutsch
  27. ** Example «BAsmOptions»: -O+ -OW+
  28. */
  29.  
  30. /*============================================================================*/
  31.  
  32. OPTIONS RESULTS                    /* enable return codes     */
  33.  
  34. /*============================================================================*/
  35.  
  36. /* parameters used to control this program */
  37.  
  38. /* Assemble.ced [PORT «Port_CygnusEd»] [LOCALE «Language»] [OPT «BAsmOptions»] */
  39.  
  40. PARSE ARG CommandLine
  41.  
  42. /*============================================================================*/
  43.  
  44. /* adapt the following variables to your system environment: */
  45.  
  46. NextError   = 'BAsmify:NextError.ced'            /* here substitute the complete path/name of the NextError.ced script */
  47. LaunchCmd   = 'C:Run >NIL:'                /* here substitute the command line how to launch BAsm in background */
  48. BAsmPath    = 'Work:Programming/Assembler/Barfly/'    /* here substitute the path where to find BAsm (don't forget the trailing "/") */
  49. BAsmName    = 'BAsm'                    /* here substitute the name you gave BAsm */
  50. BAsmStartup = '-A'                    /* here substitute the startup option needed to make BAsm listen to it's port */
  51. TempPath    = 'T:'                    /* here substitute the path where temporary data is to store */
  52.  
  53. /*============================================================================*/
  54.  
  55. BAsmError_Max        = 200
  56. BAsmError_OK        = 0
  57. BAsmError_False        = 20
  58. BAsmError_OpenError    = 1
  59. BAsmError_SourceError    = 2
  60. BAsmError_ReadError    = 3
  61. BAsmError_UnknownOption    = 4
  62. BAsmError_MemoryError    = 5
  63. BAsmError_NoSourceFile    = 6
  64. BAsmError_NoNextError    = 7
  65. BAsmError_NoErrorList    = 8
  66. BAsmError_NoNextWarning    = 9
  67. BAsmError_NoWarningList    = 10
  68.  
  69. /*============================================================================*/
  70.  
  71. /*
  72. ** Intialize parameter variables and parse commandline
  73. */
  74.  
  75. Port_CygnusEd=''
  76. Language=''
  77. BAsmOptions=''
  78.  
  79. DO FOREVER
  80.     PARSE VAR CommandLine Parameter CommandLine
  81.     IF Parameter = ''       THEN LEAVE
  82.     PARSE VAR CommandLine Argument CommandLine
  83.     IF Argument  = ''       THEN LEAVE
  84.  
  85.     SELECT
  86.     WHEN Parameter = 'PORT'   THEN Port_CygnusEd=Argument
  87.     WHEN Parameter = 'LOCALE' THEN Language=Argument
  88.     WHEN Parameter = 'OPT'    THEN BAsmOptions=Argument||CommandLine
  89.     END
  90. END                      
  91.  
  92. /*============================================================================*/
  93.  
  94. /* ARexx ports used */
  95.  
  96. Port_BAsm='rexx_BASM'
  97.  
  98. IF (Port_CygnusEd='') THEN Port_CygnusEd=ADDRESS()
  99. IF (LEFT(Port_CygnusEd, 8) ~= 'rexx_ced') THEN Port_CygnusEd='rexx_ced'
  100.  
  101. /*============================================================================*/
  102.  
  103. ScriptErrorLevel = 6
  104.  
  105. SIGNAL ON SYNTAX                /* ensure clean exit       */
  106.  
  107. IF ~ SHOW('P', Port_CygnusEd) THEN        /* is CygnusEd AREXX port available ? */
  108. DO
  109.     Say 'This script may only called by CygnusEd!'
  110. END
  111. ELSE
  112. DO
  113.  
  114. OPTIONS FAILAT ScriptErrorLevel            /* ignore warnings         */
  115.  
  116. /*============================================================================*/
  117.  
  118. /*
  119. ** Non localized strings used
  120. */
  121.  
  122. STRING_ThisScript='Assemble.ced'
  123.  
  124. /*
  125. ** Localization of strings used
  126. */
  127.  
  128. IF ( Language = '' ) THEN        /* ask CED for current language if none submitted */
  129. DO
  130.     ADDRESS VALUE Port_CygnusEd
  131.     /*'QUERY CAT'*/            /* !!! here find out which language CED uses currently */
  132.     /*Language=RESULT*/
  133. END
  134.  
  135. SELECT
  136. WHEN Language='deutsch' THEN
  137.     DO
  138.     STRING_Positive='OK'
  139.     STRING_Negative='Abbrechen'
  140.     STRING_Dismiss='Aufgeben'
  141.     STRING_BAsmFailure_Title='BAsm Fehler-Report'
  142.     ERROR_NoSource='Kein Source vorhanden!'
  143.     ERROR_NoBAsm="'"||BAsmPath||BAsmName||"' konnte nicht gefunden werden!"
  144.     ERROR_BAsmWarnings='Assemblierung mit Warnungen abgeschlossen.'
  145.     ERROR_BASM_UnknownErrorCode='Ein unbekannter Fehler ist aufgetreten!'
  146.     ERROR_BASM_OK='Assemblierung erfolgreich abgeschlossen.'
  147.     ERROR_BASM_False='Assemblierung aufgrund von Fehlern abgebrochen!'
  148.     ERROR_BASM_OpenError='Datei konnte nicht gefunden werden!'
  149.     ERROR_BASM_SourceError='Source Datei ist KEIN ASCII!'
  150.     ERROR_BASM_ReadError='Datei Lesefehler!'
  151.     ERROR_BASM_UnknownOption='Unbekannte BAsm Option(en) angegeben: '||BAsmOptions||'!'
  152.     ERROR_BASM_MemoryError='Nicht genug Speicher!'
  153.     ERROR_BASM_NoSourceFile='Keine Source Datei angegeben!'
  154.     END
  155. /*
  156. WHEN Language='XXX' THEN
  157.     DO
  158.     STRING_Positive='XXX'
  159.     STRING_Negative='XXX'
  160.     STRING_Dismiss='XXX'
  161.     STRING_BAsmFailure_Title='XXX'
  162.     ERROR_NoSource='XXX!'
  163.     ERROR_NoBAsm="'"||BAsmPath||BAsmName||"'XXX!"
  164.     ERROR_BAsmWarnings='XXX.'
  165.     ERROR_BASM_UnknownErrorCode='XXX!'
  166.     ERROR_BASM_OK='XXX!'
  167.     ERROR_BASM_False='XXX!'
  168.     ERROR_BASM_OpenError='XXX!'
  169.     ERROR_BASM_SourceError='XXX!'
  170.     ERROR_BASM_ReadError='XXX!'
  171.     ERROR_BASM_UnknownOption='XXX: '||BAsmOptions||'!'
  172.     ERROR_BASM_MemoryError='XXX!'
  173.     ERROR_BASM_NoSourceFile='XXX!'
  174.     END
  175. */
  176. OTHERWISE
  177.     DO
  178.     STRING_Positive='OK'
  179.     STRING_Negative='Cancel'
  180.     STRING_Dismiss='Dismiss'
  181.     STRING_BAsmFailure_Title='BAsm error report'
  182.     ERROR_NoSource='No source available!'
  183.     ERROR_NoBAsm="'"||BAsmPath||BAsmName||"' couldn't be found!"
  184.     ERROR_BAsmWarnings='Assembly finished with warnings.'
  185.     ERROR_BASM_UnknownErrorCode='An unknown error occurred!'
  186.     ERROR_BASM_OK='Assembly successfully finished.'
  187.     ERROR_BASM_False='Assembly stopped due to errors!'
  188.     ERROR_BASM_OpenError='Open file error during assembly'
  189.     ERROR_BASM_SourceError='A source file is NOT ASCII!'
  190.     ERROR_BASM_ReadError='Read file error during assembly!'
  191.     ERROR_BASM_UnknownOption='Unknown BAsm option(s) supplied: '||BAsmOptions||'!'
  192.     ERROR_BASM_MemoryError='Not enough memory to finish assembly!'
  193.     ERROR_BASM_NoSourceFile='No source file specified!'
  194.     END
  195. END
  196.  
  197. /*============================================================================*/
  198.  
  199. /*
  200. ** Prepare arguments for invocation of NextError.ced
  201. */
  202.  
  203. IF ( Port_CygnusEd = '' ) THEN
  204.     Cmd_PORT=''
  205. ELSE
  206.     Cmd_PORT='PORT '||Port_CygnusEd
  207.  
  208. IF ( Language      = '' ) THEN
  209.     Cmd_LOCALE=''
  210. ELSE
  211.     Cmd_LOCALE='LOCALE '||Language
  212.  
  213. IF ( BAsmOptions   = '' ) THEN
  214.     Cmd_OPT=''
  215. ELSE
  216.     Cmd_OPT='OPT '||BAsmOptions
  217.  
  218. /*============================================================================*/
  219.  
  220. /*
  221. ** Finally do something 
  222. */
  223.  
  224. ADDRESS VALUE Port_CygnusEd
  225. 'STATUS 16'
  226. IF (RESULT=0) THEN
  227. /*
  228. ** PATH: No source available
  229. */
  230.     DO
  231.     'OKAY1 '||ERROR_NoSource
  232.     END
  233. ELSE
  234. /*
  235. ** PATH: Assemble source
  236. */
  237.     DO
  238. /*==== Save if file source modified ====*/
  239.  
  240.     ADDRESS VALUE Port_CygnusEd
  241.     'STATUS 18'
  242.     IF ~(RESULT=0) THEN 'SAVE'
  243.  
  244.     'STATUS 21'
  245.     Filename_Source=RESULT
  246.  
  247.     'STATUS 19'
  248.     Pathname_Source=RESULT
  249.  
  250. /*==== checking presence of BAsm ====*/
  251.  
  252.     RemoveBAsmAfterProcessing = FALSE        /* indicates wether BAsm is to remove after processing (e.g. because it was not existent before) */
  253.  
  254.     IF Filename_Source = '' THEN
  255.         DO
  256.         'OKAY1 '||ERROR_NoSource
  257.         END
  258.     ELSE
  259.         DO
  260.         IF ~ SHOW('P', Port_BAsm) THEN        /* is BAsm AREXX port available ? */
  261.             DO        
  262.             ADDRESS COMMAND LaunchCmd||' '||BAsmPath||BAsmName||' '||BAsmStartup    /* no, launch BAsm */
  263.   
  264.             IF RC = 0 THEN
  265.                 DO                /* no error occured ? */
  266.                 RemoveBAsmAfterProcessing = TRUE    /* BAsm had to be loaded, so it must be removed after processing */
  267.                 ADDRESS COMMAND WaitForPort Port_BAsm
  268.                 END
  269.             ELSE
  270.                 DO
  271.                 ADDRESS VALUE Port_CygnusEd
  272.                 'OKAY1 '||ERROR_NoBAsm
  273.                 EXIT 0
  274.                 END
  275.             END
  276.  
  277.         IF ~ SHOW('P', Port_BAsm) THEN        /* is BAsm running ? */
  278.             DO
  279.             ADDRESS VALUE Port_CygnusEd
  280.             'OKAY1 '||ERROR_NoBAsm
  281.             END
  282.         ELSE
  283.             DO
  284.             ADDRESS VALUE Port_BAsm        /* Hey, BAsm, listen to your master */
  285.  
  286. /*==== remote control BAsm now ====*/
  287.  
  288.             OPTIONS FAILAT BAsmError_Max
  289.             'BASM -e+ -es- '||BAsmOptions||' '||PathName_Source
  290.  
  291.             ADDRESS VALUE Port_CygnusEd
  292.  
  293.             SELECT
  294.             WHEN RC = BAsmError_OpenError THEN
  295.                 'OKAY1 '||ERROR_BASM_OpenError
  296.             WHEN RC = BAsmError_SourceError THEN
  297.                 'OKAY1 '||ERROR_BASM_SourceError
  298.             WHEN RC = BAsmError_ReadError THEN
  299.                 'OKAY1 '||ERROR_BASM_ReadError
  300.             WHEN RC = BAsmError_UnknownOption THEN
  301.                 'OKAY1 '||ERROR_BASM_UnknownOption
  302.             WHEN RC = BAsmError_MemoryError THEN
  303.                 'OKAY1 '||ERROR_BASM_MemoryError
  304.             WHEN RC = BAsmError_NoSourceFile THEN
  305.                 'OKAY1 '||ERROR_BASM_NoSourceFile
  306.             WHEN RC = BAsmError_False THEN
  307.                 DO
  308.                 'OKAY1 '||ERROR_BASM_False
  309.                 /*---- call Error display routine ----*/
  310.                 ADDRESS COMMAND 'SYS:RexxC/rx '||NextError||' '||Cmd_PORT||' '||Cmd_LOCALE||' '||Cmd_OPT||' '
  311.                 END
  312.             WHEN RC = BAsmError_OK THEN
  313.                 DO
  314.                 ADDRESS VALUE Port_BAsm
  315.                 'BINITWARNING'
  316.                 IF (RC = BAsmError_NoWarningList) THEN
  317.                     DO
  318.                     ADDRESS VALUE Port_CygnusEd
  319.                     'OKAY1 '||ERROR_BASM_OK
  320.                     END
  321.                 ELSE
  322.                     DO
  323.                     ADDRESS VALUE Port_CygnusEd
  324.                     'OKAY1 '||ERROR_BAsmWarnings
  325.                     /*---- call Error display routine ----*/
  326.                     ADDRESS COMMAND 'SYS:RexxC/rx '||NextError||' '||Cmd_PORT||' '||Cmd_LOCALE||' '||Cmd_OPT||' '
  327.                     END
  328.                 END
  329.             OTHERWISE
  330.                 'OKAY1 '||ERROR_BASM_UnknownErrorCode
  331.  
  332.             OPTIONS FAILAT ScriptErrorLevel
  333.             END
  334.  
  335. /*
  336.             IF (RemoveBAsmAfterProcessing = TRUE) THEN
  337.                 DO
  338.                 ADDRESS VALUE Port_BAsm
  339.                 'BEND'
  340.                 END
  341. */
  342.             END
  343.         END
  344.     END
  345.  
  346. /*=============================================================================*/
  347.  
  348. END    /* IF ~ SHOW('P', Port_CygnusEd) */
  349.  
  350. EXIT
  351.  
  352. SYNTAX:
  353.  
  354. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  355. ADDRESS VALUE Port_CygnusEd
  356. 'OKAY1 Script error!'
  357. EXIT
  358.  
  359. /*=============================================================================*/
  360.  
  361.  
  362. /*
  363. ** version history:
  364. ** ---------------
  365. **
  366. ** V1.0        : -first public version
  367. **
  368. ** V1.1        : -second public version
  369. **
  370. **          -enhanced locale handling
  371. **          -fixed port handling
  372. **          -fixed options handling
  373. **
  374. ** known bugs in the latest version/revision:
  375. ** -----------------------------------------
  376. ** - No smart localization supported. I don't know the ARexx CygnusEd command to find out the currect used language.
  377. **
  378. */
  379.  
  380.