Files
VisualSapfor/src/GlobalData/Module/UI/ModuleAnchestorForm.java

108 lines
4.7 KiB
Java
Raw Normal View History

2023-09-17 22:13:42 +03:00
package GlobalData.Module.UI;
import Common.Current;
import Common.UI.UI;
import Common.UI.Windows.Dialog.DBObjectDialog;
import Common.Utils.Utils;
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 : Utils.Nan;
Result.command = command;
Result.flags = flags;
}
}