⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conv_main.cpp

📁 smallbasic for linux
💻 CPP
字号:
//---------------------------------------------------------------------------

//
//	Update it from unix version:
//
//	Copy form pdb2bas.cc and paste to pdb.cpp
//
//	In PDB.CPP:
//
//	Declare:
//
//	void	err_printf(const char *fmt, ...);	// message-box
//	void	con_printf(const char *fmt, ...);	// console output (text window)
//
//	Remove routines usage() and main()
//	
//

#include <vcl.h>
#include <sys/stat.h>
#include <stdarg.h>
#include <stdio.h>
#pragma hdrstop

#include "conv_main.h"
#include "conv_view.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFCSMain *FCSMain;

char	lastSource[1024];

typedef char * char_p;

int		SaveSBPDB(const char *fname, const char *text);
int		LoadSBPDB(const char *fname, char_p *text);

void	err_printf(const char *fmt, ...)
{
	char	buf[8192];
	va_list argptr;

	va_start(argptr, fmt);
	vsprintf(buf, fmt, argptr);
	va_end(argptr);

	Application->MessageBoxA(buf, "BAS2PDB/PDB2BAS", MB_OK);
}

void	con_printf(const char *fmt, ...)
{
	char	buf[8192];
	va_list argptr;

	va_start(argptr, fmt);
	vsprintf(buf, fmt, argptr);
	va_end(argptr);

	FCSMain->txtConsole->Lines->Add(buf);
}

bool	filetype(const char *src, const char *cnt_ext)
{
	char	*p, *e;
	char	*buf = new char[strlen(src)+1];
	char	*ext = new char[strlen(cnt_ext)+1];
	bool	rv = false;

	strcpy(buf, src);
	strcpy(ext, cnt_ext);
	strlwr(buf);
	strlwr(ext);
	
	p = strrchr(buf, '.');
	e = ext;
	if	( p )	{
		p ++;
		if	( *e == '.' )
			e ++;
		rv = (strcmp(e, p) == 0);
		}
		
	delete[] buf;
	delete[] ext;
	return rv;
}


//---------------------------------------------------------------------------
__fastcall TFCSMain::TFCSMain(TComponent* Owner)
	: TForm(Owner)
{
	strcpy(lastSource, "");
}
//---------------------------------------------------------------------------
void __fastcall TFCSMain::btnBSRCClick(TObject *Sender)
{
	if	( dlgOpen->Execute() )	{
		txtSRC->Text = dlgOpen->FileName;
		}
}
//---------------------------------------------------------------------------
void __fastcall TFCSMain::btnBTRGClick(TObject *Sender)
{
	if	( dlgSave->Execute() )	{
		txtTRG->Text = dlgSave->FileName;
		}
}
//---------------------------------------------------------------------------
void __fastcall TFCSMain::btnConvertClick(TObject *Sender)
{
	bool		t2p;
	struct stat st1, st2;

	if	( filetype(txtSRC->Text.c_str(), ".pdb") && filetype(txtTRG->Text.c_str(), ".bas") )
		t2p = false;
	else if	( filetype(txtTRG->Text.c_str(), ".pdb") && filetype(txtSRC->Text.c_str(), ".bas") )	
		t2p = true;
	else	{
		con_printf("Wrong file types.\nSelect filenames with extention \".bas\" or \".pdb\"\n\nExample:\nSource: file.pdb\nTarget: file.bas\n");
		return;
		}
	
	if	( t2p )	{
		txtTMP->Lines->LoadFromFile(txtSRC->Text);

		AnsiString	s = txtTMP->Text;
		switch ( SaveSBPDB(txtTRG->Text.c_str(), s.c_str()) )	{
		case	-1:
			con_printf("BAS2PDB-ERROR: Can't create file");
			break;
		case	-3:
			con_printf("BAS2PDB-ERROR: Texts > 32KB does not supported, yet.");
			}
			
		strcpy(lastSource, txtSRC->Text.c_str());
		}
	else	{
		char	*buf;
		
		switch ( LoadSBPDB(txtSRC->Text.c_str(), &buf) )	{
		case	-1:
		case	-2:
			con_printf("PDB2BAS-ERROR: Can't open file");
			break;
		case	-3:
			con_printf("PDB2BAS-ERROR: Texts > 32KB does not supported, yet.");
			break;
		case	-4:
			con_printf("PDB2BAS-ERROR: Bad signature.");
			break;
		default:				
			txtTMP->Text = AnsiString(buf);
			delete[] buf;
			}

		txtTMP->Lines->SaveToFile(txtTRG->Text);
		strcpy(lastSource, txtTRG->Text.c_str());
		}
		
	stat(txtSRC->Text.c_str(), &st1);
	stat(txtTRG->Text.c_str(), &st2);
	con_printf("\r\nSource:\t%s size %d\r\nTarget:\t%s size %d\r\n* DONE *\r\n",
		 txtSRC->Text.c_str(), st1.st_size,
		 txtTRG->Text.c_str(), st2.st_size);
}
//---------------------------------------------------------------------------
void __fastcall TFCSMain::OnChangeSRC(TObject *Sender)
{
	char	*p;
	char	buf[1024];
	char	ext[5];

	strcpy(buf, txtSRC->Text.c_str());
	strcpy(ext, "");
	p = strrchr(buf, '.');
	if	( !p )	
		p = strrchr(buf, '\\');
	else	{
		if	( stricmp(p, ".bas") == 0 )
			strcpy(ext, ".pdb");
		else if	( stricmp(p, ".pdb") == 0 )
			strcpy(ext, ".bas");
		}

	if	( p )	{
		*p = '\0';
		strcat(buf, ext);
		txtTRG->Text = AnsiString(buf);
		}
}
//---------------------------------------------------------------------------

void __fastcall TFCSMain::btnViewClick(TObject *Sender)
{
	FILE	*fp;
	
	if	( strlen(lastSource) == 0 )	{
		if ( FileExists(txtSRC->Text) )	{
			strcpy(lastSource, txtSRC->Text.c_str());
			}
		}

	if	( strlen(lastSource) )	{
		;
		TfrmView *f = new TfrmView(this);

		f->txtText->Lines->LoadFromFile(lastSource);
		f->ShowModal();
		delete f;
		}
	else	{
		con_printf("No source file");
		}
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -