diff --git a/system/administra/admnet/admnet.spin b/system/administra/admnet/admnet.spin
index f0c8a3c..4cd600a 100644
--- a/system/administra/admnet/admnet.spin
+++ b/system/administra/admnet/admnet.spin
@@ -60,9 +60,9 @@ Komponenten : FATEngine 01/18/2009 Kwabena W. Agyeman MIT Lizenz
COG's : MANAGMENT 1 COG
FAT/RTC 1 COG
- NET 1 COG
+ NET 2 COG
-------------------
- 3 COGs
+ 4 COGs
Logbuch :
diff --git a/system/regnatix/irc.spin b/system/regnatix/irc.spin
index 6e77b78..5a92dea 100644
--- a/system/regnatix/irc.spin
+++ b/system/regnatix/irc.spin
@@ -48,10 +48,18 @@ LANMASK = %00000000_00000000_00000000_00100000
W0X_MENU = 8
W0Y_MENU = 0
-COL_DEFAULT = 0
-COL_FOCUS = 3
-COL_MARK = 5
-COL_MENU = 8
+COL_DEFAULT = 0 'default Schriftfarbe (Mitteilungstext und Eingabe)
+COL_STDEFAULT = 0 'default Schriftfarbe im Statusfenster
+COL_FRAME = 0 'Fensterrahmen (nicht ausgewählt)
+COL_FOCUS = 3 'Fensterrahmen (ausgewählt/Fokus)
+COL_HEAD = 8 'Titelzeile
+COL_TIME = 8 'aktuelle Zeit in Message-Zeile
+COL_STTIME = 8 'aktuelle Zeit im Status-Fenster
+COL_CHAN = 5 'Channel in Message-Zeile
+COL_NICK = 4 'Nickname in Message-Zeile
+COL_MYNICK = 2 'Nickname in selbst geschriebener Message-Zeile
+COL_MSG = 0 'Text der Message-Zeile
+COL_MYMSG = 6 'Text in selbst geschriebener Message-Zeile
LEN_PASS = 32
LEN_NICK = 32
@@ -103,13 +111,15 @@ PUB main | key
key := ios.key
case key
gc#KEY_TAB: f_focus
- gc#KEY_CURUP: f_scrollup
- gc#KEY_CURDOWN: f_scrolldown
+ gc#KEY_CURUP: f_scrolldown
+ gc#KEY_CURDOWN: f_scrollup
gc#KEY_F02: f_setconf
gc#KEY_F03: f_connect
gc#KEY_F09: f_close
gc#KEY_F10: f_quit
- other: f_input(key)
+ other: if focus == 3
+ f_input(key)
+
ifnot handleidx == $FF
irc_getLine
@@ -196,37 +206,61 @@ PRI conf_save | i
ios.sddmact(ios#DM_USER) 'u-marker aktivieren
- ios.winset(2)
- ios.print(string(10,"Konfiguration gespeichert."))
+ handleStatusStr(string("Konfiguration gespeichert."), 2, TRUE)
PRI f_focus
if ++focus == 4
focus := 1
- win_redraw
-PRI f_scrollup | lineAddr, lineNum
- if scrolllinenr > 0
+ scrolllinenr[1] := 0
+ scrolllinenr[2] := 0
+ scrolllinenr[3] := 0
+
+ win_contentRefresh
+ win_redraw
+
+ ios.winset(3)
+ if focus == 3 'Eingabefenster
+ ios.curon
+ else
+ ios.curoff
+
+PRI f_scrollup | lineAddr, lineNum, lineMax
+
+ case focus
+ 1: lineMax := MAX_LINES_WIN1
+ 2: lineMax := MAX_LINES_WIN2
+ 3: lineMax := MAX_LINES_WIN3
+
+ if scrolllinenr[focus] > 0
ios.winset(focus)
ios.scrollup
+ ios.curpos1
+ ios.cursety(yn[focus])
- lineNum := buflinenr[focus] - --scrolllinenr[focus] 'Nummer hereinngescrollte neue Zeile
+ lineNum := buflinenr[focus] - --scrolllinenr[focus] - 1 'Nummer hereinngescrollte neue Zeile
+ if lineNum < 0
+ lineNum += lineMax
lineAddr := bufstart[focus] + (lineNum * buflinelen) 'Adresse im eRAM (Usermode)
printBufWin(lineAddr, focus)
-PRI f_scrolldown | lineAddr, lineNum, linemax
+PRI f_scrolldown | lineAddr, lineNum, lineMax
case focus
- 1: linemax := MAX_LINES_WIN1
- 2: linemax := MAX_LINES_WIN2
- 3: linemax := MAX_LINES_WIN3
+ 1: lineMax := MAX_LINES_WIN1
+ 2: lineMax := MAX_LINES_WIN2
+ 3: lineMax := MAX_LINES_WIN3
- if scrolllinenr < linemax
+ if scrolllinenr[focus] < lineMax - yn[focus] + y0[focus] - 1
ios.winset(focus)
ios.scrolldown
+ ios.curhome
- lineNum := buflinenr[focus] - ++scrolllinenr[focus] - yn[focus] + y0[focus] + 2 'Nummer hereinngescrollte neue Zeile
+ lineNum := buflinenr[focus] - ++scrolllinenr[focus] - yn[focus] + y0[focus] - 1 'Nummer hereinngescrollte neue Zeile
+ if lineNum < 0
+ lineNum += lineMax
lineAddr := bufstart[focus] + (lineNum * buflinelen) 'Adresse im eRAM (Usermode)
printBufWin(lineAddr, focus)
@@ -239,8 +273,7 @@ PRI f_setconf | i,n
IpPortToStr(ip_addr, ip_port)
input(string("IRC-Server angeben (IP:Port):"),@temp_str ,21)
ifnot strToIpPort(@input_str, @ip_addr, @ip_port)
- ios.winset(2)
- ios.print(string(10,"Fehlerhafte Eingabe von IP-Adresse und Port des IRC-Servers."))
+ handleStatusStr(string("Fehlerhafte Eingabe von IP-Adresse und Port des IRC-Servers."), 2, TRUE)
input(string("Paßwort eingeben:"),@password,LEN_PASS)
n := 1
@@ -284,18 +317,18 @@ PRI f_setconf | i,n
PRI f_connect | t
- ios.winset(2)
- ios.print(string(10,"Starte LAN..."))
+ handleStatusStr(string("Starte LAN..."), 2, TRUE)
ios.lanstart
- ios.print(string(10,"Verbinde mit IRC-Server..."))
+ handleStatusStr(string("Verbinde mit IRC-Server..."), 2, TRUE)
if (handleidx := ios.lan_connect(ip_addr, ip_port)) == $FF
ios.print(string(10,"Kein Socket frei!"))
+ handleStatusStr(string("Kein Socket frei!"), 2, TRUE)
return(-1)
ifnot (ios.lan_waitconntimeout(handleidx, 2000))
- ios.print(string(10,"Verbindung mit IRC-Server konnte nicht aufgebaut werden."))
+ handleStatusStr(string("Verbindung mit IRC-Server konnte nicht aufgebaut werden."), 2, TRUE)
f_close
return(-1)
- ios.print(string(10,"Verbunden, warte auf Bereitschaft..."))
+ handleStatusStr(string("Verbunden, warte auf Bereitschaft..."), 2, TRUE)
t := cnt
repeat until (cnt - t) / clkfreq > 1 '1s lang Meldungen des Servers entgegennehmen
@@ -340,40 +373,47 @@ PRI f_input(key)
PRI irc_pass
- ios.winset(2)
- ios.print(string(10,"Sende Paßwort..."))
+ handleStatusStr(string("Sende Paßwort..."), 2, TRUE)
if sendStr(string("PASS ")) or sendStr(@password) or sendStr(string(13,10))
- ios.print(string(10,"Fehler beim Senden des Paßwortes"))
+ handleStatusStr(string("Fehler beim Senden des Paßwortes"), 2, TRUE)
return(-1)
PRI irc_join
- ios.winset(2)
- ios.print(string(10,"Sende Nickname"))
+ if strsize(@channel) == 0
+ handleStatusStr(string("Sende Nickname und Benutzerinformationen..."), 2, TRUE)
+ else
+ handleStatusStr(string("Sende Nickname und Benutzer, verbinde mit Channel..."), 2, TRUE)
+
if sendStr(string("NICK ")) or sendStr(@nickname) or sendStr(string(13,10))
- ios.print(string(10,"Fehler beim Senden des Nicknamens"))
+ handleStatusStr(string("Fehler beim Senden des Nicknamens"), 2, TRUE)
return(-1)
- ios.print(string(", Benutzerinformationen"))
if sendStr(string("USER ")) or sendStr(@username) or sendStr(string(" 8 * :Hive #")) or sendStr(str.trimCharacters(num.ToStr(hiveid, num#DEC))) or sendStr(string(13,10))
- ios.print(string(10,"Fehler beim Senden des Nicknamens"))
+ handleStatusStr(string("Fehler beim Senden der Benutzerinformationen"), 2, TRUE)
return(-1)
waitcnt(cnt + clkfreq) '1sek warten
ifnot strsize(@channel) == 0
- ios.winset(2)
- ios.print(string(" und verbinde mit Channel"))
if sendStr(string("JOIN ")) or sendStr(@channel) or sendStr(string(13,10))
- ios.print(string(10,"Fehler beim Verbinden mit dem Channel"))
+ handleStatusStr(string("Fehler beim Verbinden mit Channel"), 2, TRUE)
return(-1)
-PRI irc_getLine | i, nickstr, chanstr, msgstr
+PRI irc_getLine | i, x, prefixstr, nickstr, chanstr, msgstr, commandstr
if readLine(2000) 'vollständige Zeile empfangen
- if (i := str.findCharacters(@receive_str, string("PRIVMSG "))) 'Chat Message
- chanstr := i + 8
+ if receive_str[0] == ":" 'Prefix folgt (sollte jede hereinkommende Message enthalten)
+ prefixstr := @receive_str[1]
+ ifnot (commandstr := str.replaceCharacter(prefixstr, " ", 0)) 'nächstes Leerzeichen ist Ende des Prefix, dann folgt das Kommando
+ return(FALSE)
+ else 'kein Prefix
+ prefixstr := 0
+ commandstr := @receive_str 'es geht gleich mit dem Kommando los
+
+ if str.findCharacters(commandstr, string("PRIVMSG ")) == commandstr 'Chat Message
+ chanstr := commandstr + 8
if (msgstr := str.replaceCharacter(chanstr, " ", 0))
msgstr++
nickstr := @receive_str[1]
@@ -382,26 +422,60 @@ PRI irc_getLine | i, nickstr, chanstr, msgstr
i := strsize(msgstr)
if byte[msgstr] == 1 AND byte[msgstr][i - 1] == 1
' it's a CTCP msg
- byte[msgstr][i - 1] := 0 ' move string end up one spot
- msgstr++ ' seek past the CTCP byte
+ byte[msgstr][i - 1] := 0 ' move string end up one spot
+ msgstr++ ' seek past the CTCP byte
handleCTCPStr(nickstr, msgstr)
- if strcomp(msgstr, string("VERSION"))
- ' version string, reply with our cool version info
+ if strcomp(msgstr, string("VERSION")) 'Versions-Anfrage
sendStr(string("NOTICE "))
sendStr(nickstr)
sendStr(string(" :VERSION HiveIRC 1.0.0 [P8X32A/80MHz] ",13,10))
else
- handleChatStr(chanstr, nickstr, msgstr, FALSE)
- elseif str.findCharacters(@receive_str, string("PING :")) == @receive_str 'PING
- ios.winset(2)
- ios.print(string(10,"PING erhalten, sende PONG"))
- receive_str[1] := "O"
- sendStr(@receive_str)
+ if byte[chanstr] == "#" 'Message an Channel
+ handleChatStr(chanstr, nickstr, msgstr, 0)
+ else 'Message an mich
+ handleChatStr(string(""), nickstr, msgstr, 2)
+ elseif str.findCharacters(commandstr, string("PING :")) == commandstr 'PING
+ handleStatusStr(string("PING erhalten, sende PONG"), 2, TRUE)
+ byte[commandstr][1] := "O"
+ sendStr(commandstr)
sendStr(string(13,10))
- else
- ios.winset(2)
- ios.printchar(10)
- ios.print(@receive_str)
+ elseif str.findCharacters(commandstr, string("JOIN :")) == commandstr 'JOIN
+ if (str.replaceCharacter(prefixstr, "!", 0))
+ repeat x from 0 to strsize(prefixstr) - 1
+ temp_str[x] := byte[prefixstr][x]
+ msgstr := string(" hat den Kanal betreten")
+ repeat i from 0 to strsize(msgstr) - 1
+ temp_str[x++] := byte[msgstr][i]
+ temp_str[x] := 0
+ handleStatusStr(@temp_str, 2, TRUE)
+ elseif str.findCharacters(commandstr, string("QUIT :")) == commandstr 'QUIT
+ if (str.replaceCharacter(prefixstr, "!", 0))
+ repeat x from 0 to strsize(prefixstr) - 1
+ temp_str[x] := byte[prefixstr][x]
+ msgstr := string(" hat den Kanal verlassen")
+ repeat i from 0 to strsize(msgstr) - 1
+ temp_str[x++] := byte[msgstr][i]
+ temp_str[x] := 0
+ handleStatusStr(@temp_str, 2, TRUE)
+ elseif byte[commandstr][3] == " " 'Kommando 3 Zeichen lang -> 3stelliger Returncode
+ byte[commandstr][3] := 0
+ nickstr := commandstr + 4
+ msgstr := str.replaceCharacter(nickstr, " ", 0)
+ case num.FromStr(commandstr, num#DEC)
+ 372: handleStatusStr(msgstr + 3, 1, FALSE) 'MOTD
+ 375..376:
+ other: repeat x from 0 to strsize(commandstr) - 1 'unbehandelter Return-Code
+ temp_str[x] := byte[commandstr][x]
+ temp_str[x++] := ":"
+ temp_str[x++] := " "
+ repeat i from 0 to strsize(msgstr) - 1
+ temp_str[x++] := byte[msgstr][i]
+ if x == 127
+ quit
+ temp_str[x] := 0
+ handleStatusStr(@temp_str, 2, TRUE)
+ else 'unbekanntes Kommando
+ handleStatusStr(commandstr, 2, FALSE)
PRI irc_putLine | i
@@ -414,20 +488,18 @@ PRI irc_putLine | i
sendStr(string(" :"))
sendStr(i)
sendStr(string(13,10))
- handleChatStr(@send_str[5], @nickname, i, TRUE)
+ handleChatStr(@send_str[5], @nickname, i, 1)
elseif send_str[0] == "/" 'anderes IRC-Kommando an Server
- sendStr(@send_str[1])
- sendStr(string(13,10))
- ios.winset(1)
- ios.printnl
- ios.print(@send_str[1])
+ sendStr(@send_str[1])
+ sendStr(string(13,10))
+ handleChatStr(@channel, @nickname, @send_str[1], 1)
else 'Message an Channel
sendStr(string("PRIVMSG "))
sendStr(@channel)
sendStr(string(" :"))
sendStr(@send_str)
sendStr(string(13,10))
- handleChatStr(@channel, @nickname, @send_str, TRUE)
+ handleChatStr(@channel, @nickname, @send_str, 1)
PRI frame_draw
@@ -436,12 +508,11 @@ PRI frame_draw
ios.printcls
ios.cursetx(W0X_MENU)
ios.cursety(W0Y_MENU)
- ios.setcolor(COL_MENU)
+ ios.setcolor(COL_HEAD)
ios.print(string(" IRC Client"))
repeat cols-W0X_MENU-11
ios.printchar(" ")
ios.printlogo(0,0)
- ios.setcolor(COL_DEFAULT)
PRI win_draw | i
@@ -452,22 +523,23 @@ PRI win_draw | i
ios.printcls
if i == focus
ios.setcolor(COL_FOCUS)
+ else
+ ios.setcolor(COL_FRAME)
ios.winoframe
- if i == focus
- ios.setcolor(COL_DEFAULT)
- if i == 3
- ios.curon
ios.winset(0)
ios.cursetx(2)
ios.cursety(hy[i])
if i == focus
ios.setcolor(COL_FOCUS)
+ else
+ ios.setcolor(COL_FRAME)
case i
1: ios.print(@strWin1)
2: ios.print(@strWin2)
3: ios.print(@strWin3)
- if i == focus
- ios.setcolor(COL_DEFAULT)
+
+ ios.winset(3)
+ ios.curon
PRI win_redraw | i
@@ -475,30 +547,27 @@ PRI win_redraw | i
ios.winset(i)
if i == focus
ios.setcolor(COL_FOCUS)
+ else
+ ios.setcolor(COL_FRAME)
ios.winoframe
- if i == focus
- ios.setcolor(COL_DEFAULT)
- if i == 3
- ios.curon
ios.winset(0)
ios.cursetx(2)
ios.cursety(hy[i])
if i == focus
ios.setcolor(COL_FOCUS)
+ else
+ ios.setcolor(COL_FRAME)
case i
1: ios.print(@strWin1)
2: ios.print(@strWin2)
3: ios.print(@strWin3)
- if i == focus
- ios.setcolor(COL_DEFAULT)
PRI win_contentRefresh | win, lines, lineNum
'' ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
'' │ Fensterinhalt neu aufbauen │
'' └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-'' repeat win from 1 to 2
- repeat win from 1 to 1
+ repeat win from 1 to 2
lines := yn[win] - y0[win] + 1 '???
if buflinenr[win] => lines
lineNum := buflinenr[win] - lines 'Nummer erste anzuzeigende Zeile
@@ -513,7 +582,8 @@ PRI win_contentRefresh | win, lines, lineNum
lineNum++
if lineNum == MAX_LINES_WIN1
lineNum := 0
- ios.printnl
+' ios.printnl
+ ios.printchar(10)
printBufWin(bufstart[win] + (lineNum * buflinelen), win)
win++
@@ -594,40 +664,47 @@ PRI printTime | timeStr, i
print_str[print_str_ptr++] := byte[timeStr][i]
print_str[print_str_ptr++] := "]"
-PRI handleChatStr(chanstr, nickstr, msgstr, me) | i, channicklen, msglineend, ch, space
+PRI handleChatStr(chanstr, nickstr, msgstr, me) | i, channicklen, msglineend, ch, space
'' ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-'' │ Chat-zeile erstellen, anzeigen und in Puffer schreiben │
+'' │ Chat-Zeile erstellen, anzeigen und in Puffer schreiben │
'' | |
-'' | Aufbau: 00 ... 000 |
+'' | Aufbau: 00 ... 000 |
+'' | |
+'' | me: 0 - nicht von mir / an mich |
+'' | 1 - von mir |
+'' | 2 - an mich |
'' └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
ios.winset(1)
print_str_ptr := 0 ' String neu beginnen
'1. Teilstring: Zeit
- print_str[print_str_ptr++] := COL_MENU 'Farbbyte
+ print_str[print_str_ptr++] := COL_TIME 'Farbbyte
printTime
print_str[print_str_ptr++] := 0
'2. Teilstring: Channel
- print_str[print_str_ptr++] := COL_DEFAULT 'Farbbyte
+ if me == 2
+ print_str[print_str_ptr++] := COL_MYNICK 'Farbbyte
+ else
+ print_str[print_str_ptr++] := COL_CHAN 'Farbbyte
repeat i from 0 to strsize(chanstr) 'Länge Channel inkl. Abschluß-Null
print_str[print_str_ptr++] := byte[chanstr][i]
'3. Teilstring: Nickname
- if me
- print_str[print_str_ptr++] := COL_MARK 'Farbbyte
+ if me == 1
+ print_str[print_str_ptr++] := COL_MYNICK 'Farbbyte
else
- print_str[print_str_ptr++] := COL_FOCUS 'Farbbyte
+ print_str[print_str_ptr++] := COL_NICK 'Farbbyte
print_str[print_str_ptr++] := ">"
repeat i from 0 to strsize(nickstr) 'Länge Nickname inkl. Abschluß-Null
print_str[print_str_ptr++] := byte[nickstr][i]
'4. Teilstring: 1. Teil der Mitteilung
- if me
- print_str[print_str_ptr++] := COL_MARK 'Farbbyte
+ if me == 1
+ print_str[print_str_ptr++] := COL_MYMSG 'Farbbyte
else
- print_str[print_str_ptr++] := COL_DEFAULT 'Farbbyte
+ print_str[print_str_ptr++] := COL_MSG 'Farbbyte
print_str[print_str_ptr++] := ":"
print_str[print_str_ptr++] := " "
channicklen := strsize(chanstr) + strsize(nickstr) + 10
@@ -639,8 +716,10 @@ PRI handleChatStr(chanstr, nickstr, msgstr, me) | i, channicklen, msglineend,
print_str[print_str_ptr++] := 0 'komplette Chat-Zeile fertig
print_str[print_str_ptr] := 0
print_str_ptr := 0
- ios.printnl
- printStrWin(@print_str, 1)
+ if scrolllinenr[1] == 0
+' ios.printnl
+ ios.printchar(10)
+ printStrWin(@print_str, 1)
printStrBuf(1)
quit
else 'msgline muß umgebrochen werden
@@ -654,8 +733,10 @@ PRI handleChatStr(chanstr, nickstr, msgstr, me) | i, channicklen, msglineend,
print_str[print_str_ptr++] := 0 'komplette Chat-Zeile fertig, weitere folgt
print_str[print_str_ptr] := 0
print_str_ptr := 0
- ios.printnl
- printStrWin(@print_str, 1)
+ if scrolllinenr[1] == 0
+' ios.printnl
+ ios.printchar(10)
+ printStrWin(@print_str, 1)
printStrBuf(1)
else 'kein einziges Leerzeichen
repeat i from 0 to strsize(msgstr) 'in print_str schreiben
@@ -663,10 +744,15 @@ PRI handleChatStr(chanstr, nickstr, msgstr, me) | i, channicklen, msglineend,
print_str[print_str_ptr++] := 0 'komplette Chat-Zeile fertig, weitere folgt
print_str[print_str_ptr] := 0
print_str_ptr := 0
- ios.printnl
- printStrWin(@print_str, 1)
+ if scrolllinenr[1] == 0
+' ios.printnl
+ ios.printchar(10)
+ printStrWin(@print_str, 1)
printStrBuf(1)
- print_str[print_str_ptr++] := COL_DEFAULT 'nach Zeilenumbruch beginnz neue Zeile wieder mit Farbbyte
+ if me == 1
+ print_str[print_str_ptr++] := COL_MYMSG 'nach Zeilenumbruch beginnt neue Zeile wieder mit Farbbyte
+ else
+ print_str[print_str_ptr++] := COL_MSG
repeat channicklen '"Tab" bis Ende Anzeige Channel + Nickname
print_str[print_str_ptr++] := " "
if space
@@ -681,12 +767,12 @@ PRI handleCTCPStr(nickstr, msgstr) | i, msglineend
print_str_ptr := 0 ' String neu beginnen
'1. Teilstring: Zeit
- print_str[print_str_ptr++] := COL_MENU 'Farbbyte
+ print_str[print_str_ptr++] := COL_TIME 'Farbbyte
printTime
print_str[print_str_ptr++] := 0
'3. Teilstring: Nickname
- print_str[print_str_ptr++] := COL_FOCUS 'Farbbyte
+ print_str[print_str_ptr++] := COL_NICK 'Farbbyte
print_str[print_str_ptr++] := ">"
repeat i from 0 to strsize(nickstr) 'Länge Nickname inkl. Abschluß-Null
print_str[print_str_ptr++] := byte[nickstr][i]
@@ -695,7 +781,7 @@ PRI handleCTCPStr(nickstr, msgstr) | i, msglineend
print_str[print_str_ptr++] := COL_DEFAULT 'Farbbyte
print_str[print_str_ptr++] := ":"
print_str[print_str_ptr++] := " "
- msglineend := cols - strsize(nickstr) + 8
+ msglineend := cols - strsize(nickstr) - 8
if strsize(msgstr) =< msglineend
msglineend := strsize(msgstr) 'msgline kürzer wie restliche Zeile
else
@@ -705,16 +791,55 @@ PRI handleCTCPStr(nickstr, msgstr) | i, msglineend
print_str[print_str_ptr++] := 0 'komplette Chat-Zeile fertig
print_str[print_str_ptr] := 0
print_str_ptr := 0
- ios.printnl
- printStrWin(@print_str, 1)
+ if scrolllinenr[1] == 0
+' ios.printnl
+ ios.printchar(10)
+ printStrWin(@print_str, 1)
printStrBuf(1)
+PRI handleStatusStr(statusstr, win, showtime) | i, statlineend
+'' ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
+'' │ Status-Zeile erstellen, anzeigen und in Puffer schreiben │
+'' | |
+'' | Aufbau: 00 ... 000 |
+'' | |
+'' └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+ ios.winset(win)
+ print_str_ptr := 0 ' String neu beginnen
+
+ '1. Teilstring: Zeit
+ if showtime
+ print_str[print_str_ptr++] := COL_STTIME 'Farbbyte
+ printTime
+ print_str[print_str_ptr++] := " "
+ print_str[print_str_ptr++] := 0
+
+ '2. Teilstring: Status
+ print_str[print_str_ptr++] := COL_STDEFAULT 'Farbbyte
+ if showtime
+ statlineend := cols - 10
+ else
+ statlineend := cols - 2
+ if strsize(statusstr) > statlineend 'statusline länger wie restliche Zeile
+ byte[statusstr][statlineend] := 0 'abschneiden
+ repeat i from 0 to strsize(statusstr)
+ print_str[print_str_ptr++] := byte[statusstr][i]
+ print_str[print_str_ptr++] := 0 'komplette Status-Zeile fertig
+ print_str[print_str_ptr] := 0
+ print_str_ptr := 0
+ if scrolllinenr[win] == 0
+' ios.printnl
+ ios.printchar(10)
+ printStrWin(@print_str, win)
+ printStrBuf(win)
+
PRI printStrWin(printStr, win) | i
'' ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
'' │ Chat-Zeile anzeigen │
'' └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
- ios.winset(1)
+ ios.winset(win)
i := 0
repeat
@@ -722,17 +847,22 @@ PRI printStrWin(printStr, win) | i
quit
ios.setcolor(byte[printStr][i++]) 'ersten Byte vom Teilstring ist die Farbe
ios.print(printStr + i) 'restlichen String anzeigen
- i += strsize(printStr + i) + 1 'i zeigt auf nächsten Teilstring
+ i += strsize(printStr + i) + 1 'i zeigt auf nächsten Teilstring
-PRI printStrBuf(win) | lineAddr, i
+PRI printStrBuf(win) | lineAddr, lineMax, i
'' ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
'' │ Chat-Zeile in Fenster-Puffer schreiben │
'' └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
- lineAddr := bufstart[1] + (buflinenr[1]++ * buflinelen) 'Adresse Zeilenbeginn im eRAM (Usermode)
- if buflinenr[1] == MAX_LINES_WIN1
- buflinenr[1] := 0
+ case win
+ 1: lineMax := MAX_LINES_WIN1
+ 2: lineMax := MAX_LINES_WIN2
+ 3: lineMax := MAX_LINES_WIN3
+
+ lineAddr := bufstart[win] + (buflinenr[win]++ * buflinelen) 'Adresse Zeilenbeginn im eRAM (Usermode)
+ if buflinenr[win] == lineMax
+ buflinenr[win] := 0
i := 0
repeat