Problemet med trådar och allt det där är numera löst och visade sig faktiskt vara rätt enkelt. Jag kommar posta all källkod här sen när jag blir klar så någon kanske har nytta för det i framtiden.
Problemet jag har nu är med utmatning i konsolen.
Jag har en linjär array som innehåller alla tecken som blivit upptagna från irc-servern: CHAR_INFO x[80*50].
Där konsolbufferten är 80*50 d.v.s. utrymmet där alla tecken blir skrivna.
Så elementet 80*2 i arrayen motsvarar början på andra raden på skärmen.
Det här är bra och fint så länge all input kommer på en gång till arrayen.
Men när fallet inte längre är så blir det problem. Eftersom då kommer den nya inputen skriva över den gamla i början av arrayen. T.ex. efter all serverinfo blivit lagrad i arrayen och visats på skärmen, och någon användare skickar en rad på 80 tecken till mig. Då kommer första raden på skärmen visa medelandet och skriver över det som fanns där förut.
Jag vill att det ska funka som vilken annan irc-client som hellst. D.v.s jag vill att allt nytt som skrivs till skärmen hamnar på sista raden och allt som finns ovanför den nya raden hoppar upp ett steg med det som fanns längst uppe hoppar ut ur arrayen helt och således även skärmen.
Hur åstakommerjag det här, och har ni uppfattat mig korrekt?
Funktionen i fråga ser ut såhär:
void cConsol::addText(char msg[80*50], int len, bool shift)
{
int i,x=0,y=0;
if(shift){moveText();}// kan ni bortse ifrån, försök till lösning av problemet med någon alghoritm jag försökte skapa som inte löste problemet.
for(i=0;i<len;i++)
{
x++;
if(msg[i] != 13 && msg[i] != 10)
{
cChar[x+80*y].Char.AsciiChar=(int)(msg[i]);
cChar[x+80*y].Attributes=225;
}else if(msg[i] == 10 || msg[i] == 13) {y++; x=0;}
if(i>0 && (i % 80)==0){ y++; x=0;}
}
//memset(cChar,31,sizeof(cChar));
}
Och ja det ser säkerligen horribelt ut för er erfarna kodare
Snälla fråga om ni vill veta något eller behöver mer kod att kolla på.