/* Assemble the source in the current window of GoldEd using BAsm. ** ** This ARexx script assembles the source found in the currently ** active window of GoldEd (which activates this script). ** ** Written and copyright in 1995 by Ulrich Flegel. ** All rights are reserved to the author Ulrich Flegel. ** ** The "Amiga Magazin" magazine has permission to distribute this script on the ** service disk of the june issue 1995. No other person or distributor is allowed ** to distribute this source without written permission from the author. ** ** system requirements: ** NextError_BAsm.ged (V1.0 or higher) ** GoldEd (V2.20 or higher) ** BAsm (V1.123 or higher) ** Run (AmigaOS release) ** WaitForPort (ARexx release) ** rx (ARexx release) ** ** current version of this script: ** ** $VER: Assemble_BAsm.ged V1.0 (09-May-95) ** ** usage: ** call as ARexx Macro from GoldEd as: Assemble_BAsm.ged BAsmOptions ** Exmaple BAsmOptions: -O+ -OW+ */ /*============================================================================*/ OPTIONS RESULTS /* enable return codes */ /*============================================================================*/ /* parameters used to control this program */ /* Assemble_BAsm.ged BAsmOptions */ ARG BAsmOptions /*============================================================================*/ /* adapt the following variables to your system environment: */ NextError = 'GoldEd:ARexx/NextError_BAsm.ged' /* here substitute the complete path/name of the NextError_BAsm.ged script */ LaunchCmd = 'C:Run >NIL:' /* here substitute the command line how to launch HamLab in background */ BAsmPath = 'Work:Programming/Assembler/Barfly/' /* here substitute the path where to find HamLabPlus */ BAsmName = 'BAsm' /* here substitute the name you gave HamLabPlus */ BAsmStartup = '-A' /* here substitute the startup option needed to make BAsm listen to it's port */ TempPath = 'T:' /* here substitute the path where temporary data is to store */ /*============================================================================*/ BAsmError_Max = 200 BAsmError_OK = 0 BAsmError_False = 20 BAsmError_OpenError = 1 BAsmError_SourceError = 2 BAsmError_ReadError = 3 BAsmError_UnknownOption = 4 BAsmError_MemoryError = 5 BAsmError_NoSourceFile = 6 BAsmError_NoNextError = 7 BAsmError_NoErrorList = 8 BAsmError_NoNextWarning = 9 BAsmError_NoWarningList = 10 /*============================================================================*/ /* ARexx ports used */ Port_BAsm='rexx_BASM' Port_GoldEd=ADDRESS() IF (LEFT(Port_GoldEd, 6) ~= 'GOLDED') THEN /* not started by GoldEd ? */ Port_GoldEd='GOLDED.1' /*============================================================================*/ ScriptErrorLevel = 6 SIGNAL ON SYNTAX /* ensure clean exit */ IF ~ SHOW('P', Port_GoldEd) THEN /* is GoldEd AREXX port available ? */ DO Say 'This script may only called by GoldEd!' END ELSE DO ADDRESS VALUE Port_GoldEd OPTIONS FAILAT 21 'LOCK CURRENT' /* lock GUI, gain access */ OPTIONS FAILAT ScriptErrorLevel /* ignore warnings */ /*============================================================================*/ /* ** Non localized strings used */ STRING_ThisScript='Assemble_BAsm.ged' /* ** Localization of strings used */ ADDRESS VALUE Port_GoldEd 'QUERY CAT' Language=RESULT SELECT WHEN Language='deutsch' THEN DO STRING_Positive='OK' STRING_Negative='Abbrechen' STRING_Dismiss='Aufgeben' STRING_BAsmFailure_Title='BAsm Fehler-Report' ERROR_NoSource='Kein Source vorhanden!' ERROR_NoBAsm="'"||BAsmPath||BAsmName||"' konnte nicht gefunden werden!" ERROR_BAsmWarnings='Assemblierung mit Warnungen abgeschlossen.' ERROR_BASM_UnknownErrorCode='Ein unbekannter Fehler ist aufgetreten!' ERROR_BASM_OK='Assemblierung erfolgreich abgeschlossen.' ERROR_BASM_False='Assemblierung aufgrund von Fehlern abgebrochen!' ERROR_BASM_OpenError='Datei konnte nicht gefunden werden!' ERROR_BASM_SourceError='Source Datei ist KEIN ASCII!' ERROR_BASM_ReadError='Datei Lesefehler!' ERROR_BASM_UnknownOption='Unbekannte BAsm Option(en) angegeben: '||BAsmOptions||'!' ERROR_BASM_MemoryError='Nicht genug Speicher!' ERROR_BASM_NoSourceFile='Keine Source Datei angegeben!' END /* WHEN Language='XXX' THEN DO STRING_Positive='XXX' STRING_Negative='XXX' STRING_Dismiss='XXX' STRING_BAsmFailure_Title='XXX' ERROR_NoSource='XXX!' ERROR_NoBAsm="'"||BAsmPath||BAsmName||"'XXX!" ERROR_BAsmWarnings='XXX.' ERROR_BASM_UnknownErrorCode='XXX!' ERROR_BASM_OK='XXX!' ERROR_BASM_False='XXX!' ERROR_BASM_OpenError='XXX!' ERROR_BASM_SourceError='XXX!' ERROR_BASM_ReadError='XXX!' ERROR_BASM_UnknownOption='XXX: '||BAsmOptions||'!' ERROR_BASM_MemoryError='XXX!' ERROR_BASM_NoSourceFile='XXX!' END */ OTHERWISE DO STRING_Positive='OK' STRING_Negative='Cancel' STRING_Dismiss='Dismiss' STRING_BAsmFailure_Title='BAsm error report' ERROR_NoSource='No source available!' ERROR_NoBAsm="'"||BAsmPath||BAsmName||"' couldn't be found!" ERROR_BAsmWarnings='Assembly finished with warnings.' ERROR_BASM_UnknownErrorCode='An unknown error occurred!' ERROR_BASM_OK='Assembly successfully finished.' ERROR_BASM_False='Assembly stopped due to errors!' ERROR_BASM_OpenError='Open file error during assembly' ERROR_BASM_SourceError='A source file is NOT ASCII!' ERROR_BASM_ReadError='Read file error during assembly!' ERROR_BASM_UnknownOption='Unknown BAsm option(s) supplied: '||BAsmOptions||'!' ERROR_BASM_MemoryError='Not enough memory to finish assembly!' ERROR_BASM_NoSourceFile='No source file specified!' END END /*============================================================================*/ /* ** Finally do something */ ADDRESS VALUE Port_GoldEd 'QUERY ANYTEXT' IF ~ (RESULT='TRUE') THEN /* ** PATH: No source available */ DO 'REQUEST TITLE="'||STRING_ThisScript||'" BODY="'||ERROR_NoSource||'" BUTTON="'||STRING_Dismiss||'"' END ELSE /* ** PATH: Assemble source */ DO /*==== Save if file source modified ====*/ ADDRESS VALUE Port_GoldEd 'QUERY MODIFY' IF (RESULT='TRUE') THEN 'SAVE SMART ALL' 'QUERY FILE' Filename_Source=RESULT 'QUERY DOC' Pathname_Source=RESULT /*==== checking presence of BAsm ====*/ RemoveBAsmAfterProcessing = FALSE /* indicates wether BAsm is to remove after processing (e.g. because it was not existent before) */ IF Filename_Source = '' THEN DO 'REQUEST TITLE="'||STRING_ThisScript||'" BODY="'||ERROR_NoSource||'" BUTTON="'||STRING_Dismiss||'"' END ELSE DO IF ~ SHOW('P', Port_BAsm) THEN /* is BAsm AREXX port available ? */ DO ADDRESS COMMAND LaunchCmd||' '||BAsmPath||BAsmName||' '||BAsmStartup /* no, launch BAsm */ IF RC = 0 THEN DO /* no error occured ? */ RemoveBAsmAfterProcessing = TRUE /* BAsm had to be loaded, so it must be removed after processing */ ADDRESS COMMAND WaitForPort Port_BAsm END ELSE DO ADDRESS VALUE Port_GoldEd 'REQUEST TITLE="'||STRING_ThisScript||'" BODY="'||ERROR_NoBAsm||'" BUTTON="'||STRING_Dismiss||'"' EXIT 0 END END IF ~ SHOW('P', Port_BAsm) THEN /* is BAsm running ? */ DO ADDRESS VALUE Port_GoldEd 'REQUEST TITLE="'||STRING_ThisScript||'" BODY="'||ERROR_NoBAsm||'" BUTTON="'||STRING_Dismiss||'"' END ELSE DO ADDRESS VALUE Port_BAsm /* Hey, BAsm, listen to your master */ /*==== remote control BAsm now ====*/ OPTIONS FAILAT BAsmError_Max 'BASM -e+ -es- '||BAsmOptions||' '||PathName_Source ADDRESS VALUE Port_GoldEd SELECT WHEN RC = BAsmError_OpenError THEN 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_OpenError||'" BUTTON="'||STRING_Dismiss||'"' WHEN RC = BAsmError_SourceError THEN 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_SourceError||'" BUTTON="'||STRING_Dismiss||'"' WHEN RC = BAsmError_ReadError THEN 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_ReadError||'" BUTTON="'||STRING_Dismiss||'"' WHEN RC = BAsmError_UnknownOption THEN 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_UnknownOption||'" BUTTON="'||STRING_Dismiss||'"' WHEN RC = BAsmError_MemoryError THEN 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_MemoryError||'" BUTTON="'||STRING_Dismiss||'"' WHEN RC = BAsmError_NoSourceFile THEN 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_NoSourceFile||'" BUTTON="'||STRING_Dismiss||'"' WHEN RC = BAsmError_False THEN DO 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_False||'" BUTTON="'||STRING_Dismiss||'"' /*---- call Error display routine ----*/ ADDRESS COMMAND 'SYS:RexxC/rx '||NextError||' '||Port_GoldEd END WHEN RC = BAsmError_OK THEN DO ADDRESS VALUE Port_BAsm 'BINITWARNING' IF (RC = BAsmError_NoWarningList) THEN DO ADDRESS VALUE Port_GoldEd 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_OK||'" BUTTON="'||STRING_Positive||'"' END ELSE DO ADDRESS VALUE Port_GoldEd 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BAsmWarnings||'" BUTTON="'||STRING_Dismiss||'"' /*---- call Error display routine ----*/ ADDRESS COMMAND 'SYS:RexxC/rx '||NextError||' '||Port_GoldEd END END OTHERWISE 'REQUEST TITLE="'||STRING_BAsmFailure_Title'" BODY="'||ERROR_BASM_UnknownErrorCode||'" BUTTON="'||STRING_Dismiss||'"' OPTIONS FAILAT ScriptErrorLevel END /* IF (RemoveBAsmAfterProcessing = TRUE) THEN DO ADDRESS VALUE Port_BAsm 'BEND' END */ END END END /*=============================================================================*/ ADDRESS VALUE Port_GoldEd 'UNLOCK' /* VERY important: unlock GUI */ END /* IF ~ SHOW('P', Port_GoldEd) */ EXIT SYNTAX: SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-(" ADDRESS VALUE Port_GoldEd 'REQUEST TITLE="'||STRING_ThisScript||'" BODY="Script error!" BUTTON="Who is bad?"' 'UNLOCK' EXIT /*=============================================================================*/ /* ** version history: ** --------------- ** ** V1.0 : -first public version ** ** known bugs in the latest version/revision: ** ----------------------------------------- ** - Not a bug of this script but BAsm: ** BAsm should return an error value when calling ** BINITERROR/BINITWARNING while the appropriate ** list is not available. BAsm though doesn't do ** this. Therefore it is possible, that warnings ** after assembly are announced, while none occured. ** */