bmk_bank.bmx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. Strict
  2. Import "bmk_config.bmx"
  3. Import Pub.ZLib
  4. Function CompressBank:TBank( bank:TBank )
  5. Local size=bank.Size()
  6. Local out_size=size+size/10+32
  7. Local out:TBank=TBank.Create( out_size )
  8. compress out.Buf()+4,out_size,bank.Buf(),size
  9. out.PokeByte 0,size
  10. out.PokeByte 1,size Shr 8
  11. out.PokeByte 2,size Shr 16
  12. out.PokeByte 3,size Shr 24
  13. out.Resize out_size+4
  14. Return out
  15. End Function
  16. Function UncompressBank:TBank( bank:TBank )
  17. Local out_size
  18. out_size:|bank.PeekByte(0)
  19. out_size:|bank.PeekByte(1) Shl 8
  20. out_size:|bank.PeekByte(2) Shl 16
  21. out_size:|bank.PeekByte(3) Shl 24
  22. Local out:TBank=TBank.Create( out_size )
  23. uncompress out.Buf(),out_size,bank.Buf()+4,bank.Size()-4
  24. Return out
  25. End Function
  26. Function SplitUrl( url$,server$ Var,file$ Var )
  27. Local i=url.Find( "/",0 )
  28. If i<>-1
  29. server=url[..i]
  30. file=url[i..]
  31. Else
  32. server=url
  33. file="/"
  34. EndIf
  35. End Function
  36. Function HTTPGetBank:TBank( url$ )
  37. Local server$,file$
  38. SplitUrl url,server,file
  39. Local t_server$=server
  40. If opt_proxy t_server=opt_proxy
  41. Local t_port=80
  42. If opt_proxyport t_port=opt_proxyport
  43. Local stream:TStream=TSocketStream.CreateClient( t_server,t_port )
  44. If Not stream Return
  45. stream.WriteLine "GET http://"+url+" HTTP/1.0"
  46. stream.WriteLine "Host: "+server
  47. stream.WriteLine ""
  48. While Not stream.Eof()
  49. Local t$=stream.ReadLine()
  50. If Not t Exit
  51. Wend
  52. Local bank:TBank=TBank.Create(0)
  53. Local bank_stream:TStream=TBankStream.Create( bank )
  54. CopyStream stream,bank_stream
  55. bank_stream.Close
  56. stream.Close
  57. Return bank
  58. End Function
  59. Function HTTPPostBank$( bank:TBank,url$ )
  60. Local server$,file$
  61. SplitUrl url,server,file
  62. Local t_server$=server
  63. If opt_proxy t_server=opt_proxy
  64. Local t_port=80
  65. If opt_proxyport t_port=opt_proxyport
  66. Local stream:TStream=TSocketStream.CreateClient( t_server,t_port )
  67. If Not stream Return
  68. stream.WriteLine "POST http://"+url+" HTTP/1.0"
  69. stream.WriteLine "Host: "+server
  70. stream.WriteLine "Content-Type: application/octet-stream"
  71. stream.WriteLine "Content-Length: "+bank.Size()
  72. stream.WriteLine ""
  73. Local bank_stream:TStream=TBankStream.Create( bank )
  74. CopyStream bank_stream,stream
  75. bank_stream.Close
  76. While Not stream.Eof()
  77. Local t$=stream.ReadLine()
  78. If Not t Exit
  79. Wend
  80. Local r$
  81. While Not stream.Eof()
  82. Local t$=stream.ReadLine()
  83. r:+t+"~n"
  84. Wend
  85. stream.Close
  86. Return r
  87. End Function