Files
VisualSapfor/src/GlobalData/Module/UI/ModuleAnchestorForm.java
2023-09-29 21:46:08 +03:00

108 lines
4.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package GlobalData.Module.UI;
import Common.Constants.Constants;
import Common.Current;
import Common.UI.UI;
import Common.UI.Windows.Dialog.DBObjectDialog;
import GlobalData.Compiler.Compiler;
import GlobalData.Compiler.CompilerType;
import GlobalData.Makefile.Makefile;
import GlobalData.Module.Module;
import GlobalData.Module.ModuleAnchestor;
import ProjectData.LanguageName;
public class ModuleAnchestorForm<T extends ModuleAnchestor> extends DBObjectDialog<T, ModuleAnchestorFields> {
public static String[] banned_flags = new String[]{
"-c", "-o",
"-ffree-form", "-ffixed-line-length-132", "-ffixed-form",
"-FI", "-f90",
"-fixed", "-free"
};
String command;
String flags;
public ModuleAnchestorForm() {
super(ModuleAnchestorFields.class);
}
@Override
public int getDefaultHeight() {
return 250;
}
@Override
public void validateFields() {
Compiler compiler = (Compiler) fields.cbCompilers.getSelectedItem();
command = (String) fields.cbCommands.getSelectedItem();
if (command == null) {
Log.Writeln("команда компиляции не выбрана");
} else {
if ((compiler != null) && compiler.type.equals(CompilerType.dvm)) {
//проверим команду.
if (Result instanceof Makefile) {
//могут быть только flink/clink
if (!command.equals("flink") && !command.equals("clink")) {
Log.Writeln("При линковке DVM системой допустимы\n" +
"только команды flink или clink");
}
} else if (Result instanceof Module) {
//могут быть только f/c
LanguageName languageName = ((Module) Result).language;
switch (languageName) {
case fortran:
case c:
if (!command.equals(languageName.getDVMCompile()))
Log.Writeln("компиляция " + languageName.getDescription() +
" программ DVM системой осуществляется только командой " +
languageName.getDVMCompile()
);
break;
default:
Log.Writeln("язык " + languageName + " не поддерживается DVM системой");
break;
}
}
} else {
if (!command.isEmpty())
Log.Writeln("Для всех компиляторов, кроме DVM системы, команда компиляции/линковки должна быть пуста.");
}
}
flags = (String) fields.cbFlags.getSelectedItem();
if (flags == null) Log.Writeln("флаги компиляции не выбраны");
else {
//проверка на служебные флаги
String[] data = flags.split(" ");
for (String flag : data) {
if (!flag.isEmpty()) {
/*
if (!flag.startsWith("-")) {
Log.Writeln("неверный формат флага " + Utils.Brackets(flag));
} else {
*/
for (String banned_flag : banned_flags) {
if (flag.equalsIgnoreCase(banned_flag)) {
Log.Writeln("флаги:\n" +
String.join(",", banned_flags) +
"\арезервированы системой.");
return;
}
// }
}
}
}
}
//проврка команды
}
@Override
public void fillFields() {
UI.TrySelect(fields.cbFlags, Result.flags);
UI.TrySelect(fields.cbCommands, Result.command);
UI.TrySelect(fields.cbCompilers, Result.getCompiler());
//--------------------------------------------
fields.setListeners(Result);
}
@Override
public void ProcessResult() {
Result.machine_id = Current.getMachine().id;
Compiler compiler = (Compiler) fields.cbCompilers.getSelectedItem();
Result.compiler_id = (compiler != null) ? compiler.id : Constants.Nan;
Result.command = command;
Result.flags = flags;
}
}