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

📄 konfig.cpp

📁 load data from pc to hand held terminal and vice versa
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    bool izlaz = false;

    // 'tmp' datoteka
    fstream fDatoteka;

    // Otvori 'tmp' datoteku za citanje
    string cPom = DajTmpFajl();
    fDatoteka.open( cPom.data(), ios::in );

    // Prodji kroz datoteku i citaj parametre prekida
    string cRed;
    if ( fDatoteka.is_open() ) {

        nTip = 0;
        nSBrBrojila = 0;
        nDuzinaSpiska = 0;
        nSBrTerminala = 0;

        if( getline( fDatoteka, cRed ) ) {
            istrstream inputStr( cRed.data() );
            inputStr >> nTip;

            if( getline( fDatoteka, cRed ) ) {
                istrstream inputStr( cRed.data() );
                inputStr >> nSBrBrojila;

                if( getline( fDatoteka, cRed ) ) {
                    istrstream inputStr( cRed.data() );
                    inputStr >> nDuzinaSpiska;

                    if( getline( fDatoteka, cRed ) ) {
                        istrstream inputStr( cRed.data() );
                        inputStr >> nSBrTerminala;
                        izlaz = true;
                    }
                }
            }
        }

        fDatoteka.close();
    }

    return izlaz;
}

// Pamti gde je stao prilikom prekida operacije preuzimanja podataka sa rucnog terminala.
// Ako pamcenje ne uspe, vraca 'false'.
bool KKonfig::ZapamtiPrekidKodPreuzimanja( unsigned int nTip, unsigned int nSBrBrojila,
                                           unsigned int nDuzinaSpiska, 
                                           unsigned int nSBrTerminala ){
    bool izlaz = false;

    // 'tmp' datoteka
    fstream fDatoteka;

    // Otvori 'tmp' datoteku za upis
    string cPom = DajTmpFajl();
    fDatoteka.open( cPom.data(), ios::out );

    if ( fDatoteka.is_open() ) {

        fDatoteka << nTip << endl;
        fDatoteka << nSBrBrojila << endl;
        fDatoteka << nDuzinaSpiska << endl;
        fDatoteka << nSBrTerminala << endl;
    
        fDatoteka.close();
        izlaz = true;
    }

    return izlaz;
}

// Funkcija brise podatke o prekidu operacije preuzimanja podataka.
// Ako operacija ne uspe, vraca false.
bool KKonfig::ObrisiPodatkeOPrekiduPreuzimanja( void ){
    bool izlaz = false;

    // Isprazni 'tmp' fajl
    fstream fDatoteka;
    string cPom = DajTmpFajl();
    fDatoteka.open( cPom.data(), ios::out );

    if ( fDatoteka.is_open() ) {
        fDatoteka.close();
        izlaz = true;
    }

    return izlaz;
}

// Pomocna procedura
void KKonfig::DodajUSpisakNacinTumacenja( TSpisakNacinaTumacenja& SpisakNacinaT,
                                          IDNacinaTumacenjaSpecKoda IDnacina,
                                          unsigned int cVelikoSlovo, unsigned int cMaloSlovo ){
    NacinTumacenjaSpecKoda pomNacinTumacenja;

    pomNacinTumacenja.Postavi( IDnacina, cVelikoSlovo );
    SpisakNacinaT.push_back( pomNacinTumacenja );
    pomNacinTumacenja.Postavi( IDnacina, cMaloSlovo );
    SpisakNacinaT.push_back( pomNacinTumacenja );
}                                 

// Pomocna procedura
void KKonfig::FormirajSpecijalniKodYUSlova( 
                    KSpecijalniKod& SpecijalniKod, unsigned int cSpecKod, string cOpis,
                    unsigned int cVelikoSlovo1, unsigned int cMaloSlovo1,
                    unsigned int cVelikoSlovo2, unsigned int cMaloSlovo2 ){
    TSpisakNacinaTumacenja  pomSpisakNacinaT;

    pomSpisakNacinaT.clear();
    DodajUSpisakNacinTumacenja( pomSpisakNacinaT, CP1250_NT, cVelikoSlovo1, cMaloSlovo1 );
    DodajUSpisakNacinTumacenja( pomSpisakNacinaT, YUSCII_NT, cVelikoSlovo2, cMaloSlovo2 );
    SpecijalniKod.Postavi( cSpecKod, cOpis, pomSpisakNacinaT );
}

// Inicijalizacija spiska specijalnih kodova za komunikaciji sa terminalom.
// ( misli se pre svega na YU slova ).
void KKonfig::InitSpisakSpecijalnihKodova( void ){
    KSpecijalniKod pomSpecKod;

    SpisakSpecijalnihKodova.clear();
    //                                                          CP1250      YUSCII
    // 80H - YU slovo S ( Sisarka )                             ----------  ----------
    FormirajSpecijalniKodYUSlova( pomSpecKod, 0x80, "Sisarka",  0x8A, 0x9A, 0x5B, 0x7B );
    SpisakSpecijalnihKodova.push_back( pomSpecKod );

    // 81H - YU slovo C ( Cicevac )
    FormirajSpecijalniKodYUSlova( pomSpecKod, 0x81, "Cicevac",  0xC6, 0xE6, 0x5D, 0x7D );
    SpisakSpecijalnihKodova.push_back( pomSpecKod );

    // 82H - YU slovo C ( Cacak )
    FormirajSpecijalniKodYUSlova( pomSpecKod, 0x82, "Cacak",    0xC8, 0xE8, 0x5E, 0x7E );
    SpisakSpecijalnihKodova.push_back( pomSpecKod );

    // 83H - YU slovo Z ( Zirafa )
    FormirajSpecijalniKodYUSlova( pomSpecKod, 0x83, "Zirafa",   0x8E, 0x9E, 0x40, 0x60 );
    SpisakSpecijalnihKodova.push_back( pomSpecKod );

    // 84H - YU slovo Dj ( Djordje )
    FormirajSpecijalniKodYUSlova( pomSpecKod, 0x84, "Djordje",  0xD0, 0xF0, 0x5C, 0x7C );
    SpisakSpecijalnihKodova.push_back( pomSpecKod );
}

// '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 KKonfig::PostaviNacinTumacenja( IDNacinaTumacenjaSpecKoda ID ){
    bool izlaz = false;

    if ( ID >= BEZ_KONVERZIJE_NT && ID < GRANICA_NT ){
        NacinaTumacenjaSpecKoda = ID;
        izlaz = true;
    }

    return izlaz;
}

// 'Nacin tumacenja' je prakticno 'kodna strana' za konvertovanje YU slova u komunikaciji sa terminalom
IDNacinaTumacenjaSpecKoda KKonfig::NacinaTumacenja( void ){
    return NacinaTumacenjaSpecKoda;
}

// Vraca 'specijalni kod' koji odgovara datom 'ulaznom kodu' za dati 'nacin tumacenja'.
// Kod se pronalazi pretrazivanjem spiska specijalnih kodova ( SpisakSpecijalnihKodova ).
unsigned int KKonfig::DajSpecijalniKod( unsigned int nUlazniKod, 
                                        IDNacinaTumacenjaSpecKoda NacinTumacenja ){
    unsigned int nSpecijalniKod = nUlazniKod;

    if ( NacinTumacenja != BEZ_KONVERZIJE_NT ) {
        bool bNaso = false;
        TSpisakSpecijalnihKodova::iterator sk_iter    = SpisakSpecijalnihKodova.begin();
        TSpisakSpecijalnihKodova::iterator sk_iterEnd = SpisakSpecijalnihKodova.end();
        while ( sk_iter != sk_iterEnd ) {
            TSpisakNacinaTumacenja::iterator nt_iter    = sk_iter->NaciniTumacenja.begin();
            TSpisakNacinaTumacenja::iterator nt_iterEnd = sk_iter->NaciniTumacenja.end();
            while ( nt_iter != nt_iterEnd ) {
                if ( nt_iter->ID == NacinTumacenja ){
                    if ( nt_iter->nKodUDatoteci == nUlazniKod ){
                        bNaso = true;
                        break;
                    }
                }
                nt_iter++;
            }
            if ( bNaso ){
                nSpecijalniKod = sk_iter->nSpecKod;
                break;
            }
            sk_iter++;
        }
    }

    return nSpecijalniKod;
}

// Vraca 'specijalni kod' koji odgovara datom 'ulaznom kodu' za trenutno aktivni 'nacin tumacenja'.
unsigned int KKonfig::DajSpecijalniKod( unsigned int nUlazniKod ){
    return DajSpecijalniKod( nUlazniKod, NacinaTumacenja() );
}

// Vraca kod znaka na osnovu koda u rucnom terminalu, za dati nacin tumacenja.
unsigned int KKonfig::DajKodUDatoteci( unsigned int nSpecijalniKod, IDNacinaTumacenjaSpecKoda NacinTumacenja ){

    unsigned int nKodUDatoteci = nSpecijalniKod;

    if ( NacinTumacenja != BEZ_KONVERZIJE_NT ) {
        TSpisakSpecijalnihKodova::iterator sk_iter    = SpisakSpecijalnihKodova.begin();
        TSpisakSpecijalnihKodova::iterator sk_iterEnd = SpisakSpecijalnihKodova.end();
        while ( sk_iter != sk_iterEnd ) {
            if ( sk_iter->nSpecKod == nSpecijalniKod ){
                TSpisakNacinaTumacenja::iterator nt_iter    = sk_iter->NaciniTumacenja.begin();
                TSpisakNacinaTumacenja::iterator nt_iterEnd = sk_iter->NaciniTumacenja.end();
                while ( nt_iter != nt_iterEnd ) {
                    if ( nt_iter->ID == NacinTumacenja ){
                        nKodUDatoteci = nt_iter->nKodUDatoteci;
                        break;
                    }
                    nt_iter++;
                }
                break;
            }
            sk_iter++;
        }
    }

    return nKodUDatoteci;
}

// Vraca kod znaka na osnovu koda u rucnom terminalu, za trenutno aktivni nacin tumacenja.
unsigned int KKonfig::DajKodUDatoteci( unsigned int nSpecijalniKod ){
    return DajKodUDatoteci( nSpecijalniKod, NacinaTumacenja() );
}

// Vraca vrednost flega za automatsko prozivanje rucnog terminala
bool KKonfig::IsAutomatskoProzivanje( void ){
    return bAutomatskoProzivanje;
}

// Postavlja vrednost flega za automatsko prozivanje rucnog terminala
void KKonfig::AutomatskoProzivanje( bool bOnOff ){
    bAutomatskoProzivanje = bOnOff;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -