====== DRMAA bindings for scripting languages 5.7 ======
Most functions in DRMAA C library use reference parameters to get results when calling them. Using scripting languages makes this way of getting information unfeasible. For example python strings are immutable so it is not possible to fill an empty string with the information needed from the extension. The way the functions are called are the same as Perl and Python SGE DRMAA bindings, reference variables are omitted and what functions return is an array of result code, reference variables and error string. For example in C this call:result=drmaa_version(&major,&minor,error,DRMAA_ERROR_STRING_BUFFER-1);is translated to ruby as:(result, major, minor, error)=drmaa_version
**Table 1. Translation from C to Scripting language**
^ C ^ Scripting Language ^
| result=drmaa_get_next_attr_name(values, &value, value_len) | (result, value)=drmaa_get_next_attr_name(values) |
| result=drmaa_get_next_attr_value(values, &value, value_len) | (result, value)=drmaa_get_next_attr_value(values) |
| result=drmaa_get_next_job_id(values, &value, value_len) | (result, value)=drmaa_get_next_job_id(values) |
| result=drmaa_get_num_attr_names(values, &size) | (result, size)=drmaa_get_num_attr_names(values) |
| result=drmaa_get_num_attr_values(values, &size) | (result, size)=drmaa_get_num_attr_values(values) |
| result=drmaa_get_num_job_ids(values, &size) | (result, size)=drmaa_get_num_job_ids(values) |
| drmaa_release_attr_names(values) | drmaa_release_attr_names(values) |
| drmaa_release_attr_values(values) | drmaa_release_attr_values(values) |
| drmaa_release_job_ids(values) | drmaa_release_job_ids(values) |
| result=drmaa_init(contact, error, error_len) | (result, error)=drmaa_init(nil) |
| result=drmaa_exit(error, error_len) | (result, error)=drmaa_exit() |
| result=drmaa_allocate_job_template(&jt, error, error_len) | (result, jt, error)=drmaa_allocate_job_template() |
| result=drmaa_delete_job_template(jt, error, error_len) | (result, error)=drmaa_delete_job_template(jt) |
| result=drmaa_set_attribute(jt, name, value, error, error_len) | (result, error)=drmaa_set_attribute(jt, name, value) |
| result=drmaa_get_attribute(jt, name, &value, error, error_len) | (result, value, error)=drmaa_get_attribute(jt, name) |
| result=drmaa_set_vector_attribute(jt, name, value, error, error_len) | (result, error)=drmaa_set_vector_attribute(jt, name, value) |
| result=drmaa_get_vector_attribute(jt, name, &values, error, error_len) | (result, values, error)=drmaa_get_vector_attribute(jt, name) |
| result=drmaa_get_attribute_names(&values, error, error_len) | (result, values, error)=drmaa_get_attribute_names() |
| result=drmaa_get_vector_attribute_names(&values, error, error_len) | (result, values, error)=drmaa_get_vector_attribute_names() |
| result=drmaa_run_job(job_id, job_id_len, jt, error, error_len) | (result, job_id, error)=drmaa_run_job(jt) |
| result=drmaa_run_bulk_jobs(&jobids, jt, start, end, incr, error, error_len) | (result, jobids, error)=drmaa_run_bulk_jobs(jt, start, end, incr) |
| result=drmaa_control(jobid, action, error, error_len) | (result, error)=drmaa_control(jobid, action) |
| result=drmaa_job_ps(job_id, &remote_ps, error, error_len) | (result, remote_ps, error)=drmaa_job_ps(job_id) |
| result=drmaa_synchronize(job_ids, timeout, dispose, error, error_len) | (result, error)=drmaa_synchronize(job_ids, timeout, dispose) |
| result=drmaa_wait(job_id, job_id_out, job_id_out_len, &stat, timeout, &rusage, error, error_len) | (result, job_id_out, stat, rusage, error)=drmaa_wait(job_id, timeout) |
| result=drmaa_wifexited(&exited, stat, error, error_len) | (result, exited, error)=drmaa_wifexited(stat) |
| result=drmaa_wexitstatus(&exit_status, stat, error, error_len) | (result, exit_status, error)=drmaa_wexitstatus(stat) |
| result=drmaa_wifsignaled(&signaled, stat, error, error_len) | (result, signaled, error)=drmaa_wifsignaled(stat) |
| result=drmaa_wtermsig(signal, signal_len, stat, error, error_len) | (result, signal, error)=drmaa_wtermsig(stat) |
| result=drmaa_wcoredump(&core_dumped, stat, error, error_len) | (result, core_dumped, error)=drmaa_wcoredump(stat) |
| result=drmaa_wifaborted(&aborted, stat, error, error_len) | (result, aborted, error)=drmaa_wifaborted(stat) |
| error_string=drmaa_strerror(drmaa_errno) | error_string=drmaa_strerror(drmaa_errno) |
| result=drmaa_get_contact(contact, contact_len, error, error_len) | (result, contact, error)=drmaa_get_contact() |
| result=drmaa_version(&major, &minor, error, error_len) | (result, major, minor, error)=drmaa_version() |
| result=drmaa_get_DRM_system(drm_system, drm_system_len, error, error_len) | (result, drm_system, error)=drmaa_get_DRM_system() |
| result=drmaa_get_DRMAA_implementation(drmaa_impl, drmaa_impl_len, error, error_len) | (result, drmaa_impl, error)=drmaa_get_DRMAA_implementation() |
| str_status=drmaa_gw_strstatus(drmaa_state) | str_status=drmaa_gw_strstatus(drmaa_state) |
\\
^ Note ^
| In **drmaa_init** call we have to pass a **NULL** argument as GridWay DRMAA library requires it. Here as an example I used **nil** as it is the ruby object describing **NULL** but in perl you have to use **undef** and in python **None**. |