require "actions" changed = false changedBook = false book = 1 nobook = false path = "/.rockbox/rocks/apps/pb/book " names,numbers,books = {},{},{} function contactList() selected = 0 while true do selected = rb.do_menu(books[book], names, selected, false) if selected == -2 then selected = 0 showMenu() elseif selected >= 0 and table.getn(names) > 0 then while true do rb.splash(0, numbers[selected + 1]) a = rb.get_action(rb.contexts.CONTEXT_STD,0) if a == rb.actions.ACTION_NONE then else if a == rb.actions.ACTION_STD_PREV then selected = selected - 1 elseif a == rb.actions.ACTION_STD_NEXT then selected = selected + 1 elseif a == rb.actions.ACTION_STD_CANCEL then selected = 0 showMenu() end break end end end end end function showMenu() selectedMenu = 0 while true do if nobook then selectedMenu = rb.do_menu("Phone Book Menu",{"Create Book", "Quit"}, nil, true) if selectedMenu == -2 then return elseif selectedMenu == 0 then createBook() elseif selectedMenu == 1 then saveEntries() saveBooks() os.exit() end return else selectedMenu = rb.do_menu("Menu",{"Add Entry","Edit Entry", "Delete Entry", "Switch Book", "Create Book","Delete Book", "Quit"}, selectedMenu, true) end if selectedMenu == -2 then return elseif selectedMenu == 0 then addEntry() elseif selectedMenu == 1 then editEntry() elseif selectedMenu == 2 then deleteEntry() elseif selectedMenu == 3 then if switchBook(false) then selectedMenu = 0 return end elseif selectedMenu == 4 then createBook() elseif selectedMenu == 5 then deleteBook() elseif selectedMenu == 6 then saveEntries() saveBooks() os.exit() end end end function addEntry() name = "" number = "" x = 0 while true do x = rb.do_menu("Enter Information",{"Name","Number","Continue..."},x, false) if x == -2 then rb.splash(50, "Cancelled") return elseif x == 0 then str = rb.kbd_input(name) if str ~= nil then name = str end elseif x == 1 then str = rb.kbd_input(number) if str ~= nil then number = str end elseif x == 2 then if name == nil or name == "" then rb.splash(50, "No Name") elseif number == nil or number == "" then rb.splash(50, "No Number") else i = 1 while names[i] ~= nil do if names[i] == name then del = rb.gui_syncyesno_run({name.." exists.", "Overwrite?"}) if del == 1 then return else table.remove(names, i) table.remove(numbers, i) break end end i = i + 1 end break end end end table.insert(names,name) table.sort(names) changed = true n = 1 while names[n] ~= nil do if names[n] == name then break end n = n + 1 end index = table.getn(numbers) if index == 0 then numbers[1] = number elseif n > index then numbers[n] = number else while index > 0 do numbers[index+1] = numbers[index] if index == n then numbers[index] = number return end index = index - 1 end numbers[1] = number end end function editEntry() e = rb.do_menu("Edit", names, nil, false) if e < 0 or names[1] == nil then rb.splash(50, "Cancelled") return else name = names[e +1 ] number = numbers[e +1 ] a = 0 while true do a = rb.do_menu("Edit Information",{"Name" ,"Number", "Continue..."},a,false) if a == -2 then rb.splash(50, "Cancelled") return elseif a == 0 then str = rb.kbd_input(name) if str ~= nil then name = str end elseif a == 1 then str = rb.kbd_input(number) if str ~= nil then number = str end elseif a == 2 then if name == nil or name == "" then rb.splash(50, "No Name") elseif number == nil or number == "" then rb.splash(50, "No Number") else break end end end if name == names[e+1] and number == numbers[e+1] then return end i = 1 while names[i] ~= nil do if names[i] == name and name ~= names[e+1] then del = rb.gui_syncyesno_run({name.." exists.", "Overwrite?"}) if del == 1 then return else table.remove(names,i) table.remove(numbers,i) break end end i = i + 1 end end if name == names[e+1] then numbers[e+1] = number else table.remove(names,e+1) table.remove(numbers,e+1) table.insert(names,name) table.sort(names) changed = true n = 1 while names[n] ~= nil do if names[n] == name then break end n = n + 1 end index = table.getn(numbers) if index == 0 then numbers[1] = number elseif n > index then numbers[n] = number else while index > 0 do numbers[index+1] = numbers[index] if index == n then numbers[index] = number return end index = index - 1 end numbers[1] = number end end end function deleteEntry() select = rb.do_menu("Delete", names, nil, false) if select < 0 or names[1] == nil then rb.splash(50, "Cancelled") return else del = rb.gui_syncyesno_run({"Delete?",names[select + 1]}) if del == 0 then table.remove(names, select + 1) table.remove(numbers, select + 1) changed = true end end end function switchBook(start) s = rb.do_menu("Select Book", books, book - 1, false) if s < 0 then if not start then rb.splash(50, "Cancelled") end return false else saveEntries() book = s + 1 names,numbers = {},{} loadEntries() changed = false end return true end function createBook() name = rb.kbd_input("") if name == nil or name == "" then return end if name == "No Book" then rb.splash(200, "Choose a differant name.") createBook() return end saveEntries() i = 1 while books[i] ~= nil do if books[i] == name then del = rb.gui_syncyesno_run({name.." exists.", "Overwrite?"}) if del == 1 then return else table.remove(books,i) break end end i = i + 1 end if nobook then books[1] = name nobook = false else table.insert(books, name) end book = table.getn(books) file = io.open(path..book..".pb", "w+") file:close() names, numbers = {}, {} changedBook = true end function deleteBook() s = rb.do_menu("Delete Book", books, nil, false) if s < 0 then rb.splash(50, "Cancelled") return end del = rb.gui_syncyesno_run({"Delete book?", books[s+1]}) if del == 1 then return end rb.remove(string.format("%s%d%s",path,s+1,".pb")) table.remove(books, s+1) while rb.file_exists(string.format("%s%d%s",path,s+2,".pb")) do rb.rename(string.format("%s%d%s",path,s+2,".pb"),string.format("%s%d%s",path,s+1,".pb")) s = s + 1 end if book > table.getn(books) then book = table.getn(books) end if book == 0 then books[1]= "No Book" book = 1 nobook = true end changedBook = true loadEntries() end function loadEntries() names, numbers = {}, {} file = io.open(path..book..".pb") if file == nil then return end str = file:read("*line") while str ~= nil do table.insert(names, str) table.insert(numbers, file:read("*line")) str = file:read("*line") end file:close() changed = false end function saveEntries() if not changed then return end file = io.open(path..book..".pb", "w+") i = 1 while names[i] ~= nil do file:write(names[i]) file:write("\n") file:write(numbers[i]) file:write("\n") i = i + 1 end file:close() names, numbers = {}, {} end function loadBooks() names, numbers = {}, {} file = io.open("/.rockbox/rocks/apps/pb/books.pb") if file == nil then i = rb.gui_syncyesno_run({"Install Setup?","/.rockbox/rocks/apps/pb/"}) if i == 1 then os.exit() end luadir.mkdir("/.rockbox/rocks/apps/pb") file = io.open("/.rockbox/rocks/apps/pb/books.pb", "w+") end str = file:read("*line") while str ~= nil do table.insert(books, str) str = file:read("*line") end file:close() if table.getn(books) == 0 then books[1] = "No Book" nobook = true end end function saveBooks() if not changedBook then return end file = io.open("/.rockbox/rocks/apps/pb/books.pb", "w+") if books[1] == "No Book" then else file:write(table.concat(books,"\n")) end file:close() end loadBooks() loadEntries() if nobook then showMenu() elseif books[2] ~= nil then switchBook(true) end contactList()