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

📄 konfig.h

📁 load data from pc to hand held terminal and vice versa
💻 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 + -