/datum/computer/file/pda_program/os proc receive_os_command(list/command_list) if((!src.holder) || (!src.master) || (!command_list) || !(command_list["command"])) return 1 if((!istype(holder)) || (!istype(master))) return 1 if(!(holder in src.master.contents)) if(master.active_program == src) master.active_program = null return 1 return 0 //Main os program: Provides old pda interface and four programs including file browser, notes, messenger, and atmos scan main_os name = "ThinkOS 7" size = 8.0 var/mode = 0 //Note vars var/note = "Congratulations, your station has chosen the Thinktronic 5150 Personal Data Assistant!" var/note_mode = 0 //0 For note editor, 1 for note browser var/datum/computer/file/text/note_file = null //If set, save to this file. //Messenger vars var/list/detected_pdas = list() var/message_on = 1 var/message_silent = 0 //To beep or not to beep, that is the question var/message_mode = 0 //0 for pda list, 1 for messages var/message_tone = "beep" //Custom ringtone var/message_note = null //Current messages in memory (Store as separate file only later??) //File browser vars var/datum/computer/folder/browse_folder = null var/datum/computer/file/clipboard = null //Current file to copy receive_os_command(list/command_list) if(..()) return //world << "[command_list["command"]]" return return_text() if(..()) return var/dat = src.return_text_header() switch(src.mode) if(0) dat += "

PERSONAL DATA ASSISTANT

" dat += "Owner: [src.master.owner]

" dat += "

General Functions

" dat += "" dat += "

Utilities

" dat += "" if(1) //Note Program. Can save/load note files. dat += "

Notekeeper V2.5

" if(!src.note_mode) dat += "Edit" dat += " | New File" dat += " | Save" dat += " | Load
" dat += src.note else dat += " Back" dat += " | \[[src.holding_folder.holder.file_amount - src.holding_folder.holder.file_used]\] Free
" dat += "" for(var/datum/computer/file/text/T in src.holding_folder.contents) dat += "" dat += "" dat += "" dat += "
[T.name][T.extension]Length: [T.data ? (length(T.data)) : "0"]
" if(2) //Messenger. Uses Radio. Is a messenger. //TO-DO: ~file sharing~ src.master.overlays = null //Remove existing alerts dat += "

SpaceMessenger V4.0.5

" if (!src.message_mode) dat += "Ringer: [src.message_silent == 1 ? "Off" : "On"] | " dat += "Send / Receive: [src.message_on == 1 ? "On" : "Off"] | " dat += "Set Ringtone | " dat += "Messages
" dat += "Scan
" dat += "Detected PDAs
" dat += "" if (count == 0) dat += "None detected.
" else dat += "Clear | " dat += "Back
" dat += "

Messages

" dat += src.message_note dat += "
" if(3) //File Browser. //To-do(?): Setting "favorite" programs to access straight from main menu //Not sure how needed it is, not like they have to go through 500 subfolders or whatever if((!src.browse_folder) || !(src.browse_folder.holder in src.master)) src.browse_folder = src.holding_folder dat += " | Paste" dat += " | Drive: " dat += "\[[src.browse_folder.holder == src.master.hd ? "MAIN" : "CART"]\]
" dat += "Contents of [browse_folder] | Drive ID:\[[src.browse_folder.holder.title]]
" dat += "Used: \[[src.browse_folder.holder.file_used]/[src.browse_folder.holder.file_amount]\]
" dat += "" for(var/datum/computer/file/F in browse_folder.contents) if(F == src) dat += "" continue dat += "" dat += "" dat += "" dat += "" dat += "" dat += "" dat += "" dat += "
SystemSize: [src.size]SYSTEM
[F.name]Size: [F.size][F.extension]DelRenameCopy
" if(4) //Atmos Scanner dat += "

Atmospheric Readings

" var/turf/T = get_turf_or_move(get_turf(src.master)) if (isnull(T)) dat += "Unable to obtain a reading.
" else var/datum/gas_mixture/environment = T.return_air() var/pressure = environment.return_pressure() var/total_moles = environment.total_moles() dat += "Air Pressure: [round(pressure,0.1)] kPa
" if (total_moles) var/o2_level = environment.oxygen/total_moles var/n2_level = environment.nitrogen/total_moles var/co2_level = environment.carbon_dioxide/total_moles var/plasma_level = environment.toxins/total_moles var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) dat += "Nitrogen: [round(n2_level*100)]%
" dat += "Oxygen: [round(o2_level*100)]%
" dat += "Carbon Dioxide: [round(co2_level*100)]%
" dat += "Plasma: [round(plasma_level*100)]%
" if(unknown_level > 0.01) dat += "OTHER: [round(unknown_level)]%
" dat += "Temperature: [round(environment.temperature-T0C)]°C
" dat += "
" return dat Topic(href, href_list) if(..()) return if(href_list["mode"]) var/newmode = text2num(href_list["mode"]) src.mode = max(newmode, 0) else if(href_list["flight"]) src.master.toggle_light() else if(href_list["scanner"]) if(src.master.scan_program) src.master.scan_program = null else if(href_list["input"]) switch(href_list["input"]) if("tone") var/t = input(usr, "Please enter new ringtone", src.name, src.message_tone) as text if (!t) return if (!src.master || !in_range(src.master, usr) && src.master.loc != usr) return if(!(src.holder in src.master)) return t = copytext(sanitize(t), 1, 20) src.message_tone = t if("note") var/t = input(usr, "Please enter note", src.name, src.note) as message if (!t) return if (!src.master || !in_range(src.master, usr) && src.master.loc != usr) return if(!(src.holder in src.master)) return t = copytext(adminscrub(t), 1, MAX_MESSAGE_LEN) src.note = t if("message") var/obj/item/device/pda2/P = locate(href_list["target"]) if(!P || !istype(P)) return var/t = input(usr, "Please enter message", P.name, null) as text if (!t) return if (!src.master || !in_range(src.master, usr) && src.master.loc != usr) return if(!(src.holder in src.master)) return var/datum/signal/signal = new signal.data["command"] = "text message" signal.data["message"] = t signal.data["sender"] = src.master.owner signal.data["tag"] = "\ref[P]" src.post_signal(signal) src.message_note += "→ To [P.owner]:
[t]
" log_pda("[usr] sent [t] to [P.owner]") if("rename") var/datum/computer/file/F = locate(href_list["target"]) if(!F || !istype(F)) return var/t = input(usr, "Please enter new name", src.name, F.name) as text t = copytext(sanitize(t), 1, 16) if (!t) return if (!in_range(src.master, usr) || !(F.holder in src.master)) return if(F.holder.read_only) return F.name = capitalize(lowertext(t)) else if(href_list["message_func"]) //Messenger specific topic junk switch(href_list["message_func"]) if("ringer") src.message_silent = !src.message_silent if("on") src.message_on = !src.message_on if("clear") src.message_note = null if("scan") if(src.message_on) src.detected_pdas = list() var/datum/signal/signal = new signal.data["command"] = "report pda" src.post_signal(signal) else if(href_list["note_func"]) //Note program specific topic junk switch(href_list["note_func"]) if("new") src.note_file = null src.note = null if("save") if(src.note_file && src.note_file.holder in src.master) src.note_file.data = src.note else var/datum/computer/file/text/F = new /datum/computer/file/text if(!src.holding_folder.add_file(F)) del(F) else src.note_file = F F.data = src.note if("load") var/datum/computer/file/text/T = locate(href_list["target"]) if(!T || !istype(T)) return src.note_file = T src.note = note_file.data src.note_mode = 0 if("switchmenu") src.note_mode = !src.note_mode else if(href_list["browse_func"]) //File browser specific topic junk var/datum/computer/target = locate(href_list["target"]) switch(href_list["browse_func"]) if("drive") if(src.browse_folder.holder == src.master.hd && src.master.cartridge && (src.master.cartridge.root)) src.browse_folder = src.master.cartridge.root else src.browse_folder = src.holding_folder if("open") if(!target || !istype(target)) return if(istype(target, /datum/computer/file/pda_program)) if(istype(target,/datum/computer/file/pda_program/os) && (src.master.host_program)) return else src.master.run_program(target) src.master.updateSelfDialog() return if("delete") if(!target || !istype(target)) return src.master.delete_file(target) if("copy") if(istype(target,/datum/computer/file) && (!target.holder || (target.holder in src.master.contents))) src.clipboard = target if("paste") if(istype(target,/datum/computer/folder)) if(!src.clipboard || !src.clipboard.holder || !(src.clipboard.holder in src.master.contents)) return if(!istype(src.clipboard)) return src.clipboard.copy_file_to_folder(target) else if(href_list["message_mode"]) var/newmode = text2num(href_list["message_mode"]) src.message_mode = max(newmode, 0) src.master.add_fingerprint(usr) src.master.updateSelfDialog() return receive_signal(datum/signal/signal) if(..()) return switch(signal.data["command"]) if("text message") if(!message_on || !signal.data["message"]) return var/sender = signal.data["sender"] if(!sender) sender = "!Unknown!" src.message_note += "← From [sender]:
[signal.data["message"]]
" var/alert_beep = null //Don't beep if set to silent. if(!src.message_silent) alert_beep = src.message_tone src.master.display_alert(alert_beep) src.master.updateSelfDialog() if("report pda") if(!message_on) return var/datum/signal/newsignal = new newsignal.data["command"] = "reporting pda" newsignal.data["tag"] = "\ref[signal.source]" src.post_signal(newsignal) if("reporting pda") if(!detected_pdas) detected_pdas = new() if(!(signal.source in detected_pdas)) detected_pdas += signal.source src.master.updateSelfDialog() return return_text_header() if(!src.master) return var/dat if(src.mode) dat += " | Main Menu" else if (!isnull(src.master.cartridge)) dat += " | Eject [src.master.cartridge]" dat += " | Refresh" return dat