GUIBrain.java

1
// Copyright © 2004-2006 University of Helsinki, Department of Computer Science
2
// Copyright © 2012 various contributors
3
// This software is released under GNU Lesser General Public License 2.1.
4
// The license text is at http://www.gnu.org/licenses/lgpl-2.1.html
5
6
package fi.helsinki.cs.titokone;
7
8
import fi.helsinki.cs.ttk91.*;
9
10
import java.io.*;
11
import java.util.*;
12
import java.util.logging.Logger;
13
14
15
/**
16
 * This class contains the intellect the GUI class needs to provide
17
 * services to the Control class. It also hides the GUI and Control from
18
 * each other, serving as the middle-man for all their communication. It
19
 * prepares all the data from CompileInfo, LoadInfo and RunInfo objects
20
 * to GUI, so that it doesn't have to be aware of what's happening behind
21
 * GUIBrain. Moreover, this class for its part doesn't take any position on
22
 * how to show the data provided here on the screen. It may, however, tell
23
 * GUI to disable or enable some elements or objects, such as buttons,
24
 * menuitems or inputfields.
25
 */
26
public class GUIBrain {
27
28
29
    /**
30
     * This variable can be set to e.g. 70 to slow down the GUI on
31
     * compilation and runtime for overly fast machines. It should
32
     * preferrably be completely replaced with a user-selectable option,
33
     * however. The value should be at minimum 0.
34
     */
35 3
    private final int SLOWDOWN = 0;
36
37
38
    /**
39
     * This field contains the languages available, with the long,
40
     * English names like "Finnish" or "English (GB)" as keys and
41
     * the locales corresponding to the languages as values.
42
     */
43
    private Hashtable<String, Locale> availableLanguages;
44
45
    private Control control;
46
47
48
    /**
49
     * This field namely stores the current settings and everytime a setting
50
     * is changed, this is informed about it. When a GUIBrain object is created,
51
     * it asks for Control to get settings from settings file (which is as well
52
     * stored in this class, to settingsFile field) and GUIBrain saves
53
     * those settings (if there's any) in this field.
54
     */
55
    private Settings currentSettings;
56
57
58
    private Animator animator;
59
    private Display display;
60
61
62
    private GUI gui;
63
64 1
    private String programPath = "fi/helsinki/cs/titokone/";
65
    private File settingsFile;
66
67
    private File currentlyOpenedFile;
68
69
    public static final int COMMENTED = 1;
70
    public static final int LINE_BY_LINE = 2;
71
    public static final int PAUSED = 2;
72
    public static final int ANIMATED = 4;
73
74
    /**
75
     * This field is set when menuInterrupt is called, and all continuous
76
     * loops which do many things and wait for input in between should
77
     * check if this is sent before continuing to their next step. An
78
     * interrupt sent means they should stop doing whatever they were doing
79
     * as soon as is reasonable. (Usually when it would be the time to
80
     * wait for input from the user.
81
     */
82
    private boolean interruptSent;
83
84
85
    /**
86
     * This field is set true, when continueTaskWithoutPauses is launched.
87
     * Methods menuRun() and menuCompile() check this to see if they want
88
     * to override the setting in currentSettings.
89
     */
90
    private boolean noPauses;
91
92
93
    private boolean threadRunning;
94
95
96
    /**
97
     * Keeps track of the state of this program. It can be NONE, B91_NOT_RUNNING,
98
     * B91_RUNNING, B91_PAUSED, B91_WAIT_FOR_KBD, K91_NOT_COMPILING, K91_COMPILING
99
     * or K91_PAUSED.
100
     */
101
    private short currentState;
102
103
104
    /**
105
     * These fields are used to set the current state of program. It's stored into
106
     * currentState field.
107
     */
108
    private static final short NONE = 0;
109
    private static final short B91_NOT_RUNNING = 1;
110
    private static final short B91_RUNNING = 2;
111
    private static final short B91_PAUSED = 3;
112
    private static final short B91_WAIT_FOR_KBD = 4;
113
    private static final short K91_NOT_COMPILING = 5;
114
    private static final short K91_COMPILING = 6;
115
    private static final short K91_PAUSED = 7;
116
    private static final short INTERRUPTED_WITHOUT_PAUSE = 10;
117
    private static final short INTERRUPTED_WITH_PAUSE = 11;
118
119
    /**
120
     * This field contains our logger.
121
     */
122
    private Logger logger;
123
124
    public static String DEFAULT_STDIN_FILENAME = "stdin";
125
    public static String DEFAULT_STDOUT_FILENAME = "stdout";
126
127
    /**
128
     * This variable sets whether the initial data area length (up to sp)
129
     * should be marked by hiding the symbolic versions of lines down from
130
     * it.
131
     */
132 2
    protected static boolean ENABLE_DATA_AREA_MARKUP = true;
133
134
135
    /**
136
     * This constructor sets up the GUIBrain instance. It calls private
137
     * initialization functions, including findAvailableLanguages().
138
     */
139
    public GUIBrain(GUI gui, Animator animator, Display display) {
140
141 1
        this.gui = gui;
142
143
        logger = Logger.getLogger(getClass().getPackage().getName());
144 2
        File defStdinFile = new File(System.getProperty("user.dir"), DEFAULT_STDIN_FILENAME);
145 2
        File defStdoutFile = new File(System.getProperty("user.dir"), DEFAULT_STDOUT_FILENAME);
146
        try {
147
            //defStdinFile.createNewFile(); // We don't need write access to stdin.
148 2
            if (!defStdoutFile.exists()) {
149 1
                defStdoutFile.createNewFile();
150 1
                defStdoutFile.delete();
151
            }
152
        } catch (IOException e) {
153
            logger.info(e.getMessage());
154
        }
155 2
        control = new Control(defStdinFile, defStdoutFile);
156
157 1
        this.animator = animator;
158 1
        this.display = display;
159
160
        try {
161 1
            getCurrentSettings();
162
        } catch (IOException e) {
163 1
            System.out.println("Settings file cannot be accessed. ...exiting.");
164 3
            System.exit(0);
165
        }
166
167
168 1
        String filemode = currentSettings.getStrValue(Settings.STDIN_PATH);
169 1
        String path = currentSettings.getStrValue(Settings.DEFAULT_STDIN);
170
171 3
        if (path != null && !path.equals("")) {
172 2
            if (filemode.equals("absolute")) {
173 1
                defStdinFile = new File(path);
174 2
            } else if (filemode.equals("relative")) {
175 2
                defStdinFile = new File(System.getProperty("user.dir"), path);
176
            }
177
        }
178
        try {
179 1
            control.setDefaultStdIn(defStdinFile);
180
        } catch (Exception e) {
181
            logger.info(e.getMessage());
182
        }
183
184
185 1
        filemode = currentSettings.getStrValue(Settings.STDOUT_PATH);
186 1
        path = currentSettings.getStrValue(Settings.DEFAULT_STDOUT);
187
188 3
        if (path != null && !path.equals("")) {
189 2
            if (filemode.equals("absolute")) {
190 1
                defStdoutFile = new File(path);
191 2
            } else if (filemode.equals("relative")) {
192 2
                defStdoutFile = new File(System.getProperty("user.dir"), path);
193
            }
194
        }
195
        try {
196 1
            control.setDefaultStdOut(defStdoutFile);
197
        } catch (Exception e) {
198
            logger.info(e.getMessage());
199
        }
200
201 1
        int runmode = currentSettings.getIntValue(Settings.RUN_MODE);
202 11
        gui.setSelected(GUI.OPTION_RUNNING_COMMENTED, (runmode & COMMENTED) != 0);
203 11
        gui.setSelected(GUI.OPTION_RUNNING_PAUSED, (runmode & PAUSED) != 0);
204 11
        gui.setSelected(GUI.OPTION_RUNNING_ANIMATED, (runmode & ANIMATED) != 0);
205
206 1
        int compilemode = currentSettings.getIntValue(Settings.COMPILE_MODE);
207 11
        gui.setSelected(GUI.OPTION_COMPILING_COMMENTED, (compilemode & COMMENTED) != 0);
208 11
        gui.setSelected(GUI.OPTION_COMPILING_PAUSED, (compilemode & PAUSED) != 0);
209
210 1
        int memorysize = currentSettings.getIntValue(Settings.MEMORY_SIZE);
211 3
        if (memorysize != Control.DEFAULT_MEMORY_SIZE) {
212
            try {
213 1
                control.changeMemorySize(memorysize);
214
            } catch (IllegalArgumentException wrongsize) {
215 3
                control.changeMemorySize(Control.DEFAULT_MEMORY_SIZE);
216
            }
217
        }
218
219
220 2
        availableLanguages = new Hashtable<String, Locale>();
221 1
        findAvailableLanguages();
222
223 1
        String language = currentSettings.getStrValue(Settings.UI_LANGUAGE);
224
225 2
        if (availableLanguages.containsKey(language)) {
226 2
            Translator.setLocale((Locale) availableLanguages.get(language));
227
            //gui.updateAllTexts();
228
        }
229
230
231 3
        noPauses = false;
232 3
        interruptSent = false;
233
        // The settings have not really changed into anything
234
        // interesting at this point.
235
        //saveSettings();
236
237 3
        currentState = NONE;
238
    }
239
240
241
    /**
242
     * This method corresponds to the menu option File -> Open... It
243
     * calls either openBinaryFile or openSourceFile correspondingly.
244
     */
245
    public void menuOpenFile(File openedFile) {
246
247
        /* Opening a file is a command that interrupts all other tasks. */
248 3
        interruptCurrentTasks(true);
249
250 1
        String suffix = getExtension(openedFile);
251
252 1
        gui.resetAll();
253
254 2
        if (suffix.equals("b91")) {
255
            try {
256 1
                control.openBinary(openedFile);
257
            } catch (Exception e) {
258 2
                gui.showError(e.getMessage());
259
                return;
260
            }
261
262 1
            loadAndUpdateGUI();
263
264 2
        } else if (suffix.equals("k91")) {
265 1
            gui.resetAll();
266
267
            String k91Source = "";
268
269
            try {
270 1
                k91Source = control.openSource(openedFile);
271
            } catch (IOException e) {
272 2
                gui.showError(e.getMessage());
273
                return;
274
            }
275
276 1
            currentlyOpenedFile = openedFile;
277
278 1
            String[] src = k91Source.split("\n|\r|\r\n");
279 1
            gui.insertToCodeTable(src);
280 3
            gui.updateStatusBar(new Message("Opened a new k91 source " +
281
                    "file.").toString());
282 3
            gui.setGUIView(2);
283
284 3
            currentState = K91_NOT_COMPILING;
285 1
            setGUICommandsForCurrentState();
286
287
288
        } else { // if file extension isn't either b91 or k91
289 3
            gui.showError(new Message("File extension must be k91 or b91").toString());
290
        }
291
    }
292
293
294
    public static final int MIN_KBD_VALUE = Integer.MIN_VALUE; //,not -32767;
295
    public static final int MAX_KBD_VALUE = Integer.MAX_VALUE;//,not 32767;
296
297
    public boolean enterInput(String input) {
298
        int inputValue;
299 6
        String[] minAndMaxValues = {"" + MIN_KBD_VALUE, "" + MAX_KBD_VALUE};
300
301
        try {
302 1
            inputValue = Integer.parseInt(input);
303
        } catch (NumberFormatException e) {
304 3
            gui.changeTextInEnterNumberLabel(new Message("Illegal input").toString());
305 3
            gui.updateStatusBar(new Message("Illegal input. You must insert a number between {0}...{1}", minAndMaxValues).toString());
306 3
            return false;
307
        }
308
309 8
        if (inputValue > MAX_KBD_VALUE || inputValue < MIN_KBD_VALUE) {
310 3
            gui.changeTextInEnterNumberLabel(new Message("Illegal input").toString());
311 3
            gui.updateStatusBar(new Message("Illegal input. You must insert a number between {0}...{1}", minAndMaxValues).toString());
312 3
            return false;
313
        }
314
315 1
        gui.changeTextInEnterNumberLabel("");
316 1
        gui.updateStatusBar("");
317
318 1
        control.keyboardInput(inputValue);
319 3
        return true;
320
    }
321
322
323
    /**
324
     * This method corresponds to the menu option File -> Run. It does
325
     * its work by calling runInstruction().
326
     */
327
    public synchronized void menuRun() {
328
329 3
        threadRunning = true;
330
331 3
        interruptSent = false;
332 3
        noPauses = false;
333
334
        /* If stdout file is set to be overwritten, then it must be emptied first.
335
           It's done here by deleting it first and then creating it again.
336
        */
337 1
        File stdoutFile = getCurrentDefaultStdoutFile();
338 3
        if (currentSettings.getStrValue(Settings.STDOUT_USE).equals("overwrite")) {
339
            try {
340 2
                if (stdoutFile.exists()) {
341 1
                    stdoutFile.delete();
342
                }
343 1
                stdoutFile.createNewFile();
344
            } catch (IOException e) {
345 5
                String[] filename = {stdoutFile.getName()};
346 3
                gui.showError(new Message("Error while emptying {0}", filename).toString());
347
                logger.warning(e.getMessage());
348
                //return; // Allow emptying to fail, since it may not mean anything.
349
            }
350
        }
351
352
        RunInfo runinfo;
353 1
        int runmode = currentSettings.getIntValue(Settings.RUN_MODE);
354
355 2
        int base = 0; //Register base is always 0
356 1
        int limit = currentSettings.getIntValue(Settings.MEMORY_SIZE); //Register limit is equal to memsize
357
358 2
        animator.init(control.getCpu(), base, limit);
359
360 4
        if ((runmode & ANIMATED) != 0) {
361 1
            gui.showAnimator();
362
        }
363
364
        do {
365 3
            currentState = B91_RUNNING;
366 1
            setGUICommandsForCurrentState();
367
368 4
            int nextLine = ((Processor) control.getCpu()).getValueOf(TTK91Cpu.CU_PC_CURRENT);
369 3
            gui.selectLine(nextLine, GUI.INSTRUCTIONS_AND_DATA_TABLE);
370
371 1
            runmode = currentSettings.getIntValue(Settings.RUN_MODE);
372
373
            try {
374 1
                runinfo = control.runLine();
375 1
                if (runinfo == null) {
376
                    break;
377
                }
378
            } catch (TTK91NoKbdData needMoreData) {
379
                /* GUI's KBD-frame is enabled and exectution cannot go on before user has entered
380
                   a number value there. GUI calls GUIBrain's enterInput()-method to send the number
381
                   ahead to Control.
382
                */
383 3
                gui.addComment(new Message("Enter a number in the text field above.").toString());
384 3
                gui.updateStatusBar(new Message("Waiting for KBD input...").toString());
385 3
                currentState = B91_WAIT_FOR_KBD;
386 1
                setGUICommandsForCurrentState();
387 3
                gui.enable(GUI.INPUT_FIELD);
388
                /* Wait until continueTask() is run. In this case it's done by pressing
389
                   enter-button below the text field where user enter kbd-data.
390
                */
391 1
                waitForContinueTask();
392 3
                gui.disable(GUI.INPUT_FIELD);
393
                continue; // And then go to beginning of the do-while-loop.
394
395
            } catch (TTK91RuntimeException e) {
396 3
                gui.updateStatusBar(new Message("Execution aborted due to an error").toString());
397 2
                gui.addComment(e.getMessage());
398 3
                currentState = INTERRUPTED_WITH_PAUSE;
399 1
                setGUICommandsForCurrentState();
400
                break;
401
            }
402
403 4
            if ((runmode & COMMENTED) != 0) {
404 2
                if (runinfo.getComments() != null) {
405 8
                    gui.addComment(runinfo.getLineNumber() + ": " + runinfo.getComments());
406
                }
407
            }
408
409 1
            animator.stopAnimation();
410 1
            animator.animate(runinfo);
411
412 2
            gui.updateStatusBar(runinfo.getComments());
413
414
            // If the command wrote something to screen, we'll deal with
415
            // the actual writing. STDOUT writes are dealt with in Control.
416 4
            if (runinfo.isExternalOp() && runinfo.whatOUT() != null) {
417
                // We use a Processor constant to check what device we are
418
                // writing to. CRT happens to be 0 now, but it might not be
419
                // "in the future".
420 4
                if (runinfo.whatOUT()[0] == Processor.CRT) {
421 4
                    gui.addOutputData(runinfo.whatOUT()[1]);
422
                }
423
            }
424
425 1
            int[] newRegisterValues = runinfo.getRegisters();
426 5
            gui.updateReg(GUI.R0, newRegisterValues[0]);
427 5
            gui.updateReg(GUI.R1, newRegisterValues[1]);
428 5
            gui.updateReg(GUI.R2, newRegisterValues[2]);
429 5
            gui.updateReg(GUI.R3, newRegisterValues[3]);
430 5
            gui.updateReg(GUI.R4, newRegisterValues[4]);
431 5
            gui.updateReg(GUI.R5, newRegisterValues[5]);
432 5
            gui.updateReg(GUI.R6, newRegisterValues[6]);
433 5
            gui.updateReg(GUI.R7, newRegisterValues[7]);
434 4
            gui.updateReg(GUI.PC, runinfo.getNewPC());
435
436 1
            LinkedList changedMemoryLines = runinfo.getChangedMemoryLines();
437 1
            Iterator changedMemoryLinesListIterator = changedMemoryLines.iterator();
438
439 2
            while (changedMemoryLinesListIterator.hasNext()) {
440 1
                Object[] listItem = (Object[]) changedMemoryLinesListIterator.next();
441 3
                int line = ((Integer) listItem[0]).intValue();
442 2
                MemoryLine contents = (MemoryLine) listItem[1];
443 3
                gui.updateInstructionsAndDataTableLine(line, contents.getBinary(), contents.getSymbolic());
444
            }
445
446 1
            gui.repaint();
447
448 5
            if ((runmode & LINE_BY_LINE) != 0 && noPauses == false) {
449 3
                currentState = B91_PAUSED;
450 1
                setGUICommandsForCurrentState();
451 1
                waitForContinueTask();
452
453
            } else {
454
                try {
455 3
                    wait(SLOWDOWN + 1); // Add 1 to avoid the special meaning of 0.
456
                } catch (InterruptedException e) {
457 1
                    System.out.println("InterruptedException in menuRun()");
458
                }
459
460
            }
461
462 1
        } while (interruptSent == false); // End of do-while -loop
463
464 3
        if (currentState == INTERRUPTED_WITH_PAUSE) {
465 1
            setGUICommandsForCurrentState();
466 1
            waitForContinueTask();
467
        }
468
469 1
        load();
470 3
        currentState = B91_NOT_RUNNING;
471 1
        setGUICommandsForCurrentState();
472
473 1
        gui.unselectAll();
474
475 1
        gui.addComment(" ");
476 3
        gui.addComment(new Message("Execution finished").toString());
477 1
        gui.addComment(" ");
478
479 1
        continueTask();
480
481 3
        threadRunning = false;
482 1
        continueTask();
483
484
    }
485
486
    /**
487
     * This method is used to save the source after it has been
488
     * modified in the code window.
489
     */
490
    public void saveSource() {
491
        try {
492 2
            control.modifySource(gui.getCodeTableContents());
493
        } catch (IOException e) {
494 2
            gui.showError(e.getMessage());
495
        }
496
    }
497
498
499
    /**
500
     * This method corresponds to the menu option File -> Compile. It
501
     * does its work by calling compileLine().
502
     */
503
    public synchronized void menuCompile() {
504
505 3
        threadRunning = true;
506
507 3
        interruptSent = false;
508 3
        noPauses = false;
509
510 3
        currentState = K91_COMPILING;
511 1
        setGUICommandsForCurrentState();
512
513
        /* compileinfo is set to null now. Null as CompileInfo object means also that
514
           compilation has finished successfully. We may think that if no line was
515
           compiled then it would mean a successful compilation as well, so this isn't
516
           in contradiction to that anyway.
517
           Really this is set to null because we need compileinfo to be initialized somehow
518
           in compileLine() methods try-catch clause a few lines below.
519
        */
520
        CompileInfo compileinfo = null;
521
522 1
        int compilemode = currentSettings.getIntValue(Settings.COMPILE_MODE);
523
        int phase;
524
525
        /* This will be set to true once the compilation succeeds. The value
526
           of this variable will be used in case of an interrupted compilation
527
           or if an error occurs, when menuCompile() has to decide whether to
528
           change back to pre-compilation-started state or not.
529
        */
530 2
        boolean compilingCompleted = false;
531
532
        do {
533
534 3
            currentState = K91_COMPILING;
535 1
            setGUICommandsForCurrentState();
536
537
            try {
538 1
                compileinfo = control.compileLine();
539
            } catch (TTK91CompileException e) {
540
                /* This section is executed if an error occured during compilation. First
541
                   we preset errorLine and phase to what they would be, if there hasn't
542
                   been any compileinfo before.
543
                */
544 2
                int errorLine = 0;
545 2
                phase = CompileInfo.FIRST_ROUND;
546
547
                /* Then we check if there has been some compileinfos before and set errorLine
548
                   and phase accordingly if positive.
549
                */
550 1
                if (compileinfo != null) {
551 4
                    errorLine = compileinfo.getLineNumber() + 1;
552 1
                    phase = compileinfo.getPhase();
553
                }
554
555 7
                gui.addComment(errorLine + ": " + e.getMessage());
556 3
                gui.updateStatusBar(new Message("Compilation aborted due to an error").toString());
557
558 1
                if (phase == CompileInfo.FIRST_ROUND) {
559 3
                    gui.selectLine(errorLine, GUI.CODE_TABLE);
560 3
                } else if (phase == CompileInfo.SECOND_ROUND) {
561 3
                    gui.selectLine(errorLine, GUI.INSTRUCTIONS_AND_DATA_TABLE);
562
                }
563
564 3
                currentState = K91_PAUSED;
565 1
                setGUICommandsForCurrentState();
566 1
                waitForContinueTask();
567
                break;
568
            }
569
570
            /* Compilation is finished once compileLine() returns null */
571 1
            if (compileinfo == null) {
572 2
                compilingCompleted = true;
573
                break;
574
            } else {
575 1
                String comments = compileinfo.getComments();
576 1
                if (comments == null) {
577
                    comments = "";
578
                }
579
580 6
                if ((compilemode & COMMENTED) != 0 && !comments.equals("")) {
581 7
                    gui.addComment(compileinfo.getLineNumber() + ": " + comments);
582
                }
583
584 1
                gui.updateStatusBar(comments);
585
586 1
                compilemode = currentSettings.getIntValue(Settings.COMPILE_MODE);
587 1
                phase = compileinfo.getPhase();
588
589 1
                if (phase == CompileInfo.FIRST_ROUND) {
590 2
                    if (compileinfo.getSymbolFound()) {
591 1
                        String symbolName = compileinfo.getSymbolName();
592
                        Integer symbolValue = null;
593 2
                        if (compileinfo.getSymbolDefined()) {
594 2
                            symbolValue = new Integer(compileinfo.getSymbolValue());
595
                        }
596 1
                        gui.updateRowInSymbolTable(symbolName, symbolValue);
597
                    }
598 2
                    if (compileinfo.getLabelFound()) {
599 1
                        String symbolName = compileinfo.getLabelName();
600 2
                        Integer symbolValue = new Integer(compileinfo.getLabelValue());
601 1
                        gui.updateRowInSymbolTable(symbolName, symbolValue);
602
                    }
603
604 4
                    gui.selectLine(compileinfo.getLineNumber(), GUI.CODE_TABLE);
605 3
                } else if (phase == CompileInfo.FINALIZING_FIRST_ROUND) {
606 1
                    String[][] symbolTable = compileinfo.getSymbolTable();
607 1
                    if (symbolTable != null) {
608 5
                        for (int i = 0; i < symbolTable.length; i++) {
609 2
                            String symbolName = symbolTable[i][0];
610
                            Integer symbolValue = null;
611
                            try {
612 3
                                symbolValue = new Integer(symbolTable[i][1]);
613
                            } catch (NumberFormatException e) {
614
                            }
615 1
                            gui.updateRowInSymbolTable(symbolName, symbolValue);
616
                        }
617
                    }
618
619 1
                    String[] newInstructionsContents = compileinfo.getInstructions();
620 1
                    String[] newDataContents = compileinfo.getData();
621 1
                    gui.insertToInstructionsTable(newInstructionsContents);
622 1
                    gui.insertToDataTable(newDataContents);
623 3
                    gui.setGUIView(3);
624
625 3
                } else if (phase == CompileInfo.SECOND_ROUND) {
626 1
                    int line = compileinfo.getLineNumber();
627 1
                    int binary = compileinfo.getLineBinary();
628 1
                    gui.updateInstructionsAndDataTableLine(line, binary);
629 4
                    gui.selectLine(compileinfo.getLineNumber(), GUI.INSTRUCTIONS_AND_DATA_TABLE);
630
                }
631
632 1
                gui.repaint();
633
634 7
                if (((compilemode & PAUSED) != 0) && !comments.equals("") && noPauses == false) {
635 3
                    currentState = K91_PAUSED;
636 1
                    setGUICommandsForCurrentState();
637 1
                    waitForContinueTask();
638
                } else {
639
                    try {
640 3
                        wait(SLOWDOWN + 1); // Add 1 to avoid the special meaning of 0.
641
                    } catch (InterruptedException e) {
642 1
                        System.out.println("InterruptedException in menuRun()");
643
                    }
644
645
                }
646
            }
647
648 1
        } while (interruptSent == false); // End of do-loop
649
650 3
        if (currentState == INTERRUPTED_WITH_PAUSE) {
651 1
            setGUICommandsForCurrentState();
652 1
            waitForContinueTask();
653
        }
654
655 3
        if (compilingCompleted == true) {
656
            try {
657 1
                control.saveBinary();
658 3
                System.out.println(new Message("Program saved to binary file!").toString());
659
            } catch (IOException e) {
660 1
                System.out.println(e);
661
            }
662 1
            gui.resetAll();
663 1
            gui.addComment(" ");
664 3
            gui.addComment(new Message("Compilation finished").toString());
665 1
            gui.addComment(" ");
666 1
            loadAndUpdateGUI();
667
        } else {
668
            /* Reload the source so that the compiling starts again from the beginning. */
669
            try {
670 1
                control.openSource(currentlyOpenedFile);
671
            } catch (IOException e) {
672 2
                gui.showError(e.getMessage());
673 3
                currentState = NONE;
674 1
                setGUICommandsForCurrentState();
675
                return;
676
            }
677 3
            currentState = K91_NOT_COMPILING;
678 1
            setGUICommandsForCurrentState();
679 3
            gui.setGUIView(2);
680 1
            gui.resetAll();
681 1
            gui.addComment(" ");
682 3
            gui.addComment(new Message("Compilation aborted.").toString());
683 1
            gui.addComment(" ");
684 1
            continueTask();
685
        }
686 3
        threadRunning = false;
687 1
        continueTask();
688
    }
689
690
691
    /**
692
     * This method corresponds to the menu option File -> Erase memory.
693
     */
694
    public synchronized void menuEraseMemory() {
695 3
        interruptCurrentTasks(true);
696
697
        /* If there's no other thread running, then waiting for continueTask would
698
           be futile, since no one will ever notify this method to continue exectution.
699
           Actually, running waitForContinueTask() would mean dead lock then.
700
        */
701 3
        if (threadRunning == true) {
702 1
            waitForContinueTask();
703
        }
704
705 1
        control.eraseMemory();
706
        // The registers should be zeros now;
707 5
        gui.updateReg(GUI.R0, 0);
708 5
        gui.updateReg(GUI.R1, 0);
709 5
        gui.updateReg(GUI.R2, 0);
710 5
        gui.updateReg(GUI.R3, 0);
711 5
        gui.updateReg(GUI.R4, 0);
712 5
        gui.updateReg(GUI.R5, 0);
713 5
        gui.updateReg(GUI.R6, 0);
714 5
        gui.updateReg(GUI.R7, 0);
715 5
        gui.updateReg(GUI.PC, 0);
716 1
        gui.resetAll();
717
718 3
        gui.updateStatusBar(new Message("Memory contents erased").toString());
719
720 3
        gui.setGUIView(1);
721 3
        currentState = NONE;
722 1
        setGUICommandsForCurrentState();
723 2
        display.setMem(control.getPhysicalMemory());
724
    }
725
726
727
    /**
728
     * This method corresponds to the menu option File -> Exit.
729
     */
730
    public void menuExit() {
731
    }
732
733
734
    /**
735
     * This method corresponds to the menu option Option -> Set language.
736
     * If the chosen language is one in the list, then this version is called.
737
     *
738
     * @param language Name of the language. This should be one of those get
739
     *                 from getAvailableLanguages() method.
740
     */
741
    public void menuSetLanguage(String language) {
742
743 2
        if (availableLanguages.containsKey(language)) {
744 2
            Translator.setLocale((Locale) availableLanguages.get(language));
745 1
            currentSettings.setValue(Settings.UI_LANGUAGE, language);
746 1
            saveSettings();
747 1
            gui.updateAllTexts();
748
        }
749
    }
750
751
752
    /**
753
     * This method correspods as well to the menu option Option -> Set language.
754
     * This version is called, if user has chosen an external language file.
755
     *
756
     * @param languageFile The language file. This must be class-file that
757
     *                     extends ListResourceBundle.
758
     */
759
    public void menuSetLanguage(File languageFile) {
760
761 2
        if (languageFile.exists()) {
762
            try {
763 2
                Translator.setLocale(Locale.CHINESE, control.loadLanguageFile(languageFile));
764
            } catch (ResourceLoadFailedException e) {
765 3
                gui.showError(new Message("Not a language file").toString());
766 2
                System.out.println(e.getMessage());
767
                return;
768
            }
769
            //currentSettings.setValue(Settings.UI_LANGUAGE, language);
770
            //control.saveSettings(currentSettings.toString(), settingsFile);
771 1
            gui.updateAllTexts();
772
        }
773
    }
774
775
776
    /**
777
     * This method corresponds to the menu option Option -> Set Default Stdin File.
778
     * It informs Control about the new default stdin file and saves it to
779
     * settingsFile.
780
     */
781
    public void menuSetStdin(File stdinFile) {
782
        try {
783 1
            control.setDefaultStdIn(stdinFile);
784
        } catch (Exception e) {
785 2
            gui.showError(e.getMessage());
786
            return;
787
        }
788 1
        String filename = stdinFile.getPath();
789 1
        currentSettings.setValue(Settings.DEFAULT_STDIN, filename);
790 1
        currentSettings.setValue(Settings.STDIN_PATH, "absolute");
791 1
        saveSettings();
792
793 3
        gui.addComment(new Message("Default stdin file set to {0}", filename).toString());
794
    }
795
796
797
    /**
798
     * This method corresponds to the menu option Option -> Set Default Stdout File.
799
     * It informs Control about the new default stdout file and saves it to
800
     * settingsFile.
801
     */
802
    public void menuSetStdout(File stdoutFile, boolean append) {
803 1
        String filename = stdoutFile.getPath();
804
805 3
        if (append == true) {
806 1
            currentSettings.setValue(Settings.STDOUT_USE, "append");
807
        } else {
808 1
            currentSettings.setValue(Settings.STDOUT_USE, "overwrite");
809
        }
810
        try {
811 1
            control.setDefaultStdOut(stdoutFile);
812
        } catch (Exception e) {
813 2
            gui.showError(e.getMessage());
814
            //return; // Allow unwriteable stdout file; the exception'll hit later anyway.
815
        }
816 1
        currentSettings.setValue(Settings.DEFAULT_STDOUT, filename);
817 1
        currentSettings.setValue(Settings.STDOUT_PATH, "absolute");
818 1
        saveSettings();
819
820 3
        gui.addComment(new Message("Default stdout file set to {0}", filename).toString());
821
    }
822
823
824
    /**
825
     * This method corresponds to the menu option Option -> Set Memory Size.
826
     */
827
    public void menuSetMemorySize(int newSize) {
828
        try {
829 1
            control.changeMemorySize(newSize);
830
        } catch (IllegalArgumentException e) {
831
            return;
832
        }
833 1
        currentSettings.setValue(Settings.MEMORY_SIZE, newSize);
834 1
        saveSettings();
835 3
        gui.setGUIView(1);
836 3
        currentState = NONE;
837 1
        setGUICommandsForCurrentState();
838
    }
839
840
841
    /**
842
     * This methods refreshes GUI so that it shows running options as they
843
     * are declared currently.
844
     */
845
    public void refreshRunningOptions() {
846 1
        int runmode = currentSettings.getIntValue(Settings.RUN_MODE);
847 11
        gui.setSelected(GUI.OPTION_RUNNING_PAUSED, (runmode & PAUSED) != 0);
848 11
        gui.setSelected(GUI.OPTION_RUNNING_COMMENTED, (runmode & COMMENTED) != 0);
849 11
        gui.setSelected(GUI.OPTION_RUNNING_ANIMATED, (runmode & ANIMATED) != 0);
850
    }
851
852
    public void menuSetRunningOption(int option, boolean b) {
853 1
        int runmode = currentSettings.getIntValue(Settings.RUN_MODE);
854 4
        boolean adjustAnimationOff = false, adjustLineByLineOn = false;
855
856
        // First, update running mode. If the option LINE_BY_LINE was turned
857
        // off, turn ANIMATED off. If the option ANIMATED was turned on,
858
        // turn LINE_BY_LINE on.
859 7
        if (((runmode & option) != 0) == b) {
860
            // do nothing
861 2
        } else if ((runmode & option) != 0) {
862 1
            runmode -= option; // Something was turned off.
863
            // Was it LINE_BY_LINE and is animation on?
864 7
            if (option == LINE_BY_LINE && (runmode & ANIMATED) != 0) {
865 2
                adjustAnimationOff = true;
866
            }
867 2
        } else if ((runmode & option) == 0) {
868 1
            runmode += option; // Something was turned on.
869
            // Was it ANIMATED and is line-by-line off?
870 7
            if (option == ANIMATED && (runmode & LINE_BY_LINE) == 0) {
871 2
                adjustLineByLineOn = true;
872
            }
873
        }
874
875 1
        currentSettings.setValue(Settings.RUN_MODE, runmode);
876 1
        saveSettings();
877
878
        switch (option) {
879
            case LINE_BY_LINE: // Synonym for case PAUSED:
880 3
                gui.setSelected(GUI.OPTION_RUNNING_PAUSED, b);
881
                break;
882
            case COMMENTED:
883 3
                gui.setSelected(GUI.OPTION_RUNNING_COMMENTED, b);
884
                break;
885
            case ANIMATED:
886 3
                gui.setSelected(GUI.OPTION_RUNNING_ANIMATED, b);
887 12
                if (b == true && (currentState == B91_RUNNING
888
                        || currentState == B91_PAUSED
889
                        || currentState == B91_WAIT_FOR_KBD)) {
890 1
                    gui.showAnimator();
891
                } else {
892 1
                    gui.hideAnimator();
893
                }
894
                break;
895
        }
896
        // Finally, we repeat the process to a) turn animation off if line-by-line
897
        // running was turned off, and b) turn line-by-line running on if animation
898
        // was turned on. Note the lack of infinite looping which we are proud of.
899 1
        if (adjustAnimationOff) {
900 5
            menuSetRunningOption(ANIMATED, false);
901
        }
902 1
        if (adjustLineByLineOn) {
903 5
            menuSetRunningOption(LINE_BY_LINE, true);
904
        }
905
906
    }
907
908
909
    /**
910
     * This methods refreshes GUI so that it shows compiling options as they
911
     * are declared currently.
912
     */
913
    public void refreshCompilingOptions() {
914 1
        int compilemode = currentSettings.getIntValue(Settings.COMPILE_MODE);
915 11
        gui.setSelected(GUI.OPTION_COMPILING_PAUSED, (compilemode & PAUSED) != 0);
916 11
        gui.setSelected(GUI.OPTION_COMPILING_COMMENTED, (compilemode & COMMENTED) != 0);
917
    }
918
919
920
    /**
921
     * This method
922
     */
923
    public void menuSetCompilingOption(int option, boolean b) {
924 1
        int compilemode = currentSettings.getIntValue(Settings.COMPILE_MODE);
925
926 7
        if (((compilemode & option) != 0) == b) {
927
            // do nothing
928 2
        } else if ((compilemode & option) != 0) {
929 1
            compilemode -= option;
930 2
        } else if ((compilemode & option) == 0) {
931 1
            compilemode += option;
932
        }
933
934 1
        currentSettings.setValue(Settings.COMPILE_MODE, compilemode);
935 1
        saveSettings();
936
937
        switch (option) {
938
            case PAUSED:
939 3
                gui.setSelected(GUI.OPTION_COMPILING_PAUSED, b);
940
                break;
941
            case COMMENTED:
942 3
                gui.setSelected(GUI.OPTION_COMPILING_COMMENTED, b);
943
                break;
944
        }
945
    }
946
947
948
    public void menuAbout() {
949
    }
950
951
952
    public void menuManual() {
953
    }
954
955
956
    /**
957
     * This method corresponds to a request to interrupt whatever we
958
     * were doing once it becomes possible.
959
     *
960
     * @param immediate If this is true, then continueTask is being waited before
961
     *                  the previous job ends.
962
     *                  If this is false, then it stops immediately and next job
963
     *                  can start right after calling this.
964
     */
965
    public void menuInterrupt(boolean immediate) {
966 3
        gui.updateStatusBar(new Message("Current operation aborted").toString());
967 1
        interruptCurrentTasks(immediate);
968
    }
969
970
971
    /**
972
     * Notifies all currents tasks to be interrupted once they are able to read the
973
     * new value of interruptSent. Immediate interruption means that all tasks should
974
     * end without any further activities, while non-immediate interruption means
975
     * that some tasks may pause to wait for continueTask() to notify them before
976
     * ending completely.
977
     *
978
     * @param immediate If this is true, then continueTask is being waited before
979
     *                  the previous job ends.
980
     *                  If this is false, then it stops immediately and next job
981
     *                  can start right after calling this.
982
     */
983
    private void interruptCurrentTasks(boolean immediate) {
984 3
        if (immediate == true) {
985 3
            currentState = INTERRUPTED_WITHOUT_PAUSE;
986
        } else {
987 3
            currentState = INTERRUPTED_WITH_PAUSE;
988
        }
989
990 3
        interruptSent = true;
991
        synchronized (this) {
992 1
            notifyAll();
993
        }
994
    }
995
996
997
    /**
998
     * Notifies all methods,that have called waitForContinueTask() to continue
999
     * their operation.
1000
     */
1001
    public void continueTask() {
1002
        synchronized (this) {
1003 1
            notify();
1004
        }
1005
        return;
1006
    }
1007
1008
1009
    /**
1010
     * Notifies all methods, that have called waitForContinueTask() to continue
1011
     * their operation plus informs them that waitForContinueTask() should no
1012
     * longer be called during current operation.
1013
     */
1014
    public void continueTaskWithoutPauses() {
1015 3
        noPauses = true;
1016
        synchronized (this) {
1017 1
            notify();
1018
        }
1019
        return;
1020
    }
1021
1022
1023
    /**
1024
     * A method can call this, if it wants enter into pause mode and wait for someone
1025
     * to call continueTask() or continueTaskWithoutPauses() methods. This method cannot
1026
     * however be used, unless the method which is calling this hasn't been set to run
1027
     * in a thread of its own. eg. by calling new GUIThreader()
1028
     */
1029
    public void waitForContinueTask() {
1030
1031
        synchronized (this) {
1032
            try {
1033 1
                wait();
1034
            } catch (InterruptedException e) {
1035 1
                System.out.println("InterruptedException");
1036
            }
1037
        }
1038
        return;
1039
    }
1040
1041
1042
    /**
1043
     * Returns all available languages. These (and only these) can be used as parameter
1044
     * for setLanguge(String) method.
1045
     */
1046
    public String[] getAvailableLanguages() {
1047 2
        Object[] keys = availableLanguages.keySet().toArray();
1048
        String[] str = new String[keys.length];
1049 5
        for (int i = 0; i < keys.length; i++) {
1050
            str[i] = (String) keys[i];
1051
        }
1052 1
        return str;
1053
    }
1054
1055
1056
// Private methods. ---------------------------------------------------
1057
1058
1059
    /**
1060
     * Makes sure that currentSettings contains at least the default values for each
1061
     * key, if they cannot be obtained from settingsFile.
1062
     */
1063
    private void getCurrentSettings() throws IOException {
1064 5
        String defaultStdinFile = System.getProperty("user.dir") + "/stdin";
1065
        String defaultStdinPath = "absolute";
1066 5
        String defaultStdoutFile = System.getProperty("user.dir") + "/stdout";
1067
        String defaultStdoutPath = "absolute";
1068
        String defaultStdoutUse = "overwrite";
1069 2
        int defaultMemorySize = Control.DEFAULT_MEMORY_SIZE;
1070
        String defaultUILanguage = "English";
1071 2
        int defaultRunningMode = 0;
1072 2
        int defaultCompilingMode = 0;
1073 2
        boolean useDefaultSettings = false;
1074
        InputStream defaultSettingsStream = null;
1075
1076
        //URI fileURI;
1077
1078
        //try {
1079
        //  fileURI = new URI( getClass().getClassLoader().getResource(programPath).toString() + "etc/settings.cfg" );
1080
        //  settingsFile = new File(fileURI);
1081 3
        settingsFile = new File(System.getProperty("user.home"), "titokone.cfg");
1082
        //}
1083
        //catch (Exception e) {
1084
        //  System.out.println("Main path not found!...exiting");
1085
        //  System.exit(0);
1086
        //}
1087
1088
        // First, check if the user has a settings file. Otherwise we'll use the default
1089
        // file in <the class directory>etc/settings.cfg.
1090 2
        if (settingsFile.exists() == false) {
1091 2
            useDefaultSettings = true;
1092
            // (Creating a new settings file will not be necessary; the settings saving
1093
            // will take care of it. In fact, we do not want to uselessly create an empty
1094
            // settings file to confuse us on the next run. But we will want to check
1095
            // if we are allowed to.)
1096 1
            settingsFile.createNewFile(); // May throw an IOException.
1097 1
            settingsFile.delete(); // May throw an IOException, hardly if createNewFile didn't.
1098
        }
1099
1100
        String settingsFileContents = "";
1101
        try {
1102 1
            if (!useDefaultSettings) { // Use user's own settings file.
1103 1
                settingsFileContents = control.loadSettingsFileContents(settingsFile);
1104
                logger.info("Used user's own settings file.");
1105
            } else { // Use default settings file.
1106 2
                ClassLoader loader = getClass().getClassLoader();
1107 5
                defaultSettingsStream = loader.getResourceAsStream(programPath +
1108
                        "etc/settings.cfg");
1109 1
                settingsFileContents = control.loadSettingsStreamContents(defaultSettingsStream);
1110
                logger.info("Used default settings file.");
1111
            }
1112
        } catch (IOException e) {
1113
            logger.warning("Error while reading " +
1114
                    (useDefaultSettings ? "default" : "user's") +
1115
                    " settings file.");
1116
            throw e;
1117
        }
1118
1119
        try {
1120 2
            currentSettings = new Settings(settingsFileContents);
1121
        } catch (Exception e) {
1122
            logger.warning("Parse error in settings file, using hard-coded defaults.");
1123 2
            currentSettings = new Settings(); // Create an empty settings instance.
1124
        }
1125
1126
1127
        try {
1128 2
            if (currentSettings.getStrValue(Settings.STDIN_PATH) == null) {
1129 1
                currentSettings.setValue(Settings.STDIN_PATH, defaultStdinPath);
1130
            }
1131
        } catch (Exception e) {
1132 1
            currentSettings.setValue(Settings.STDIN_PATH, defaultStdinPath);
1133
        }
1134
1135
        try {
1136 2
            if (currentSettings.getStrValue(Settings.DEFAULT_STDIN) == null) {
1137 1
                currentSettings.setValue(Settings.DEFAULT_STDIN, defaultStdinFile);
1138
            }
1139
        } catch (Exception e) {
1140 1
            currentSettings.setValue(Settings.DEFAULT_STDIN, defaultStdinFile);
1141
        }
1142
1143
        try {
1144 2
            if (currentSettings.getStrValue(Settings.STDOUT_PATH) == null) {
1145 1
                currentSettings.setValue(Settings.STDOUT_PATH, defaultStdoutPath);
1146
            }
1147
        } catch (Exception e) {
1148 1
            currentSettings.setValue(Settings.STDOUT_PATH, defaultStdoutPath);
1149
        }
1150
1151
        try {
1152 2
            if (currentSettings.getStrValue(Settings.DEFAULT_STDOUT) == null) {
1153 1
                currentSettings.setValue(Settings.DEFAULT_STDOUT, defaultStdoutFile);
1154
            }
1155
        } catch (Exception e) {
1156 1
            currentSettings.setValue(Settings.DEFAULT_STDOUT, defaultStdoutFile);
1157
        }
1158
1159
        try {
1160 2
            if (currentSettings.getStrValue(Settings.STDOUT_USE) == null) {
1161 1
                currentSettings.setValue(Settings.STDOUT_USE, defaultStdoutUse);
1162
            }
1163
        } catch (Exception e) {
1164 1
            currentSettings.setValue(Settings.STDOUT_USE, defaultStdoutUse);
1165
        }
1166
1167
        try {
1168 1
            currentSettings.getIntValue(Settings.MEMORY_SIZE);
1169
        } catch (Exception e) {
1170 1
            currentSettings.setValue(Settings.MEMORY_SIZE, defaultMemorySize);
1171
        }
1172
1173
        try {
1174 2
            if (currentSettings.getStrValue(Settings.UI_LANGUAGE) == null) {
1175 1
                currentSettings.setValue(Settings.UI_LANGUAGE, defaultUILanguage);
1176
            }
1177
        } catch (Exception e) {
1178 1
            currentSettings.setValue(Settings.UI_LANGUAGE, defaultUILanguage);
1179
        }
1180
1181
        try {
1182 1
            currentSettings.getIntValue(Settings.RUN_MODE);
1183
        } catch (Exception e) {
1184 1
            currentSettings.setValue(Settings.RUN_MODE, defaultRunningMode);
1185
        }
1186
1187
        try {
1188 1
            currentSettings.getIntValue(Settings.COMPILE_MODE);
1189
        } catch (Exception e) {
1190 1
            currentSettings.setValue(Settings.COMPILE_MODE, defaultCompilingMode);
1191
        }
1192
    }
1193
1194
1195
    /**
1196
     * This just loads the opened b91-program into Titokone's memory without updating
1197
     * GUI anyway. However, GUI is told to show an error message, if the loaded program
1198
     * is too large and thus Titokone is out of memory.
1199
     *
1200
     * @return LoadInfo object, which contains information about the loading process.
1201
     */
1202
    private LoadInfo load() {
1203
1204
        LoadInfo loadinfo;
1205
        try {
1206 1
            loadinfo = control.load();
1207
        } catch (TTK91AddressOutOfBounds e) {
1208 3
            gui.showError(new Message("Titokone out of memory").toString());
1209 2
            return control.getPendingLoadInfo(); // This is null; load really failed.
1210
        } catch (TTK91NoStdInData e) {
1211 1
            File[] appDefs = control.getApplicationDefinitions();
1212 6
            String[] stdinFilePath = {getCurrentDefaultStdinFile().getPath()};
1213 3
            if (appDefs[Control.DEF_STDIN_POS] != null) {
1214 5
                stdinFilePath[0] = appDefs[Control.DEF_STDIN_POS].getPath();
1215
            }
1216
1217
            //gui.showError(new Message("Stdin file {0} is not in valid format or it doesn't exist", stdinFilePath).toString());
1218
            //gui.addComment(e.getMessage()); // The message is already translated.
1219 2
            return control.getPendingLoadInfo(); // This is != null; load succeeded.
1220
        }
1221
1222 1
        return loadinfo;
1223
1224
    }
1225
1226
1227
    /**
1228
     * Load the program into Titokone's memory and update's GUI to show the new memory contents
1229
     * and register values and such.
1230
     */
1231
    private void loadAndUpdateGUI() {
1232 1
        LoadInfo loadinfo = load();
1233
1234 1
        if (loadinfo != null) {
1235 2
            gui.updateStatusBar(loadinfo.getStatusMessage());
1236 4
            gui.updateReg(GUI.SP, loadinfo.getSP());
1237 4
            gui.updateReg(GUI.FP, loadinfo.getFP());
1238
1239 1
            String[][] symbolsAndValues = loadinfo.getSymbolTable();
1240 1
            gui.insertSymbolTable(symbolsAndValues);
1241
1242 1
            int instructionsBinary[] = loadinfo.getBinaryCommands();
1243 1
            String instructionsSymbolic[] = loadinfo.getSymbolicCommands();
1244
1245 1
            int dataBinary[] = loadinfo.getData(); // Full memory excepting code area.
1246
            // The symbolic data depends on two things: The Loader should add
1247
            // symbolic versions of the initial data area, and the RandomAccessMemory
1248
            // should add NOPs on 0 lines. The latter does not currently happen,
1249
            // but can be changed if it is deemed better.
1250
            String dataSymbolic[];
1251
            // Only show symbolic forms of the initial data area, not below it?
1252 1
            if (GUIBrain.ENABLE_DATA_AREA_MARKUP) {
1253 1
                dataSymbolic = loadinfo.getDataAreaSymbolic();
1254
            } else {
1255 1
                dataSymbolic = loadinfo.getDataSymbolic();
1256
            }
1257 1
            gui.insertToInstructionsTable(instructionsBinary, instructionsSymbolic);
1258 1
            gui.insertToDataTable(dataBinary, dataSymbolic);
1259
1260 2
            gui.addComment(loadinfo.getComments());
1261
1262 3
            currentState = B91_NOT_RUNNING;
1263 1
            setGUICommandsForCurrentState();
1264 3
            gui.setGUIView(3);
1265 2
            display.setMem(control.getPhysicalMemory());
1266
        }
1267
    }
1268
1269
1270
    /**
1271
     * Saves currentSettings to settingsFile.
1272
     */
1273
    private void saveSettings() {
1274
        try {
1275 2
            control.saveSettings(currentSettings.toString(), settingsFile);
1276
        } catch (IOException e) {
1277 5
            String[] name = {settingsFile.getName()};
1278 3
            gui.showError(new Message("{0} is inaccessible", name).toString());
1279
        }
1280
    }
1281
1282
1283
    /**
1284
     * This method returns the default stdout file, which is the one declared in currentSettings.
1285
     */
1286
    private File getCurrentDefaultStdoutFile() {
1287
1288 6
        File currentStdoutFile = new File(System.getProperty("user.dir") + DEFAULT_STDOUT_FILENAME);
1289
1290 1
        String filemode = currentSettings.getStrValue(Settings.STDOUT_PATH);
1291 1
        String path = currentSettings.getStrValue(Settings.DEFAULT_STDOUT);
1292
1293 3
        if (path != null && !path.equals("")) {
1294 2
            if (filemode.equals("absolute")) {
1295 1
                currentStdoutFile = new File(path);
1296 2
            } else if (filemode.equals("relative")) {
1297 6
                currentStdoutFile = new File(System.getProperty("user.dir") + path);
1298
            }
1299
        }
1300
1301 1
        return currentStdoutFile;
1302
    }
1303
1304
1305
    /**
1306
     * This method returns the default stdin file, which is the one declared in currentSettings.
1307
     */
1308
    private File getCurrentDefaultStdinFile() {
1309
1310 2
        File currentStdinFile = new File(System.getProperty("user.dir"), DEFAULT_STDIN_FILENAME);
1311
1312 1
        String filemode = currentSettings.getStrValue(Settings.STDIN_PATH);
1313 1
        String path = currentSettings.getStrValue(Settings.DEFAULT_STDIN);
1314
1315 3
        if (path != null && !path.equals("")) {
1316 2
            if (filemode.equals("absolute")) {
1317 1
                currentStdinFile = new File(path);
1318 2
            } else if (filemode.equals("relative")) {
1319 2
                currentStdinFile = new File(System.getProperty("user.dir"), path);
1320
            }
1321
        }
1322
1323 1
        return currentStdinFile;
1324
    }
1325
1326
1327
    /**
1328
     * This method determines the available languages. It reads them from
1329
     * a setup file languages.cfg, which contains lineseparator-delimited
1330
     * sets of language-name, language-id, (country), eg.
1331
     * "Finnish, fi", or "English (GB), en, GB".
1332
     */
1333
    private void findAvailableLanguages() {
1334
        InputStream fileStream = null;
1335
        //URI fileURI;
1336
        //File languageFile = null;
1337
1338
        //try {
1339
        //fileURI = new URI( getClass().getClassLoader().getResource(programPath).toString() + "etc/languages.cfg" );
1340
        //languageFile = new File(fileURI);
1341 2
        ClassLoader loader = getClass().getClassLoader();
1342 5
        fileStream = loader.getResourceAsStream(programPath + "etc/languages.cfg");
1343
        //}
1344
        //catch (Exception e) {
1345
        //  System.out.println("Main path not found!...exiting");
1346
        //  System.exit(0);
1347
        //}
1348
1349
        String languageName, language, country, variant;
1350
1351 1
        if (fileStream != null) {
1352
            String languageFileContents;
1353
            try {
1354 1
                languageFileContents = control.loadSettingsStreamContents(fileStream);
1355
            } catch (IOException e) {
1356
                logger.warning("IOException in language settings file.");
1357
                return;
1358
            }
1359
1360 1
            String[] languageFileRow = languageFileContents.split("\n|\r|\r\n");
1361
1362
            /* Split each row of language.cfg into separate strings and
1363
               tokenize these strings by a colon. If there are two or three
1364
               tokens on each row, then everything goes well. Otherwise
1365
               the language.cfg is not a proper language file for this program.
1366
            */
1367 5
            for (int i = 0; i < languageFileRow.length; i++) {
1368 1
                String[] token = languageFileRow[i].split("=");
1369 3
                if (token.length != 2) {
1370 1
                    System.out.println("Parse error in language file");
1371
                    return;
1372
                }
1373 3
                languageName = token[0].trim();
1374
1375 3
                token = token[1].split("\\.");
1376 3
                if (token.length == 1) {
1377 3
                    language = token[0].trim();
1378 2
                    availableLanguages.put(languageName, new Locale(language));
1379 3
                } else if (token.length == 2) {
1380 3
                    language = token[0].trim();
1381 3
                    country = token[1].trim();
1382 2
                    availableLanguages.put(languageName, new Locale(language, country));
1383 3
                } else if (token.length == 3) {
1384 3
                    language = token[0].trim();
1385 3
                    country = token[1].trim();
1386 3
                    variant = token[2].trim();
1387 2
                    availableLanguages.put(languageName, new Locale(language, country, variant));
1388
                } else {
1389 1
                    System.out.println("Parse error in language file");
1390
                }
1391
            }
1392
        }
1393
    }
1394
1395
1396
    public static String getExtension(File f) {
1397
        String ext = null;
1398 1
        String s = f.getName();
1399 3
        int i = s.lastIndexOf('.');
1400
1401 8
        if (i > 0 && i < s.length() - 1) {
1402 5
            ext = s.substring(i + 1).toLowerCase();
1403
        }
1404 1
        return ext;
1405
    }
1406
1407
1408
    /**
1409
     * Sets GUI to correspond the current state of program, which means that some
1410
     * buttons should be enables while others not.
1411
     */
1412
    private void setGUICommandsForCurrentState() {
1413
        switch (currentState) {
1414
            case NONE:
1415 3
                gui.disable(GUI.COMPILE_COMMAND);
1416 3
                gui.disable(GUI.RUN_COMMAND);
1417 3
                gui.disable(GUI.CONTINUE_COMMAND);
1418 3
                gui.disable(GUI.CONTINUE_WITHOUT_PAUSES_COMMAND);
1419 3
                gui.disable(GUI.STOP_COMMAND);
1420
                break;
1421
1422
            case B91_NOT_RUNNING:
1423 3
                gui.disable(GUI.COMPILE_COMMAND);
1424 3
                gui.enable(GUI.RUN_COMMAND);
1425 3
                gui.disable(GUI.CONTINUE_COMMAND);
1426 3
                gui.disable(GUI.CONTINUE_WITHOUT_PAUSES_COMMAND);
1427 3
                gui.disable(GUI.STOP_COMMAND);
1428
                break;
1429
1430
            case B91_RUNNING:
1431 3
                gui.disable(GUI.COMPILE_COMMAND);
1432 3
                gui.disable(GUI.RUN_COMMAND);
1433 3
                gui.disable(GUI.CONTINUE_COMMAND);
1434 3
                gui.disable(GUI.CONTINUE_WITHOUT_PAUSES_COMMAND);
1435 3
                gui.enable(GUI.STOP_COMMAND);
1436
                break;
1437
1438
            case B91_PAUSED:
1439 3
                gui.disable(GUI.COMPILE_COMMAND);
1440 3
                gui.disable(GUI.RUN_COMMAND);
1441 3
                gui.enable(GUI.CONTINUE_COMMAND);
1442 3
                gui.enable(GUI.CONTINUE_WITHOUT_PAUSES_COMMAND);
1443 3
                gui.enable(GUI.STOP_COMMAND);
1444
                break;
1445
1446
            case B91_WAIT_FOR_KBD:
1447 3
                gui.disable(GUI.COMPILE_COMMAND);
1448 3
                gui.disable(GUI.RUN_COMMAND);
1449 3
                gui.disable(GUI.CONTINUE_COMMAND);
1450 3
                gui.disable(GUI.CONTINUE_WITHOUT_PAUSES_COMMAND);
1451 3
                gui.enable(GUI.STOP_COMMAND);
1452
                break;
1453
1454
            case K91_NOT_COMPILING:
1455 3
                gui.enable(GUI.COMPILE_COMMAND);
1456 3
                gui.disable(GUI.RUN_COMMAND);
1457 3
                gui.disable(GUI.CONTINUE_COMMAND);
1458 3
                gui.disable(GUI.CONTINUE_WITHOUT_PAUSES_COMMAND);
1459 3
                gui.disable(GUI.STOP_COMMAND);
1460 3
                gui.enable(GUI.CODE_TABLE_EDITING);
1461
                break;
1462
1463
            case K91_COMPILING:
1464 3
                gui.disable(GUI.COMPILE_COMMAND);
1465 3
                gui.disable(GUI.RUN_COMMAND);
1466 3
                gui.disable(GUI.CONTINUE_COMMAND);
1467 3
                gui.disable(GUI.CONTINUE_WITHOUT_PAUSES_COMMAND);
1468 3
                gui.enable(GUI.STOP_COMMAND);
1469 3
                gui.disable(GUI.CODE_TABLE_EDITING);
1470
                break;
1471
1472
            case K91_PAUSED:
1473 3
                gui.disable(GUI.COMPILE_COMMAND);
1474 3
                gui.disable(GUI.RUN_COMMAND);
1475 3
                gui.enable(GUI.CONTINUE_COMMAND);
1476 3
                gui.enable(GUI.CONTINUE_WITHOUT_PAUSES_COMMAND);
1477 3
                gui.enable(GUI.STOP_COMMAND);
1478 3
                gui.disable(GUI.CODE_TABLE_EDITING);
1479
                break;
1480
1481
            case INTERRUPTED_WITH_PAUSE:
1482 3
                gui.disable(GUI.COMPILE_COMMAND);
1483 3
                gui.disable(GUI.RUN_COMMAND);
1484 3
                gui.enable(GUI.CONTINUE_COMMAND);
1485 3
                gui.enable(GUI.CONTINUE_WITHOUT_PAUSES_COMMAND);
1486 3
                gui.disable(GUI.STOP_COMMAND);
1487
                break;
1488
1489
        }
1490
    }
1491
}

Mutations

35

Removed assignment to member variable SLOWDOWN : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

64

Removed assignment to member variable programPath : NO_COVERAGE

132

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

141

Removed assignment to member variable gui : NO_COVERAGE

144

removed call to java/io/File::<init> : NO_COVERAGE

removed call to java/lang/System::getProperty : NO_COVERAGE

145

removed call to java/io/File::<init> : NO_COVERAGE

removed call to java/lang/System::getProperty : NO_COVERAGE

148

removed call to java/io/File::exists : NO_COVERAGE

negated conditional : NO_COVERAGE

149

removed call to java/io/File::createNewFile : NO_COVERAGE

150

removed call to java/io/File::delete : NO_COVERAGE

155

removed call to fi/helsinki/cs/titokone/Control::<init> : NO_COVERAGE

Removed assignment to member variable control : NO_COVERAGE

157

Removed assignment to member variable animator : NO_COVERAGE

158

Removed assignment to member variable display : NO_COVERAGE

161

removed call to fi/helsinki/cs/titokone/GUIBrain::getCurrentSettings : NO_COVERAGE

163

removed call to java/io/PrintStream::println : NO_COVERAGE

164

Substituted 0 with 1 : NO_COVERAGE

removed call to java/lang/System::exit : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

168

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

169

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

171

removed call to java/lang/String::equals : NO_COVERAGE

negated conditional : NO_COVERAGE

negated conditional : NO_COVERAGE

172

removed call to java/lang/String::equals : NO_COVERAGE

negated conditional : NO_COVERAGE

173

removed call to java/io/File::<init> : NO_COVERAGE

174

negated conditional : NO_COVERAGE

removed call to java/lang/String::equals : NO_COVERAGE

175

removed call to java/lang/System::getProperty : NO_COVERAGE

removed call to java/io/File::<init> : NO_COVERAGE

179

removed call to fi/helsinki/cs/titokone/Control::setDefaultStdIn : NO_COVERAGE

185

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

186

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

188

negated conditional : NO_COVERAGE

negated conditional : NO_COVERAGE

removed call to java/lang/String::equals : NO_COVERAGE

189

negated conditional : NO_COVERAGE

removed call to java/lang/String::equals : NO_COVERAGE

190

removed call to java/io/File::<init> : NO_COVERAGE

191

removed call to java/lang/String::equals : NO_COVERAGE

negated conditional : NO_COVERAGE

192

removed call to java/lang/System::getProperty : NO_COVERAGE

removed call to java/io/File::<init> : NO_COVERAGE

196

removed call to fi/helsinki/cs/titokone/Control::setDefaultStdOut : NO_COVERAGE

201

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

202

negated conditional : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

203

Substituted 2 with 3 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

204

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

negated conditional : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

206

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

207

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

negated conditional : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

208

Replaced bitwise AND with OR : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

210

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

211

negated conditional : NO_COVERAGE

Substituted 15 with 16 : NO_COVERAGE

Replaced constant value of 15 with 16 : NO_COVERAGE

213

removed call to fi/helsinki/cs/titokone/Control::changeMemorySize : NO_COVERAGE

215

Substituted 15 with 16 : NO_COVERAGE

Replaced constant value of 15 with 16 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Control::changeMemorySize : NO_COVERAGE

220

Removed assignment to member variable availableLanguages : NO_COVERAGE

removed call to java/util/Hashtable::<init> : NO_COVERAGE

221

removed call to fi/helsinki/cs/titokone/GUIBrain::findAvailableLanguages : NO_COVERAGE

223

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

225

removed call to java/util/Hashtable::containsKey : NO_COVERAGE

negated conditional : NO_COVERAGE

226

removed call to java/util/Hashtable::get : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Translator::setLocale : NO_COVERAGE

231

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Removed assignment to member variable noPauses : NO_COVERAGE

232

Substituted 0 with 1 : NO_COVERAGE

Removed assignment to member variable interruptSent : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

237

Substituted 0 with 1 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

248

removed call to fi/helsinki/cs/titokone/GUIBrain::interruptCurrentTasks : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

250

removed call to fi/helsinki/cs/titokone/GUIBrain::getExtension : NO_COVERAGE

252

removed call to fi/helsinki/cs/titokone/GUI::resetAll : NO_COVERAGE

254

negated conditional : NO_COVERAGE

removed call to java/lang/String::equals : NO_COVERAGE

256

removed call to fi/helsinki/cs/titokone/Control::openBinary : NO_COVERAGE

258

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

removed call to java/lang/Exception::getMessage : NO_COVERAGE

262

removed call to fi/helsinki/cs/titokone/GUIBrain::loadAndUpdateGUI : NO_COVERAGE

264

negated conditional : NO_COVERAGE

removed call to java/lang/String::equals : NO_COVERAGE

265

removed call to fi/helsinki/cs/titokone/GUI::resetAll : NO_COVERAGE

270

removed call to fi/helsinki/cs/titokone/Control::openSource : NO_COVERAGE

272

removed call to java/io/IOException::getMessage : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

276

Removed assignment to member variable currentlyOpenedFile : NO_COVERAGE

278

removed call to java/lang/String::split : NO_COVERAGE

279

removed call to fi/helsinki/cs/titokone/GUI::insertToCodeTable : NO_COVERAGE

280

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

282

removed call to fi/helsinki/cs/titokone/GUI::setGUIView : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

284

Substituted 5 with -1 : NO_COVERAGE

Substituted 5 with 6 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

285

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

289

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

299

Substituted 1 with 0 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

302

removed call to java/lang/Integer::parseInt : NO_COVERAGE

304

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::changeTextInEnterNumberLabel : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

305

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

306

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

replaced return of integer sized value with (x == 0 ? 1 : 0) : NO_COVERAGE

309

negated conditional : NO_COVERAGE

Substituted 2147483647 with -2147483648 : NO_COVERAGE

Substituted -2147483648 with -2147483647 : NO_COVERAGE

Replaced constant value of 2147483647 with -2147483648 : NO_COVERAGE

Replaced constant value of -2147483648 with -2147483647 : NO_COVERAGE

changed conditional boundary : NO_COVERAGE

negated conditional : NO_COVERAGE

changed conditional boundary : NO_COVERAGE

310

removed call to fi/helsinki/cs/titokone/GUI::changeTextInEnterNumberLabel : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

311

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

312

replaced return of integer sized value with (x == 0 ? 1 : 0) : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

315

removed call to fi/helsinki/cs/titokone/GUI::changeTextInEnterNumberLabel : NO_COVERAGE

316

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

318

removed call to fi/helsinki/cs/titokone/Control::keyboardInput : NO_COVERAGE

319

Substituted 1 with 0 : NO_COVERAGE

replaced return of integer sized value with (x == 0 ? 1 : 0) : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

329

Removed assignment to member variable threadRunning : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

331

Removed assignment to member variable interruptSent : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

332

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Removed assignment to member variable noPauses : NO_COVERAGE

337

removed call to fi/helsinki/cs/titokone/GUIBrain::getCurrentDefaultStdoutFile : NO_COVERAGE

338

removed call to java/lang/String::equals : NO_COVERAGE

negated conditional : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

340

removed call to java/io/File::exists : NO_COVERAGE

negated conditional : NO_COVERAGE

341

removed call to java/io/File::delete : NO_COVERAGE

343

removed call to java/io/File::createNewFile : NO_COVERAGE

345

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to java/io/File::getName : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

346

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

353

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

355

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

356

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

358

removed call to fi/helsinki/cs/titokone/Control::getCpu : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Animator::init : NO_COVERAGE

360

negated conditional : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

361

removed call to fi/helsinki/cs/titokone/GUI::showAnimator : NO_COVERAGE

365

Substituted 2 with 3 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

366

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

368

Replaced constant value of 204 with 205 : NO_COVERAGE

Substituted 204 with 205 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Control::getCpu : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Processor::getValueOf : NO_COVERAGE

369

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::selectLine : NO_COVERAGE

371

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

374

removed call to fi/helsinki/cs/titokone/Control::runLine : NO_COVERAGE

375

negated conditional : NO_COVERAGE

383

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

384

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

385

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

386

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

387

Substituted 5 with 6 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

Substituted 5 with -1 : NO_COVERAGE

391

removed call to fi/helsinki/cs/titokone/GUIBrain::waitForContinueTask : NO_COVERAGE

392

Substituted 5 with 6 : NO_COVERAGE

Substituted 5 with -1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

396

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

397

removed call to fi/helsinki/cs/ttk91/TTK91RuntimeException::getMessage : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

398

Replaced constant value of 11 with 12 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

Substituted 11 with 12 : NO_COVERAGE

399

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

403

Replaced bitwise AND with OR : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

404

negated conditional : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/RunInfo::getComments : NO_COVERAGE

405

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/StringBuilder::<init> : NO_COVERAGE

removed call to java/lang/StringBuilder::toString : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/RunInfo::getLineNumber : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/RunInfo::getComments : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

409

removed call to fi/helsinki/cs/titokone/Animator::stopAnimation : NO_COVERAGE

410

removed call to fi/helsinki/cs/titokone/Animator::animate : NO_COVERAGE

412

removed call to fi/helsinki/cs/titokone/RunInfo::getComments : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

416

removed call to fi/helsinki/cs/titokone/RunInfo::whatOUT : NO_COVERAGE

negated conditional : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/RunInfo::isExternalOp : NO_COVERAGE

negated conditional : NO_COVERAGE

420

removed call to fi/helsinki/cs/titokone/RunInfo::whatOUT : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

421

removed call to fi/helsinki/cs/titokone/RunInfo::whatOUT : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::addOutputData : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

425

removed call to fi/helsinki/cs/titokone/RunInfo::getRegisters : NO_COVERAGE

426

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

427

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

428

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

429

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

430

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

431

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Substituted 5 with 6 : NO_COVERAGE

Substituted 5 with -1 : NO_COVERAGE

Substituted 5 with 6 : NO_COVERAGE

Substituted 5 with -1 : NO_COVERAGE

432

Replaced constant value of 6 with 7 : NO_COVERAGE

Replaced constant value of 6 with 7 : NO_COVERAGE

Substituted 6 with 7 : NO_COVERAGE

Substituted 6 with 7 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

433

Substituted 7 with 8 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Replaced constant value of 7 with 8 : NO_COVERAGE

Replaced constant value of 7 with 8 : NO_COVERAGE

Substituted 7 with 8 : NO_COVERAGE

434

removed call to fi/helsinki/cs/titokone/RunInfo::getNewPC : NO_COVERAGE

Substituted 8 with 9 : NO_COVERAGE

Replaced constant value of 8 with 9 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

436

removed call to fi/helsinki/cs/titokone/RunInfo::getChangedMemoryLines : NO_COVERAGE

437

removed call to java/util/LinkedList::iterator : NO_COVERAGE

439

removed call to java/util/Iterator::hasNext : NO_COVERAGE

negated conditional : NO_COVERAGE

440

removed call to java/util/Iterator::next : NO_COVERAGE

441

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to java/lang/Integer::intValue : NO_COVERAGE

442

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

443

removed call to fi/helsinki/cs/titokone/MemoryLine::getBinary : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/MemoryLine::getSymbolic : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateInstructionsAndDataTableLine : NO_COVERAGE

446

removed call to fi/helsinki/cs/titokone/GUI::repaint : NO_COVERAGE

448

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

negated conditional : NO_COVERAGE

negated conditional : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

449

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

450

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

451

removed call to fi/helsinki/cs/titokone/GUIBrain::waitForContinueTask : NO_COVERAGE

455

removed call to java/lang/Object::wait : NO_COVERAGE

Substituted 1 with 2 : NO_COVERAGE

Substituted 1 with 0.0 : NO_COVERAGE

457

removed call to java/io/PrintStream::println : NO_COVERAGE

462

negated conditional : NO_COVERAGE

464

Substituted 11 with 12 : NO_COVERAGE

negated conditional : NO_COVERAGE

Replaced constant value of 11 with 12 : NO_COVERAGE

465

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

466

removed call to fi/helsinki/cs/titokone/GUIBrain::waitForContinueTask : NO_COVERAGE

469

removed call to fi/helsinki/cs/titokone/GUIBrain::load : NO_COVERAGE

470

Substituted 1 with 0 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

471

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

473

removed call to fi/helsinki/cs/titokone/GUI::unselectAll : NO_COVERAGE

475

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

476

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

477

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

479

removed call to fi/helsinki/cs/titokone/GUIBrain::continueTask : NO_COVERAGE

481

Substituted 0 with 1 : NO_COVERAGE

Removed assignment to member variable threadRunning : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

482

removed call to fi/helsinki/cs/titokone/GUIBrain::continueTask : NO_COVERAGE

492

removed call to fi/helsinki/cs/titokone/Control::modifySource : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::getCodeTableContents : NO_COVERAGE

494

removed call to java/io/IOException::getMessage : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

505

Substituted 1 with 0 : NO_COVERAGE

Removed assignment to member variable threadRunning : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

507

Substituted 0 with 1 : NO_COVERAGE

Removed assignment to member variable interruptSent : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

508

Removed assignment to member variable noPauses : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

510

Substituted 6 with 7 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

Replaced constant value of 6 with 7 : NO_COVERAGE

511

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

522

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

530

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

534

Replaced constant value of 6 with 7 : NO_COVERAGE

Substituted 6 with 7 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

535

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

538

removed call to fi/helsinki/cs/titokone/Control::compileLine : NO_COVERAGE

544

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

545

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

550

negated conditional : NO_COVERAGE

551

Replaced integer addition with subtraction : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/CompileInfo::getLineNumber : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

552

removed call to fi/helsinki/cs/titokone/CompileInfo::getPhase : NO_COVERAGE

555

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/StringBuilder::toString : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/StringBuilder::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to fi/helsinki/cs/ttk91/TTK91CompileException::getMessage : NO_COVERAGE

556

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

558

negated conditional : NO_COVERAGE

559

removed call to fi/helsinki/cs/titokone/GUI::selectLine : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

560

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

negated conditional : NO_COVERAGE

561

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::selectLine : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

564

Substituted 7 with 8 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

Replaced constant value of 7 with 8 : NO_COVERAGE

565

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

566

removed call to fi/helsinki/cs/titokone/GUIBrain::waitForContinueTask : NO_COVERAGE

571

negated conditional : NO_COVERAGE

572

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

575

removed call to fi/helsinki/cs/titokone/CompileInfo::getComments : NO_COVERAGE

576

negated conditional : NO_COVERAGE

580

removed call to java/lang/String::equals : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

negated conditional : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

581

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/CompileInfo::getLineNumber : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/StringBuilder::toString : NO_COVERAGE

removed call to java/lang/StringBuilder::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

584

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

586

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

587

removed call to fi/helsinki/cs/titokone/CompileInfo::getPhase : NO_COVERAGE

589

negated conditional : NO_COVERAGE

590

negated conditional : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/CompileInfo::getSymbolFound : NO_COVERAGE

591

removed call to fi/helsinki/cs/titokone/CompileInfo::getSymbolName : NO_COVERAGE

593

removed call to fi/helsinki/cs/titokone/CompileInfo::getSymbolDefined : NO_COVERAGE

negated conditional : NO_COVERAGE

594

removed call to fi/helsinki/cs/titokone/CompileInfo::getSymbolValue : NO_COVERAGE

removed call to java/lang/Integer::<init> : NO_COVERAGE

596

removed call to fi/helsinki/cs/titokone/GUI::updateRowInSymbolTable : NO_COVERAGE

598

negated conditional : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/CompileInfo::getLabelFound : NO_COVERAGE

599

removed call to fi/helsinki/cs/titokone/CompileInfo::getLabelName : NO_COVERAGE

600

removed call to java/lang/Integer::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/CompileInfo::getLabelValue : NO_COVERAGE

601

removed call to fi/helsinki/cs/titokone/GUI::updateRowInSymbolTable : NO_COVERAGE

604

removed call to fi/helsinki/cs/titokone/GUI::selectLine : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/CompileInfo::getLineNumber : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

605

Substituted 1 with 0 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

606

removed call to fi/helsinki/cs/titokone/CompileInfo::getSymbolTable : NO_COVERAGE

607

negated conditional : NO_COVERAGE

608

Substituted 0 with 1 : NO_COVERAGE

negated conditional : NO_COVERAGE

Changed increment from 1 to -1 : NO_COVERAGE

changed conditional boundary : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

609

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

612

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to java/lang/Integer::<init> : NO_COVERAGE

615

removed call to fi/helsinki/cs/titokone/GUI::updateRowInSymbolTable : NO_COVERAGE

619

removed call to fi/helsinki/cs/titokone/CompileInfo::getInstructions : NO_COVERAGE

620

removed call to fi/helsinki/cs/titokone/CompileInfo::getData : NO_COVERAGE

621

removed call to fi/helsinki/cs/titokone/GUI::insertToInstructionsTable : NO_COVERAGE

622

removed call to fi/helsinki/cs/titokone/GUI::insertToDataTable : NO_COVERAGE

623

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setGUIView : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

625

negated conditional : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

626

removed call to fi/helsinki/cs/titokone/CompileInfo::getLineNumber : NO_COVERAGE

627

removed call to fi/helsinki/cs/titokone/CompileInfo::getLineBinary : NO_COVERAGE

628

removed call to fi/helsinki/cs/titokone/GUI::updateInstructionsAndDataTableLine : NO_COVERAGE

629

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::selectLine : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/CompileInfo::getLineNumber : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

632

removed call to fi/helsinki/cs/titokone/GUI::repaint : NO_COVERAGE

634

negated conditional : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

removed call to java/lang/String::equals : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

negated conditional : NO_COVERAGE

negated conditional : NO_COVERAGE

635

Removed assignment to member variable currentState : NO_COVERAGE

Replaced constant value of 7 with 8 : NO_COVERAGE

Substituted 7 with 8 : NO_COVERAGE

636

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

637

removed call to fi/helsinki/cs/titokone/GUIBrain::waitForContinueTask : NO_COVERAGE

640

removed call to java/lang/Object::wait : NO_COVERAGE

Substituted 1 with 2 : NO_COVERAGE

Substituted 1 with 0.0 : NO_COVERAGE

642

removed call to java/io/PrintStream::println : NO_COVERAGE

648

negated conditional : NO_COVERAGE

650

negated conditional : NO_COVERAGE

Substituted 11 with 12 : NO_COVERAGE

Replaced constant value of 11 with 12 : NO_COVERAGE

651

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

652

removed call to fi/helsinki/cs/titokone/GUIBrain::waitForContinueTask : NO_COVERAGE

655

Substituted 1 with 0 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

657

removed call to fi/helsinki/cs/titokone/Control::saveBinary : NO_COVERAGE

658

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to java/io/PrintStream::println : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

660

removed call to java/io/PrintStream::println : NO_COVERAGE

662

removed call to fi/helsinki/cs/titokone/GUI::resetAll : NO_COVERAGE

663

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

664

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

665

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

666

removed call to fi/helsinki/cs/titokone/GUIBrain::loadAndUpdateGUI : NO_COVERAGE

670

removed call to fi/helsinki/cs/titokone/Control::openSource : NO_COVERAGE

672

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

removed call to java/io/IOException::getMessage : NO_COVERAGE

673

Substituted 0 with 1 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

674

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

677

Substituted 5 with -1 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

Substituted 5 with 6 : NO_COVERAGE

678

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

679

Substituted 2 with 3 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setGUIView : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

680

removed call to fi/helsinki/cs/titokone/GUI::resetAll : NO_COVERAGE

681

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

682

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

683

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

684

removed call to fi/helsinki/cs/titokone/GUIBrain::continueTask : NO_COVERAGE

686

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Removed assignment to member variable threadRunning : NO_COVERAGE

687

removed call to fi/helsinki/cs/titokone/GUIBrain::continueTask : NO_COVERAGE

695

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUIBrain::interruptCurrentTasks : NO_COVERAGE

701

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

702

removed call to fi/helsinki/cs/titokone/GUIBrain::waitForContinueTask : NO_COVERAGE

705

removed call to fi/helsinki/cs/titokone/Control::eraseMemory : NO_COVERAGE

707

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

708

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

709

Substituted 2 with 3 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

710

Substituted 3 with 4 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

711

Substituted 0 with 1 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

712

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Substituted 5 with -1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 5 with 6 : NO_COVERAGE

713

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 6 with 7 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Replaced constant value of 6 with 7 : NO_COVERAGE

714

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Replaced constant value of 7 with 8 : NO_COVERAGE

Substituted 7 with 8 : NO_COVERAGE

715

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 8 with 9 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Replaced constant value of 8 with 9 : NO_COVERAGE

716

removed call to fi/helsinki/cs/titokone/GUI::resetAll : NO_COVERAGE

718

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

720

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setGUIView : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

721

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

722

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

723

removed call to fi/helsinki/cs/titokone/Control::getPhysicalMemory : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Display::setMem : NO_COVERAGE

743

removed call to java/util/Hashtable::containsKey : NO_COVERAGE

negated conditional : NO_COVERAGE

744

removed call to fi/helsinki/cs/titokone/Translator::setLocale : NO_COVERAGE

removed call to java/util/Hashtable::get : NO_COVERAGE

745

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

746

removed call to fi/helsinki/cs/titokone/GUIBrain::saveSettings : NO_COVERAGE

747

removed call to fi/helsinki/cs/titokone/GUI::updateAllTexts : NO_COVERAGE

761

removed call to java/io/File::exists : NO_COVERAGE

negated conditional : NO_COVERAGE

763

removed call to fi/helsinki/cs/titokone/Control::loadLanguageFile : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Translator::setLocale : NO_COVERAGE

765

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

766

removed call to java/io/PrintStream::println : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/ResourceLoadFailedException::getMessage : NO_COVERAGE

771

removed call to fi/helsinki/cs/titokone/GUI::updateAllTexts : NO_COVERAGE

783

removed call to fi/helsinki/cs/titokone/Control::setDefaultStdIn : NO_COVERAGE

785

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

removed call to java/lang/Exception::getMessage : NO_COVERAGE

788

removed call to java/io/File::getPath : NO_COVERAGE

789

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

790

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

791

removed call to fi/helsinki/cs/titokone/GUIBrain::saveSettings : NO_COVERAGE

793

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

803

removed call to java/io/File::getPath : NO_COVERAGE

805

Substituted 1 with 0 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

806

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

808

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

811

removed call to fi/helsinki/cs/titokone/Control::setDefaultStdOut : NO_COVERAGE

813

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

removed call to java/lang/Exception::getMessage : NO_COVERAGE

816

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

817

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

818

removed call to fi/helsinki/cs/titokone/GUIBrain::saveSettings : NO_COVERAGE

820

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

829

removed call to fi/helsinki/cs/titokone/Control::changeMemorySize : NO_COVERAGE

833

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

834

removed call to fi/helsinki/cs/titokone/GUIBrain::saveSettings : NO_COVERAGE

835

removed call to fi/helsinki/cs/titokone/GUI::setGUIView : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

836

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

837

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

846

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

847

Substituted 2 with 3 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

848

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

negated conditional : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

849

Substituted 1 with 0 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

853

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

854

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

859

Replaced bitwise AND with OR : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

negated conditional : NO_COVERAGE

861

Replaced bitwise AND with OR : NO_COVERAGE

negated conditional : NO_COVERAGE

862

Replaced integer subtraction with addition : NO_COVERAGE

864

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

negated conditional : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

865

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

867

Replaced bitwise AND with OR : NO_COVERAGE

negated conditional : NO_COVERAGE

868

Replaced integer addition with subtraction : NO_COVERAGE

870

Replaced bitwise AND with OR : NO_COVERAGE

negated conditional : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

871

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

875

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

876

removed call to fi/helsinki/cs/titokone/GUIBrain::saveSettings : NO_COVERAGE

880

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

883

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

886

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

887

Substituted 4 with 5 : NO_COVERAGE

negated conditional : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

negated conditional : NO_COVERAGE

890

removed call to fi/helsinki/cs/titokone/GUI::showAnimator : NO_COVERAGE

892

removed call to fi/helsinki/cs/titokone/GUI::hideAnimator : NO_COVERAGE

899

negated conditional : NO_COVERAGE

900

Substituted 4 with 5 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUIBrain::menuSetRunningOption : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

902

negated conditional : NO_COVERAGE

903

removed call to fi/helsinki/cs/titokone/GUIBrain::menuSetRunningOption : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

914

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

915

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

916

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

924

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

926

Substituted 0 with 1 : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

negated conditional : NO_COVERAGE

928

Replaced bitwise AND with OR : NO_COVERAGE

negated conditional : NO_COVERAGE

929

Replaced integer subtraction with addition : NO_COVERAGE

930

negated conditional : NO_COVERAGE

Replaced bitwise AND with OR : NO_COVERAGE

931

Replaced integer addition with subtraction : NO_COVERAGE

934

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

935

removed call to fi/helsinki/cs/titokone/GUIBrain::saveSettings : NO_COVERAGE

939

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

942

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setSelected : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

966

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

967

removed call to fi/helsinki/cs/titokone/GUIBrain::interruptCurrentTasks : NO_COVERAGE

984

negated conditional : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

985

Replaced constant value of 10 with 11 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

Substituted 10 with 11 : NO_COVERAGE

987

Replaced constant value of 11 with 12 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

Substituted 11 with 12 : NO_COVERAGE

990

Substituted 1 with 0 : NO_COVERAGE

Removed assignment to member variable interruptSent : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

992

removed call to java/lang/Object::notifyAll : NO_COVERAGE

1003

removed call to java/lang/Object::notify : NO_COVERAGE

1015

Substituted 1 with 0 : NO_COVERAGE

Removed assignment to member variable noPauses : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1017

removed call to java/lang/Object::notify : NO_COVERAGE

1033

removed call to java/lang/Object::wait : NO_COVERAGE

1035

removed call to java/io/PrintStream::println : NO_COVERAGE

1047

removed call to java/util/Hashtable::keySet : NO_COVERAGE

removed call to java/util/Set::toArray : NO_COVERAGE

1049

Changed increment from 1 to -1 : NO_COVERAGE

changed conditional boundary : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

negated conditional : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1052

mutated return of Object value for fi/helsinki/cs/titokone/GUIBrain::getAvailableLanguages to ( if (x != null) null else throw new RuntimeException ) : NO_COVERAGE

1064

removed call to java/lang/StringBuilder::<init> : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/StringBuilder::toString : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/System::getProperty : NO_COVERAGE

1066

removed call to java/lang/StringBuilder::toString : NO_COVERAGE

removed call to java/lang/System::getProperty : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/StringBuilder::<init> : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

1069

Substituted 15 with 16 : NO_COVERAGE

Replaced constant value of 15 with 16 : NO_COVERAGE

1071

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1072

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1073

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1081

removed call to java/io/File::<init> : NO_COVERAGE

removed call to java/lang/System::getProperty : NO_COVERAGE

Removed assignment to member variable settingsFile : NO_COVERAGE

1090

removed call to java/io/File::exists : NO_COVERAGE

negated conditional : NO_COVERAGE

1091

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1096

removed call to java/io/File::createNewFile : NO_COVERAGE

1097

removed call to java/io/File::delete : NO_COVERAGE

1102

negated conditional : NO_COVERAGE

1103

removed call to fi/helsinki/cs/titokone/Control::loadSettingsFileContents : NO_COVERAGE

1106

removed call to java/lang/Class::getClassLoader : NO_COVERAGE

removed call to java/lang/Object::getClass : NO_COVERAGE

1107

removed call to java/lang/StringBuilder::<init> : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/StringBuilder::toString : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/ClassLoader::getResourceAsStream : NO_COVERAGE

1109

removed call to fi/helsinki/cs/titokone/Control::loadSettingsStreamContents : NO_COVERAGE

1120

Removed assignment to member variable currentSettings : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Settings::<init> : NO_COVERAGE

1123

Removed assignment to member variable currentSettings : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Settings::<init> : NO_COVERAGE

1128

negated conditional : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

1129

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1132

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1136

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

negated conditional : NO_COVERAGE

1137

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1140

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1144

negated conditional : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

1145

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1148

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1152

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

negated conditional : NO_COVERAGE

1153

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1156

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1160

negated conditional : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

1161

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1164

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1168

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

1170

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1174

negated conditional : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

1175

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1178

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1182

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

1184

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1188

removed call to fi/helsinki/cs/titokone/Settings::getIntValue : NO_COVERAGE

1190

removed call to fi/helsinki/cs/titokone/Settings::setValue : NO_COVERAGE

1206

removed call to fi/helsinki/cs/titokone/Control::load : NO_COVERAGE

1208

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

1209

removed call to fi/helsinki/cs/titokone/Control::getPendingLoadInfo : NO_COVERAGE

mutated return of Object value for fi/helsinki/cs/titokone/GUIBrain::load to ( if (x != null) null else throw new RuntimeException ) : NO_COVERAGE

1211

removed call to fi/helsinki/cs/titokone/Control::getApplicationDefinitions : NO_COVERAGE

1212

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to java/io/File::getPath : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUIBrain::getCurrentDefaultStdinFile : NO_COVERAGE

1213

negated conditional : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1214

Substituted 0 with 1 : NO_COVERAGE

removed call to java/io/File::getPath : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1219

mutated return of Object value for fi/helsinki/cs/titokone/GUIBrain::load to ( if (x != null) null else throw new RuntimeException ) : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Control::getPendingLoadInfo : NO_COVERAGE

1222

mutated return of Object value for fi/helsinki/cs/titokone/GUIBrain::load to ( if (x != null) null else throw new RuntimeException ) : NO_COVERAGE

1232

removed call to fi/helsinki/cs/titokone/GUIBrain::load : NO_COVERAGE

1234

negated conditional : NO_COVERAGE

1235

removed call to fi/helsinki/cs/titokone/GUI::updateStatusBar : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/LoadInfo::getStatusMessage : NO_COVERAGE

1236

Substituted 6 with 7 : NO_COVERAGE

Replaced constant value of 6 with 7 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/LoadInfo::getSP : NO_COVERAGE

1237

Substituted 7 with 8 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::updateReg : NO_COVERAGE

Replaced constant value of 7 with 8 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/LoadInfo::getFP : NO_COVERAGE

1239

removed call to fi/helsinki/cs/titokone/LoadInfo::getSymbolTable : NO_COVERAGE

1240

removed call to fi/helsinki/cs/titokone/GUI::insertSymbolTable : NO_COVERAGE

1242

removed call to fi/helsinki/cs/titokone/LoadInfo::getBinaryCommands : NO_COVERAGE

1243

removed call to fi/helsinki/cs/titokone/LoadInfo::getSymbolicCommands : NO_COVERAGE

1245

removed call to fi/helsinki/cs/titokone/LoadInfo::getData : NO_COVERAGE

1252

negated conditional : NO_COVERAGE

1253

removed call to fi/helsinki/cs/titokone/LoadInfo::getDataAreaSymbolic : NO_COVERAGE

1255

removed call to fi/helsinki/cs/titokone/LoadInfo::getDataSymbolic : NO_COVERAGE

1257

removed call to fi/helsinki/cs/titokone/GUI::insertToInstructionsTable : NO_COVERAGE

1258

removed call to fi/helsinki/cs/titokone/GUI::insertToDataTable : NO_COVERAGE

1260

removed call to fi/helsinki/cs/titokone/LoadInfo::getComments : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::addComment : NO_COVERAGE

1262

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Removed assignment to member variable currentState : NO_COVERAGE

1263

removed call to fi/helsinki/cs/titokone/GUIBrain::setGUICommandsForCurrentState : NO_COVERAGE

1264

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::setGUIView : NO_COVERAGE

1265

removed call to fi/helsinki/cs/titokone/Display::setMem : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Control::getPhysicalMemory : NO_COVERAGE

1275

removed call to fi/helsinki/cs/titokone/Control::saveSettings : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Settings::toString : NO_COVERAGE

1277

Substituted 1 with 0 : NO_COVERAGE

removed call to java/io/File::getName : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1278

removed call to fi/helsinki/cs/titokone/GUI::showError : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::toString : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/Message::<init> : NO_COVERAGE

1288

removed call to java/lang/System::getProperty : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/StringBuilder::toString : NO_COVERAGE

removed call to java/lang/StringBuilder::<init> : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/io/File::<init> : NO_COVERAGE

1290

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

1291

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

1293

negated conditional : NO_COVERAGE

negated conditional : NO_COVERAGE

removed call to java/lang/String::equals : NO_COVERAGE

1294

removed call to java/lang/String::equals : NO_COVERAGE

negated conditional : NO_COVERAGE

1295

removed call to java/io/File::<init> : NO_COVERAGE

1296

removed call to java/lang/String::equals : NO_COVERAGE

negated conditional : NO_COVERAGE

1297

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/StringBuilder::toString : NO_COVERAGE

removed call to java/io/File::<init> : NO_COVERAGE

removed call to java/lang/StringBuilder::<init> : NO_COVERAGE

removed call to java/lang/System::getProperty : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

1301

mutated return of Object value for fi/helsinki/cs/titokone/GUIBrain::getCurrentDefaultStdoutFile to ( if (x != null) null else throw new RuntimeException ) : NO_COVERAGE

1310

removed call to java/io/File::<init> : NO_COVERAGE

removed call to java/lang/System::getProperty : NO_COVERAGE

1312

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

1313

removed call to fi/helsinki/cs/titokone/Settings::getStrValue : NO_COVERAGE

1315

negated conditional : NO_COVERAGE

removed call to java/lang/String::equals : NO_COVERAGE

negated conditional : NO_COVERAGE

1316

removed call to java/lang/String::equals : NO_COVERAGE

negated conditional : NO_COVERAGE

1317

removed call to java/io/File::<init> : NO_COVERAGE

1318

negated conditional : NO_COVERAGE

removed call to java/lang/String::equals : NO_COVERAGE

1319

removed call to java/lang/System::getProperty : NO_COVERAGE

removed call to java/io/File::<init> : NO_COVERAGE

1323

mutated return of Object value for fi/helsinki/cs/titokone/GUIBrain::getCurrentDefaultStdinFile to ( if (x != null) null else throw new RuntimeException ) : NO_COVERAGE

1341

removed call to java/lang/Class::getClassLoader : NO_COVERAGE

removed call to java/lang/Object::getClass : NO_COVERAGE

1342

removed call to java/lang/StringBuilder::toString : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/StringBuilder::append : NO_COVERAGE

removed call to java/lang/ClassLoader::getResourceAsStream : NO_COVERAGE

removed call to java/lang/StringBuilder::<init> : NO_COVERAGE

1351

negated conditional : NO_COVERAGE

1354

removed call to fi/helsinki/cs/titokone/Control::loadSettingsStreamContents : NO_COVERAGE

1360

removed call to java/lang/String::split : NO_COVERAGE

1367

Substituted 0 with 1 : NO_COVERAGE

Changed increment from 1 to -1 : NO_COVERAGE

negated conditional : NO_COVERAGE

changed conditional boundary : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1368

removed call to java/lang/String::split : NO_COVERAGE

1369

negated conditional : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

1370

removed call to java/io/PrintStream::println : NO_COVERAGE

1373

Substituted 0 with 1 : NO_COVERAGE

removed call to java/lang/String::trim : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1375

removed call to java/lang/String::split : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1376

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

negated conditional : NO_COVERAGE

1377

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to java/lang/String::trim : NO_COVERAGE

1378

removed call to java/util/Hashtable::put : NO_COVERAGE

removed call to java/util/Locale::<init> : NO_COVERAGE

1379

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

negated conditional : NO_COVERAGE

1380

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to java/lang/String::trim : NO_COVERAGE

1381

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to java/lang/String::trim : NO_COVERAGE

1382

removed call to java/util/Locale::<init> : NO_COVERAGE

removed call to java/util/Hashtable::put : NO_COVERAGE

1383

negated conditional : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

1384

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to java/lang/String::trim : NO_COVERAGE

1385

removed call to java/lang/String::trim : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1386

Substituted 2 with 3 : NO_COVERAGE

removed call to java/lang/String::trim : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

1387

removed call to java/util/Hashtable::put : NO_COVERAGE

removed call to java/util/Locale::<init> : NO_COVERAGE

1389

removed call to java/io/PrintStream::println : NO_COVERAGE

1398

removed call to java/io/File::getName : NO_COVERAGE

1399

Substituted 46 with 47 : NO_COVERAGE

removed call to java/lang/String::lastIndexOf : NO_COVERAGE

Replaced constant value of 46 with 47 : NO_COVERAGE

1401

changed conditional boundary : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

negated conditional : NO_COVERAGE

removed call to java/lang/String::length : NO_COVERAGE

Replaced integer subtraction with addition : NO_COVERAGE

changed conditional boundary : NO_COVERAGE

negated conditional : NO_COVERAGE

1402

removed call to java/lang/String::toLowerCase : NO_COVERAGE

Replaced integer addition with subtraction : NO_COVERAGE

removed call to java/lang/String::substring : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1404

mutated return of Object value for fi/helsinki/cs/titokone/GUIBrain::getExtension to ( if (x != null) null else throw new RuntimeException ) : NO_COVERAGE

1415

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1416

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1417

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

1418

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

1419

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

1423

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1424

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

1425

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1426

Substituted 4 with 5 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

1427

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

1431

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1432

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1433

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

1434

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

1435

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

1439

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1440

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1441

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

1442

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

1443

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

1447

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1448

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1449

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

1450

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1451

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

1455

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1456

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1457

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1458

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1459

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1460

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

Replaced constant value of 6 with 7 : NO_COVERAGE

Substituted 6 with 7 : NO_COVERAGE

1464

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

1465

Substituted 1 with 0 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1466

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

1467

Substituted 4 with 5 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

1468

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

1469

Replaced constant value of 6 with 7 : NO_COVERAGE

Substituted 6 with 7 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1473

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1474

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1475

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

1476

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

1477

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

1478

Replaced constant value of 6 with 7 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 6 with 7 : NO_COVERAGE

1482

Substituted 0 with 1 : NO_COVERAGE

Substituted 0 with 1 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

1483

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

Substituted 1 with 0 : NO_COVERAGE

1484

Substituted 3 with 4 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

Substituted 3 with 4 : NO_COVERAGE

1485

Substituted 4 with 5 : NO_COVERAGE

Substituted 4 with 5 : NO_COVERAGE

removed call to fi/helsinki/cs/titokone/GUI::enable : NO_COVERAGE

1486

removed call to fi/helsinki/cs/titokone/GUI::disable : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Substituted 2 with 3 : NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 0.27