📄 konfig.h
字号:
/*
Klasa za konfigurisanje programa. Koristi se za pamcenje raznih parametara, da bi se izbegle globalne promenljive.
Klasa je 'singleton': pristup procedurama se vrsi preko pointera 'KKonfig::Instance()'.
*/
#ifndef KONFIG_H
#define KONFIG_H
#include <string>
#include <vector>
#include <fstream>
#include <strstream>
using namespace std;
const char KONFIG_DATOTEKA[] = "RTKonfig";
const char TMP_DATOTEKA[] = "RTtmp";
const char DEFAULT_COMPORT[5] = "COM1";
const char DEFAULT_SPISAK[30] = "SpisakBrojila.txt";
const char DEFAULT_PODACI[30] = "PodaciSaTerminala.txt";
const bool DEFAULT_PROZIVANJE = false;
/*
//********************** Konfiguraciona datoteka *************************
const char cKonfigDatoteka[30] = "Config";
std::fstream fKonfig( cKonfigDatoteka, ios::in | ios::out );
void UpisiUKonfig( std::string cPoruka ){
if ( ! fKonfig.is_open() ) fKonfig.open( cKonfigDatoteka, ios::in | ios::out );
fKonfig << cPoruka << std::endl;
}
*/
//******************************* Deklaracije << BEGIN >> *******************************
// - kalse
class KCOMPortKonfig;
class KKonfig;
class NacinTumacenjaSpecKoda;
class KSpecijalniKod;
// - enumeracije
enum IDNacinaTumacenjaSpecKoda;
// - tipovi
typedef vector<KCOMPortKonfig> TSpisakCOMPortova;
typedef vector<NacinTumacenjaSpecKoda> TSpisakNacinaTumacenja;
typedef vector<KSpecijalniKod> TSpisakSpecijalnihKodova;
//******************************** Deklaracije << END >> ********************************
class KCOMPortKonfig{
public:
string nazivPorta;
int nPort;
int nBaudRate;
};
// Napomena: redosled nacina tumacenja mora da bude kao sto je ovde jer se koristi
// kao indeks liste vrednosti u 'CKonfigDlg::OnInitDialog()' ( indeksi pocinju od 0 ) !!!
enum IDNacinaTumacenjaSpecKoda{
BEZ_KONVERZIJE_NT=0,// kodovi se ne konvertuju
CP1250_NT, // kodna strana 1250
YUSCII_NT, // tretira ASCII uglaste zagrada i sl. kao YU slova
GRANICA_NT // sluzi da se odredi opseg dozvoljenih vrednosti ( od 0 do GRANICA_NT-1 )
};
class NacinTumacenjaSpecKoda{
public:
IDNacinaTumacenjaSpecKoda ID;
unsigned int nKodUDatoteci; // npr. u datoteci za punjenje spiska brojila
void Postavi( IDNacinaTumacenjaSpecKoda IDNacina, unsigned int nKod ){
ID = IDNacina;
nKodUDatoteci = nKod;
}
};
// 'Specijalni kod' je ustvari kod YU slova u rucnom terminalu ( podrzana su velika slova
// sa kodovima 0x80-0x84 ).
class KSpecijalniKod{
public:
unsigned int nSpecKod;
string cOpis;
TSpisakNacinaTumacenja NaciniTumacenja;
void Postavi( unsigned int nKod, string cNapomena, TSpisakNacinaTumacenja NaciniT ){
nSpecKod = nKod;
cOpis = cNapomena;
NaciniTumacenja = NaciniT;
}
};
class KKonfig {
public:
// Pristup jedinom objektu klase
static KKonfig* Instance( void );
// Spisak COM portova
TSpisakCOMPortova SpisakCOMPortova;
// Spisak specijalnih kodova koje treba konvertovati pri komunikaciji sa rucnim terminalom.
// ( ovo se npr. odnosi na YU slova )
TSpisakSpecijalnihKodova SpisakSpecijalnihKodova;
// Postavljanje parametara na 'default' vrednosti
void InicijalizacijaCOMPortova( void );
// Vraca konfiguraciju datog COM porta
bool DajPortKonfig( string cNazivPorta, int& nPort, int& nBaudRate );
// Postavlja COM port preko kojeg ce da ide komunikacija sa terminalom
// U slucaju neuspeha vraca false ( ako naziv porta nije COM1, COM2 COM3 ili COM4 ).
bool PostaviAktivniCOMPort( string cNazivPorta );
// Vraca naziv COM porta preko kojeg ce da ide komunikacija sa terminalom
string DajAktivniCOMPort( void );
// Postavlja naziv datoteke u koju se snimaju podaci sa terminala
void PostaviDatotekuZaSpisak( string cNazivDatoteke );
// Vraca naziv datoteke u koju se snimaju podaci sa terminala
string DajDatotekuZaSpisak( void );
// Postavlja naziv datoteke u koju se snimaju podaci sa terminala
void PostaviDatotekuZaPodatke( string cNazivDatoteke );
// Vraca naziv datoteke u koju se snimaju podaci sa terminala
string DajDatotekuZaPodatke( void );
// Postavlja naziv datoteke i direktorijum aplikacije
void PostaviAppNazivIDir( string cExeDatoteka, string cDir );
// Vraca pun naziv exe fajla ( direktorijum + naziv datoteke )
string PunNazivExeDatoteke( void );
// Postavlja direktorijum konfiguracione datoteke
void PostaviKonfigDir( string cDir );
// Vraca puni naziv konfiguracione datoteke
string DajKonfigFajl( void );
// Cita konfiguracionu datoteku i postavlja vrednosti konfiguracionih parametara
void ProcitajKonfigDatoteku( void );
// Snimi konfiguracione parametare u konfiguracionu datoteku
// U slucaju neuspeha vraca 'false'.
bool SnimiKonfigDatoteku( void );
// Vraca puni naziv 'privremene' datoteke
string DajTmpFajl( void );
// Funkcija vraca podatke o mestu gde je korisnik prekinuo prenos kod proslog preuzimanja
// podataka sa rucnog terminala.
// Ako prilikom proslog preuzimanja podataka nije doslo do prekida, vraca false.
bool ProcitajPodatkeOPrekidu( unsigned int& nTip, unsigned int& nSBrBrojila,
unsigned int& nDuzinaSpiska,
unsigned int& nSBrTerminala );
// Pamti gde je stao prilikom prekida operacije preuzimanja podataka sa rucnog terminala.
// Ako pamcenje ne uspe, vraca 'false'.
bool ZapamtiPrekidKodPreuzimanja( unsigned int nTip, unsigned int nSBrBrojila,
unsigned int nDuzinaSpiska,
unsigned int nSBrTerminala );
// Funkcija brise podatke o prekidu operacije preuzimanja podataka.
// Ako operacija ne uspe, vraca false.
bool ObrisiPodatkeOPrekiduPreuzimanja( void );
// Inicijalizacija spiska specijalnih kodova za komunikaciji sa terminalom.
// ( misli se pre svega na YU slova ).
void InitSpisakSpecijalnihKodova( void );
// 'Nacin tumacenja' je prakticno 'kodna strana' za konvertovanje YU slova u komunikaciji sa terminalom
// Ako dati ID nije u opsegu podrzanih vrednosti, vraca 'false'.
bool PostaviNacinTumacenja( IDNacinaTumacenjaSpecKoda ID );
// 'Nacin tumacenja' je prakticno 'kodna strana' za konvertovanje YU slova u komunikaciji sa terminalom
IDNacinaTumacenjaSpecKoda NacinaTumacenja( void );
// Vraca 'specijalni kod' koji odgovara datom 'ulaznom kodu' za dati 'nacin tumacenja'.
// Kod se pronalazi pretrazivanjem spiska specijalnih kodova ( SpisakSpecijalnihKodova ).
unsigned int DajSpecijalniKod( unsigned int nUlazniKod, IDNacinaTumacenjaSpecKoda NacinTumacenja );
// Vraca 'specijalni kod' koji odgovara datom 'ulaznom kodu' za trenutno aktivni 'nacin tumacenja'.
unsigned int DajSpecijalniKod( unsigned int nUlazniKod );
// Vraca kod znaka na osnovu koda u rucnom terminalu, za dati nacin tumacenja.
unsigned int DajKodUDatoteci( unsigned int nSpecijalniKod, IDNacinaTumacenjaSpecKoda NacinTumacenja );
// Vraca kod znaka na osnovu koda u rucnom terminalu, za trenutno aktivni nacin tumacenja.
unsigned int DajKodUDatoteci( unsigned int nSpecijalniKod );
// Vraca vrednost flega za automatsko prozivanje rucnog terminala
bool IsAutomatskoProzivanje( void );
// Postavlja vrednost flega za automatsko prozivanje rucnog terminala
void AutomatskoProzivanje( bool bOnOff );
private:
// Posto je klasa singlton, konstruktor je privatni
KKonfig( void );
// Izabrani COM port
string cAktivniCOMPort;
// Naziv datoteke iz koje se cita spisak brojila
string cDatotekaZaSpisak;
// Naziv datoteke u koju se snimaju podaci sa terminala
string cDatotekaZaPodatke;
// Podaci o aplikaciji
string cNazivExeDatoteke; // Naziv exe fajla
string cAppDir; // Naziv direktorijuma aplikacije
string cKonfigDir; // Naziv direktorijuma konfiguracione datoteke
// Aktivna kodna strana
IDNacinaTumacenjaSpecKoda NacinaTumacenjaSpecKoda;
// Aktiviranje automatskog periodicnog prozivanja terminala
bool bAutomatskoProzivanje;
// Pomocna procedura
void DodajUSpisakNacinTumacenja( TSpisakNacinaTumacenja& SpisakNacinaT,
IDNacinaTumacenjaSpecKoda IDnacina,
unsigned int cVelikoSlovo, unsigned int cMaloSlovo );
// Pomocna procedura
void FormirajSpecijalniKodYUSlova(
KSpecijalniKod& SpecijalniKod, unsigned int cSpecKod, string cOpis,
unsigned int cVelikoSlovo1, unsigned int cMaloSlovo1,
unsigned int cVelikoSlovo2, unsigned int cMaloSlovo2 );
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -