mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-05-18 14:39:01 +01:00
279 lines
6.8 KiB
Plaintext
279 lines
6.8 KiB
Plaintext
//CONTENTS:
|
|
//Base computerx program datum
|
|
//Compx_icon object (Used for GUI system)
|
|
//Compxwindow datum (Used for GUI system)
|
|
|
|
|
|
/datum/computer/file/terminalx_program
|
|
name = "program"
|
|
extension = "TPROG"
|
|
var/obj/machinery/computerx/master = null
|
|
var/list/req_access = list()
|
|
var/executable = 1
|
|
var/gui_app = 0
|
|
var/datum/compx_window/temp = null
|
|
var/initialized = 0
|
|
var/list/gui_icons = list()
|
|
var/meta_params = null
|
|
|
|
|
|
os
|
|
name = "system program"
|
|
extension = "TSYS"
|
|
executable = 0
|
|
var/tmp/setup_string = null
|
|
|
|
os_call(var/call_params, var/datum/computer/file/terminal_program/caller, var/datum/computer/file/file)
|
|
if(!master || master.stat & (NOPOWER|BROKEN))
|
|
return 1
|
|
if(!caller || !call_params)
|
|
return 1
|
|
|
|
return 0
|
|
|
|
New(obj/holding as obj)
|
|
..()
|
|
if(holding)
|
|
src.holder = holding
|
|
|
|
if(istype(src.holder.loc,/obj/machinery/computerx))
|
|
src.master = src.holder.loc
|
|
|
|
if(meta_params)
|
|
src.metadata += params2list(meta_params)
|
|
|
|
Del()
|
|
if(master)
|
|
master.processing_programs.Remove(src)
|
|
..()
|
|
|
|
Topic(href, href_list)
|
|
if((!src.holder) || (!src.master))
|
|
return 1
|
|
|
|
if((!istype(holder)) || (!istype(master)))
|
|
return 1
|
|
|
|
if(master.stat & (NOPOWER|BROKEN))
|
|
return 1
|
|
|
|
if ((!usr.contents.Find(src.master) && (!in_range(src.master, usr) || !istype(src.master.loc, /turf))) && (!istype(usr, /mob/living/silicon)))
|
|
return 1
|
|
|
|
if(!(holder in src.master.contents) && !(holder.loc in src.master.contents))
|
|
return 1
|
|
|
|
usr.machine = src.master
|
|
|
|
return 0
|
|
|
|
proc
|
|
os_call(var/call_params, var/datum/computer/file/file)
|
|
if (!master || !master.host_program)
|
|
return 0
|
|
|
|
master.host_program.os_call(call_params, src, file)
|
|
return 1
|
|
|
|
initialize() //Called when a program starts running.
|
|
if(src.initialized || !master)
|
|
return 1
|
|
return 0
|
|
|
|
quit()
|
|
if(src.master)
|
|
src.master.unload_program(src)
|
|
return
|
|
|
|
input_text(var/text, source=0)
|
|
if((!src.holder) || (!src.master) || !text)
|
|
return 1
|
|
|
|
if((!istype(holder)) || (!istype(master)))
|
|
return 1
|
|
|
|
if(master.stat & (NOPOWER|BROKEN))
|
|
return 1
|
|
|
|
if(!(holder in src.master.contents) && !(holder.loc in src.master.contents))
|
|
return 1
|
|
|
|
if(!src.holder.root)
|
|
src.holder.root = new /datum/computer/folder
|
|
src.holder.root.holder = src
|
|
src.holder.root.name = "root"
|
|
|
|
//boutput(world, text)
|
|
return 0
|
|
|
|
process()
|
|
if((!src.holder) || (!src.master))
|
|
return 1
|
|
|
|
if((!istype(holder)) || (!istype(master)))
|
|
return 1
|
|
|
|
if(!(holder in src.master.contents) && !(holder.loc in src.master.contents))
|
|
if(master.host_program == src)
|
|
master.host_program = null
|
|
master.processing_programs.Remove(src)
|
|
return 1
|
|
|
|
if(!src.holder.root)
|
|
src.holder.root = new /datum/computer/folder
|
|
src.holder.root.holder = src
|
|
src.holder.root.name = "root"
|
|
|
|
return 0
|
|
|
|
receive_command(obj/source, command, datum/computer/file/pfile)
|
|
if((!src.holder) || (!src.master) || (!source) || (source != src.master))
|
|
return 1
|
|
|
|
if((!istype(holder)) || (!istype(master)))
|
|
return 1
|
|
|
|
if(master.stat & (NOPOWER|BROKEN))
|
|
return 1
|
|
|
|
if(!(holder in src.master.contents) && !(holder.loc in src.master.contents))
|
|
return 1
|
|
|
|
return 0
|
|
|
|
peripheral_command(command, datum/computer/file/pfile, target_ref)
|
|
if(master)
|
|
return master.send_command(command, pfile, target_ref)
|
|
else
|
|
qdel(pfile)
|
|
|
|
return null
|
|
|
|
transfer_holder(obj/item/disk/data/newholder,datum/computer/folder/newfolder)
|
|
|
|
if((newholder.file_used + src.size) > newholder.file_amount)
|
|
return 0
|
|
|
|
if(!newholder.root)
|
|
newholder.root = new /datum/computer/folder
|
|
newholder.root.holder = newholder
|
|
newholder.root.name = "root"
|
|
|
|
if(!newfolder)
|
|
newfolder = newholder.root
|
|
|
|
if((src.holder && src.holder.read_only) || newholder.read_only)
|
|
return 0
|
|
|
|
if((src.holder) && (src.holder.root))
|
|
src.holder.root.remove_file(src)
|
|
|
|
newfolder.add_file(src)
|
|
|
|
if(istype(newholder.loc,/obj/machinery/computerx))
|
|
src.master = newholder.loc
|
|
else if (istype(newholder.loc, /obj/item/peripheralx/drive))
|
|
var/obj/item/peripheralx/dx = newholder.loc
|
|
if(dx.host)
|
|
src.master = dx.host
|
|
|
|
//boutput(world, "Setting [src.holder] to [newholder]")
|
|
src.holder = newholder
|
|
return 1
|
|
|
|
disk_inserted(var/obj/item/disk/data/inserted)
|
|
return
|
|
|
|
disk_ejected(var/obj/item/disk/data/ejected)
|
|
if(src.holder == ejected)
|
|
src.quit()
|
|
|
|
return
|
|
|
|
get_temp()
|
|
return src.temp
|
|
|
|
|
|
|
|
//This should be used for fancy grid GUI magics!!
|
|
/obj/compx_icon
|
|
name = "Icon"
|
|
icon = 'icons/misc/compgui.dmi'
|
|
icon_state = "x"
|
|
var/action_tag = "none" //When clicked, send actiontag = actionarg to our owning program's Topic().
|
|
var/action_arg = 1
|
|
var/datum/computer/file/terminalx_program/owner = null
|
|
var/icon_id = null
|
|
var/grid_x = 0
|
|
var/grid_y = 0
|
|
var/no_drag = 0
|
|
|
|
debug
|
|
name = "Finder"
|
|
icon_state = "folder"
|
|
action_tag = "boop"
|
|
action_arg = "beep"
|
|
|
|
spacer
|
|
name = ""
|
|
icon_state = null
|
|
|
|
New(var/datum/computer/file/terminalx_program/new_owner)
|
|
..()
|
|
if(istype(new_owner))
|
|
src.owner = new_owner
|
|
icon_id = "G[generate_net_id(src)]"
|
|
return
|
|
|
|
Click()
|
|
if(!istype(owner) || !usr)
|
|
return
|
|
|
|
usr.Topic("[action_tag]=[action_arg];gid=[src.icon_id]", list("[action_tag]"="[action_arg]","gid"=src.icon_id), src.owner) // Topic redirection time!
|
|
return
|
|
|
|
MouseDrop(obj/O, null, var/src_location, var/control_orig, var/control_new, var/params)
|
|
if(!istype(owner) || !usr || src.no_drag)
|
|
return
|
|
|
|
if(control_orig != control_new) //Dragging icons into the real world/another computer desktop would be weird.
|
|
return
|
|
|
|
//boutput(world, "loc: [src_location]<br>co: [control_orig]<br>cn: [control_new]<br>usr: [usr]")
|
|
usr.Topic("drag=[src_location];gid=[src.icon_id]", list("drag"=src_location,"gid"=src.icon_id), src.owner) // More Topic redirection.
|
|
return
|
|
|
|
/datum/compx_window
|
|
var/skinbase = "cxwind_console"
|
|
var/datum/computer/file/terminalx_program/owner = null
|
|
|
|
New(var/datum/computer/file/terminalx_program/newOwner)
|
|
..()
|
|
|
|
if (istype(newOwner))
|
|
src.owner = newOwner
|
|
|
|
|
|
grid
|
|
skinbase = "cxwind_grid"
|
|
|
|
var/list/gridList = list()
|
|
|
|
update(mob/user as mob)
|
|
if (..())
|
|
return
|
|
|
|
for(var/gridy = 1, gridy <= compx_gridy_max, gridy++)
|
|
for(var/gridx = 1, gridx <= compx_gridx_max, gridx++)
|
|
if(isnull(gridList[gridx][gridy]))
|
|
user << output(compx_grid_spacer, "compxwindow_\ref[src].grid:[gridx],[gridy]")
|
|
else
|
|
user << output(gridList[gridx][gridy], "compxwindow_\ref[src].grid:[gridx],[gridy]")
|
|
|
|
return
|
|
|
|
proc/update(mob/user as mob)
|
|
if (!istype(user) || !user.client || !owner)
|
|
return 1
|
|
|
|
return 0 |