//----------------------- SYSTEM ---------------------------------- func create(entry) gvar(blk_using, blk_vars, blk_init, blk_lvars, blk_body, blk, blk_proc_imp, blk_class) gvar(blk_constructor, blk_struct, blk_props, blk_methods, blk_fields, blk_attr, CLASS, projectName, response, response_res, version, user_level) gvar(blk_hws_props, blk_hws_props_init, blk_hws_const, blk_hws_events, blk_hws_events_imp) gvar(win32res) gvar(reference, blk_refs, platform_target) reference = new array() gvar(compile, blk_comp) compile = new array() gvar(resource, blk_resx) resource = new array() gvar(properties, blk_prop) properties = new array() gvar(hws_blocks) hws_blocks = new array() gvar(hws_constructors) hws_constructors = new array() gvar(hws_args) hws_args = new array() gvar(settings, blk_settings, blk_settings_designer) settings = new array() // register own types register(1, int) register(2, str) register(7, real) register(104, bool) register(105, long) register(106, char) register(107, float) register(108, decimal) // create blocks blk_prop = block.reg("properties").inc().inc() blk_resx = block.reg("resources").inc() blk_comp = block.reg("compile").inc().inc() blk_refs = block.reg("references").inc().inc() blk_using = block.reg("class_using") blk_vars = block.reg("class_vars").inc().inc() blk_init = block.reg("class_init").inc().inc().inc() blk_lvars = block.reg("class_lvars").inc().inc().inc() blk_body = block.reg("class_body").inc().inc().inc() blk_proc_imp = block.reg("class_proc_imp").inc().inc() blk_attr = block.reg("class_attr").inc().inc() blk_class = block.reg("class_class").inc() blk_fields = block.reg("class_fields").inc().inc() blk_props = block.reg("ini_properties") blk_hws_props = block.reg("hws_properties").inc().inc() blk_hws_props_init = block.reg("ini_hws_properties").inc() blk_methods = block.reg("ini_methods") blk_struct = block.reg("class_structs").inc() blk_constructor = block.reg("class_constructor").inc().inc() blk_hws_const = block.reg("hws_constructor").inc().inc() blk_hws_events = block.reg("hws_events").inc().inc() blk_hws_events_imp = block.reg("hws_events_imp").inc() blk_settings = block.reg("settings").inc().inc().inc().inc() blk_settings_designer = block.reg("settings_designer").inc().inc() // set current block blk = blk_body // create global arrays gvar(uses) uses = new array() gvar(stack) stack = new array() gvar(blocks) blocks = new array() gvar(includes) includes = new array() gvar(inits) inits = new array() gvar(interfaces) interfaces = new array() // project names projectName = 'unknown' response = 'ResponseFile.rsp' response_res = 'ResponseRes.rsp' win32res = 'allres.res' version = code(hi_version("%mj.%mn.%bl")) end func destroy(entry) // finalization element's this._finally() // remove all blocks block.delete(blk_prop) block.delete(blk_resx) block.delete(blk_comp) block.delete(blk_refs) block.delete(blk_using) block.delete(blk_vars) block.delete(blk_init) block.delete(blk_lvars) block.delete(blk_body) block.delete(blk_proc_imp) block.delete(blk_attr) block.delete(blk_class) block.delete(blk_fields) block.delete(blk_props) block.delete(blk_hws_props) block.delete(blk_hws_props_init) block.delete(blk_methods) block.delete(blk_struct) block.delete(blk_constructor) block.delete(blk_hws_const) block.delete(blk_hws_events) block.delete(blk_hws_events_imp) for(i = 0; i < inits.size(); i++) block.delete(inits.get(i)) end for(i = 0; i < hws_blocks.size(); i++) block.delete(hws_blocks.get(i)) end block.delete(blk_settings) block.delete(blk_settings_designer) end func set_project(name) projectName = name end func get_project() return(projectName) end func code_type(v) if(e = expof(v)) return(e) else return(typeof(v)) end end func type_code(typename) t = lower(typename) if((t == 'int') or (t == 'int32')) return(1) elseif(t == 'string') return(2) elseif(t == 'double') return(7) elseif((t == 'bool') or (t == 'boolean')) return(104) elseif((t == 'long') or (t == 'int64')) return(105) elseif(t == 'char') return(106) elseif((t == 'float') or (t == 'single')) return(107) elseif(t == 'decimal') return(108) end return(0) end func is_int(v) return(code_type(v) == 1) end func is_str(v) return(code_type(v) == 2) end func is_real(v) return(code_type(v) == 7) end func is_bool(v) return(code_type(v) == 104) end func is_long(v) return(code_type(v) == 105) end func is_char(v) return(code_type(v) == 106) end func is_float(v) return(code_type(v) == 107) end func is_decimal(v) return(code_type(v) == 108) end func to_str(value) t = code_type(value) if(t == 0) if(len(value) and (value != 'null')) return('(' + value + ').ToString()') else return("") end elseif(t != 2) return('(' + value + ').ToString()') end return(value) end func to_int(value) t = code_type(value) if(t == 0) if(len(value) and (value != 'null')) return(value) else return(0) end elseif(t == 2) return('Int32.Parse(' + value + ')') elseif(t == 3) return('(int)(' + value + ')') elseif(t == 7) return('(int)(' + value + ')') elseif(t == 104) return('((' + value + ') ? 1 : 0)') elseif(t == 105) return('(int)(' + value + ')') elseif(t == 108) return('(int)(' + value + ')') end return(value) end func to_real(value) t = code_type(value) if(t == 0) if(len(value) and (value != 'null')) return(value) else return(0) end elseif(t == 1) return('(double)(' + value + ')') elseif(t == 2) return('Double.Parse(' + value + ')') elseif(t == 105) return('(double)(' + value + ')') elseif(t == 108) return('(double)(' + value + ')') end return(value) end func to_bool(value) t = code_type(value) if(t == 0) if(len(value) and (value != 'null')) return(value) else return('false') end elseif(t == 1) return('(' + value + ' != 0)') elseif(t == 2) return('bool.Parse(' + value + ')') elseif(t == 3) return('(' + value + ' != 0)') elseif(t == 7) return('(' + value + ' != 0)') elseif(t == 105) return('(' + value + ' != 0)') elseif(t == 108) return('(' + value + ' != 0)') end return(value) end func to_long(value) t = code_type(value) if(t == 0) if(len(value) and (value != 'null')) return(value) else return(0) end elseif(t == 1) return('(long)(' + value + ')') elseif(t == 2) return('Int64.Parse(' + value + ')') elseif(t == 3) return('(long)(' + value + ')') elseif(t == 7) return('(long)(' + value + ')') elseif(t == 108) return('(long)(' + value + ')') end return(value) end func to_char(value) t = code_type(value) if(t == 0) if(len(value) and (value != 'null')) return(value) else return(code("''")) end elseif(t == 1) return('(char)(' + value + ' & 0xffff)') elseif(t == 2) return('Char.Parse(' + value + ')') elseif(t == 3) return('(char)(' + value + ')') elseif(t == 7) return('(char)(' + value + ')') elseif(t == 105) return('(char)(' + value + ' & 0xffffL)') end return(value) end func to_float(value) t = code_type(value) if(t == 0) if(len(value) and (value != 'null')) return(value) else return(0) end elseif(t == 1) return('(float)(' + value + ')') elseif(t == 2) return('float.Parse(' + value + ')') elseif(t == 3) return('(float)(' + value + ')') elseif(t == 7) return('(float)(' + value + ')') elseif(t == 105) return('(float)(' + value + ')') elseif(t == 108) return('(float)(' + value + ')') end return(value) end func to_decimal(value) t = code_type(value) if(t == 0) if(len(value) and (value != 'null')) return(value) else return(0) end elseif(t == 2) return('Decimal.Parse(' + value + ')') elseif(t == 3) return('(decimal)(' + value + ')') elseif(t == 7) return('(decimal)(' + value + ')') elseif(t == 104) return('((' + value + ') ? 1m : 0m)') elseif(t == 105) return('(decimal)(' + value + ')') end return(value) end func to_type(value, type) if(type == 0 or type == 13 or type == 20) return(sys.if_null(value)) elseif(type == 2) return(to_str(value)) elseif(type == 1) return(to_int(value)) elseif((type == 7) or (type == 3)) return(to_real(value)) elseif(type == 4) return(to_int(value)) elseif(type == 5) return(to_int(value)) elseif(type == 104) return(to_bool(value)) elseif(type == 105) return(to_long(value)) elseif(type == 106) return(to_char(value)) elseif(type == 107) return(to_float(value)) elseif(type == 108) return(to_decimal(value)) end return(value) end //******************************* USERS FUNCTION ******************************* func get_obj_name(name) if(name == "EntryPoint") return('this') elseif(name == "Console") return(this.name) elseif(name == "Application") return(this.name) elseif(name == "SplitterPanel") return(this.panel) elseif(name == "Service") return('this') elseif(len(this.obj)) return(this.obj) else return(this.codename) end end //******************************* EVENTS *************************************** // an event method implementation func add_event_type_body(point, handler, type, body, data, args) if(linked(point)) e_args = 'object sender, ' + type + 'Args args' + (args ? (', ' + args) : '') blk_init.println(sys.get_obj_name(this.name), '.', handler, ' += new ', type, 'Handler(', point, this.id, ');') sys.blocks_store() ini = block.reg("event_imp").inc().inc() if(pos(sys.get_frame_above(), 'UserClass', 0)) inits.add(ini) else this.parent.get_parent_sdk().class_events.add(ini) end event(point, data) // move block to implementation ini.println((sys.get_project() == "Console") ? 'protected static' : 'private', ' void ' + point + this.id + '(' + e_args + ') { // ' + sys.get_obj_name(this.name) + ':' + ((this.props("Text")=='undefined property') ? point : len(this.props("Text")) ? this.props("Text") : point)) if(not blk_lvars.empty()) ini.copyhere(blk_lvars) end if(body) ini.copyhere(body) end ini.copyhere(blk) .println('}') .println() sys.blocks_restore() this.setfield(point, 'defined') end end // makes complex an event method func add_event_type(point, handler, type, data, args) add_event_type_body(point, handler, type, 0, data, args) end // an event method implementation func add_event_body(point, handler, body, data, args) if(linked(point)) e_args = 'object sender, System.EventArgs args' + (len(args) ? (', ' + args) : '') blk_init.println(sys.get_obj_name(this.name), '.', handler + ' += new System.EventHandler(' + point + this.id + ');') sys.blocks_store() ini = block.reg("event_imp").inc().inc() if(pos(sys.get_frame_above(), 'UserClass', 0)) inits.add(ini) else this.parent.get_parent_sdk().class_events.add(ini) end event(point, data) // move block to implementation ini.println('private void ' + point + this.id + '(' + e_args + ') { // ' + sys.get_obj_name(this.name) + ':' + ((this.props("Text")=='undefined property') ? point : len(this.props("Text")) ? this.props("Text") : point)) if(not blk_lvars.empty()) ini.copyhere(blk_lvars) end if(body) ini.copyhere(body) end ini.copyhere(blk) .println('}') .println() sys.blocks_restore() this.setfield(point, 'defined') end end // makes simple an event method func add_event(point, handler, data, args) add_event_body(point, handler, 0, data, args) end // makes complex an event method // usage: // sys.event_imp('onEvent') // sys.event_imp('onEvent', 'Event' + this.id, 'args', 'void', 'Object sender, EventArgs args', '', '') func event_imp(point, handler, data, type, args, body_before, body_after) if(linked(point)) this.setfield(point, 'defined') if(not len(args)) args = 'object sender, EventArgs args' end if(not len(type)) type = 'void' end if(not len(data) and (this.name != 'Button')) // patch: empty data from Button click data = 'args' end if(not len(handler)) handler = point + this.id end sys.blocks_store() // create event code ini = block.reg("event_imp").inc().inc() if(pos(sys.get_frame_above(), 'UserClass', 0)) inits.add(ini) else this.parent.get_parent_sdk().class_events.add(ini) end event(point, data) // move block to implementation ini.println('private ', (sys.get_project() == "Console") ? 'static ' : '', type + ' ' + handler + '(' + ((args) ? args : '') + ') { // ' + sys.get_obj_name(this.name) + ':' + ((this.props("Text")=='undefined property') ? point : len(this.props("Text")) ? this.props("Text") : point)) if(len(body_before)) ini.copyhere(body_before) end if(not blk_lvars.empty()) ini.copyhere(blk_lvars) end ini.copyhere(blk) if(len(body_after)) ini.copyhere(body_after) end ini.println('}') .println() sys.blocks_restore() end end // adds event handler // usage: // sys.event_add('onEvent') // sys.event_add('onEvent', 'EventHandler') // sys.event_add('onEvent', 'EventHandler', 'Event' + this.id, 'Event', this.codename, blk_init) // sys.event_add('onEvent', 'EventHandler', "", "", "", blk_init) func event_add(point, handler_type, handler, event_name, obj, blk_out) if(linked(point)) if(not len(blk_out)) blk_out = blk_init end if(not len(obj)) obj = sys.get_obj_name(this.name) end p = code(copy(point, 2)) if(not len(event_name)) event_name = p end if(not len(handler)) handler = point + this.id end if(not len(handler_type)) handler_type = 'EventHandler' end blk_out.println(obj, '.', event_name, ' += new ', handler_type, '(', handler, ');') end end //******************************* INIT PROPERTIES ********************* // defines a object func add_object(name, type, args, props) blk_vars.println('private ', ((sys.get_project() == "Console") ? 'static ' : ''), type, ' ', name, ';') blk_init.println(name, ' = new ', type, '(', (len(args)) ? args : '', ')', (len(props)) ? props : '', ';') end // defines an array func add_array(name, type, cnt) f = name + this.id blk_vars.println('private ' + ((sys.get_project() == "Console") ? 'static ' : '') + type + ' ' + f + ';') blk_init.println(f, ' = new Array[', cnt, '];') this.setfield(name, f) end // defines a start of the init section func begin_init(control) blk_init.println('((System.ComponentModel.ISupportInitialize)(this.', control,')).BeginInit();') end // defines the end of the init section func end_init(control) blk_init.println('((System.ComponentModel.ISupportInitialize)(this.', control,')).EndInit();') end func get_frame_above() // define visual frame frame = 'this' sdk = this.parent parent_el = sdk.get_parent_sdk() // get core element of container if(parent_el.name != get_project()) if(parent_el.codename != this.codename) if(parent_el.name == "SplitterPanel") frame = parent_el.panel else frame = parent_el.codename end else // may be container container = cgt.get_class_name(cgt.get_element_id(cgt.get_parent_sdk(sdk.parent.id).parent.id, 0)) // get class name of container //if((container != get_project()) and (parent_el.name != get_project())) <- ?! if(container != get_project()) parent_el = cgt.get_parent_sdk(sdk.parent.id).parent.get_parent_sdk() // get core element of container if(parent_el.name == "SplitterPanel") frame = parent_el.panel else frame = parent_el.codename end end end end return(frame) end func add_widget(type, args, init_props) // declare and init control blk_vars.println('private ', type, ' ', this.codename, ';') blk_init.println(this.codename, ' = new ', type, '(', (args) ? args : '', ')', (init_props) ? init_props : '', ';') parent = get_frame_above() arr = regex_search(parent, 'DockPanel') if(arr.size()) blk_init.println(this.codename, '.Show(', parent, ');') else blk_init.println('addWidget(', parent, ', ', this.codename, ', ', this.props("Left"), ', ', this.props("Top"), ', ', this.props("Width"), ', ', this.props("Height"), ');') end end // returns a name of the data type func var_type(type) if(typeof(type) == 1) if(type == 1) return('int') elseif(type == 7) return('double') elseif(type == 104) return('bool') elseif(type == 105) return('long') elseif(type == 106) return('char') elseif(type == 107) return('float') elseif(type == 108) return('decimal') else return('string') end end return(type) end // returns a name of the type func type_name(value, t) if(t == 1) return('int') elseif(t == 2) return('string') elseif(t == 3) subtype = typeof(value) if(subtype == 0) return('object') elseif(subtype == 1) return('int') elseif(subtype == 2) return('string') elseif(subtype == 3) return('double') end elseif(t == 7) return('double') elseif(t == 104) return('bool') elseif(t == 105) return('long') elseif(t == 106) return('char') elseif(t == 107) return('float') elseif(t == 108) return('decimal') else return('object') end end // returns a name of the data property type 3 func type_prop3(type) if(typeof(type) == 1) if(type == 1) return('int') elseif(type == 2) return('string') elseif(type == 3) return('double') else return('dynamic') end end return(type) end // declare var in class section func add_var(name, type) f = name + this.id sub(f, type) blk_vars.println('private ', ((sys.get_project() == "Console") ? 'static ' : ''), var_type(type), ' ', f, ';') this.setfield(name, f) return(f) end // declare var in local section func add_var_loc(name, type) f = name + this.id sub(f, type) blk_lvars.println(var_type(type), ' ', f, (code_type(type) ? (' = ' + to_type('', type)) : ''), ';') this.setfield(name, f) end // declare var by "Extern" property func add_var_extern(name, type) prop = this.props("Extern") if(prop.isdef or prop == "undefined property") add_var(name, type) else add_var_loc(name, type) end end // declare local var in statement func add_var_loc_stat(name, type) f = name + this.id sub(f, type) this.setfield(name, f) return(var_type(type) + ' ' + f) end // sets a typed property to the field, only if property doesn't default // usage: // sys.set_typed_field(1, 'FieldName') // sys.set_typed_field(1, 'FieldName', 'PropName') // sys.set_typed_field(14, 'FieldName', '', 'EnumNameSpace') // sys.set_typed_field(2, 'FieldName', '', '', block) // sys.set_typed_field(2, 'FieldName', '', '', '', 'StaticClassName') func set_typed_field(t, field, propname, constant, blk_out, obj) if(not len(obj)) obj = sys.get_obj_name(this.name) end if(not len(blk_out)) blk_out = blk_init end if(len(propname)) prop = this.props(propname) else prop = this.props(field) end if(not prop.isdef) if(t < 3) // int, string and all other types blk_out.println(obj, '.', field, ' = ', prop.value, ';') elseif(t == 3) // TData tt = typeof(prop.value) if(tt == 0) // NULL blk_out.println(obj, '.', field, ' = null;') elseif(tt == 3) // REAL blk_out.println(obj, '.', field, ' = ', prop.value, 'D;') else // INTEGER, STRING blk_out.println(obj, '.', field, ' = ', prop.value, ';') end elseif(t == 4) // List blk_out.println(obj, '.', field, ' = ', prop.value, ';') elseif(t == 5) // StrList blk_out.println(obj, '.', field, ' = ', 'new List(new string[] { ', prop.value.join(', '), ' });') elseif(t == 6) // Icon ver = split(version, '.') if(ver.get(0) == "4") sys.UseClass("ResourceLibrary") sys.LoadMethod("ResourceIcon") sys.link_win32_resources() blk_out.println(obj, '.', field, ' = GetStandardResourceIcon("", ', prop.value, ');') else sys.add_use('System.IO') sname = code(prop.value) path = code_dir() && sname sys.resource_add(code(path), sname) blk_out.println('using (Stream st = (Assembly.GetEntryAssembly().GetManifestResourceStream("', sname, '"))) {').inc() .println(obj, '.', field, ' = new Icon(st);') .dec().println('}') end elseif(t == 7) // double blk_out.println(obj, '.', field, ' = ', prop.value, 'D;') elseif(t == 8) // Color c = prop.value if(c < 0) sys.add_use('System.Runtime.InteropServices') sys.LoadMethod("ColorToRGB") blk_out.println(obj, '.', field, ' = ColorToRGB(', (c _and_ 16777215), ');') else blk_out.println(obj, '.', field, ' = ColorTranslator.FromWin32(', prop.value, ');') end elseif(t == 9) // Script // TODO elseif(t == 10) // Stream ver = split(version, '.') if(ver.get(0) == "4") sys.UseClass("ResourceLibrary") sys.LoadMethod("ResourceStream") sys.add_use('System.IO') sys.link_win32_resources() blk_out.println(obj, '.', field, ' = GetStandardResourceStream("", ', prop.value , ');') else sys.add_use('System.IO') sname = code(prop.value) path = code_dir() && sname sys.resource_add(code(path), sname) blk_out.println(obj, '.', field, ' = (Assembly.GetEntryAssembly().GetManifestResourceStream("', sname, '"));') end elseif(t == 11) // Bitmap ver = split(version, '.') if(ver.get(0) == "4") sys.UseClass("ResourceLibrary") sys.LoadMethod("ResourceBitmap") sys.link_win32_resources() blk_out.println(obj, '.', field, ' = GetStandardResourceBitmap("", ', prop.value, ');') else sys.add_use('System.IO') sname = code(prop.value) path = code_dir() && sname sys.resource_add(code(path), sname) blk_out.println('using (Stream st = (Assembly.GetEntryAssembly().GetManifestResourceStream("', sname, '"))) {').inc() .println(obj, '.', field, ' = new Bitmat(st);') .dec().println('}') end elseif(t == 12) // Wave // TODO elseif(t == 13) // Array arr = prop.value if(arr.size()) tt = arr.type if(tt == 1) blk_out.println(obj, '.', field, ' = new int[] { ', arr.join(', '), ' };') elseif(tt == 2) blk_out.println(obj, '.', field, ' = new string[] { ', arr.join(', '), ' };') elseif(tt == 7) blk_out.println(obj, '.', field, ' = new double[] { ', arr.join('D, '), 'D };') end end elseif(t == 14) // Enum if(len(constant)) blk_out.println(obj, '.', field, ' = ', constant, '.', prop.value, ';') else error(this.name + ' - namespace of the enumeration property does not defined') end elseif(t == 15) // Font arr = prop.value if(arr.size()) blk_out.println(obj, '.', field, ' = new Font(', arr.get(0), ', ', code(arr.get(1)), ', (FontStyle)', code(arr.get(2)), ', GraphicsUnit.Point, (byte)', code(arr.get(4)), ');') end elseif(t == 16) // Matr // Reserve elseif(t == 17) // Jpeg // TODO elseif(t == 18) // Menu // TODO elseif(t == 19) // Code // TODO elseif(t == 20) // LinkElement link = prop.value if(link) blk_out.println(obj, '.', field, ' = ', link.codename, ';') else error(this.name + ' - ' + prop.name + ' does not defined...') end elseif(t == 21) // Flags // impossible elseif(t == 104) // bool blk_out.println(obj, '.', field, ' = ', lower(prop.value), ';') elseif(t == 105) // long blk_out.println(obj, '.', field, ' = ', code(prop.value), 'L;') elseif(t == 106) // char blk_out.println(obj, '.', field, ' = \'', code(unescape(prop.value)), '\';') elseif(t == 107) // float blk_out.println(obj, '.', field, ' = ', code(prop.value), 'F;') elseif(t == 108) // decimal blk_out.println(obj, '.', field, ' = ', code(prop.value), 'm;') end end end // sets a simple property of the object func set_field(field, prop) if(not len(prop)) prop = this.props(field) end blk_init.println(sys.get_obj_name(this.name), '.', field, ' = ', prop.value, ';') end // sets a simple property of the element, only if property doesn't default // universal for int and string types // obsolete - use instead sys.set_typed_field() func set_undef_field(field, prop) if(not len(prop)) prop = this.props(field) end if(not prop.isdef) blk_init.println(sys.get_obj_name(this.name), '.', field, ' = ', prop.value, ';') end end // sets an enumeration property of the element, only if property doesn't default func set_undef_field_const(field, prop, constant) if(not prop.isdef) blk_init.println(sys.get_obj_name(this.name), '.', field, ' = ', constant, '.', prop.value, ';') end end // sets an complex property of the element, only if property doesn't default func set_undef_field_complex(obj, field, prefix, prop, suffix) if(not prop.isdef) blk_init.println(obj, '.', field, ' = ', prefix, prop.value, suffix, ';') end end // sets an array of dates property of the element, only if property doesn't default func set_undef_field_array_dates(field, prop) if(len(prop)) arr = this.props(prop).value else arr = this.props(field).value end if(arr.size()) for(i = 0; i < arr.size(); i++) blk_init.println(sys.get_obj_name(this.name), '.', code(field), '(DateTime.Parse(', arr.get(i) , '));') end end end // sets an array of float property of the element, only if property doesn't default func set_undef_field_floats(field, prop) if(len(prop)) arr = this.props(prop).value else arr = this.props(field).value end if(arr.size()) blk_init.println(sys.get_obj_name(this.name), '.', code(field), ' = new float[] { ', arr.join('F, '), 'F };') end end // gets a manager property of the element, only if property doesn't default func get_undef_manager(propname) prop = this.props(propname) if(not prop.isdef) link = prop.value if(link) return(link.codename) else error(this.name + ' - ' + prop + ' does not defined.') return('') end end end // gets the property of a manager property of the element // usage: sys.get_manager_prop("PropertyName", "ManagerPropertyName") func get_manager_prop(prop, link_prop) link = this.props(prop).value if(link) return(link.props(link_prop).value) else error(this.name + ' - ' + prop + ' does not defined..') return('') end end // include external method func LoadMethod(filename, blk_out) if(not len(blk_out)) blk_out = blk_proc_imp end if(not includes.contain(filename)) codepath = code_dir() && 'classes\\' && filename && '.cs' id = fopen(codepath, "rb") if(id != 0) f = block.reggen() f.println(fgets(id)) includes.add(filename) blk_out.copyhere(f) block.delete(f) end fclose(id) end end // use external class func UseClass(filename, subtype) codepath = code(code_dir()) + 'classes\\' + code(filename) + '.cs' sys.compile_add(codepath, subtype) end // gets a typed property, only if property doesn't default // usage: // sys.get_typed_field(data, 'FieldName', 105) // sys.get_typed_field('new double[]{}', 'Array', 13, 7) // sys.get_typed_field(data, 'CalendarType', 14, 'GregorianCalendarTypes') // sys.get_typed_field('GregorianCalendarTypes.Localized', 'CalendarType', 14, 'GregorianCalendarTypes') func get_typed_field(dt, propname, proptype, subtype) if(not len(subtype)) subtype = 0 end if(not len(proptype)) proptype = 0 end if(linked(propname)) return(d(propname)) elseif(isdef(propname)) if(proptype == 3) // TData return('null') elseif(proptype == 106) // char return('\'' + dt + '\'') else return(sys.to_type(dt, proptype)) end elseif(this.props(propname).value == "Object undefined") // break elseif(proptype == 0) // complex type return(code(this.props(propname).value)) elseif(proptype == 1) // int return(code(this.props(propname).value)) elseif(proptype == 2) // string return(this.props(propname).value) elseif(proptype == 3) // TData value = this.props(propname).value subtype = typeof(value) if(subtype == 3) // REAL return(value && 'D') else // INTEGER & STRING return(value) end elseif(proptype == 4) // List return(this.props(propname).value) elseif(proptype == 5) // StrList return('new List(new string[] { ' + this.props(propname).value.join(', ') + ' })') elseif(proptype == 6) // icon ver = split(version, '.') if(ver.get(0) == "4") sys.UseClass("ResourceLibrary") sys.LoadMethod("ResourceIcon") sys.link_win32_resources() return('GetStandardResourceIcon("", ' + this.props(propname).value + ')') else sys.add_use('System.IO') sname = code(this.props(propname).value) path = code_dir() && sname sys.resource_add(code(path), sname) return('new Icon((Assembly.GetEntryAssembly().GetManifestResourceStream("' + sname + '")))') end elseif(proptype == 7) // double return(this.props(propname).value && 'D') elseif(proptype == 8) // color c = this.props(propname).value if(c < 0) sys.add_use('System.Runtime.InteropServices') sys.LoadMethod("ColorToRGB") return('ColorToRGB(' + (c _and_ 16777215) + ')') else return('ColorTranslator.FromWin32(' + c + ')') end elseif(proptype == 9) // Script // TODO elseif(proptype == 10) // stream ver = split(version, '.') if(ver.get(0) == "4") sys.UseClass("ResourceLibrary") sys.LoadMethod("ResourceStream") sys.link_win32_resources() sys.add_use('System.IO') return('GetStandardResourceStream("", ' + this.props(propname).value + ')') else sys.add_use('System.IO') sname = code(this.props(propname).value) path = code_dir() && sname sys.resource_add(code(path), sname) return('(Assembly.GetEntryAssembly().GetManifestResourceStream("' + sname + '"))') end elseif(proptype == 11) // bitmap ver = split(version, '.') if(ver.get(0) == "4") sys.UseClass("ResourceLibrary") sys.LoadMethod("ResourceBitmap") sys.link_win32_resources() return('GetStandardResourceBitmap("", ' + this.props(propname).value + ')') else sys.add_use('System.IO') sname = code(this.props(propname).value) path = code_dir() && sname sys.resource_add(code(path), sname) return('new Bitmap((Assembly.GetEntryAssembly().GetManifestResourceStream("' + sname + '")))') end elseif(proptype == 12) // wave // TODO elseif(proptype == 13) // array if(subtype == 1) // int return(sys.get_field_type_array(propname, 'int')) elseif(subtype == 2) // string return(sys.get_field_type_array(propname, 'string')) elseif(subtype == 7) // double return(sys.get_field_type_array(propname, 'double')) elseif(subtype == 107) // float return(sys.get_field_type_array(propname, 'float')) else return('null') end elseif(proptype == 14) // enum return(subtype + '.' + this.props(propname).value) elseif(proptype == 15) // Font arr = this.props(propname).value if(arr.size()) return('new Font(' + arr.get(0) + ', ' + code(arr.get(1)) + ', (FontStyle)' + code(arr.get(2)) + ', GraphicsUnit.Point, (byte)' + code(arr.get(4)) + ')') end elseif(proptype == 16) // Matr // Reserve elseif(proptype == 17) // Jpeg // TODO elseif(proptype == 18) // Menu // TODO elseif(proptype == 19) // Code // TODO elseif(proptype == 20) // manager return(sys.get_undef_manager(propname)) elseif(proptype == 21) // flags // impossible elseif(proptype == 104) // bool return(code(lower(this.props(propname).value))) elseif(proptype == 105) // long return(code(this.props(propname).value) + 'L') elseif(proptype == 106) // char return('\'' + code(unescape(this.props(propname).value)) + '\'') elseif(proptype == 107) // float return(code(this.props(propname).value) + 'F') elseif(proptype == 108) // decimal return(code(this.props(propname).value) + 'm') end return(dt) end // gets an array of strings property of the element func get_field_type_array(prop, type) l = '' if(type == 'double') l = 'D' elseif(type == 'float') l = 'F' end arr = this.props(prop).value return('new ' + type + '[] { ' + arr.join(l + ', ') + l + ' }') end //****************************************************************************** // simple element tools //****************************************************************************** func _se_init(proc, vname, vtype) this.setfield('vname', vname + this.id) this.setfield('vtype', vtype) this.setfield('proc', proc) if(linked("Result") and linked('do' + proc)) sys.add_var_extern(vname, vtype) end method('do' + proc, "p1", "p2", "p3") sys._se_dowork(args.p1, args.p2, args.p3) end method('Result') return(sys._se_result()) end end func _se_dowork(p1, p2, p3) if(linked("Result")) blk.println(this.vname, ' = ', this._se_make(p1, p2, p3), ';') event('on' + this.proc, this.vname) else event('on' + this.proc, this._se_make(p1, p2, p3)) end end func _se_result if(linked('do' + this.proc)) return(this.vname) else return(this._se_make()) end end //***************************************************************************** // usage: sys._do_init(string name) func _do_init(name) method('do' + name, "data") this.fname = cgt.get_func_name() this.implement(args.data, this.fname) end end //***************************************************************************** // usage: sys._method_init(name [, type] [, obj]) // types: 0=code, 1=int, 2=str, 104=bool and etc. func _method_init(name, type, obj) if(len(obj)) this.setfield('obj_method_init', obj) else this.setfield('obj_method_init', sys.get_obj_name(this.name)) end if(not len(type)) method('do' + name, "data") this.fname = cgt.get_func_name() blk.println(this.obj_method_init, '.', code(copy(this.fname, 2)), '();') end end this.setfield('fname', fname) if(type == 0) method('do' + name, "data") this.fname = cgt.get_func_name() blk.println(this.obj_method_init, '.', code(copy(this.fname, 2)), '(', (len(args.data) ? sys.if_null(args.data) : ''), ');') end end if(type == 1) method('do' + name, "data") this.fname = cgt.get_func_name() blk.println(this.obj_method_init, '.', code(copy(this.fname, 2)), '(', (len(args.data) ? sys.to_type(args.data, 1) : ''), ');') end end if(type == 2) method('do' + name, "data") this.fname = cgt.get_func_name() blk.println(this.obj_method_init, '.', code(copy(this.fname, 2)), '(', (len(args.data) ? sys.to_type(args.data, 2) : ''), ');') end end if(type == 104) method('do' + name, "data") this.fname = cgt.get_func_name() blk.println(this.obj_method_init, '.', code(copy(this.fname, 2)), '(', (len(args.data) ? sys.to_type(args.data, 104) : ''), ');') end end if(type == 105) method('do' + name, "data") this.fname = cgt.get_func_name() blk.println(this.obj_method_init, '.', code(copy(this.fname, 2)), '(', (len(args.data) ? sys.to_type(args.data, 105) : ''), ');') end end if(type == 106) method('do' + name, "data") this.fname = cgt.get_func_name() blk.println(this.obj_method_init, '.', code(copy(this.fname, 2)), '(', (len(args.data) ? sys.to_type(args.data, 106) : ''), ');') end end if(type == 107) method('do' + name, "data") this.fname = cgt.get_func_name() blk.println(this.obj_method_init, '.', code(copy(this.fname, 2)), '(', (len(args.data) ? sys.to_type(args.data, 107) : ''), ');') end end if(type == 108) method('do' + name, "data") this.fname = cgt.get_func_name() blk.println(this.obj_method_init, '.', code(copy(this.fname, 2)), '(', (len(args.data) ? sys.to_type(args.data, 108) : ''), ');') end end end //***************************************************************************** // usage: sys._mtd_as_prop_init(name [, obj]) func _mtd_as_prop_init(name) if(len(obj)) this.setfield('_obj_mtd_as_prop_init', obj) else this.setfield('_obj_mtd_as_prop_init', sys.get_obj_name(this.name)) end this.setfield('fname', fname) if(pos(name, '()', 1) > 0) name = code(copy(name, 0, len(name) - 2)) method(name) this.fname = cgt.get_func_name() return(this._obj_mtd_as_prop_init && '.' && code(this.fname) && '()') end else method(name) return(this._obj_mtd_as_prop_init) end end end //***************************************************************************** // usage: sys._prop_init(string prop, bool get, bool set, int type, [string obj]) // types: 0=code, 1=int, 2=str, 7=real, 104=bool, 105=long func _prop_init(prop, get, set, type, obj) if(len(obj)) this.setfield('obj_prop_init', obj) end this.setfield('fname', fname) if(set) if(not pos(prop, ".", 0)) this.fname = copy(prop, 1) else this.fname = prop end if(len(obj)) sys._make_do_type_static('do' + this.fname, type) else sys._make_do_type('do' + this.fname, type) end end if(get) if(len(obj)) method(prop) this.fname = cgt.get_func_name() if(pos(this.fname, ".", 0)) return(this.obj_prop_init && '.' && code(this.fname)) else return(this.obj_prop_init && code(this.fname)) end end else method(prop) this.fname = cgt.get_func_name() if(pos(this.fname, ".", 0)) return(sys.get_obj_name(this.name) && '.' && code(this.fname)) else return(sys.get_obj_name(this.name) && code(this.fname)) end end end end end func _make_do_type(prop, type) if(type == 0) method(prop, "data") this.fname = cgt.get_func_name() blk.println(sys.get_obj_name(this.name), '.', code(copy(this.fname, 2)), ' = ', sys.if_null(args.data), ';') end elseif(type == 1) method(prop, "data") this.fname = cgt.get_func_name() blk.println(sys.get_obj_name(this.name), '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 1), ';') end elseif(type == 2) method(prop, "data") this.fname = cgt.get_func_name() blk.println(sys.get_obj_name(this.name), '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 2), ';') end elseif(type == 7) method(prop, "data") this.fname = cgt.get_func_name() blk.println(sys.get_obj_name(this.name), '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 7), ';') end elseif(type == 104) method(prop, "data") this.fname = cgt.get_func_name() blk.println(sys.get_obj_name(this.name), '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 104), ';') end elseif(type == 105) method(prop, "data") this.fname = cgt.get_func_name() blk.println(sys.get_obj_name(this.name), '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 105), ';') end elseif(type == 106) method(prop, "data") this.fname = cgt.get_func_name() blk.println(sys.get_obj_name(this.name), '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 106), ';') end elseif(type == 107) method(prop, "data") this.fname = cgt.get_func_name() blk.println(sys.get_obj_name(this.name), '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 107), ';') end elseif(type == 108) method(prop, "data") this.fname = cgt.get_func_name() blk.println(sys.get_obj_name(this.name), '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 108), ';') end end end func _make_do_type_static(prop, type) if(type == 0) method(prop, "data") this.fname = cgt.get_func_name() blk.println(this.obj_prop_init, '.', code(copy(this.fname, 2)), ' = ', sys.if_null(args.data), ';') end elseif(type == 1) method(prop, "data") this.fname = cgt.get_func_name() blk.println(this.obj_prop_init, '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 1), ';') end elseif(type == 2) method(prop, "data") this.fname = cgt.get_func_name() blk.println(this.obj_prop_init, '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 2), ';') end elseif(type == 7) method(prop, "data") this.fname = cgt.get_func_name() blk.println(this.obj_prop_init, '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 7), ';') end elseif(type == 104) method(prop, "data") this.fname = cgt.get_func_name() blk.println(this.obj_prop_init, '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 104), ';') end elseif(type == 105) method(prop, "data") this.fname = cgt.get_func_name() blk.println(this.obj_prop_init, '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 105), ';') end elseif(type == 106) method(prop, "data") this.fname = cgt.get_func_name() blk.println(this.obj_prop_init, '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 106), ';') end elseif(type == 107) method(prop, "data") this.fname = cgt.get_func_name() blk.println(this.obj_prop_init, '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 107), ';') end elseif(type == 108) method(prop, "data") this.fname = cgt.get_func_name() blk.println(this.obj_prop_init, '.', code(copy(this.fname, 2)), ' = ', sys.to_type(args.data, 108), ';') end end end //****************************** USING **************************************** // defines a namespace func add_use(module) if(pos(sys.get_frame_above(), 'UserClass', 0)) if(not uses.contain(module)) blk_using.println('using ', module, ';') uses.add(module) if(module == 'System.Numerics') sys.reference_add(module) elseif(module == 'System.Management') sys.reference_add(module) elseif(module == 'System.Data.OracleClient') sys.reference_add(module) elseif(module == 'System.IO.Compression') sys.reference_add(module) elseif(module == 'System.Security') sys.reference_add(module) elseif(module == 'System.ServiceModel') sys.reference_add(module) end end else el = this.parent.get_parent_sdk() if(not el.uses.contain(module)) el._blk_using.println('using ', module, ';') el.uses.add(module) if(module == 'System.Numerics') sys.reference_add(module) elseif(module == 'System.Management') sys.reference_add(module) elseif(module == 'System.Data.OracleClient') sys.reference_add(module) elseif(module == 'System.IO.Compression') sys.reference_add(module) end end end end //****************************** REFERENCE ************************************ // defines a reference func reference_add(ref, link, embed) if(not reference.contain(ref)) reference.add(ref) if(len(link)) blk_refs.println('').inc() .println('.\\', link, '') if(len(embed)) blk_refs.println('', embed, '') end blk_refs.dec().println('') else blk_refs.println('') end end end //****************************** COMPILE ************************************** // defines a compile list func compile_add(source, subtype) if(not compile.contain(source)) compile.add(source) if(len(subtype)) blk_comp.println('').inc() .println('', subtype, '') .dec().println('') else blk_comp.println('') end end end //****************************** RESOURCES *********************************** // defines a resources list func resource_add(source, name) //if(not resource.contain(source)) resource.add(source) blk_resx.println('').inc() .println('').inc() .println('', name, '') .dec().println('') .dec().println('') //end end //****************************** WIN32 RESOURCES ****************************** // links a WIN32 resources to final assembly func link_win32_resources() if(not resource.contain(win32res)) resource.add(win32res) blk_prop.println('', win32res, '').inc() end end //******************************* STACK *************************************** func stack_push(val) stack.add(val) end func stack_peek() if(stack.size()) return(stack.get(stack.size()-1)) else error('Stack is empty!') end end func stack_pop() if(stack.size()) temp = stack.get(stack.size()-1) stack.remove(stack.size()-1) return(temp) else error('Stack is empty!') end end func mt_pop(arr) if(arr.size()) item = arr.get(arr.size()-1) arr.remove(arr.size()-1) return(item) else error('MT is empty!') end end //******************************* BLOCKS *************************************** func blk_store(value) blocks.add(value) end func blk_restore() if(blocks.size()) value = blocks.get(blocks.size()-1) blocks.remove(blocks.size()-1) return(value) else error('Blocks is empty!') end end func blocks_store() sys.blk_store(blk) sys.blk_store(blk_lvars) blk_lvars = block.reggen().inc().inc().inc() blk = block.reggen().inc().inc().inc() end func blocks_restore() block.delete(blk) block.delete(blk_lvars) blk_lvars = sys.blk_restore() blk = sys.blk_restore() end func all_blocks_store() sys.blk_store(blk_using) blk_using = block.reggen() sys.blk_store(blk_vars) blk_vars = block.reggen().inc().inc() sys.blk_store(blk_init) blk_init = block.reggen().inc().inc().inc() sys.blk_store(blk_lvars) blk_lvars = block.reggen().inc().inc().inc() sys.blk_store(blk) blk = block.reggen().inc().inc().inc() sys.blk_store(blk_proc_imp) blk_proc_imp = block.reggen().inc().inc() sys.blk_store(blk_class) blk_class = block.reggen().inc() end func all_blocks_restore() block.delete(blk_class) blk_class = sys.blk_restore() block.delete(blk_proc_imp) blk_proc_imp = sys.blk_restore() block.delete(blk) blk = sys.blk_restore() block.delete(blk_lvars) blk_lvars = sys.blk_restore() block.delete(blk_init) blk_init = sys.blk_restore() block.delete(blk_vars) blk_vars = sys.blk_restore() block.delete(blk_using) blk_using = sys.blk_restore() end func blk_init_store(value) if(value.name != 'class_init') sys.blk_store(blk_init) blk_init = block.reggen().inc().inc().inc() end end func blk_init_restore(value) if(value.name != 'class_init') if(not blk_init.empty()) value.copyhere(blk_init) end // restore original block blk_init = sys.blk_restore() end end //****************************** STRINGS ************************************** func block_find(source, left, right) s = source p = pos(s, left, 0) t = rpos(s, right, len(s)) if((p >= 0) and ( t >= 2)) start = p + len(left) size = t - p - 1 return(copy(s, start, size)) else return('') end end //****************************** FOLDERS ************************************** // Usage: sys.get_folder(level) // levels: 0 - ..\Cnet, 1 - ..\Elements, 2 - ..\HiAsm and etc. func get_folder(level) arr = split(code_dir(), "\\") s = '' for(i=0; i(x, new Converter((o) => (object)o)); func convert_array(data, prop, type1, type2) if(isdef(prop)) return('Array.ConvertAll<' + type1 + ', ' + type2 + '>(' + d(prop) + ', new Converter<' + type1 + ', ' + type2 + '>((o) => (' + type2 + ')o))') else arr = this.props(prop).value p = new array() for(i = 0; i < arr.size(); i++) p.add(arr.get(i)) end return('new ' + type2 + '[] { ' + p.join(', ') + ' }') end end func set_typed_prop(prop, value, blk_out, obj) if(not len(obj)) obj = sys.get_obj_name(this.name) end if(not len(blk_out)) blk_out = blk end blk_out.println(obj, '.', prop, ' = ', value, ';') end func event_type(point, type) if(linked(point)) event(point, new array(sys.get_obj_name(this.name), type)) end end //********************************* DataSource ******************************** func data_source(prop) f = block.reggen() arr = this.props(prop).value for(i = 0; i < arr.size(); i++) s = arr.get(i) if(s == "namespace InlineCode") f.println(code(s), this.id) else f.println(code(s)) end if(s == "using System.Data.SQLite;") sys.reference_add('System.Data.SQLite', 'System.Data.SQLite.dll') sys.UseClass("SQLite") end if(s == "using MySql.Data.MySqlClient;") sys.reference_add('MySql.Data', 'MySql.Data.dll') end end fname = this.codename + '.cs' f.save(fname) block.delete(f) if(not fcopy(code_dir() && fname, project_dir() && fname)) warning(this.name + ' - can not copy file to project_dir()') end sys.compile_add(code(code_dir() && fname)) end //************************************ GTK+ *********************************** func add_gtkwidget(type, args) // declare and init gtk widget container = sys.get_frame_above() blk_vars.println('private ', type, ' ', this.codename, ';') blk_init.println(this.codename, ' = new ', type, '(', (args) ? args : '', ');') .println('addWidget(', container, ', ', this.codename, ', ', this.props("Left"), ', ', this.props("Top"), ', ', this.props("Width"), ', ', this.props("Height"), ');') if(not pos(container, 'GtkFixed', 0)) blk_init.println(container, '.Move(', this.codename, ', ', this.props("Left"), ', ', this.props("Top"), ');') end end //************************************ ASSEMBLY ******************************* func add_assembly(ref, filename, dir, embed) if(not len(dir)) dir = 'assembly\\' end if(not reference.contain(ref)) sys.reference_add(ref, filename, embed) filepath = '' + code(packet_dir()) + dir + filename newpath = '' + code(project_dir()) + filename if(not fexists(newpath)) if(not fcopy(filepath, newpath)) error(this.name + ' - can not copy assembly to ' + newpath) end end end end //************************************ FILES ********************************** func file_copyto(source, destination) if(not fexists(destination)) if(not fcopy(source, destination)) error(this.name + ' - can not copy file to ' + destination) end end end //*****************************************************************************