|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: D T
Length: 5271 (0x1497) Types: TextFile Names: »DialogMgr.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5 └─⟦87c3ac0e0⟧ »./contrib-3/contrib-3.00« └─⟦de8ce1454⟧ └─⟦this⟧ »contrib/lib/iv/src/bin/doc/DialogMgr.c«
/* * Copyright (c) 1991 Stanford University * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Stanford not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. Stanford makes no representations about * the suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * DialogManager */ #include "DialogMgr.h" #include "dialogs.h" #include <string.h> class ChooserInfo { public: char* _prompt; Chooser* _chooser; }; class AskerInfo { public: char* _prompt; Asker* _asker; }; class ConfirmerInfo { public: char* _prompt; Confirmer* _confirmer; }; class ReporterInfo { public: char* _prompt; Reporter* _reporter; }; #include "list.h" declareList(ChooserInfo_List,ChooserInfo) implementList(ChooserInfo_List,ChooserInfo) declareList(AskerInfo_List,AskerInfo) implementList(AskerInfo_List,AskerInfo) declareList(ConfirmerInfo_List,ConfirmerInfo) implementList(ConfirmerInfo_List,ConfirmerInfo) declareList(ReporterInfo_List,ReporterInfo) implementList(ReporterInfo_List,ReporterInfo) DialogManager::DialogManager () { _chooser = new ChooserInfo_List(); _asker = new AskerInfo_List(); _confirmer = new ConfirmerInfo_List(); _reporter = new ReporterInfo_List(); } DialogManager::~DialogManager () { while (_chooser->count() > 0) { ChooserInfo& info = _chooser->item(0); delete info._prompt; delete info._chooser; _chooser->remove(0); } delete _chooser; while (_asker->count() > 0) { AskerInfo& info = _asker->item(0); delete info._prompt; delete info._asker; _asker->remove(0); } delete _asker; while (_confirmer->count() > 0) { ConfirmerInfo& info = _confirmer->item(0); delete info._prompt; delete info._confirmer; _confirmer->remove(0); } delete _confirmer; while (_reporter->count() > 0) { ReporterInfo& info = _reporter->item(0); delete info._prompt; delete info._reporter; _reporter->remove(0); } delete _reporter; } const char* DialogManager::choose ( Window* window, const char* prompt, const char* filter ) { long count = _chooser->count(); for (long i = 0; i < count; ++i) { ChooserInfo& info = _chooser->item(i); if (strcmp(info._prompt, prompt) == 0) { break; } } if (i == count) { ChooserInfo info; info._prompt = strcpy(new char[strlen(prompt) + 1], prompt); info._chooser = new Chooser("", prompt); _chooser->append(info); } ChooserInfo& info = _chooser->item(i); return info._chooser->post(window, filter); } const char* DialogManager::ask ( Window* window, const char* prompt, const char* initial ) { long count = _asker->count(); for (long i = 0; i < count; ++i) { AskerInfo& info = _asker->item(i); if (strcmp(info._prompt, prompt) == 0) { break; } } if (i == count) { AskerInfo info; info._prompt = strcpy(new char[strlen(prompt) + 1], prompt); info._asker = new Asker("", prompt); _asker->append(info); } AskerInfo& info = _asker->item(i); return info._asker->post(window, initial); } int DialogManager::confirm (Window* window, const char* prompt) { long count = _confirmer->count(); for (long i = 0; i < count; ++i) { ConfirmerInfo& info = _confirmer->item(i); if (strcmp(info._prompt, prompt) == 0) { break; } } if (i == count) { ConfirmerInfo info; info._prompt = strcpy(new char[strlen(prompt) + 1], prompt); info._confirmer = new Confirmer("", prompt); _confirmer->append(info); } ConfirmerInfo& info = _confirmer->item(i); return info._confirmer->post(window); } void DialogManager::report (Window* window, const char* prompt) { long count = _reporter->count(); for (long i = 0; i < count; ++i) { ReporterInfo& info = _reporter->item(i); if (strcmp(info._prompt, prompt) == 0) { break; } } if (i == count) { ReporterInfo info; info._prompt = strcpy(new char[strlen(prompt) + 1], prompt); info._reporter = new Reporter("", prompt); _reporter->append(info); } ReporterInfo& info = _reporter->item(i); info._reporter->post(window); }