Forum Discussion

jbrave's avatar
jbrave
Channel Surfer
16 years ago

If / End If still biting me on the butt

I"m pretty sure I have the correct amount of End If's here, but whenever I save it I get a syntax error for the End While line. If I tack three End If's on the end before the end while, then the error goes away, but I become more confused. I just started re-writing my app all over again and this is really frustrating me. Wish there was some proper "Unterminated If on Line #X" error messages from the compiler.

There may be other issues in this code, but I'm only concerned about writing proper if then else else if end if statements.

function posterscr(posterlist as object) as object

poster.SetListDisplayMode("best-fit")
poster.SetContentList(PosterList)

' if isauthenticated then
' categories=["Search","Explore", "Tracks", "About","You"]
' else
categories=["Search","Explore"," Tracks","About"]
' end if

poster.SetListNames(categories)
poster.SetListStyle("flat-category")
poster.SetListDisplayMode("best-fit")
poster.SetFocusedList(0)
poster.SetFocusedListItem(0)
poster.show()

while true

msg=wait(0,port)
msgtype=type(msg)
message=msg.getmessage()
idx = msg.GetIndex()

if type(msg) = "roPosterScreenEvent" then


if msg.isScreenClosed() then
print "screen closed exit app"
return -1
end if

if msg.islistSelected() and idx=5 and isauthenticated=false then
authenticate()
return -1
end if

if msg.isListFocused() then
m.currentcategory=idx ' assign category to global variable
'figure out which category was selected
if idx = 0 then
print "search selected"
' handle search section selected
else if idx = 1 then
print "explore selected"
'handle explore section selected


else if idx = 2 then
print "top tracks selected"
'handle top tracks selected
'call display top tracks
else if idx = 3 then
print "about this app selected"
'show the about screen
end if
end if

if msg.isListItemSelected() then

if m.currentcategory = 0 then 'we are in search section
if idx = 0 then
posterlist.Append(searchTracks())
end if

if idx = 1 then
posterlist.Append(searchPeople())
end if

if idx = 2 then
posterlist.Append(searchGroups())
end if

if idx = 3 then
posterlist.Append(searchGenre())
end if

else
if m.currentcategory=1 then 'we are in Explore section
print "explore section bla bla"
else if m.currentcategory=2 then 'we are in Hot section
posterlist.SetContentList(GetHotStuff())
else if m.currentcategory=3 then 'we are in about section
posterlist.setContentList(About())
else if m.currentcategory=4 then 'we are in you section
print "its all you babe"
end if
end if
end while

end function

4 Replies

  • You have two issues that I see. First is on line 80. That "If" should be on the same line as the "Else" preceding it. Second is on line 90. You need an "End If" there to close the main "If type()" if/then.
  • Didn't have a chance to test it, but see if this doesn't work for you. Just cleaned up a few items that i noticed with some formatting...

    function posterscr(posterlist as object) as object

    poster.SetListDisplayMode("best-fit")
    poster.SetContentList(PosterList)

    ' if isauthenticated then
    ' categories=["Search","Explore", "Tracks", "About","You"]
    ' else
    categories=["Search","Explore"," Tracks","About"]
    ' end if

    poster.SetListNames(categories)
    poster.SetListStyle("flat-category")
    poster.SetListDisplayMode("best-fit")
    poster.SetFocusedList(0)
    poster.SetFocusedListItem(0)
    poster.show()

    while true

    msg=wait(0,port)
    msgtype=type(msg)
    message=msg.getmessage()
    idx = msg.GetIndex()

    if type(msg) = "roPosterScreenEvent" then
    if msg.isScreenClosed() then
    print "screen closed exit app"
    return -1
    else if msg.islistSelected() and idx=5 and isauthenticated=false then
    authenticate()
    return -1
    else if msg.isListFocused() then
    m.currentcategory=idx ' assign category to global variable
    'figure out which category was selected
    if idx = 0 then
    print "search selected"
    ' handle search section selected
    else if idx = 1 then
    print "explore selected"
    'handle explore section selected
    else if idx = 2 then
    print "top tracks selected"
    'handle top tracks selected
    'call display top tracks
    else if idx = 3 then
    print "about this app selected"
    'show the about screen
    end if
    else if msg.isListItemSelected() then
    if m.currentcategory = 0 then 'we are in search section
    if idx = 0 then
    posterlist.Append(searchTracks())
    else if idx = 1 then
    posterlist.Append(searchPeople())
    else if idx = 2 then
    posterlist.Append(searchGroups())
    else if idx = 3 then
    posterlist.Append(searchGenre())
    end if
    else
    if m.currentcategory=1 then 'we are in Explore section
    print "explore section bla bla"
    else if m.currentcategory=2 then 'we are in Hot section
    posterlist.SetContentList(GetHotStuff())
    else if m.currentcategory=3 then 'we are in about section
    posterlist.setContentList(About())
    else if m.currentcategory=4 then 'we are in you section
    print "its all you babe"
    end if
    end if
    end if
    end if
    end while

    end function
  • jbrave's avatar
    jbrave
    Channel Surfer
    Wow, there were a few things in there that were problems, thanks for all the helpful suggestions. It is sooooo easy to make mistakes with IF/THEN/ELSE statements, mostly stupid things like accidentally putting the Then on the next line which are really hard to see.

    - Joel
  • Consistent indentation helps a lot. Note in your first example that the end while and end function are two levels of indentation away, instead of one. That's a dead ringer that you wither didn't indent/unindent correctly at a point, or are missing a block closing statement.

    I find what helps me most, in any language, is to immediately write the block's ending statement after writing the opening, and then moving up and indenting to write in the complete block I just created. That way, I never have to remember to close a block, just to move past the existing close statement, which is easy to see.