Descent3/editor/DallasImportDlg.cpp
2024-06-15 20:12:48 +02:00

163 lines
4.3 KiB
C++

/*
* Descent 3
* Copyright (C) 2024 Parallax Software
*
* This program 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 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
// DallasImportDlg.cpp : implementation file
//
#include "stdafx.h"
#include "editor.h"
#include "cfile.h"
#include "DallasMainDlg.h"
#include "DallasUtilities.h"
#include "DallasImportDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDallasImportDlg dialog
CDallasImportDlg::CDallasImportDlg(CWnd *pParent /*=NULL*/) : CDialog(CDallasImportDlg::IDD, pParent) {
//{{AFX_DATA_INIT(CDallasImportDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_ScriptName = "";
m_Filename = "";
}
void CDallasImportDlg::DoDataExchange(CDataExchange *pDX) {
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDallasImportDlg)
DDX_Control(pDX, IDC_SCRIPT_LIST, m_ScriptListBox);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDallasImportDlg, CDialog)
//{{AFX_MSG_MAP(CDallasImportDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDallasImportDlg message handlers
void CDallasImportDlg::OnOK() {
// TODO: Add extra validation here
int index = m_ScriptListBox.GetCurSel();
if (index == LB_ERR)
return;
m_ScriptListBox.GetText(index, m_ScriptName);
CDialog::OnOK();
}
void CDallasImportDlg::OnCancel() {
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
BOOL CDallasImportDlg::OnInitDialog() {
CDialog::OnInitDialog();
// TODO: Add extra initialization here
FillScriptListBox(m_Filename.GetBuffer(0));
m_ScriptListBox.SetCurSel(0);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CDallasImportDlg::FillScriptListBox(char *filename) {
CFILE *infile;
char linebuf[2048];
char *line;
int linenum;
int valid_lines_read;
// Try to open the file for loading
infile = cfopen(filename, "rt");
if (!infile) {
CString msg;
msg.Format("Unable to open \"%s\"!", filename);
MessageBox(msg, "Script Library File Not Found!", MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
linenum = 0;
// Read in and parse each line of the file
while (!cfeof(infile)) {
// Clear the buffer
strcpy(linebuf, "");
// Read in a line from the file
cf_ReadString(linebuf, sizeof(linebuf), infile);
linenum++;
// Remove whitespace padding at start and end of line
RemoveTrailingWhitespace(linebuf);
line = SkipInitialWhitespace(linebuf);
// Check for Start of Script Block Section
if (strncmp(line, SCRIPT_START_TAG, strlen(SCRIPT_START_TAG)) == 0) {
bool done = false;
// Set valid line counter to track whether we're reading header info or tree nodes
valid_lines_read = 0;
// Read all the lines in the block
while (!done && !cfeof(infile)) {
strcpy(linebuf, "");
cf_ReadString(linebuf, sizeof(linebuf), infile);
linenum++;
// Remove whitespace padding at start and end of line
RemoveTrailingWhitespace(linebuf);
line = SkipInitialWhitespace(linebuf);
// If it's an empty line or a comment, skip it
if (strlen(line) == 0 || strncmp(line, "//", 2) == 0)
continue;
// Check for End of Script Block Section
if (strncmp(line, SCRIPT_END_TAG, strlen(SCRIPT_END_TAG)) == 0) {
done = true;
continue;
}
// See if it should be the script name line
if (valid_lines_read == 0) {
m_ScriptListBox.AddString(line);
valid_lines_read++;
continue;
}
}
}
}
cfclose(infile);
return TRUE;
}