mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-07-13 01:52:21 +01:00
Initial Commit
This commit is contained in:
@@ -0,0 +1,279 @@
|
||||
//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
|
||||
Reference in New Issue
Block a user