'#####################################################################################################
' Server_Telnet - Remote
'#####################################################################################################
' This is a part of CIC4U
' CIC4U - Command Interpreter Console - Version 4 - UNIX
'#####################################################################################################
' (c) Copyright and Rightcopies - 2007 By.: /_\ DeltaLab's - Deutschland
' Autor: Martin Wiemann
'=====================================================================================================
' All rights reserved!
'#####################################################################################################
'-----------------------------------------------------------------------------------------------------
Dim Shared G_UserSSID As String
Dim Shared G_FromAPID As ULongInt
Dim Shared G_FromAPData As Long
Dim Shared G_APID As ULongInt
Dim Shared LBreak As String 'Zeilenumbruch-Constante
LBreak = Chr(13) & Chr(10) 'Zeilenumbruch-Konstante Festlegen
Dim Shared HelloMSG As String
Declare Function F_MakeBackSpaceString(V_Len As Long) As String
Declare Function F_MakeColorString(V_Color As Long) As String
Declare Sub F_Thread (Byval V_SID As Any Ptr)
Declare Function F_GetDefConString() As String
#INCLUDE "../net/TSNE_V2.bi"
Declare Sub TSNE_Disconnected (Byval V_TSNEID As Uinteger)
Declare Sub TSNE_Connected (Byval V_TSNEID As Uinteger)
Declare Sub TSNE_NewConnection (Byval V_TSNEID As Uinteger, Byval V_RequestID As Socket)
Declare Sub TSNE_NewData (Byval V_TSNEID As Uinteger, Byref V_Data As String)
'-----------------------------------------------------------------------------------------------------
#INCLUDE "../c4kernel.bi"
#INCLUDE "../cic4u_kernel_function.bi"
'-----------------------------------------------------------------------------------------------------
Dim Shared C4K As C4Kernel_Type Ptr
Type Client_Type
V_Socket As Uinteger
T_Data As String
V_IPA As String
V_TimeOut As Double
V_Username As String
V_UserSSID As String
V_LoginTime As Double
V_LoginC As Long
V_OptMode As Long
V_OptModeNeo As Long
V_OptModeStart As Long
V_OptBinary As Long
V_OptEcho As Long
V_OptGoAhead As Long
V_OptStatus As Long
V_OptTimingMark As Long
V_OptTerminalType As Long
V_OptTerminalSpeed As Long
V_OptWindowSize As Long
V_ValWindow_Width As Long
V_ValWindow_Height As Long
V_ValTerminalType As String
V_ValTerminalSpeed As String
V_ValTerminalLocation As String
End Type
Dim Shared G_Server As Uinteger
Dim Shared G_ClientD() As Client_Type
Dim Shared G_ClientDC As Client_Type
Dim Shared G_ClientC As Uinteger
Dim Shared G_Server_Port As Ushort
Dim Shared G_Server_MaxClients As Uinteger
Dim Shared G_Server_TimeOut As Double
Dim Shared G_MUTX_Client As Any Ptr
'-----------------------------------------------------------------------------------------------------
Function CIC4U_IVersion Cdecl () As String Export
CIC4U_IVersion = "1.00.0___" & __DATE__ & "_" & __TIME__
End Function
'-----------------------------------------------------------------------------------------------------
Function CIC4U_IDescription Cdecl () As String Export
CIC4U_IDescription = "Telnet Command Line Interface Server"
End Function
'-----------------------------------------------------------------------------------------------------
Function CIC4U_IHelp Cdecl (Byref V_CMD As String) As String Export
CIC4U_IHelp = "No help available"
End Function
'-----------------------------------------------------------------------------------------------------
Function CIC4U_IDriverLevel Cdecl () As Long Export
CIC4U_IDriverLevel = 10
End Function
'-----------------------------------------------------------------------------------------------------
Function CIC4U_Event Cdecl (Byref V_FromAPID As ULongInt, Byref V_FromAPData As Long, Byref V_APData As Long, Byref V_MSG As ULongInt, Byref V_SubMSG As Long, Byref BV_Data1 As String, Byref BV_Data2 As String) As Double Export
CIC4U_Event = F_BCID(-1)
Dim CID As Long
CID = V_APData
If CID <= 0 Or CID > G_ClientC Then Return F_BCID(-6)
Dim TCT As Client_Type
TCT = G_ClientD(CID)
If TCT.V_Socket = 0 Then Return F_BCID(-6)
Dim D As String
Select Case V_MSG
Case 0
Select Case V_SubMSG
Case 1: D = LBreak & F_MakeColorString(7) & BV_Data1
Case 2: D = F_MakeColorString(2) & "[=]" & LBreak & F_MakeColorString(7) & BV_Data1
Case 3: D = LBreak & F_MakeColorString(6) & BV_Data1
Case 4: D = F_MakeColorString(1) & "[F]" & LBreak & F_MakeColorString(7) & BV_Data1
Case 5: D = F_MakeColorString(3) & "[W]" & LBreak & F_MakeColorString(7) & BV_Data1
Case 6: D = F_MakeColorString(1) & "[F]" & LBreak
Case 7: D = F_MakeColorString(2) & "[=]" & LBreak
Case 8
Select Case BV_Data2
Case "0"
Case Else: D = F_MakeColorString(7)
End Select
D = D & BV_Data2
Case 9
Case 10
Case 11
Case 12
End Select
End Select
TSNE_Data_Send TCT.V_Socket, D
End Function
'-----------------------------------------------------------------------------------------------------
Function CIC4U_Init Cdecl (Byref V_KernelRef As C4Kernel_Type Ptr, Byref V_APID As ULongInt, Byref V_FromAPID As ULongInt, Byref V_FromAPData As Long, Byref V_FromUserSSID As String, Byref V_CMD As String, Byref B_SelfTerm As Long) As Double Export
C4K = V_KernelRef
CIC4U_Init = F_BCID(-1)
G_APID = V_APID
G_FromAPID = V_FromAPID
G_FromAPData = V_FromAPData
G_Server_Port = 2304
G_Server_MaxClients = 100
G_Server_TimeOut = 1000
C4K->C4A_Add(V_FromAPID, V_FromAPData, "Init Server_Telnet...")
With G_ClientDC
.V_OptMode = 0
.V_OptModeNeo = 0
.V_OptBinary = 0
.V_OptEcho = 1
.V_OptGoAhead = 0
.V_OptStatus = 0
.V_OptTimingMark = 0
.V_OptTerminalType = 0
.V_OptTerminalSpeed = 0
.V_OptWindowSize = 0
.V_ValWindow_Width = 80
.V_ValWindow_Height = 24
End With
Dim BV As Long
HelloMSG = LBreak & F_MakeColorString(7)
HelloMSG = HelloMSG & " #######################" & LBreak
HelloMSG = HelloMSG & " ##" & F_MakeColorString(4) & " MESA CLUSTER GRID " & F_MakeColorString(7) & "##" & LBreak
HelloMSG = HelloMSG & " #######################" & LBreak
HelloMSG = HelloMSG & F_MakeColorString(7)
G_MUTX_Client = Mutexcreate
BV = TSNE_Create_Server(G_Server, G_Server_Port, 10, @TSNE_NewConnection)
If BV = 0 Then
C4K->C4A_Add(V_FromAPID, V_FromAPData, "Server_Telnet running!")
Else: C4K->C4A_Add(V_FromAPID, V_FromAPData, "[FEHLER] " & TSNE_GetGURUCode(BV))
End If
TSNE_WaitClose(G_Server)
C4K->C4A_Add(V_FromAPID, V_FromAPData, "Server_Telnet terminated!")
Return F_BCID(0)
End Function
'-----------------------------------------------------------------------------------------------------
Function CIC4U_Term Cdecl () As Double Export
CIC4U_Term = F_BCID(-1)
TSNE_Disconnect(G_Server)
TSNE_WaitClose(G_Server)
Dim X As Integer
Dim TSock As Integer
For X = 1 To G_ClientC
TSock = G_ClientD(X).V_Socket
TSNE_Disconnect(TSock)
Next
For X = 1 To G_ClientC
TSock = G_ClientD(X).V_Socket
TSNE_WaitClose(TSock)
Next
Mutexdestroy(G_MUTX_Client)
CIC4U_Term = F_BCID(0)
End Function
'-----------------------------------------------------------------------------------------------------
Sub CIC4U_Destruct () Destructor
Dim BV As Double
BV = CIC4U_Term()
End Sub
'-----------------------------------------------------------------------------------------------------
Function CIC4U_Loop Cdecl (Byref B_Exit As Long, Byref B_ProcDone As ULongInt, Byref B_ProgFail As ULongInt) As Double Export
CIC4U_Loop = F_BCID(-1)
Return F_BCID(0)
End Function
'-----------------------------------------------------------------------------------------------------
Sub TSNE_Disconnected (Byval V_TSNEID As Uinteger)
'C4K->C4A_Add(G_FromAPID, G_FromAPData, ""[DIS])
Dim TCT As Client_Type
Dim BV As Double
Dim X As Uinteger
Mutexlock(G_MUTX_Client)
For X = 1 To G_ClientC
If G_ClientD(X).V_Socket > 0 Then
If G_ClientD(X).V_Socket = V_TSNEID Then
TSNE_Disconnect(V_TSNEID)
TCT = G_ClientD(X)
If TCT.V_UserSSID <> "" Then BV = C4K->C4A_User_Logout(TCT.V_UserSSID)
G_ClientD(X).V_Socket = 0
Exit For
End If
End If
Next
Mutexunlock(G_MUTX_Client)
End Sub
'-----------------------------------------------------------------------------------------------------
Sub TSNE_Connected (Byval V_TSNEID As Uinteger)
'C4K->C4A_Add(G_FromAPID, G_FromAPData, ""[CON])
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(250) & Chr(1) 'Echo
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(252) & Chr(1) 'Echo
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(250) & Chr(3) 'SGA
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(252) & Chr(3) 'SGA
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(251) & Chr(5) 'Status
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(253) & Chr(24) 'TerminalType
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(253) & Chr(31) 'WindowSize
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(253) & Chr(32) 'TerminalSpeed
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(253) & Chr(33) 'FlowControl
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(253) & Chr(35) 'DisplayLocation
TSNE_Data_Send V_TSNEID, Chr(27) & "[2J"
TSNE_Data_Send V_TSNEID, HelloMSG & LBreak
TSNE_Data_Send V_TSNEID, "USERNAME:"
End Sub
'-----------------------------------------------------------------------------------------------------
Sub TSNE_NewConnection (Byval V_TSNEID As Uinteger, Byval V_RequestID As Socket)
Print "[CON]"
'C4K->C4A_Add(G_FromAPID, G_FromAPData, "[NCO] >" & V_RequestID & "<")
Dim TCID As Long
Dim TClient As Uinteger
Dim X As Long
Dim BV As Long
TCID = 0
Mutexlock(G_MUTX_Client)
For X = 1 To G_ClientC
If G_ClientD(X).V_Socket = 0 Then
TCID = X
Exit For
End If
Next
If TCID = 0 Then
If G_ClientC < G_Server_MaxClients Then
G_ClientC += 1
TCID = G_ClientC
Redim Preserve G_ClientD(G_ClientC) As Client_Type
End If
End If
Mutexunlock(G_MUTX_Client)
Dim T As String
If TCID > 0 Then
BV = TSNE_Create_Accept(V_RequestID, TClient, T, @TSNE_Disconnected, @TSNE_Connected, @TSNE_NewData)
Mutexlock(G_MUTX_Client)
G_ClientD(TCID) = G_ClientDC
G_ClientD(TCID).V_Socket = TClient
G_ClientD(TCID).V_IPA = T
G_ClientD(TCID).V_TimeOut = Timer + G_Server_TimeOut
Mutexunlock(G_MUTX_Client)
Else
' C4K->C4A_Add(G_FromAPID, G_FromAPData, "[REQ] -> NO "FREE)
' Print "[REQ] No Free -> Create New -> SERVER FULL! KILL "NEW!
BV = TSNE_Create_Accept(V_RequestID, TClient, T, 0, 0, 0)
TSNE_Data_Send(TClient, F_MakeColorString(3) & "SERVER-FULL!")
TSNE_Disconnect(TClient)
End If
End Sub
'-----------------------------------------------------------------------------------------------------
Sub TSNE_NewData (Byval V_TSNEID As Uinteger, Byref V_Data As String)
'C4K->C4A_Add(G_FromAPID, G_FromAPData, ""[NDA])
Dim X As Uinteger
Dim ID As Long
Mutexlock(G_MUTX_Client)
For X = 1 To G_ClientC
If G_ClientD(X).V_Socket > 0 Then
If G_ClientD(X).V_Socket = V_TSNEID Then
ID = X
Exit For
End If
End If
Next
Mutexunlock(G_MUTX_Client)
'Print "[NDA]: >" & ID & "<___>" & V_Data & "<"
If ID <= 0 Then Exit Sub
Mutexlock(G_MUTX_Client)
G_ClientD(ID).V_TimeOut = Timer + G_Server_TimeOut
Mutexunlock(G_MUTX_Client)
Dim TCT As Client_Type
Dim Y As Long
Dim DD() As String
Dim DC As Long
Dim BV As Double
For Y = 1 To Len(V_Data)
Mutexlock(G_MUTX_Client)
TCT = G_ClientD(ID)
Mutexunlock(G_MUTX_Client)
' Print "C: >" & TCT.V_OptMode & "<___>" & asc(mid(V_Data, y, 1)) & "<"
If TCT.V_OptMode = 0 Then
Select Case Asc(Mid(V_Data, Y, 1))
Case 8, 127
If TCT.T_Data <> "" Then
TCT.T_Data = Left(TCT.T_Data, Len(TCT.T_Data) - 1)
If TCT.V_OptEcho = 1 Then TSNE_Data_Send(V_TSNEID, Chr(8) & " " & Chr(8))
End If
Case 10
Case 13
If TCT.T_Data <> "" Then
If TCT.V_UserSSID = "" Then
F_SplitString TCT.T_Data, DD(), DC, " ", 1, 0, 0
If TCT.V_Username <> "" Then
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(250) & Chr(1) 'Echo
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(252) & Chr(1) 'Echo
TCT.V_UserSSID = C4K->C4A_User_Login(TCT.V_Username, DD(1), 0, TCT.V_IPA)
If Len(TCT.V_UserSSID) = 3 Then
BV = Val(TCT.V_UserSSID)
TCT.V_UserSSID = ""
End If
If TCT.V_UserSSID <> "" Then
If TCT.V_OptEcho = 1 Then TSNE_Data_Send(V_TSNEID, F_MakeBackSpaceString(Len(TCT.T_Data) + 9))
TSNE_Data_Send(V_TSNEID, F_MakeColorString(2) & "Login OK!" & F_MakeColorString(7) & " " & F_MakeColorString(4) & "WIN THE GAME!" & F_MakeColorString(7) & LBreak & LBreak)
TSNE_Data_Send(V_TSNEID, F_MakeColorString(2) & " =[DEFCON: " & F_GetDefConString & F_MakeColorString(2) & " ]=" & F_MakeColorString(7) & LBreak & LBreak)
TSNE_Data_Send(V_TSNEID, F_MakeColorString(6) & ">" & F_MakeColorString(7))
Else
If TCT.V_OptEcho = 1 Then TSNE_Data_Send(V_TSNEID, F_MakeBackSpaceString(Len(TCT.T_Data) + 9))
TCT.V_Username = ""
TCT.V_LoginC += 1
TSNE_Data_Send(V_TSNEID, F_MakeColorString(1) & C4K->C4A_BCID_Description(BV) & F_MakeColorString(7) & LBreak)
If TCT.V_LoginC = 2 Then
TSNE_Data_Send(V_TSNEID, F_MakeColorString(3) & "= COMMUNICATION TERMINATED! =")
TSNE_Disconnect(V_TSNEID)
Exit For
Else
TSNE_Data_Send(V_TSNEID, "USERNAME:")
End If
End If
Else
TCT.V_Username = DD(1)
If TCT.V_OptEcho = 1 Then TSNE_Data_Send(V_TSNEID, F_MakeBackSpaceString(Len(TCT.T_Data) + 9))
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(251) & Chr(1) 'Echo
TSNE_Data_Send V_TSNEID, Chr(255) & Chr(253) & Chr(1) 'Echo
TSNE_Data_Send(V_TSNEID, "PASSWORD:")
End If
Else
TSNE_Data_Send(V_TSNEID, LBreak)
BV = C4K->C4A_Execute(TCT.V_UserSSID, G_APID, X, TCT.T_Data)
If Fix(BV) <> 0 Then TSNE_Data_Send(V_TSNEID, C4K->C4A_BCID_Description(BV) & LBreak)
TSNE_Data_Send(V_TSNEID, LBreak & F_MakeColorString(6) & ">" & F_MakeColorString(7))
End If
TCT.T_Data = ""
End If
Case 32 To 126, 167,176,178 To 181, 196, 214, 220, 223, 228
If TCT.V_OptEcho = 1 Then
' Print ""SEND
If TCT.V_UserSSID = "" And TCT.V_Username <> "" Then
TSNE_Data_Send(V_TSNEID, F_MakeColorString(4) & "*" & F_MakeColorString(7))
Else: TSNE_Data_Send(V_TSNEID, Mid(V_Data, Y, 1))
End If
End If
TCT.T_Data += Mid(V_Data, Y, 1)
' Print ""[ & TCT.T_Data & ""]
Case 65'up
Case 66'down
Case 67'right
Case 68'left
Case 255: TCT.V_OptMode = 1
Case Else
If Asc(Mid(V_Data, Y, 1)) = 27 And Mid(V_Data, Y + 1, 1) = "[" Then
'Print "C: " & asc(mid(V_Data, y + 2, 1))
Select Case Mid(V_Data, Y + 2, 1)
Case "A"
Y += 3
Case "B"
Y += 3
Case "C"
Y += 3
Case "D"
Y += 3
End Select
End If
End Select
Else
If TCT.V_OptModeNeo = 0 Then
TCT.V_OptMode = 0
Select Case Asc(Mid(V_Data, Y, 1))
Case 240
Case 241
Case 242
Case 243
Case 244
Case 245
Case 246
Case 247
Case 248
Case 249
Case 250
TCT.V_OptModeNeo = 1
TCT.V_OptMode = 1
TCT.V_OptModeStart = Y + 1
Case 251, 252, 253, 254
Y += 1
Select Case Asc(Mid(V_Data, Y, 1))
Case 0 'Binary
' Select Case asc(Mid(V_Data, Y - 1, 1))
' case 251: TCT.V_OptBinary = 0
' case 252: If TCT.V_OptBinary = 1 Then TCT.V_OptBinary = 0 Else TCT.V_OptBinary = 1
' case 253: TCT.V_OptBinary = 1
' case 254: TCT.V_OptBinary = 0
' End Select
' Print "Binary: " & asc(Mid(V_Data, Y - 1, 1))
Case 1 'Echo
Select Case Asc(Mid(V_Data, Y - 1, 1))
Case 251: TCT.V_OptEcho = 1
Case 252: TCT.V_OptEcho = 1
Case 253: TCT.V_OptEcho = 1: TSNE_Data_Send(V_TSNEID, Chr(255) & Chr(251) & Chr(1))
Case 254: TCT.V_OptEcho = 0
End Select
' Print "ECHO: " & TCT.V_OptEcho
Case 2 'Transmission & Echoing
Case 3 'Supress GO AHEAD (SGA)
' Select Case asc(Mid(V_Data, Y - 1, 1))
' case 251: TCT.V_OptGoAhead = 0
' case 252: If TCT.V_OptGoAhead = 1 Then TCT.V_OptGoAhead = 0 Else TCT.V_OptGoAhead = 1
' case 253: TCT.V_OptGoAhead = 1
' case 254: TCT.V_OptGoAhead = 0
' End Select
' Print "Go AHEAD: " & asc(Mid(V_Data, Y - 1, 1))
Case 5 'Status
' Select Case asc(Mid(V_Data, Y - 1, 1))
' case 251: TCT.V_OptStatus = 0
' case 252: If TCT.V_OptStatus = 1 Then TCT.V_OptStatus = 0 Else TCT.V_OptStatus = 1
' case 253: TCT.V_OptStatus = 1
' case 254: TCT.V_OptStatus = 0
' End Select
' Print "Status: " & asc(Mid(V_Data, Y - 1, 1))
Case 6 'TIMING-Mark
' Select Case asc(Mid(V_Data, Y - 1, 1))
' case 251: TCT.V_OptTimingMark = 0
' case 252: If TCT.V_OptTimingMark = 1 Then TCT.V_OptTimingMark = 0 Else TCT.V_OptTimingMark = 1
' case 253: TCT.V_OptTimingMark = 1
' case 254: TCT.V_OptTimingMark = 0
' End Select
' Print "Timing-Mark: " & asc(Mid(V_Data, Y - 1, 1))
Case 24 'Terminal Type
Select Case Asc(Mid(V_Data, Y - 1, 1))
Case 251: TSNE_Data_Send(V_TSNEID, Chr(255) & Chr(250) & Chr(24) & Chr(1) & Chr(255) & Chr(240))
Case 252
Case 253
Case 254
End Select
' Print "Terminal-Type: " & asc(Mid(V_Data, Y - 1, 1))
Case 31 'Window Size
Select Case Asc(Mid(V_Data, Y - 1, 1))
Case 251: TSNE_Data_Send(V_TSNEID, Chr(255) & Chr(250) & Chr(31) & Chr(1) & Chr(255) & Chr(240))
Case 252
Case 253
Case 254
End Select
' Print "Window-Size: " & asc(Mid(V_Data, Y - 1, 1))
Case 32 'Terminal Speed
Select Case Asc(Mid(V_Data, Y - 1, 1))
Case 251: TSNE_Data_Send(V_TSNEID, Chr(255) & Chr(250) & Chr(32) & Chr(1) & Chr(255) & Chr(240))
Case 252
Case 253
Case 254
End Select
' Print "Terminal-Speed: " & asc(Mid(V_Data, Y - 1, 1))
Case 33 'Flow-Control
Select Case Asc(Mid(V_Data, Y - 1, 1))
Case 251
Case 252
Case 253
Case 254
End Select
' Print "Flow-Control: " & asc(Mid(V_Data, Y - 1, 1))
Case 35 'Display-Location
Select Case Asc(Mid(V_Data, Y - 1, 1))
Case 251
Case 252
Case 253
Case 254
End Select
' Print "Flow-Control: " & asc(Mid(V_Data, Y - 1, 1))
Case 39 'Environment
Select Case Asc(Mid(V_Data, Y - 1, 1))
Case 251: TSNE_Data_Send(V_TSNEID, Chr(255) & Chr(250) & Chr(39) & Chr(1) & Chr(255) & Chr(240))
Case 252
Case 253
Case 254
End Select
' Print "Environment: " & asc(Mid(V_Data, Y - 1, 1))
Case Else
' Print "OPT: " & asc(mid(V_Data, y, 1)) & " - " & asc(mid(TData, y + 1, 1))
End Select
End Select
Else
If Asc(Mid(V_Data, Y, 1)) = 255 And Asc(Mid(V_Data, Y + 1, 1)) = 250 Then
'Print "OPT_Spec:" & asc(mid(TData, TCT.V_OptModeStart, 1))
Select Case Asc(Mid(V_Data, TCT.V_OptModeStart, 1))
Case 24
TCT.V_ValTerminalType = Mid(V_Data, TCT.V_OptModeStart + 2, Y - TCT.V_OptModeStart - 2)
' Print "Terminal-Type: >" & TCT.V_ValTerminalType & "<"
Case 31
TCT.V_ValWindow_Width = Asc(Mid(V_Data, Y - 4, 1)) * 255 + Asc(Mid(V_Data, Y - 3, 1))
TCT.V_ValWindow_Height = Asc(Mid(V_Data, Y - 2, 1)) * 255 + Asc(Mid(V_Data, Y - 1, 1))
' Print "Window: >" & TCT.V_ValWindow_Width & " x " & TCT.V_ValWindow_Height & "<"
Case 32
TCT.V_ValTerminalSpeed = Mid(V_Data, TCT.V_OptModeStart + 2, Y - TCT.V_OptModeStart - 2)
' Print "Terminal-Speed: >" & TCT.V_ValTerminalSpeed & "<"
Case 35
TCT.V_ValTerminalLocation = Mid(V_Data, TCT.V_OptModeStart, Y - TCT.V_OptModeStart)
' Print "Terminal-Location: >" & TCT.V_ValTerminalLocation & "<"
Case 39
TCT.V_ValTerminalLocation = Mid(V_Data, TCT.V_OptModeStart, Y - TCT.V_OptModeStart)
' Print "Environment: >?<"
End Select
TCT.V_OptModeNeo = 0
TCT.V_OptMode = 0
End If
End If
End If
Mutexlock(G_MUTX_Client)
G_ClientD(ID) = TCT
Mutexunlock(G_MUTX_Client)
Next
End Sub
'-----------------------------------------------------------------------------------------------------
Function CIC4U_Execute Cdecl (Byref V_FromAPID As ULongInt, Byref V_FromAPData As Long, Byref V_FromUserSSID As String, Byref V_CMD As String) As Double Export
CIC4U_Execute = F_BCID(-1)
End Function
'-----------------------------------------------------------------------------------------------------
Function F_MakeBackSpaceString(V_Len As Long) As String
Dim X As Long
Dim O As String
For X = 1 To V_Len
O = O & Chr(8) & " " & Chr(8)
Next
Return O
End Function
'-----------------------------------------------------------------------------------------------------
Function F_MakeColorString(V_Color As Long) As String
'0 = Schwarz
'1 = Rot
'2 = Grün
'3 = Gelb
'4 = Blau
'5 = Lila
'6 = Cyan
'7 = Grau
Return Chr(27) & "[3" & V_Color & "m"
End Function
'-----------------------------------------------------------------------------------------------------
Function F_GetDefConString() As String
Dim D As String
Dim DefID As Long
DefID = C4K->C4A_KernelDefCon()
Dim X As Long
Dim CoID As String
For X = 5 To 1 Step -1
Select Case X
Case 5: CoID = "7"
Case 4: CoID = "4"
Case 3: CoID = "2"
Case 2: CoID = "3"
Case 1: CoID = "1"
End Select
If X <> DefID Then
D = D & Chr(27) & "[40;3" & CoID & "m[" & Str(X) & "]"
Else: D = D & Chr(27) & "[4" & CoID & ";30m[" & Str(X) & "]"
End If
Next
D = D & Chr(27) & "[40;37m"
Return D
End Function