This is a read-only snapshot of the ComputerCraft forums, taken in April 2020.
madscientist712's profile picture

bios:366 [string "startup"] : 164: 'until' expected "HELP!"

Started by madscientist712, 23 February 2015 - 02:56 PM
madscientist712 #1
Posted 23 February 2015 - 03:56 PM
I have added a code to my computer to add 2 touch screen buttons but it shows up with "bios:366 [string "startup"] : 164: 'until' expected (to close 'repeat' at line 147). I'm have used cc before but am not that good. How do i fix this error? here is my code:

functionButton() -- This is a comment. It's for humans only. All
-- the green text is not run by the program

mouseWidth = 0
mouseHeight = 0
-- this creates two variables called mouseWidth
-- and mouseHeight and sets them to 0. We will
-- use them later

monitor = peripheral.wrap("back")
-- you need this line! It tells the computer
-- the monitor is on top. Change it if you want
-- the monitor on a different side of the computer
monitor.setTextScale(2)
monitor.clear()
-- this clears the monitor screen

monitor.setCursorPos(1,1)
-- this sets the cursor position to the top left
-- corner of the monitor

w,h=monitor.getSize()
-- gets the width and the height of the monitor
-- and stores the numbers as w and h.
-- w and h are variables

print(w)
print(h)
-- prints the w and h to the computer screen.
-- You can see the monitor width is 7, height is 5
-- It starts in the top left corner like a book.  


-- Now to draw the two buttons
-- Im english so I write colour but you can change
-- it to color. It works the same.


monitor.setBackgroundColour((colours.lime))
-- this changes the background colour of the text
-- to lime green.

monitor.setCursorPos(2,2)
-- this sets the start position for writing the 1st
-- button on the monitor. It puts it 2 in from the
-- left and 2 down from the top.

monitor.write(" ON ")
-- this writes the word ON on the monitor. See the
-- blank spaces before and after. These will be
-- green. Our button is 5 letters long

monitor.setCursorPos(2,4)
-- this sets the next writing postition to 2 from
-- the left and 4 down from the top. Just under
-- the 1st button

monitor.write(" OFF ")
-- this writes OFF but again its 5 long in total
-- with the spaces

monitor.setBackgroundColour((colours.black))
-- now we have drawn our buttons we should set
-- the text background colour back to black


-- Now we need to check if the button is clicked

-- First we are going to create a function called
-- checkClickPosition(). A function will not run
-- until you ask for it.

-- We know the first button starts at 2 from the
-- top and 2 from the left. We also know it is 5
-- spaces long. This means the button ends
-- at width 7

-- We will be told which width and
-- height the click happened at.
-- If the width position is greater than 1 AND
-- less than 8 we have clicked somewhere between
-- 2 and 7.

-- If this is true we can then check the height
-- position. Button one is at height 2 and button
-- two is at height 4.

-- This means that if the width is greater than 1
-- AND the width is less than 8 AND the height
-- equals 2 we have clicked button 1

-- If the the width is greater than 1 AND the width
-- is less than 8 AND the height equals 4 we have
-- clicked button 2

-- now to write this as a function
-- Functions are written like this

--	 function exampleFunction()
--	   print("Hello")
--	   sleep(10)
--	   print("Goodbye")
--	 end

-- Now when you write exampleFunction() the program
-- will print hello, sleep for 10 ticks and then
-- print Goodbye.
-- This is useful for making your programs easier
-- to understand

function checkClickPosition()
  if mouseWidth > 1 and mouseWidth < 8 and mouseHeight == 2 then
	-- button one clicked
	rs.setOutput("right",true)
	-- turns redstone connected to the right on
  elseif mouseWidth > 1 and mouseWidth < 8 and mouseHeight == 4 then
	-- button two clicked
	rs.setOutput("right",false)
	-- turns redstone connected to the left off
  end -- ends the if loop
end -- ends the function

-- this function does nothing until you write
-- checkClickPostion(). We will be doing this below
-- It then checks the click position and turns the
-- lamp on if button one is clicked or turns the
-- lamp off if button two is clicked  

-- OK. Now we need to check if a click happens
-- we will use a repeat-until loop.
-- In the loop we we use a os.pullEvent().
-- an os.pullEvent() gives you different info
-- depending on the event type. We will mainly
-- check the "monitor_touch" event.

-- In the second line you will see
-- event,p1,p2,p3 = os.pullEvent()
-- if the event is a click on the monitor it
-- will give us 4 bits of info:
--	event will be "monitor_touch"	
--	p1 will be the side the monitor is on (top)
--	p2 is the width postion of the click
--	p3 is the height postition of the click  



repeat
-- repeat runs a loop of code.

  event,p1,p2,p3 = os.pullEvent()
  -- this line tells the computer to wait until
  -- an event happens. We are waiting for a
  -- touchscreen event

   if event=="monitor_touch" then
   -- this checks to see if the event was a
   -- touchscreen event

	 mouseWidth = p2 -- sets mouseWidth
	 mouseHeight = p3 -- and mouseHeight
	 checkClickPosition() -- this runs our function
	 end   -- the end of the "if loop".

end




until event=="char" and p1==("x")
-- this is the end of the "repeat loop". This will
-- stop the repeat loop if a "char" event happens
-- A char event means you press a character on
-- the keyboard. This line is looking for the x key
   end

while true do
  local reactor1 = peripheral.wrap("BigReactors-Reactor_0")
  local mon = peripheral.wrap("back")
  mon.clear()

  -- Begin Reactor 1
  mon.setCursorPos(1,8)
  mon.setTextColor(colors.white)
  mon.write("Reactor #: ")
  mon.setTextColor(colors.lime)
  mon.write("1")

  mon.setCursorPos(1,9)
  mon.setTextColor(colors.white)
  mon.write("Active: ")
  mon.setTextColor(colors.lime)
  mon.write(reactor1.getActive())

  mon.setCursorPos(1,10)
  mon.setTextColor(colors.white)
  mon.write("RF/T: ")  
  mon.setTextColor(colors.lime)
  mon.write(math.floor(reactor1.getEnergyProducedLastTick()))

  mon.setCursorPos(1,11)
  mon.setTextColor(colors.white)
  mon.write("RF Stored: ")
  mon.setTextColor(colors.lime)
  mon.write(math.floor(reactor1.getEnergyStored()))

  mon.setCursorPos(1,12)
  mon.setTextColor(colors.white)
  mon.write("Casing Heat: ")
  mon.setTextColor(colors.lime)
  mon.write(math.floor(reactor1.getCasingTemperature()))

  mon.setCursorPos(1,13)
  mon.setTextColor(colors.white)
  mon.write("Fuel Heat: ")
  mon.setTextColor(colors.lime)
  mon.write(math.floor(reactor1.getFuelTemperature()))
  -- End Reactor 1

sleep(5)

Edited by
Quintuple Agent #2
Posted 23 February 2015 - 07:52 PM
The problem is your repeat block starting at 147, you have an end statement that does not belong on line 164, you already close out your if statement on line 162 and your until to close off the repeat is on line 169, so the end on 164 needs to be removed
Also you have another random end statement that needs to be removed on 174 and you also need to add an end statement for you while loop starting on line 176
Spoiler

--line 146
repeat --line 147
-- repeat runs a loop of code.
  event,p1,p2,p3 = os.pullEvent()
  -- this line tells the computer to wait until
  -- an event happens. We are waiting for a
  -- touchscreen event
   if event=="monitor_touch" then
   -- this checks to see if the event was a
   -- touchscreen event
		 mouseWidth = p2 -- sets mouseWidth
		 mouseHeight = p3 -- and mouseHeight
		 checkClickPosition() -- this runs our function
		 end   -- the end of the "if loop".
end -- <-This one needs to be removed, it is closing the repeat loop right now


until event=="char" and p1==("x") -- This will close the loop
-- this is the end of the "repeat loop". This will
-- stop the repeat loop if a "char" event happens
-- A char event means you press a character on
-- the keyboard. This line is looking for the x key
   end -- <-This also needs to be removed
Edited on 23 February 2015 - 06:58 PM