Files
HxCFloppyEmulator/HxCFloppyEmulator_software/sources/gui/cb_edittool_window.cxx
T
2026-01-18 18:50:10 +01:00

948 lines
28 KiB
C++

/*
//
// Copyright (C) 2006-2026 Jean-François DEL NERO
//
// This file is part of HxCFloppyEmulator.
//
// HxCFloppyEmulator may be used and distributed without restriction provided
// that this copyright statement is not removed from the file and that any
// derivative work contains the original copyright notice and the associated
// disclaimer.
//
// HxCFloppyEmulator is free software; you can redistribute it
// and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// HxCFloppyEmulator is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with HxCFloppyEmulator; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
*/
///////////////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------------//
//-------------------------------------------------------------------------------//
//-----------H----H--X----X-----CCCCC----22222----0000-----0000------11----------//
//----------H----H----X-X-----C--------------2---0----0---0----0--1--1-----------//
//---------HHHHHH-----X------C----------22222---0----0---0----0-----1------------//
//--------H----H----X--X----C----------2-------0----0---0----0-----1-------------//
//-------H----H---X-----X---CCCCC-----222222----0000-----0000----1111------------//
//-------------------------------------------------------------------------------//
//----------------------------------------------------- http://hxc2001.free.fr --//
///////////////////////////////////////////////////////////////////////////////////
// File : cb_edittool_window.cxx
// Contains:
//
// Written by: Jean-François DEL NERO
//
// Change History (most recent first):
///////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <math.h>
#include <stdint.h>
#include "fl_includes.h"
#include "floppy_infos_window.h"
#include "batch_converter_window.h"
#include "filesystem_generator_window.h"
#include "cb_filesystem_generator_window.h"
#include "cb_floppy_infos_window.h"
#include "parameters_gui.h"
#include "floppy_dump_window.h"
#include "floppy_infos_window.h"
#include "floppy_streamer_window.h"
#include "rawfile_loader_window.h"
#include "sdhxcfecfg_window.h"
#include "usbhxcfecfg_window.h"
#include "log_gui.h"
#include "about_gui.h"
#include "edittool_window.h"
#include "libhxcfe.h"
#include "libhxcadaptor.h"
#include "usb_hxcfloppyemulator.h"
#include "main.h"
#include "loader.h"
#include "fl_mouse_box.h"
#include "main_gui.h"
extern s_gui_context * guicontext;
extern int valuesanitycheck(int val,int min, int max, int * modif);
void edittool_window_bt_startpoint_callback(Fl_Button *o, void *v)
{
guicontext->pointer_mode = 1;
}
void edittool_window_bt_endpoint_callback(Fl_Button *o, void *v)
{
guicontext->pointer_mode = 2;
}
void edittool_window_edit_startpoint_callback(Fl_Int_Input* edit, void*)
{
hxcfe_td_set_marker( guicontext->td, atoi(edit->value()), 0, 0, 0, TD_MARKER_FLAG_ENABLE );
guicontext->updatefloppyinfos = 1;
}
void edittool_window_edit_endpoint_callback(Fl_Int_Input* edit, void*)
{
hxcfe_td_set_marker( guicontext->td, atoi(edit->value()), 1, 1, 0, TD_MARKER_FLAG_ENABLE );
guicontext->updatefloppyinfos = 1;
}
void edittool_window_bt_setbitrate_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
HXCFE_SIDE * curside;
int valmodif;
int track,side;
trackedittool_window *tew;
int startpulse,endpulse;
int loop;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
fiw = (floppy_infos_window *)window->infos_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
side=(int)fiw->side_number_slide->value();
side = valuesanitycheck(side,0, hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->side_number_slide->value(side);
startpulse = atoi(tew->edit_startpoint->value());
endpulse = atoi(tew->edit_endpoint->value());
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
startpulse = startpulse % (hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side));
endpulse = endpulse % hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(startpulse<endpulse)
{
loop = endpulse - startpulse;
}
else
{
loop = ( hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side) - startpulse ) + endpulse;
}
hxcfe_setCellBitrate( guicontext->hxcfe,curside,startpulse,atoi(tew->edit_bitrate->value()),loop);
guicontext->updatefloppyinfos = 1;
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_flakeypattern_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
HXCFE_SIDE * curside;
int valmodif;
int track,side;
trackedittool_window *tew;
int startpulse,endpulse;
int i,j,tracklen,loop;
char * copybuffer;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
fiw = (floppy_infos_window *)window->infos_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
side=(int)fiw->side_number_slide->value();
side = valuesanitycheck(side,0, hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->side_number_slide->value(side);
startpulse = atoi(tew->edit_startpoint->value());
endpulse = atoi(tew->edit_endpoint->value());
tracklen = hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
startpulse = startpulse % tracklen;
endpulse = endpulse % tracklen;
if(startpulse<endpulse)
{
loop = endpulse - startpulse;
}
else
{
loop = ( hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side) - startpulse ) + endpulse;
}
copybuffer = (char*)tew->edit_fillflakey->value();
if(copybuffer)
{
i = 0;
for(j=0;j<loop;j++)
{
if(copybuffer[i] == '0')
hxcfe_setCellFlakeyState( guicontext->hxcfe, curside, (startpulse+j)%tracklen, 0 );
else
hxcfe_setCellFlakeyState( guicontext->hxcfe, curside, (startpulse+j)%tracklen, 1 );
i++;
if(copybuffer[i]==0)
i = 0;
}
guicontext->updatefloppyinfos = 1;
}
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_delete_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
HXCFE_SIDE * curside;
int valmodif;
int track,side;
trackedittool_window *tew;
int startpulse,endpulse;
int loop;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
fiw = (floppy_infos_window *)window->infos_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
side=(int)fiw->side_number_slide->value();
side = valuesanitycheck(side,0, hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->side_number_slide->value(side);
startpulse = atoi(tew->edit_startpoint->value());
endpulse = atoi(tew->edit_endpoint->value());
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
startpulse = startpulse % (hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side));
endpulse = endpulse % hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(startpulse<endpulse)
{
loop = endpulse - startpulse;
}
else
{
loop = ( hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side) - startpulse ) + endpulse;
}
hxcfe_removeCell(guicontext->hxcfe,curside,startpulse,loop);
guicontext->updatefloppyinfos = 1;
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_insert_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
HXCFE_SIDE * curside;
int valmodif;
int track,side;
trackedittool_window *tew;
int startpulse;
int i,tracklen;
char * copybuffer;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
fiw = (floppy_infos_window *)window->infos_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
side=(int)fiw->side_number_slide->value();
side = valuesanitycheck(side,0, hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->side_number_slide->value(side);
startpulse = atoi(tew->edit_startpoint->value());
tracklen = hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
startpulse = startpulse % tracklen;
copybuffer = (char*)tew->edit_editbuffer->value();
if(copybuffer)
{
hxcfe_insertCell( guicontext->hxcfe, curside, startpulse, 0, strlen(copybuffer) );
i = 0;
while(copybuffer[i])
{
if(copybuffer[i] == '0')
hxcfe_setCellState( guicontext->hxcfe, curside, (startpulse+i)%tracklen, 0 );
else
hxcfe_setCellState( guicontext->hxcfe, curside, (startpulse+i)%tracklen, 1 );
i++;
}
guicontext->updatefloppyinfos = 1;
}
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_fill_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
HXCFE_SIDE * curside;
int valmodif;
int track,side;
trackedittool_window *tew;
int startpulse,endpulse;
int i,j,tracklen,loop;
char * copybuffer;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
fiw = (floppy_infos_window *)window->infos_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
side=(int)fiw->side_number_slide->value();
side = valuesanitycheck(side,0, hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->side_number_slide->value(side);
startpulse = atoi(tew->edit_startpoint->value());
endpulse = atoi(tew->edit_endpoint->value());
tracklen = hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
startpulse = startpulse % tracklen;
endpulse = endpulse % tracklen;
if(startpulse<endpulse)
{
loop = endpulse - startpulse;
}
else
{
loop = ( hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side) - startpulse ) + endpulse;
}
copybuffer = (char*)tew->edit_editbuffer->value();
if(copybuffer)
{
i = 0;
for(j=0;j<loop;j++)
{
if(copybuffer[i] == '0')
hxcfe_setCellState( guicontext->hxcfe, curside, (startpulse+j)%tracklen, 0 );
else
hxcfe_setCellState( guicontext->hxcfe, curside, (startpulse+j)%tracklen, 1 );
i++;
if(copybuffer[i]==0)
i = 0;
}
guicontext->updatefloppyinfos = 1;
}
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_shift_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
HXCFE_SIDE * curside;
int valmodif;
int track,side;
trackedittool_window *tew;
int shiftpulse;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
fiw = (floppy_infos_window *)window->infos_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
side=(int)fiw->side_number_slide->value();
side = valuesanitycheck(side,0, hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->side_number_slide->value(side);
shiftpulse = atoi(tew->edit_shiftbit->value());
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
hxcfe_shiftTrackData(guicontext->hxcfe,curside, shiftpulse );
guicontext->updatefloppyinfos = 1;
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_shifttracks_callback(Fl_Button *o, void *v)
{
Main_Window *window;
trackedittool_window *tew;
int shiftpulse;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
shiftpulse = atoi(tew->edit_shiftbittracks->value());
shiftpulse = shiftpulse % 1000;
if(shiftpulse<0)
shiftpulse = 1000 + shiftpulse;
hxcfe_rotateFloppy( guicontext->hxcfe, guicontext->loadedfloppy, shiftpulse, 1000 );
guicontext->updatefloppyinfos = 1;
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_repair_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
HXCFE_SIDE * curside;
int valmodif;
int track,side;
trackedittool_window *tew;
int startpulse,endpulse;
int tracklen,loop;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
fiw = (floppy_infos_window *)window->infos_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
side=(int)fiw->side_number_slide->value();
side = valuesanitycheck(side,0, hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->side_number_slide->value(side);
startpulse = atoi(tew->edit_startpoint->value());
endpulse = atoi(tew->edit_endpoint->value());
tracklen = hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
startpulse = startpulse % tracklen;
endpulse = endpulse % tracklen;
if(startpulse<endpulse)
{
loop = endpulse - startpulse;
}
else
{
loop = ( hxcfe_getTrackLength(guicontext->hxcfe, guicontext->loadedfloppy, track, side ) - startpulse ) + endpulse;
}
//hxcfe_sectorRepair( guicontext->hxcfe, guicontext->loadedfloppy, track, side, startpulse);
hxcfe_localRepair( guicontext->hxcfe, guicontext->loadedfloppy, track, side, startpulse, loop );
guicontext->updatefloppyinfos = 1;
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_swapsides_callback(Fl_Button *o, void *v)
{
HXCFE_SIDE * side0,* side1;
int track;
hxc_entercriticalsection(guicontext->hxcfe,1);
if(hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy) == 2)
{
for(track=0;track<hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy);track++)
{
side0 = hxcfe_getSide( guicontext->hxcfe, guicontext->loadedfloppy, track, 0 );
side1 = hxcfe_getSide( guicontext->hxcfe, guicontext->loadedfloppy, track, 1 );
if(side0 && side1)
{
side0 = hxcfe_duplicateSide(guicontext->hxcfe,side0);
hxcfe_replaceSide( guicontext->hxcfe, guicontext->loadedfloppy, track, 0, side1 );
hxcfe_replaceSide( guicontext->hxcfe, guicontext->loadedfloppy, track, 1, side0 );
hxcfe_freeSide( guicontext->hxcfe, side0 );
}
}
guicontext->updatefloppyinfos = 1;
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_reversedisk_callback(Fl_Button *o, void *v)
{
hxc_entercriticalsection(guicontext->hxcfe,1);
hxcfe_reverseFloppy(guicontext->hxcfe,guicontext->loadedfloppy);
guicontext->updatefloppyinfos = 1;
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_paste_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
HXCFE_SIDE * curside;
int valmodif;
int track,side;
trackedittool_window *tew;
int startpulse,endpulse;
int i,tracklen;
char * copybuffer;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
fiw = (floppy_infos_window *)window->infos_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
side=(int)fiw->side_number_slide->value();
side = valuesanitycheck(side,0, hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->side_number_slide->value(side);
startpulse = atoi(tew->edit_startpoint->value());
endpulse = atoi(tew->edit_endpoint->value());
tracklen = hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
startpulse = startpulse % tracklen;
endpulse = endpulse % tracklen;
copybuffer = (char*)tew->edit_editbuffer->value();
if(copybuffer)
{
i = 0;
while(copybuffer[i])
{
if(copybuffer[i] == '0')
hxcfe_setCellState( guicontext->hxcfe, curside, (startpulse+i)%tracklen, 0 );
else
hxcfe_setCellState( guicontext->hxcfe, curside, (startpulse+i)%tracklen, 1 );
i++;
}
guicontext->updatefloppyinfos = 1;
}
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_copy_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
HXCFE_SIDE * curside;
int valmodif;
int track,side;
trackedittool_window *tew;
int startpulse,endpulse;
int loop,i,tracklen;
char * copybuffer;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
fiw = (floppy_infos_window *)window->infos_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
side=(int)fiw->side_number_slide->value();
side = valuesanitycheck(side,0, hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->side_number_slide->value(side);
startpulse = atoi(tew->edit_startpoint->value());
endpulse = atoi(tew->edit_endpoint->value());
tracklen = hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
startpulse = startpulse % tracklen;
endpulse = endpulse % tracklen;
if(startpulse<endpulse)
{
loop = endpulse - startpulse;
}
else
{
loop = ( tracklen - startpulse ) + endpulse;
}
if(loop)
{
copybuffer = (char*)malloc(loop + 1);
if(copybuffer)
{
memset(copybuffer,0,(loop + 1));
for(i=0;i<loop;i++)
{
copybuffer[i] = hxcfe_getCellState( guicontext->hxcfe, curside, (startpulse+i)%tracklen ) + '0';
}
tew->edit_editbuffer->value(copybuffer);
free(copybuffer);
}
}
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_setdiskrpm_callback(Fl_Button *o, void *v)
{
Main_Window *window;
HXCFE_SIDE * curside;
int track,side;
trackedittool_window *tew;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
for(side=0;side<hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy);side++)
{
for(track=0;track<hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy);track++)
{
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
hxcfe_setTrackRPM( guicontext->hxcfe, curside, atoi(tew->edit_rpm->value()) );
}
}
}
guicontext->updatefloppyinfos = 1;
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_setdiskbitrate_callback(Fl_Button *o, void *v)
{
Main_Window *window;
HXCFE_SIDE * curside;
int track,side;
trackedittool_window *tew;
int tracklen;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
for(side=0;side<hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy);side++)
{
for(track=0;track<hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy);track++)
{
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
if(curside)
{
tracklen = hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,side);
hxcfe_setCellBitrate(guicontext->hxcfe,curside,0,atoi(tew->edit_bitrate2->value()),tracklen);
}
}
}
guicontext->updatefloppyinfos = 1;
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_erase_side0_callback(Fl_Button *o, void *v)
{
HXCFE_SIDE * curside;
int track;
int j,tracklen;
hxc_entercriticalsection(guicontext->hxcfe,1);
if(hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy))
{
for(track=0;track<hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy);track++)
{
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,0);
if(curside)
{
tracklen = hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,0);
for(j=0;j<tracklen;j++)
{
if(!(j&0x3))
hxcfe_setCellState( guicontext->hxcfe, curside, j, 1 );
else
hxcfe_setCellState( guicontext->hxcfe, curside, j, 0 );
hxcfe_setCellFlakeyState( guicontext->hxcfe, curside, j, 0 );
}
}
}
guicontext->updatefloppyinfos = 1;
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_erase_side1_callback(Fl_Button *o, void *v)
{
HXCFE_SIDE * curside;
int track;
int j,tracklen;
hxc_entercriticalsection(guicontext->hxcfe,1);
if(hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy) == 2)
{
for(track=0;track<hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy);track++)
{
curside = hxcfe_getSide(guicontext->hxcfe,guicontext->loadedfloppy,track,1);
if(curside)
{
tracklen = hxcfe_getTrackLength(guicontext->hxcfe,guicontext->loadedfloppy,track,1);
for(j=0;j<tracklen;j++)
{
if(!(j&0x3))
hxcfe_setCellState( guicontext->hxcfe, curside, j, 1 );
else
hxcfe_setCellState( guicontext->hxcfe, curside, j, 0 );
hxcfe_setCellFlakeyState( guicontext->hxcfe, curside, j, 0 );
}
}
}
guicontext->updatefloppyinfos = 1;
}
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_add_delete_side1_callback(Fl_Button *o, void *v)
{
hxc_entercriticalsection(guicontext->hxcfe,1);
if( hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy) == 1 )
{
hxcfe_allocSide1( guicontext->hxcfe, guicontext->loadedfloppy );
}
else
{
if( hxcfe_getNumberOfSide(guicontext->hxcfe,guicontext->loadedfloppy) == 2 )
{
hxcfe_deleteSide1( guicontext->hxcfe, guicontext->loadedfloppy );
}
}
guicontext->updatefloppyinfos = 1;
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_addtrack_callback(Fl_Button *o, void *v)
{
Main_Window *window;
trackedittool_window *tew;
window = (Main_Window *)guicontext->main_window;
tew = (trackedittool_window *)window->trackedit_window;
hxc_entercriticalsection(guicontext->hxcfe,1);
hxcfe_addTrack( guicontext->hxcfe, guicontext->loadedfloppy, atoi(tew->edit_bitrate2->value()), atoi(tew->edit_rpm->value()) );
guicontext->updatefloppyinfos = 1;
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_inserttrack_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
trackedittool_window *tew;
int valmodif;
int track;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
fiw = (floppy_infos_window *)window->infos_window;
tew = (trackedittool_window *)window->trackedit_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
hxcfe_insertTrack( guicontext->hxcfe, guicontext->loadedfloppy, atoi(tew->edit_bitrate2->value()), atoi(tew->edit_rpm->value()), track );
guicontext->updatefloppyinfos = 1;
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_removetrack_callback(Fl_Button *o, void *v)
{
hxc_entercriticalsection(guicontext->hxcfe,1);
hxcfe_removeLastTrack(guicontext->hxcfe, guicontext->loadedfloppy);
guicontext->updatefloppyinfos = 1;
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_removecurtrack_callback(Fl_Button *o, void *v)
{
Main_Window *window;
floppy_infos_window *fiw;
int valmodif;
int track;
hxc_entercriticalsection(guicontext->hxcfe,1);
window = (Main_Window *)guicontext->main_window;
fiw = (floppy_infos_window *)window->infos_window;
track = (int)fiw->track_number_slide->value();
track = valuesanitycheck(track,0, hxcfe_getNumberOfTrack(guicontext->hxcfe,guicontext->loadedfloppy),&valmodif);
if(valmodif)
fiw->track_number_slide->value(track);
hxcfe_removeTrack( guicontext->hxcfe, guicontext->loadedfloppy, track, 0 );
guicontext->updatefloppyinfos = 1;
hxc_leavecriticalsection(guicontext->hxcfe,1);
}
void edittool_window_bt_removeoddtracks_callback(Fl_Button *o, void *v)
{
hxc_entercriticalsection(guicontext->hxcfe,1);
hxcfe_removeOddTracks( guicontext->hxcfe, guicontext->loadedfloppy );
guicontext->updatefloppyinfos = 1;
hxc_leavecriticalsection(guicontext->hxcfe,1);
}