/* * 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 . */ // 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; }