/*
The Big Bad NT Operating System
*/
/datum/file/program/ntos
name = "Nanotrasen Operating System"
extension = "prog"
active_state = "ntos"
var/obj/item/part/computer/storage/current // the drive being viewed, null for desktop/computer
var/fileop = "runfile"
/*
Generate a basic list of files in the selected scope
*/
/datum/file/program/ntos/proc/list_files()
if(!computer || !current) return null
return current.files
/datum/file/program/ntos/proc/filegrid(var/list/filelist)
var/dat = "
"
var/i = 0
for(var/datum/file/F in filelist)
if(!F.hidden_file)
i++
if(i==1)
dat += ""
if(i>= 6)
i = 0
dat += "
"
continue
dat += {"

[F.name]
| "}
dat += "
"
return dat
//
// I am separating this from filegrid so that I don't have to
// make metadata peripheral files
//
/datum/file/program/ntos/proc/desktop(var/peripheralop = "viewperipheral")
var/dat = ""
var/i = 0
var/list/peripherals = list(computer.hdd,computer.floppy,computer.cardslot)
for(var/obj/item/part/computer/C in peripherals)
if(!istype(C)) continue
i++
if(i==1)
dat += ""
if(i>= 6)
i = 0
dat += "
"
continue
dat += {"
\icon[C]
[C.name]
| "}
dat += "
"
return dat
/datum/file/program/ntos/proc/window(var/title,var/buttonbar,var/content)
return {"
[title]

[buttonbar]
[content]
"}
/datum/file/program/ntos/proc/buttonbar(var/type = 0)
switch(type)
if(0) // FILE OPERATIONS
return {""}
/datum/file/program/ntos/interact()
if(!interactable())
return
var/dat = {"
Nanotrasen Operating System
"}
dat += generate_status_bar()
var/list/files = list_files()
if(current)
dat +=window(current.name,buttonbar(),filegrid(files))
else
dat += desktop()
dat += "
"
usr << browse(dat, "window=\ref[computer];size=670x510")
onclose(usr, "\ref[computer]")
// STATUS BAR
// Small 16x16 icons representing status of components, etc.
// Currently only used by battery icon
// TODO: Add more icons!
/datum/file/program/ntos/proc/generate_status_bar()
var/dat = ""
// Battery level icon
switch(computer.check_battery_status())
if(-1)
dat += "
"
if(0 to 5)
dat += "
"
if(6 to 20)
dat += "
"
if(21 to 40)
dat += "
"
if(41 to 60)
dat += "
"
if(61 to 80)
dat += "
"
if(81 to 100)
dat += "
"
dat += "
"
return dat
/datum/file/program/ntos/Topic(href, list/href_list)
if(!interactable() || ..(href,href_list))
return
if("viewperipheral" in href_list) // open drive, show status of peripheral
var/obj/item/part/computer/C = locate(href_list["viewperipheral"])
if(!istype(C) || (C.loc != src.computer))
return
if(istype(C,/obj/item/part/computer/storage))
current = C
interact()
return
// else ???
if(istype(C,/obj/item/part/computer/cardslot))
if(computer.cardslot.reader != null)
computer.cardslot.remove()
if(istype(C,/obj/item/part/computer/cardslot/dual))
if(computer.cardslot.writer != null)
computer.cardslot.remove(computer.cardslot.writer)
if(computer.cardslot.reader != null)
computer.cardslot.remove(computer.cardslot.reader)
interact()
return
// distinct from close, this is the file dialog window
if("winclose" in href_list)
current = null
interact()
return
#undef MAX_ROWS
#undef MAX_COLUMNS