/* dout.cpp */ /****************************************************************************/ /* ** D O U T . C P P ** ** Tietovirta, joka menee cout:iin mutta niin, että windows äät tulostetaan ** koodisivun 850 (OEM) mukaan. ** ** ** Tekijät: Vesa Lappalainen ** Tehty: 17.02.2001 ** Muutettu: ** Mitä muutettu: ** ** Käyttö: ** ------- ** ** Vaihtoehto 1: ** 1) Lisää #include "dout.h" jokaisen sellaisen tiedoston alkuun, jossa ** tarvitset dout -tietovirtaa. Korvaa cout << dout << ** 2) Samoin korvaa jokainen getline dgetline-funktiolla ** 3) lisää projektiin dout.cpp ** ** Vaihtoehto 2: ** 1) Lisää #include "dosout.h" jokaisen sellaisen tiedoston alkuun, jossa ** tarvitset cout -tietovirtaa. Nämä muuttuvat nyt dout -tietovirraksi ** 2) Samoin jokainen getline muuttuu dgetline-funktioksi ** 3) lisää projektiin dout.cpp ** ** Vikoja: ** - toteutus on puskuroimaton ja siten hieman hidas. ** ** *****************************************************************************/ #include #include #include using namespace std; #include "dout.h" #ifdef EXTERNDOUT // Ei tarvita, koska siirretty kaikki dout.h:hon const char *OEMChars = "Ž™š†„”"; const char *ANSIChars = "ÅÄÖÜåäöü"; char vaihdaOEM(char c) { const char *p = strchr(ANSIChars,c); if ( p == 0 ) return c; int diff = (int)(p-ANSIChars); return *(OEMChars+diff); } char vaihdaAnsi(char c) { const char *p = strchr(OEMChars,c); if ( p == 0 ) return c; int diff = (int)(p-OEMChars); return *(ANSIChars+diff); } char *vaihdaOEMp(char *ps) { char *p; for (p=ps;*p;p++) *p = vaihdaOEM(*p); return ps; } char *vaihdaAnsip(char *ps) { char *p; for (p=ps;*p;p++) *p = vaihdaAnsi(*p); return ps; } istream &dgetline(istream &is,string &s,char delim) { getline(is,s,delim); int len = s.length(); for (int i=0; i