Skip to content

Commit 3f97b41

Browse files
committed
Version 3.2.0
1) ability to build programs without running linker 2) new FASM 1.71.39 3) fix of some debug problems (with "ret" instruction in MASM and with some non-standard GDB configurations).
1 parent f41777c commit 3f97b41

File tree

9 files changed

+206
-154
lines changed

9 files changed

+206
-154
lines changed

Windows/FASM/fasm.exe

0 Bytes
Binary file not shown.

help.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ <H4>Windows</H4>
198198
Еще в программу включен отладчик gdb версии 7.4 из пакета MinGW (gdb 7.6 из MinGW64 в режиме x64) и немного измененная с учетом требований отладки библиотека макросов ввода-вывода.
199199
</P>
200200
<P>
201-
Также в SASM, начиная с версии 3.0, включены fasm 1.71.21 и gas 2.23.1 из MinGW (gas 2.23.2 из MinGW64).
201+
Также в SASM, начиная с версии 3.0, включены fasm 1.71.39 и gas 2.23.1 из MinGW (gas 2.23.2 из MinGW64).
202202
</P>
203203
<P>
204204
Ассемблер MASM невозможно было включить в сборку из-за его лицензии. Чтобы им воспользоваться, Вы должны установить MASM на Ваш компьютер с сайта <A HREF="http://www.masm32.com/">http://www.masm32.com/</A> и указать пути до ассемблера (ml.exe, путь обычно "C:/masm32/bin/ml.exe") и до компоновщика (link.exe, путь обычно "C:/masm32/bin/link.exe") в соответствующих полях на вкладке "Построение".

helpENG.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ <H4>Windows</H4>
172172
<P>As NASM compiler used nasm 2.11.02, as linker - gcc 4.6.2 from MinGW (gcc 4.8.1 from MinGW64 in x64 mode) or ld 2.22 from MinGW (ld 2.23.2 from MinGW64 in x64 mode).
173173
</P>
174174
<P>
175-
Also SASM 3.0 and greater contains fasm 1.71.21 and gas 2.23.1 from MinGW (gas 2.23.2 from MinGW64).
175+
Also SASM 3.0 and greater contains fasm 1.71.39 and gas 2.23.1 from MinGW (gas 2.23.2 from MinGW64).
176176
</P>
177177
<P>
178178
Also SASM contains gdb debugger from MinGW and "io.inc" macro library.

language_ru.qm

109 Bytes
Binary file not shown.

language_ru.ts

Lines changed: 124 additions & 119 deletions
Large diffs are not rendered by default.

mainwindow.cpp

Lines changed: 53 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,13 @@ MainWindow::MainWindow(const QStringList &args, QWidget *parent)
102102
}
103103
}
104104

105+
void MainWindow::enableOrDisableLinkingEdit(int disableLinkingCheckboxState)
106+
{
107+
bool enabled = (disableLinkingCheckboxState == Qt::Unchecked);
108+
settingsUi.linkingOptionsEdit->setEnabled(enabled);
109+
settingsUi.linkerPathEdit->setEnabled(enabled);
110+
}
111+
105112
void MainWindow::initUi()
106113
{
107114
//Resize
@@ -868,23 +875,28 @@ void MainWindow::buildProgram(bool debugMode)
868875
gccMProcess.start(gcc, gccMArguments);
869876
gccMProcess.waitForFinished();
870877
#endif
878+
871879
//final linking
872-
QStringList linkerArguments = linkerOptions.split(QChar(' '));
873-
linkerArguments.replaceInStrings("$PROGRAM.OBJ$", Common::pathInTemp("program.o"));
874-
linkerArguments.replaceInStrings("$MACRO.OBJ$", stdioMacros);
875-
linkerArguments.replaceInStrings("$PROGRAM$", Common::pathInTemp("SASMprog.exe"));
876-
linkerArguments.replaceInStrings("$SOURCE$", Common::pathInTemp("program.asm"));
877-
linkerArguments.replaceInStrings("$LSTOUTPUT$", Common::pathInTemp("program.lst"));
878-
QProcess linkerProcess;
879-
QString linkerOutput = Common::pathInTemp("linkererror.txt");
880-
linkerProcess.setStandardOutputFile(linkerOutput);
881-
linkerProcess.setStandardErrorFile(linkerOutput, QIODevice::Append);
882-
linkerProcess.start(linker, linkerArguments);
883-
linkerProcess.waitForFinished();
884-
885-
if (linkerProcess.error() != QProcess::UnknownError) {
886-
printLogWithTime(tr("Unable to start linker. Check your settings.") + '\n', Qt::red);
887-
return;
880+
bool disableLinking = settings.value("disablelinking", false).toBool();
881+
QString linkerOutput;
882+
if (!disableLinking) {
883+
QStringList linkerArguments = linkerOptions.split(QChar(' '));
884+
linkerArguments.replaceInStrings("$PROGRAM.OBJ$", Common::pathInTemp("program.o"));
885+
linkerArguments.replaceInStrings("$MACRO.OBJ$", stdioMacros);
886+
linkerArguments.replaceInStrings("$PROGRAM$", Common::pathInTemp("SASMprog.exe"));
887+
linkerArguments.replaceInStrings("$SOURCE$", Common::pathInTemp("program.asm"));
888+
linkerArguments.replaceInStrings("$LSTOUTPUT$", Common::pathInTemp("program.lst"));
889+
QProcess linkerProcess;
890+
linkerOutput = Common::pathInTemp("linkererror.txt");
891+
linkerProcess.setStandardOutputFile(linkerOutput);
892+
linkerProcess.setStandardErrorFile(linkerOutput, QIODevice::Append);
893+
linkerProcess.start(linker, linkerArguments);
894+
linkerProcess.waitForFinished();
895+
896+
if (linkerProcess.error() != QProcess::UnknownError) {
897+
printLogWithTime(tr("Unable to start linker. Check your settings.") + '\n', Qt::red);
898+
return;
899+
}
888900
}
889901

890902
QFile logFile;
@@ -913,24 +925,28 @@ void MainWindow::buildProgram(bool debugMode)
913925

914926
//print errors
915927
printLog(logText, Qt::red);
916-
logFile.setFileName(linkerOutput);
917-
logFile.open(QIODevice::ReadOnly);
918-
QTextStream logLinker(&logFile);
919-
logText = logLinker.readAll();
920-
logFile.close();
921-
printLog(logText, Qt::red);
928+
if (!disableLinking) {
929+
logFile.setFileName(linkerOutput);
930+
logFile.open(QIODevice::ReadOnly);
931+
QTextStream logLinker(&logFile);
932+
logText = logLinker.readAll();
933+
logFile.close();
934+
printLog(logText, Qt::red);
935+
}
922936

923937
//QMessageBox::critical(0, tr("Warning!"), tr("Errors have occurred in the build!"));
924938
} else {
925939
printLogWithTime(tr("Built successfully.") + '\n', Qt::darkGreen);
926940
//print warnings
927941
printLog(logText, Qt::red);
928-
logFile.setFileName(linkerOutput);
929-
logFile.open(QIODevice::ReadOnly);
930-
QTextStream logLinker(&logFile);
931-
logText = logLinker.readAll();
932-
logFile.close();
933-
printLog(logText, Qt::red);
942+
if (!disableLinking) {
943+
logFile.setFileName(linkerOutput);
944+
logFile.open(QIODevice::ReadOnly);
945+
QTextStream logLinker(&logFile);
946+
logText = logLinker.readAll();
947+
logFile.close();
948+
printLog(logText, Qt::red);
949+
}
934950
programIsBuilded = true;
935951
}
936952
}
@@ -1585,6 +1601,8 @@ void MainWindow::openSettings()
15851601
connect(settingsUi.buttonBox->button(QDialogButtonBox::Cancel),
15861602
SIGNAL(clicked()), this, SLOT(restoreSettingsAndExit()));
15871603
connect(settingsUi.resetAllButton, SIGNAL(clicked()), this, SLOT(resetAllSettings()));
1604+
connect(settingsUi.disableLinkingCheckbox, SIGNAL(stateChanged(int)),
1605+
this, SLOT(enableOrDisableLinkingEdit(int)));
15881606

15891607
//colors
15901608
colorSignalMapper = new QSignalMapper(this);
@@ -1725,6 +1743,8 @@ void MainWindow::initAssemblerSettings(bool firstOpening)
17251743
QString linkerOptions = assembler->getLinkerOptions();
17261744
settingsUi.linkingOptionsEdit->setText(settings.value("linkingoptions", linkerOptions).toString());
17271745

1746+
settingsUi.disableLinkingCheckbox->setChecked(settings.value("disablelinking", false).toBool());
1747+
17281748
QString assemblerPath = assembler->getAssemblerPath();
17291749
settingsUi.assemblerPathEdit->setText(settings.value("assemblerpath", assemblerPath).toString());
17301750

@@ -1840,10 +1860,12 @@ void MainWindow::recreateAssembler(bool start)
18401860
if (!start) {
18411861
settingsUi.assemblyOptionsEdit->setText(assembler->getAssemblerOptions());
18421862
settingsUi.linkingOptionsEdit->setText(assembler->getLinkerOptions());
1863+
settingsUi.disableLinkingCheckbox->setChecked(false);
18431864
settingsUi.assemblerPathEdit->setText(assembler->getAssemblerPath());
18441865
settingsUi.linkerPathEdit->setText(assembler->getLinkerPath());
18451866
settings.setValue("assemblyoptions", assembler->getAssemblerOptions());
18461867
settings.setValue("linkingoptions", assembler->getLinkerOptions());
1868+
settings.setValue("disablelinking", false);
18471869
settings.setValue("assemblerpath", assembler->getAssemblerPath());
18481870
settings.setValue("linkerpath", assembler->getLinkerPath());
18491871
changeStartText();
@@ -1864,6 +1886,7 @@ void MainWindow::backupSettings()
18641886
backupAssemblerOptions = settings.value("assemblyoptions", assembler->getAssemblerOptions()).toString();
18651887
backupAssemblerPath = settings.value("assemblerpath", assembler->getAssemblerPath()).toString();
18661888
backupLinkerOptions = settings.value("linkingoptions", assembler->getLinkerOptions()).toString();
1889+
backupDisableLinking = settings.value("disablelinking", false).toBool();
18671890
backupStartText = settings.value("starttext", assembler->getStartText()).toString();
18681891
backupLinkerPath = settings.value("linkerpath", assembler->getLinkerPath()).toString();
18691892
}
@@ -1876,6 +1899,7 @@ void MainWindow::restoreSettingsAndExit()
18761899
settings.setValue("assemblyoptions", backupAssemblerOptions);
18771900
settings.setValue("assemblerpath", backupAssemblerPath);
18781901
settings.setValue("linkingoptions", backupLinkerOptions);
1902+
settings.setValue("disablelinking", backupDisableLinking);
18791903
settings.setValue("starttext", backupStartText);
18801904
settings.setValue("linkerpath", backupLinkerPath);
18811905
settingsWindow->close();
@@ -1916,6 +1940,7 @@ void MainWindow::saveSettings()
19161940

19171941
settings.setValue("assemblyoptions", settingsUi.assemblyOptionsEdit->text());
19181942
settings.setValue("linkingoptions", settingsUi.linkingOptionsEdit->text());
1943+
settings.setValue("disablelinking", settingsUi.disableLinkingCheckbox->isChecked());
19191944
settings.setValue("assemblerpath", settingsUi.assemblerPathEdit->text());
19201945
settings.setValue("linkerpath", settingsUi.linkerPathEdit->text());
19211946
settings.setValue("starttext", settingsStartTextEditor->document()->toPlainText());

mainwindow.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
#include "signallocker.h"
7575
#include "masm.h"
7676

77-
#define SASM_VERSION "3.1.4"
77+
#define SASM_VERSION "3.2.0"
7878

7979
class MainWindow : public QMainWindow
8080
{
@@ -196,6 +196,7 @@ class MainWindow : public QMainWindow
196196
QString backupMode;
197197
QString backupAssemblerOptions;
198198
QString backupLinkerOptions;
199+
bool backupDisableLinking;
199200
QString backupAssemblerPath;
200201
QString backupStartText;
201202
QString backupLinkerPath;
@@ -274,6 +275,7 @@ public slots:
274275
void backupSettings();
275276
void restoreSettingsAndExit();
276277
void printMasmInfo();
278+
void enableOrDisableLinkingEdit(int disableLinkingCheckboxState);
277279

278280
//closing
279281
bool deleteTab(int index, bool saveFileName = false);

masm.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ void MASM::parseLstFile(QFile &lst, QVector<Assembler::LineNum> &lines, quint64
144144
continue;
145145
}
146146

147-
//check if ret
148-
if (line.contains("ret", Qt::CaseInsensitive)) {
147+
//check if return
148+
if (line.contains("return", Qt::CaseInsensitive)) {
149149
macroInstruction = line;
150150
if (macro.exactMatch(macroInstruction))
151151
continue;

settings.ui

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
<enum>Qt::LeftToRight</enum>
4242
</property>
4343
<property name="currentIndex">
44-
<number>0</number>
44+
<number>2</number>
4545
</property>
4646
<property name="elideMode">
4747
<enum>Qt::ElideNone</enum>
@@ -1833,6 +1833,9 @@
18331833
<layout class="QVBoxLayout" name="verticalLayout_6">
18341834
<item>
18351835
<layout class="QFormLayout" name="formLayout">
1836+
<property name="fieldGrowthPolicy">
1837+
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
1838+
</property>
18361839
<item row="0" column="0">
18371840
<widget class="QLabel" name="modeLabel">
18381841
<property name="text">
@@ -1990,6 +1993,23 @@
19901993
<item row="5" column="1">
19911994
<widget class="QLineEdit" name="linkerPathEdit"/>
19921995
</item>
1996+
<item row="6" column="0">
1997+
<widget class="QLabel" name="disableLinkingLabel">
1998+
<property name="text">
1999+
<string>Disable linking:</string>
2000+
</property>
2001+
</widget>
2002+
</item>
2003+
<item row="6" column="1">
2004+
<widget class="QCheckBox" name="disableLinkingCheckbox">
2005+
<property name="enabled">
2006+
<bool>true</bool>
2007+
</property>
2008+
<property name="text">
2009+
<string/>
2010+
</property>
2011+
</widget>
2012+
</item>
19932013
</layout>
19942014
</item>
19952015
<item>
@@ -2025,8 +2045,8 @@
20252045
<resources/>
20262046
<connections/>
20272047
<buttongroups>
2028-
<buttongroup name="buttonGroup"/>
20292048
<buttongroup name="buttonGroup_2"/>
20302049
<buttongroup name="buttonGroup_3"/>
2050+
<buttongroup name="buttonGroup"/>
20312051
</buttongroups>
20322052
</ui>

0 commit comments

Comments
 (0)