fltk/fluid/mergeback.h
Matthias Melcher 961d9ee719 FLUID: Store path to last written code file.
After some discussions it became clear that the code file may be written
into an unpredictable location by the build system. Fluid now remembers
that location in a user setting file and seems to do the expected thing after
a brief test.
2023-10-27 22:51:35 +02:00

78 lines
2.4 KiB
C++

//
// MergeBack routines for the Fast Light Tool Kit (FLTK).
//
// Copyright 2023 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// https://www.fltk.org/COPYING.php
//
// Please see the following page on how to report bugs and issues:
//
// https://www.fltk.org/bugs.php
//
#ifndef _FLUID_MERGEBACK_H
#define _FLUID_MERGEBACK_H
#include <FL/fl_attr.h>
#include "../src/Fl_String.H"
#include <stdio.h>
const int FD_TAG_GENERIC = 0;
const int FD_TAG_CODE = 1;
const int FD_TAG_MENU_CALLBACK = 2;
const int FD_TAG_WIDGET_CALLBACK = 3;
const int FD_TAG_LAST = 3;
const int FD_MERGEBACK_ANALYSE = 0;
const int FD_MERGEBACK_INTERACTIVE = 1;
const int FD_MERGEBACK_APPLY = 2;
const int FD_MERGEBACK_APPLY_IF_SAFE = 3;
/** Class that implements the MergeBack functionality.
\see merge_back(const Fl_String &s, int task)
*/
class Fd_Mergeback
{
protected:
/// Pointer to the C++ code file.
FILE *code;
/// Current line number in the C++ code file.
int line_no;
/// Set if there was an error reading a tag.
int tag_error;
/// Number of code blocks that were different than the CRC in their tag.
int num_changed_code;
/// Number of generic structure blocks that were different than the CRC in their tag.
int num_changed_structure;
/// Number of code block that were modified, but a type node by that uid was not found.
int num_uid_not_found;
/// Number of modified code block where the corresponding project block also changed.
int num_possible_override;
void unindent(char *s);
Fl_String read_and_unindent_block(long start, long end);
void analyse_callback(unsigned long code_crc, unsigned long tag_crc, int uid);
void analyse_code(unsigned long code_crc, unsigned long tag_crc, int uid);
int apply_callback(long block_end, long block_start, unsigned long code_crc, int uid);
int apply_code(long block_end, long block_start, unsigned long code_crc, int uid);
public:
Fd_Mergeback();
~Fd_Mergeback();
int merge_back(const Fl_String &s, const Fl_String &p, int task);
int ask_user_to_merge(const Fl_String &s, const Fl_String &p);
int analyse();
int apply();
};
extern int merge_back(const Fl_String &s, const Fl_String &p, int task);
#endif // _FLUID_MERGEBACK_H