Need a unique gift idea?
A Pastebin account makes a great Christmas gift
SHARE
TWEET

External Monitor Control

Alex1979 Aug 21st, 2013 334 Never
Upgrade to PRO!
ENDING IN00days00hours00mins00secs
 
  1. --<<The program for the control of the drone network, ComputerCraft>>--
  2.              --<<External Monitor  Control, Lua>>--
  3.                --By Aleksandr Kulikov, 2013--
  4.               -- http://pastebin.com/D5ih1eQe --
  5.                 -- pastebin get D5ih1eQe mon_control --
  6.                                
  7. local ver_prog = "0.8.2"
  8. local id_sender = 555
  9. local xMaxTerm, yMaxTerm = term.getSize()
  10. local decor_line_term = string.rep("-", xMaxTerm)
  11.  
  12. --*********************************************************************************
  13. local function clearScreenTerm()
  14.  term.clear()
  15.  term.setCursorPos(1,1)
  16. end
  17.  
  18. --*********************************************************************************
  19. local function clearScreenMon()
  20.  mon.clear()
  21.  mon.setCursorPos(1,1)
  22. end
  23. --*********************************************************************************
  24. local function autorunStartUp()
  25.                
  26.                 if not os.getComputerLabel() then
  27.                         os.setComputerLabel("MonitorEX - "..os.getComputerID())
  28.                 end
  29.                
  30.                 if  fs.exists("startup") then
  31.                           if not fs.exists("startup_backup") then
  32.                                 fs.copy("startup","startup_backup")
  33.                           end
  34.                 end        
  35.                 local file = fs.open ("startup", "w")
  36.                 file.writeLine ("--Edit the file to execute the program: <"..shell.getRunningProgram()..">")
  37.         file.writeLine ("--A backup copy of the file: <startup_backup>")
  38.                 file.writeLine ("shell.run(\""..shell.getRunningProgram().."\")")
  39.         file.close()
  40. end
  41. --*********************************************************************************
  42.  
  43. local function WriteCenter(str)
  44.         local xPos, yPos = mon.getCursorPos()
  45.                 str_long = #str
  46.                 mon.setCursorPos((xMax/2-str_long/2)+1,yPos)
  47.                 mon.write(str)
  48. end
  49.  
  50. --****************************************************************************
  51. local function MonitorOpen()
  52.         local sMonitorSide = nil
  53.                 for n,sSide in ipairs( rs.getSides() ) do
  54.                         if peripheral.getType( sSide ) == "monitor" then       
  55.                                 sMonitorSide = sSide
  56.                                 mon = peripheral.wrap(sMonitorSide, true)
  57.                                 xMax, yMax = mon.getSize()
  58.                                 if xMax ~= 61 or  yMax ~= 19 then
  59.                                         print( "ERROR!" )
  60.                                         print( "Requires an external monitor 3 to 6 blocks!" )
  61.                                         print( "Program stopped." )
  62.                                         print( "ID computer: "..os.getComputerID())                    
  63.                                         error()
  64.                                 end
  65.                                
  66.                                 decor_line = string.rep("-", xMax)
  67.                                 break
  68.                         end
  69.                 end
  70.  
  71.                 if sMonitorSide == nil then
  72.                         print( "Program stopped." )
  73.                         print( "No monitor attached." )
  74.                         print( "ID computer: "..os.getComputerID())
  75.                         error()
  76.         end
  77. end
  78. --****************************************************************************
  79. local function RedNetOpen()
  80.         local sModemSide = nil
  81.                 for n,sSide in ipairs( rs.getSides() ) do
  82.                         if peripheral.getType( sSide ) == "modem" then 
  83.                                 sModemSide = sSide
  84.                                 rednet.open(sModemSide)
  85.                                 gps_x, gps_z, gps_y = gps.locate(1)
  86.                                         if gps_x == nil then
  87.                                                 GPS_signal = "No"
  88.                                         else
  89.                                                 GPS_signal = "Yes"
  90.                                         end
  91.                                 break
  92.                         end
  93.                 end
  94.  
  95.                 if sModemSide == nil then
  96.                         print( "Program stopped.")
  97.                         print( "No modem attached." )
  98.                         print( "ID computer: "..os.getComputerID())
  99.                         error()
  100.         end
  101. end
  102. --*********************************************************************************
  103. local function RedNetClose()
  104.         local sModemSide = nil
  105.                 for n,sSide in ipairs( rs.getSides() ) do
  106.                         if peripheral.getType( sSide ) == "modem" then 
  107.                                 sModemSide = sSide
  108.                                 rednet.close(sModemSide)
  109.                                 break
  110.                         end
  111.                 end
  112.  
  113.                 if sModemSide == nil then
  114.                         print( "Program stopped.")
  115.                         print( "No modem attached." )
  116.                         error()
  117.         end
  118. end
  119.  
  120. --*********************************************************************************
  121. local function ChangeEnterIDserver()
  122.         term.write("Enter ID sender: ")
  123.         id_sender = math.floor(math.abs(tonumber(io.read()) or id_sender))
  124.         local file = fs.open ("id_sender_set.dat", "w")
  125.         file.writeLine (id_sender)
  126.                 file.writeLine ("--The server accepts messages only from this ID.")
  127.     file.close()
  128. end
  129. --*********************************************************************************
  130. local function ReadIDsender()
  131.         if  fs.exists("id_sender_set.dat") then    
  132.                 local file = fs.open ("id_sender_set.dat", "r")
  133.         id_sender = tonumber (file.readLine ( ))
  134.         file.close ( )
  135.         end
  136. end
  137. --*********************************************************************************
  138. local function UpdateThisProg()
  139.     local Code = "D5ih1eQe"
  140.         local File_name = shell.getRunningProgram() --..os.day()
  141.        
  142.         clearScreenMon()
  143.         if not http then
  144.                 print("Pastebin requires http API!!!")
  145.                 print("Set enable API_http in ComputerCraft.cfg")
  146.                 sleep(5)
  147.                 return
  148.         end
  149.    
  150.         print("Connecting to pastebin.com... ")
  151.         local response = http.get(
  152.                 "http://pastebin.com/raw.php?i="..textutils.urlEncode(Code)
  153.                 )
  154.                
  155.         if response then
  156.                 print("Success.")
  157.                
  158.                 local sResponse = response.readAll()
  159.                 response.close()
  160.                
  161.                 local file = fs.open(File_name, "w")
  162.                 file.write( sResponse )
  163.                 file.close()
  164.                
  165.                 print("Downloaded as "..File_name)
  166.                 sleep(1)
  167.                         for i = 1, 6 do
  168.                         clearScreenTerm()
  169.                                 print("Reboot system "..(6-i).." sec...")
  170.                                 sleep(1)
  171.                         end
  172.                 os.reboot()
  173.         else
  174.                 print( "Failed." )
  175.         end    
  176.         sleep(5)
  177. end
  178.  
  179.  
  180. --*********************************************************************************
  181. local function Header()
  182.         clearScreenMon()
  183.         clearScreenTerm()
  184.         WriteCenter("Server ID: "..os.getComputerID()..", Sender ID: "..id_sender..", ver. "..ver_prog)
  185.         mon.setCursorPos(1,2)
  186.         WriteCenter("[Q]-exit, [I]-id sender change, [U]-update, DPI: "..xMax.."x"..yMax)
  187.         print("Server ID "..os.getComputerID().." is ready. Current ID sender: "..id_sender)
  188.         print(decor_line_term)
  189.         print("[Q]-exit, [I]-ID sender change, [U]-update")
  190.         print("Press CTRL+R to restart")
  191.         mon.setCursorPos(1,3)
  192.         mon.write(decor_line)
  193.         mon.setCursorPos(1,yMax-1)
  194.         mon.write(decor_line)
  195.         mon.setCursorPos(1,yMax)
  196.         mon.clearLine()
  197.         mon.write("Distance to sender: ")
  198.         mon.setCursorPos(xMax-9,yMax)
  199.         mon.write("[GPS: "..GPS_signal.."]")
  200.         mon.setCursorPos(1,4)
  201.        
  202. end
  203. --*********************************************************************************
  204. local function ProgExit()
  205.         clearScreenMon()
  206.         clearScreenTerm()
  207.         print("Server OFF! ID: "..os.getComputerID())
  208.         print("Press CTRL+R to restart")
  209.         mon.setCursorPos(1,yMax/2-1)
  210.         WriteCenter("Server OFF! ID: "..os.getComputerID())
  211.         mon.setCursorPos(1,yMax/2)
  212.         WriteCenter("Press CTRL+R to restart")
  213.         mon.setCursorPos(1,yMax)
  214.         RedNetClose()
  215. end
  216. --*********************************************************************************
  217. local function AnimationStart()
  218.         clearScreenTerm()
  219.         print("Start program!")
  220.         term.write("Loading")
  221.                 for i = 1, 5 do
  222.                         term.write(".")
  223.                         sleep(1.5)
  224.                 end
  225.                 term.write("OK")
  226.                 print()
  227.                 sleep(1)
  228. end            
  229. --*********************************************************************************
  230. AnimationStart()
  231. autorunStartUp()
  232. MonitorOpen()
  233. RedNetOpen()
  234. clearScreenMon()
  235. clearScreenTerm()
  236. ReadIDsender() 
  237. Header()
  238.  
  239.         while  true do
  240.                 local e, p1, p2, p3, p4, p5 = os.pullEvent()
  241.                 xPos, yPos = mon.getCursorPos()
  242.                 local sender, msg, distance = p3, p4, p5
  243.                 if e == "modem_message" then
  244.                                         if sender == id_sender then -- receiving messages from a particular sender ID
  245.                                        
  246.                                                 if msg ~= "new_data_packet" and msg ~= "line"  and msg ~= "clear_mon" then
  247.                                                         mon.clearLine()
  248.                                                         mon.write(msg)
  249.                                                         mon.setCursorPos(1,yPos+1)
  250.                                                         xPos, yPos = mon.getCursorPos()
  251.                                                         mon.setCursorPos(1,yMax)
  252.                                                         mon.clearLine()
  253.                                                         mon.write("Distance to sender: "..math.floor(distance).." meters.")
  254.                                                         mon.setCursorPos(xMax-9,yMax)
  255.                                                         mon.write("[GPS: "..GPS_signal.."]")
  256.                                                         mon.setCursorPos(xPos,yPos)
  257.                                                 end
  258.                                                
  259.                                                         if msg == "new_data_packet" then
  260.                                                                 mon.setCursorPos(1,4)
  261.                                                         end
  262.                                                 if msg == "line" then
  263.                                                         mon.write(decor_line)
  264.                                                         xPos, yPos = mon.getCursorPos()
  265.                                                         mon.setCursorPos(1,yPos+1)
  266.                                                 end
  267.                                                
  268.                                                 if msg == "clear_mon" then
  269.                                                         Header()
  270.                                                 end
  271.                                         end
  272.                 elseif e == "key" then
  273.                         local key = p1
  274.                         if key == keys.i then
  275.                                 clearScreenMon()
  276.                                 os.pullEvent("char")
  277.                                 ChangeEnterIDserver()
  278.                                 Header()
  279.                         elseif key == keys.u then
  280.                                 os.pullEvent("char")
  281.                                 UpdateThisProg()       
  282.                         elseif key == keys.q then
  283.                                 os.pullEvent("char")
  284.                                 ProgExit()
  285.                                 break
  286.                         end
  287.                 end
  288.        
  289.                
  290. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top