interplays lord
Sponsored Links
Sponsored Links
Secleted [ 0 ] software to compare
Results 1 - 15 of about 26
Domino Blast 0.1
Domino Blast project is a physics-based driving/demolition game with a childrens toys theme. more>>
Domino Blast project is a physics-based driving/demolition game with a childrens toys theme.
Domino Blast is a hybrid driving and destruction game with a childrens toys theme. Its environments consist of buildings constructed from domino tiles and a player-controllable toy car. The objective of the game is to wreak as much havoc as possible, within a time limit.
Its game-play is simplistic yet satisfying; similar to the satisfaction gained from watching a tumbling Jenga tower, except the objective is to tumble the tower, rather than slowly deconstruct it. As the game progresses, levels become more dense and the buildings that inhabit them become larger and more complex.
<<lessDomino Blast is a hybrid driving and destruction game with a childrens toys theme. Its environments consist of buildings constructed from domino tiles and a player-controllable toy car. The objective of the game is to wreak as much havoc as possible, within a time limit.
Its game-play is simplistic yet satisfying; similar to the satisfaction gained from watching a tumbling Jenga tower, except the objective is to tumble the tower, rather than slowly deconstruct it. As the game progresses, levels become more dense and the buildings that inhabit them become larger and more complex.
Download (6.0MB)
Added: 2007-06-18 License: Freeware Price:
858 downloads
Contacts 0.5
Contacts is a Evolution-Data-Server based addressbook. more>>
Contacts is a Evolution-Data-Server based addressbook.
Contacts is a small, lightweight addressbook that uses libebook. This is the same library that GNOME Evolution uses, so all contact data that exists in your Evolution database is accessible via Contacts.
Contacts features advanced vCard field type handling and is designed for use on hand-held devices, such as the Nokia 770 or the Sharp Zaurus series of PDAs.
<<lessContacts is a small, lightweight addressbook that uses libebook. This is the same library that GNOME Evolution uses, so all contact data that exists in your Evolution database is accessible via Contacts.
Contacts features advanced vCard field type handling and is designed for use on hand-held devices, such as the Nokia 770 or the Sharp Zaurus series of PDAs.
Download (0.39MB)
Added: 2007-04-25 License: GPL (GNU General Public License) Price:
913 downloads
spfmilter 0.97
spfmilter provides a Sender Policy Framework (SPF) milter for Sendmail. more>>
spfmilter provides a Sender Policy Framework (SPF) milter for Sendmail.
spfmilter is a milter (sendmail mail filter) which implements the Sender Policy Framework (SPF). SPF is a strategy for preventing junk mail. The SMTP standard for email allows anyone to forge anyone elses email address.
SPF verifies that the Sender address of an email message matches (according to some policy) the client IP address that submitted it.
The idea of SPF is to prevent email forgery. Each participating site sets up a little definition of which hosts are allowed to send mail claiming to be from that site. When another site receives mail, it checks the permitted-senders definition for the originating site. If the check fails, the mail is rejected.
Setting up the permitted-senders definition is very easy, you go to the SPF Wizard and fill out a little form, then put the resulting string into your DNS records. This milter implements the second half of SPF, checking the mail you receive against other sites SPF records.
Enhancements:
- Some improvements to the redhat rcscripts. (Paul Howarth)
- Deal with the unknown-family connections which occasionally show up on some OSs, such as Solaris. (Joel Lord)
<<lessspfmilter is a milter (sendmail mail filter) which implements the Sender Policy Framework (SPF). SPF is a strategy for preventing junk mail. The SMTP standard for email allows anyone to forge anyone elses email address.
SPF verifies that the Sender address of an email message matches (according to some policy) the client IP address that submitted it.
The idea of SPF is to prevent email forgery. Each participating site sets up a little definition of which hosts are allowed to send mail claiming to be from that site. When another site receives mail, it checks the permitted-senders definition for the originating site. If the check fails, the mail is rejected.
Setting up the permitted-senders definition is very easy, you go to the SPF Wizard and fill out a little form, then put the resulting string into your DNS records. This milter implements the second half of SPF, checking the mail you receive against other sites SPF records.
Enhancements:
- Some improvements to the redhat rcscripts. (Paul Howarth)
- Deal with the unknown-family connections which occasionally show up on some OSs, such as Solaris. (Joel Lord)
Download (0.055MB)
Added: 2007-03-24 License: BSD License Price:
947 downloads
Dates 0.4.1
Dates project is a small, light-weight calendar that shares data with GNOME Evolution. more>>
Dates project is a small, light-weight calendar that shares data with GNOME Evolution.
Dates is a small, light-weight calendar that shares data with GNOME Evolution. Dates features an innovative, unified, zooming view and is designed for use on hand-held devices, such as the Nokia 770 or the Sharp Zaurus series of PDAs.
<<lessDates is a small, light-weight calendar that shares data with GNOME Evolution. Dates features an innovative, unified, zooming view and is designed for use on hand-held devices, such as the Nokia 770 or the Sharp Zaurus series of PDAs.
Download (0.43MB)
Added: 2007-04-14 License: GPL (GNU General Public License) Price:
924 downloads
jirsa 0.0.4
jirsa is an application to ease the life of the role-playing game master. more>>
jirsa is an application to ease the life of the role-playing game master.
jirsa can assist with maps, distance and travel times calculation, weather, ambient sounds, and weapons management.
Its easily expandable, since its built with several tabs. It currently supports The Lord Of The Rings RPG map and weather zones.
jirsa includes:
- maps
- distance and travel times calculation
- weather
- ambient sounds
- weapons management
<<lessjirsa can assist with maps, distance and travel times calculation, weather, ambient sounds, and weapons management.
Its easily expandable, since its built with several tabs. It currently supports The Lord Of The Rings RPG map and weather zones.
jirsa includes:
- maps
- distance and travel times calculation
- weather
- ambient sounds
- weapons management
Download (0.15MB)
Added: 2006-12-03 License: LGPL (GNU Lesser General Public License) Price:
1055 downloads
LiON Library 2.1
LiON Library is a full nonblocking, single thread library with an API that is portable and easy to use. more>>
LiON Library is a full nonblocking, single thread library with an API that is portable and easy to use.
LiON Library has full network support, files, and pipes (for spawning children, or processes to communicate with). All types can also be rate (KB/s) limited, and full SSL support is included.
Main features:
- Nonblocking Networking.
- Nonblocking File I/O.
- Nonblocking pipe/system and fork commands for spawning helper programs.
- Event driven, event passback for all situations.
- SSL incorporated, with auto-detection.
- Portable (Already confirmed NetBSD, Solaris, Linux, OsX and Win32)
- Single process / thread library.
- Numerous Sample programs included.
- Support both in-library sleep/CPU-release, or in Application.
- Full buffering control, and flow control.
- CPS (KB/s) rate limits on _any_ I/O type. (Socket, File & Pipe)
- Adoptable foreign file-descriptors API.
- Clean API with documentation, although man-page comming.
- Direct, or event driven, failure modes supported.
- Exclusive File I/O locking optional, across all platforms.
- Internal compression optional.
- Very simple to use for line-by-line protocols, or binary chunk data transfers.
- Full UDP support
- Encrypted File IO support (blowfish, dependent on SSL)
- contrib/ sources include Directory listings library for all platforms.
- Python support! Using SWIG there now is an easy way to do async SSL in Python
- Timers! Callback timers in relative or absolute time. One-shot or repeat.
Enhancements:
- SSL connections could stall based on buffer size, so this has been fixed.
- Minor autoconf changes were made.
- Missing Win32 files were added to the dist-gzip file again.
<<lessLiON Library has full network support, files, and pipes (for spawning children, or processes to communicate with). All types can also be rate (KB/s) limited, and full SSL support is included.
Main features:
- Nonblocking Networking.
- Nonblocking File I/O.
- Nonblocking pipe/system and fork commands for spawning helper programs.
- Event driven, event passback for all situations.
- SSL incorporated, with auto-detection.
- Portable (Already confirmed NetBSD, Solaris, Linux, OsX and Win32)
- Single process / thread library.
- Numerous Sample programs included.
- Support both in-library sleep/CPU-release, or in Application.
- Full buffering control, and flow control.
- CPS (KB/s) rate limits on _any_ I/O type. (Socket, File & Pipe)
- Adoptable foreign file-descriptors API.
- Clean API with documentation, although man-page comming.
- Direct, or event driven, failure modes supported.
- Exclusive File I/O locking optional, across all platforms.
- Internal compression optional.
- Very simple to use for line-by-line protocols, or binary chunk data transfers.
- Full UDP support
- Encrypted File IO support (blowfish, dependent on SSL)
- contrib/ sources include Directory listings library for all platforms.
- Python support! Using SWIG there now is an easy way to do async SSL in Python
- Timers! Callback timers in relative or absolute time. One-shot or repeat.
Enhancements:
- SSL connections could stall based on buffer size, so this has been fixed.
- Minor autoconf changes were made.
- Missing Win32 files were added to the dist-gzip file again.
Download (0.20MB)
Added: 2007-04-25 License: Other/Proprietary License Price:
914 downloads
Beyond The Red Line Demo
Beyond the Red Line is a stand-alone total conversion for the award-winning Freespace 2. more>>
Beyond the Red Line project is a stand-alone total conversion for the award-winning Freespace 2 released by Volition and Interplay for the PC. It is based on the popular new tv-show Battlestar Galactica. No, not the one from the 70s.
Will I need Freespace 2 to play it?
No, Beyond the Red Line is a stand-alone conversion and will not require Freespace 2. All you need for playing will be included in the download.
Is it free?
Absolutely. The game is made by fans for the fans, no profit is being made from any part of the project. Although we could use some pizzas and coke to keep our mortal bodies running.
That about covers it... a BSG total conversion of FS2 that has just released a demo version. it plays really well and looks amazing. a must for any BSG fan.
Enhancements:
- This demo contains spoilers for the second season of BSG, so if you havent seen that season yet you should pass on this game for now.
<<lessWill I need Freespace 2 to play it?
No, Beyond the Red Line is a stand-alone conversion and will not require Freespace 2. All you need for playing will be included in the download.
Is it free?
Absolutely. The game is made by fans for the fans, no profit is being made from any part of the project. Although we could use some pizzas and coke to keep our mortal bodies running.
That about covers it... a BSG total conversion of FS2 that has just released a demo version. it plays really well and looks amazing. a must for any BSG fan.
Enhancements:
- This demo contains spoilers for the second season of BSG, so if you havent seen that season yet you should pass on this game for now.
Download (MB)
Added: 2007-04-23 License: Freeware Price:
925 downloads
MIDI::Simple 0.81
MIDI::Simple is a procedural/OOP interface for MIDI composition. more>>
MIDI::Simple is a procedural/OOP interface for MIDI composition.
SYNOPSIS
use MIDI::Simple;
new_score;
text_event http://www.ely.anglican.org/parishes/camgsm/bells/chimes.html;
text_event Lord through this hour/ be Thou our guide;
text_event so, by Thy power/ no foot shall slide;
set_tempo 500000; # 1 qn => .5 seconds (500,000 microseconds)
patch_change 1, 8; # Patch 8 = Celesta
noop c1, f, o5; # Setup
# Now play
n qn, Cs; n F; n Ds; n hn, Gs_d1;
n qn, Cs; n Ds; n F; n hn, Cs;
n qn, F; n Cs; n Ds; n hn, Gs_d1;
n qn, Gs_d1; n Ds; n F; n hn, Cs;
write_score westmister_chimes.mid;
This module sits on top of all the MIDI modules -- notably MIDI::Score (so you should skim MIDI::Score) -- and is meant to serve as a basic interface to them, for composition. By composition, I mean composing anew; you can use this module to add to or modify existing MIDI files, but that functionality is to be considered a bit experimental.
This module provides two related but distinct bits of functionality: 1) a mini-language (implemented as procedures that can double as methods) for composing by adding notes to a score structure; and 2) simple functions for reading and writing scores, specifically the scores you make with the composition language.
The fact that this modules interface is both procedural and object-oriented makes it a definite two-headed beast. The parts of the guts of the source code are not for the faint of heart.
<<lessSYNOPSIS
use MIDI::Simple;
new_score;
text_event http://www.ely.anglican.org/parishes/camgsm/bells/chimes.html;
text_event Lord through this hour/ be Thou our guide;
text_event so, by Thy power/ no foot shall slide;
set_tempo 500000; # 1 qn => .5 seconds (500,000 microseconds)
patch_change 1, 8; # Patch 8 = Celesta
noop c1, f, o5; # Setup
# Now play
n qn, Cs; n F; n Ds; n hn, Gs_d1;
n qn, Cs; n Ds; n F; n hn, Cs;
n qn, F; n Cs; n Ds; n hn, Gs_d1;
n qn, Gs_d1; n Ds; n F; n hn, Cs;
write_score westmister_chimes.mid;
This module sits on top of all the MIDI modules -- notably MIDI::Score (so you should skim MIDI::Score) -- and is meant to serve as a basic interface to them, for composition. By composition, I mean composing anew; you can use this module to add to or modify existing MIDI files, but that functionality is to be considered a bit experimental.
This module provides two related but distinct bits of functionality: 1) a mini-language (implemented as procedures that can double as methods) for composing by adding notes to a score structure; and 2) simple functions for reading and writing scores, specifically the scores you make with the composition language.
The fact that this modules interface is both procedural and object-oriented makes it a definite two-headed beast. The parts of the guts of the source code are not for the faint of heart.
Download (0.061MB)
Added: 2007-07-06 License: Perl Artistic License Price:
841 downloads
L4ip 1.0 build 299
L4ip is a daemon that extends IPFilters simple round-robin L4 load balancing with health checks. more>>
L4ip is a daemon that extends IPFilters simple round-robin L4 load balancing with health checks. It takes care of monitoring and dynamically adding and removing ipnat rules in the kernel.
L4ip fully supports UDP, TCP, and system()-style executions for health checks, including send/expect scripts, SSL connections, and much more.
Main features:
- Define as many clusters, with as many members as you need.
- Automatically adds and removes "ipnat" rules as needed.
- Flexible health check support, tcp-open, tcp-close, udp-open, udp-close, system.
- Simple scripting available for health checks in send/expect syntax with fnmatch pattern comparison
- Binary protocol supported in url-encoding style syntax (eg %0D)
- system() like execution of external commands available. (spawn your own health-check testers)
- Reload and restart leaving last-known-state available for less service impact.
- SSL supported for TCP testers.
- Optional IPF rules to sense RST return-packets for faster failure detection.
Enhancements:
- Solaris SMF example files were added along with a "proxy" command for protocols that need it, such as FTP and IPSec.
<<lessL4ip fully supports UDP, TCP, and system()-style executions for health checks, including send/expect scripts, SSL connections, and much more.
Main features:
- Define as many clusters, with as many members as you need.
- Automatically adds and removes "ipnat" rules as needed.
- Flexible health check support, tcp-open, tcp-close, udp-open, udp-close, system.
- Simple scripting available for health checks in send/expect syntax with fnmatch pattern comparison
- Binary protocol supported in url-encoding style syntax (eg %0D)
- system() like execution of external commands available. (spawn your own health-check testers)
- Reload and restart leaving last-known-state available for less service impact.
- SSL supported for TCP testers.
- Optional IPF rules to sense RST return-packets for faster failure detection.
Enhancements:
- Solaris SMF example files were added along with a "proxy" command for protocols that need it, such as FTP and IPSec.
Download (0.23MB)
Added: 2006-03-01 License: Artistic License Price:
1332 downloads
Brutal Chess 0.5.2
Brutal Chess is a 3D chess game with several levels of AI inspired by Battle Chess released by Interplay circa 1988. more>>
Brutal Chess project features full 3D graphics, an advanced particle engine, and several different levels of intelligent AI, inspired by the once popular "Battle Chess" released by Interplay circa 1988.
<<less Download (4.5MB)
Added: 2007-01-23 License: GPL (GNU General Public License) Price:
617 downloads
SQL::Routine 0.70.3
SQL::Routine is a Perl module to specify all database tasks with SQL routines. more>>
SQL::Routine is a Perl module to specify all database tasks with SQL routines.
SYNOPSIS
This executable code example shows how to define some simple database tasks with SQL::Routine; it only shows a tiny fraction of what the module is capable of, since more advanced features are not shown for brevity.
use SQL::Routine;
eval {
# Create a model/container in which all SQL details are to be stored.
# The two boolean options being set true here permit all the subsequent code to be as concise,
# easy to read, and most SQL-string-like as possible, at the cost of being slower to execute.
my $model = SQL::Routine->new_container();
$model->auto_set_node_ids( 1 );
$model->may_match_surrogate_node_ids( 1 );
# This defines 4 scalar/column/field data types (1 number, 2 char strings, 1 enumerated value type)
# and 2 row/table data types; the former are atomic and the latter are composite.
# The former can describe individual columns of a base table (table) or viewed table (view),
# while the latter can describe an entire table or view.
# Any of these can describe a domain schema object or a stored procedures variables data type.
# See also the person and person_with_parents table+view defs further below; these data types help describe them.
$model->build_child_node_trees( [
[ scalar_data_type, { si_name => entity_id , base_type => NUM_INT , num_precision => 9, }, ],
[ scalar_data_type, { si_name => alt_id , base_type => STR_CHAR, max_chars => 20, char_enc => UTF8, }, ],
[ scalar_data_type, { si_name => person_name, base_type => STR_CHAR, max_chars => 100, char_enc => UTF8, }, ],
[ scalar_data_type, { si_name => person_sex , base_type => STR_CHAR, max_chars => 1, char_enc => UTF8, }, [
[ scalar_data_type_opt, M, ],
[ scalar_data_type_opt, F, ],
], ],
[ row_data_type, person, [
[ row_data_type_field, { si_name => person_id , scalar_data_type => entity_id , }, ],
[ row_data_type_field, { si_name => alternate_id, scalar_data_type => alt_id , }, ],
[ row_data_type_field, { si_name => name , scalar_data_type => person_name, }, ],
[ row_data_type_field, { si_name => sex , scalar_data_type => person_sex , }, ],
[ row_data_type_field, { si_name => father_id , scalar_data_type => entity_id , }, ],
[ row_data_type_field, { si_name => mother_id , scalar_data_type => entity_id , }, ],
], ],
[ row_data_type, person_with_parents, [
[ row_data_type_field, { si_name => self_id , scalar_data_type => entity_id , }, ],
[ row_data_type_field, { si_name => self_name , scalar_data_type => person_name, }, ],
[ row_data_type_field, { si_name => father_id , scalar_data_type => entity_id , }, ],
[ row_data_type_field, { si_name => father_name, scalar_data_type => person_name, }, ],
[ row_data_type_field, { si_name => mother_id , scalar_data_type => entity_id , }, ],
[ row_data_type_field, { si_name => mother_name, scalar_data_type => person_name, }, ],
], ],
] );
# This defines the blueprint of a database catalog that contains a single schema and a single virtual user which owns the schema.
my $catalog_bp = $model->build_child_node_tree( catalog, Gene Database, [
[ owner, Lord of the Root, ],
[ schema, { si_name => Gene Schema, owner => Lord of the Root, }, ],
] );
my $schema = $catalog_bp->find_child_node_by_surrogate_id( Gene Schema );
# This defines a base table (table) schema object that lives in the aforementioned database catalog.
# It contains 6 columns, including a not-null primary key (having a trivial sequence generator to give it
# default values), another not-null field, a surrogate key, and 2 self-referencing foreign keys.
# Each row represents a single person, for each storing up to 2 unique identifiers, name, sex, and the parents unique ids.
my $tb_person = $schema->build_child_node_tree( table, { si_name => person, row_data_type => person, }, [
[ table_field, { si_row_field => person_id, mandatory => 1, default_val => 1, auto_inc => 1, }, ],
[ table_field, { si_row_field => name , mandatory => 1, }, ],
[ table_index, { si_name => primary , index_type => UNIQUE, }, [
[ table_index_field, person_id, ],
], ],
[ table_index, { si_name => ak_alternate_id, index_type => UNIQUE, }, [
[ table_index_field, alternate_id, ],
], ],
[ table_index, { si_name => fk_father, index_type => FOREIGN, f_table => person, }, [
[ table_index_field, { si_field => father_id, f_field => person_id } ],
], ],
[ table_index, { si_name => fk_mother, index_type => FOREIGN, f_table => person, }, [
[ table_index_field, { si_field => mother_id, f_field => person_id } ],
], ],
] );
# This defines a viewed table (view) schema object that lives in the aforementioned database catalog.
# It left-outer-joins the person table to itself twice and returns 2 columns from each constituent, for 6 total.
# Each row gives the unique id and name each for 3 people, a given person and that persons 2 parents.
my $vw_pwp = $schema->build_child_node_tree( view, { si_name => person_with_parents,
view_type => JOINED, row_data_type => person_with_parents, }, [
( map { [ view_src, { si_name => $_, match => person, }, [
map { [ view_src_field, $_, ], } ( person_id, name, father_id, mother_id, ),
], ], } (self) ),
( map { [ view_src, { si_name => $_, match => person, }, [
map { [ view_src_field, $_, ], } ( person_id, name, ),
], ], } ( father, mother, ) ),
[ view_field, { si_row_field => self_id , src_field => [person_id,self ], }, ],
[ view_field, { si_row_field => self_name , src_field => [name ,self ], }, ],
[ view_field, { si_row_field => father_id , src_field => [person_id,father], }, ],
[ view_field, { si_row_field => father_name, src_field => [name ,father], }, ],
[ view_field, { si_row_field => mother_id , src_field => [person_id,mother], }, ],
[ view_field, { si_row_field => mother_name, src_field => [name ,mother], }, ],
[ view_join, { lhs_src => self, rhs_src => father, join_op => LEFT, }, [
[ view_join_field, { lhs_src_field => father_id, rhs_src_field => person_id } ],
], ],
[ view_join, { lhs_src => self, rhs_src => mother, join_op => LEFT, }, [
[ view_join_field, { lhs_src_field => mother_id, rhs_src_field => person_id } ],
], ],
] );
# This defines the blueprint of an application that has a single virtual connection descriptor to the above database.
my $application_bp = $model->build_child_node_tree( application, Gene App, [
[ catalog_link, { si_name => editor_link, target => $catalog_bp, }, ],
] );
# This defines another scalar data type, which is used by some routines that follow below.
my $sdt_login_auth = $model->build_child_node( scalar_data_type, { si_name => login_auth,
base_type => STR_CHAR, max_chars => 20, char_enc => UTF8, } );
# This defines an application-side routine/function that connects to the Gene Database, fetches all
# the records from the person_with_parents view, disconnects the database, and returns the fetched records.
# It takes run-time arguments for a user login name and password that are used when connecting.
my $rt_fetch_pwp = $application_bp->build_child_node_tree( routine, { si_name => fetch_pwp,
routine_type => FUNCTION, return_cont_type => RW_ARY, return_row_data_type => person_with_parents, }, [
[ routine_arg, { si_name => login_name, cont_type => SCALAR, scalar_data_type => $sdt_login_auth }, ],
[ routine_arg, { si_name => login_pass, cont_type => SCALAR, scalar_data_type => $sdt_login_auth }, ],
[ routine_var, { si_name => conn_cx, cont_type => CONN, conn_link => editor_link, }, ],
[ routine_stmt, { call_sroutine => CATALOG_OPEN, }, [
[ routine_expr, { call_sroutine_cxt => CONN_CX, cont_type => CONN, valf_p_routine_item => conn_cx, }, ],
[ routine_expr, { call_sroutine_arg => LOGIN_NAME, cont_type => SCALAR, valf_p_routine_item => login_name, }, ],
[ routine_expr, { call_sroutine_arg => LOGIN_PASS, cont_type => SCALAR, valf_p_routine_item => login_pass, }, ],
], ],
[ routine_var, { si_name => pwp_ary, cont_type => RW_ARY, row_data_type => person_with_parents, }, ],
[ routine_stmt, { call_sroutine => SELECT, }, [
[ view, { si_name => query_pwp, view_type => ALIAS, row_data_type => person_with_parents, }, [
[ view_src, { si_name => s, match => $vw_pwp, }, ],
], ],
[ routine_expr, { call_sroutine_cxt => CONN_CX, cont_type => CONN, valf_p_routine_item => conn_cx, }, ],
[ routine_expr, { call_sroutine_arg => SELECT_DEFN, cont_type => SRT_NODE, act_on => query_pwp, }, ],
[ routine_expr, { call_sroutine_arg => INTO, query_dest => pwp_ary, cont_type => RW_ARY, }, ],
], ],
[ routine_stmt, { call_sroutine => CATALOG_CLOSE, }, [
[ routine_expr, { call_sroutine_cxt => CONN_CX, cont_type => CONN, valf_p_routine_item, conn_cx, }, ],
], ],
[ routine_stmt, { call_sroutine => RETURN, }, [
[ routine_expr, { call_sroutine_arg => RETURN_VALUE, cont_type => RW_ARY, valf_p_routine_item => pwp_ary, }, ],
], ],
] );
# This defines an application-side routine/procedure that inserts a set of records, given in an argument,
# into the person table. It takes an already opened db connection handle to operate through as a
# context argument (which would represent the invocant if this routine was wrapped in an object-oriented interface).
my $rt_add_people = $application_bp->build_child_node_tree( routine, { si_name => add_people, routine_type => PROCEDURE, }, [
[ routine_context, { si_name => conn_cx, cont_type => CONN, conn_link => editor_link, }, ],
[ routine_arg, { si_name => person_ary, cont_type => RW_ARY, row_data_type => person, }, ],
[ routine_stmt, { call_sroutine => INSERT, }, [
[ view, { si_name => insert_people, view_type => INSERT, row_data_type => person, ins_p_routine_item => person_ary, }, [
[ view_src, { si_name => s, match => $tb_person, }, ],
], ],
[ routine_expr, { call_sroutine_cxt => CONN_CX, cont_type => CONN, valf_p_routine_item => conn_cx, }, ],
[ routine_expr, { call_sroutine_arg => INSERT_DEFN, cont_type => SRT_NODE, act_on => insert_people, }, ],
], ],
] );
# This defines an application-side routine/function that fetches one record
# from the person table which matches its argument.
my $rt_get_person = $application_bp->build_child_node_tree( routine, { si_name => get_person,
routine_type => FUNCTION, return_cont_type => ROW, return_row_data_type => person, }, [
[ routine_context, { si_name => conn_cx, cont_type => CONN, conn_link => editor_link, }, ],
[ routine_arg, { si_name => arg_person_id, cont_type => SCALAR, scalar_data_type => entity_id, }, ],
[ routine_var, { si_name => person_row, cont_type => ROW, row_data_type => person, }, ],
[ routine_stmt, { call_sroutine => SELECT, }, [
[ view, { si_name => query_person, view_type => JOINED, row_data_type => person, }, [
[ view_src, { si_name => s, match => $tb_person, }, [
[ view_src_field, person_id, ],
], ],
[ view_expr, { view_part => WHERE, cont_type => SCALAR, valf_call_sroutine => EQ, }, [
[ view_expr, { call_sroutine_arg => LHS, cont_type => SCALAR, valf_src_field => person_id, }, ],
[ view_expr, { call_sroutine_arg => RHS, cont_type => SCALAR, valf_p_routine_item => arg_person_id, }, ],
], ],
], ],
[ routine_expr, { call_sroutine_cxt => CONN_CX, cont_type => CONN, valf_p_routine_item => conn_cx, }, ],
[ routine_expr, { call_sroutine_arg => SELECT_DEFN, cont_type => SRT_NODE, act_on => query_person, }, ],
[ routine_expr, { call_sroutine_arg => INTO, query_dest => person_row, cont_type => RW_ARY, }, ],
], ],
[ routine_stmt, { call_sroutine => RETURN, }, [
[ routine_expr, { call_sroutine_arg => RETURN_VALUE, cont_type => ROW, valf_p_routine_item => person_row, }, ],
], ],
] );
# This defines 6 database engine descriptors and 2 database bridge descriptors that we may be using.
# These details can help external code determine such things as what string-SQL flavors should be
# generated from the model, as well as which database features can be used natively or have to be emulated.
# The si_name has no meaning to code and is for users; the other attribute values should have meaning to said external code.
$model->build_child_node_trees( [
[ data_storage_product, { si_name => SQLite v3.2 , product_code => SQLite_3_2 , is_file_based => 1, }, ],
[ data_storage_product, { si_name => MySQL v5.0 , product_code => MySQL_5_0 , is_network_svc => 1, }, ],
[ data_storage_product, { si_name => PostgreSQL v8, product_code => PostgreSQL_8, is_network_svc => 1, }, ],
[ data_storage_product, { si_name => Oracle v10g , product_code => Oracle_10_g , is_network_svc => 1, }, ],
[ data_storage_product, { si_name => Sybase , product_code => Sybase , is_network_svc => 1, }, ],
[ data_storage_product, { si_name => CSV , product_code => CSV , is_file_based => 1, }, ],
[ data_link_product, { si_name => Microsoft ODBC v3, product_code => ODBC_3, }, ],
[ data_link_product, { si_name => Oracle OCI*8, product_code => OCI_8, }, ],
[ data_link_product, { si_name => Generic Rosetta Engine, product_code => Rosetta::Engine::Generic, }, ],
] );
# This defines one concrete instance each of the database catalog and an application using it.
# This concrete database instance includes two concrete user definitions, one that can owns
# the schema and one that can only edit data. The concrete application instance includes
# a concrete connection descriptor going to this concrete database instance.
# Note that user descriptions are only stored in a SQL::Routine model when that model is being used to create
# database catalogs and/or create or modify database users; otherwise user should not be kept for security sake.
$model->build_child_node_trees( [
[ catalog_instance, { si_name => test, blueprint => $catalog_bp, product => PostgreSQL v8, }, [
[ user, { si_name => ronsealy, user_type => SCHEMA_OWNER, match_owner => Lord of the Root, password => K34dsD, }, ],
[ user, { si_name => joesmith, user_type => DATA_EDITOR, password => fdsKJ4, }, ],
], ],
[ application_instance, { si_name => test app, blueprint => $application_bp, }, [
[ catalog_link_instance, { blueprint => editor_link, product => Microsoft ODBC v3, target => test, local_dsn => keep_it, }, ],
], ],
] );
# This defines another concrete instance each of the database catalog and an application using it.
$model->build_child_node_trees( [
[ catalog_instance, { si_name => production, blueprint => $catalog_bp, product => Oracle v10g, }, [
[ user, { si_name => florence, user_type => SCHEMA_OWNER, match_owner => Lord of the Root, password => 0sfs8G, }, ],
[ user, { si_name => thainuff, user_type => DATA_EDITOR, password => 9340sd, }, ],
], ],
[ application_instance, { si_name => production app, blueprint => $application_bp, }, [
[ catalog_link_instance, { blueprint => editor_link, product => Oracle OCI*8, target => production, local_dsn => ship_it, }, ],
], ],
] );
# This defines a third concrete instance each of the database catalog and an application using it.
$model->build_child_node_trees( [
[ catalog_instance, { si_name => laptop demo, blueprint => $catalog_bp, product => SQLite v3.2, file_path => Move It, }, ],
[ application_instance, { si_name => laptop demo app, blueprint => $application_bp, }, [
[ catalog_link_instance, { blueprint => editor_link, product => Generic Rosetta Engine, target => laptop demo, }, ],
], ],
] );
# This line will run some correctness tests on the model that were not done
# when the model was being populated for execution speed efficiency.
$model->assert_deferrable_constraints();
# This line will dump the contents of the model in pretty-printed XML format.
# It can be helpful when debugging your programs that use SQL::Routine.
print $model->get_all_properties_as_xml_str( 1 );
};
$@ and print error_to_string($@);
# SQL::Routine throws object exceptions when it encounters bad input; this function
# will convert those into human readable text for display by the try/catch block.
sub error_to_string {
my ($message) = @_;
if (ref $message and UNIVERSAL::isa( $message, Locale::KeyedText::Message )) {
my $translator = Locale::KeyedText->new_translator( [SQL::Routine::L::], [en] );
my $user_text = $translator->translate_message( $message );
return q{internal error: cant find user text for a message: }
. $message->as_string() . . $translator->as_string();
if !$user_text;
return $user_text;
}
return $message; # if this isnt the right kind of object
}
Note that one key feature of SQL::Routine is that all of a models pieces are linked by references rather than by name as in SQL itself. For example, the name of the person table is only stored once internally; if, after executing all of the above code, you were to run "$tb_person->set_attribute( si_name, The Huddled Masses );", then all of the other parts of the model that referred to the table would not break, and an XML dump would show that all the references now say The Huddled Masses.
For some more (older) examples of SQL::Routine in use, see its test suite code.
<<lessSYNOPSIS
This executable code example shows how to define some simple database tasks with SQL::Routine; it only shows a tiny fraction of what the module is capable of, since more advanced features are not shown for brevity.
use SQL::Routine;
eval {
# Create a model/container in which all SQL details are to be stored.
# The two boolean options being set true here permit all the subsequent code to be as concise,
# easy to read, and most SQL-string-like as possible, at the cost of being slower to execute.
my $model = SQL::Routine->new_container();
$model->auto_set_node_ids( 1 );
$model->may_match_surrogate_node_ids( 1 );
# This defines 4 scalar/column/field data types (1 number, 2 char strings, 1 enumerated value type)
# and 2 row/table data types; the former are atomic and the latter are composite.
# The former can describe individual columns of a base table (table) or viewed table (view),
# while the latter can describe an entire table or view.
# Any of these can describe a domain schema object or a stored procedures variables data type.
# See also the person and person_with_parents table+view defs further below; these data types help describe them.
$model->build_child_node_trees( [
[ scalar_data_type, { si_name => entity_id , base_type => NUM_INT , num_precision => 9, }, ],
[ scalar_data_type, { si_name => alt_id , base_type => STR_CHAR, max_chars => 20, char_enc => UTF8, }, ],
[ scalar_data_type, { si_name => person_name, base_type => STR_CHAR, max_chars => 100, char_enc => UTF8, }, ],
[ scalar_data_type, { si_name => person_sex , base_type => STR_CHAR, max_chars => 1, char_enc => UTF8, }, [
[ scalar_data_type_opt, M, ],
[ scalar_data_type_opt, F, ],
], ],
[ row_data_type, person, [
[ row_data_type_field, { si_name => person_id , scalar_data_type => entity_id , }, ],
[ row_data_type_field, { si_name => alternate_id, scalar_data_type => alt_id , }, ],
[ row_data_type_field, { si_name => name , scalar_data_type => person_name, }, ],
[ row_data_type_field, { si_name => sex , scalar_data_type => person_sex , }, ],
[ row_data_type_field, { si_name => father_id , scalar_data_type => entity_id , }, ],
[ row_data_type_field, { si_name => mother_id , scalar_data_type => entity_id , }, ],
], ],
[ row_data_type, person_with_parents, [
[ row_data_type_field, { si_name => self_id , scalar_data_type => entity_id , }, ],
[ row_data_type_field, { si_name => self_name , scalar_data_type => person_name, }, ],
[ row_data_type_field, { si_name => father_id , scalar_data_type => entity_id , }, ],
[ row_data_type_field, { si_name => father_name, scalar_data_type => person_name, }, ],
[ row_data_type_field, { si_name => mother_id , scalar_data_type => entity_id , }, ],
[ row_data_type_field, { si_name => mother_name, scalar_data_type => person_name, }, ],
], ],
] );
# This defines the blueprint of a database catalog that contains a single schema and a single virtual user which owns the schema.
my $catalog_bp = $model->build_child_node_tree( catalog, Gene Database, [
[ owner, Lord of the Root, ],
[ schema, { si_name => Gene Schema, owner => Lord of the Root, }, ],
] );
my $schema = $catalog_bp->find_child_node_by_surrogate_id( Gene Schema );
# This defines a base table (table) schema object that lives in the aforementioned database catalog.
# It contains 6 columns, including a not-null primary key (having a trivial sequence generator to give it
# default values), another not-null field, a surrogate key, and 2 self-referencing foreign keys.
# Each row represents a single person, for each storing up to 2 unique identifiers, name, sex, and the parents unique ids.
my $tb_person = $schema->build_child_node_tree( table, { si_name => person, row_data_type => person, }, [
[ table_field, { si_row_field => person_id, mandatory => 1, default_val => 1, auto_inc => 1, }, ],
[ table_field, { si_row_field => name , mandatory => 1, }, ],
[ table_index, { si_name => primary , index_type => UNIQUE, }, [
[ table_index_field, person_id, ],
], ],
[ table_index, { si_name => ak_alternate_id, index_type => UNIQUE, }, [
[ table_index_field, alternate_id, ],
], ],
[ table_index, { si_name => fk_father, index_type => FOREIGN, f_table => person, }, [
[ table_index_field, { si_field => father_id, f_field => person_id } ],
], ],
[ table_index, { si_name => fk_mother, index_type => FOREIGN, f_table => person, }, [
[ table_index_field, { si_field => mother_id, f_field => person_id } ],
], ],
] );
# This defines a viewed table (view) schema object that lives in the aforementioned database catalog.
# It left-outer-joins the person table to itself twice and returns 2 columns from each constituent, for 6 total.
# Each row gives the unique id and name each for 3 people, a given person and that persons 2 parents.
my $vw_pwp = $schema->build_child_node_tree( view, { si_name => person_with_parents,
view_type => JOINED, row_data_type => person_with_parents, }, [
( map { [ view_src, { si_name => $_, match => person, }, [
map { [ view_src_field, $_, ], } ( person_id, name, father_id, mother_id, ),
], ], } (self) ),
( map { [ view_src, { si_name => $_, match => person, }, [
map { [ view_src_field, $_, ], } ( person_id, name, ),
], ], } ( father, mother, ) ),
[ view_field, { si_row_field => self_id , src_field => [person_id,self ], }, ],
[ view_field, { si_row_field => self_name , src_field => [name ,self ], }, ],
[ view_field, { si_row_field => father_id , src_field => [person_id,father], }, ],
[ view_field, { si_row_field => father_name, src_field => [name ,father], }, ],
[ view_field, { si_row_field => mother_id , src_field => [person_id,mother], }, ],
[ view_field, { si_row_field => mother_name, src_field => [name ,mother], }, ],
[ view_join, { lhs_src => self, rhs_src => father, join_op => LEFT, }, [
[ view_join_field, { lhs_src_field => father_id, rhs_src_field => person_id } ],
], ],
[ view_join, { lhs_src => self, rhs_src => mother, join_op => LEFT, }, [
[ view_join_field, { lhs_src_field => mother_id, rhs_src_field => person_id } ],
], ],
] );
# This defines the blueprint of an application that has a single virtual connection descriptor to the above database.
my $application_bp = $model->build_child_node_tree( application, Gene App, [
[ catalog_link, { si_name => editor_link, target => $catalog_bp, }, ],
] );
# This defines another scalar data type, which is used by some routines that follow below.
my $sdt_login_auth = $model->build_child_node( scalar_data_type, { si_name => login_auth,
base_type => STR_CHAR, max_chars => 20, char_enc => UTF8, } );
# This defines an application-side routine/function that connects to the Gene Database, fetches all
# the records from the person_with_parents view, disconnects the database, and returns the fetched records.
# It takes run-time arguments for a user login name and password that are used when connecting.
my $rt_fetch_pwp = $application_bp->build_child_node_tree( routine, { si_name => fetch_pwp,
routine_type => FUNCTION, return_cont_type => RW_ARY, return_row_data_type => person_with_parents, }, [
[ routine_arg, { si_name => login_name, cont_type => SCALAR, scalar_data_type => $sdt_login_auth }, ],
[ routine_arg, { si_name => login_pass, cont_type => SCALAR, scalar_data_type => $sdt_login_auth }, ],
[ routine_var, { si_name => conn_cx, cont_type => CONN, conn_link => editor_link, }, ],
[ routine_stmt, { call_sroutine => CATALOG_OPEN, }, [
[ routine_expr, { call_sroutine_cxt => CONN_CX, cont_type => CONN, valf_p_routine_item => conn_cx, }, ],
[ routine_expr, { call_sroutine_arg => LOGIN_NAME, cont_type => SCALAR, valf_p_routine_item => login_name, }, ],
[ routine_expr, { call_sroutine_arg => LOGIN_PASS, cont_type => SCALAR, valf_p_routine_item => login_pass, }, ],
], ],
[ routine_var, { si_name => pwp_ary, cont_type => RW_ARY, row_data_type => person_with_parents, }, ],
[ routine_stmt, { call_sroutine => SELECT, }, [
[ view, { si_name => query_pwp, view_type => ALIAS, row_data_type => person_with_parents, }, [
[ view_src, { si_name => s, match => $vw_pwp, }, ],
], ],
[ routine_expr, { call_sroutine_cxt => CONN_CX, cont_type => CONN, valf_p_routine_item => conn_cx, }, ],
[ routine_expr, { call_sroutine_arg => SELECT_DEFN, cont_type => SRT_NODE, act_on => query_pwp, }, ],
[ routine_expr, { call_sroutine_arg => INTO, query_dest => pwp_ary, cont_type => RW_ARY, }, ],
], ],
[ routine_stmt, { call_sroutine => CATALOG_CLOSE, }, [
[ routine_expr, { call_sroutine_cxt => CONN_CX, cont_type => CONN, valf_p_routine_item, conn_cx, }, ],
], ],
[ routine_stmt, { call_sroutine => RETURN, }, [
[ routine_expr, { call_sroutine_arg => RETURN_VALUE, cont_type => RW_ARY, valf_p_routine_item => pwp_ary, }, ],
], ],
] );
# This defines an application-side routine/procedure that inserts a set of records, given in an argument,
# into the person table. It takes an already opened db connection handle to operate through as a
# context argument (which would represent the invocant if this routine was wrapped in an object-oriented interface).
my $rt_add_people = $application_bp->build_child_node_tree( routine, { si_name => add_people, routine_type => PROCEDURE, }, [
[ routine_context, { si_name => conn_cx, cont_type => CONN, conn_link => editor_link, }, ],
[ routine_arg, { si_name => person_ary, cont_type => RW_ARY, row_data_type => person, }, ],
[ routine_stmt, { call_sroutine => INSERT, }, [
[ view, { si_name => insert_people, view_type => INSERT, row_data_type => person, ins_p_routine_item => person_ary, }, [
[ view_src, { si_name => s, match => $tb_person, }, ],
], ],
[ routine_expr, { call_sroutine_cxt => CONN_CX, cont_type => CONN, valf_p_routine_item => conn_cx, }, ],
[ routine_expr, { call_sroutine_arg => INSERT_DEFN, cont_type => SRT_NODE, act_on => insert_people, }, ],
], ],
] );
# This defines an application-side routine/function that fetches one record
# from the person table which matches its argument.
my $rt_get_person = $application_bp->build_child_node_tree( routine, { si_name => get_person,
routine_type => FUNCTION, return_cont_type => ROW, return_row_data_type => person, }, [
[ routine_context, { si_name => conn_cx, cont_type => CONN, conn_link => editor_link, }, ],
[ routine_arg, { si_name => arg_person_id, cont_type => SCALAR, scalar_data_type => entity_id, }, ],
[ routine_var, { si_name => person_row, cont_type => ROW, row_data_type => person, }, ],
[ routine_stmt, { call_sroutine => SELECT, }, [
[ view, { si_name => query_person, view_type => JOINED, row_data_type => person, }, [
[ view_src, { si_name => s, match => $tb_person, }, [
[ view_src_field, person_id, ],
], ],
[ view_expr, { view_part => WHERE, cont_type => SCALAR, valf_call_sroutine => EQ, }, [
[ view_expr, { call_sroutine_arg => LHS, cont_type => SCALAR, valf_src_field => person_id, }, ],
[ view_expr, { call_sroutine_arg => RHS, cont_type => SCALAR, valf_p_routine_item => arg_person_id, }, ],
], ],
], ],
[ routine_expr, { call_sroutine_cxt => CONN_CX, cont_type => CONN, valf_p_routine_item => conn_cx, }, ],
[ routine_expr, { call_sroutine_arg => SELECT_DEFN, cont_type => SRT_NODE, act_on => query_person, }, ],
[ routine_expr, { call_sroutine_arg => INTO, query_dest => person_row, cont_type => RW_ARY, }, ],
], ],
[ routine_stmt, { call_sroutine => RETURN, }, [
[ routine_expr, { call_sroutine_arg => RETURN_VALUE, cont_type => ROW, valf_p_routine_item => person_row, }, ],
], ],
] );
# This defines 6 database engine descriptors and 2 database bridge descriptors that we may be using.
# These details can help external code determine such things as what string-SQL flavors should be
# generated from the model, as well as which database features can be used natively or have to be emulated.
# The si_name has no meaning to code and is for users; the other attribute values should have meaning to said external code.
$model->build_child_node_trees( [
[ data_storage_product, { si_name => SQLite v3.2 , product_code => SQLite_3_2 , is_file_based => 1, }, ],
[ data_storage_product, { si_name => MySQL v5.0 , product_code => MySQL_5_0 , is_network_svc => 1, }, ],
[ data_storage_product, { si_name => PostgreSQL v8, product_code => PostgreSQL_8, is_network_svc => 1, }, ],
[ data_storage_product, { si_name => Oracle v10g , product_code => Oracle_10_g , is_network_svc => 1, }, ],
[ data_storage_product, { si_name => Sybase , product_code => Sybase , is_network_svc => 1, }, ],
[ data_storage_product, { si_name => CSV , product_code => CSV , is_file_based => 1, }, ],
[ data_link_product, { si_name => Microsoft ODBC v3, product_code => ODBC_3, }, ],
[ data_link_product, { si_name => Oracle OCI*8, product_code => OCI_8, }, ],
[ data_link_product, { si_name => Generic Rosetta Engine, product_code => Rosetta::Engine::Generic, }, ],
] );
# This defines one concrete instance each of the database catalog and an application using it.
# This concrete database instance includes two concrete user definitions, one that can owns
# the schema and one that can only edit data. The concrete application instance includes
# a concrete connection descriptor going to this concrete database instance.
# Note that user descriptions are only stored in a SQL::Routine model when that model is being used to create
# database catalogs and/or create or modify database users; otherwise user should not be kept for security sake.
$model->build_child_node_trees( [
[ catalog_instance, { si_name => test, blueprint => $catalog_bp, product => PostgreSQL v8, }, [
[ user, { si_name => ronsealy, user_type => SCHEMA_OWNER, match_owner => Lord of the Root, password => K34dsD, }, ],
[ user, { si_name => joesmith, user_type => DATA_EDITOR, password => fdsKJ4, }, ],
], ],
[ application_instance, { si_name => test app, blueprint => $application_bp, }, [
[ catalog_link_instance, { blueprint => editor_link, product => Microsoft ODBC v3, target => test, local_dsn => keep_it, }, ],
], ],
] );
# This defines another concrete instance each of the database catalog and an application using it.
$model->build_child_node_trees( [
[ catalog_instance, { si_name => production, blueprint => $catalog_bp, product => Oracle v10g, }, [
[ user, { si_name => florence, user_type => SCHEMA_OWNER, match_owner => Lord of the Root, password => 0sfs8G, }, ],
[ user, { si_name => thainuff, user_type => DATA_EDITOR, password => 9340sd, }, ],
], ],
[ application_instance, { si_name => production app, blueprint => $application_bp, }, [
[ catalog_link_instance, { blueprint => editor_link, product => Oracle OCI*8, target => production, local_dsn => ship_it, }, ],
], ],
] );
# This defines a third concrete instance each of the database catalog and an application using it.
$model->build_child_node_trees( [
[ catalog_instance, { si_name => laptop demo, blueprint => $catalog_bp, product => SQLite v3.2, file_path => Move It, }, ],
[ application_instance, { si_name => laptop demo app, blueprint => $application_bp, }, [
[ catalog_link_instance, { blueprint => editor_link, product => Generic Rosetta Engine, target => laptop demo, }, ],
], ],
] );
# This line will run some correctness tests on the model that were not done
# when the model was being populated for execution speed efficiency.
$model->assert_deferrable_constraints();
# This line will dump the contents of the model in pretty-printed XML format.
# It can be helpful when debugging your programs that use SQL::Routine.
print $model->get_all_properties_as_xml_str( 1 );
};
$@ and print error_to_string($@);
# SQL::Routine throws object exceptions when it encounters bad input; this function
# will convert those into human readable text for display by the try/catch block.
sub error_to_string {
my ($message) = @_;
if (ref $message and UNIVERSAL::isa( $message, Locale::KeyedText::Message )) {
my $translator = Locale::KeyedText->new_translator( [SQL::Routine::L::], [en] );
my $user_text = $translator->translate_message( $message );
return q{internal error: cant find user text for a message: }
. $message->as_string() . . $translator->as_string();
if !$user_text;
return $user_text;
}
return $message; # if this isnt the right kind of object
}
Note that one key feature of SQL::Routine is that all of a models pieces are linked by references rather than by name as in SQL itself. For example, the name of the person table is only stored once internally; if, after executing all of the above code, you were to run "$tb_person->set_attribute( si_name, The Huddled Masses );", then all of the other parts of the model that referred to the table would not break, and an XML dump would show that all the references now say The Huddled Masses.
For some more (older) examples of SQL::Routine in use, see its test suite code.
Download (0.17MB)
Added: 2006-09-12 License: Perl Artistic License Price:
1137 downloads
Aklabeth 1.0
Aklabeth is a remake of the original Ultima. more>>
Aklabeth project is a remake of the original Ultima.
Aklabeth is a rewrite of Richard C Garriotts Ultima Prequel. Like Ultima 1 to 5, it features a mixture of wandering through (sort of) 3D dungeons, monsters, and tasks to complete.
This game is a port, written in a mixture of C and C++. I wrote this a year or two back, cant remember why, in C. I glued it to my SDL wrapper library and released it.
Its a RPG - sort of. You wander the top world, visit 3D (sort of) dungeons, beat up monsters and perform tasks for the legendary Lord British (AKA Richard Garriott).
Keys:
N S E W (and arrow keys) move player both in upper world, and in the dungeons.
A - attack
I - inventory
Q - quit
X - enter town/shop/dungeon/climb up and down.
<<lessAklabeth is a rewrite of Richard C Garriotts Ultima Prequel. Like Ultima 1 to 5, it features a mixture of wandering through (sort of) 3D dungeons, monsters, and tasks to complete.
This game is a port, written in a mixture of C and C++. I wrote this a year or two back, cant remember why, in C. I glued it to my SDL wrapper library and released it.
Its a RPG - sort of. You wander the top world, visit 3D (sort of) dungeons, beat up monsters and perform tasks for the legendary Lord British (AKA Richard Garriott).
Keys:
N S E W (and arrow keys) move player both in upper world, and in the dungeons.
A - attack
I - inventory
Q - quit
X - enter town/shop/dungeon/climb up and down.
Download (0.22MB)
Added: 2007-01-05 License: GPL (GNU General Public License) Price:
1025 downloads
Liquid for Maya 1.5.2
LiquidMaya is a Maya plugin, Renderman-compliant. more>>
LiquidMaya is a Maya plugin, Renderman-compliant that handles full Renderman output support with a focus on speed, efficiency, and extensibility.
Its features include procedural rib generation, full network rendering support, segmented rib files, a shader assignment interface, and much more.
Along with the ability to write full C++ plug-ins, it is incredibly easy to script Liquid with Mel. Liquid was used for the visual effects of the "Lord of the Rings" movie.
Main features:
- Shader management is integrated with the HyperShade
- Vastly improved shadow generation and management
- Render Layers are directly supported
- Rendering may be previewed in Mayas RenderView panel
- The number of supported renderer has increased
<<lessIts features include procedural rib generation, full network rendering support, segmented rib files, a shader assignment interface, and much more.
Along with the ability to write full C++ plug-ins, it is incredibly easy to script Liquid with Mel. Liquid was used for the visual effects of the "Lord of the Rings" movie.
Main features:
- Shader management is integrated with the HyperShade
- Vastly improved shadow generation and management
- Render Layers are directly supported
- Rendering may be previewed in Mayas RenderView panel
- The number of supported renderer has increased
Download (2.2MB)
Added: 2006-09-01 License: GPL (GNU General Public License) Price:
1152 downloads
Attal 1.0 RC1
Attal: Lords of Doom is a strategy game still in development. more>>
Attal: Lords of Doom is a strategy game still in development.
Its a turn-based strategy game, that can be played alone (against AI) or against other through a network (local or internet). Attal is available under Linux and Windows.
<<lessIts a turn-based strategy game, that can be played alone (against AI) or against other through a network (local or internet). Attal is available under Linux and Windows.
Download (2.1MB)
Added: 2007-06-11 License: GPL (GNU General Public License) Price:
866 downloads
GNU arch 1.3.5
GNU arch is a revision control system, similar in purpose to tools such as CVS, SCCS, and Subversion. more>>
GNU arch is a revision control system, similar in purpose to tools such as CVS, SCCS, and Subversion. It is used to keep track of the changes made to a source tree and to help programmers combine and otherwise manipulate changes made by multiple people or at different times.
GNU arch has some features that make it particularly useful for public free software projects: its easy to learn; its inexpensive and easy to administer; its a distributed system so theres no need to give write permission to every project participant; it has excellent support for the kinds of branching and merging that can make a free software project team shine.
It is somewhat well known, these days, that some of the core developers of the Linux kernel are using a revision control system which is not free software. There is a need to create a free software alternative to that system and to do so is one of the goals of the arch project
Another goal of the arch project is to help free software development projects work better: migrating from CVS or another system to arch should help your project operate more effectively. If you maintain a GNU or other free software project, please consider joining the gnu-arch-users mailing list and exploring how arch can benefit your efforts.
<<lessGNU arch has some features that make it particularly useful for public free software projects: its easy to learn; its inexpensive and easy to administer; its a distributed system so theres no need to give write permission to every project participant; it has excellent support for the kinds of branching and merging that can make a free software project team shine.
It is somewhat well known, these days, that some of the core developers of the Linux kernel are using a revision control system which is not free software. There is a need to create a free software alternative to that system and to do so is one of the goals of the arch project
Another goal of the arch project is to help free software development projects work better: migrating from CVS or another system to arch should help your project operate more effectively. If you maintain a GNU or other free software project, please consider joining the gnu-arch-users mailing list and exploring how arch can benefit your efforts.
Download (3.5MB)
Added: 2006-07-24 License: GPL (GNU General Public License) Price:
1190 downloads
Secleted [ 0 ] software to compare
- Page: 1 of 2
- 1
- 2
Copyright Notice:
Software piracy is theft, Using crack, password, serial numbers, registration codes, key generators is illegal and prevent future software development. The above interplays lord search only lists software in full, demo and trial versions for free download. Download links are directly from our mirror sites or publisher sites, torrent files or links from rapidshare.com, yousendit.com or megaupload.com are not allowed