📄 konfig.cpp
字号:
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 + -