diff --git a/src/msgs/templates.sql b/src/msgs/templates.sql new file mode 100644 index 0000000000..c3e0cd8c75 --- /dev/null +++ b/src/msgs/templates.sql @@ -0,0 +1,16108 @@ +CONNECT "msg.fdb"; + +INSERT INTO TEMPLATES (LANGUAGE, "FILE", TEMPLATE) VALUES ('C', 'gds.h', +'/* + * PROGRAM: C preprocessor + * MODULE: gds.h + * DESCRIPTION: BLR constants + * + * copyright (c) 1984, 1990 by Interbase Software Corporation + */ + +#define gds_version3 + +#define GDS_$TRUE 1 +#define GDS_$FALSE 0 + +#ifndef apollo +#define GDS_VAL(val) val +#define GDS_REF(val) &val +#define GDS_TYPE long + +#else +#define GDS_VAL(val) (*val) +#define GDS_REF(val) val +#define GDS_TYPE std_$call +#endif + +GDS_TYPE gds_$attach_database (); +GDS_TYPE gds_$blob_info(); +GDS_TYPE gds_$cancel_blob(); +GDS_TYPE gds_$close_blob(); +GDS_TYPE gds_$commit_transaction (); +GDS_TYPE gds_$compile_request (); +GDS_TYPE gds_$compile_request2 (); +GDS_TYPE gds_$create_blob (); +GDS_TYPE gds_$create_blob2 (); +GDS_TYPE gds_$create_database (); +GDS_TYPE gds_$database_info (); +GDS_TYPE gds_$detach_database (); +GDS_TYPE gds_$get_segment (); +GDS_TYPE gds_$open_blob (); +GDS_TYPE gds_$open_blob2 (); +GDS_TYPE gds_$prepare_transaction (); +GDS_TYPE gds_$prepare_transaction2 (); +GDS_TYPE gds_$put_segment (); +GDS_TYPE gds_$receive (); +GDS_TYPE gds_$reconnect_transaction (); +GDS_TYPE gds_$request_info (); +GDS_TYPE gds_$release_request (); +GDS_TYPE gds_$rollback_transaction (); +GDS_TYPE gds_$seek_blob (); +GDS_TYPE gds_$send (); +GDS_TYPE gds_$set_debug (); +GDS_TYPE gds_$start_and_send (); +GDS_TYPE gds_$start_multiple (); +GDS_TYPE gds_$start_request (); +GDS_TYPE gds_$start_transaction (); +GDS_TYPE gds_$transaction_info (); +GDS_TYPE gds_$unwind_request (); +GDS_TYPE gds_$ftof (); +GDS_TYPE gds_$print_status (); +GDS_TYPE gds_$sqlcode (); +GDS_TYPE gds_$ddl(); +GDS_TYPE gds_$commit_retaining(); +GDS_TYPE gds_$que_events(); +GDS_TYPE gds_$cancel_events(); +GDS_TYPE gds_$event_wait(); +GDS_TYPE gds_$event_counts(); +GDS_TYPE gds_$event_block(); +GDS_TYPE gds_$event_block2(); +GDS_TYPE gds_$get_slice(); +GDS_TYPE gds_$put_slice(); +GDS_TYPE gds_$seek_blob(); + +void gds_$vtof (); + + +typedef struct { + long gds_quad_high; + unsigned long gds_quad_low; +} GDS_$QUAD; + +#define blr_word(n) (n % 256), (n / 256) + +$ SYMBOLS BLR DTYPE "#define %-34s %d\n + +$ SYMBOLS BLR JOIN "#define %-34s %d\n + +$ SYMBOLS BLR MECH "#define %-34s %d\n + +$ SYMBOLS BLR STATEMENTS "#define %-34s %d\n + +$ SYMBOLS BLR VALUES "#define %-34s %d\n + +$ SYMBOLS BLR BOOLEANS "#define %-34s %d\n + +$ SYMBOLS BLR RSE "#define %-34s %d\n + +$ SYMBOLS BLR AGGREGATE "#define %-34s %d\n + +$ SYMBOLS BLR NEW "#define %-34s %d\n + +/* Database parameter block stuff */ + +$ SYMBOLS DPB ITEMS "#define %-34s %d\n + +$ SYMBOLS DPB BITS "#define %-34s %d\n + +/* Bit assignments in RDB$SYSTEM_FLAG */ + +$ SYMBOLS RDB FLAG "#define %-34s %d\n + +/* Transaction parameter blob stuff */ + +$ SYMBOLS TPB ITEMS "#define %-34s %d\n + +/* Blob Parameter Block */ + +$ SYMBOLS BPB ITEMS "#define %-34s %d\n + +/* Blob stream stuff */ + +typedef struct bstream { + int *bstr_blob; /* Blob handle */ + char *bstr_buffer; /* Address of buffer */ + char *bstr_ptr; /* Next character */ + short bstr_length; /* Length of buffer */ + short bstr_cnt; /* Characters in buffer */ + char bstr_mode; /* (mode) ? OUTPUT : INPUT */ +} BSTREAM; + +#define getb(p) (--(p)->bstr_cnt >= 0 ? *(p)->bstr_ptr++ & 0377: BLOB_get (p)) +#define putb(x,p) ((x == '\n' || (!(--(p)->bstr_cnt))) ? BLOB_put (x,p) : ((int) (*(p)->bstr_ptr++ = (unsigned) (x)))) +#define putbx(x,p) ((!(--(p)->bstr_cnt)) ? BLOB_put (x,p) : ((int) (*(p)->bstr_ptr++ = (unsigned) (x)))) + +BSTREAM *Bopen(), *BLOB_open(); + +/* Information call declarations */ + +/* Common, structural codes */ + +$ SYMBOLS INFO MECH "#define %-34s %d\n + +/* Database information items */ + +$ SYMBOLS INFO DB "#define %-34s %d\n + +/* Database Info Return Values */ + +$ SYMBOLS INFO VALUES "#define %-34s %d\n + +/* Request information items */ + +$ SYMBOLS INFO REQUEST "#define %-34s %d\n + +/* Blob information items */ + +$ SYMBOLS INFO BLOB "#define %-34s %d\n + +/* Transaction information items */ + +$ SYMBOLS INFO TRANSACTION "#define %-34s %d\n + +/* Error codes */ + +$ SYMBOLS ERROR MECH "#define %-34s %d\n + +$ ERROR MAJOR "#define %-34s %d\n + +/* Minor codes subject to change */ + +$ ERROR MINOR "#define %-34s %d\n + +#define gds_err_max 143 + +/* Dynamic Data Definition Language operators */ + +/* Version number */ + +$ SYMBOLS DYN MECH "#define %-34s %d\n + +/* Operations (may be nested) */ + +$ SYMBOLS DYN OPERATIONS "#define %-34s %d\n + +/* View specific stuff */ + +$ SYMBOLS DYN VIEW "#define %-34s %d\n + +/* Generic attributes */ + +$ SYMBOLS DYN GENERIC "#define %-34s %d\n + +/* Relation specific attributes */ + +$ SYMBOLS DYN RELATION "#define %-34s %d\n + +/* Global field specific attributes */ + +$ SYMBOLS DYN GLOBAL "#define %-34s %d\n + +/* Local field specific attributes */ + +$ SYMBOLS DYN FIELD "#define %-34s %d\n + +/* Index specific attributes */ + +$ SYMBOLS DYN INDEX "#define %-34s %d\n + +/* Trigger specific attributes */ + +$ SYMBOLS DYN TRIGGER "#define %-34s %d\n + +/* Security Class specific attributes */ + +$ SYMBOLS DYN SECURITY "#define %-34s %d\n + +/* Dimension specific information */ + +$ SYMBOLS DYN ARRAY "#define %-34s %d\n + +/* File specific attributes */ + +$ SYMBOLS DYN FILES "#define %-34s %d\n + +/* Function specific attributes */ + +$ SYMBOLS DYN FUNCTIONS "#define %-34s %d\n + +/* Generator specific attributes */ + +$ SYMBOLS DYN GENERATOR "#define %-34s %d\n + +/* Array slice description language (SDL) */ + +$ SYMBOLS SDL SDL "#define %-34s %d\n + +/* Dynamic SQL definitions */ + +typedef struct { + short sqltype; + short sqllen; + char *sqldata; + short *sqlind; + short sqlname_length; + char sqlname [30]; +} SQLVAR; + +typedef struct { + char sqldaid [8]; + long sqldabc; + short sqln; + short sqld; + SQLVAR sqlvar[1]; +} SQLDA; + +#define SQLDA_LENGTH(n) (sizeof (SQLDA) + (n-1) * sizeof (SQLVAR)) + +$ SYMBOLS SQL DTYPE "#define %-34s %d\n + +/* Forms Package definitions */ + +/* Map definition block definitions */ + +$ SYMBOLS PYXIS MAP "#define %-34s %d\n + +/* Field option flags for display options */ + +$ SYMBOLS PYXIS DISPLAY "#define %-34s %d\n + +/* Field option values following display */ + +$ SYMBOLS PYXIS VALUE "#define %-34s %d\n + +/* Pseudo key definitions */ + +$ SYMBOLS PYXIS KEY "#define %-34s %d\n + +/* Menu definition stuff */ + +$ SYMBOLS PYXIS MENU "#define %-34s %d\n'); +INSERT INTO TEMPLATES (LANGUAGE, "FILE", TEMPLATE) VALUES ('C++', 'gds.hxx', +'/* + * PROGRAM: C preprocessor + * MODULE: gds.hxx + * DESCRIPTION: BLR constants for C++ + * + * copyright (c) 1984, 1990 by Interbase Software Corporation + */ + +#define gds_version3 + +#define GDS_TRUE 1 +#define GDS_FALSE 0 + +typedef long gds_db_handle; +typedef long gds_req_handle; +typedef long gds_tr_handle; +typedef long gds_blob_handle; +typedef long gds_win_handle; +typedef long gds_form_handle; +typedef void (*gds_callback)(); + +typedef struct { + long gds_quad_high; + unsigned long gds_quad_low; +} GDS_QUAD; + +/* Dynamic SQL definitions */ + +typedef struct { + short sqltype; + short sqllen; + char *sqldata; + short *sqlind; + short sqlname_length; + char sqlname [30]; +} SQLVAR; + +typedef struct { + char sqldaid [8]; + long sqldabc; + short sqln; + short sqld; + SQLVAR sqlvar[1]; +} SQLDA; + +#define SQLDA_LENGTH(n) (sizeof (SQLDA) + (n-1) * sizeof (SQLVAR)) + +extern long + isc_attach_database (long*, short, char*, gds_db_handle*, short, char*), + isc_blob_info (long*, gds_blob_handle*, short, char*, short, char*), + isc_cancel_blob (long*, gds_blob_handle*), + isc_close_blob (long*, gds_blob_handle*), + isc_commit_transaction (long*, gds_tr_handle*), + isc_compile_request (long*, gds_db_handle*, gds_req_handle*, short, char*), + isc_compile_request2 (long*, gds_db_handle*, gds_req_handle*, short, char*), + isc_create_blob (long*, gds_db_handle*, gds_tr_handle*, gds_blob_handle*, GDS_QUAD*), + isc_create_blob2 (long*, gds_db_handle*, gds_tr_handle*, gds_blob_handle*, GDS_QUAD*, short, char*), + isc_create_database (long*, short, char*, gds_db_handle*, short, char*), + isc_database_info (long*, gds_db_handle*, short, char*, short, char*), + isc_detach_database (long*, gds_db_handle*), + isc_get_segment (long*, gds_blob_handle*, unsigned short*, short, char*), + isc_open_blob (long*, gds_db_handle*, gds_tr_handle*, gds_blob_handle*, GDS_QUAD*), + isc_open_blob2 (long*, gds_db_handle*, gds_tr_handle*, gds_blob_handle*, GDS_QUAD*, short, char*), + isc_prepare_transaction (long*, gds_tr_handle*), + isc_prepare_transaction2 (long*, gds_tr_handle*, short, char*), + isc_put_segment (long*, gds_blob_handle*, short, char*), + isc_receive (long*, gds_req_handle*, short, short, void*, short), + isc_reconnect_transaction (long*, gds_db_handle*, gds_tr_handle*, short, char*), + isc_request_info (long*, gds_req_handle*, short, char*, short, char*, short), + isc_release_request (long*, gds_req_handle*), + isc_rollback_transaction (long*, gds_tr_handle*), + isc_send (long*, gds_req_handle*, short, short, void*, short), + isc_start_and_send (long*, gds_req_handle*, gds_tr_handle*, short, short, void*, short), + isc_start_multiple (long*, gds_tr_handle*, short, void*), + isc_start_request (long*, gds_req_handle*, gds_tr_handle*, short), + isc_start_transaction (long*, gds_tr_handle*, short, gds_db_handle*, short, char*, ...), + isc_transaction_info (long*, gds_tr_handle*, short, char*, short, char*), + isc_unwind_request (long*, gds_tr_handle*, short), + isc_print_status (long*), + isc_sqlcode (long*), + isc_ddl (long*, gds_db_handle*, gds_tr_handle*, short, char*), + isc_commit_retaining (long*, gds_tr_handle*), + isc_que_events (long*, gds_db_handle*, long*, short, char*, gds_callback, long*), + isc_cancel_events (long*, gds_db_handle*, long*), + isc_event_wait (long*, gds_db_handle*, short, char*, char*), + isc_event_counts (long*, short, char*, char*), + isc_event_block (char**, char**, short, ...), + isc_get_slice (long*, gds_db_handle*, gds_tr_handle*, GDS_QUAD*, short, char*, short, long*, + long, void*, long*), + isc_put_slice (long*, gds_db_handle*, gds_tr_handle*, GDS_QUAD*, short, char*, short, long*, + long, void*); + +extern long + isc_prepare (long*, gds_db_handle*, gds_tr_handle*, char*, short*, char*, SQLDA*), + isc_declare (long*, char*, char*), + isc_open (long*, gds_tr_handle*, char*, SQLDA*), + isc_fetch (long*, char*, SQLDA*), + isc_close (long*, char*), + isc_describe (long*, char*, SQLDA*), + isc_execute (long*, gds_tr_handle*, char*, SQLDA*), + isc_execute_immediate (long*, gds_db_handle*, gds_tr_handle*, short*, char*), + isc_ddl (long*, gds_db_handle*, gds_tr_handle*, short, char*); + +extern long + BLOB_edit (GDS_QUAD*, gds_db_handle, gds_tr_handle, char*); + +extern long + isc_initialize_menu (long*, gds_req_handle*), + isc_put_entree (long*, gds_req_handle*, short*, char*, long*), + isc_drive_menu (long*, gds_win_handle*, gds_req_handle*, short*, char*, short*, char*, short*, + short*, char*, long*), + isc_drive_form (long*, gds_db_handle*, gds_tr_handle*, gds_win_handle*, gds_req_handle*, + void*, void*), + isc_load_form (long*, gds_db_handle*, gds_tr_handle*, gds_form_handle*, short*, char*), + isc_compile_map (long*, gds_form_handle*, gds_req_handle*, short*, char*), + isc_compile_sub_map (long*, gds_win_handle*, gds_req_handle*, short*, char*), + isc_form_fetch (long*, gds_db_handle*, gds_tr_handle*, gds_req_handle*, void*), + isc_reset_form (long*, gds_req_handle*), + isc_pop_window (long*, gds_win_handle*), + isc_create_window (long*, gds_win_handle*, short*, char*, short*, short*), + isc_menu (long*, gds_win_handle*, gds_req_handle*, short*, char*); + +extern void + isc_ftof (char*, short, char*, short), + isc_vtof (char*, char*), + isc_vtov (char*, char*, short), + isc_version (gds_db_handle*, gds_callback, long); + +#define blr_word(n) (n % 256), (n / 256) + +$ SET SANS_DOLLAR +$ SYMBOLS BLR DTYPE "const char %-32s= %d;\n + +$ SYMBOLS BLR JOIN "const char %-32s= %d;\n + +$ SYMBOLS BLR MECH "const char %-32s= %d;\n + +$ SYMBOLS BLR STATEMENTS "const char %-32s= %d;\n + +$ SYMBOLS BLR VALUES "const char %-32s= %d;\n + +$ SYMBOLS BLR BOOLEANS "const char %-32s= %d;\n + +$ SYMBOLS BLR RSE "const char %-32s= %d;\n + +$ SYMBOLS BLR AGGREGATE "const char %-32s= %d;\n + +$ SYMBOLS BLR NEW "const char %-32s= %d;\n + +/* Database parameter block stuff */ + +$ SYMBOLS DPB ITEMS "const char %-32s= %d;\n + +$ SYMBOLS DPB BITS "const char %-32s= %d;\n + +/* Bit assignments in RDB$SYSTEM_FLAG */ + +$ SYMBOLS RDB FLAG "const char %-32s= %d;\n + +/* Transaction parameter blob stuff */ + +$ SYMBOLS TPB ITEMS "const char %-32s= %d;\n + +/* Blob Parameter Block */ + +$ SYMBOLS BPB ITEMS "const char %-32s= %d;\n + +/* Blob stream stuff */ + +typedef struct bstream { + int *bstr_blob; /* Blob handle */ + char *bstr_buffer; /* Address of buffer */ + char *bstr_ptr; /* Next character */ + short bstr_length; /* Length of buffer */ + short bstr_cnt; /* Characters in buffer */ + char bstr_mode; /* (mode) ? OUTPUT : INPUT */ +} BSTREAM; + +#define getb(p) (--(p)->bstr_cnt >= 0 ? *(p)->bstr_ptr++ & 0377: BLOB_get (p)) +#define putb(x,p) ((x == '\n' || (!(--(p)->bstr_cnt))) ? BLOB_put (x,p) : ((int) (*(p)->bstr_ptr++ = (unsigned) (x)))) +#define putbx(x,p) ((!(--(p)->bstr_cnt)) ? BLOB_put (x,p) : ((int) (*(p)->bstr_ptr++ = (unsigned) (x)))) + +BSTREAM *Bopen(), *BLOB_open(); + +/* Information call declarations */ + +/* Common, structural codes */ + +$ SYMBOLS INFO MECH "const char %-32s= %d;\n + +/* Database information items */ + +$ SYMBOLS INFO DB "const char %-32s= %d;\n + +/* Database Info Return Values */ + +$ SYMBOLS INFO VALUES "const char %-32s= %d;\n + +/* Request information items */ + +$ SYMBOLS INFO REQUEST "const char %-32s= %d;\n + +/* Blob information items */ + +$ SYMBOLS INFO BLOB "const char %-32s= %d;\n + +/* Transaction information items */ + +$ SYMBOLS INFO TRANSACTION "const char %-32s= %d;\n + +/* Error codes */ + +$ SYMBOLS ERROR MECH "const long %-32s= %d;\n + +$ ERROR MAJOR "const long %-32s= %d;\n + +/* Minor codes subject to change */ + +$ ERROR MINOR "const long %-32s= %d;\n + +/* Dynamic Data Definition Language operators */ + +/* Version number */ + +$ SYMBOLS DYN MECH "const char %-32s= %d;\n + +/* Operations (may be nested) */ + +$ SYMBOLS DYN OPERATIONS "const char %-32s= %d;\n + +/* View specific stuff */ + +$ SYMBOLS DYN VIEW "const char %-32s= %d;\n + +/* Generic attributes */ + +$ SYMBOLS DYN GENERIC "const char %-32s= %d;\n + +/* Relation specific attributes */ + +$ SYMBOLS DYN RELATION "const char %-32s= %d;\n + +/* Global field specific attributes */ + +$ SYMBOLS DYN GLOBAL "const char %-32s= %d;\n + +/* Local field specific attributes */ + +$ SYMBOLS DYN FIELD "const char %-32s= %d;\n + +/* Index specific attributes */ + +$ SYMBOLS DYN INDEX "const char %-32s= %d;\n + +/* Trigger specific attributes */ + +$ SYMBOLS DYN TRIGGER "const char %-32s= %d;\n + +/* Security Class specific attributes */ + +$ SYMBOLS DYN SECURITY "const char %-32s= %d;\n + +/* Dimension specific information */ + +$ SYMBOLS DYN ARRAY "const char %-32s= %d;\n + +/* File specific attributes */ + +$ SYMBOLS DYN FILES "const char %-32s= %d;\n + +/* Function specific attributes */ + +$ SYMBOLS DYN FUNCTIONS "const char %-32s= %d;\n + +/* Generator specific attributes */ + +$ SYMBOLS DYN GENERATOR "const char %-32s= %d;\n + +/* Array slice description language (SDL) */ + +$ SYMBOLS SDL SDL "const char %-32s= %d;\n + +$ SYMBOLS SQL DTYPE "const short %-32s= %d;\n + +/* Forms Package definitions */ + +/* Map definition block definitions */ + +$ SYMBOLS PYXIS MAP "const char %-32s= %d;\n + +/* Field option flags for display options */ + +$ SYMBOLS PYXIS DISPLAY "const char %-32s= %d;\n + +/* Field option values following display */ + +$ SYMBOLS PYXIS VALUE "const char %-32s= %d;\n + +/* Pseudo key definitions */ + +$ SYMBOLS PYXIS KEY "const char %-32s= %d;\n + +/* Menu definition stuff */ + +$ SYMBOLS PYXIS MENU "const char %-32s= %d;\n'); +INSERT INTO TEMPLATES (LANGUAGE, "FILE", TEMPLATE) VALUES ('VPASCAL', 'gds.vpas', +'(* + * PROGRAM: Preprocessor + * MODULE: sql.pas + * DESCRIPTION: SQL constants, procedures, etc. + * + * copyright (c) 1985, 1990 by Interbase Software Corporation + *) + +type + gds_$short = [word] -32768..32767; + gds_$handle = ^integer; + gds_$string = array [1..65535] of char; + gds_$ptr_type = [UNSAFE] ^gds_$string; + gds_$status_vector = array [1..20] of integer; + gds_$quad = array [1..2] of integer; + gds_$teb_t = record + dbb_ptr : gds_$ptr_type; + tpb_len : integer; + tpb_ptr : gds_$ptr_type; + end; + gds_$tm = record + tm_sec : integer; + tm_min : integer; + tm_hour : integer; + tm_mday : integer; + tm_mon : integer; + tm_year : integer; + tm_wday : integer; + tm_yday : integer; + tm_isdst : integer; + end; + sqlvar = record + sqltype : gds_$short; + sqllen : gds_$short; + sqldata : gds_$ptr_type; + sqlind : gds_$ptr_type; + sqlname_length : gds_$short; + sqlname : array [1..30] of char; + end; + sqlda = record + sqldaid : array [1..8] of char; + sqldabc : integer; + sqln : gds_$short; + sqld : gds_$short; + sqlvars : array [1..100] of sqlvar; + end; + + +procedure GDS_$SET_DEBUG ( + debug_val : [IMMEDIATE] gds_$short + ); extern; + +procedure gds_$ATTACH_DATABASE ( + var stat : gds_$status_vector; + name_length : [IMMEDIATE] gds_$short; + file_name : gds_$ptr_type; + var db_handle : gds_$handle; + dpb_length : [IMMEDIATE] gds_$short; + dpb : gds_$ptr_type + ); extern; + +procedure gds_$ATTACH_DATABASE_D ( + var stat : gds_$status_vector; + file_name : gds_$ptr_type; + var db_handle : gds_$handle; + dpb_length : [IMMEDIATE] gds_$short; + dpb : gds_$ptr_type + ); extern; + +procedure gds_$CANCEL_BLOB ( + var stat : gds_$status_vector; + var blob_handle : gds_$handle + ); extern; + +procedure GDS_$CANCEL_EVENTS ( + var stat : gds_$status_vector; + var db_handle : gds_$handle; + id : gds_$handle + ); extern; + +procedure gds_$CLOSE_BLOB ( + var stat : gds_$status_vector; + var blob_handle : gds_$handle + ); extern; + +procedure GDS_$COMMIT_RETAINING ( + var stat : gds_$status_vector; + var tra_handle : gds_$handle + ); extern; + +procedure gds_$COMMIT_TRANSACTION ( + var stat : gds_$status_vector; + var tra_handle : gds_$handle + ); extern; + +procedure gds_$COMPILE_REQUEST ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + var request_handle : gds_$handle; + blr_length : [IMMEDIATE] gds_$short; + blr : gds_$ptr_type + ); extern; + +procedure gds_$COMPILE_REQUEST2 ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + var request_handle : gds_$handle; + blr_length : [IMMEDIATE] gds_$short; + blr : gds_$ptr_type + ); extern; + +procedure gds_$CREATE_BLOB ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + tra_handle : gds_$handle; + var blob_handle : gds_$handle; + var blob_id : gds_$quad + ); extern; + +procedure GDS_$CREATE_BLOB2 ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + tra_handle : gds_$handle; + var blob_handle : gds_$handle; + var blob_id : gds_$quad; + bpb_length : integer; + bpb : gds_$ptr_type + ); extern; + +procedure GDS_$CREATE_DATABASE ( + var stat : gds_$status_vector; + name_length : [IMMEDIATE] gds_$short; + file_name : gds_$ptr_type; + var db_handle : gds_$handle; + dpb_length : [IMMEDIATE] gds_$short; + dpb : gds_$ptr_type; + dpb_type : [IMMEDIATE] gds_$short + ); extern; + +procedure GDS_$DDL ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + tra_handle : gds_$handle; + mblr_length : [IMMEDIATE] gds_$short; + mblr : gds_$ptr_type + ); extern; + + +procedure gds_$DETACH_DATABASE ( + var stat : gds_$status_vector; + var db_handle : gds_$handle + ); extern; + +procedure gds_$DROP_DATABASE ( + var stat : gds_$status_vector; + name_length : [IMMEDIATE] gds_$short; + file_name : gds_$ptr_type; + db_type : [IMMEDIATE] gds_$short + ); extern; + +procedure GDS_$EVENT_WAIT ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + length : [IMMEDIATE] gds_$short; + var events : gds_$ptr_type; + var buffer : gds_$ptr_type + ); extern; + +procedure GDS_$GET_SLICE ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + tra_handle : gds_$handle; + blob_id : gds_$quad; + sdl_length : [IMMEDIATE] gds_$short; + sdl : gds_$ptr_type; + param_length : [IMMEDIATE] gds_$short; + param : gds_$ptr_type; + slice_length : integer; + slice : gds_$ptr_type; + var return_length : integer + ); extern; + +function gds_$GET_SEGMENT ( + var stat : gds_$status_vector; + blob_handle : gds_$handle; + var length : gds_$short; + buffer_length : [IMMEDIATE] gds_$short; + var buffer : gds_$ptr_type + ): integer; extern; + +procedure gds_$OPEN_BLOB ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + tra_handle : gds_$handle; + var blob_handle : gds_$handle; + blob_id : gds_$quad + ); extern; + +procedure GDS_$OPEN_BLOB2 ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + tra_handle : gds_$handle; + var blob_handle : gds_$handle; + blob_id : gds_$quad; + bpb_length : integer; + bpb : gds_$ptr_type + ); extern; + +procedure gds_$PREPARE_TRANSACTION ( + var stat : gds_$status_vector; + var tra_handle : gds_$handle + ); extern; + +procedure gds_$STATUS_AND_STOP ( + var stat : gds_$status_vector + ); extern; + +function gds_$PUT_SEGMENT ( + var stat : gds_$status_vector; + blob_handle : gds_$handle; + length : [IMMEDIATE] gds_$short; + buffer : gds_$ptr_type + ): integer; extern; + +procedure GDS_$PUT_SLICE ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + tra_handle : gds_$handle; + blob_id : gds_$quad; + sdl_length : [IMMEDIATE] gds_$short; + sdl : gds_$ptr_type; + param_length : [IMMEDIATE] gds_$short; + param : gds_$ptr_type; + slice_length : integer; + slice : gds_$ptr_type + ); extern; + +procedure GDS_$QUE_EVENTS ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + id : gds_$quad; + length : [IMMEDIATE] gds_$short; + events : gds_$ptr_type; + ast : gds_$handle; + arg : gds_$quad + ); extern; + +procedure gds_$RECEIVE ( + var stat : gds_$status_vector; + request_handle : gds_$handle; + message_type : [IMMEDIATE] gds_$short; + message_length : [IMMEDIATE] gds_$short; + var message : gds_$ptr_type; + instantiation : [IMMEDIATE] gds_$short + ); extern; + +procedure gds_$RELEASE_REQUEST ( + var stat : gds_$status_vector; + var request_handle : gds_$handle + ); extern; + +procedure gds_$ROLLBACK_TRANSACTION ( + var stat : gds_$status_vector; + var tra_handle : gds_$handle + ); extern; + +procedure gds_$SEND ( + var stat : gds_$status_vector; + request_handle : gds_$handle; + message_type : [IMMEDIATE] gds_$short; + message_length : [IMMEDIATE] gds_$short; + message : gds_$ptr_type; + instantiation : [IMMEDIATE] gds_$short + ); extern; + +procedure gds_$START_AND_SEND ( + var stat : gds_$status_vector; + request_handle : gds_$handle; + tra_handle : gds_$handle; + message_type : [IMMEDIATE] gds_$short; + message_length : [IMMEDIATE] gds_$short; + message : gds_$ptr_type; + instantiation : [IMMEDIATE] gds_$short + ); extern; + +procedure gds_$START_REQUEST ( + var stat : gds_$status_vector; + request_handle : gds_$handle; + tra_handle : gds_$handle; + instantiation : [IMMEDIATE] gds_$short + ); extern; + +procedure gds_$START_MULTIPLE ( + var stat : gds_$status_vector; + var tra_handle : gds_$handle; + tra_count : [IMMEDIATE] gds_$short; + teb : gds_$ptr_type + ); extern; + +procedure gds_$START_TRANSACTION ( + var stat : gds_$status_vector; + var tra_handle : gds_$handle; + tra_count : [IMMEDIATE] gds_$short; + db_handle : gds_$handle; + tpb_length : [IMMEDIATE] gds_$short; + tpb : gds_$ptr_type + ); extern; + +procedure gds_$UNWIND_REQUEST ( + var stat : gds_$status_vector; + request_handle : gds_$handle; + instantiation : [IMMEDIATE] gds_$short + ); extern; + +procedure gds_$ftof ( + string1 : [REFERENCE] gds_$ptr_type; + length1 : [IMMEDIATE] gds_$short; + string2 : [REFERENCE] gds_$ptr_type; + length2 : [IMMEDIATE] gds_$short + ); extern; + +procedure gds_$print_status ( + stat : gds_$status_vector + ); extern; + +function gds_$sqlcode ( + stat : gds_$status_vector + ) : integer; extern; + + +procedure gds_$encode_date ( + times : gds_$tm; + var date : gds_$quad + ); extern; + +procedure gds_$decode_date ( + date : gds_$quad; + var times : gds_$tm + ); extern; + +const + gds_$true = 1; + gds_$false = 0; + +$ SYMBOLS BLR DTYPE BYTE "\t%-32s= chr(%d);\n +$ SYMBOLS BLR MECH "\t%-32s= chr(%d);\n + +$ SYMBOLS BLR STATEMENTS"\t%-32s= chr(%d);\n +$ SYMBOLS BLR VALUES "\t%-32s= chr(%d);\n + +$ SYMBOLS BLR BOOLEANS "\t%-32s= chr(%d);\n + +$ SYMBOLS BLR RSE "\t%-32s= chr(%d);\n + +$ SYMBOLS BLR JOIN "\t%-32s= chr(%d);\n + +$ SYMBOLS BLR AGGREGATE "\t%-32s= chr(%d);\n +$ SYMBOLS BLR NEW "\t%-32s= chr(%d);\n + +(* Database parameter block stuff *) + +$ SYMBOLS DPB ITEMS "\t%-32s= chr(%d);\n + +$ SYMBOLS DPB BITS "\t%-32s= chr(%d);\n + +(* Transaction parameter block stuff *) + +$ SYMBOLS TPB ITEMS "\t%-32s= chr(%d);\n + +(* Blob parameter block stuff *) + +$ SYMBOLS BPB ITEMS "\t%-32s= chr(%d);\n + +(* Blob routine declarations *) + +type + gds_$field_name = array [1..31] of char; + gds_$file_name = array [1..128] of char; + +procedure blob_$display ( + blob_id : gds_$quad; + db_handle : gds_$handle; + tra_handle : gds_$handle; + field_name : gds_$ptr_type; + name_length : [IMMEDIATE] integer + ); extern; + +procedure blob_$dump ( + blob_id : gds_$quad; + db_handle : gds_$handle; + tra_handle : gds_$handle; + file_name : gds_$ptr_type; + name_length : [IMMEDIATE] integer + ); extern; + +procedure blob_$edit ( + blob_id : gds_$quad; + db_handle : gds_$handle; + tra_handle : gds_$handle; + field_name : gds_$ptr_type; + name_length : [IMMEDIATE] integer + ); extern; + +procedure blob_$load ( + blob_id : gds_$quad; + db_handle : gds_$handle; + tra_handle : gds_$handle; + file_name : gds_$ptr_type; + name_length : [IMMEDIATE] integer + ); extern; + +(* Dynamic SQL procedures *) + +procedure gds_$close ( + var stat : gds_$status_vector; + cursor_name : gds_$ptr_type + ); extern; + +procedure gds_$declare ( + var stat : gds_$status_vector; + statement_name : gds_$ptr_type; + cursor_name : gds_$ptr_type + ); extern; + +procedure gds_$describe ( + var stat : gds_$status_vector; + statement_name : gds_$ptr_type; + var descriptor : gds_$ptr_type + ); extern; + +procedure gds_$dsql_finish ( + db_handle : gds_$handle + ); extern; + +procedure gds_$execute ( + var stat : gds_$status_vector; + trans_handle : gds_$handle; + statement_name : gds_$ptr_type; + var descriptor : gds_$ptr_type + ); extern; + +procedure gds_$execute_immediate ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + trans_handle : gds_$handle; + string_length : gds_$short; + string : gds_$ptr_type + ); extern; + +function gds_$fetch ( + var stat : gds_$status_vector; + cursor_name : gds_$ptr_type; + var descriptor : gds_$ptr_type + ) : integer; extern; + +procedure gds_$open ( + var stat : gds_$status_vector; + trans_handle : gds_$handle; + cursor_name : gds_$ptr_type; + var descriptor : gds_$ptr_type + ); extern; + +procedure gds_$prepare ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + trans_handle : gds_$handle; + statement_name : gds_$ptr_type; + string_length : gds_$short; + string : gds_$ptr_type; + var descriptor : gds_$ptr_type + ); extern; + + +(* Information parameters *) + +(* Common, structural codes *) +const +$ SYMBOLS INFO MECH "\t%-32s= chr(%d);\n + +(* Database information items *) + +$ SYMBOLS INFO DB "\t%-32s= chr(%d);\n + +(* Request information items *) + +$ SYMBOLS INFO REQUEST "\t%-32s= chr(%d);\n + +(* Blob information items *) + +$ SYMBOLS INFO BLOB "\t%-32s= chr(%d);\n + +(* Transaction information items *) + +$ SYMBOLS INFO TRANSACTION "\t%-32s= chr(%d);\n + +(* Error codes *) + +CONST +$ SYMBOLS ERROR MECH "\t%-26s= %d;\n + +$ ERROR MAJOR "\t%-26s= %d;\n + +(* Minor codes subject to change *) + +$ ERROR MINOR "\t%-26s= %d;\n + +(* Dynamic Data Definition Language operators *) + +(* Version number *) + +$ SYMBOLS DYN MECH "\t%-32s= chr(%d);\n + +(* Operations (may be nested) *) + +$ SYMBOLS DYN OPERATIONS "\t%-32s= chr(%d);\n + +(* View specific stuff *) + +$ SYMBOLS DYN VIEW "\t%-32s= chr(%d);\n + +(* Generic attributes *) + +$ SYMBOLS DYN GENERIC "\t%-32s= chr(%d);\n + +(* Relation specific attributes *) + +$ SYMBOLS DYN RELATION "\t%-32s= chr(%d);\n + +(* Global field specific attributes *) + +$ SYMBOLS DYN GLOBAL "\t%-32s= chr(%d);\n + +(* Local field specific attributes *) + +$ SYMBOLS DYN FIELD "\t%-32s= chr(%d);\n + +(* Index specific attributes *) + +$ SYMBOLS DYN INDEX "\t%-32s= chr(%d);\n + +(* Trigger specific attributes *) + +$ SYMBOLS DYN TRIGGER "\t%-32s= chr(%d);\n + +(* Security Class specific attributes *) + +$ SYMBOLS DYN SECURITY "\t%-32s= chr(%d);\n + +(* File specific attributes *) + +$ SYMBOLS DYN FILES "\t%-32s= chr(%d);\n + +(* Function specific attributes *) + +$ SYMBOLS DYN FUNCTIONS "\t%-32s= chr(%d);\n + +(* Generator specific attributes *) + +$ SYMBOLS DYN GENERATOR "\t%-32s= chr(%d);\n + +(* Array slice description language (SDL) *) + +$ SYMBOLS SDL SDL BYTE "\t%-32s= chr(%d);\n + +(* Dynamic SQL datatypes *) + +CONST +$ SYMBOLS SQL DTYPE "\t%-32s= %d;\n + +(* Forms Package definitions *) + +(* Map definition block definitions *) + +CONST +$ SYMBOLS PYXIS MAP BYTE "\t%-32s= chr(%d);\n + +(* Field option flags for display options *) + +CONST +$ SYMBOLS PYXIS DISPLAY "\t%-32s= %d;\n + +(* Field option values following display *) + +CONST +$ SYMBOLS PYXIS VALUE "\t%-32s= %d;\n + +(* Pseudo key definitions *) + +CONST +$ SYMBOLS PYXIS KEY "\t%-32s= %d;\n + +(* Menu definition stuff *) + +CONST +$ SYMBOLS PYXIS MENU BYTE "\t%-32s= chr(%d);\n + +procedure pyxis_$compile_map ( + var stat : gds_$status_vector; + form_handle : gds_$handle; + var map_handle : gds_$handle; + length : gds_$short; + map : gds_$ptr_type + ); extern; + +procedure pyxis_$compile_sub_map ( + var stat : gds_$status_vector; + form_handle : gds_$handle; + var map_handle : gds_$handle; + length : gds_$short; + map : gds_$ptr_type + ); extern; + +procedure pyxis_$create_window ( + var window_handle : gds_$handle; + name_length : gds_$short; + file_name : gds_$ptr_type; + var width : gds_$short; + var height : gds_$short + ); extern; + +procedure pyxis_$delete_window ( + var window_handle : gds_$handle + ); extern; + +procedure pyxis_$drive_form ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + trans_handle : gds_$handle; + var window_handle : gds_$handle; + map_handle : gds_$handle; + input : gds_$ptr_type; + output : gds_$ptr_type + ); extern; + +procedure pyxis_$fetch ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + trans_handle : gds_$handle; + map_handle : gds_$handle; + output : gds_$ptr_type + ); extern; + +procedure pyxis_$insert ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + trans_handle : gds_$handle; + map_handle : gds_$handle; + input : gds_$ptr_type + ); extern; + +procedure pyxis_$load_form ( + var stat : gds_$status_vector; + db_handle : gds_$handle; + trans_handle : gds_$handle; + var form_handle : gds_$handle; + name_length : gds_$short; + form_name : gds_$ptr_type + ); extern; + +function pyxis_$menu ( + var window_handle : gds_$handle; + var menu_handle : gds_$handle; + length : gds_$short; + menu : gds_$ptr_type + ) : gds_$short; extern; + +procedure pyxis_$pop_window ( + window_handle : gds_$handle + ); extern; + +procedure pyxis_$reset_form ( + var stat : gds_$status_vector; + window_handle : gds_$handle + ); extern; + +procedure pyxis_$drive_menu ( + var window_handle : gds_$handle; + var menu_handle : gds_$handle; + blr_length : gds_$short; + blr_source : gds_$ptr_type; + title_length : gds_$short; + title : gds_$ptr_type; + var terminator : gds_$short; + var entree_length : gds_$short; + entree_text : gds_$ptr_type; + var entree_value : integer + ); extern; + + +procedure pyxis_$get_entree ( + menu_handle : gds_$handle; + var entree_length : gds_$short; + entree_text : gds_$ptr_type; + var entree_value : integer; + var entree_end : gds_$short + ); extern; + +procedure pyxis_$initialize_menu ( + var menu_handle : gds_$handle + ); extern; + +procedure pyxis_$put_entree ( + menu_handle : gds_$handle; + entree_length : gds_$short; + entree_text : gds_$ptr_type; + entree_value : integer + ); extern; + + +[HIDDEN] PROCEDURE LIB$SCOPY_DXDX; EXTERNAL;'); +INSERT INTO TEMPLATES (LANGUAGE, "FILE", TEMPLATE) VALUES ('PASCAL', 'gds.pas', +'(* + * PROGRAM: Preprocessor + * MODULE: gds.pas + * DESCRIPTION: GDS constants, procedures, etc. + * + * copyright (c) 1985, 1990 by Interbase Software Corporation + *) + +type + gds_$handle = ^integer32; + gds_$string = array [1..65535] of char; + gds_$status_vector = array [1..20] of integer32; + gds_$quad = array [1..2] of integer32; + gds_$teb_t = record + dbb_ptr : ^gds_$handle; + tpb_len : integer32; + tpb_ptr : UNIV_PTR; + end; + gds_$tm = record + tm_sec : integer32; + tm_min : integer32; + tm_hour : integer32; + tm_mday : integer32; + tm_mon : integer32; + tm_year : integer32; + tm_wday : integer32; + tm_yday : integer32; + tm_isdst : integer32; + end; + sqlvar = record + sqltype : integer16; + sqllen : integer16; + sqldata : UNIV_PTR; + sqlind : UNIV_PTR; + sqlname_length : integer16; + sqlname : array [1..30] of char; + end; + sqlda = record + sqldaid : array [1..8] of char; + sqldabc : integer32; + sqln : integer16; + sqld : integer16; + sqlvars : array [1..100] of sqlvar; + end; + +procedure GDS_$SET_DEBUG ( + in debug_val : integer32 + ); extern; + +procedure GDS_$ATTACH_DATABASE ( + out stat : gds_$status_vector; + in name_length : integer16; + in file_name : UNIV gds_$string; + in out db_handle : gds_$handle; + in dpb_length : integer16; + in dpb : UNIV gds_$string + ); extern; + +procedure GDS_$CANCEL_BLOB ( + out stat : gds_$status_vector; + in out blob_handle : gds_$handle + ); extern; + +procedure GDS_$CANCEL_EVENTS ( + out stat : gds_$status_vector; + in out db_handle : gds_$handle; + in id : gds_$handle + ); extern; + +procedure GDS_$CLOSE_BLOB ( + out stat : gds_$status_vector; + in out blob_handle : gds_$handle + ); extern; + +procedure GDS_$COMMIT_RETAINING ( + out stat : gds_$status_vector; + in out tra_handle : gds_$handle + ); extern; + +procedure GDS_$COMMIT_TRANSACTION ( + out stat : gds_$status_vector; + in out tra_handle : gds_$handle + ); extern; + +procedure GDS_$COMPILE_REQUEST ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in out request_handle : gds_$handle; + in blr_length : integer16; + in blr : UNIV gds_$string + ); extern; + +procedure GDS_$COMPILE_REQUEST2 ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in out request_handle : gds_$handle; + in blr_length : integer16; + in blr : UNIV gds_$string + ); extern; + +procedure GDS_$CREATE_BLOB ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in out blob_handle : gds_$handle; + out blob_id : gds_$quad + ); extern; + +procedure GDS_$CREATE_BLOB2 ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in out blob_handle : gds_$handle; + out blob_id : gds_$quad; + in bpb_length : integer16; + in bpb : UNIV gds_$string + ); extern; + +procedure GDS_$CREATE_DATABASE ( + out stat : gds_$status_vector; + in name_length : integer16; + in file_name : UNIV gds_$string; + in out db_handle : gds_$handle; + in dpb_length : integer16; + in dpb : UNIV gds_$string; + in dpb_type : integer16 + ); extern; + +procedure GDS_$DDL ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in mblr_length : integer16; + in mblr : UNIV gds_$string + ); extern; + +procedure GDS_$DETACH_DATABASE ( + out stat : gds_$status_vector; + in out db_handle : gds_$handle + ); extern; + +procedure GDS_$DROP_DATABASE ( + out stat : gds_$status_vector; + in name_length : integer16; + in file_name : UNIV gds_$string; + in dbtype : integer16 + ); extern; + +procedure GDS_$EVENT_WAIT ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in length : integer16; + in out events : UNIV gds_$string; + in out buffer : UNIV gds_$string + ); extern; + +procedure GDS_$GET_SLICE ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in blob_id : gds_$quad; + in sdl_length : integer16; + in sdl : UNIV gds_$string; + in param_length : integer16; + in param : UNIV gds_$string; + in slice_length : integer32; + in slice : UNIV gds_$string; + in out return_length : integer32 + ); extern; + +function GDS_$GET_SEGMENT ( + out stat : gds_$status_vector; + in blob_handle : gds_$handle; + out length : integer16; + in buffer_length : integer16; + out buffer : UNIV gds_$string + ): integer32; extern; + +procedure GDS_$OPEN_BLOB ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in out blob_handle : gds_$handle; + in blob_id : gds_$quad + ); extern; + +procedure GDS_$OPEN_BLOB2 ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in out blob_handle : gds_$handle; + in blob_id : gds_$quad; + in bpb_length : integer16; + in bpb : UNIV gds_$string + ); extern; + +procedure GDS_$PREPARE_TRANSACTION ( + out stat : gds_$status_vector; + in out tra_handle : gds_$handle + ); extern; + +procedure GDS_$PREPARE_TRANSACTION2 ( + out stat : gds_$status_vector; + in out tra_handle : gds_$handle; + in msg_length : integer16; + in msg : UNIV gds_$string + ); extern; + +function GDS_$PUT_SEGMENT ( + out stat : gds_$status_vector; + in blob_handle : gds_$handle; + in length : integer16; + out buffer : UNIV gds_$string + ): integer32; extern; + +procedure GDS_$PUT_SLICE ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in blob_id : gds_$quad; + in sdl_length : integer16; + in sdl : UNIV gds_$string; + in param_length : integer16; + in param : UNIV gds_$string; + in slice_length : integer32; + in slice : UNIV gds_$string + ); extern; + +procedure GDS_$QUE_EVENTS ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in id : gds_$quad; + in length : integer16; + in events : UNIV gds_$string; + in ast : gds_$handle; + in arg : gds_$quad + ); extern; + +procedure GDS_$RECEIVE ( + out stat : gds_$status_vector; + in request_handle : gds_$handle; + in message_type : integer16; + in message_length : integer16; + in out message : UNIV gds_$string; + in instantiation : integer16 + ); extern; + +procedure GDS_$RELEASE_REQUEST ( + out stat : gds_$status_vector; + in request_handle : gds_$handle + ); extern; + +procedure GDS_$ROLLBACK_TRANSACTION ( + out stat : gds_$status_vector; + in out tra_handle : gds_$handle + ); extern; + +procedure GDS_$SEND ( + out stat : gds_$status_vector; + in request_handle : gds_$handle; + in message_type : integer16; + in message_length : integer16; + in message : UNIV gds_$string; + in instantiation : integer16 + ); extern; + +procedure GDS_$START_AND_SEND ( + out stat : gds_$status_vector; + in request_handle : gds_$handle; + in tra_handle : gds_$handle; + in message_type : integer16; + in message_length : integer16; + in message : UNIV gds_$string; + in instantiation : integer16 + ); extern; + +procedure GDS_$START_REQUEST ( + out stat : gds_$status_vector; + in request_handle : gds_$handle; + in tra_handle : gds_$handle; + in instantiation : integer16 + ); extern; + +procedure GDS_$START_MULTIPLE ( + out stat : gds_$status_vector; + in out tra_handle : gds_$handle; + in tra_count : integer16; + in teb : UNIV gds_$string + ); extern; + +procedure GDS_$START_TRANSACTION ( + out stat : gds_$status_vector; + in out tra_handle : gds_$handle; + in tra_count : integer16; + in db_handle : gds_$handle; + in tpb_length : integer16; + in tpb : UNIV gds_$string + ); extern; + +procedure GDS_$UNWIND_REQUEST ( + out stat : gds_$status_vector; + in request_handle : gds_$handle; + in instantiation : integer16 + ); extern; + +procedure gds_$ftof ( + in string1 : UNIV gds_$string; + in length1 : integer16; + in string2 : UNIV gds_$string; + in length2 : integer16 + ); extern; + +procedure gds_$print_status ( + in stat : gds_$status_vector + ); extern; + +function gds_$sqlcode ( + in stat : gds_$status_vector + ) : integer32; extern; + + +procedure gds_$encode_date ( + in times : gds_$tm; + out date : gds_$quad + ); extern; + +procedure gds_$decode_date ( + in date : gds_$quad; + out times : gds_$tm + ); extern; + +const + gds_$true = 1; + gds_$false = 0; + +$ SYMBOLS BLR DTYPE BYTE "\t%-32s= chr(%d);\n +$ SYMBOLS BLR MECH "\t%-32s= chr(%d);\n + +$ SYMBOLS BLR STATEMENTS"\t%-32s= chr(%d);\n +$ SYMBOLS BLR VALUES "\t%-32s= chr(%d);\n + +$ SYMBOLS BLR BOOLEANS "\t%-32s= chr(%d);\n + +$ SYMBOLS BLR RSE "\t%-32s= chr(%d);\n + +$ SYMBOLS BLR JOIN "\t%-32s= chr(%d);\n + +$ SYMBOLS BLR AGGREGATE "\t%-32s= chr(%d);\n +$ SYMBOLS BLR NEW "\t%-32s= chr(%d);\n + +(* Database parameter block stuff *) + +$ SYMBOLS DPB ITEMS "\t%-32s= chr(%d);\n + +$ SYMBOLS DPB BITS "\t%-32s= chr(%d);\n + + +(* Transaction parameter block stuff *) + +$ SYMBOLS TPB ITEMS "\t%-32s= chr(%d);\n + +(* Blob parameter block stuff *) + +$ SYMBOLS BPB ITEMS "\t%-32s= chr(%d);\n + +(* Blob routine declarations *) + +type + gds_$field_name = array [1..31] of char; + gds_$file_name = array [1..128] of char; + +procedure blob_$display ( + in blob_id : gds_$quad; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in field_name : univ gds_$field_name; + in name_length : integer16 + ); extern; + +procedure blob_$dump ( + in blob_id : gds_$quad; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in file_name : univ gds_$file_name; + in name_length : integer16 + ); extern; + +procedure blob_$edit ( + in blob_id : gds_$quad; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in field_name : univ gds_$field_name; + in name_length : integer16 + ); extern; + +procedure blob_$load ( + in blob_id : gds_$quad; + in db_handle : gds_$handle; + in tra_handle : gds_$handle; + in file_name : univ gds_$file_name; + in name_length : integer16 + ); extern; + +(* Dynamic SQL procedures *) + +procedure gds_$close ( + out stat : gds_$status_vector; + in cursor_name : UNIV gds_$string + ); extern; + +procedure gds_$declare ( + out stat : gds_$status_vector; + in statement_name : UNIV gds_$string; + in cursor_name : UNIV gds_$string + ); extern; + +procedure gds_$describe ( + out stat : gds_$status_vector; + in statement_name : UNIV gds_$string; + in out descriptor : UNIV sqlda + ); extern; + +procedure gds_$dsql_finish ( + in db_handle : gds_$handle + ); extern; + +procedure gds_$execute ( + out stat : gds_$status_vector; + in trans_handle : gds_$handle; + in statement_name : UNIV gds_$string; + in out descriptor : UNIV sqlda + ); extern; + +procedure gds_$execute_immediate ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in trans_handle : gds_$handle; + in string_length : integer; + in string : UNIV gds_$string + ); extern; + +function gds_$fetch ( + out stat : gds_$status_vector; + in cursor_name : UNIV gds_$string; + in out descriptor : UNIV sqlda + ) : integer32; extern; + +procedure gds_$open ( + out stat : gds_$status_vector; + in trans_handle : gds_$handle; + in cursor_name : UNIV gds_$string; + in out descriptor : UNIV sqlda + ); extern; + +procedure gds_$prepare ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in trans_handle : gds_$handle; + in statement_name : UNIV gds_$string; + in string_length : integer; + in string : UNIV gds_$string; + in out descriptor : UNIV sqlda + ); extern; + + +(* Information parameters *) + +(* Common, structural codes *) +const +$ SYMBOLS INFO MECH "\t%-32s= chr(%d);\n + +(* Database information items *) + +$ SYMBOLS INFO DB "\t%-32s= chr(%d);\n + +(* Request information items *) + +$ SYMBOLS INFO REQUEST "\t%-32s= chr(%d);\n + +(* Blob information items *) + +$ SYMBOLS INFO BLOB "\t%-32s= chr(%d);\n + +(* Transaction information items *) + +$ SYMBOLS INFO TRANSACTION "\t%-32s= chr(%d);\n + +(* Error codes *) + +CONST +$ SYMBOLS ERROR MECH "\t%-26s= %d;\n + +$ ERROR MAJOR "\t%-26s= %d;\n + +(* Minor codes subject to change *) + +$ ERROR MINOR "\t%-26s= %d;\n + +(* Dynamic Data Definition Language operators *) + +(* Version number *) + +$ SYMBOLS DYN MECH "\t%-32s= chr(%d);\n + +(* Operations (may be nested) *) + +$ SYMBOLS DYN OPERATIONS "\t%-32s= chr(%d);\n + +(* View specific stuff *) + +$ SYMBOLS DYN VIEW "\t%-32s= chr(%d);\n + +(* Generic attributes *) + +$ SYMBOLS DYN GENERIC "\t%-32s= chr(%d);\n + +(* Relation specific attributes *) + +$ SYMBOLS DYN RELATION "\t%-32s= chr(%d);\n + +(* Global field specific attributes *) + +$ SYMBOLS DYN GLOBAL "\t%-32s= chr(%d);\n + +(* Local field specific attributes *) + +$ SYMBOLS DYN FIELD "\t%-32s= chr(%d);\n + +(* Index specific attributes *) + +$ SYMBOLS DYN INDEX "\t%-32s= chr(%d);\n + +(* Trigger specific attributes *) + +$ SYMBOLS DYN TRIGGER "\t%-32s= chr(%d);\n + +(* Security Class specific attributes *) + +$ SYMBOLS DYN SECURITY "\t%-32s= chr(%d);\n + +(* dimension specific stuff *) + +$ SYMBOLS DYN ARRAY "\t%-32s= chr(%d);\n + +(* File specific attributes *) + +$ SYMBOLS DYN FILES "\t%-32s= chr(%d);\n + +(* Function specific attributes *) + +$ SYMBOLS DYN FUNCTIONS "\t%-32s= chr(%d);\n + +(* Generator specific attributes *) + +$ SYMBOLS DYN GENERATOR "\t%-32s= chr(%d);\n + +(* Array slice description language (SDL) *) + +$ SYMBOLS SDL SDL BYTE "\t%-32s= chr(%d);\n + +(* Dynamic SQL datatypes *) + +CONST +$ SYMBOLS SQL DTYPE "\t%-32s= %d;\n + +(* Forms Package definitions *) + +(* Map definition block definitions *) + +CONST +$ SYMBOLS PYXIS MAP BYTE "\t%-32s= chr(%d);\n + +(* Field option flags for display options *) + +CONST +$ SYMBOLS PYXIS DISPLAY "\t%-32s= %d;\n + +(* Field option values following display *) + +CONST +$ SYMBOLS PYXIS VALUE "\t%-32s= %d;\n + +(* Pseudo key definitions *) + +CONST +$ SYMBOLS PYXIS KEY "\t%-32s= %d;\n + +(* Menu definition stuff *) + +CONST +$ SYMBOLS PYXIS MENU BYTE "\t%-32s= chr(%d);\n + +procedure pyxis_$compile_map ( + out stat : gds_$status_vector; + in form_handle : gds_$handle; + out map_handle : gds_$handle; + in length : integer16; + in map : UNIV gds_$string + ); extern; + +procedure pyxis_$compile_sub_map ( + out stat : gds_$status_vector; + in form_handle : gds_$handle; + out map_handle : gds_$handle; + in length : integer16; + in map : UNIV gds_$string + ); extern; + +procedure pyxis_$create_window ( + in out window_handle : gds_$handle; + in name_length : integer16; + in file_name : UNIV gds_$string; + in out width : integer16; + in out height : integer16 + ); extern; + +procedure pyxis_$delete_window ( + in out window_handle : gds_$handle + ); extern; + +procedure pyxis_$drive_form ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in trans_handle : gds_$handle; + in out window_handle : gds_$handle; + in map_handle : gds_$handle; + in input : UNIV gds_$string; + in output : UNIV gds_$string + ); extern; + +procedure pyxis_$fetch ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in trans_handle : gds_$handle; + in map_handle : gds_$handle; + in output : UNIV gds_$string + ); extern; + +procedure pyxis_$insert ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in trans_handle : gds_$handle; + in map_handle : gds_$handle; + in input : UNIV gds_$string + ); extern; + +procedure pyxis_$load_form ( + out stat : gds_$status_vector; + in db_handle : gds_$handle; + in trans_handle : gds_$handle; + in out form_handle : gds_$handle; + in name_length : integer16; + in form_name : UNIV gds_$string + ); extern; + +function pyxis_$menu ( + in out window_handle : gds_$handle; + in out menu_handle : gds_$handle; + in length : integer16; + in menu : UNIV gds_$string + ) : integer16; extern; + +procedure pyxis_$pop_window ( + in window_handle : gds_$handle + ); extern; + +procedure pyxis_$reset_form ( + out stat : gds_$status_vector; + in window_handle : gds_$handle + ); extern; + +procedure pyxis_$drive_menu ( + in out window_handle : gds_$handle; + in out menu_handle : gds_$handle; + in blr_length : integer16; + in blr_source : UNIV gds_$string; + in title_length : integer16; + in title : UNIV gds_$string; + out terminator : integer16; + out entree_length : integer16; + out entree_text : UNIV gds_$string; + out entree_value : integer32 + ); extern; + +procedure pyxis_$get_entree ( + in menu_handle : gds_$handle; + out entree_length : integer16; + out entree_text : UNIV gds_$string; + out entree_value : integer32; + out entree_end : integer16 + ); extern; + +procedure pyxis_$initialize_menu ( + in out menu_handle : gds_$handle + ); extern; + +procedure pyxis_$put_entree ( + in menu_handle : gds_$handle; + in entree_length : integer16; + in entree_text : UNIV gds_$string; + in entree_value : integer32 + ); extern;'); +INSERT INTO TEMPLATES (LANGUAGE, "FILE", TEMPLATE) VALUES ('APOLLO_ADA', 'interbase.a', +'WITH SYSTEM; + +PACKAGE interbase IS + +TYPE status_vector IS ARRAY (0..19) OF INTEGER; +TYPE quad IS ARRAY (0..1) OF INTEGER; +TYPE chars is array (integer range <>) of character; +TYPE blr IS ARRAY (integer range <>) of tiny_integer; +TYPE dpb IS ARRAY (integer range <>) of tiny_integer; +TYPE tpb IS ARRAY (integer range <>) of tiny_integer; + +SUBTYPE isc_short IS short_integer; +SUBTYPE isc_long IS integer; +SUBTYPE isc_float IS short_float; +SUBTYPE isc_double IS float; +SUBTYPE database_handle IS integer; +SUBTYPE request_handle IS integer; +SUBTYPE transaction_handle IS integer; +SUBTYPE blob_handle IS integer; +SUBTYPE form_handle IS integer; +SUBTYPE map_handle IS integer; +SUBTYPE window_handle IS integer; +SUBTYPE menu_handle IS integer; + +TYPE gds_teb_t IS RECORD + dbb_ptr : SYSTEM.ADDRESS; + tpb_len : integer; + tpb_ptr : SYSTEM.ADDRESS; +END RECORD; + +TYPE gds_tm IS RECORD + tm_sec : integer; + tm_min : integer; + tm_hour : integer; + tm_mday : integer; + tm_mon : integer; + tm_year : integer; + tm_wday : integer; + tm_yday : integer; + tm_isdst : integer; +END RECORD; + +TYPE sqlvar is RECORD + sqltype : short_integer; + sqllen : short_integer; + sqldata : SYSTEM.ADDRESS; + sqlind : SYSTEM.ADDRESS; + sqlname_length : short_integer; + sqlname : chars (1..30); +END RECORD; + +FOR sqlvar use record at mod 2; + sqltype at 0 range 0..15; + sqllen at 2 range 0..15; + sqldata at 4 range 0..31; + sqlind at 8 range 0..31; + sqlname_length at 12 range 0..15; + sqlname at 14 range 0..239; +END RECORD; + +TYPE sqlvar_array IS ARRAY (short_integer range <>) of sqlvar; + +--- Constants + + gds_true : CONSTANT integer := 1; + gds_false : CONSTANT integer := 0; + +--- BLR + +$ SET SANS_DOLLAR + +$ FORMAT BLR_FORMAT " %s : CONSTANT tiny_integer := %d;\n +$ FORMAT DYN_FORMAT " %-32s: CONSTANT tiny_integer := %d;\n +$ FORMAT SDL_FORMAT " %-32s: CONSTANT tiny_integer := %d;\n +$ FORMAT ERROR_FORMAT "%-25s: CONSTANT integer := %d;\n +$ FORMAT PB_FORMAT " %-29s: CONSTANT tiny_integer := %d;\n +$ FORMAT PYXIS_FORMAT "%-29s: CONSTANT tiny_integer := %d;\n +$ FORMAT OPT_FORMAT "%-32s: CONSTANT integer := %d;\n +$ FORMAT SQL_FORMAT "%-16s: CONSTANT short_integer := %d;\n + +$ SYMBOLS BLR DTYPE BLR_FORMAT +$ SYMBOLS BLR MECH SIGNED BLR_FORMAT + +$ SYMBOLS BLR STATEMENTS BLR_FORMAT +$ SYMBOLS BLR VALUES BLR_FORMAT + +$ SYMBOLS BLR BOOLEANS BLR_FORMAT + +$ SYMBOLS BLR RSE BLR_FORMAT + +$ SYMBOLS BLR JOIN BLR_FORMAT + +$ SYMBOLS BLR AGGREGATE BLR_FORMAT +$ SYMBOLS BLR NEW BLR_FORMAT + +--- Dynamic Data Definition Language operators + +--- Version number + +$ SYMBOLS DYN MECH SIGNED DYN_FORMAT + +--- Operations (may be nested) + +$ SYMBOLS DYN OPERATIONS SIGNED DYN_FORMAT + +--- View specific stuff + +$ SYMBOLS DYN VIEW SIGNED DYN_FORMAT + +--- Generic attributes + +$ SYMBOLS DYN GENERIC SIGNED DYN_FORMAT + +--- Relation specific attributes + +$ SYMBOLS DYN RELATION SIGNED DYN_FORMAT + +--- Global field specific attributes + +$ SYMBOLS DYN GLOBAL SIGNED DYN_FORMAT + +--- Local field specific attributes + +$ SYMBOLS DYN FIELD SIGNED DYN_FORMAT + +--- Index specific attributes + +$ SYMBOLS DYN INDEX SIGNED DYN_FORMAT + +--- Trigger specific attributes + +$ SYMBOLS DYN TRIGGER SIGNED DYN_FORMAT + +--- Security Class specific attributes + +$ SYMBOLS DYN SECURITY SIGNED DYN_FORMAT + +--- Dimension attributes + +$ SYMBOLS DYN ARRAY SIGNED DYN_FORMAT + +--- File specific attributes + +$ SYMBOLS DYN FILES DYN_FORMAT + +--- Function specific attributes + +$ SYMBOLS DYN FUNCTIONS DYN_FORMAT + +--- Generator specific attributes + +$ SYMBOLS DYN GENERATOR DYN_FORMAT + +--- Array slice description language (SDL) + +$ SYMBOLS SDL SDL SIGNED SDL_FORMAT + +--- Database parameter block stuff + +$ SYMBOLS DPB ITEMS PB_FORMAT + +$ SYMBOLS DPB BITS PB_FORMAT + +--- Transaction parameter block stuff + +$ SYMBOLS TPB ITEMS PB_FORMAT + +--- Blob parameter block stuff + +$ SYMBOLS BPB ITEMS PB_FORMAT + +--- Common, structural codes + +$ SYMBOLS INFO MECH PB_FORMAT + +--- Database information items + +$ SYMBOLS INFO DB PB_FORMAT + +--- Request information items + +$ SYMBOLS INFO REQUEST PB_FORMAT + +--- Blob information items + +$ SYMBOLS INFO BLOB PB_FORMAT + +--- Transaction information items + +$ SYMBOLS INFO TRANSACTION PB_FORMAT + +--- Error codes + +$ SYMBOLS ERROR MECH ERROR_FORMAT + +$ ERROR MAJOR ERROR_FORMAT + +--- Minor codes subject to change + +$ ERROR MINOR ERROR_FORMAT + +--- Dynamic SQL datatypes + +$ SYMBOLS SQL DTYPE SQL_FORMAT + +--- Forms Package definitions + +--- Map definition block definitions + +$ SYMBOLS PYXIS MAP SIGNED PYXIS_FORMAT + +--- Field option flags for display options + +$ SYMBOLS PYXIS DISPLAY OPT_FORMAT + +--- Field option values following display + +$ SYMBOLS PYXIS VALUE OPT_FORMAT + +--- Pseudo key definitions + +$ SYMBOLS PYXIS KEY OPT_FORMAT + +--- Menu definition stuff + +$ SYMBOLS PYXIS MENU SIGNED PYXIS_FORMAT + +database_error : EXCEPTION; +null_blob : CONSTANT quad := (0, 0); +null_tpb : tpb (0..0); +null_dpb : dpb (0..0); + +PROCEDURE attach_database ( + user_status : OUT status_vector; + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb); + +PROCEDURE blob_display ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : short_integer); + +PROCEDURE blob_dump ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : short_integer); + +PROCEDURE blob_edit ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : short_integer); + +PROCEDURE blob_load ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : short_integer); + +PROCEDURE cancel_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE cancel_events ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE close_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE commit_retaining ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE commit_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE compile_request ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr); + +PROCEDURE compile_request2 ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr); + +PROCEDURE create_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad); + +PROCEDURE create_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : short_integer; + bpb : blr); + +PROCEDURE create_database ( + user_status : OUT status_vector; + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb; + db_type : short_integer); + +PROCEDURE detach_database ( + user_status : OUT status_vector; + db_handle : IN OUT database_handle); + +PROCEDURE ddl ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : short_integer; + msg : SYSTEM.ADDRESS); + +PROCEDURE decode_date ( + date : quad; + times : IN OUT gds_tm); + +PROCEDURE encode_date ( + times : IN OUT gds_tm; + date : quad); + +PROCEDURE event_wait ( + user_status : OUT status_vector; + db_handle : database_handle; + length : short_integer; + events : string; + buffer : string); + +PROCEDURE get_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + actual_length : OUT short_integer; + buffer_length : short_integer; + buffer : string); + +PROCEDURE get_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS; + return_length : OUT integer); + +PROCEDURE open_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad); + +PROCEDURE open_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : short_integer; + bpb : blr); + +PROCEDURE prepare_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE prepare_transaction2 ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + msg_length : short_integer; + msg : blr); + +PROCEDURE put_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + length : short_integer; + buffer : string); + +PROCEDURE put_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS); + +PROCEDURE queue_events ( + user_status : OUT status_vector; + db_handle : database_handle; + id : quad; + length : short_integer; + events : string; + ast : integer; + arg : quad); + +PROCEDURE receive ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE rollback_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE send ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE set_debug ( + debug_val : integer); + +PROCEDURE start_and_send ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE start_request ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + level : short_integer); + +PROCEDURE start_multiple ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : short_integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE start_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : short_integer; + db_handle : database_handle; + tpb_length : short_integer; + tpb_arg : tpb); + +PROCEDURE unwind_request ( + user_status : OUT status_vector; + req_handle : request_handle; + level : short_integer); + +PROCEDURE print_status ( + user_status : status_vector); + +PROCEDURE print_version ( + db_handle : database_handle); + +FUNCTION sqlcode ( + user_status : status_vector) RETURN integer; + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + user_status : OUT status_vector; + cursor_name : string); + +PROCEDURE dsql_declare ( + user_status : OUT status_vector; + statement_name : string; + cursor_name : string); + +PROCEDURE dsql_describe ( + user_status : OUT status_vector; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string); + +PROCEDURE dsql_execute_immediate ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : short_integer; + command : string); + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT integer; + cursor_name : string); + +PROCEDURE dsql_finish ( + db_handle : database_handle); + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string); + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string); + +--- PYXIS procedures + +PROCEDURE compile_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr); + +PROCEDURE compile_sub_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr); + +PROCEDURE create_window ( + win_handle : OUT window_handle; + name_length : short_integer; + file_name : string; + width : IN OUT short_integer; + height : IN OUT short_integer); + +PROCEDURE delete_window ( + win_handle : IN OUT window_handle); + +PROCEDURE drive_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); + +PROCEDURE fetch_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS); + +PROCEDURE insert_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS); + +PROCEDURE load_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : short_integer; + form_name : string); + +FUNCTION menu ( + win_handle : window_handle; + men_handle : menu_handle; + menu_length : short_integer; + menu : blr) RETURN short_integer; + +PROCEDURE pop_window ( + win_handle : window_handle); + +PROCEDURE reset_form ( + user_status : OUT status_vector; + win_handle : window_handle); + +PROCEDURE drive_menu ( + win_handle : IN OUT window_handle; + men_handle : IN OUT menu_handle; + blr_length : short_integer; + blr_source : blr; + title_length : short_integer; + title : string; + terminator : OUT short_integer; + entree_length : OUT short_integer; + entree_text : OUT string; + entree_value : OUT integer); + +PROCEDURE get_entree ( + men_handle : menu_handle; + entree_length : OUT short_integer; + entree_text : OUT string; + entree_value : OUT integer; + entree_end : OUT short_integer); + +PROCEDURE initialize_menu ( + men_handle : IN OUT menu_handle); + +PROCEDURE put_entree ( + men_handle : menu_handle; + entree_length : short_integer; + entree_text : string; + entree_value : integer); + + + +--- +--- Same routines, but with automatic error checking +--- + +PROCEDURE attach_database ( + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb); + +PROCEDURE cancel_blob ( + blb_handle : IN OUT blob_handle); + +PROCEDURE cancel_events ( + blb_handle : IN OUT blob_handle); + +PROCEDURE close_blob ( + blb_handle : IN OUT blob_handle); + +PROCEDURE commit_retaining ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE commit_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE compile_request ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr); + +PROCEDURE compile_request2 ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr); + +PROCEDURE create_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad); + +PROCEDURE create_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : short_integer; + bpb : blr); + +PROCEDURE create_database ( + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb; + db_type : short_integer); + +PROCEDURE detach_database ( + db_handle : IN OUT database_handle); + +PROCEDURE ddl ( + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : short_integer; + msg : SYSTEM.ADDRESS); + +PROCEDURE get_segment ( + completion_code : OUT integer; + blb_handle : blob_handle; + actual_length : OUT short_integer; + buffer_length : short_integer; + buffer : string); + +PROCEDURE get_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS; + return_length : OUT integer); + +PROCEDURE open_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad); + +PROCEDURE open_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : short_integer; + bpb : blr); + +PROCEDURE prepare_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE prepare_transaction2 ( + trans_handle : IN OUT transaction_handle; + msg_length : short_integer; + msg : blr); + +PROCEDURE put_segment ( + blb_handle : blob_handle; + length : short_integer; + buffer : string); + +PROCEDURE put_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS); + +PROCEDURE queue_events ( + db_handle : database_handle; + id : quad; + length : short_integer; + events : string; + ast : integer; + arg : quad); + +PROCEDURE receive ( + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE rollback_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE send ( + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE start_and_send ( + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE start_request ( + req_handle : request_handle; + trans_handle : transaction_handle; + level : short_integer); + +PROCEDURE start_multiple ( + trans_handle : IN OUT transaction_handle; + count : short_integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE start_transaction ( + trans_handle : IN OUT transaction_handle; + count : short_integer; + db_handle : database_handle; + tpb_length : short_integer; + tpb_arg : tpb); + +PROCEDURE unwind_request ( + req_handle : request_handle; + level : short_integer); + +PROCEDURE dsql_close ( + cursor_name : string); + +PROCEDURE dsql_declare ( + statement_name : string; + cursor_name : string); + +PROCEDURE dsql_describe ( + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string); + +PROCEDURE dsql_execute_immediate ( + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : short_integer; + command : string); + +PROCEDURE dsql_fetch ( + sqlcode : OUT integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_fetch ( + sqlcode : OUT integer; + cursor_name : string); + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string); + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string); + +--- PYXIS procedures + +PROCEDURE compile_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr); + +PROCEDURE compile_sub_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr); + +PROCEDURE drive_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); + +PROCEDURE fetch_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS); + +PROCEDURE insert_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS); + +PROCEDURE load_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : short_integer; + form_name : string); + +PROCEDURE reset_form ( + win_handle : window_handle); + +END interbase; + +PACKAGE BODY interbase IS + +--- +--- Actual Interbase entrypoints +--- + +PROCEDURE gds_attach_database ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + file_length : SYSTEM.ADDRESS; -- short_integer; + file_name : SYSTEM.ADDRESS; -- string; + handle : SYSTEM.ADDRESS; -- IN OUT database_handle; + dpb_length : SYSTEM.ADDRESS; -- short_integer; + dpb : SYSTEM.ADDRESS); + +PROCEDURE gds_blob_display ( + blob_id : SYSTEM.ADDRESS; -- quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + field_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- short_integer; + +PROCEDURE gds_blob_dump ( + blob_id : SYSTEM.ADDRESS; -- quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + file_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- short_integer; + +PROCEDURE gds_blob_edit ( + blob_id : SYSTEM.ADDRESS; -- IN OUT quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + field_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- short_integer; + +PROCEDURE gds_blob_load ( + blob_id : SYSTEM.ADDRESS; -- quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + file_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- short_integer; + +PROCEDURE gds_cancel_blob ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + blb_handle : SYSTEM.ADDRESS); -- IN OUT blob_handle); + +PROCEDURE gds_cancel_events ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + blb_handle : SYSTEM.ADDRESS); -- IN OUT blob_handle); + +PROCEDURE gds_close_blob ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + blb_handle : SYSTEM.ADDRESS); --IN OUT blob_handle); + +PROCEDURE gds_commit_retaining ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle); + +PROCEDURE gds_commit_transaction ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle); + +PROCEDURE gds_compile_request ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + req_handle : SYSTEM.ADDRESS; -- IN OUT request_handle; + blr_length : SYSTEM.ADDRESS; -- short_integer; + blr : SYSTEM.ADDRESS); + +PROCEDURE gds_compile_request2 ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + req_handle : SYSTEM.ADDRESS; -- IN OUT request_handle; + blr_length : SYSTEM.ADDRESS; -- short_integer; + blr_arg : SYSTEM.ADDRESS); -- blr; + +PROCEDURE gds_create_blob ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + blb_handle : SYSTEM.ADDRESS; --IN OUT blob_handle; + blob_id : SYSTEM.ADDRESS); --OUT quad); + +PROCEDURE gds_create_blob2 ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + blb_handle : SYSTEM.ADDRESS; --IN OUT blob_handle; + blob_id : SYSTEM.ADDRESS; --OUT quad; + bpb_length : SYSTEM.ADDRESS; --short_integer; + bpb : SYSTEM.ADDRESS); --blr; + +PROCEDURE gds_create_database ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + file_length : SYSTEM.ADDRESS; --short_integer; + file_name : SYSTEM.ADDRESS; --string; + db_handle : SYSTEM.ADDRESS; --IN OUT database_handle; + dpb_length : SYSTEM.ADDRESS; --short_integer; + dpb_arg : SYSTEM.ADDRESS; --dpb; + db_type : SYSTEM.ADDRESS); --integer); + +PROCEDURE gds_ddl ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + msg_length : SYSTEM.ADDRESS; -- short_integer; + msg : SYSTEM.ADDRESS); + +PROCEDURE gds_decode_date ( + date : SYSTEM.ADDRESS; -- quad; + times : SYSTEM.ADDRESS); -- gds_tm); + +PROCEDURE gds_detach_database ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + handle : SYSTEM.ADDRESS); -- IN OUT database_handle); + +PROCEDURE gds_encode_date ( + times : SYSTEM.ADDRESS; -- gds_tm; + date : SYSTEM.ADDRESS); -- OUT quad); + +PROCEDURE gds_event_wait ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + length : SYSTEM.ADDRESS; -- short_integer; + events : SYSTEM.ADDRESS; -- string; + buffer : SYSTEM.ADDRESS); -- string; + +PROCEDURE gds_get_segment ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + blb_handle : SYSTEM.ADDRESS; --blob_handle; + actual_length : SYSTEM.ADDRESS; --OUT integer; + buffer_length : SYSTEM.ADDRESS; --integer; + buffer : SYSTEM.ADDRESS); --string; + +PROCEDURE gds_get_slice ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + blob_id : SYSTEM.ADDRESS; -- quad; + sdl_length : SYSTEM.ADDRESS; -- short_integer; + sdl : SYSTEM.ADDRESS; -- blr; + param_length : SYSTEM.ADDRESS; -- short_integer; + param : SYSTEM.ADDRESS; -- string; + slice_length : SYSTEM.ADDRESS; -- integer; + slice : SYSTEM.ADDRESS; -- string; + return_length : SYSTEM.ADDRESS); -- OUT integer; + +PROCEDURE gds_open_blob ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + blb_handle : SYSTEM.ADDRESS; --IN OUT blob_handle; + blob_id : SYSTEM.ADDRESS); --quad; + +PROCEDURE gds_open_blob2 ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + blb_handle : SYSTEM.ADDRESS; --IN OUT blob_handle; + blob_id : SYSTEM.ADDRESS; --quad; + bpb_length : SYSTEM.ADDRESS; --short_integer; + bpb : SYSTEM.ADDRESS); --blr; + +PROCEDURE gds_prepare_transaction ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle; + +PROCEDURE gds_prepare_transaction2 ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- IN OUT transaction_handle; + msg_length : SYSTEM.ADDRESS; -- short_integer; + msg : SYSTEM.ADDRESS); -- blr; + +PROCEDURE gds_put_segment ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + blb_handle : SYSTEM.ADDRESS; --blob_handle; + length : SYSTEM.ADDRESS; --integer; + buffer : SYSTEM.ADDRESS); --string; + +PROCEDURE gds_put_slice ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + blob_id : SYSTEM.ADDRESS; -- quad; + sdl_length : SYSTEM.ADDRESS; -- short_integer; + sdl : SYSTEM.ADDRESS; -- blr; + param_length : SYSTEM.ADDRESS; -- short_integer; + param : SYSTEM.ADDRESS; -- string; + slice_length : SYSTEM.ADDRESS; -- integer; + slice : SYSTEM.ADDRESS); -- string; + +PROCEDURE gds_queue_events ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + id : SYSTEM.ADDRESS; -- quad; + length : SYSTEM.ADDRESS; -- short_integer; + events : SYSTEM.ADDRESS; -- string; + ast : SYSTEM.ADDRESS; -- integer; + arg : SYSTEM.ADDRESS); -- quad; + +PROCEDURE gds_receive ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + msg_type : SYSTEM.ADDRESS; -- short_integer; + msg_length : SYSTEM.ADDRESS; -- short_integer; + msg : SYSTEM.ADDRESS; + level : SYSTEM.ADDRESS); -- short_integer; + +PROCEDURE gds_rollback_transaction ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle; + +PROCEDURE gds_send ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + msg_type : SYSTEM.ADDRESS; -- short_integer; + msg_length : SYSTEM.ADDRESS; -- short_integer; + msg : SYSTEM.ADDRESS; + level : SYSTEM.ADDRESS); -- short_integer); + +PROCEDURE gds_set_debug ( + debug_val : SYSTEM.ADDRESS); -- short_integer); + +PROCEDURE gds_start_and_send ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + msg_type : SYSTEM.ADDRESS; -- short_integer; + msg_length : SYSTEM.ADDRESS; -- short_integer; + msg : SYSTEM.ADDRESS; + level : SYSTEM.ADDRESS); -- short_integer); + +PROCEDURE gds_start_request ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + level : SYSTEM.ADDRESS); -- short_integer); + +PROCEDURE gds_start_multiple ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- IN OUT transaction_handle; + count : SYSTEM.ADDRESS; -- short_integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE gds_start_transaction ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- IN OUT transaction_handle; + count : SYSTEM.ADDRESS; -- short_integer; + db_handle : SYSTEM.ADDRESS; -- database_handle; + dpb_length : SYSTEM.ADDRESS; -- short_integer; + dpb : SYSTEM.ADDRESS); + +PROCEDURE gds_unwind_request ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + level : SYSTEM.ADDRESS); -- short_integer); + +PROCEDURE gds_print_status ( + user_status : SYSTEM.ADDRESS); -- status_vector; + +PROCEDURE gds_version ( + db_handle : SYSTEM.ADDRESS; + ptr1 : integer; + ptr2 : SYSTEM.ADDRESS); + +FUNCTION gds_sqlcode ( + user_status : SYSTEM.ADDRESS) RETURN integer; + +--- Dynamic SQL procedures + +PROCEDURE gds_close ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + cursor_name : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_declare ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + statement_name : SYSTEM.ADDRESS; -- string; + cursor_name : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_describe ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + statement_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE gds_dsql_finish ( + user_status : SYSTEM.ADDRESS); -- database handle; + +PROCEDURE gds_execute ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + statement_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE gds_execute_immediate ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + command_length : SYSTEM.ADDRESS; -- short_integer; + command : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_fetch ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + sqlcode : SYSTEM.ADDRESS; -- OUT integer; + cursor_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE gds_open ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + cursor_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE gds_prepare ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + statement_name : SYSTEM.ADDRESS; -- string; + command_length : SYSTEM.ADDRESS; -- short_integer; + command : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +--- PYXIS procedures + +PROCEDURE pyxis_compile_map ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + frm_handle : SYSTEM.ADDRESS; -- form_handle; + mp_handle : SYSTEM.ADDRESS; -- OUT map_handle; + map_length : SYSTEM.ADDRESS; -- short_integer; + map : SYSTEM.ADDRESS); -- blr); + +PROCEDURE pyxis_compile_sub_map ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + frm_handle : SYSTEM.ADDRESS; -- form_handle; + mp_handle : SYSTEM.ADDRESS; -- OUT map_handle; + map_length : SYSTEM.ADDRESS; -- short_integer; + map : SYSTEM.ADDRESS); -- blr); + +PROCEDURE pyxis_create_window ( + win_handle : SYSTEM.ADDRESS; -- OUT window_handle; + name_length : SYSTEM.ADDRESS; -- short_integer; + file_name : SYSTEM.ADDRESS; -- string; + width : SYSTEM.ADDRESS; -- IN OUT short_integer; + height : SYSTEM.ADDRESS); -- IN OUT short_integer); + +PROCEDURE pyxis_delete_window ( + win_handle : SYSTEM.ADDRESS); -- IN OUT window_handle); + +PROCEDURE pyxis_drive_form ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + win_handle : SYSTEM.ADDRESS; -- window_handle; + mp_handle : SYSTEM.ADDRESS; -- map_handle; + input : SYSTEM.ADDRESS; -- SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE pyxis_fetch ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + mp_handle : SYSTEM.ADDRESS; -- map_handle; + output : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE pyxis_insert ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + mp_handle : SYSTEM.ADDRESS; -- map_handle; + input : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE pyxis_load_form ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + frm_handle : SYSTEM.ADDRESS; -- IN OUT form_handle; + name_length : SYSTEM.ADDRESS; -- short_integer; + form_name : SYSTEM.ADDRESS); -- string); + +FUNCTION pyxis_menu ( + win_handle : SYSTEM.ADDRESS; -- window_handle; + men_handle : SYSTEM.ADDRESS; -- menu_handle; + menu_length : SYSTEM.ADDRESS; -- short_integer; + menu : SYSTEM.ADDRESS) RETURN short_integer; -- blr) ; + +PROCEDURE pyxis_pop_window ( + win_handle : SYSTEM.ADDRESS); -- window_handle); + +PROCEDURE pyxis_reset_form ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + win_handle : SYSTEM.ADDRESS); -- window_handle); + +PROCEDURE pyxis_drive_menu ( + win_handle : SYSTEM.ADDRESS; -- IN OUT window_handle; + men_handle : SYSTEM.ADDRESS; -- IN OUT menu_handle; + blr_length : SYSTEM.ADDRESS; -- short_integer; + blr_source : SYSTEM.ADDRESS; -- blr; + title_length : SYSTEM.ADDRESS; -- short_integer; + title : SYSTEM.ADDRESS; -- string; + terminator : SYSTEM.ADDRESS; -- OUT short_integer; + entree_length : SYSTEM.ADDRESS; -- OUT short_integer; + entree_text : SYSTEM.ADDRESS; -- OUT string; + entree_value : SYSTEM.ADDRESS); -- OUT integer); + +PROCEDURE pyxis_get_entree ( + men_handle : SYSTEM.ADDRESS; -- menu_handle; + entree_length : SYSTEM.ADDRESS; -- OUT short_integer; + entree_text : SYSTEM.ADDRESS; -- OUT string; + entree_value : SYSTEM.ADDRESS; -- OUT integer; + entree_end : SYSTEM.ADDRESS); -- OUT short_integer); + +PROCEDURE pyxis_initialize_menu ( + men_handle : SYSTEM.ADDRESS); -- IN OUT menu_handle); + +PROCEDURE pyxis_put_entree ( + men_handle : SYSTEM.ADDRESS; -- menu_handle; + entree_length : SYSTEM.ADDRESS; -- short_integer; + entree_text : SYSTEM.ADDRESS; -- string; + entree_value : SYSTEM.ADDRESS); -- integer); + + + + + +pragma interface (C, gds_attach_database, "gds_$attach_database"); + +pragma interface (C, gds_blob_display, "blob_$display"); +pragma interface (C, gds_blob_dump, "blob_$dump"); +pragma interface (C, gds_blob_edit, "blob_$edit"); +pragma interface (C, gds_blob_load, "blob_$load"); + +pragma interface (C, gds_cancel_blob, "gds_$cancel_blob"); +pragma interface (C, gds_cancel_events, "gds_$cancel_events"); +pragma interface (C, gds_close, "gds_$close"); +pragma interface (C, gds_close_blob, "gds_$close_blob"); +pragma interface (C, gds_commit_retaining, "gds_$commit_retaining"); +pragma interface (C, gds_commit_transaction, "gds_$commit_transaction"); +pragma interface (C, gds_compile_request, "gds_$compile_request"); +pragma interface (C, gds_compile_request2, "gds_$compile_request2"); +pragma interface (C, gds_create_blob, "gds_$create_blob"); +pragma interface (C, gds_create_blob2, "gds_$create_blob2"); +pragma interface (C, gds_create_database, "gds_$create_database"); + +pragma interface (C, gds_ddl, "gds_$ddl"); +pragma interface (C, gds_declare, "gds_$declare"); +pragma interface (C, gds_decode_date, "gds_$decode_date"); +pragma interface (C, gds_describe, "gds_$describe"); +pragma interface (C, gds_detach_database, "gds_$detach_database"); +pragma interface (C, gds_dsql_finish, "gds_$dsql_finish"); + +pragma interface (C, gds_encode_date, "gds_$encode_date"); +pragma interface (C, gds_event_wait, "gds_$event_wait"); +pragma interface (C, gds_execute, "gds_$execute"); +pragma interface (C, gds_execute_immediate, "gds_$execute_immediate"); + +pragma interface (C, gds_fetch, "gds_$fetch_a"); + +pragma interface (C, gds_get_segment, "gds_$get_segment"); +pragma interface (C, gds_get_slice, "gds_$get_slice"); + +pragma interface (C, gds_open, "gds_$open"); +pragma interface (C, gds_open_blob, "gds_$open_blob"); +pragma interface (C, gds_open_blob2, "gds_$open_blob2"); + +pragma interface (C, gds_prepare, "gds_$prepare"); +pragma interface (C, gds_prepare_transaction, "gds_$prepare_transaction"); +pragma interface (C, gds_prepare_transaction2, "gds_$prepare_transaction2"); +pragma interface (C, gds_print_status, "gds_$print_status"); +pragma interface (C, gds_put_segment, "gds_$put_segment"); +pragma interface (C, gds_put_slice, "gds_$put_slice"); + +pragma interface (C, gds_queue_events, "gds_$que_events"); + +pragma interface (C, gds_receive, "gds_$receive"); +pragma interface (C, gds_rollback_transaction, "gds_$rollback_transaction"); + +pragma interface (C, gds_send, "gds_$send"); +pragma interface (C, gds_set_debug, "gds_$set_debug"); +pragma interface (C, gds_sqlcode, "gds_$sqlcode"); +pragma interface (C, gds_start_and_send, "gds_$start_and_send"); +pragma interface (C, gds_start_multiple, "gds_$start_multiple"); +pragma interface (C, gds_start_request, "gds_$start_request"); +pragma interface (C, gds_start_transaction, "gds_$start_transaction"); + +pragma interface (C, gds_unwind_request, "gds_$unwind_request"); + +pragma interface (C, gds_version, "gds_$version"); + +pragma interface (C, pyxis_compile_map, "pyxis_$compile_map"); +pragma interface (C, pyxis_compile_sub_map, "pyxis_$compile_sub_map"); +pragma interface (C, pyxis_create_window, "pyxis_$create_window"); +pragma interface (C, pyxis_delete_window, "pyxis_$delete_window"); +pragma interface (C, pyxis_drive_form, "pyxis_$drive_form"); +pragma interface (C, pyxis_drive_menu, "pyxis_$drive_menu"); +pragma interface (C, pyxis_fetch, "pyxis_$fetch"); +pragma interface (C, pyxis_get_entree, "pyxis_$get_entree"); +pragma interface (C, pyxis_initialize_menu, "pyxis_$initialize_menu"); +pragma interface (C, pyxis_insert, "pyxis_$insert"); +pragma interface (C, pyxis_load_form, "pyxis_$load_form"); +pragma interface (C, pyxis_menu, "pyxis_$menu"); +pragma interface (C, pyxis_pop_window, "pyxis_$pop_window"); +pragma interface (C, pyxis_put_entree, "pyxis_$put_entree"); +pragma interface (C, pyxis_reset_form, "pyxis_$reset_form"); + + +--- +--- Interface routines that return status vector +--- + +PROCEDURE attach_database ( + user_status : OUT status_vector; + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb) IS + BEGIN + gds_attach_database ( + user_status'address, + file_length'address, + file_name'address, + db_handle'address, + dpb_length'address, + dpb_arg'address); + END attach_database; + +PROCEDURE blob_display ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : short_integer) IS + BEGIN + gds_blob_display ( + blob_id'address, + db_handle'address, + tra_handle'address, + field_name'address, + name_length'address); + END blob_display; + + +PROCEDURE blob_dump ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : short_integer) IS + BEGIN + gds_blob_dump ( + blob_id'address, + db_handle'address, + tra_handle'address, + file_name'address, + name_length'address); + END blob_dump; + + +PROCEDURE blob_edit ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : short_integer) IS + BEGIN + gds_blob_edit ( + blob_id'address, + db_handle'address, + tra_handle'address, + field_name'address, + name_length'address); + END blob_edit; + + +PROCEDURE blob_load ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : short_integer) IS + BEGIN + gds_blob_load ( + blob_id'address, + db_handle'address, + tra_handle'address, + file_name'address, + name_length'address); + END blob_load; + + +PROCEDURE cancel_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_cancel_blob ( + user_status'address, + blb_handle'address); + END cancel_blob; + +PROCEDURE cancel_events ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_cancel_events ( + user_status'address, + blb_handle'address); + END cancel_events; + +PROCEDURE close_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_close_blob ( + user_status'address, + blb_handle'address); + END close_blob; + +PROCEDURE commit_retaining ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_commit_retaining ( + user_status'address, + trans_handle'address); + END commit_retaining; + +PROCEDURE commit_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_commit_transaction ( + user_status'address, + trans_handle'address); + END commit_transaction; + + +PROCEDURE compile_request ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr) IS + BEGIN + gds_compile_request ( + user_status'address, + db_handle'address, + req_handle'address, + blr_length'address, + blr_arg'address); + END compile_request; + + +PROCEDURE compile_request2 ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr) IS + BEGIN + gds_compile_request2 ( + user_status'address, + db_handle'address, + req_handle'address, + blr_length'address, + blr_arg'address); + END compile_request2; + + +PROCEDURE create_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad) IS + BEGIN + gds_create_blob ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address); + END create_blob; + +PROCEDURE create_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : short_integer; + bpb : blr) IS + BEGIN + gds_create_blob2 ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address, + bpb_length'address, + bpb'address); + END create_blob2; + +PROCEDURE create_database ( + user_status : OUT status_vector; + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb; + db_type : short_integer) IS + BEGIN + gds_create_database ( + user_status'address, + file_length'address, + file_name'address, + db_handle'address, + dpb_length'address, + dpb_arg'address, + db_type'address); + END create_database; + +PROCEDURE ddl ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : short_integer; + msg : SYSTEM.ADDRESS) IS + BEGIN + gds_ddl ( + user_status'address, + db_handle'address, + trans_handle'address, + msg_length'address, + msg); + END ddl; + +PROCEDURE decode_date ( + date : quad; + times : IN OUT gds_tm) IS + BEGIN + gds_decode_date ( + date'address, + times'address); + END decode_date; + + +PROCEDURE detach_database ( + user_status : OUT status_vector; + db_handle : IN OUT database_handle) IS + BEGIN + gds_detach_database ( + user_status'address, + db_handle'address); + END detach_database; + +PROCEDURE encode_date ( + times : IN OUT gds_tm; + date : quad) IS + BEGIN + gds_encode_date ( + times'address, + date'address); + END encode_date; + + +PROCEDURE event_wait ( + user_status : OUT status_vector; + db_handle : database_handle; + length : short_integer; + events : string; + buffer : string) IS + BEGIN + gds_event_wait ( + user_status'address, + db_handle'address, + length'address, + events'address, + buffer'address); + END event_wait; + +PROCEDURE get_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + actual_length : OUT short_integer; + buffer_length : short_integer; + buffer : string) IS + BEGIN + gds_get_segment ( + user_status'address, + blb_handle'address, + actual_length'address, + buffer_length'address, + buffer'address); + END get_segment; + +PROCEDURE get_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS; + return_length : OUT integer) IS + BEGIN + gds_get_slice ( + user_status'address, + db_handle'address, + trans_handle'address, + blob_id'address, + sdl_length'address, + sdl'address, + param_length'address, + param'address, + slice_length'address, + slice, + return_length'address); + END get_slice; + +PROCEDURE open_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad) IS + BEGIN + gds_open_blob ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address); + END open_blob; + +PROCEDURE open_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : short_integer; + bpb : blr) IS + BEGIN + gds_open_blob2 ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address, + bpb_length'address, + bpb'address); + END open_blob2; + +PROCEDURE prepare_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_prepare_transaction ( + user_status'address, + trans_handle'address); + END prepare_transaction; + +PROCEDURE prepare_transaction2 ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + msg_length : short_integer; + msg : blr) IS + BEGIN + gds_prepare_transaction2 ( + user_status'address, + trans_handle'address, + msg_length'address, + msg'address); + END prepare_transaction2; + +PROCEDURE put_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + length : short_integer; + buffer : string) IS + BEGIN + gds_put_segment ( + user_status'address, + blb_handle'address, + length'address, + buffer'address); + END put_segment; + +PROCEDURE put_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS) IS + BEGIN + gds_put_slice ( + user_status'address, + db_handle'address, + trans_handle'address, + blob_id'address, + sdl_length'address, + sdl'address, + param_length'address, + param'address, + slice_length'address, + slice); + END put_slice; + +PROCEDURE queue_events ( + user_status : OUT status_vector; + db_handle : database_handle; + id : quad; + length : short_integer; + events : string; + ast : integer; + arg : quad) IS + BEGIN + gds_queue_events ( + user_status'address, + db_handle'address, + id'address, + length'address, + events'address, + ast'address, + arg'address); + END queue_events; + +PROCEDURE receive ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + BEGIN + gds_receive ( + user_status'address, + req_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + END receive; + +PROCEDURE rollback_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_rollback_transaction ( + user_status'address, + trans_handle'address); + END rollback_transaction; + + +PROCEDURE send ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + BEGIN + gds_send ( + user_status'address, + req_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + END send; + +PROCEDURE set_debug ( + debug_val : integer) IS + BEGIN + gds_set_debug ( + debug_val'address); + END set_debug; + +PROCEDURE start_request ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + level : short_integer) IS + BEGIN + gds_start_request ( + user_status'address, + req_handle'address, + trans_handle'address, + level'address); + END start_request; + + +PROCEDURE start_and_send ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + BEGIN + gds_start_and_send ( + user_status'address, + req_handle'address, + trans_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + END start_and_send; + +PROCEDURE start_multiple ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : short_integer; + teb : SYSTEM.ADDRESS) IS + BEGIN + gds_start_multiple ( + user_status'address, + trans_handle'address, + count'address, + teb); + END start_multiple; + + +PROCEDURE start_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : short_integer; + db_handle : database_handle; + tpb_length : short_integer; + tpb_arg : tpb) IS + BEGIN + gds_start_transaction ( + user_status'address, + trans_handle'address, + count'address, + db_handle'address, + tpb_length'address, + tpb_arg'address); + END start_transaction; + + +PROCEDURE unwind_request ( + user_status : OUT status_vector; + req_handle : request_handle; + level : short_integer) IS + BEGIN + gds_unwind_request ( + user_status'address, + req_handle'address, + level'address); + END unwind_request; + + +PROCEDURE print_status ( + user_status : status_vector) IS + BEGIN + gds_print_status ( + user_status'address); + END print_status; + + +PROCEDURE print_version ( + db_handle: database_handle) IS + + ptr : integer := 0; + BEGIN + gds_version ( + db_handle'address, + 0, + ptr'address); + END print_version; + +FUNCTION sqlcode ( + user_status : status_vector) RETURN integer IS + BEGIN + return gds_sqlcode (user_status'address); + end sqlcode; + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + user_status : OUT status_vector; + cursor_name : string) IS + BEGIN + gds_close ( + user_status'address, + cursor_name'address); + END dsql_close; + +PROCEDURE dsql_declare ( + user_status : OUT status_vector; + statement_name : string; + cursor_name : string) IS + BEGIN + gds_declare ( + user_status'address, + statement_name'address, + cursor_name'address); + END dsql_declare; + +PROCEDURE dsql_describe ( + user_status : OUT status_vector; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_describe ( + user_status'address, + statement_name'address, + descriptor); + END dsql_describe; + +PROCEDURE dsql_finish ( + db_handle : database_handle) IS + BEGIN + gds_dsql_finish ( + db_handle'address); + END dsql_finish; + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_execute ( + user_status'address, + trans_handle'address, + statement_name'address, + descriptor); + END dsql_execute; + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string) IS + BEGIN + gds_execute ( + user_status'address, + trans_handle'address, + statement_name'address, + null_blob'address); + END dsql_execute; + +PROCEDURE dsql_execute_immediate ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : short_integer; + command : string) IS + BEGIN + gds_execute_immediate ( + user_status'address, + db_handle'address, + trans_handle'address, + command_length'address, + command'address); + END dsql_execute_immediate; + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_fetch ( + user_status'address, + sqlcode'address, + cursor_name'address, + descriptor); + END dsql_fetch; + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT integer; + cursor_name : string) IS + BEGIN + gds_fetch ( + user_status'address, + sqlcode'address, + cursor_name'address, + null_blob'address); + END dsql_fetch; + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_open ( + user_status'address, + trans_handle'address, + cursor_name'address, + descriptor); + END dsql_open; + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string) IS + BEGIN + gds_open ( + user_status'address, + trans_handle'address, + cursor_name'address, + null_blob'address); + END dsql_open; + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_prepare ( + user_status'address, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + descriptor); + END dsql_prepare; + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string) IS + BEGIN + gds_prepare ( + user_status'address, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + null_blob'address); + END dsql_prepare; + +--- PYXIS procedures + +PROCEDURE compile_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr) IS + BEGIN + pyxis_compile_map ( + user_status'address, + frm_handle'address, + mp_handle'address, + map_length'address, + map'address); + END compile_map; + +PROCEDURE compile_sub_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr) IS + BEGIN + pyxis_compile_sub_map ( + user_status'address, + frm_handle'address, + mp_handle'address, + map_length'address, + map'address); + END compile_sub_map; + +PROCEDURE create_window ( + win_handle : OUT window_handle; + name_length : short_integer; + file_name : string; + width : IN OUT short_integer; + height : IN OUT short_integer) IS + BEGIN + pyxis_create_window ( + win_handle'address, + name_length'address, + file_name'address, + width'address, + height'address); + END create_window; + +PROCEDURE delete_window ( + win_handle : IN OUT window_handle) IS + BEGIN + pyxis_delete_window ( + win_handle'address); + END delete_window; + +PROCEDURE drive_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS) IS + BEGIN + pyxis_drive_form ( + user_status'address, + db_handle'address, + trans_handle'address, + win_handle'address, + mp_handle'address, + input, + output); + END drive_form; + +PROCEDURE fetch_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS) IS + BEGIN + pyxis_fetch ( + user_status'address, + db_handle'address, + trans_handle'address, + mp_handle'address, + output); + END fetch_sub_form; + +PROCEDURE insert_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS) IS + BEGIN + pyxis_insert ( + user_status'address, + db_handle'address, + trans_handle'address, + mp_handle'address, + input); + END insert_sub_form; + +PROCEDURE load_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : short_integer; + form_name : string) IS + BEGIN + pyxis_load_form ( + user_status'address, + db_handle'address, + trans_handle'address, + frm_handle'address, + name_length'address, + form_name'address); + END load_form; + +FUNCTION menu ( + win_handle : window_handle; + men_handle : menu_handle; + menu_length : short_integer; + menu : blr) RETURN short_integer IS + BEGIN + return pyxis_menu ( + win_handle'address, + men_handle'address, + menu_length'address, + menu'address); + END menu; + +PROCEDURE pop_window ( + win_handle : window_handle) IS + BEGIN + pyxis_pop_window ( + win_handle'address); + END pop_window; + +PROCEDURE reset_form ( + user_status : OUT status_vector; + win_handle : window_handle) IS + BEGIN + pyxis_reset_form ( + user_status'address, + win_handle'address); + END reset_form; + +PROCEDURE drive_menu ( + win_handle : IN OUT window_handle; + men_handle : IN OUT menu_handle; + blr_length : short_integer; + blr_source : blr; + title_length : short_integer; + title : string; + terminator : OUT short_integer; + entree_length : OUT short_integer; + entree_text : OUT string; + entree_value : OUT integer) IS + BEGIN + pyxis_drive_menu ( + win_handle'address, + men_handle'address, + blr_length'address, + blr_source'address, + title_length'address, + title'address, + terminator'address, + entree_length'address, + entree_text'address, + entree_value'address); + END drive_menu; + +PROCEDURE get_entree ( + men_handle : menu_handle; + entree_length : OUT short_integer; + entree_text : OUT string; + entree_value : OUT integer; + entree_end : OUT short_integer) IS + BEGIN + pyxis_get_entree ( + men_handle'address, + entree_length'address, + entree_text'address, + entree_value'address, + entree_end'address); + END get_entree; + +PROCEDURE initialize_menu ( + men_handle : IN OUT menu_handle) IS + BEGIN + pyxis_initialize_menu ( + men_handle'address); + END initialize_menu; + +PROCEDURE put_entree ( + men_handle : menu_handle; + entree_length : short_integer; + entree_text : string; + entree_value : integer) IS + BEGIN + pyxis_put_entree ( + men_handle'address, + entree_length'address, + entree_text'address, + entree_value'address); + END put_entree; + + +--- +--- Internal routines +--- + +PROCEDURE error ( + user_status : status_vector) IS + BEGIN + gds_print_status (user_status'address); + RAISE database_error; + END; + + +--- +--- Routines sans explicit status vector +--- + +PROCEDURE attach_database ( + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb) IS + + user_status : status_vector; + BEGIN + gds_attach_database ( + user_status'address, + file_length'address, + file_name'address, + db_handle'address, + dpb_length'address, + dpb_arg'address); + if user_status (1) /= 0 then error (user_status); end if; + END attach_database; + +PROCEDURE cancel_blob ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_cancel_blob ( + user_status'address, + blb_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END cancel_blob; + +PROCEDURE cancel_events ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_cancel_events ( + user_status'address, + blb_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END cancel_events; + +PROCEDURE close_blob ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_close_blob ( + user_status'address, + blb_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END close_blob; + +PROCEDURE commit_retaining ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_commit_retaining ( + user_status'address, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END commit_retaining; + +PROCEDURE commit_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_commit_transaction ( + user_status'address, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END commit_transaction; + + +PROCEDURE compile_request ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr) IS + + user_status : status_vector; + BEGIN + gds_compile_request ( + user_status'address, + db_handle'address, + req_handle'address, + blr_length'address, + blr_arg'address); + if user_status (1) /= 0 then error (user_status); end if; + END compile_request; + + +PROCEDURE compile_request2 ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr) IS + + user_status : status_vector; + BEGIN + gds_compile_request2 ( + user_status'address, + db_handle'address, + req_handle'address, + blr_length'address, + blr_arg'address); + if user_status (1) /= 0 then error (user_status); end if; + END compile_request2; + + +PROCEDURE create_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad) IS + + user_status : status_vector; + BEGIN + gds_create_blob ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address); + if user_status (1) /= 0 then error (user_status); end if; + END create_blob; + +PROCEDURE create_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : short_integer; + bpb : blr) IS + + user_status : status_vector; + BEGIN + gds_create_blob2 ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address, + bpb_length'address, + bpb'address); + if user_status (1) /= 0 then error (user_status); end if; + END create_blob2; + +PROCEDURE create_database ( + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb; + db_type : short_integer) IS + + user_status : status_vector; + BEGIN + gds_create_database ( + user_status'address, + file_length'address, + file_name'address, + db_handle'address, + dpb_length'address, + dpb_arg'address, + db_type'address); + if user_status (1) /= 0 then error (user_status); end if; + END create_database; + +PROCEDURE ddl ( + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : short_integer; + msg : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_ddl ( + user_status'address, + db_handle'address, + trans_handle'address, + msg_length'address, + msg); + if user_status (1) /= 0 then error (user_status); end if; + END ddl; + +PROCEDURE detach_database ( + db_handle : IN OUT database_handle) IS + + user_status : status_vector; + BEGIN + gds_detach_database ( + user_status'address, + db_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END detach_database; + + +PROCEDURE event_wait ( + db_handle : database_handle; + length : short_integer; + events : string; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_event_wait ( + user_status'address, + db_handle'address, + length'address, + events'address, + buffer'address); + END event_wait; + +PROCEDURE get_segment ( + completion_code : OUT integer; + blb_handle : blob_handle; + actual_length : OUT short_integer; + buffer_length : short_integer; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_get_segment ( + user_status'address, + blb_handle'address, + actual_length'address, + buffer_length'address, + buffer'address); + if user_status (1) /= 0 and user_status (1) /= gds_segment and + user_status (1) /= gds_segstr_eof then + error (user_status); + end if; + completion_code := user_status(1); + END get_segment; + +PROCEDURE get_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS; + return_length : OUT integer) IS + + user_status : status_vector; + BEGIN + gds_get_slice ( + user_status'address, + db_handle'address, + trans_handle'address, + blob_id'address, + sdl_length'address, + sdl'address, + param_length'address, + param'address, + slice_length'address, + slice, + return_length'address); + END get_slice; + + +PROCEDURE open_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad) IS + + user_status : status_vector; + BEGIN + gds_open_blob ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address); + if user_status (1) /= 0 then error (user_status); end if; + END open_blob; + +PROCEDURE open_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : short_integer; + bpb : blr) IS + + user_status : status_vector; + BEGIN + gds_open_blob2 ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address, + bpb_length'address, + bpb'address); + if user_status (1) /= 0 then error (user_status); end if; + END open_blob2; + +PROCEDURE prepare_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_prepare_transaction ( + user_status'address, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END prepare_transaction; + +PROCEDURE prepare_transaction2 ( + trans_handle : IN OUT transaction_handle; + msg_length : short_integer; + msg : blr) IS + + user_status : status_vector; + BEGIN + gds_prepare_transaction2 ( + user_status'address, + trans_handle'address, + msg_length'address, + msg'address); + END prepare_transaction2; + +PROCEDURE put_segment ( + blb_handle : blob_handle; + length : short_integer; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_put_segment ( + user_status'address, + blb_handle'address, + length'address, + buffer'address); + if user_status (1) /= 0 then error (user_status); end if; + END put_segment; + +PROCEDURE put_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_put_slice ( + user_status'address, + db_handle'address, + trans_handle'address, + blob_id'address, + sdl_length'address, + sdl'address, + param_length'address, + param'address, + slice_length'address, + slice); + END put_slice; + +PROCEDURE queue_events ( + db_handle : database_handle; + id : quad; + length : short_integer; + events : string; + ast : integer; + arg : quad) IS + + user_status : status_vector; + BEGIN + gds_queue_events ( + user_status'address, + db_handle'address, + id'address, + length'address, + events'address, + ast'address, + arg'address); + END queue_events; + +PROCEDURE receive ( + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + + user_status : status_vector; + BEGIN + gds_receive ( + user_status'address, + req_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + if user_status (1) /= 0 then error (user_status); end if; + END receive; + +PROCEDURE rollback_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_rollback_transaction ( + user_status'address, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END rollback_transaction; + + +PROCEDURE send ( + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + + user_status : status_vector; + BEGIN + gds_send ( + user_status'address, + req_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + if user_status (1) /= 0 then error (user_status); end if; + END send; + +PROCEDURE start_request ( + req_handle : request_handle; + trans_handle : transaction_handle; + level : short_integer) IS + + user_status : status_vector; + BEGIN + gds_start_request ( + user_status'address, + req_handle'address, + trans_handle'address, + level'address); + if user_status (1) /= 0 then error (user_status); end if; + END start_request; + + +PROCEDURE start_and_send ( + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + + user_status : status_vector; + BEGIN + gds_start_and_send ( + user_status'address, + req_handle'address, + trans_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + if user_status (1) /= 0 then error (user_status); end if; + END start_and_send; + +PROCEDURE start_multiple ( + trans_handle : IN OUT transaction_handle; + count : short_integer; + teb : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_start_multiple ( + user_status'address, + trans_handle'address, + count'address, + teb); + if user_status (1) /= 0 then error (user_status); end if; + END start_multiple; + + +PROCEDURE start_transaction ( + trans_handle : IN OUT transaction_handle; + count : short_integer; + db_handle : database_handle; + tpb_length : short_integer; + tpb_arg : tpb) IS + + user_status : status_vector; + BEGIN + gds_start_transaction ( + user_status'address, + trans_handle'address, + count'address, + db_handle'address, + tpb_length'address, + tpb_arg'address); + if user_status (1) /= 0 then error (user_status); end if; + END start_transaction; + + +PROCEDURE unwind_request ( + req_handle : request_handle; + level : short_integer) IS + + user_status : status_vector; + BEGIN + gds_unwind_request ( + user_status'address, + req_handle'address, + level'address); + if user_status (1) /= 0 then error (user_status); end if; + END unwind_request; + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_close ( + user_status'address, + cursor_name'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_close; + +PROCEDURE dsql_declare ( + statement_name : string; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_declare ( + user_status'address, + statement_name'address, + cursor_name'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_declare; + +PROCEDURE dsql_describe ( + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_describe ( + user_status'address, + statement_name'address, + descriptor'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_describe; + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_execute ( + user_status'address, + trans_handle'address, + statement_name'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute; + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string) IS + + user_status : status_vector; + BEGIN + gds_execute ( + user_status'address, + trans_handle'address, + statement_name'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute; + +PROCEDURE dsql_execute_immediate ( + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : short_integer; + command : string) IS + + user_status : status_vector; + BEGIN + gds_execute_immediate ( + user_status'address, + db_handle'address, + trans_handle'address, + command_length'address, + command'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute_immediate; + +PROCEDURE dsql_fetch ( + sqlcode : OUT integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_fetch ( + user_status'address, + sqlcode'address, + cursor_name'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_fetch; + +PROCEDURE dsql_fetch ( + sqlcode : OUT integer; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_fetch ( + user_status'address, + sqlcode'address, + cursor_name'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_fetch; + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_open ( + user_status'address, + trans_handle'address, + cursor_name'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_open; + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_open ( + user_status'address, + trans_handle'address, + cursor_name'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_open; + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_prepare ( + user_status'address, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_prepare; + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string) IS + + user_status : status_vector; + BEGIN + gds_prepare ( + user_status'address, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_prepare; + +--- PYXIS procedures + +PROCEDURE compile_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr) IS + + user_status : status_vector; + BEGIN + pyxis_compile_map ( + user_status'address, + frm_handle'address, + mp_handle'address, + map_length'address, + map'address); +--- if user_status (1) /= 0 then error (user_status); end if; + END compile_map; + +PROCEDURE compile_sub_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr) IS + + user_status : status_vector; + BEGIN + pyxis_compile_sub_map ( + user_status'address, + frm_handle'address, + mp_handle'address, + map_length'address, + map'address); +--- if user_status (1) /= 0 then error (user_status); end if; + END compile_sub_map; + +PROCEDURE drive_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_drive_form ( + user_status'address, + db_handle'address, + trans_handle'address, + win_handle'address, + mp_handle'address, + input, + output); +--- if user_status (1) /= 0 then error (user_status); end if; + END drive_form; + +PROCEDURE fetch_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_fetch ( + user_status'address, + db_handle'address, + trans_handle'address, + mp_handle'address, + output); +--- if user_status (1) /= 0 then error (user_status); end if; + END fetch_sub_form; + +PROCEDURE insert_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_insert ( + user_status'address, + db_handle'address, + trans_handle'address, + mp_handle'address, + input); +--- if user_status (1) /= 0 then error (user_status); end if; + END insert_sub_form; + +PROCEDURE load_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : short_integer; + form_name : string) IS + + user_status : status_vector; + BEGIN + pyxis_load_form ( + user_status'address, + db_handle'address, + trans_handle'address, + frm_handle'address, + name_length'address, + form_name'address); + if user_status (1) /= 0 then error (user_status); end if; + END load_form; + +PROCEDURE reset_form ( + win_handle : window_handle) IS + + user_status : status_vector; + BEGIN + pyxis_reset_form ( + user_status'address, + win_handle'address); +--- if user_status (1) /= 0 then error (user_status); end if; + END reset_form; + + +END interbase;'); +INSERT INTO TEMPLATES (LANGUAGE, "FILE", TEMPLATE) VALUES ('ALSYS_ADA', 'interbase_alsys.a', +'WITH SYSTEM; + +PACKAGE interbase IS + +TYPE status_vector IS ARRAY (0..19) OF long_integer; +TYPE quad IS ARRAY (0..1) OF long_integer; +TYPE chars IS ARRAY (integer range <>) of character; +TYPE blr IS ARRAY (integer range <>) of short_integer; +TYPE dpb IS ARRAY (integer range <>) of short_integer; +TYPE tpb IS ARRAY (integer range <>) of short_integer; + +SUBTYPE isc_short IS integer; +SUBTYPE isc_long IS long_integer; +SUBTYPE isc_float IS float; +SUBTYPE isc_double IS long_float; +SUBTYPE database_handle IS long_integer; +SUBTYPE request_handle IS long_integer; +SUBTYPE transaction_handle IS long_integer; +SUBTYPE blob_handle IS long_integer; +SUBTYPE form_handle IS long_integer; +SUBTYPE map_handle IS long_integer; +SUBTYPE window_handle IS long_integer; +SUBTYPE menu_handle IS long_integer; + +TYPE gds_teb_t IS RECORD + dbb_ptr : SYSTEM.ADDRESS; + tpb_len : long_integer; + tpb_ptr : SYSTEM.ADDRESS; +END RECORD; + +TYPE gds_tm IS RECORD + tm_sec : long_integer; + tm_min : long_integer; + tm_hour : long_integer; + tm_mday : long_integer; + tm_mon : long_integer; + tm_year : long_integer; + tm_wday : long_integer; + tm_yday : long_integer; + tm_isdst : long_integer; +END RECORD; + +TYPE sqlvar is RECORD + sqltype : integer; + sqllen : integer; + sqldata : SYSTEM.ADDRESS; + sqlind : SYSTEM.ADDRESS; + sqlname_length : integer; + sqlname : chars (1..30); +END RECORD; + +FOR sqlvar use record at mod 2; + sqltype at 0 range 0..15; + sqllen at 2 range 0..15; + sqldata at 4 range 0..31; + sqlind at 8 range 0..31; + sqlname_length at 12 range 0..15; + sqlname at 14 range 0..239; +END RECORD; + +TYPE sqlvar_array IS ARRAY (short_integer range <>) of sqlvar; + +--- Constants + + gds_true : CONSTANT long_integer := 1; + gds_false : CONSTANT long_integer := 0; + +$ SET SANS_DOLLAR + +$ FORMAT BLR_FORMAT " %s : CONSTANT short_integer := %d;\n +$ FORMAT DYN_FORMAT " %-32s: CONSTANT short_integer := %d;\n +$ FORMAT SDL_FORMAT " %-32s: CONSTANT short_integer := %d;\n +$ FORMAT ERROR_FORMAT "%-25s: CONSTANT long_integer := %d;\n +$ FORMAT PB_FORMAT " %-29s: CONSTANT short_integer := %d;\n +$ FORMAT PYXIS_FORMAT "%-29s: CONSTANT short_integer := %d;\n +$ FORMAT OPT_FORMAT "%-32s: CONSTANT long_integer := %d;\n +$ FORMAT SQL_FORMAT "%-16s: CONSTANT integer := %d;\n + +--- BLR + +$ SYMBOLS BLR DTYPE BLR_FORMAT +$ SYMBOLS BLR MECH SIGNED BLR_FORMAT + +$ SYMBOLS BLR STATEMENTS BLR_FORMAT +$ SYMBOLS BLR VALUES BLR_FORMAT + +$ SYMBOLS BLR BOOLEANS BLR_FORMAT + +$ SYMBOLS BLR RSE BLR_FORMAT + +$ SYMBOLS BLR JOIN BLR_FORMAT + +$ SYMBOLS BLR AGGREGATE BLR_FORMAT +$ SYMBOLS BLR NEW BLR_FORMAT + +--- Dynamic Data Definition Language operators + +--- Version number + +$ SYMBOLS DYN MECH SIGNED DYN_FORMAT + +--- Operations (may be nested) + +$ SYMBOLS DYN OPERATIONS SIGNED DYN_FORMAT + +--- View specific stuff + +$ SYMBOLS DYN VIEW SIGNED DYN_FORMAT + +--- Generic attributes + +$ SYMBOLS DYN GENERIC SIGNED DYN_FORMAT + +--- Relation specific attributes + +$ SYMBOLS DYN RELATION SIGNED DYN_FORMAT + +--- Global field specific attributes + +$ SYMBOLS DYN GLOBAL SIGNED DYN_FORMAT + +--- Local field specific attributes + +$ SYMBOLS DYN FIELD SIGNED DYN_FORMAT + +--- Index specific attributes + +$ SYMBOLS DYN INDEX SIGNED DYN_FORMAT + +--- Trigger specific attributes + +$ SYMBOLS DYN TRIGGER SIGNED DYN_FORMAT + +--- Security Class specific attributes + +$ SYMBOLS DYN SECURITY SIGNED DYN_FORMAT + +--- Dimension attributes + +$ SYMBOLS DYN ARRAY SIGNED DYN_FORMAT + +--- File specific attributes + +$ SYMBOLS DYN FILES DYN_FORMAT + +--- Function specific attributes + +$ SYMBOLS DYN FUNCTIONS DYN_FORMAT + +--- Generator specific attributes + +$ SYMBOLS DYN GENERATOR DYN_FORMAT + +--- Array slice description language (SDL) + +$ SYMBOLS SDL SDL SIGNED SDL_FORMAT + +--- Database parameter block stuff + +$ SYMBOLS DPB ITEMS PB_FORMAT + +$ SYMBOLS DPB BITS PB_FORMAT + +--- Transaction parameter block stuff + +$ SYMBOLS TPB ITEMS PB_FORMAT + +--- Blob parameter block stuff + +$ SYMBOLS BPB ITEMS PB_FORMAT + +--- Common, structural codes + +$ SYMBOLS INFO MECH PB_FORMAT + +--- Database information items + +$ SYMBOLS INFO DB PB_FORMAT + +--- Request information items + +$ SYMBOLS INFO REQUEST PB_FORMAT + +--- Blob information items + +$ SYMBOLS INFO BLOB PB_FORMAT + +--- Transaction information items + +$ SYMBOLS INFO TRANSACTION PB_FORMAT + +--- Error codes + +$ SYMBOLS ERROR MECH ERROR_FORMAT + +$ ERROR MAJOR ERROR_FORMAT + +--- Minor codes subject to change + +$ ERROR MINOR ERROR_FORMAT + +--- Dynamic SQL datatypes + +$ SYMBOLS SQL DTYPE SQL_FORMAT + +--- Forms Package definitions + +--- Map definition block definitions + +$ SYMBOLS PYXIS MAP SIGNED PYXIS_FORMAT + +--- Field option flags for display options + +$ SYMBOLS PYXIS DISPLAY OPT_FORMAT + +--- Field option values following display + +$ SYMBOLS PYXIS VALUE OPT_FORMAT + +--- Pseudo key definitions + +$ SYMBOLS PYXIS KEY OPT_FORMAT + +--- Menu definition stuff + +$ SYMBOLS PYXIS MENU SIGNED PYXIS_FORMAT + +database_error : EXCEPTION; +null_blob : CONSTANT quad := (0, 0); +null_tpb : tpb (0..0); +null_dpb : dpb (0..0); + +PROCEDURE attach_database ( + user_status : OUT status_vector; + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb); + +PROCEDURE blob_display ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : integer); + +PROCEDURE blob_dump ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : integer); + +PROCEDURE blob_edit ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : integer); + +PROCEDURE blob_load ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : integer); + +PROCEDURE cancel_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE cancel_events ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE close_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE commit_retaining ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE commit_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE compile_request ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr); + +PROCEDURE compile_request2 ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr); + +PROCEDURE create_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad); + +PROCEDURE create_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : integer; + bpb : blr); + +PROCEDURE create_database ( + user_status : OUT status_vector; + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb; + db_type : integer); + +PROCEDURE detach_database ( + user_status : OUT status_vector; + db_handle : IN OUT database_handle); + +PROCEDURE ddl ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : integer; + msg : SYSTEM.ADDRESS); + +PROCEDURE decode_date ( + date : quad; + times : IN OUT gds_tm); + +PROCEDURE encode_date ( + times : IN OUT gds_tm; + date : quad); + +PROCEDURE event_wait ( + user_status : OUT status_vector; + db_handle : database_handle; + length : integer; + events : string; + buffer : string); + +PROCEDURE get_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + actual_length : OUT integer; + buffer_length : integer; + buffer : string); + +PROCEDURE get_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : SYSTEM.ADDRESS; + return_length : OUT long_integer); + +PROCEDURE open_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad); + +PROCEDURE open_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : integer; + bpb : blr); + +PROCEDURE prepare_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE prepare_transaction2 ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + msg_length : integer; + msg : blr); + +PROCEDURE put_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + length : integer; + buffer : string); + +PROCEDURE put_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : SYSTEM.ADDRESS); + +PROCEDURE queue_events ( + user_status : OUT status_vector; + db_handle : database_handle; + id : quad; + length : integer; + events : string; + ast : long_integer; + arg : quad); + +PROCEDURE receive ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE rollback_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE send ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE set_debug ( + debug_val : long_integer); + +PROCEDURE start_and_send ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE start_request ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + level : integer); + +PROCEDURE start_multiple ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE start_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : integer; + db_handle : database_handle; + tpb_length : integer; + tpb_arg : tpb); + +PROCEDURE unwind_request ( + user_status : OUT status_vector; + req_handle : request_handle; + level : integer); + +PROCEDURE print_status ( + user_status : status_vector); + +PROCEDURE print_version ( + db_handle : database_handle); + +FUNCTION sqlcode ( + user_status : status_vector) RETURN long_integer; + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + user_status : OUT status_vector; + cursor_name : string); + +PROCEDURE dsql_declare ( + user_status : OUT status_vector; + statement_name : string; + cursor_name : string); + +PROCEDURE dsql_describe ( + user_status : OUT status_vector; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string); + +PROCEDURE dsql_execute_immediate ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : integer; + command : string); + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT long_integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT long_integer; + cursor_name : string); + +PROCEDURE dsql_finish ( + db_handle : database_handle); + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string); + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string); + +--- PYXIS procedures + +PROCEDURE compile_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr); + +PROCEDURE compile_sub_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr); + +PROCEDURE create_window ( + win_handle : OUT window_handle; + name_length : integer; + file_name : string; + width : IN OUT integer; + height : IN OUT integer); + +PROCEDURE delete_window ( + win_handle : IN OUT window_handle); + +PROCEDURE drive_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); + +PROCEDURE fetch_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS); + +PROCEDURE insert_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS); + +PROCEDURE load_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : integer; + form_name : string); + +FUNCTION menu ( + win_handle : window_handle; + men_handle : menu_handle; + menu_length : integer; + menu : blr) RETURN integer; + +PROCEDURE pop_window ( + win_handle : window_handle); + +PROCEDURE reset_form ( + user_status : OUT status_vector; + win_handle : window_handle); + +PROCEDURE drive_menu ( + win_handle : IN OUT window_handle; + men_handle : IN OUT menu_handle; + blr_length : integer; + blr_source : blr; + title_length : integer; + title : string; + terminator : OUT integer; + entree_length : OUT integer; + entree_text : OUT string; + entree_value : OUT long_integer); + +PROCEDURE get_entree ( + men_handle : menu_handle; + entree_length : OUT integer; + entree_text : OUT string; + entree_value : OUT long_integer; + entree_end : OUT integer); + +PROCEDURE initialize_menu ( + men_handle : IN OUT menu_handle); + +PROCEDURE put_entree ( + men_handle : menu_handle; + entree_length : integer; + entree_text : string; + entree_value : long_integer); + + + +--- +--- Same routines, but with automatic error checking +--- + +PROCEDURE attach_database ( + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb); + +PROCEDURE cancel_blob ( + blb_handle : IN OUT blob_handle); + +PROCEDURE cancel_events ( + blb_handle : IN OUT blob_handle); + +PROCEDURE close_blob ( + blb_handle : IN OUT blob_handle); + +PROCEDURE commit_retaining ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE commit_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE compile_request ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr); + +PROCEDURE compile_request2 ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr); + +PROCEDURE create_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad); + +PROCEDURE create_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : integer; + bpb : blr); + +PROCEDURE create_database ( + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb; + db_type : integer); + +PROCEDURE detach_database ( + db_handle : IN OUT database_handle); + +PROCEDURE ddl ( + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : integer; + msg : SYSTEM.ADDRESS); + +PROCEDURE get_segment ( + completion_code : OUT long_integer; + blb_handle : blob_handle; + actual_length : OUT integer; + buffer_length : integer; + buffer : string); + +PROCEDURE get_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : SYSTEM.ADDRESS; + return_length : OUT long_integer); + +PROCEDURE open_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad); + +PROCEDURE open_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : integer; + bpb : blr); + +PROCEDURE prepare_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE prepare_transaction2 ( + trans_handle : IN OUT transaction_handle; + msg_length : integer; + msg : blr); + +PROCEDURE put_segment ( + blb_handle : blob_handle; + length : integer; + buffer : string); + +PROCEDURE put_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : SYSTEM.ADDRESS); + +PROCEDURE queue_events ( + db_handle : database_handle; + id : quad; + length : integer; + events : string; + ast : long_integer; + arg : quad); + +PROCEDURE receive ( + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE rollback_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE send ( + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE start_and_send ( + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE start_request ( + req_handle : request_handle; + trans_handle : transaction_handle; + level : integer); + +PROCEDURE start_multiple ( + trans_handle : IN OUT transaction_handle; + count : integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE start_transaction ( + trans_handle : IN OUT transaction_handle; + count : integer; + db_handle : database_handle; + tpb_length : integer; + tpb_arg : tpb); + +PROCEDURE unwind_request ( + req_handle : request_handle; + level : integer); + +PROCEDURE dsql_close ( + cursor_name : string); + +PROCEDURE dsql_declare ( + statement_name : string; + cursor_name : string); + +PROCEDURE dsql_describe ( + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string); + +PROCEDURE dsql_execute_immediate ( + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : integer; + command : string); + +PROCEDURE dsql_fetch ( + sqlcode : OUT long_integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_fetch ( + sqlcode : OUT long_integer; + cursor_name : string); + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string); + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string); + +--- PYXIS procedures + +PROCEDURE compile_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr); + +PROCEDURE compile_sub_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr); + +PROCEDURE drive_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); + +PROCEDURE fetch_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS); + +PROCEDURE insert_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS); + +PROCEDURE load_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : integer; + form_name : string); + +PROCEDURE reset_form ( + win_handle : window_handle); + +END interbase; + +PACKAGE BODY interbase IS + +--- +--- Actual Interbase entrypoints +--- + +PROCEDURE gds_attach_database ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + file_length : SYSTEM.ADDRESS; -- integer; + file_name : SYSTEM.ADDRESS; -- string; + handle : SYSTEM.ADDRESS; -- IN OUT database_handle; + dpb_length : SYSTEM.ADDRESS; -- integer; + dpb : SYSTEM.ADDRESS); + +PROCEDURE gds_blob_display ( + blob_id : SYSTEM.ADDRESS; -- quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + field_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- integer; + +PROCEDURE gds_blob_dump ( + blob_id : SYSTEM.ADDRESS; -- quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + file_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- integer; + +PROCEDURE gds_blob_edit ( + blob_id : SYSTEM.ADDRESS; -- IN OUT quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + field_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- integer; + +PROCEDURE gds_blob_load ( + blob_id : SYSTEM.ADDRESS; -- quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + file_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- integer; + +PROCEDURE gds_cancel_blob ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + blb_handle : SYSTEM.ADDRESS); -- IN OUT blob_handle); + +PROCEDURE gds_cancel_events ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + blb_handle : SYSTEM.ADDRESS); -- IN OUT blob_handle); + +PROCEDURE gds_close_blob ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + blb_handle : SYSTEM.ADDRESS); --IN OUT blob_handle); + +PROCEDURE gds_commit_retaining ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle); + +PROCEDURE gds_commit_transaction ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle); + +PROCEDURE gds_compile_request ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + req_handle : SYSTEM.ADDRESS; -- IN OUT request_handle; + blr_length : SYSTEM.ADDRESS; -- integer; + blr : SYSTEM.ADDRESS); + +PROCEDURE gds_compile_request2 ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + req_handle : SYSTEM.ADDRESS; -- IN OUT request_handle; + blr_length : SYSTEM.ADDRESS; -- integer; + blr_arg : SYSTEM.ADDRESS); -- blr; + +PROCEDURE gds_create_blob ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + blb_handle : SYSTEM.ADDRESS; --IN OUT blob_handle; + blob_id : SYSTEM.ADDRESS); --OUT quad); + +PROCEDURE gds_create_blob2 ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + blb_handle : SYSTEM.ADDRESS; --IN OUT blob_handle; + blob_id : SYSTEM.ADDRESS; --OUT quad; + bpb_length : SYSTEM.ADDRESS; --integer; + bpb : SYSTEM.ADDRESS); --blr; + +PROCEDURE gds_create_database ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + file_length : SYSTEM.ADDRESS; --integer; + file_name : SYSTEM.ADDRESS; --string; + db_handle : SYSTEM.ADDRESS; --IN OUT database_handle; + dpb_length : SYSTEM.ADDRESS; --integer; + dpb_arg : SYSTEM.ADDRESS; --dpb; + db_type : SYSTEM.ADDRESS); --integer); + +PROCEDURE gds_ddl ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + msg_length : SYSTEM.ADDRESS; -- integer; + msg : SYSTEM.ADDRESS); + +PROCEDURE gds_decode_date ( + date : SYSTEM.ADDRESS; -- quad; + times : SYSTEM.ADDRESS); -- gds_tm); + +PROCEDURE gds_detach_database ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + handle : SYSTEM.ADDRESS); -- IN OUT database_handle); + +PROCEDURE gds_encode_date ( + times : SYSTEM.ADDRESS; -- gds_tm; + date : SYSTEM.ADDRESS); -- OUT quad); + +PROCEDURE gds_event_wait ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + length : SYSTEM.ADDRESS; -- integer; + events : SYSTEM.ADDRESS; -- string; + buffer : SYSTEM.ADDRESS); -- string; + +PROCEDURE gds_get_segment ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + blb_handle : SYSTEM.ADDRESS; --blob_handle; + actual_length : SYSTEM.ADDRESS; --OUT long_integer; + buffer_length : SYSTEM.ADDRESS; --long_integer; + buffer : SYSTEM.ADDRESS); --string; + +PROCEDURE gds_get_slice ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + blob_id : SYSTEM.ADDRESS; -- quad; + sdl_length : SYSTEM.ADDRESS; -- integer; + sdl : SYSTEM.ADDRESS; -- blr; + param_length : SYSTEM.ADDRESS; -- integer; + param : SYSTEM.ADDRESS; -- string; + slice_length : SYSTEM.ADDRESS; -- long_integer; + slice : SYSTEM.ADDRESS; -- string; + return_length : SYSTEM.ADDRESS); -- OUT long_integer; + +PROCEDURE gds_open_blob ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + blb_handle : SYSTEM.ADDRESS; --IN OUT blob_handle; + blob_id : SYSTEM.ADDRESS); --quad; + +PROCEDURE gds_open_blob2 ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + blb_handle : SYSTEM.ADDRESS; --IN OUT blob_handle; + blob_id : SYSTEM.ADDRESS; --quad; + bpb_length : SYSTEM.ADDRESS; --integer; + bpb : SYSTEM.ADDRESS); --blr; + +PROCEDURE gds_prepare_transaction ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle; + +PROCEDURE gds_prepare_transaction2 ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- IN OUT transaction_handle; + msg_length : SYSTEM.ADDRESS; -- integer; + msg : SYSTEM.ADDRESS); -- blr; + +PROCEDURE gds_put_segment ( + user_status : SYSTEM.ADDRESS; --OUT status_vector; + blb_handle : SYSTEM.ADDRESS; --blob_handle; + length : SYSTEM.ADDRESS; --long_integer; + buffer : SYSTEM.ADDRESS); --string; + +PROCEDURE gds_put_slice ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + blob_id : SYSTEM.ADDRESS; -- quad; + sdl_length : SYSTEM.ADDRESS; -- integer; + sdl : SYSTEM.ADDRESS; -- blr; + param_length : SYSTEM.ADDRESS; -- integer; + param : SYSTEM.ADDRESS; -- string; + slice_length : SYSTEM.ADDRESS; -- long_integer; + slice : SYSTEM.ADDRESS); -- string; + +PROCEDURE gds_queue_events ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + id : SYSTEM.ADDRESS; -- quad; + length : SYSTEM.ADDRESS; -- integer; + events : SYSTEM.ADDRESS; -- string; + ast : SYSTEM.ADDRESS; -- long_integer; + arg : SYSTEM.ADDRESS); -- quad; + +PROCEDURE gds_receive ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + msg_type : SYSTEM.ADDRESS; -- integer; + msg_length : SYSTEM.ADDRESS; -- integer; + msg : SYSTEM.ADDRESS; + level : SYSTEM.ADDRESS); --integer; + +PROCEDURE gds_rollback_transaction ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle; + +PROCEDURE gds_send ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + msg_type : SYSTEM.ADDRESS; -- integer; + msg_length : SYSTEM.ADDRESS; -- integer; + msg : SYSTEM.ADDRESS; + level : SYSTEM.ADDRESS); -- integer); + +PROCEDURE gds_set_debug ( + debug_val : SYSTEM.ADDRESS); -- integer); + +PROCEDURE gds_start_and_send ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + msg_type : SYSTEM.ADDRESS; -- integer; + msg_length : SYSTEM.ADDRESS; -- integer; + msg : SYSTEM.ADDRESS; + level : SYSTEM.ADDRESS); -- integer); + +PROCEDURE gds_start_request ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + level : SYSTEM.ADDRESS); -- integer); + +PROCEDURE gds_start_multiple ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- IN OUT transaction_handle; + count : SYSTEM.ADDRESS; -- integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE gds_start_transaction ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- IN OUT transaction_handle; + count : SYSTEM.ADDRESS; -- integer; + db_handle : SYSTEM.ADDRESS; -- database_handle; + dpb_length : SYSTEM.ADDRESS; -- integer; + dpb : SYSTEM.ADDRESS); + +PROCEDURE gds_unwind_request ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + level : SYSTEM.ADDRESS); -- integer); + +PROCEDURE gds_print_status ( + user_status : SYSTEM.ADDRESS); -- status_vector; + +PROCEDURE gds_version ( + db_handle : SYSTEM.ADDRESS; + ptr1 : long_integer; + ptr2 : SYSTEM.ADDRESS); + +FUNCTION gds_sqlcode ( + user_status : SYSTEM.ADDRESS) RETURN long_integer; + +--- Dynamic SQL procedures + +PROCEDURE gds_close ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + cursor_name : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_declare ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + statement_name : SYSTEM.ADDRESS; -- string; + cursor_name : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_describe ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + statement_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE gds_dsql_finish ( + user_status : SYSTEM.ADDRESS); -- database handle; + +PROCEDURE gds_execute ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + statement_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE gds_execute_immediate ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + command_length : SYSTEM.ADDRESS; -- integer; + command : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_fetch ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + sqlcode : SYSTEM.ADDRESS; -- OUT integer; + cursor_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE gds_open ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + cursor_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE gds_prepare ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + statement_name : SYSTEM.ADDRESS; -- string; + command_length : SYSTEM.ADDRESS; -- integer; + command : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +--- PYXIS procedures + +PROCEDURE pyxis_compile_map ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + frm_handle : SYSTEM.ADDRESS; -- form_handle; + mp_handle : SYSTEM.ADDRESS; -- OUT map_handle; + map_length : SYSTEM.ADDRESS; -- integer; + map : SYSTEM.ADDRESS); -- blr); + +PROCEDURE pyxis_compile_sub_map ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + frm_handle : SYSTEM.ADDRESS; -- form_handle; + mp_handle : SYSTEM.ADDRESS; -- OUT map_handle; + map_length : SYSTEM.ADDRESS; -- integer; + map : SYSTEM.ADDRESS); -- blr); + +PROCEDURE pyxis_create_window ( + win_handle : SYSTEM.ADDRESS; -- OUT window_handle; + name_length : SYSTEM.ADDRESS; -- integer; + file_name : SYSTEM.ADDRESS; -- string; + width : SYSTEM.ADDRESS; -- IN OUT integer; + height : SYSTEM.ADDRESS); -- IN OUT integer); + +PROCEDURE pyxis_delete_window ( + win_handle : SYSTEM.ADDRESS); -- IN OUT window_handle); + +PROCEDURE pyxis_drive_form ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + win_handle : SYSTEM.ADDRESS; -- window_handle; + mp_handle : SYSTEM.ADDRESS; -- map_handle; + input : SYSTEM.ADDRESS; -- SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE pyxis_fetch ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + mp_handle : SYSTEM.ADDRESS; -- map_handle; + output : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE pyxis_insert ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + mp_handle : SYSTEM.ADDRESS; -- map_handle; + input : SYSTEM.ADDRESS); -- SYSTEM.ADDRESS); + +PROCEDURE pyxis_load_form ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + frm_handle : SYSTEM.ADDRESS; -- IN OUT form_handle; + name_length : SYSTEM.ADDRESS; -- integer; + form_name : SYSTEM.ADDRESS); -- string); + +FUNCTION pyxis_menu ( + win_handle : SYSTEM.ADDRESS; -- window_handle; + men_handle : SYSTEM.ADDRESS; -- menu_handle; + menu_length : SYSTEM.ADDRESS; -- integer; + menu : SYSTEM.ADDRESS) RETURN integer; -- blr) ; + +PROCEDURE pyxis_pop_window ( + win_handle : SYSTEM.ADDRESS); -- window_handle); + +PROCEDURE pyxis_reset_form ( + user_status : SYSTEM.ADDRESS; -- OUT status_vector; + win_handle : SYSTEM.ADDRESS); -- window_handle); + +PROCEDURE pyxis_drive_menu ( + win_handle : SYSTEM.ADDRESS; -- IN OUT window_handle; + men_handle : SYSTEM.ADDRESS; -- IN OUT menu_handle; + blr_length : SYSTEM.ADDRESS; -- integer; + blr_source : SYSTEM.ADDRESS; -- blr; + title_length : SYSTEM.ADDRESS; -- integer; + title : SYSTEM.ADDRESS; -- string; + terminator : SYSTEM.ADDRESS; -- OUT integer; + entree_length : SYSTEM.ADDRESS; -- OUT integer; + entree_text : SYSTEM.ADDRESS; -- OUT string; + entree_value : SYSTEM.ADDRESS); -- OUT long_integer); + +PROCEDURE pyxis_get_entree ( + men_handle : SYSTEM.ADDRESS; -- menu_handle; + entree_length : SYSTEM.ADDRESS; -- OUT integer; + entree_text : SYSTEM.ADDRESS; -- OUT string; + entree_value : SYSTEM.ADDRESS; -- OUT integer; + entree_end : SYSTEM.ADDRESS); -- OUT integer); + +PROCEDURE pyxis_initialize_menu ( + men_handle : SYSTEM.ADDRESS); -- IN OUT menu_handle); + +PROCEDURE pyxis_put_entree ( + men_handle : SYSTEM.ADDRESS; -- menu_handle; + entree_length : SYSTEM.ADDRESS; -- integer; + entree_text : SYSTEM.ADDRESS; -- string; + entree_value : SYSTEM.ADDRESS); -- long_integer); + + + + + +pragma interface (C, gds_attach_database); +pragma interface_name (gds_attach_database, "gds_$attach_database"); + +pragma interface (C, gds_blob_display); +pragma interface_name (gds_blob_display, "blob_$display"); +pragma interface (C, gds_blob_dump); +pragma interface_name (gds_blob_dump, "blob_$dump"); +pragma interface (C, gds_blob_edit); +pragma interface_name (gds_blob_edit, "blob_$edit"); +pragma interface (C, gds_blob_load); +pragma interface_name (gds_blob_load, "blob_$load"); + +pragma interface (C, gds_cancel_blob); +pragma interface_name (gds_cancel_blob, "gds_$cancel_blob"); +pragma interface (C, gds_cancel_events); +pragma interface_name (gds_cancel_events, "gds_$cancel_events"); +pragma interface (C, gds_close); +pragma interface_name (gds_close, "gds_$close"); +pragma interface (C, gds_close_blob); +pragma interface_name (gds_close_blob, "gds_$close_blob"); +pragma interface (C, gds_commit_retaining); +pragma interface_name (gds_commit_retaining, "gds_$commit_retaining"); +pragma interface (C, gds_commit_transaction); +pragma interface_name (gds_commit_transaction, "gds_$commit_transaction"); +pragma interface (C, gds_compile_request); +pragma interface_name (gds_compile_request, "gds_$compile_request"); +pragma interface (C, gds_compile_request2); +pragma interface_name (gds_compile_request2, "gds_$compile_request2"); +pragma interface (C, gds_create_blob); +pragma interface_name (gds_create_blob, "gds_$create_blob"); +pragma interface (C, gds_create_blob2); +pragma interface_name (gds_create_blob2, "gds_$create_blob2"); +pragma interface (C, gds_create_database); +pragma interface_name (gds_create_database, "gds_$create_database"); + +pragma interface (C, gds_ddl); +pragma interface_name (gds_ddl, "gds_$ddl"); +pragma interface (C, gds_declare); +pragma interface_name (gds_declare, "gds_$declare"); +pragma interface (C, gds_decode_date); +pragma interface_name (gds_decode_date, "gds_$decode_date"); +pragma interface (C, gds_describe); +pragma interface_name (gds_describe, "gds_$describe"); +pragma interface (C, gds_detach_database); +pragma interface_name (gds_detach_database, "gds_$detach_database"); +pragma interface (C, gds_dsql_finish); +pragma interface_name (gds_dsql_finish, "gds_$dsql_finish"); + +pragma interface (C, gds_encode_date); +pragma interface_name (gds_encode_date, "gds_$encode_date"); +pragma interface (C, gds_event_wait); +pragma interface_name (gds_event_wait, "gds_$event_wait"); +pragma interface (C, gds_execute); +pragma interface_name (gds_execute, "gds_$execute"); +pragma interface (C, gds_execute_immediate); +pragma interface_name (gds_execute_immediate, "gds_$execute_immediate"); + +pragma interface (C, gds_fetch); +pragma interface_name (gds_fetch, "gds_$fetch_a"); + +pragma interface (C, gds_get_segment); +pragma interface_name (gds_get_segment, "gds_$get_segment"); +pragma interface (C, gds_get_slice); +pragma interface_name (gds_get_slice, "gds_$get_slice"); + +pragma interface (C, gds_open); +pragma interface_name (gds_open, "gds_$open"); +pragma interface (C, gds_open_blob); +pragma interface_name (gds_open_blob, "gds_$open_blob"); +pragma interface (C, gds_open_blob2); +pragma interface_name (gds_open_blob2, "gds_$open_blob2"); + +pragma interface (C, gds_prepare); +pragma interface_name (gds_prepare, "gds_$prepare"); +pragma interface (C, gds_prepare_transaction); +pragma interface_name (gds_prepare_transaction, "gds_$prepare_transaction"); +pragma interface (C, gds_prepare_transaction2); +pragma interface_name (gds_prepare_transaction2, "gds_$prepare_transaction2"); +pragma interface (C, gds_print_status); +pragma interface_name (gds_print_status, "gds_$print_status"); +pragma interface (C, gds_put_segment); +pragma interface_name (gds_put_segment, "gds_$put_segment"); +pragma interface (C, gds_put_slice); +pragma interface_name (gds_put_slice, "gds_$put_slice"); + +pragma interface (C, gds_queue_events); +pragma interface_name (gds_queue_events, "gds_$que_events"); + +pragma interface (C, gds_receive); +pragma interface_name (gds_receive, "gds_$receive"); +pragma interface (C, gds_rollback_transaction); +pragma interface_name (gds_rollback_transaction, "gds_$rollback_transaction"); + +pragma interface (C, gds_send); +pragma interface_name (gds_send, "gds_$send"); +pragma interface (C, gds_set_debug); +pragma interface_name (gds_set_debug, "gds_$set_debug"); +pragma interface (C, gds_sqlcode); +pragma interface_name (gds_sqlcode, "gds_$sqlcode"); +pragma interface (C, gds_start_and_send); +pragma interface_name (gds_start_and_send, "gds_$start_and_send"); +pragma interface (C, gds_start_multiple); +pragma interface_name (gds_start_multiple, "gds_$start_multiple"); +pragma interface (C, gds_start_request); +pragma interface_name (gds_start_request, "gds_$start_request"); +pragma interface (C, gds_start_transaction); +pragma interface_name (gds_start_transaction, "gds_$start_transaction"); + +pragma interface (C, gds_unwind_request); +pragma interface_name (gds_unwind_request, "gds_$unwind_request"); + +pragma interface (C, gds_version); +pragma interface_name (gds_version, "gds_$version"); + +pragma interface (C, pyxis_compile_map); +pragma interface_name (pyxis_compile_map, "pyxis_$compile_map"); +pragma interface (C, pyxis_compile_sub_map); +pragma interface_name (pyxis_compile_sub_map, "pyxis_$compile_sub_map"); +pragma interface (C, pyxis_create_window); +pragma interface_name (pyxis_create_window, "pyxis_$create_window"); +pragma interface (C, pyxis_delete_window); +pragma interface_name (pyxis_delete_window, "pyxis_$delete_window"); +pragma interface (C, pyxis_drive_form); +pragma interface_name (pyxis_drive_form, "pyxis_$drive_form"); +pragma interface (C, pyxis_drive_menu); +pragma interface_name (pyxis_drive_menu, "pyxis_$drive_menu"); +pragma interface (C, pyxis_fetch); +pragma interface_name (pyxis_fetch, "pyxis_$fetch"); +pragma interface (C, pyxis_get_entree); +pragma interface_name (pyxis_get_entree, "pyxis_$get_entree"); +pragma interface (C, pyxis_initialize_menu); +pragma interface_name (pyxis_initialize_menu, "pyxis_$initialize_menu"); +pragma interface (C, pyxis_insert); +pragma interface_name (pyxis_insert, "pyxis_$insert"); +pragma interface (C, pyxis_load_form); +pragma interface_name (pyxis_load_form, "pyxis_$load_form"); +pragma interface (C, pyxis_menu); +pragma interface_name (pyxis_menu, "pyxis_$menu"); +pragma interface (C, pyxis_pop_window); +pragma interface_name (pyxis_pop_window, "pyxis_$pop_window"); +pragma interface (C, pyxis_put_entree); +pragma interface_name (pyxis_put_entree, "pyxis_$put_entree"); +pragma interface (C, pyxis_reset_form); +pragma interface_name (pyxis_reset_form, "pyxis_$reset_form"); + + +--- +--- Interface routines that return status vector +--- + +PROCEDURE attach_database ( + user_status : OUT status_vector; + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb) IS + BEGIN + gds_attach_database ( + user_status'address, + file_length'address, + file_name'address, + db_handle'address, + dpb_length'address, + dpb_arg'address); + END attach_database; + +PROCEDURE blob_display ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : integer) IS + BEGIN + gds_blob_display ( + blob_id'address, + db_handle'address, + tra_handle'address, + field_name'address, + name_length'address); + END blob_display; + + +PROCEDURE blob_dump ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : integer) IS + BEGIN + gds_blob_dump ( + blob_id'address, + db_handle'address, + tra_handle'address, + file_name'address, + name_length'address); + END blob_dump; + + +PROCEDURE blob_edit ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : integer) IS + BEGIN + gds_blob_edit ( + blob_id'address, + db_handle'address, + tra_handle'address, + field_name'address, + name_length'address); + END blob_edit; + + +PROCEDURE blob_load ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : integer) IS + BEGIN + gds_blob_load ( + blob_id'address, + db_handle'address, + tra_handle'address, + file_name'address, + name_length'address); + END blob_load; + + +PROCEDURE cancel_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_cancel_blob ( + user_status'address, + blb_handle'address); + END cancel_blob; + +PROCEDURE cancel_events ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_cancel_events ( + user_status'address, + blb_handle'address); + END cancel_events; + +PROCEDURE close_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_close_blob ( + user_status'address, + blb_handle'address); + END close_blob; + +PROCEDURE commit_retaining ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_commit_retaining ( + user_status'address, + trans_handle'address); + END commit_retaining; + +PROCEDURE commit_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_commit_transaction ( + user_status'address, + trans_handle'address); + END commit_transaction; + + +PROCEDURE compile_request ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr) IS + BEGIN + gds_compile_request ( + user_status'address, + db_handle'address, + req_handle'address, + blr_length'address, + blr_arg'address); + END compile_request; + + +PROCEDURE compile_request2 ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr) IS + BEGIN + gds_compile_request2 ( + user_status'address, + db_handle'address, + req_handle'address, + blr_length'address, + blr_arg'address); + END compile_request2; + + +PROCEDURE create_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad) IS + BEGIN + gds_create_blob ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address); + END create_blob; + +PROCEDURE create_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : integer; + bpb : blr) IS + BEGIN + gds_create_blob2 ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address, + bpb_length'address, + bpb'address); + END create_blob2; + +PROCEDURE create_database ( + user_status : OUT status_vector; + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb; + db_type : integer) IS + BEGIN + gds_create_database ( + user_status'address, + file_length'address, + file_name'address, + db_handle'address, + dpb_length'address, + dpb_arg'address, + db_type'address); + END create_database; + +PROCEDURE ddl ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : integer; + msg : SYSTEM.ADDRESS) IS + BEGIN + gds_ddl ( + user_status'address, + db_handle'address, + trans_handle'address, + msg_length'address, + msg); + END ddl; + +PROCEDURE decode_date ( + date : quad; + times : IN OUT gds_tm) IS + BEGIN + gds_decode_date ( + date'address, + times'address); + END decode_date; + + +PROCEDURE detach_database ( + user_status : OUT status_vector; + db_handle : IN OUT database_handle) IS + BEGIN + gds_detach_database ( + user_status'address, + db_handle'address); + END detach_database; + +PROCEDURE encode_date ( + times : IN OUT gds_tm; + date : quad) IS + BEGIN + gds_encode_date ( + times'address, + date'address); + END encode_date; + + +PROCEDURE event_wait ( + user_status : OUT status_vector; + db_handle : database_handle; + length : integer; + events : string; + buffer : string) IS + BEGIN + gds_event_wait ( + user_status'address, + db_handle'address, + length'address, + events'address, + buffer'address); + END event_wait; + +PROCEDURE get_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + actual_length : OUT integer; + buffer_length : integer; + buffer : string) IS + BEGIN + gds_get_segment ( + user_status'address, + blb_handle'address, + actual_length'address, + buffer_length'address, + buffer'address); + END get_segment; + +PROCEDURE get_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : SYSTEM.ADDRESS; + return_length : OUT long_integer) IS + BEGIN + gds_get_slice ( + user_status'address, + db_handle'address, + trans_handle'address, + blob_id'address, + sdl_length'address, + sdl'address, + param_length'address, + param'address, + slice_length'address, + slice, + return_length'address); + END get_slice; + +PROCEDURE open_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad) IS + BEGIN + gds_open_blob ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address); + END open_blob; + +PROCEDURE open_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : integer; + bpb : blr) IS + BEGIN + gds_open_blob2 ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address, + bpb_length'address, + bpb'address); + END open_blob2; + +PROCEDURE prepare_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_prepare_transaction ( + user_status'address, + trans_handle'address); + END prepare_transaction; + +PROCEDURE prepare_transaction2 ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + msg_length : integer; + msg : blr) IS + BEGIN + gds_prepare_transaction2 ( + user_status'address, + trans_handle'address, + msg_length'address, + msg'address); + END prepare_transaction2; + +PROCEDURE put_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + length : integer; + buffer : string) IS + BEGIN + gds_put_segment ( + user_status'address, + blb_handle'address, + length'address, + buffer'address); + END put_segment; + +PROCEDURE put_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : SYSTEM.ADDRESS) IS + BEGIN + gds_put_slice ( + user_status'address, + db_handle'address, + trans_handle'address, + blob_id'address, + sdl_length'address, + sdl'address, + param_length'address, + param'address, + slice_length'address, + slice); + END put_slice; + +PROCEDURE queue_events ( + user_status : OUT status_vector; + db_handle : database_handle; + id : quad; + length : integer; + events : string; + ast : long_integer; + arg : quad) IS + BEGIN + gds_queue_events ( + user_status'address, + db_handle'address, + id'address, + length'address, + events'address, + ast'address, + arg'address); + END queue_events; + +PROCEDURE receive ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + BEGIN + gds_receive ( + user_status'address, + req_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + END receive; + +PROCEDURE rollback_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_rollback_transaction ( + user_status'address, + trans_handle'address); + END rollback_transaction; + + +PROCEDURE send ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + BEGIN + gds_send ( + user_status'address, + req_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + END send; + +PROCEDURE set_debug ( + debug_val : long_integer) IS + BEGIN + gds_set_debug ( + debug_val'address); + END set_debug; + +PROCEDURE start_request ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + level : integer) IS + BEGIN + gds_start_request ( + user_status'address, + req_handle'address, + trans_handle'address, + level'address); + END start_request; + + +PROCEDURE start_and_send ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + BEGIN + gds_start_and_send ( + user_status'address, + req_handle'address, + trans_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + END start_and_send; + +PROCEDURE start_multiple ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : integer; + teb : SYSTEM.ADDRESS) IS + BEGIN + gds_start_multiple ( + user_status'address, + trans_handle'address, + count'address, + teb); + END start_multiple; + + +PROCEDURE start_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : integer; + db_handle : database_handle; + tpb_length : integer; + tpb_arg : tpb) IS + BEGIN + gds_start_transaction ( + user_status'address, + trans_handle'address, + count'address, + db_handle'address, + tpb_length'address, + tpb_arg'address); + END start_transaction; + + +PROCEDURE unwind_request ( + user_status : OUT status_vector; + req_handle : request_handle; + level : integer) IS + BEGIN + gds_unwind_request ( + user_status'address, + req_handle'address, + level'address); + END unwind_request; + + +PROCEDURE print_status ( + user_status : status_vector) IS + BEGIN + gds_print_status ( + user_status'address); + END print_status; + + +PROCEDURE print_version ( + db_handle: interbase.database_handle) IS + + ptr : long_integer := 0; + BEGIN + gds_version ( + db_handle'address, + 0, + ptr'address); + END print_version; + +FUNCTION sqlcode ( + user_status : status_vector) RETURN long_integer IS + BEGIN + return gds_sqlcode (user_status'address); + end sqlcode; + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + user_status : OUT status_vector; + cursor_name : string) IS + BEGIN + gds_close ( + user_status'address, + cursor_name'address); + END dsql_close; + +PROCEDURE dsql_declare ( + user_status : OUT status_vector; + statement_name : string; + cursor_name : string) IS + BEGIN + gds_declare ( + user_status'address, + statement_name'address, + cursor_name'address); + END dsql_declare; + +PROCEDURE dsql_describe ( + user_status : OUT status_vector; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_describe ( + user_status'address, + statement_name'address, + descriptor); + END dsql_describe; + +PROCEDURE dsql_finish ( + db_handle : database_handle) IS + BEGIN + gds_dsql_finish ( + db_handle'address); + END dsql_finish; + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_execute ( + user_status'address, + trans_handle'address, + statement_name'address, + descriptor); + END dsql_execute; + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string) IS + BEGIN + gds_execute ( + user_status'address, + trans_handle'address, + statement_name'address, + null_blob'address); + END dsql_execute; + +PROCEDURE dsql_execute_immediate ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : integer; + command : string) IS + BEGIN + gds_execute_immediate ( + user_status'address, + db_handle'address, + trans_handle'address, + command_length'address, + command'address); + END dsql_execute_immediate; + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT long_integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_fetch ( + user_status'address, + sqlcode'address, + cursor_name'address, + descriptor); + END dsql_fetch; + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT long_integer; + cursor_name : string) IS + BEGIN + gds_fetch ( + user_status'address, + sqlcode'address, + cursor_name'address, + null_blob'address); + END dsql_fetch; + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_open ( + user_status'address, + trans_handle'address, + cursor_name'address, + descriptor); + END dsql_open; + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string) IS + BEGIN + gds_open ( + user_status'address, + trans_handle'address, + cursor_name'address, + null_blob'address); + END dsql_open; + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_prepare ( + user_status'address, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + descriptor); + END dsql_prepare; + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string) IS + BEGIN + gds_prepare ( + user_status'address, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + null_blob'address); + END dsql_prepare; + +--- PYXIS procedures + +PROCEDURE compile_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr) IS + BEGIN + pyxis_compile_map ( + user_status'address, + frm_handle'address, + mp_handle'address, + map_length'address, + map'address); + END compile_map; + +PROCEDURE compile_sub_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr) IS + BEGIN + pyxis_compile_sub_map ( + user_status'address, + frm_handle'address, + mp_handle'address, + map_length'address, + map'address); + END compile_sub_map; + +PROCEDURE create_window ( + win_handle : OUT window_handle; + name_length : integer; + file_name : string; + width : IN OUT integer; + height : IN OUT integer) IS + BEGIN + pyxis_create_window ( + win_handle'address, + name_length'address, + file_name'address, + width'address, + height'address); + END create_window; + +PROCEDURE delete_window ( + win_handle : IN OUT window_handle) IS + BEGIN + pyxis_delete_window ( + win_handle'address); + END delete_window; + +PROCEDURE drive_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS) IS + BEGIN + pyxis_drive_form ( + user_status'address, + db_handle'address, + trans_handle'address, + win_handle'address, + mp_handle'address, + input, + output); + END drive_form; + +PROCEDURE fetch_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS) IS + BEGIN + pyxis_fetch ( + user_status'address, + db_handle'address, + trans_handle'address, + mp_handle'address, + output); + END fetch_sub_form; + +PROCEDURE insert_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS) IS + BEGIN + pyxis_insert ( + user_status'address, + db_handle'address, + trans_handle'address, + mp_handle'address, + input); + END insert_sub_form; + +PROCEDURE load_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : integer; + form_name : string) IS + BEGIN + pyxis_load_form ( + user_status'address, + db_handle'address, + trans_handle'address, + frm_handle'address, + name_length'address, + form_name'address); + END load_form; + +FUNCTION menu ( + win_handle : window_handle; + men_handle : menu_handle; + menu_length : integer; + menu : blr) RETURN integer IS + BEGIN + return pyxis_menu ( + win_handle'address, + men_handle'address, + menu_length'address, + menu'address); + END menu; + +PROCEDURE pop_window ( + win_handle : window_handle) IS + BEGIN + pyxis_pop_window ( + win_handle'address); + END pop_window; + +PROCEDURE reset_form ( + user_status : OUT status_vector; + win_handle : window_handle) IS + BEGIN + pyxis_reset_form ( + user_status'address, + win_handle'address); + END reset_form; + +PROCEDURE drive_menu ( + win_handle : IN OUT window_handle; + men_handle : IN OUT menu_handle; + blr_length : integer; + blr_source : blr; + title_length : integer; + title : string; + terminator : OUT integer; + entree_length : OUT integer; + entree_text : OUT string; + entree_value : OUT long_integer) IS + BEGIN + pyxis_drive_menu ( + win_handle'address, + men_handle'address, + blr_length'address, + blr_source'address, + title_length'address, + title'address, + terminator'address, + entree_length'address, + entree_text'address, + entree_value'address); + END drive_menu; + +PROCEDURE get_entree ( + men_handle : menu_handle; + entree_length : OUT integer; + entree_text : OUT string; + entree_value : OUT long_integer; + entree_end : OUT integer) IS + BEGIN + pyxis_get_entree ( + men_handle'address, + entree_length'address, + entree_text'address, + entree_value'address, + entree_end'address); + END get_entree; + +PROCEDURE initialize_menu ( + men_handle : IN OUT menu_handle) IS + BEGIN + pyxis_initialize_menu ( + men_handle'address); + END initialize_menu; + +PROCEDURE put_entree ( + men_handle : menu_handle; + entree_length : integer; + entree_text : string; + entree_value : long_integer) IS + BEGIN + pyxis_put_entree ( + men_handle'address, + entree_length'address, + entree_text'address, + entree_value'address); + END put_entree; + + +--- +--- Internal routines +--- + +PROCEDURE error ( + user_status : status_vector) IS + BEGIN + gds_print_status (user_status'address); + RAISE database_error; + END; + + +--- +--- Routines sans explicit status vector +--- + +PROCEDURE attach_database ( + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb) IS + + user_status : status_vector; + BEGIN + gds_attach_database ( + user_status'address, + file_length'address, + file_name'address, + db_handle'address, + dpb_length'address, + dpb_arg'address); + if user_status (1) /= 0 then error (user_status); end if; + END attach_database; + +PROCEDURE cancel_blob ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_cancel_blob ( + user_status'address, + blb_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END cancel_blob; + +PROCEDURE cancel_events ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_cancel_events ( + user_status'address, + blb_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END cancel_events; + +PROCEDURE close_blob ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_close_blob ( + user_status'address, + blb_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END close_blob; + +PROCEDURE commit_retaining ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_commit_retaining ( + user_status'address, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END commit_retaining; + +PROCEDURE commit_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_commit_transaction ( + user_status'address, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END commit_transaction; + + +PROCEDURE compile_request ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr) IS + + user_status : status_vector; + BEGIN + gds_compile_request ( + user_status'address, + db_handle'address, + req_handle'address, + blr_length'address, + blr_arg'address); + if user_status (1) /= 0 then error (user_status); end if; + END compile_request; + + +PROCEDURE compile_request2 ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr) IS + + user_status : status_vector; + BEGIN + gds_compile_request2 ( + user_status'address, + db_handle'address, + req_handle'address, + blr_length'address, + blr_arg'address); + if user_status (1) /= 0 then error (user_status); end if; + END compile_request2; + + +PROCEDURE create_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad) IS + + user_status : status_vector; + BEGIN + gds_create_blob ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address); + if user_status (1) /= 0 then error (user_status); end if; + END create_blob; + +PROCEDURE create_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : integer; + bpb : blr) IS + + user_status : status_vector; + BEGIN + gds_create_blob2 ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address, + bpb_length'address, + bpb'address); + if user_status (1) /= 0 then error (user_status); end if; + END create_blob2; + +PROCEDURE create_database ( + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb; + db_type : integer) IS + + user_status : status_vector; + BEGIN + gds_create_database ( + user_status'address, + file_length'address, + file_name'address, + db_handle'address, + dpb_length'address, + dpb_arg'address, + db_type'address); + if user_status (1) /= 0 then error (user_status); end if; + END create_database; + +PROCEDURE ddl ( + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : integer; + msg : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_ddl ( + user_status'address, + db_handle'address, + trans_handle'address, + msg_length'address, + msg); + if user_status (1) /= 0 then error (user_status); end if; + END ddl; + +PROCEDURE detach_database ( + db_handle : IN OUT database_handle) IS + + user_status : status_vector; + BEGIN + gds_detach_database ( + user_status'address, + db_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END detach_database; + + +PROCEDURE event_wait ( + db_handle : database_handle; + length : integer; + events : string; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_event_wait ( + user_status'address, + db_handle'address, + length'address, + events'address, + buffer'address); + END event_wait; + +PROCEDURE get_segment ( + completion_code : OUT long_integer; + blb_handle : blob_handle; + actual_length : OUT integer; + buffer_length : integer; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_get_segment ( + user_status'address, + blb_handle'address, + actual_length'address, + buffer_length'address, + buffer'address); + if user_status (1) /= 0 and user_status (1) /= gds_segment and + user_status (1) /= gds_segstr_eof then + error (user_status); + end if; + completion_code := user_status(1); + END get_segment; + +PROCEDURE get_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : SYSTEM.ADDRESS; + return_length : OUT long_integer) IS + + user_status : status_vector; + BEGIN + gds_get_slice ( + user_status'address, + db_handle'address, + trans_handle'address, + blob_id'address, + sdl_length'address, + sdl'address, + param_length'address, + param'address, + slice_length'address, + slice, + return_length'address); + END get_slice; + + +PROCEDURE open_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad) IS + + user_status : status_vector; + BEGIN + gds_open_blob ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address); + if user_status (1) /= 0 then error (user_status); end if; + END open_blob; + +PROCEDURE open_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : integer; + bpb : blr) IS + + user_status : status_vector; + BEGIN + gds_open_blob2 ( + user_status'address, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id'address, + bpb_length'address, + bpb'address); + if user_status (1) /= 0 then error (user_status); end if; + END open_blob2; + +PROCEDURE prepare_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_prepare_transaction ( + user_status'address, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END prepare_transaction; + +PROCEDURE prepare_transaction2 ( + trans_handle : IN OUT transaction_handle; + msg_length : integer; + msg : blr) IS + + user_status : status_vector; + BEGIN + gds_prepare_transaction2 ( + user_status'address, + trans_handle'address, + msg_length'address, + msg'address); + END prepare_transaction2; + +PROCEDURE put_segment ( + blb_handle : blob_handle; + length : integer; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_put_segment ( + user_status'address, + blb_handle'address, + length'address, + buffer'address); + if user_status (1) /= 0 then error (user_status); end if; + END put_segment; + +PROCEDURE put_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_put_slice ( + user_status'address, + db_handle'address, + trans_handle'address, + blob_id'address, + sdl_length'address, + sdl'address, + param_length'address, + param'address, + slice_length'address, + slice); + END put_slice; + +PROCEDURE queue_events ( + db_handle : database_handle; + id : quad; + length : integer; + events : string; + ast : long_integer; + arg : quad) IS + + user_status : status_vector; + BEGIN + gds_queue_events ( + user_status'address, + db_handle'address, + id'address, + length'address, + events'address, + ast'address, + arg'address); + END queue_events; + +PROCEDURE receive ( + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + + user_status : status_vector; + BEGIN + gds_receive ( + user_status'address, + req_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + if user_status (1) /= 0 then error (user_status); end if; + END receive; + +PROCEDURE rollback_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_rollback_transaction ( + user_status'address, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END rollback_transaction; + + +PROCEDURE send ( + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + + user_status : status_vector; + BEGIN + gds_send ( + user_status'address, + req_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + if user_status (1) /= 0 then error (user_status); end if; + END send; + +PROCEDURE start_request ( + req_handle : request_handle; + trans_handle : transaction_handle; + level : integer) IS + + user_status : status_vector; + BEGIN + gds_start_request ( + user_status'address, + req_handle'address, + trans_handle'address, + level'address); + if user_status (1) /= 0 then error (user_status); end if; + END start_request; + + +PROCEDURE start_and_send ( + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + + user_status : status_vector; + BEGIN + gds_start_and_send ( + user_status'address, + req_handle'address, + trans_handle'address, + msg_type'address, + msg_length'address, + msg, + level'address); + if user_status (1) /= 0 then error (user_status); end if; + END start_and_send; + +PROCEDURE start_multiple ( + trans_handle : IN OUT transaction_handle; + count : integer; + teb : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_start_multiple ( + user_status'address, + trans_handle'address, + count'address, + teb); + if user_status (1) /= 0 then error (user_status); end if; + END start_multiple; + + +PROCEDURE start_transaction ( + trans_handle : IN OUT transaction_handle; + count : integer; + db_handle : database_handle; + tpb_length : integer; + tpb_arg : tpb) IS + + user_status : status_vector; + BEGIN + gds_start_transaction ( + user_status'address, + trans_handle'address, + count'address, + db_handle'address, + tpb_length'address, + tpb_arg'address); + if user_status (1) /= 0 then error (user_status); end if; + END start_transaction; + + +PROCEDURE unwind_request ( + req_handle : request_handle; + level : integer) IS + + user_status : status_vector; + BEGIN + gds_unwind_request ( + user_status'address, + req_handle'address, + level'address); + if user_status (1) /= 0 then error (user_status); end if; + END unwind_request; + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_close ( + user_status'address, + cursor_name'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_close; + +PROCEDURE dsql_declare ( + statement_name : string; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_declare ( + user_status'address, + statement_name'address, + cursor_name'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_declare; + +PROCEDURE dsql_describe ( + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_describe ( + user_status'address, + statement_name'address, + descriptor'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_describe; + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_execute ( + user_status'address, + trans_handle'address, + statement_name'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute; + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string) IS + + user_status : status_vector; + BEGIN + gds_execute ( + user_status'address, + trans_handle'address, + statement_name'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute; + +PROCEDURE dsql_execute_immediate ( + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : integer; + command : string) IS + + user_status : status_vector; + BEGIN + gds_execute_immediate ( + user_status'address, + db_handle'address, + trans_handle'address, + command_length'address, + command'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute_immediate; + +PROCEDURE dsql_fetch ( + sqlcode : OUT long_integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_fetch ( + user_status'address, + sqlcode'address, + cursor_name'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_fetch; + +PROCEDURE dsql_fetch ( + sqlcode : OUT long_integer; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_fetch ( + user_status'address, + sqlcode'address, + cursor_name'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_fetch; + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_open ( + user_status'address, + trans_handle'address, + cursor_name'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_open; + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_open ( + user_status'address, + trans_handle'address, + cursor_name'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_open; + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_prepare ( + user_status'address, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_prepare; + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string) IS + + user_status : status_vector; + BEGIN + gds_prepare ( + user_status'address, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_prepare; + +--- PYXIS procedures + +PROCEDURE compile_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr) IS + + user_status : status_vector; + BEGIN + pyxis_compile_map ( + user_status'address, + frm_handle'address, + mp_handle'address, + map_length'address, + map'address); +--- if user_status (1) /= 0 then error (user_status); end if; + END compile_map; + +PROCEDURE compile_sub_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr) IS + + user_status : status_vector; + BEGIN + pyxis_compile_sub_map ( + user_status'address, + frm_handle'address, + mp_handle'address, + map_length'address, + map'address); +--- if user_status (1) /= 0 then error (user_status); end if; + END compile_sub_map; + +PROCEDURE drive_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_drive_form ( + user_status'address, + db_handle'address, + trans_handle'address, + win_handle'address, + mp_handle'address, + input, + output); +--- if user_status (1) /= 0 then error (user_status); end if; + END drive_form; + +PROCEDURE fetch_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_fetch ( + user_status'address, + db_handle'address, + trans_handle'address, + mp_handle'address, + output); +--- if user_status (1) /= 0 then error (user_status); end if; + END fetch_sub_form; + +PROCEDURE insert_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_insert ( + user_status'address, + db_handle'address, + trans_handle'address, + mp_handle'address, + input); +--- if user_status (1) /= 0 then error (user_status); end if; + END insert_sub_form; + +PROCEDURE load_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : integer; + form_name : string) IS + + user_status : status_vector; + BEGIN + pyxis_load_form ( + user_status'address, + db_handle'address, + trans_handle'address, + frm_handle'address, + name_length'address, + form_name'address); + if user_status (1) /= 0 then error (user_status); end if; + END load_form; + +PROCEDURE reset_form ( + win_handle : window_handle) IS + + user_status : status_vector; + BEGIN + pyxis_reset_form ( + user_status'address, + win_handle'address); +--- if user_status (1) /= 0 then error (user_status); end if; + END reset_form; + + +END interbase;'); +INSERT INTO TEMPLATES (LANGUAGE, "FILE", TEMPLATE) VALUES ('VMS_ADA', 'interbase_vms.a', +'WITH SYSTEM; + +PACKAGE interbase IS + +TYPE status_vector IS ARRAY (0..19) OF INTEGER; +TYPE quad IS ARRAY (0..1) OF INTEGER; +TYPE chars is array (integer range <>) of character; +TYPE blr IS ARRAY (integer range <>) of short_short_integer; +TYPE dpb IS ARRAY (integer range <>) of short_short_integer; +TYPE tpb IS ARRAY (integer range <>) of short_short_integer; + +SUBTYPE isc_short IS short_integer; +SUBTYPE isc_long IS integer; +SUBTYPE isc_float IS float; +SUBTYPE isc_double IS system.g_float; +SUBTYPE double IS system.g_float; +SUBTYPE database_handle IS integer; +SUBTYPE request_handle IS integer; +SUBTYPE transaction_handle IS integer; +SUBTYPE blob_handle IS integer; +SUBTYPE form_handle IS integer; +SUBTYPE map_handle IS integer; +SUBTYPE window_handle IS integer; +SUBTYPE menu_handle IS integer; + +TYPE gds_teb_t IS RECORD + dbb_ptr : SYSTEM.ADDRESS; + tpb_len : integer; + tpb_ptr : SYSTEM.ADDRESS; +END RECORD; + +TYPE gds_tm IS RECORD + tm_sec : integer; + tm_min : integer; + tm_hour : integer; + tm_mday : integer; + tm_mon : integer; + tm_year : integer; + tm_wday : integer; + tm_yday : integer; + tm_isdst : integer; +END RECORD; + +TYPE sqlvar is RECORD + sqltype : short_integer; + sqllen : short_integer; + sqldata : SYSTEM.ADDRESS; + sqlind : SYSTEM.ADDRESS; + sqlname_length : short_integer; + sqlname : chars (1..30); +END RECORD; + +TYPE sqlvar_array IS ARRAY (short_integer range <>) of sqlvar; + +TYPE sqlda (size: short_integer) IS RECORD + sqldaid : chars (1..8); + sqldabc : integer; + sqln : short_integer := size; + sqld : short_integer; + sqlvars : sqlvar_array (1..size); +END RECORD; + +--- Constants + + gds_true : CONSTANT integer := 1; + gds_false : CONSTANT integer := 0; + +--- BLR + +$ SET SANS_DOLLAR + +$ FORMAT BLR_FORMAT " %s : CONSTANT short_short_integer := %d;\n +$ FORMAT DYN_FORMAT " %-32s: CONSTANT short_short_integer := %d;\n +$ FORMAT SDL_FORMAT " %-32s: CONSTANT short_short_integer := %d;\n +$ FORMAT ERROR_FORMAT "%-25s: CONSTANT integer := %d;\n +$ FORMAT PB_FORMAT " %-29s: CONSTANT short_short_integer := %d;\n +$ FORMAT PYXIS_FORMAT "%-29s: CONSTANT short_short_integer := %d;\n +$ FORMAT OPT_FORMAT "%-32s: CONSTANT integer := %d;\n +$ FORMAT SQL_FORMAT "%-16s: CONSTANT short_integer := %d;\n + +$ SYMBOLS BLR DTYPE BLR_FORMAT +$ SYMBOLS BLR MECH SIGNED BLR_FORMAT + +$ SYMBOLS BLR STATEMENTS BLR_FORMAT +$ SYMBOLS BLR VALUES BLR_FORMAT + +$ SYMBOLS BLR BOOLEANS BLR_FORMAT + +$ SYMBOLS BLR RSE BLR_FORMAT + +$ SYMBOLS BLR JOIN BLR_FORMAT + +$ SYMBOLS BLR AGGREGATE BLR_FORMAT +$ SYMBOLS BLR NEW BLR_FORMAT + +--- Dynamic Data Definition Language operators + +--- Version number + +$ SYMBOLS DYN MECH SIGNED DYN_FORMAT + +--- Operations (may be nested) + +$ SYMBOLS DYN OPERATIONS SIGNED DYN_FORMAT + +--- View specific stuff + +$ SYMBOLS DYN VIEW SIGNED DYN_FORMAT + +--- Generic attributes + +$ SYMBOLS DYN GENERIC SIGNED DYN_FORMAT + +--- Relation specific attributes + +$ SYMBOLS DYN RELATION SIGNED DYN_FORMAT + +--- Global field specific attributes + +$ SYMBOLS DYN GLOBAL SIGNED DYN_FORMAT + +--- Local field specific attributes + +$ SYMBOLS DYN FIELD SIGNED DYN_FORMAT + +--- Index specific attributes + +$ SYMBOLS DYN INDEX SIGNED DYN_FORMAT + +--- Trigger specific attributes + +$ SYMBOLS DYN TRIGGER SIGNED DYN_FORMAT + +--- Security Class specific attributes + +$ SYMBOLS DYN SECURITY SIGNED DYN_FORMAT + +--- Dimension attributes + +$ SYMBOLS DYN ARRAY SIGNED DYN_FORMAT + +--- File specific attributes + +$ SYMBOLS DYN FILES DYN_FORMAT + +--- Function specific attributes + +$ SYMBOLS DYN FUNCTIONS DYN_FORMAT + +--- Generator specific attributes + +$ SYMBOLS DYN GENERATOR DYN_FORMAT + +--- Array slice description language (SDL) + +$ SYMBOLS SDL SDL SIGNED SDL_FORMAT + +--- Database parameter block stuff + +$ SYMBOLS DPB ITEMS PB_FORMAT + +$ SYMBOLS DPB BITS PB_FORMAT + +--- Transaction parameter block stuff + +$ SYMBOLS TPB ITEMS PB_FORMAT + +--- Blob parameter block stuff + +$ SYMBOLS BPB ITEMS PB_FORMAT + +--- Common, structural codes + +$ SYMBOLS INFO MECH PB_FORMAT + +--- Database information items + +$ SYMBOLS INFO DB PB_FORMAT + +--- Request information items + +$ SYMBOLS INFO REQUEST PB_FORMAT + +--- Blob information items + +$ SYMBOLS INFO BLOB PB_FORMAT + +--- Transaction information items + +$ SYMBOLS INFO TRANSACTION PB_FORMAT + +--- Error codes + +$ SYMBOLS ERROR MECH ERROR_FORMAT + +$ ERROR MAJOR ERROR_FORMAT + +--- Minor codes subject to change + +$ ERROR MINOR ERROR_FORMAT + +--- Dynamic SQL datatypes + +$ SYMBOLS SQL DTYPE SQL_FORMAT + +--- Forms Package definitions + +--- Map definition block definitions + +$ SYMBOLS PYXIS MAP SIGNED PYXIS_FORMAT + +--- Field option flags for display options + +$ SYMBOLS PYXIS DISPLAY OPT_FORMAT + +--- Field option values following display + +$ SYMBOLS PYXIS VALUE OPT_FORMAT + +--- Pseudo key definitions + +$ SYMBOLS PYXIS KEY OPT_FORMAT + +--- Menu definition stuff + +$ SYMBOLS PYXIS MENU SIGNED PYXIS_FORMAT blr_text : CONSTANT short_short_integer := 14; + +database_error : EXCEPTION; +null_blob : CONSTANT quad := (0, 0); +null_tpb : tpb (0..0); +null_dpb : dpb (0..0); + +PROCEDURE attach_database ( + user_status : OUT status_vector; + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb); + +PROCEDURE blob_display ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : short_integer); + +PROCEDURE blob_dump ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : short_integer); + +PROCEDURE blob_edit ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : short_integer); + +PROCEDURE blob_load ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : short_integer); + +PROCEDURE cancel_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE cancel_events ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle; + id : integer); + +PROCEDURE close_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE commit_retaining ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE commit_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE compile_request ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr); + +PROCEDURE compile_request2 ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr); + +PROCEDURE create_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad); + +PROCEDURE create_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : short_integer; + bpb : blr); + +PROCEDURE create_database ( + user_status : OUT status_vector; + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb; + db_type : short_integer); + +PROCEDURE detach_database ( + user_status : OUT status_vector; + db_handle : IN OUT database_handle); + +PROCEDURE ddl ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : short_integer; + msg : SYSTEM.ADDRESS); + +PROCEDURE encode_date ( + times : gds_tm; + date : IN OUT quad); + +PROCEDURE decode_date ( + date : quad; + times : IN OUT gds_tm); + +PROCEDURE event_wait ( + user_status : OUT status_vector; + db_handle : database_handle; + length : short_integer; + events : string; + buffer : string); + +PROCEDURE get_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + actual_length : OUT short_integer; + buffer_length : short_integer; + buffer : string); + +PROCEDURE get_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS; + return_length : OUT integer); + +PROCEDURE open_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad); + +PROCEDURE open_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : short_integer; + bpb : blr); + +PROCEDURE prepare_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE prepare_transaction2 ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + msg_length : short_integer; + msg : blr); + +PROCEDURE print_status ( + user_status : status_vector); + +PROCEDURE put_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + length : short_integer; + buffer : string); + +PROCEDURE put_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS); + +PROCEDURE que_events ( + user_status : OUT status_vector; + db_handle : database_handle; + id : quad; + length : short_integer; + events : string; + ast : integer; + arg : quad); + +PROCEDURE receive ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE rollback_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE send ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE print_version ( + db_handle : database_handle); + +FUNCTION sqlcode ( + user_status : status_vector) RETURN integer; + +PROCEDURE start_and_send ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE start_request ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + level : short_integer); + +PROCEDURE start_multiple ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : short_integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE start_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : short_integer; + db_handle : database_handle; + tpb_length : short_integer; + tpb_arg : tpb); + +PROCEDURE unwind_request ( + user_status : OUT status_vector; + req_handle : request_handle; + level : short_integer); + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + user_status : OUT status_vector; + cursor_name : string); + +PROCEDURE dsql_declare ( + user_status : OUT status_vector; + statement_name : string; + cursor_name : string); + +PROCEDURE dsql_describe ( + user_status : OUT status_vector; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string); + +PROCEDURE dsql_execute_immediate ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : short_integer; + command : string); + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT integer; + cursor_name : string); + +PROCEDURE dsql_finish ( + db_handle : database_handle); + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string); + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string); + +--- PYXIS procedures + +PROCEDURE compile_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr); + +PROCEDURE compile_sub_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr); + +PROCEDURE create_window ( + win_handle : OUT window_handle; + name_length : short_integer; + file_name : string; + width : IN OUT short_integer; + height : IN OUT short_integer); + +PROCEDURE delete_window ( + win_handle : IN OUT window_handle); + +PROCEDURE drive_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); + +PROCEDURE fetch_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS); + +PROCEDURE insert_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS); + +PROCEDURE load_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : short_integer; + form_name : string); + +FUNCTION menu ( + win_handle : window_handle; + men_handle : menu_handle; + menu_length : short_integer; + menu : blr) RETURN short_integer; + +PROCEDURE pop_window ( + win_handle : window_handle); + +PROCEDURE reset_form ( + user_status : OUT status_vector; + win_handle : window_handle); + +PROCEDURE drive_menu ( + win_handle : IN OUT window_handle; + men_handle : IN OUT menu_handle; + blr_length : short_integer; + blr_source : blr; + title_length : short_integer; + title : string; + terminator : OUT short_integer; + entree_length : OUT short_integer; + entree_text : OUT string; + entree_value : OUT integer); + +PROCEDURE get_entree ( + men_handle : menu_handle; + entree_length : OUT short_integer; + entree_text : OUT string; + entree_value : OUT integer; + entree_end : OUT short_integer); + +PROCEDURE initialize_menu ( + men_handle : IN OUT menu_handle); + +PROCEDURE put_entree ( + men_handle : menu_handle; + entree_length : short_integer; + entree_text : string; + entree_value : integer); + + + + +--- +--- Same routines, but with automatic error checking +--- + +PROCEDURE attach_database ( + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb); + +PROCEDURE cancel_blob ( + blb_handle : IN OUT blob_handle); + +PROCEDURE cancel_events ( + blb_handle : IN OUT blob_handle; + id : integer); + +PROCEDURE close_blob ( + blb_handle : IN OUT blob_handle); + +PROCEDURE commit_retaining ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE commit_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE compile_request ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr); + +PROCEDURE create_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad); + +PROCEDURE create_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : short_integer; + bpb : blr); + +PROCEDURE create_database ( + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb; + db_type : short_integer); + +PROCEDURE detach_database ( + db_handle : IN OUT database_handle); + +PROCEDURE ddl ( + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : short_integer; + msg : SYSTEM.ADDRESS); + +PROCEDURE get_segment ( + completion_code : OUT integer; + blb_handle : blob_handle; + actual_length : OUT short_integer; + buffer_length : short_integer; + buffer : string); + +PROCEDURE get_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS; + return_length : OUT integer); + +PROCEDURE open_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad); + +PROCEDURE open_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : short_integer; + bpb : blr); + +PROCEDURE prepare_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE prepare_transaction2 ( + trans_handle : IN OUT transaction_handle; + msg_length : short_integer; + msg : blr); + +PROCEDURE put_segment ( + blb_handle : blob_handle; + length : short_integer; + buffer : string); + +PROCEDURE put_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS); + +PROCEDURE que_events ( + db_handle : database_handle; + id : quad; + length : short_integer; + events : string; + ast : integer; + arg : quad); + +PROCEDURE receive ( + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE rollback_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE send ( + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE start_and_send ( + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE start_request ( + req_handle : request_handle; + trans_handle : transaction_handle; + level : short_integer); + +PROCEDURE start_multiple ( + trans_handle : IN OUT transaction_handle; + count : short_integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE start_transaction ( + trans_handle : IN OUT transaction_handle; + count : short_integer; + db_handle : database_handle; + tpb_length : short_integer; + tpb_arg : tpb); + +PROCEDURE unwind_request ( + req_handle : request_handle; + level : short_integer); + +PROCEDURE dsql_close ( + cursor_name : string); + +PROCEDURE dsql_declare ( + statement_name : string; + cursor_name : string); + +PROCEDURE dsql_describe ( + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string); + +PROCEDURE dsql_execute_immediate ( + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : short_integer; + command : string); + +PROCEDURE dsql_fetch ( + sqlcode : OUT integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_fetch ( + sqlcode : OUT integer; + cursor_name : string); + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string); + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string); + +--- PYXIS procedures + +PROCEDURE compile_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr); + +PROCEDURE compile_sub_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr); + +PROCEDURE drive_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); + +PROCEDURE fetch_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS); + +PROCEDURE insert_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS); + +PROCEDURE load_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : short_integer; + form_name : string); + +PROCEDURE reset_form ( + win_handle : window_handle); + +END interbase; + +PACKAGE BODY interbase IS + +--- +--- Actual Interbase entrypoints +--- + +PROCEDURE gds_attach_database ( + user_status : OUT status_vector; + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb); + +PROCEDURE gds_blob_display ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : short_integer); + +PROCEDURE gds_blob_dump ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : short_integer); + +PROCEDURE gds_blob_edit ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : short_integer); + +PROCEDURE gds_blob_load ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : short_integer); + +PROCEDURE gds_cancel_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE gds_cancel_events ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle; + id : integer); + +PROCEDURE gds_close_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE gds_commit_retaining ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE gds_commit_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE gds_compile_request ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr); + +PROCEDURE gds_compile_request2 ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr); + +PROCEDURE gds_create_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad); + +PROCEDURE gds_create_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : short_integer; + bpb : blr); + +PROCEDURE gds_create_database ( + user_status : OUT status_vector; + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb; + db_type : short_integer); + +PROCEDURE gds_ddl ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : short_integer; + msg : SYSTEM.ADDRESS); + +PROCEDURE gds_decode_date ( + date : quad; + times : IN OUT gds_tm); + +PROCEDURE gds_detach_database ( + user_status : OUT status_vector; + db_handle : IN OUT database_handle); + +PROCEDURE gds_encode_date ( + times : gds_tm; + date : IN OUT quad); + +PROCEDURE gds_event_wait ( + user_status : OUT status_vector; + db_handle : database_handle; + length : short_integer; + events : string; + buffer : string); + +PROCEDURE gds_get_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + actual_length : OUT short_integer; + buffer_length : short_integer; + buffer : string); + +PROCEDURE gds_get_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS; + return_length : OUT integer); + +PROCEDURE gds_open_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad); + +PROCEDURE gds_open_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : short_integer; + bpb : blr); + +PROCEDURE gds_prepare_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE gds_prepare_transaction2 ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + msg_length : short_integer; + msg : blr); + +PROCEDURE gds_print_status ( + user_status : status_vector); + +PROCEDURE gds_put_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + length : short_integer; + buffer : string); + +PROCEDURE gds_put_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS); + +PROCEDURE gds_que_events ( + user_status : OUT status_vector; + db_handle : database_handle; + id : quad; + length : short_integer; + events : string; + ast : integer; + arg : quad); + +PROCEDURE gds_receive ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE gds_rollback_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE gds_send ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE gds_version ( + db_handle : database_handle; + ptr1 : integer; + ptr2 : SYSTEM.ADDRESS); + +FUNCTION gds_sqlcode ( + user_status : status_vector) RETURN integer; + +PROCEDURE gds_start_and_send ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer); + +PROCEDURE gds_start_request ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + level : short_integer); + +PROCEDURE gds_start_multiple ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : short_integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE gds_start_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : short_integer; + db_handle : database_handle; + tpb_length : short_integer; + tpb_arg : tpb); + +PROCEDURE gds_unwind_request ( + user_status : OUT status_vector; + req_handle : request_handle; + level : short_integer); + +--- Dynamic SQL procedures + +PROCEDURE gds_close ( + user_status : OUT status_vector; + cursor_name : string); + +PROCEDURE gds_declare ( + user_status : OUT status_vector; + statement_name : string; + cursor_name : string); + +PROCEDURE gds_describe ( + user_status : OUT status_vector; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE gds_dsql_finish ( + db_handle : database_handle); + +PROCEDURE gds_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE gds_execute_immediate ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : short_integer; + command : string); + +PROCEDURE gds_fetch ( + user_status : OUT status_vector; + sqlcode : OUT integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE gds_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE gds_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string; + descriptor : SYSTEM.ADDRESS); + +--- PYXIS procedures + +PROCEDURE pyxis_compile_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr); + +PROCEDURE pyxis_compile_sub_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr); + +PROCEDURE pyxis_create_window ( + win_handle : OUT window_handle; + name_length : short_integer; + file_name : string; + width : IN OUT short_integer; + height : IN OUT short_integer); + +PROCEDURE pyxis_delete_window ( + win_handle : IN OUT window_handle); + +PROCEDURE pyxis_drive_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); + +PROCEDURE pyxis_fetch ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS); + +PROCEDURE pyxis_insert ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS); + +PROCEDURE pyxis_load_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : short_integer; + form_name : string); + +FUNCTION pyxis_menu ( + win_handle : window_handle; + men_handle : menu_handle; + menu_length : short_integer; + menu : blr) RETURN short_integer; + +PROCEDURE pyxis_pop_window ( + win_handle : window_handle); + +PROCEDURE pyxis_reset_form ( + user_status : OUT status_vector; + win_handle : window_handle); + +PROCEDURE pyxis_drive_menu ( + win_handle : IN OUT window_handle; + men_handle : IN OUT menu_handle; + blr_length : short_integer; + blr_source : blr; + title_length : short_integer; + title : string; + terminator : OUT short_integer; + entree_length : OUT short_integer; + entree_text : OUT string; + entree_value : OUT integer); + +PROCEDURE pyxis_get_entree ( + men_handle : menu_handle; + entree_length : OUT short_integer; + entree_text : OUT string; + entree_value : OUT integer; + entree_end : OUT short_integer); + +PROCEDURE pyxis_initialize_menu ( + men_handle : IN OUT menu_handle); + +PROCEDURE pyxis_put_entree ( + men_handle : menu_handle; + entree_length : short_integer; + entree_text : string; + entree_value : integer); + + + + +pragma interface (C, gds_attach_database); + +pragma interface (C, gds_blob_display); +pragma interface (C, gds_blob_dump); +pragma interface (C, gds_blob_edit); +pragma interface (C, gds_blob_load); + +pragma interface (C, gds_cancel_blob); +pragma interface (C, gds_cancel_events); +pragma interface (C, gds_close); +pragma interface (C, gds_close_blob); +pragma interface (C, gds_commit_retaining); +pragma interface (C, gds_commit_transaction); +pragma interface (C, gds_compile_request); +pragma interface (C, gds_compile_request2); +pragma interface (C, gds_create_blob); +pragma interface (C, gds_create_blob2); +pragma interface (C, gds_create_database); + +pragma interface (C, gds_ddl); +pragma interface (C, gds_declare); +pragma interface (C, gds_decode_date); +pragma interface (C, gds_describe); +pragma interface (C, gds_detach_database); +pragma interface (C, gds_dsql_finish); + +pragma interface (C, gds_encode_date); +pragma interface (C, gds_event_wait); +pragma interface (C, gds_execute); +pragma interface (C, gds_execute_immediate); + +pragma interface (C, gds_fetch); + +pragma interface (C, gds_get_segment); +pragma interface (C, gds_get_slice); + +pragma interface (C, gds_open); +pragma interface (C, gds_open_blob); +pragma interface (C, gds_open_blob2); + +pragma interface (C, gds_prepare); +pragma interface (C, gds_prepare_transaction); +pragma interface (C, gds_prepare_transaction2); +pragma interface (C, gds_print_status); +pragma interface (C, gds_put_segment); +pragma interface (C, gds_put_slice); + +pragma interface (C, gds_que_events); + +pragma interface (C, gds_receive); +pragma interface (C, gds_rollback_transaction); + +pragma interface (C, gds_send); +pragma interface (C, gds_sqlcode); +pragma interface (C, gds_start_and_send); +pragma interface (C, gds_start_multiple); +pragma interface (C, gds_start_request); +pragma interface (C, gds_start_transaction); + +pragma interface (C, gds_unwind_request); + +pragma interface (C, gds_version); + +pragma interface (C, pyxis_compile_map); +pragma interface (C, pyxis_compile_sub_map); +pragma interface (C, pyxis_create_window); + +pragma interface (C, pyxis_delete_window); +pragma interface (C, pyxis_drive_form); +pragma interface (C, pyxis_drive_menu); + +pragma interface (C, pyxis_fetch); + +pragma interface (C, pyxis_get_entree); + +pragma interface (C, pyxis_initialize_menu); +pragma interface (C, pyxis_insert); + +pragma interface (C, pyxis_load_form); + +pragma interface (C, pyxis_menu); + +pragma interface (C, pyxis_pop_window); +pragma interface (C, pyxis_put_entree); + +pragma interface (C, pyxis_reset_form); + + + +pragma import_procedure (gds_attach_database, "gds_$attach_database", + mechanism => (reference, value, reference, reference, value, reference)); + +pragma import_procedure (gds_blob_display, "blob_$display", + mechanism => (reference, reference, reference, reference, reference)); +pragma import_procedure (gds_blob_dump, "blob_$dump", + mechanism => (reference, reference, reference, reference, reference)); +pragma import_procedure (gds_blob_edit, "blob_$edit", + mechanism => (reference, reference, reference, reference, reference)); +pragma import_procedure (gds_blob_load, "blob_$load", + mechanism => (reference, reference, reference, reference, reference)); + +pragma import_procedure (gds_cancel_blob, "gds_$cancel_blob", + mechanism => (reference, reference)); + +pragma import_procedure (gds_cancel_events, "gds_$cancel_events", + mechanism => (reference, reference, reference)); +pragma import_procedure (gds_close, "gds_$close", + mechanism => (reference, reference)); +pragma import_procedure (gds_close_blob, "gds_$close_blob", + mechanism => (reference, reference)); +pragma import_procedure (gds_commit_retaining, "gds_$commit_retaining", + mechanism => (reference, reference)); +pragma import_procedure (gds_commit_transaction, "gds_$commit_transaction", + mechanism => (reference, reference)); +pragma import_procedure (gds_compile_request, "gds_$compile_request", + mechanism => (reference, reference, reference, value, reference)); +pragma import_procedure (gds_compile_request2, "gds_$compile_request2", + mechanism => (reference, reference, reference, value, reference)); +pragma import_procedure (gds_create_blob, "gds_$create_blob", + mechanism => (reference, reference, reference, reference, reference)); +pragma import_procedure (gds_create_blob2, "gds_$create_blob2", + mechanism => (reference, reference, reference, reference, reference, value, reference)); +pragma import_procedure (gds_create_database, "gds_$create_database", + mechanism => (reference, value, reference, reference, value, reference, value)); + +pragma import_procedure (gds_ddl, "gds_$ddl", + mechanism => (reference, reference, reference, value, value)); +pragma import_procedure (gds_declare, "gds_$declare", + mechanism => (reference, reference, reference)); +pragma import_procedure (gds_decode_date, "gds_$decode_date", + mechanism => (reference, reference)); +pragma import_procedure (gds_describe, "gds_$describe", + mechanism => (reference, reference, value)); +pragma import_procedure (gds_detach_database, "gds_$detach_database", + mechanism => (reference, reference)); +pragma import_procedure (gds_dsql_finish, "gds_$dsql_finish", + mechanism => (reference)); + +pragma import_procedure (gds_encode_date, "gds_$encode_date", + mechanism => (reference, reference)); +pragma import_procedure (gds_event_wait, "gds_$event_wait", + mechanism => (reference, reference, value, reference, reference)); +pragma import_procedure (gds_execute, "gds_$execute", + mechanism => (reference, reference, reference, value)); +pragma import_procedure (gds_execute_immediate, "gds_$execute_immediate", + mechanism => (reference, reference, reference, reference, reference)); + +pragma import_procedure (gds_fetch, "gds_$fetch_a", + mechanism => (reference, reference, reference, value)); + +pragma import_procedure (gds_get_segment, "gds_$get_segment", + mechanism => (reference, reference, reference, value, reference)); +pragma import_procedure (gds_get_slice, "gds_$get_slice", + mechanism => (reference, reference, reference, reference, value, reference, + value, reference, value, value, reference)); + +pragma import_procedure (gds_open, "gds_$open", + mechanism => (reference, reference, reference, value)); +pragma import_procedure (gds_open_blob, "gds_$open_blob", + mechanism => (reference, reference, reference, reference, reference)); +pragma import_procedure (gds_open_blob2, "gds_$open_blob2", + mechanism => (reference, reference, reference, reference, reference, value, reference)); + +pragma import_procedure (gds_prepare, "gds_$prepare", + mechanism => (reference, reference, reference, reference, reference, reference, value)); +pragma import_procedure (gds_prepare_transaction, "gds_$prepare_transaction", + mechanism => (reference, reference)); +pragma import_procedure (gds_prepare_transaction2, "gds_$prepare_transaction2", + mechanism => (reference, reference, value, reference)); +pragma import_procedure (gds_print_status, "gds_$print_status", + mechanism => (reference)); +pragma import_procedure (gds_put_segment, "gds_$put_segment", + mechanism => (reference, reference, value, reference)); +pragma import_procedure (gds_put_slice, "gds_$put_slice", + mechanism => (reference, reference, reference, reference, value, + reference, value, reference, value, value)); + +pragma import_procedure (gds_que_events, "gds_$que_events", + mechanism => (reference, reference, reference, value, reference, + value, reference)); + +pragma import_procedure (gds_receive, "gds_$receive", + mechanism => (reference, reference, value, value, value, value)); +pragma import_procedure (gds_rollback_transaction, "gds_$rollback_transaction", + mechanism => (reference, reference)); + +pragma import_function (gds_sqlcode, "gds_$sqlcode", + mechanism => (reference)); +pragma import_procedure (gds_send, "gds_$send", + mechanism => (reference, reference, value, value, value, value)); +pragma import_procedure (gds_start_and_send, "gds_$start_and_send", + mechanism => (reference, reference, reference, value, value, value, value)); +pragma import_procedure (gds_start_multiple, "gds_$start_multiple", + mechanism => (reference, reference, value, value)); +pragma import_procedure (gds_start_request, "gds_$start_request", + mechanism => (reference, reference, reference, value)); +pragma import_procedure (gds_start_transaction, "gds_$start_transaction", + mechanism => (reference, reference, value, reference, value, reference)); + +pragma import_procedure (gds_unwind_request, "gds_$unwind_request", + mechanism => (reference, reference, value)); + +pragma import_procedure (gds_version, "gds_$version", + mechanism => (reference, value, reference)); + +pragma import_procedure (pyxis_compile_map, "pyxis_$compile_map", + mechanism => (reference, reference, reference, reference, reference)); +pragma import_procedure (pyxis_compile_sub_map, "pyxis_$compile_sub_map", + mechanism => (reference, reference, reference, reference, reference)); +pragma import_procedure (pyxis_create_window, "pyxis_$create_window", + mechanism => (reference, reference, reference, reference, reference)); + +pragma import_procedure (pyxis_delete_window, "pyxis_$delete_window", + mechanism => (reference)); +pragma import_procedure (pyxis_drive_form, "pyxis_$drive_form", + mechanism => (reference, reference, reference, reference, reference, value, value)); +pragma import_procedure (pyxis_drive_menu, "pyxis_$drive_menu", + mechanism => (reference, reference, reference, reference, reference, reference, + reference, reference, reference, reference)); + +pragma import_procedure (pyxis_fetch, "pyxis_$fetch", + mechanism => (reference, reference, reference, reference, value)); + +pragma import_procedure (pyxis_get_entree, "pyxis_$get_entree", + mechanism => (reference, reference, reference, reference, reference)); + +pragma import_procedure (pyxis_initialize_menu, "pyxis_$initialize_menu", + mechanism => (reference)); +pragma import_procedure (pyxis_insert, "pyxis_$insert", + mechanism => (reference, reference, reference, reference, value)); + +pragma import_procedure (pyxis_load_form, "pyxis_$load_form", + mechanism => (reference, reference, reference, reference, reference, reference)); + +pragma import_function (pyxis_menu, "pyxis_$menu", + mechanism => (reference, reference, reference, reference)); + +pragma import_procedure (pyxis_pop_window, "pyxis_$pop_window", + mechanism => (reference)); +pragma import_procedure (pyxis_put_entree, "pyxis_$put_entree", + mechanism => (reference, reference, reference, reference)); + +pragma import_procedure (pyxis_reset_form, "pyxis_$reset_form", + mechanism => (reference, reference)); + + + +--- +--- Interface routines that return status vector +--- + +PROCEDURE attach_database ( + user_status : OUT status_vector; + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb) IS + BEGIN + gds_attach_database ( + user_status, + file_length, + file_name, + db_handle, + dpb_length, + dpb_arg); + END attach_database; + +PROCEDURE blob_display ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : short_integer) IS + BEGIN + gds_blob_display ( + blob_id, + db_handle, + tra_handle, + field_name, + name_length); + END blob_display; + + +PROCEDURE blob_dump ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : short_integer) IS + BEGIN + gds_blob_dump ( + blob_id, + db_handle, + tra_handle, + file_name, + name_length); + END blob_dump; + + +PROCEDURE blob_edit ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : short_integer) IS + BEGIN + gds_blob_edit ( + blob_id, + db_handle, + tra_handle, + field_name, + name_length); + END blob_edit; + + +PROCEDURE blob_load ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : short_integer) IS + BEGIN + gds_blob_load ( + blob_id, + db_handle, + tra_handle, + file_name, + name_length); + END blob_load; + + +PROCEDURE cancel_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_cancel_blob ( + user_status, + blb_handle); + END cancel_blob; + + +PROCEDURE cancel_events ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle; + id : integer) IS + BEGIN + gds_cancel_events ( + user_status, + blb_handle, + id); + END cancel_events; + +PROCEDURE close_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_close_blob ( + user_status, + blb_handle); + END close_blob; + +PROCEDURE commit_retaining ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_commit_retaining ( + user_status, + trans_handle); + END commit_retaining; + +PROCEDURE commit_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_commit_transaction ( + user_status, + trans_handle); + END commit_transaction; + + +PROCEDURE compile_request ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr) IS + BEGIN + gds_compile_request ( + user_status, + db_handle, + req_handle, + blr_length, + blr_arg); + END compile_request; + + +PROCEDURE compile_request2 ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr) IS + BEGIN + gds_compile_request2 ( + user_status, + db_handle, + req_handle, + blr_length, + blr_arg); + END compile_request2; + + +PROCEDURE create_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad) IS + BEGIN + gds_create_blob ( + user_status, + db_handle, + trans_handle, + blb_handle, + blob_id); + END create_blob; + +PROCEDURE create_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : short_integer; + bpb : blr) IS + BEGIN + gds_create_blob2 ( + user_status, + db_handle, + trans_handle, + blb_handle, + blob_id, + bpb_length, + bpb); + END create_blob2; + +PROCEDURE create_database ( + user_status : OUT status_vector; + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb; + db_type : short_integer) IS + BEGIN + gds_create_database ( + user_status, + file_length, + file_name, + db_handle, + dpb_length, + dpb_arg, + db_type); + END create_database; + + +PROCEDURE ddl ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : short_integer; + msg : SYSTEM.ADDRESS) IS + BEGIN + gds_ddl ( + user_status, + db_handle, + trans_handle, + msg_length, + msg); + END ddl; + + +PROCEDURE decode_date ( + date : quad; + times : IN OUT gds_tm) IS + BEGIN + gds_decode_date ( + date, + times); + END decode_date; + + +PROCEDURE detach_database ( + user_status : OUT status_vector; + db_handle : IN OUT database_handle) IS + BEGIN + gds_detach_database ( + user_status, + db_handle); + END detach_database; + + +PROCEDURE encode_date ( + times : gds_tm; + date : IN OUT quad) IS + BEGIN + gds_encode_date ( + times, + date); + END encode_date; + + +PROCEDURE event_wait ( + user_status : OUT status_vector; + db_handle : database_handle; + length : short_integer; + events : string; + buffer : string) IS + BEGIN + gds_event_wait ( + user_status, + db_handle, + length, + events, + buffer); + END event_wait; + +PROCEDURE get_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + actual_length : OUT short_integer; + buffer_length : short_integer; + buffer : string) IS + BEGIN + gds_get_segment ( + user_status, + blb_handle, + actual_length, + buffer_length, + buffer); + END get_segment; + + +PROCEDURE get_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS; + return_length : OUT integer) IS + BEGIN + gds_get_slice ( + user_status, + db_handle, + trans_handle, + blob_id, + sdl_length, + sdl, + param_length, + param, + slice_length, + slice, + return_length); + END get_slice; + +PROCEDURE open_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad) IS + BEGIN + gds_open_blob ( + user_status, + db_handle, + trans_handle, + blb_handle, + blob_id); + END open_blob; + + +PROCEDURE open_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : short_integer; + bpb : blr) IS + BEGIN + gds_open_blob2 ( + user_status, + db_handle, + trans_handle, + blb_handle, + blob_id, + bpb_length, + bpb); + END open_blob2; + + +PROCEDURE prepare_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_prepare_transaction ( + user_status, + trans_handle); + END prepare_transaction; + + +PROCEDURE prepare_transaction2 ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + msg_length : short_integer; + msg : blr) IS + BEGIN + gds_prepare_transaction2 ( + user_status, + trans_handle, + msg_length, + msg); + END prepare_transaction2; + + +PROCEDURE put_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + length : short_integer; + buffer : string) IS + BEGIN + gds_put_segment ( + user_status, + blb_handle, + length, + buffer); + END put_segment; + + +PROCEDURE put_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS) IS + BEGIN + gds_put_slice ( + user_status, + db_handle, + trans_handle, + blob_id, + sdl_length, + sdl, + param_length, + param, + slice_length, + slice); + END put_slice; + + +PROCEDURE print_status ( + user_status : status_vector) IS + BEGIN + gds_print_status (user_status); + end print_status; + + +PROCEDURE que_events ( + user_status : OUT status_vector; + db_handle : database_handle; + id : quad; + length : short_integer; + events : string; + ast : integer; + arg : quad) IS + BEGIN + gds_que_events ( + user_status, + db_handle, + id, + length, + events, + ast, + arg); + END que_events; + + +PROCEDURE receive ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + BEGIN + gds_receive ( + user_status, + req_handle, + msg_type, + msg_length, + msg, + level); + END receive; + +PROCEDURE rollback_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_rollback_transaction ( + user_status, + trans_handle); + END rollback_transaction; + + +PROCEDURE print_version ( + db_handle: database_handle) IS + + ptr : integer := 0; + BEGIN + gds_version ( + db_handle, + 0, + ptr'address); + END print_version; + +FUNCTION sqlcode ( + user_status : status_vector) RETURN integer IS + BEGIN + return gds_sqlcode (user_status); + end sqlcode; + + +PROCEDURE send ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + BEGIN + gds_send ( + user_status, + req_handle, + msg_type, + msg_length, + msg, + level); + END send; + +PROCEDURE start_request ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + level : short_integer) IS + BEGIN + gds_start_request ( + user_status, + req_handle, + trans_handle, + level); + END start_request; + + +PROCEDURE start_and_send ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + BEGIN + gds_start_and_send ( + user_status, + req_handle, + trans_handle, + msg_type, + msg_length, + msg, + level); + END start_and_send; + +PROCEDURE start_multiple ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : short_integer; + teb : SYSTEM.ADDRESS) IS + BEGIN + gds_start_multiple ( + user_status, + trans_handle, + count, + teb); + END start_multiple; + + +PROCEDURE start_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : short_integer; + db_handle : database_handle; + tpb_length : short_integer; + tpb_arg : tpb) IS + BEGIN + gds_start_transaction ( + user_status, + trans_handle, + count, + db_handle, + tpb_length, + tpb_arg); + END start_transaction; + + +PROCEDURE unwind_request ( + user_status : OUT status_vector; + req_handle : request_handle; + level : short_integer) IS + BEGIN + gds_unwind_request ( + user_status, + req_handle, + level); + END unwind_request; + + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + user_status : OUT status_vector; + cursor_name : string) IS + BEGIN + gds_close ( + user_status, + cursor_name); + END dsql_close; + +PROCEDURE dsql_declare ( + user_status : OUT status_vector; + statement_name : string; + cursor_name : string) IS + BEGIN + gds_declare ( + user_status, + statement_name, + cursor_name); + END dsql_declare; + +PROCEDURE dsql_describe ( + user_status : OUT status_vector; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_describe ( + user_status, + statement_name, + descriptor); + END dsql_describe; + +PROCEDURE dsql_finish ( + db_handle : database_handle) IS + BEGIN + gds_dsql_finish ( + db_handle); + END dsql_finish; + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_execute ( + user_status, + trans_handle, + statement_name, + descriptor); + END dsql_execute; + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string) IS + BEGIN + gds_execute ( + user_status, + trans_handle, + statement_name, + null_blob'address); + END dsql_execute; + +PROCEDURE dsql_execute_immediate ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : short_integer; + command : string) IS + BEGIN + gds_execute_immediate ( + user_status, + db_handle, + trans_handle, + command_length, + command); + END dsql_execute_immediate; + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_fetch ( + user_status, + sqlcode, + cursor_name, + descriptor); + END dsql_fetch; + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT integer; + cursor_name : string) IS + BEGIN + gds_fetch ( + user_status, + sqlcode, + cursor_name, + null_blob'address); + END dsql_fetch; + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_open ( + user_status, + trans_handle, + cursor_name, + descriptor); + END dsql_open; + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string) IS + BEGIN + gds_open ( + user_status, + trans_handle, + cursor_name, + null_blob'address); + END dsql_open; + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_prepare ( + user_status, + db_handle, + trans_handle, + statement_name, + command_length, + command, + descriptor); + END dsql_prepare; + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string) IS + BEGIN + gds_prepare ( + user_status, + db_handle, + trans_handle, + statement_name, + command_length, + command, + null_blob'address); + END dsql_prepare; + +--- PYXIS procedures + +PROCEDURE compile_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr) IS + BEGIN + pyxis_compile_map ( + user_status, + frm_handle, + mp_handle, + map_length, + map); + END compile_map; + +PROCEDURE compile_sub_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr) IS + BEGIN + pyxis_compile_sub_map ( + user_status, + frm_handle, + mp_handle, + map_length, + map); + END compile_sub_map; + +PROCEDURE create_window ( + win_handle : OUT window_handle; + name_length : short_integer; + file_name : string; + width : IN OUT short_integer; + height : IN OUT short_integer) IS + BEGIN + pyxis_create_window ( + win_handle, + name_length, + file_name, + width, + height); + END create_window; + +PROCEDURE delete_window ( + win_handle : IN OUT window_handle) IS + BEGIN + pyxis_delete_window ( + win_handle); + END delete_window; + +PROCEDURE drive_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS) IS + BEGIN + pyxis_drive_form ( + user_status, + db_handle, + trans_handle, + win_handle, + mp_handle, + input, + output); + END drive_form; + +PROCEDURE fetch_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS) IS + BEGIN + pyxis_fetch ( + user_status, + db_handle, + trans_handle, + mp_handle, + output); + END fetch_sub_form; + +PROCEDURE insert_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS) IS + BEGIN + pyxis_insert ( + user_status, + db_handle, + trans_handle, + mp_handle, + input); + END insert_sub_form; + +PROCEDURE load_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : short_integer; + form_name : string) IS + BEGIN + pyxis_load_form ( + user_status, + db_handle, + trans_handle, + frm_handle, + name_length, + form_name); + END load_form; + +FUNCTION menu ( + win_handle : window_handle; + men_handle : menu_handle; + menu_length : short_integer; + menu : blr) RETURN short_integer IS + BEGIN + return pyxis_menu ( + win_handle, + men_handle, + menu_length, + menu); + END menu; + +PROCEDURE pop_window ( + win_handle : window_handle) IS + BEGIN + pyxis_pop_window ( + win_handle); + END pop_window; + +PROCEDURE reset_form ( + user_status : OUT status_vector; + win_handle : window_handle) IS + BEGIN + pyxis_reset_form ( + user_status, + win_handle); + END reset_form; + +PROCEDURE drive_menu ( + win_handle : IN OUT window_handle; + men_handle : IN OUT menu_handle; + blr_length : short_integer; + blr_source : blr; + title_length : short_integer; + title : string; + terminator : OUT short_integer; + entree_length : OUT short_integer; + entree_text : OUT string; + entree_value : OUT integer) IS + BEGIN + pyxis_drive_menu ( + win_handle, + men_handle, + blr_length, + blr_source, + title_length, + title, + terminator, + entree_length, + entree_text, + entree_value); + END drive_menu; + +PROCEDURE get_entree ( + men_handle : menu_handle; + entree_length : OUT short_integer; + entree_text : OUT string; + entree_value : OUT integer; + entree_end : OUT short_integer) IS + BEGIN + pyxis_get_entree ( + men_handle, + entree_length, + entree_text, + entree_value, + entree_end); + END get_entree; + +PROCEDURE initialize_menu ( + men_handle : IN OUT menu_handle) IS + BEGIN + pyxis_initialize_menu ( + men_handle); + END initialize_menu; + +PROCEDURE put_entree ( + men_handle : menu_handle; + entree_length : short_integer; + entree_text : string; + entree_value : integer) IS + BEGIN + pyxis_put_entree ( + men_handle, + entree_length, + entree_text, + entree_value); + END put_entree; + + +--- +--- Internal routines +--- + +PROCEDURE error ( + user_status : status_vector) IS + BEGIN + gds_print_status (user_status); + RAISE database_error; + END; + + +--- +--- Routines sans explicit status vector +--- + +PROCEDURE attach_database ( + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb) IS + + user_status : status_vector; + BEGIN + gds_attach_database ( + user_status, + file_length, + file_name, + db_handle, + dpb_length, + dpb_arg); + if user_status (1) /= 0 then error (user_status); end if; + END attach_database; + +PROCEDURE cancel_blob ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_cancel_blob ( + user_status, + blb_handle); + if user_status (1) /= 0 then error (user_status); end if; + END cancel_blob; + +PROCEDURE cancel_events ( + blb_handle : IN OUT blob_handle; + id : integer) IS + + user_status : status_vector; + BEGIN + gds_cancel_events ( + user_status, + blb_handle, + id); + if user_status (1) /= 0 then error (user_status); end if; + END cancel_events; + +PROCEDURE close_blob ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_close_blob ( + user_status, + blb_handle); + if user_status (1) /= 0 then error (user_status); end if; + END close_blob; + +PROCEDURE commit_retaining ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_commit_retaining ( + user_status, + trans_handle); + if user_status (1) /= 0 then error (user_status); end if; + END commit_retaining; + +PROCEDURE commit_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_commit_transaction ( + user_status, + trans_handle); + if user_status (1) /= 0 then error (user_status); end if; + END commit_transaction; + + +PROCEDURE compile_request ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr) IS + + user_status : status_vector; + BEGIN + gds_compile_request ( + user_status, + db_handle, + req_handle, + blr_length, + blr_arg); + if user_status (1) /= 0 then error (user_status); end if; + END compile_request; + + +PROCEDURE compile_request2 ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : short_integer; + blr_arg : blr) IS + + user_status : status_vector; + BEGIN + gds_compile_request2 ( + user_status, + db_handle, + req_handle, + blr_length, + blr_arg); + if user_status (1) /= 0 then error (user_status); end if; + END compile_request2; + + +PROCEDURE create_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad) IS + + user_status : status_vector; + BEGIN + gds_create_blob ( + user_status, + db_handle, + trans_handle, + blb_handle, + blob_id); + if user_status (1) /= 0 then error (user_status); end if; + END create_blob; + + +PROCEDURE create_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : short_integer; + bpb : blr) IS + + user_status : status_vector; + BEGIN + gds_create_blob2 ( + user_status, + db_handle, + trans_handle, + blb_handle, + blob_id, + bpb_length, + bpb); + if user_status (1) /= 0 then error (user_status); end if; + END create_blob2; + + +PROCEDURE create_database ( + file_length : short_integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : short_integer; + dpb_arg : dpb; + db_type : short_integer) IS + + user_status : status_vector; + BEGIN + gds_create_database ( + user_status, + file_length, + file_name, + db_handle, + dpb_length, + dpb_arg, + db_type); + if user_status (1) /= 0 then error (user_status); end if; + END create_database; + +PROCEDURE ddl ( + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : short_integer; + msg : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_ddl ( + user_status, + db_handle, + trans_handle, + msg_length, + msg); + if user_status (1) /= 0 then error (user_status); end if; + END ddl; + + +PROCEDURE detach_database ( + db_handle : IN OUT database_handle) IS + + user_status : status_vector; + BEGIN + gds_detach_database ( + user_status, + db_handle); + if user_status (1) /= 0 then error (user_status); end if; + END detach_database; + + +PROCEDURE event_wait ( + db_handle : database_handle; + length : short_integer; + events : string; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_event_wait ( + user_status, + db_handle, + length, + events, + buffer); + END event_wait; + + +PROCEDURE get_segment ( + completion_code : OUT integer; + blb_handle : blob_handle; + actual_length : OUT short_integer; + buffer_length : short_integer; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_get_segment ( + user_status, + blb_handle, + actual_length, + buffer_length, + buffer); + if user_status (1) /= 0 and user_status (1) /= gds_segment and + user_status (1) /= gds_segstr_eof then + error (user_status); + end if; + completion_code := user_status(1); + END get_segment; + + +PROCEDURE get_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS; + return_length : OUT integer) IS + + user_status : status_vector; + BEGIN + gds_get_slice ( + user_status, + db_handle, + trans_handle, + blob_id, + sdl_length, + sdl, + param_length, + param, + slice_length, + slice, + return_length); + END get_slice; + + +PROCEDURE open_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad) IS + + user_status : status_vector; + BEGIN + gds_open_blob ( + user_status, + db_handle, + trans_handle, + blb_handle, + blob_id); + if user_status (1) /= 0 then error (user_status); end if; + END open_blob; + + +PROCEDURE open_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : short_integer; + bpb : blr) IS + + user_status : status_vector; + BEGIN + gds_open_blob2 ( + user_status, + db_handle, + trans_handle, + blb_handle, + blob_id, + bpb_length, + bpb); + if user_status (1) /= 0 then error (user_status); end if; + END open_blob2; + + +PROCEDURE prepare_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_prepare_transaction ( + user_status, + trans_handle); + if user_status (1) /= 0 then error (user_status); end if; + END prepare_transaction; + + +PROCEDURE prepare_transaction2 ( + trans_handle : IN OUT transaction_handle; + msg_length : short_integer; + msg : blr) IS + + user_status : status_vector; + BEGIN + gds_prepare_transaction2 ( + user_status, + trans_handle, + msg_length, + msg); + END prepare_transaction2; + + +PROCEDURE put_segment ( + blb_handle : blob_handle; + length : short_integer; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_put_segment ( + user_status, + blb_handle, + length, + buffer); + if user_status (1) /= 0 then error (user_status); end if; + END put_segment; + + +PROCEDURE put_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : short_integer; + sdl : blr; + param_length : short_integer; + param : string; + slice_length : integer; + slice : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_put_slice ( + user_status, + db_handle, + trans_handle, + blob_id, + sdl_length, + sdl, + param_length, + param, + slice_length, + slice); + END put_slice; + +PROCEDURE que_events ( + db_handle : database_handle; + id : quad; + length : short_integer; + events : string; + ast : integer; + arg : quad) IS + + user_status : status_vector; + BEGIN + gds_que_events ( + user_status, + db_handle, + id, + length, + events, + ast, + arg); + END que_events; + +PROCEDURE receive ( + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + + user_status : status_vector; + BEGIN + gds_receive ( + user_status, + req_handle, + msg_type, + msg_length, + msg, + level); + if user_status (1) /= 0 then error (user_status); end if; + END receive; + +PROCEDURE rollback_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_rollback_transaction ( + user_status, + trans_handle); + if user_status (1) /= 0 then error (user_status); end if; + END rollback_transaction; + + +PROCEDURE send ( + req_handle : request_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + + user_status : status_vector; + BEGIN + gds_send ( + user_status, + req_handle, + msg_type, + msg_length, + msg, + level); + if user_status (1) /= 0 then error (user_status); end if; + END send; + +PROCEDURE start_request ( + req_handle : request_handle; + trans_handle : transaction_handle; + level : short_integer) IS + + user_status : status_vector; + BEGIN + gds_start_request ( + user_status, + req_handle, + trans_handle, + level); + if user_status (1) /= 0 then error (user_status); end if; + END start_request; + + +PROCEDURE start_and_send ( + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : short_integer; + msg_length : short_integer; + msg : SYSTEM.ADDRESS; + level : short_integer) IS + + user_status : status_vector; + BEGIN + gds_start_and_send ( + user_status, + req_handle, + trans_handle, + msg_type, + msg_length, + msg, + level); + if user_status (1) /= 0 then error (user_status); end if; + END start_and_send; + +PROCEDURE start_multiple ( + trans_handle : IN OUT transaction_handle; + count : short_integer; + teb : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_start_multiple ( + user_status, + trans_handle, + count, + teb); + if user_status (1) /= 0 then error (user_status); end if; + END start_multiple; + + +PROCEDURE start_transaction ( + trans_handle : IN OUT transaction_handle; + count : short_integer; + db_handle : database_handle; + tpb_length : short_integer; + tpb_arg : tpb) IS + + user_status : status_vector; + BEGIN + gds_start_transaction ( + user_status, + trans_handle, + count, + db_handle, + tpb_length, + tpb_arg); + if user_status (1) /= 0 then error (user_status); end if; + END start_transaction; + + +PROCEDURE unwind_request ( + req_handle : request_handle; + level : short_integer) IS + + user_status : status_vector; + BEGIN + gds_unwind_request ( + user_status, + req_handle, + level); + if user_status (1) /= 0 then error (user_status); end if; + END unwind_request; + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_close ( + user_status, + cursor_name); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_close; + +PROCEDURE dsql_declare ( + statement_name : string; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_declare ( + user_status, + statement_name, + cursor_name); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_declare; + +PROCEDURE dsql_describe ( + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_describe ( + user_status, + statement_name, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_describe; + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_execute ( + user_status, + trans_handle, + statement_name, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute; + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string) IS + + user_status : status_vector; + BEGIN + gds_execute ( + user_status, + trans_handle, + statement_name, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute; + +PROCEDURE dsql_execute_immediate ( + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : short_integer; + command : string) IS + + user_status : status_vector; + BEGIN + gds_execute_immediate ( + user_status, + db_handle, + trans_handle, + command_length, + command); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute_immediate; + +PROCEDURE dsql_fetch ( + sqlcode : OUT integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_fetch ( + user_status, + sqlcode, + cursor_name, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_fetch; + +PROCEDURE dsql_fetch ( + sqlcode : OUT integer; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_fetch ( + user_status, + sqlcode, + cursor_name, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_fetch; + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_open ( + user_status, + trans_handle, + cursor_name, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_open; + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_open ( + user_status, + trans_handle, + cursor_name, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_open; + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_prepare ( + user_status, + db_handle, + trans_handle, + statement_name, + command_length, + command, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_prepare; + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : short_integer; + command : string) IS + + user_status : status_vector; + BEGIN + gds_prepare ( + user_status, + db_handle, + trans_handle, + statement_name, + command_length, + command, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_prepare; + +--- PYXIS procedures + +PROCEDURE compile_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr) IS + + user_status : status_vector; + BEGIN + pyxis_compile_map ( + user_status, + frm_handle, + mp_handle, + map_length, + map); +--- if user_status (1) /= 0 then error (user_status); end if; + END compile_map; + +PROCEDURE compile_sub_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : short_integer; + map : blr) IS + + user_status : status_vector; + BEGIN + pyxis_compile_sub_map ( + user_status, + frm_handle, + mp_handle, + map_length, + map); +--- if user_status (1) /= 0 then error (user_status); end if; + END compile_sub_map; + +PROCEDURE drive_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_drive_form ( + user_status, + db_handle, + trans_handle, + win_handle, + mp_handle, + input, + output); +--- if user_status (1) /= 0 then error (user_status); end if; + END drive_form; + +PROCEDURE fetch_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_fetch ( + user_status, + db_handle, + trans_handle, + mp_handle, + output); +--- if user_status (1) /= 0 then error (user_status); end if; + END fetch_sub_form; + +PROCEDURE insert_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_insert ( + user_status, + db_handle, + trans_handle, + mp_handle, + input); +--- if user_status (1) /= 0 then error (user_status); end if; + END insert_sub_form; + +PROCEDURE load_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : short_integer; + form_name : string) IS + + user_status : status_vector; + BEGIN + pyxis_load_form ( + user_status, + db_handle, + trans_handle, + frm_handle, + name_length, + form_name); + if user_status (1) /= 0 then error (user_status); end if; + END load_form; + +PROCEDURE reset_form ( + win_handle : window_handle) IS + + user_status : status_vector; + BEGIN + pyxis_reset_form ( + user_status, + win_handle); +--- if user_status (1) /= 0 then error (user_status); end if; + END reset_form; + + +END interbase;'); +INSERT INTO TEMPLATES (LANGUAGE, "FILE", TEMPLATE) VALUES ('SUN_ADA', 'interbase_sun.a', +'WITH SYSTEM; + +PACKAGE interbase IS + +TYPE status_vector IS ARRAY (0..19) of long_integer; +TYPE quad IS ARRAY (0..1) of long_integer; +SUBTYPE chars is string; +TYPE blr IS ARRAY (integer RANGE <>) of long_integer; +TYPE dpb IS ARRAY (integer RANGE <>) of long_integer; +TYPE tpb IS ARRAY (integer RANGE <>) of long_integer; + +SUBTYPE database_handle IS long_integer; +SUBTYPE request_handle IS long_integer; +SUBTYPE transaction_handle IS long_integer; +SUBTYPE blob_handle IS long_integer; +SUBTYPE form_handle IS long_integer; +SUBTYPE map_handle IS long_integer; +SUBTYPE window_handle IS long_integer; +SUBTYPE menu_handle IS long_integer; + +TYPE gds_teb_t IS RECORD + dbb_ptr : SYSTEM.ADDRESS; + tpb_len : long_integer; + tpb_ptr : SYSTEM.ADDRESS; +END RECORD; + +TYPE gds_tm IS RECORD + tm_sec : integer; + tm_min : integer; + tm_hour : integer; + tm_mday : integer; + tm_mon : integer; + tm_year : integer; + tm_wday : integer; + tm_yday : integer; + tm_isdst : integer; +END RECORD; + +TYPE sqlvar is RECORD + sqltype : integer; + sqllen : integer; + sqldata : SYSTEM.ADDRESS; + sqlind : SYSTEM.ADDRESS; + sqlname_length : integer; + sqlname : chars (1..30); +END RECORD; + +FOR sqlvar use record at mod 2; + sqltype at 0 range 0..15; + sqllen at 2 range 0..15; + sqldata at 4 range 0..31; + sqlind at 8 range 0..31; + sqlname_length at 12 range 0..15; + sqlname at 14 range 0..239; +END RECORD; + +TYPE sqlvar_array IS ARRAY (integer range <>) of sqlvar; + +--- Constants + + gds_true : CONSTANT integer := 1; + gds_false : CONSTANT integer := 0; + +--- BLR + +$ SET SANS_DOLLAR + +$ FORMAT BLR_FORMAT " %s : CONSTANT integer := %d;\n +$ FORMAT DYN_FORMAT " %-32s: CONSTANT integer := %d;\n +$ FORMAT SDL_FORMAT " %-32s: CONSTANT integer := %d;\n +$ FORMAT ERROR_FORMAT "%-25s: CONSTANT long_integer := %d;\n +$ FORMAT PB_FORMAT " %-29s: CONSTANT integer := %d;\n +$ FORMAT PYXIS_FORMAT "%-29s: CONSTANT integer := %d;\n +$ FORMAT OPT_FORMAT "%-32s: CONSTANT integer := %d;\n +$ FORMAT SQL_FORMAT "%-16s: CONSTANT integer := %d;\n + +$ SYMBOLS BLR DTYPE BLR_FORMAT +$ SYMBOLS BLR MECH BYTE BLR_FORMAT + +$ SYMBOLS BLR STATEMENTS BLR_FORMAT +$ SYMBOLS BLR VALUES BLR_FORMAT + +$ SYMBOLS BLR BOOLEANS BLR_FORMAT + +$ SYMBOLS BLR RSE BLR_FORMAT + +$ SYMBOLS BLR JOIN BLR_FORMAT + +$ SYMBOLS BLR AGGREGATE BLR_FORMAT +$ SYMBOLS BLR NEW BLR_FORMAT + +--- Dynamic Data Definition Language operators + +--- Version number + +$ SYMBOLS DYN MECH BYTE DYN_FORMAT + +--- Operations (may be nested) + +$ SYMBOLS DYN OPERATIONS BYTE DYN_FORMAT + +--- View specific stuff + +$ SYMBOLS DYN VIEW BYTE DYN_FORMAT + +--- Generic attributes + +$ SYMBOLS DYN GENERIC BYTE DYN_FORMAT + +--- Relation specific attributes + +$ SYMBOLS DYN RELATION BYTE DYN_FORMAT + +--- Global field specific attributes + +$ SYMBOLS DYN GLOBAL BYTE DYN_FORMAT + +--- Local field specific attributes + +$ SYMBOLS DYN FIELD BYTE DYN_FORMAT + +--- Index specific attributes + +$ SYMBOLS DYN INDEX BYTE DYN_FORMAT + +--- Trigger specific attributes + +$ SYMBOLS DYN TRIGGER BYTE DYN_FORMAT + +--- Security Class specific attributes + +$ SYMBOLS DYN SECURITY BYTE DYN_FORMAT + +--- Dimension attributes + +$ SYMBOLS DYN ARRAY BYTE DYN_FORMAT + +--- File specific attributes + +$ SYMBOLS DYN FILES DYN_FORMAT + +--- Function specific attributes + +$ SYMBOLS DYN FUNCTIONS DYN_FORMAT + +--- Generator specific attributes + +$ SYMBOLS DYN GENERATOR DYN_FORMAT + +--- Array slice description language (SDL) + +$ SYMBOLS SDL SDL BYTE SDL_FORMAT + +--- Database parameter block stuff + +$ SYMBOLS DPB ITEMS PB_FORMAT + +$ SYMBOLS DPB BITS PB_FORMAT + +--- Transaction parameter block stuff + +$ SYMBOLS TPB ITEMS PB_FORMAT + +--- Blob parameter block stuff + +$ SYMBOLS BPB ITEMS PB_FORMAT + +--- Common, structural codes + +$ SYMBOLS INFO MECH PB_FORMAT + +--- Database information items + +$ SYMBOLS INFO DB PB_FORMAT + +--- Request information items + +$ SYMBOLS INFO REQUEST PB_FORMAT + +--- Blob information items + +$ SYMBOLS INFO BLOB PB_FORMAT + +--- Transaction information items + +$ SYMBOLS INFO TRANSACTION PB_FORMAT + +--- Error codes + +$ SYMBOLS ERROR MECH ERROR_FORMAT + +$ ERROR MAJOR ERROR_FORMAT + +--- Minor codes subject to change + +$ ERROR MINOR ERROR_FORMAT + +--- Dynamic SQL datatypes + +$ SYMBOLS SQL DTYPE SQL_FORMAT + +--- Forms Package definitions + +--- Map definition block definitions + +$ SYMBOLS PYXIS MAP BYTE PYXIS_FORMAT + +--- Field option flags for display options + +$ SYMBOLS PYXIS DISPLAY OPT_FORMAT + +--- Field option values following display + +$ SYMBOLS PYXIS VALUE OPT_FORMAT + +--- Pseudo key definitions + +$ SYMBOLS PYXIS KEY OPT_FORMAT + +--- Menu definition stuff + +$ SYMBOLS PYXIS MENU SIGNED PYXIS_FORMAT blr_text : CONSTANT integer := 14; + +database_error : EXCEPTION; +null_blob : CONSTANT quad := (0, 0); +null_tpb : CONSTANT tpb (1..2) := (0, 0); +null_dpb : CONSTANT dpb (1..2) := (0, 0); + +PROCEDURE attach_database ( + user_status : OUT status_vector; + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb); + +PROCEDURE blob_display ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : integer); + +PROCEDURE blob_dump ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : integer); + +PROCEDURE blob_edit ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : integer); + +PROCEDURE blob_load ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : integer); + +PROCEDURE cancel_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE cancel_events ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE close_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle); + +PROCEDURE commit_retaining ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE commit_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE compile_request ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr); + +PROCEDURE compile_request2 ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr); + +PROCEDURE create_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad); + +PROCEDURE create_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : integer; + bpb : blr); + +PROCEDURE create_database ( + user_status : OUT status_vector; + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb; + db_type : integer); + +PROCEDURE detach_database ( + user_status : OUT status_vector; + db_handle : IN OUT database_handle); + +PROCEDURE ddl ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : integer; + msg : blr); + +PROCEDURE encode_date ( + times : gds_tm; + date : IN OUT quad); + +PROCEDURE decode_date ( + date : quad; + times : IN OUT gds_tm); + +PROCEDURE event_wait ( + user_status : OUT status_vector; + db_handle : database_handle; + length : integer; + events : string; + buffer : string); + +PROCEDURE get_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + actual_length : OUT integer; + buffer_length : integer; + buffer : string); + +PROCEDURE get_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : string; + return_length : long_integer); + +PROCEDURE open_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad); + +PROCEDURE open_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : integer; + bpb : blr); + +PROCEDURE prepare_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE prepare_transaction2 ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + msg_length : integer; + msg : blr); + +PROCEDURE put_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + length : integer; + buffer : string); + +PROCEDURE put_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : string); + +PROCEDURE queue_events ( + user_status : OUT status_vector; + db_handle : database_handle; + id : quad; + length : integer; + events : string; + ast : long_integer; + arg : quad); + +PROCEDURE receive ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE rollback_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle); + +PROCEDURE send ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE start_and_send ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE start_request ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + level : integer); + +PROCEDURE start_multiple ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE start_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : integer; + db_handle : database_handle; + tpb_length : integer; + tpb_arg : tpb); + +PROCEDURE unwind_request ( + user_status : OUT status_vector; + req_handle : request_handle; + level : integer); + +PROCEDURE print_status ( + user_status : status_vector); + +PROCEDURE print_version ( + db_handle : database_handle); + +FUNCTION sqlcode ( + user_status : status_vector) RETURN long_integer; + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + user_status : OUT status_vector; + cursor_name : string); + +PROCEDURE dsql_declare ( + user_status : OUT status_vector; + statement_name : string; + cursor_name : string); + +PROCEDURE dsql_describe ( + user_status : OUT status_vector; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string); + +PROCEDURE dsql_execute_immediate ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : integer; + command : string); + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT long_integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT long_integer; + cursor_name : string); + +PROCEDURE dsql_finish ( + db_handle : database_handle); + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string); + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string); + +--- PYXIS procedures + +PROCEDURE compile_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr); + +PROCEDURE compile_sub_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr); + +PROCEDURE create_window ( + win_handle : OUT window_handle; + name_length : integer; + file_name : string; + width : IN OUT integer; + height : IN OUT integer); + +PROCEDURE delete_window ( + win_handle : IN OUT window_handle); + +PROCEDURE drive_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); + +PROCEDURE fetch_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS); + +PROCEDURE insert_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS); + +PROCEDURE load_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : integer; + form_name : string); + +FUNCTION menu ( + win_handle : window_handle; + men_handle : menu_handle; + menu_length : integer; + menu : blr) RETURN integer; + +PROCEDURE pop_window ( + win_handle : window_handle); + +PROCEDURE reset_form ( + user_status : OUT status_vector; + win_handle : window_handle); + +PROCEDURE drive_menu ( + win_handle : IN OUT window_handle; + men_handle : IN OUT menu_handle; + blr_length : integer; + blr_source : blr; + title_length : integer; + title : string; + terminator : OUT integer; + entree_length : OUT integer; + entree_text : OUT string; + entree_value : OUT long_integer); + +PROCEDURE get_entree ( + men_handle : menu_handle; + entree_length : OUT integer; + entree_text : OUT string; + entree_value : OUT long_integer; + entree_end : OUT integer); + +PROCEDURE initialize_menu ( + men_handle : IN OUT menu_handle); + +PROCEDURE put_entree ( + men_handle : menu_handle; + entree_length : integer; + entree_text : string; + entree_value : long_integer); + + +--- +--- Same routines, but with automatic error checking +--- + +PROCEDURE attach_database ( + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb); + +PROCEDURE cancel_blob ( + blb_handle : IN OUT blob_handle); + +PROCEDURE cancel_events ( + blb_handle : IN OUT blob_handle); + +PROCEDURE close_blob ( + blb_handle : IN OUT blob_handle); + +PROCEDURE commit_retaining ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE commit_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE compile_request ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr); + +PROCEDURE compile_request2 ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr); + +PROCEDURE create_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad); + +PROCEDURE create_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : integer; + bpb : blr); + +PROCEDURE create_database ( + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb; + db_type : integer); + +PROCEDURE detach_database ( + db_handle : IN OUT database_handle); + +PROCEDURE ddl ( + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : integer; + msg : blr); + +PROCEDURE get_segment ( + completion_code : OUT long_integer; + blb_handle : blob_handle; + actual_length : OUT integer; + buffer_length : integer; + buffer : string); + +PROCEDURE get_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : string; + return_length : long_integer); + +PROCEDURE open_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad); + +PROCEDURE open_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : integer; + bpb : blr); + +PROCEDURE prepare_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE prepare_transaction2 ( + trans_handle : IN OUT transaction_handle; + msg_length : integer; + msg : blr); + +PROCEDURE put_segment ( + blb_handle : blob_handle; + length : integer; + buffer : string); + +PROCEDURE put_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : string); + +PROCEDURE queue_events ( + db_handle : database_handle; + id : quad; + length : integer; + events : string; + ast : long_integer; + arg : quad); + +PROCEDURE receive ( + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE rollback_transaction ( + trans_handle : IN OUT transaction_handle); + +PROCEDURE send ( + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE start_and_send ( + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE start_request ( + req_handle : request_handle; + trans_handle : transaction_handle; + level : integer); + +PROCEDURE start_multiple ( + trans_handle : IN OUT transaction_handle; + count : integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE start_transaction ( + trans_handle : IN OUT transaction_handle; + count : integer; + db_handle : database_handle; + tpb_length : integer; + tpb_arg : tpb); + +PROCEDURE unwind_request ( + req_handle : request_handle; + level : integer); + +PROCEDURE dsql_close ( + cursor_name : string); + +PROCEDURE dsql_declare ( + statement_name : string; + cursor_name : string); + +PROCEDURE dsql_describe ( + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string); + +PROCEDURE dsql_execute_immediate ( + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : integer; + command : string); + +PROCEDURE dsql_fetch ( + sqlcode : OUT long_integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_fetch ( + sqlcode : OUT long_integer; + cursor_name : string); + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string); + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string); + +--- PYXIS procedures + +PROCEDURE compile_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr); + +PROCEDURE compile_sub_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr); + +PROCEDURE drive_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); + +PROCEDURE fetch_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS); + +PROCEDURE insert_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS); + +PROCEDURE load_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : integer; + form_name : string); + +PROCEDURE reset_form ( + win_handle : window_handle); + +END interbase; + +PACKAGE BODY interbase IS + +--- +--- Actual Interbase entrypoints +--- + +PROCEDURE gds_attach_database ( + user_status : OUT status_vector; + file_length : integer; + file_name : SYSTEM.ADDRESS; -- string; + db_handle : SYSTEM.ADDRESS; -- IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb); + +PROCEDURE gds_blob_display ( + blob_id : quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + field_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- integer); + +PROCEDURE gds_blob_dump ( + blob_id : quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + file_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- integer); + +PROCEDURE gds_blob_edit ( + blob_id : IN OUT quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + file_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- integer); + +PROCEDURE gds_blob_load ( + blob_id : IN OUT quad; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tra_handle : SYSTEM.ADDRESS; -- transaction_handle; + file_name : SYSTEM.ADDRESS; -- string; + name_length : SYSTEM.ADDRESS); -- integer); + +PROCEDURE gds_cancel_blob ( + user_status : OUT status_vector; + blb_handle : SYSTEM.ADDRESS); -- IN OUT blob_handle; + +PROCEDURE gds_cancel_events ( + user_status : OUT status_vector; + blb_handle : SYSTEM.ADDRESS); -- IN OUT blob_handle; + +PROCEDURE gds_close_blob ( + user_status : OUT status_vector; + blb_handle : SYSTEM.ADDRESS); -- IN OUT blob_handle; + +PROCEDURE gds_commit_retaining ( + user_status : OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle; + +PROCEDURE gds_commit_transaction ( + user_status : OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle; + +PROCEDURE gds_compile_request ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + req_handle : SYSTEM.ADDRESS; -- IN OUT request_handle; + blr_length : integer; + blr_arg : blr); + +PROCEDURE gds_compile_request2 ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + req_handle : SYSTEM.ADDRESS; -- IN OUT request_handle; + blr_length : integer; + blr_arg : blr); -- blr; + +PROCEDURE gds_create_blob ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + blb_handle : SYSTEM.ADDRESS; -- IN OUT blob_handle; + blob_id : OUT quad); + +PROCEDURE gds_create_blob2 ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + blb_handle : SYSTEM.ADDRESS; --IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : integer; + bpb : blr); + +PROCEDURE gds_create_database ( + user_status : OUT status_vector; + file_length : integer; + file_name : SYSTEM.ADDRESS; -- string; + db_handle : SYSTEM.ADDRESS; -- IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb; + db_type : integer); + +PROCEDURE gds_detach_database ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS); -- IN OUT database_handle); + +PROCEDURE gds_ddl ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + msg_length : integer; + msg : blr); + +PROCEDURE gds_decode_date ( + date : quad; -- quad; + times : SYSTEM.ADDRESS); -- IN OUT gds_tm); + +PROCEDURE gds_encode_date ( + times : SYSTEM.ADDRESS; -- gds_tm; + date : IN OUT quad); -- IN OUT quad); + +PROCEDURE gds_event_wait ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + length : integer; + events : SYSTEM.ADDRESS; -- string; + buffer : SYSTEM.ADDRESS); -- string; + +PROCEDURE gds_get_segment ( + user_status : OUT status_vector; + blb_handle : SYSTEM.ADDRESS; -- blob_handle; + actual_length : SYSTEM.ADDRESS; -- OUT integer; + buffer_length : integer; + buffer : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_get_slice ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + blob_id : quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : SYSTEM.ADDRESS; -- string; + slice_length : long_integer; + slice : SYSTEM.ADDRESS; -- string; + return_length : long_integer); -- OUT long_integer; + +PROCEDURE gds_open_blob ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + blb_handle : SYSTEM.ADDRESS; -- IN OUT blob_handle; + blob_id : quad); + +PROCEDURE gds_open_blob2 ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; --database_handle; + trans_handle : SYSTEM.ADDRESS; --transaction_handle; + blb_handle : SYSTEM.ADDRESS; --IN OUT blob_handle; + blob_id : quad; + bpb_length : integer; + bpb : blr); + +PROCEDURE gds_prepare_transaction ( + user_status : OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle); + +PROCEDURE gds_prepare_transaction2 ( + user_status : OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- IN OUT transaction_handle; + msg_length : integer; + msg : blr); -- blr; + +PROCEDURE gds_put_segment ( + user_status : OUT status_vector; + blb_handle : SYSTEM.ADDRESS; -- blob_handle; + length : integer; + buffer : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_put_slice ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + blob_id : IN OUT quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : SYSTEM.ADDRESS; -- string; + slice_length : long_integer; + slice : SYSTEM.ADDRESS); -- string; + +PROCEDURE gds_queue_events ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + id : quad; + length : integer; + events : SYSTEM.ADDRESS; -- string; + ast : long_integer; + arg : quad); -- quad; + +PROCEDURE gds_receive ( + user_status : OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE gds_rollback_transaction ( + user_status : OUT status_vector; + trans_handle : SYSTEM.ADDRESS); -- IN OUT transaction_handle); + +PROCEDURE gds_send ( + user_status : OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE gds_start_and_send ( + user_status : OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer); + +PROCEDURE gds_start_request ( + user_status : OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + level : integer); + +PROCEDURE gds_start_multiple ( + user_status : OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- IN OUT transaction_handle; + count : integer; + teb : SYSTEM.ADDRESS); + +PROCEDURE gds_start_transaction ( + user_status : OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- IN OUT transaction_handle; + count : integer; + db_handle : SYSTEM.ADDRESS; -- database_handle; + tpb_length : integer; + tpb_arg : tpb); + +PROCEDURE gds_unwind_request ( + user_status : OUT status_vector; + req_handle : SYSTEM.ADDRESS; -- request_handle; + level : integer); + +PROCEDURE gds_print_status ( + user_status : status_vector); + +PROCEDURE gds_version ( + db_handle : SYSTEM.ADDRESS; + ptr1 : long_integer; + ptr2 : SYSTEM.ADDRESS); + +FUNCTION gds_sqlcode ( + user_status : status_vector) RETURN long_integer; + +--- Dynamic SQL procedures + +PROCEDURE gds_close ( + user_status : OUT status_vector; + cursor_name : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_declare ( + user_status : OUT status_vector; + statement_name : SYSTEM.ADDRESS; -- string; + cursor_name : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_describe ( + user_status : OUT status_vector; + statement_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE gds_dsql_finish ( + db_handle : SYSTEM.ADDRESS); -- database_handle); + +PROCEDURE gds_execute ( + user_status : OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + statement_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE gds_execute_immediate ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + command_length : SYSTEM.ADDRESS; -- integer; + command : SYSTEM.ADDRESS); -- string); + +PROCEDURE gds_fetch ( + user_status : OUT status_vector; + sqlcode : SYSTEM.ADDRESS; -- OUT long_integer; + cursor_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE gds_open ( + user_status : OUT status_vector; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + cursor_name : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); + +PROCEDURE gds_prepare ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + statement_name : SYSTEM.ADDRESS; -- string; + command_length : SYSTEM.ADDRESS; -- integer; + command : SYSTEM.ADDRESS; -- string; + descriptor : SYSTEM.ADDRESS); + +--- PYXIS procedures + +PROCEDURE pyxis_compile_map ( + user_status : OUT status_vector; + frm_handle : SYSTEM.ADDRESS; -- form_handle; + mp_handle : SYSTEM.ADDRESS; -- OUT map_handle; + map_length : SYSTEM.ADDRESS; -- integer; + map : blr); + +PROCEDURE pyxis_compile_sub_map ( + user_status : OUT status_vector; + frm_handle : SYSTEM.ADDRESS; -- form_handle; + mp_handle : SYSTEM.ADDRESS; -- OUT map_handle; + map_length : SYSTEM.ADDRESS; -- integer; + map : blr); + +PROCEDURE pyxis_create_window ( + win_handle : SYSTEM.ADDRESS; -- OUT window_handle; + name_length : SYSTEM.ADDRESS; -- integer; + file_name : SYSTEM.ADDRESS; -- string; + width : SYSTEM.ADDRESS; -- IN OUT integer; + height : SYSTEM.ADDRESS); -- IN OUT integer); + +PROCEDURE pyxis_delete_window ( + win_handle : SYSTEM.ADDRESS); -- IN OUT window_handle); + +PROCEDURE pyxis_drive_form ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + win_handle : SYSTEM.ADDRESS; -- window_handle; + mp_handle : SYSTEM.ADDRESS; -- map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS); + +PROCEDURE pyxis_fetch ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + mp_handle : SYSTEM.ADDRESS; -- map_handle; + output : SYSTEM.ADDRESS); + +PROCEDURE pyxis_insert ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + mp_handle : SYSTEM.ADDRESS; -- map_handle; + input : SYSTEM.ADDRESS); + +PROCEDURE pyxis_load_form ( + user_status : OUT status_vector; + db_handle : SYSTEM.ADDRESS; -- database_handle; + trans_handle : SYSTEM.ADDRESS; -- transaction_handle; + frm_handle : SYSTEM.ADDRESS; -- IN OUT form_handle; + name_length : SYSTEM.ADDRESS; -- integer; + form_name : SYSTEM.ADDRESS); -- string); + +FUNCTION pyxis_menu ( + win_handle : SYSTEM.ADDRESS; -- window_handle; + men_handle : SYSTEM.ADDRESS; -- menu_handle; + menu_length : SYSTEM.ADDRESS; -- integer; + menu : blr) RETURN integer; + +PROCEDURE pyxis_pop_window ( + win_handle : SYSTEM.ADDRESS); -- window_handle); + +PROCEDURE pyxis_reset_form ( + user_status : OUT status_vector; + win_handle : SYSTEM.ADDRESS); -- window_handle); + +PROCEDURE pyxis_drive_menu ( + win_handle : SYSTEM.ADDRESS; -- IN OUT window_handle; + men_handle : SYSTEM.ADDRESS; -- IN OUT menu_handle; + blr_length : integer; + blr_source : blr; + title_length : integer; + title : SYSTEM.ADDRESS; -- string; + terminator : SYSTEM.ADDRESS; -- OUT integer; + entree_length : SYSTEM.ADDRESS; -- OUT integer; + entree_text : SYSTEM.ADDRESS; -- OUT string; + entree_value : SYSTEM.ADDRESS); -- OUT integer); + +PROCEDURE pyxis_get_entree ( + men_handle : menu_handle; + entree_length : SYSTEM.ADDRESS; -- OUT integer; + entree_text : SYSTEM.ADDRESS; -- OUT string; + entree_value : SYSTEM.ADDRESS; -- OUT long_integer; + entree_end : SYSTEM.ADDRESS); -- OUT integer); + +PROCEDURE pyxis_initialize_menu ( + men_handle : SYSTEM.ADDRESS); -- IN OUT menu_handle); + +PROCEDURE pyxis_put_entree ( + men_handle : menu_handle; + entree_length : integer; + entree_text : SYSTEM.ADDRESS; -- string; + entree_value : long_integer); + +pragma interface (C, gds_attach_database); +pragma linkname (gds_attach_database, "gds_$attach_database"); + +pragma interface (C, gds_blob_display); +pragma linkname (gds_blob_display, "blob_$display"); +pragma interface (C, gds_blob_dump); +pragma linkname (gds_blob_dump, "blob_$dump"); +pragma interface (C, gds_blob_edit); +pragma linkname (gds_blob_edit, "blob_$edit"); +pragma interface (C, gds_blob_load); +pragma linkname (gds_blob_load, "blob_$load"); + +pragma interface (C, gds_cancel_blob); +pragma linkname (gds_cancel_blob, "gds_$cancel_blob"); +pragma interface (C, gds_cancel_events); +pragma linkname (gds_cancel_events, "gds_$cancel_events"); +pragma interface (C, gds_close); +pragma linkname (gds_close, "gds_$close"); +pragma interface (C, gds_close_blob); +pragma linkname (gds_close_blob, "gds_$close_blob"); +pragma interface (C, gds_commit_retaining); +pragma linkname (gds_commit_retaining, "gds_$commit_retaining"); +pragma interface (C, gds_commit_transaction); +pragma linkname (gds_commit_transaction, "gds_$commit_transaction"); +pragma interface (C, gds_compile_request); +pragma linkname (gds_compile_request, "gds_$compile_request"); +pragma interface (C, gds_compile_request2); +pragma linkname (gds_compile_request2, "gds_$compile_request2"); +pragma interface (C, gds_create_blob); +pragma linkname (gds_create_blob, "gds_$create_blob"); +pragma interface (C, gds_create_blob2); +pragma linkname (gds_create_blob2, "gds_$create_blob2"); +pragma interface (C, gds_create_database); +pragma linkname (gds_create_database, "gds_$create_database"); + +pragma interface (C, gds_ddl); +pragma linkname (gds_ddl, "gds_$ddl"); +pragma interface (C, gds_declare); +pragma linkname (gds_declare, "gds_$declare"); +pragma interface (C, gds_decode_date); +pragma linkname (gds_decode_date, "gds_$decode_date"); +pragma interface (C, gds_describe); +pragma linkname (gds_describe, "gds_$describe"); +pragma interface (C, gds_detach_database); +pragma linkname (gds_detach_database, "gds_$detach_database"); +pragma interface (C, gds_dsql_finish); +pragma linkname (gds_dsql_finish, "gds_$dsql_finish"); + +pragma interface (C, gds_encode_date); +pragma linkname (gds_encode_date, "gds_$encode_date"); +pragma interface (C, gds_event_wait); +pragma linkname (gds_event_wait, "gds_$event_wait"); +pragma interface (C, gds_execute); +pragma linkname (gds_execute, "gds_$execute"); +pragma interface (C, gds_execute_immediate); +pragma linkname (gds_execute_immediate, "gds_$execute_immediate"); + +pragma interface (C, gds_fetch); +pragma linkname (gds_fetch, "gds_$fetch_a"); + +pragma interface (C, gds_get_segment); +pragma linkname (gds_get_segment, "gds_$get_segment"); +pragma interface (C, gds_get_slice); +pragma linkname (gds_get_slice, "gds_$get_slice"); + +pragma interface (C, gds_open); +pragma linkname (gds_open, "gds_$open"); +pragma interface (C, gds_open_blob); +pragma linkname (gds_open_blob, "gds_$open_blob"); +pragma interface (C, gds_open_blob2); +pragma linkname (gds_open_blob2, "gds_$open_blob2"); + +pragma interface (C, gds_prepare); +pragma linkname (gds_prepare, "gds_$prepare"); +pragma interface (C, gds_prepare_transaction); +pragma linkname (gds_prepare_transaction, "gds_$prepare_transaction"); +pragma interface (C, gds_prepare_transaction2); +pragma linkname (gds_prepare_transaction2, "gds_$prepare_transaction2"); +pragma interface (C, gds_print_status); +pragma linkname (gds_print_status, "gds_$print_status"); +pragma interface (C, gds_put_segment); +pragma linkname (gds_put_segment, "gds_$put_segment"); +pragma interface (C, gds_put_slice); +pragma linkname (gds_put_slice, "gds_$put_slice"); + +pragma interface (C, gds_queue_events); +pragma linkname (gds_queue_events, "gds_$que_events"); + +pragma interface (C, gds_receive); +pragma linkname (gds_receive, "gds_$receive"); +pragma interface (C, gds_rollback_transaction); +pragma linkname (gds_rollback_transaction, "gds_$rollback_transaction"); + +pragma interface (C, gds_send); +pragma linkname (gds_send, "gds_$send"); +pragma interface (C, gds_sqlcode); +pragma linkname (gds_sqlcode, "gds_$sqlcode"); +pragma interface (C, gds_start_and_send); +pragma linkname (gds_start_and_send, "gds_$start_and_send"); +pragma interface (C, gds_start_multiple); +pragma linkname (gds_start_multiple, "gds_$start_multiple"); +pragma interface (C, gds_start_request); +pragma linkname (gds_start_request, "gds_$start_request"); +pragma interface (C, gds_start_transaction); +pragma linkname (gds_start_transaction, "gds_$start_transaction"); + +pragma interface (C, gds_unwind_request); +pragma linkname (gds_unwind_request, "gds_$unwind_request"); + +pragma interface (C, gds_version); +pragma linkname (gds_version, "gds_$version"); + +pragma interface (C, pyxis_compile_map); +pragma linkname (pyxis_compile_map, "pyxis_$compile_map"); +pragma interface (C, pyxis_compile_sub_map); +pragma linkname (pyxis_compile_sub_map, "pyxis_$compile_sub_map"); +pragma interface (C, pyxis_create_window); +pragma linkname (pyxis_create_window, "pyxis_$create_window"); +pragma interface (C, pyxis_delete_window); +pragma linkname (pyxis_delete_window, "pyxis_$delete_window"); +pragma interface (C, pyxis_drive_form); +pragma linkname (pyxis_drive_form, "pyxis_$drive_form"); +pragma interface (C, pyxis_drive_menu); +pragma linkname (pyxis_drive_menu, "pyxis_$drive_menu"); +pragma interface (C, pyxis_fetch); +pragma linkname (pyxis_fetch, "pyxis_$fetch"); +pragma interface (C, pyxis_get_entree); +pragma linkname (pyxis_get_entree, "pyxis_$get_entree"); +pragma interface (C, pyxis_initialize_menu); +pragma linkname (pyxis_initialize_menu, "pyxis_$initialize_menu"); +pragma interface (C, pyxis_insert); +pragma linkname (pyxis_insert, "pyxis_$insert"); +pragma interface (C, pyxis_load_form); +pragma linkname (pyxis_load_form, "pyxis_$load_form"); +pragma interface (C, pyxis_menu); +pragma linkname (pyxis_menu, "pyxis_$menu"); +pragma interface (C, pyxis_pop_window); +pragma linkname (pyxis_pop_window, "pyxis_$pop_window"); +pragma interface (C, pyxis_put_entree); +pragma linkname (pyxis_put_entree, "pyxis_$put_entree"); +pragma interface (C, pyxis_reset_form); +pragma linkname (pyxis_reset_form, "pyxis_$reset_form"); + + +--- +--- Interface routines that return status vector +--- + +PROCEDURE attach_database ( + user_status : OUT status_vector; + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb) IS + BEGIN + gds_attach_database ( + user_status, + file_length, + file_name'address, + db_handle'address, + dpb_length, + dpb_arg); + END attach_database; + +PROCEDURE blob_display ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + field_name : string; + name_length : integer) IS + BEGIN + gds_blob_display ( + blob_id, + db_handle'address, + tra_handle'address, + field_name'address, + name_length'address); + END blob_display; + + +PROCEDURE blob_dump ( + blob_id : quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : integer) IS + BEGIN + gds_blob_dump ( + blob_id, + db_handle'address, + tra_handle'address, + file_name'address, + name_length'address); + END blob_dump; + + +PROCEDURE blob_edit ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : integer) IS + BEGIN + gds_blob_edit ( + blob_id, + db_handle'address, + tra_handle'address, + file_name'address, + name_length'address); + END blob_edit; + + +PROCEDURE blob_load ( + blob_id : IN OUT quad; + db_handle : database_handle; + tra_handle : transaction_handle; + file_name : string; + name_length : integer) IS + BEGIN + gds_blob_load ( + blob_id, + db_handle'address, + tra_handle'address, + file_name'address, + name_length'address); + END blob_load; + + +PROCEDURE cancel_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_cancel_blob ( + user_status, + blb_handle'address); + END cancel_blob; + +PROCEDURE cancel_events ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_cancel_events ( + user_status, + blb_handle'address); + END cancel_events; + +PROCEDURE close_blob ( + user_status : OUT status_vector; + blb_handle : IN OUT blob_handle) IS + BEGIN + gds_close_blob ( + user_status, + blb_handle'address); + END close_blob; + +PROCEDURE commit_retaining ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_commit_retaining ( + user_status, + trans_handle'address); + END commit_retaining; + +PROCEDURE commit_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_commit_transaction ( + user_status, + trans_handle'address); + END commit_transaction; + + +PROCEDURE compile_request ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr) IS + BEGIN + gds_compile_request ( + user_status, + db_handle'address, + req_handle'address, + blr_length, + blr_arg); + END compile_request; + + +PROCEDURE compile_request2 ( + user_status : OUT status_vector; + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr) IS + BEGIN + gds_compile_request2 ( + user_status, + db_handle'address, + req_handle'address, + blr_length, + blr_arg); + END compile_request2; + + +PROCEDURE create_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad) IS + BEGIN + gds_create_blob ( + user_status, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id); + END create_blob; + +PROCEDURE create_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : integer; + bpb : blr) IS + BEGIN + gds_create_blob2 ( + user_status, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id, + bpb_length, + bpb); + END create_blob2; + +PROCEDURE create_database ( + user_status : OUT status_vector; + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb; + db_type : integer) IS + BEGIN + gds_create_database ( + user_status, + file_length, + file_name'address, + db_handle'address, + dpb_length, + dpb_arg, + db_type); + END create_database; + +PROCEDURE ddl ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : integer; + msg : blr) IS + BEGIN + gds_ddl ( + user_status, + db_handle'address, + trans_handle'address, + msg_length, + msg); + END ddl; + +PROCEDURE decode_date ( + date : quad; + times : IN OUT gds_tm) IS + BEGIN + gds_decode_date ( + date, + times'address); + END decode_date; + + +PROCEDURE detach_database ( + user_status : OUT status_vector; + db_handle : IN OUT database_handle) IS + BEGIN + gds_detach_database ( + user_status, + db_handle'address); + END detach_database; + +PROCEDURE encode_date ( + times : gds_tm; + date : IN OUT quad) IS + BEGIN + gds_encode_date ( + times'address, + date); + END encode_date; + + +PROCEDURE event_wait ( + user_status : OUT status_vector; + db_handle : database_handle; + length : integer; + events : string; + buffer : string) IS + BEGIN + gds_event_wait ( + user_status, + db_handle'address, + length, + events'address, + buffer'address); + END event_wait; + +PROCEDURE get_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + actual_length : OUT integer; + buffer_length : integer; + buffer : string) IS + BEGIN + gds_get_segment ( + user_status, + blb_handle'address, + actual_length'address, + buffer_length, + buffer'address); + END get_segment; + +PROCEDURE get_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : string; + return_length : long_integer) IS + BEGIN + gds_get_slice ( + user_status, + db_handle'address, + trans_handle'address, + blob_id, + sdl_length, + sdl, + param_length, + param'address, + slice_length, + slice'address, + return_length); + END get_slice; + +PROCEDURE open_blob ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad) IS + BEGIN + gds_open_blob ( + user_status, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id); + END open_blob; + +PROCEDURE open_blob2 ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : integer; + bpb : blr) IS + BEGIN + gds_open_blob2 ( + user_status, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id, + bpb_length, + bpb); + END open_blob2; + +PROCEDURE prepare_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_prepare_transaction ( + user_status, + trans_handle'address); + END prepare_transaction; + +PROCEDURE prepare_transaction2 ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + msg_length : integer; + msg : blr) IS + BEGIN + gds_prepare_transaction2 ( + user_status, + trans_handle'address, + msg_length, + msg); + END prepare_transaction2; + +PROCEDURE put_segment ( + user_status : OUT status_vector; + blb_handle : blob_handle; + length : integer; + buffer : string) IS + BEGIN + gds_put_segment ( + user_status, + blb_handle'address, + length, + buffer'address); + END put_segment; + +PROCEDURE put_slice ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : string) IS + BEGIN + gds_put_slice ( + user_status, + db_handle'address, + trans_handle'address, + blob_id, + sdl_length, + sdl, + param_length, + param'address, + slice_length, + slice'address); + END put_slice; + +PROCEDURE queue_events ( + user_status : OUT status_vector; + db_handle : database_handle; + id : quad; + length : integer; + events : string; + ast : long_integer; + arg : quad) IS + BEGIN + gds_queue_events ( + user_status, + db_handle'address, + id, + length, + events'address, + ast, + arg); + END queue_events; + +PROCEDURE receive ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + BEGIN + gds_receive ( + user_status, + req_handle'address, + msg_type, + msg_length, + msg, + level); + END receive; + +PROCEDURE rollback_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle) IS + BEGIN + gds_rollback_transaction ( + user_status, + trans_handle'address); + END rollback_transaction; + + +PROCEDURE send ( + user_status : OUT status_vector; + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + BEGIN + gds_send ( + user_status, + req_handle'address, + msg_type, + msg_length, + msg, + level); + END send; + +PROCEDURE start_request ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + level : integer) IS + BEGIN + gds_start_request ( + user_status, + req_handle'address, + trans_handle'address, + level); + END start_request; + + +PROCEDURE start_and_send ( + user_status : OUT status_vector; + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + BEGIN + gds_start_and_send ( + user_status, + req_handle'address, + trans_handle'address, + msg_type, + msg_length, + msg, + level); + END start_and_send; + +PROCEDURE start_multiple ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : integer; + teb : SYSTEM.ADDRESS) IS + BEGIN + gds_start_multiple ( + user_status, + trans_handle'address, + count, + teb); + END start_multiple; + + +PROCEDURE start_transaction ( + user_status : OUT status_vector; + trans_handle : IN OUT transaction_handle; + count : integer; + db_handle : database_handle; + tpb_length : integer; + tpb_arg : tpb) IS + BEGIN + gds_start_transaction ( + user_status, + trans_handle'address, + count, + db_handle'address, + tpb_length, + tpb_arg); + END start_transaction; + + +PROCEDURE unwind_request ( + user_status : OUT status_vector; + req_handle : request_handle; + level : integer) IS + BEGIN + gds_unwind_request ( + user_status, + req_handle'address, + level); + END unwind_request; + +PROCEDURE print_status ( + user_status : status_vector) IS + BEGIN + gds_print_status (user_status); + end print_status; + +PROCEDURE print_version ( + db_handle: database_handle) IS + + ptr : long_integer := 0; + BEGIN + gds_version ( + db_handle'address, + 0, + ptr'address); + END print_version; + +FUNCTION sqlcode ( + user_status : status_vector) RETURN long_integer IS + BEGIN + return gds_sqlcode (user_status); + end sqlcode; + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + user_status : OUT status_vector; + cursor_name : string) IS + BEGIN + gds_close ( + user_status, + cursor_name'address); + END dsql_close; + +PROCEDURE dsql_declare ( + user_status : OUT status_vector; + statement_name : string; + cursor_name : string) IS + BEGIN + gds_declare ( + user_status, + statement_name'address, + cursor_name'address); + END dsql_declare; + +PROCEDURE dsql_describe ( + user_status : OUT status_vector; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_describe ( + user_status, + statement_name'address, + descriptor); + END dsql_describe; + +PROCEDURE dsql_finish ( + db_handle : database_handle) IS + BEGIN + gds_dsql_finish ( + db_handle'address); + END dsql_finish; + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_execute ( + user_status, + trans_handle'address, + statement_name'address, + descriptor); + END dsql_execute; + +PROCEDURE dsql_execute ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + statement_name : string) IS + BEGIN + gds_execute ( + user_status, + trans_handle'address, + statement_name'address, + null_blob'address); + END dsql_execute; + +PROCEDURE dsql_execute_immediate ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : integer; + command : string) IS + BEGIN + gds_execute_immediate ( + user_status, + db_handle'address, + trans_handle'address, + command_length'address, + command'address); + END dsql_execute_immediate; + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT long_integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_fetch ( + user_status, + sqlcode'address, + cursor_name'address, + descriptor); + END dsql_fetch; + +PROCEDURE dsql_fetch ( + user_status : OUT status_vector; + sqlcode : OUT long_integer; + cursor_name : string) IS + BEGIN + gds_fetch ( + user_status, + sqlcode'address, + cursor_name'address, + null_blob'address); + END dsql_fetch; + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_open ( + user_status, + trans_handle'address, + cursor_name'address, + descriptor); + END dsql_open; + +PROCEDURE dsql_open ( + user_status : OUT status_vector; + trans_handle : transaction_handle; + cursor_name : string) IS + BEGIN + gds_open ( + user_status, + trans_handle'address, + cursor_name'address, + null_blob'address); + END dsql_open; + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string; + descriptor : SYSTEM.ADDRESS) IS + BEGIN + gds_prepare ( + user_status, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + descriptor); + END dsql_prepare; + +PROCEDURE dsql_prepare ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string) IS + BEGIN + gds_prepare ( + user_status, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + null_blob'address); + END dsql_prepare; + +--- PYXIS procedures + +PROCEDURE compile_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr) IS + BEGIN + pyxis_compile_map ( + user_status, + frm_handle'address, + mp_handle'address, + map_length'address, + map); + END compile_map; + +PROCEDURE compile_sub_map ( + user_status : OUT status_vector; + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr) IS + BEGIN + pyxis_compile_sub_map ( + user_status, + frm_handle'address, + mp_handle'address, + map_length'address, + map); + END compile_sub_map; + +PROCEDURE create_window ( + win_handle : OUT window_handle; + name_length : integer; + file_name : string; + width : IN OUT integer; + height : IN OUT integer) IS + BEGIN + pyxis_create_window ( + win_handle'address, + name_length'address, + file_name'address, + width'address, + height'address); + END create_window; + +PROCEDURE delete_window ( + win_handle : IN OUT window_handle) IS + BEGIN + pyxis_delete_window ( + win_handle'address); + END delete_window; + +PROCEDURE drive_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS) IS + BEGIN + pyxis_drive_form ( + user_status, + db_handle'address, + trans_handle'address, + win_handle'address, + mp_handle'address, + input, + output); + END drive_form; + +PROCEDURE fetch_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS) IS + BEGIN + pyxis_fetch ( + user_status, + db_handle'address, + trans_handle'address, + mp_handle'address, + output); + END fetch_sub_form; + +PROCEDURE insert_sub_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS) IS + BEGIN + pyxis_insert ( + user_status, + db_handle'address, + trans_handle'address, + mp_handle'address, + input); + END insert_sub_form; + +PROCEDURE load_form ( + user_status : OUT status_vector; + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : integer; + form_name : string) IS + BEGIN + pyxis_load_form ( + user_status, + db_handle'address, + trans_handle'address, + frm_handle'address, + name_length'address, + form_name'address); + END load_form; + +FUNCTION menu ( + win_handle : window_handle; + men_handle : menu_handle; + menu_length : integer; + menu : blr) RETURN integer IS + BEGIN + return pyxis_menu ( + win_handle'address, + men_handle'address, + menu_length'address, + menu); + END menu; + +PROCEDURE pop_window ( + win_handle : window_handle) IS + BEGIN + pyxis_pop_window ( + win_handle'address); + END pop_window; + +PROCEDURE reset_form ( + user_status : OUT status_vector; + win_handle : window_handle) IS + BEGIN + pyxis_reset_form ( + user_status, + win_handle'address); + END reset_form; + +PROCEDURE drive_menu ( + win_handle : IN OUT window_handle; + men_handle : IN OUT menu_handle; + blr_length : integer; + blr_source : blr; + title_length : integer; + title : string; + terminator : OUT integer; + entree_length : OUT integer; + entree_text : OUT string; + entree_value : OUT long_integer) IS + BEGIN + pyxis_drive_menu ( + win_handle'address, + men_handle'address, + blr_length, + blr_source, + title_length, + title'address, + terminator'address, + entree_length'address, + entree_text'address, + entree_value'address); + END drive_menu; + +PROCEDURE get_entree ( + men_handle : menu_handle; + entree_length : OUT integer; + entree_text : OUT string; + entree_value : OUT long_integer; + entree_end : OUT integer) IS + BEGIN + pyxis_get_entree ( + men_handle, + entree_length'address, + entree_text'address, + entree_value'address, + entree_end'address); + END get_entree; + +PROCEDURE initialize_menu ( + men_handle : IN OUT menu_handle) IS + BEGIN + pyxis_initialize_menu ( + men_handle'address); + END initialize_menu; + +PROCEDURE put_entree ( + men_handle : menu_handle; + entree_length : integer; + entree_text : string; + entree_value : long_integer) IS + BEGIN + pyxis_put_entree ( + men_handle, + entree_length, + entree_text'address, + entree_value); + END put_entree; + +--- +--- Internal routines +--- + +PROCEDURE error ( + user_status : status_vector) IS + BEGIN + gds_print_status (user_status); + RAISE database_error; + END; + +--- +--- Routines sans explicit status vector +--- + +PROCEDURE attach_database ( + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb) IS + + user_status : status_vector; + BEGIN + gds_attach_database ( + user_status, + file_length, + file_name'address, + db_handle'address, + dpb_length, + dpb_arg); + if user_status (1) /= 0 then error (user_status); end if; + END attach_database; + +PROCEDURE cancel_blob ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_cancel_blob ( + user_status, + blb_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END cancel_blob; + +PROCEDURE cancel_events ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_cancel_events ( + user_status, + blb_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END cancel_events; + +PROCEDURE close_blob ( + blb_handle : IN OUT blob_handle) IS + + user_status : status_vector; + BEGIN + gds_close_blob ( + user_status, + blb_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END close_blob; + +PROCEDURE commit_retaining ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_commit_retaining ( + user_status, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END commit_retaining; + +PROCEDURE commit_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_commit_transaction ( + user_status, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END commit_transaction; + + +PROCEDURE compile_request ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr) IS + + user_status : status_vector; + BEGIN + gds_compile_request ( + user_status, + db_handle'address, + req_handle'address, + blr_length, + blr_arg); + if user_status (1) /= 0 then error (user_status); end if; + END compile_request; + + +PROCEDURE compile_request2 ( + db_handle : database_handle; + req_handle : IN OUT request_handle; + blr_length : integer; + blr_arg : blr) IS + + user_status : status_vector; + BEGIN + gds_compile_request2 ( + user_status, + db_handle'address, + req_handle'address, + blr_length, + blr_arg); + if user_status (1) /= 0 then error (user_status); end if; + END compile_request2; + + +PROCEDURE create_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad) IS + + user_status : status_vector; + BEGIN + gds_create_blob ( + user_status, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id); + if user_status (1) /= 0 then error (user_status); end if; + END create_blob; + +PROCEDURE create_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : OUT quad; + bpb_length : integer; + bpb : blr) IS + + user_status : status_vector; + BEGIN + gds_create_blob2 ( + user_status, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id, + bpb_length, + bpb); + if user_status (1) /= 0 then error (user_status); end if; + END create_blob2; + +PROCEDURE create_database ( + file_length : integer; + file_name : string; + db_handle : IN OUT database_handle; + dpb_length : integer; + dpb_arg : dpb; + db_type : integer) IS + + user_status : status_vector; + BEGIN + gds_create_database ( + user_status, + file_length, + file_name'address, + db_handle'address, + dpb_length, + dpb_arg, + db_type); + if user_status (1) /= 0 then error (user_status); end if; + END create_database; + +PROCEDURE ddl ( + db_handle : database_handle; + trans_handle : transaction_handle; + msg_length : integer; + msg : blr) IS + + user_status : status_vector; + BEGIN + gds_ddl ( + user_status, + db_handle'address, + trans_handle'address, + msg_length, + msg); + if user_status (1) /= 0 then error (user_status); end if; + END ddl; + +PROCEDURE detach_database ( + db_handle : IN OUT database_handle) IS + + user_status : status_vector; + BEGIN + gds_detach_database ( + user_status, + db_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END detach_database; + + +PROCEDURE event_wait ( + db_handle : database_handle; + length : integer; + events : string; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_event_wait ( + user_status, + db_handle'address, + length, + events'address, + buffer'address); + END event_wait; + +PROCEDURE get_segment ( + completion_code : OUT long_integer; + blb_handle : blob_handle; + actual_length : OUT integer; + buffer_length : integer; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_get_segment ( + user_status, + blb_handle'address, + actual_length'address, + buffer_length, + buffer'address); + if user_status (1) /= 0 and user_status (1) /= gds_segment and + user_status (1) /= gds_segstr_eof then + error (user_status); + end if; + completion_code := user_status(1); + END get_segment; + + +PROCEDURE get_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : string; + return_length : long_integer) IS + + user_status : status_vector; + BEGIN + gds_get_slice ( + user_status, + db_handle'address, + trans_handle'address, + blob_id, + sdl_length, + sdl, + param_length, + param'address, + slice_length, + slice'address, + return_length); + END get_slice; + + +PROCEDURE open_blob ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad) IS + + user_status : status_vector; + BEGIN + gds_open_blob ( + user_status, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id); + if user_status (1) /= 0 then error (user_status); end if; + END open_blob; + +PROCEDURE open_blob2 ( + db_handle : database_handle; + trans_handle : transaction_handle; + blb_handle : IN OUT blob_handle; + blob_id : quad; + bpb_length : integer; + bpb : blr) IS + + user_status : status_vector; + BEGIN + gds_open_blob2 ( + user_status, + db_handle'address, + trans_handle'address, + blb_handle'address, + blob_id, + bpb_length, + bpb); + if user_status (1) /= 0 then error (user_status); end if; + END open_blob2; + +PROCEDURE prepare_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_prepare_transaction ( + user_status, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END prepare_transaction; + + +PROCEDURE prepare_transaction2 ( + trans_handle : IN OUT transaction_handle; + msg_length : integer; + msg : blr) IS + + user_status : status_vector; + BEGIN + gds_prepare_transaction2 ( + user_status, + trans_handle'address, + msg_length, + msg); + END prepare_transaction2; + +PROCEDURE put_segment ( + blb_handle : blob_handle; + length : integer; + buffer : string) IS + + user_status : status_vector; + BEGIN + gds_put_segment ( + user_status, + blb_handle'address, + length, + buffer'address); + if user_status (1) /= 0 then error (user_status); end if; + END put_segment; + +PROCEDURE put_slice ( + db_handle : database_handle; + trans_handle : transaction_handle; + blob_id : IN OUT quad; + sdl_length : integer; + sdl : blr; + param_length : integer; + param : string; + slice_length : long_integer; + slice : string) IS + + user_status : status_vector; + BEGIN + gds_put_slice ( + user_status, + db_handle'address, + trans_handle'address, + blob_id, + sdl_length, + sdl, + param_length, + param'address, + slice_length, + slice'address); + END put_slice; + +PROCEDURE queue_events ( + db_handle : database_handle; + id : quad; + length : integer; + events : string; + ast : long_integer; + arg : quad) IS + + user_status : status_vector; + BEGIN + gds_queue_events ( + user_status, + db_handle'address, + id, + length, + events'address, + ast, + arg); + END queue_events; + +PROCEDURE receive ( + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + + user_status : status_vector; + BEGIN + gds_receive ( + user_status, + req_handle'address, + msg_type, + msg_length, + msg, + level); + if user_status (1) /= 0 then error (user_status); end if; + END receive; + +PROCEDURE rollback_transaction ( + trans_handle : IN OUT transaction_handle) IS + + user_status : status_vector; + BEGIN + gds_rollback_transaction ( + user_status, + trans_handle'address); + if user_status (1) /= 0 then error (user_status); end if; + END rollback_transaction; + + +PROCEDURE send ( + req_handle : request_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + + user_status : status_vector; + BEGIN + gds_send ( + user_status, + req_handle'address, + msg_type, + msg_length, + msg, + level); + if user_status (1) /= 0 then error (user_status); end if; + END send; + +PROCEDURE start_request ( + req_handle : request_handle; + trans_handle : transaction_handle; + level : integer) IS + + user_status : status_vector; + BEGIN + gds_start_request ( + user_status, + req_handle'address, + trans_handle'address, + level); + if user_status (1) /= 0 then error (user_status); end if; + END start_request; + + +PROCEDURE start_and_send ( + req_handle : request_handle; + trans_handle : transaction_handle; + msg_type : integer; + msg_length : integer; + msg : SYSTEM.ADDRESS; + level : integer) IS + + user_status : status_vector; + BEGIN + gds_start_and_send ( + user_status, + req_handle'address, + trans_handle'address, + msg_type, + msg_length, + msg, + level); + if user_status (1) /= 0 then error (user_status); end if; + END start_and_send; + +PROCEDURE start_multiple ( + trans_handle : IN OUT transaction_handle; + count : integer; + teb : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_start_multiple ( + user_status, + trans_handle'address, + count, + teb); + if user_status (1) /= 0 then error (user_status); end if; + END start_multiple; + + +PROCEDURE start_transaction ( + trans_handle : IN OUT transaction_handle; + count : integer; + db_handle : database_handle; + tpb_length : integer; + tpb_arg : tpb) IS + + user_status : status_vector; + BEGIN + gds_start_transaction ( + user_status, + trans_handle'address, + count, + db_handle'address, + tpb_length, + tpb_arg); + if user_status (1) /= 0 then error (user_status); end if; + END start_transaction; + + +PROCEDURE unwind_request ( + req_handle : request_handle; + level : integer) IS + + user_status : status_vector; + BEGIN + gds_unwind_request ( + user_status, + req_handle'address, + level); + if user_status (1) /= 0 then error (user_status); end if; + END unwind_request; + +--- Dynamic SQL procedures + +PROCEDURE dsql_close ( + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_close ( + user_status, + cursor_name'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_close; + +PROCEDURE dsql_declare ( + statement_name : string; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_declare ( + user_status, + statement_name'address, + cursor_name'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_declare; + +PROCEDURE dsql_describe ( + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_describe ( + user_status, + statement_name'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_describe; + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_execute ( + user_status, + trans_handle'address, + statement_name'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute; + +PROCEDURE dsql_execute ( + trans_handle : transaction_handle; + statement_name : string) IS + + user_status : status_vector; + BEGIN + gds_execute ( + user_status, + trans_handle'address, + statement_name'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute; + +PROCEDURE dsql_execute_immediate ( + db_handle : database_handle; + trans_handle : transaction_handle; + command_length : integer; + command : string) IS + + user_status : status_vector; + BEGIN + gds_execute_immediate ( + user_status, + db_handle'address, + trans_handle'address, + command_length'address, + command'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_execute_immediate; + +PROCEDURE dsql_fetch ( + sqlcode : OUT long_integer; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_fetch ( + user_status, + sqlcode'address, + cursor_name'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_fetch; + +PROCEDURE dsql_fetch ( + sqlcode : OUT long_integer; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_fetch ( + user_status, + sqlcode'address, + cursor_name'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_fetch; + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_open ( + user_status, + trans_handle'address, + cursor_name'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_open; + +PROCEDURE dsql_open ( + trans_handle : transaction_handle; + cursor_name : string) IS + + user_status : status_vector; + BEGIN + gds_open ( + user_status, + trans_handle'address, + cursor_name'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_open; + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string; + descriptor : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + gds_prepare ( + user_status, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + descriptor); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_prepare; + +PROCEDURE dsql_prepare ( + db_handle : database_handle; + trans_handle : transaction_handle; + statement_name : string; + command_length : integer; + command : string) IS + + user_status : status_vector; + BEGIN + gds_prepare ( + user_status, + db_handle'address, + trans_handle'address, + statement_name'address, + command_length'address, + command'address, + null_blob'address); + if user_status (1) /= 0 then error (user_status); end if; + END dsql_prepare; + +--- PYXIS procedures + +PROCEDURE compile_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr) IS + + user_status : status_vector; + BEGIN + pyxis_compile_map ( + user_status, + frm_handle'address, + mp_handle'address, + map_length'address, + map); +--- if user_status (1) /= 0 then error (user_status); end if; + END compile_map; + +PROCEDURE compile_sub_map ( + frm_handle : form_handle; + mp_handle : OUT map_handle; + map_length : integer; + map : blr) IS + + user_status : status_vector; + BEGIN + pyxis_compile_sub_map ( + user_status, + frm_handle'address, + mp_handle'address, + map_length'address, + map); +--- if user_status (1) /= 0 then error (user_status); end if; + END compile_sub_map; + +PROCEDURE drive_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + win_handle : window_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS; + output : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_drive_form ( + user_status, + db_handle'address, + trans_handle'address, + win_handle'address, + mp_handle'address, + input, + output); +--- if user_status (1) /= 0 then error (user_status); end if; + END drive_form; + +PROCEDURE fetch_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + output : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_fetch ( + user_status, + db_handle'address, + trans_handle'address, + mp_handle'address, + output); +--- if user_status (1) /= 0 then error (user_status); end if; + END fetch_sub_form; + +PROCEDURE insert_sub_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + mp_handle : map_handle; + input : SYSTEM.ADDRESS) IS + + user_status : status_vector; + BEGIN + pyxis_insert ( + user_status, + db_handle'address, + trans_handle'address, + mp_handle'address, + input); +--- if user_status (1) /= 0 then error (user_status); end if; + END insert_sub_form; + +PROCEDURE load_form ( + db_handle : database_handle; + trans_handle : transaction_handle; + frm_handle : IN OUT form_handle; + name_length : integer; + form_name : string) IS + + user_status : status_vector; + BEGIN + pyxis_load_form ( + user_status, + db_handle'address, + trans_handle'address, + frm_handle'address, + name_length'address, + form_name'address); + if user_status (1) /= 0 then error (user_status); end if; + END load_form; + +PROCEDURE reset_form ( + win_handle : window_handle) IS + + user_status : status_vector; + BEGIN + pyxis_reset_form ( + user_status, + win_handle'address); +--- if user_status (1) /= 0 then error (user_status); end if; + END reset_form; + + +END interbase;'); +INSERT INTO TEMPLATES (LANGUAGE, "FILE", TEMPLATE) VALUES ('PLI', 'gds.pli', +'/* + * PROGRAM: PLI preprocessor + * MODULE: gds.pli + * DESCRIPTION: BLR constants + * + * copyright (c) 1984, 1990 by Interbase Software Corporation + */ + +%REPLACE GDS_$TRUE BY 1; +%REPLACE GDS_$FALSE BY 0; + +$ FORMAT BLR_FORMAT "%%REPLACE %-32s BY %d;\n +$ FORMAT DYN_FORMAT "%%REPLACE %-32s BY %d;\n +$ FORMAT SDL_FORMAT "%%REPLACE %-32s BY %d;\n +$ FORMAT ERROR_FORMAT "%%REPLACE %-32s BY %d;\n +$ FORMAT PB_FORMAT "%%REPLACE %-32s BY %d;\n +$ FORMAT PYXIS_FORMAT "%%REPLACE %-32s BY %d;\n +$ FORMAT OPT_FORMAT "%%REPLACE %-32s BY %d;\n +$ FORMAT SQL_FORMAT "%%REPLACE %-32s BY %%d;\n + +$ SYMBOLS BLR DTYPE BLR_FORMAT +$ SYMBOLS BLR MECH SIGNED BLR_FORMAT + +$ SYMBOLS BLR STATEMENTS BLR_FORMAT +$ SYMBOLS BLR VALUES BLR_FORMAT + +$ SYMBOLS BLR BOOLEANS BLR_FORMAT + +$ SYMBOLS BLR RSE BLR_FORMAT + +$ SYMBOLS BLR JOIN BLR_FORMAT + +$ SYMBOLS BLR AGGREGATE BLR_FORMAT +$ SYMBOLS BLR NEW BLR_FORMAT + +/* Array slice description language (SDL) */ + +$ SYMBOLS SDL SDL SDL_FORMAT + +%REPLACE dsc$k_dtype_t BY 14; +%REPLACE dsc$k_dtype_vt BY 37; +%REPLACE dsc$k_dtype_w BY 7; +%REPLACE dsc$k_dtype_l BY 8; +%REPLACE dsc$k_dtype_q BY 9; +%REPLACE dsc$k_dtype_f BY 10; +%REPLACE dsc$k_dtype_g BY 27; +%REPLACE dsc$k_dtype_adt BY 35; + +%REPLACE rdb$k_dpb_cdd_pathname BY 1; +%REPLACE rdb$k_dpb_allocation BY 2; +%REPLACE rdb$k_dpb_aij BY 3; +%REPLACE rdb$k_dpb_page_size BY 4; +%REPLACE rdb$k_dpb_num_buff BY 5; +%REPLACE rdb$k_dpb_buffer_length BY 6; +%REPLACE rdb$k_dpb_debug BY 7; +%REPLACE rdb$k_dpb_garbage_collect BY 8; +%REPLACE rdb$k_dpb_verify BY 9; +%REPLACE rdb$k_dpb_sweep BY 10; +%REPLACE rdb$k_dpb_enable_journal BY 11; +%REPLACE rdb$k_dpb_disable_journal BY 12; +%REPLACE rdb$k_dpb_dbkey_scope BY 13; +%REPLACE rdb$k_dpb_number_of_users BY 14; + +%REPLACE rdb$k_db_type_default BY 0; +%REPLACE rdb$k_db_type_vms BY 1; +%REPLACE rdb$k_db_type_eln BY 2; +%REPLACE rdb$k_db_type_gds BY -1; + +/* Database parameter block stuff */ + +$ SYMBOLS DPB ITEMS PB_FORMAT + +$ SYMBOLS DPB BITS PB_FORMAT + +/* Bit assignments in RDB$SYSTEM_FLAG */ + +$ SYMBOLS RDB FLAG PB_FORMAT + +/* Transaction parameter blob stuff */ + +$ SYMBOLS TPB ITEMS PB_FORMAT + +/* Blob parameter block stuff */ + +$ SYMBOLS BPB ITEMS PB_FORMAT + +/* Information call declarations */ + +/* Common, structural codes */ + +$ SYMBOLS INFO MECH PB_FORMAT + +/* Database information items */ + +$ SYMBOLS INFO DB PB_FORMAT + +/* Request information items */ + +$ SYMBOLS INFO REQUEST PB_FORMAT + +/* Blob information items */ + +$ SYMBOLS INFO BLOB PB_FORMAT + +/* Transaction information items */ + +$ SYMBOLS INFO TRANSACTION PB_FORMAT + +/* Error codes */ + +$ SYMBOLS ERROR MECH ERROR_FORMAT + +$ ERROR MAJOR ERROR_FORMAT + +/* Minor codes subject to change */ + +$ ERROR MINOR ERROR_FORMAT + +DECLARE GDS_$SQLCODE ENTRY( + (20) FIXED) /* status vector */ + RETURNS (FIXED); + +DECLARE GDS_$ATTACH_DATABASE ENTRY( + ANY VALUE, /* status vector */ + FIXED BINARY (15) VALUE, /* file name length */ + ANY, /* file name */ + ANY, /* database handle */ + FIXED BINARY (15) VALUE, /* dpb length */ + ANY VALUE); /* dpb */ + +DECLARE GDS_$CANCEL_BLOB ENTRY( + ANY VALUE, /* status vector */ + ANY); /* blob handle */ + +DECLARE GDS_$CANCEL_EVENTS ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY); /* id */ + +DECLARE GDS_$CLOSE_BLOB ENTRY( + ANY VALUE, /* status vector */ + ANY); /* blob handle */ + +DECLARE GDS_$COMMIT_RETAINING ENTRY( + ANY VALUE, /* status vector */ + ANY); /* transaction handle */ + +DECLARE GDS_$COMMIT_TRANSACTION ENTRY( + ANY VALUE, /* status vector */ + ANY); /* transaction handle */ + +DECLARE GDS_$COMPILE_REQUEST ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* request handle */ + FIXED BINARY (15) VALUE, /* blr length */ + ANY); /* blr */ + +DECLARE GDS_$COMPILE_REQUEST2 ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* request handle */ + FIXED BINARY (15) VALUE, /* blr length */ + ANY); /* blr */ + +DECLARE GDS_$CREATE_BLOB ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* blob handle */ + (2) FIXED); /* blob id */ + +DECLARE GDS_$CREATE_BLOB2 ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* blob handle */ + (2) FIXED, /* blob id */ + FIXED BINARY (15) VALUE, /* blob parameter block length */ + ANY); /* blob parameter block */ + +DECLARE GDS_$CREATE_DATABASE ENTRY( + ANY VALUE, /* status vector */ + FIXED BINARY (15) VALUE, /* file name length */ + ANY, /* file name */ + ANY, /* database handle */ + FIXED BINARY (15) VALUE, /* dpb length */ + ANY VALUE, /* dpb */ + FIXED BINARY (15) VALUE); /* database type */ + +DECLARE GDS_$DDL ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + FIXED BINARY (15) VALUE, /* mblr length */ + ANY); /* mblr */ + +DECLARE GDS_$DETACH_DATABASE ENTRY( + ANY VALUE, /* status vector */ + ANY); /* database handle */ + +DECLARE GDS_$DROP_DATABASE ENTRY( + ANY VALUE, /* status vector */ + FIXED BINARY (15) VALUE, /* file name length */ + ANY, /* file name */ + FIXED BINARY (15) VALUE); /* database type */ + +DECLARE GDS_$EVENT_WAIT ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* length */ + ANY, /* events */ + ANY); /* buffer */ + +DECLARE GDS_$GET_SEGMENT ENTRY( + ANY VALUE, /* status vector */ + ANY, /* blob handle */ + ANY, /* segment length */ + FIXED BINARY (15) VALUE, /* buffer length */ + ANY) /* buffer */ + RETURNS (FIXED); + +DECLARE GDS_$GET_SLICE ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* array (blob) id */ + FIXED BINARY (15), /* sdl length */ + ANY, /* sdl */ + FIXED BINARY (15), /* parameter length */ + ANY, /* parameter */ + FIXED BINARY (31), /* slice length */ + ANY, /* slice */ + FIXED BINARY (31)); /* return length */ + +DECLARE GDS_$OPEN_BLOB ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* blob handle */ + (2) FIXED); /* blob id */ + +DECLARE GDS_$OPEN_BLOB2 ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* blob handle */ + (2) FIXED, /* blob id */ + FIXED BINARY (15), /* blob parameter block length */ + ANY); /* blob parameter block */ + +DECLARE GDS_$PREPARE_TRANSACTION ENTRY( + ANY VALUE, /* status vector */ + ANY); /* transaction handle */ + +DECLARE GDS_$PREPARE_TRANSACTION2 ENTRY( + ANY VALUE, /* status vector */ + ANY, /* transaction handle */ + FIXED BINARY (15), + ANY); + +DECLARE GDS_$PUT_SEGMENT ENTRY( + ANY VALUE, /* status vector */ + ANY, /* blob handle */ + FIXED BINARY (15) VALUE, /* buffer length */ + ANY) /* buffer */ + RETURNS (FIXED); + +DECLARE GDS_$PUT_SLICE ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* array (blob) id */ + FIXED BINARY (15), /* sdl length */ + ANY, /* sdl */ + FIXED BINARY (15), /* parameter length */ + ANY, /* parameter */ + FIXED BINARY (31), /* slice length */ + ANY); /* slice */ + +DECLARE GDS_$QUE_EVENTS ENTRY( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* id */ + ANY, /* length */ + ANY, /* events */ + ANY, /* ast */ + ANY); /* arg */ + +DECLARE GDS_$RECEIVE ENTRY( + ANY VALUE, /* status vector */ + ANY, /* request handle */ + FIXED BINARY (15) VALUE, /* message type */ + FIXED BINARY (15) VALUE, /* message length */ + PTR VALUE, /* message */ + FIXED BINARY (15) VALUE); /* instantiation */ + +DECLARE GDS_$RELEASE_REQUEST ENTRY( + ANY VALUE, /* status vector */ + ANY); /* request handle */ + +DECLARE GDS_$ROLLBACK_TRANSACTION ENTRY( + ANY VALUE, /* status vector */ + ANY); /* transaction handle */ + +DECLARE GDS_$SEND ENTRY( + ANY VALUE, /* status vector */ + ANY, /* request handle */ + FIXED BINARY (15) VALUE, /* message type */ + FIXED BINARY (15) VALUE, /* message length */ + ANY, /* message */ + FIXED BINARY (15) VALUE); /* instantiation */ + +DECLARE GDS_$SET_DEBUG ENTRY( + FIXED BINARY (15) VALUE); + +DECLARE GDS_$START_AND_SEND ENTRY( + ANY VALUE, /* status vector */ + ANY, /* request handle */ + ANY, /* transaction handle */ + FIXED BINARY (15) VALUE, /* message type */ + FIXED BINARY (15) VALUE, /* message length */ + ANY, /* message */ + FIXED BINARY (15) VALUE); /* instantiation */ + +DECLARE GDS_$START_REQUEST ENTRY( + ANY VALUE, /* status vector */ + ANY, /* request handle */ + ANY, /* transaction handle */ + FIXED BINARY (15) VALUE); /* instantiation */ + +DECLARE GDS_$START_MULTIPLE ENTRY( + ANY VALUE, /* status vector */ + ANY, /* transaction handle */ + FIXED BINARY (15) VALUE, /* transaction count */ + ANY); /* teb */ + +DECLARE GDS_$START_TRANSACTION ENTRY( + ANY VALUE, /* status vector */ + ANY, /* transaction handle */ + FIXED BINARY (15) VALUE, /* transaction count */ + ANY VALUE, /* database handle */ + FIXED BINARY (15) VALUE, /* tpb length */ + ANY VALUE) /* tpb */ + OPTIONS (VARIABLE); + +DECLARE GDS_$STATUS_AND_STOP ENTRY( + ANY VALUE); /* status vector */ + +DECLARE GDS_$UNWIND_REQUEST ENTRY( + ANY VALUE, /* status vector */ + ANY, /* request handle */ + FIXED BINARY (15) VALUE); /* instantiation */ + +DECLARE gds_$print_status ENTRY( + (20) FIXED); /* status vector */ + + +DECLARE gds_$encode_date ENTRY( + ANY, /* time record */ + (2) FIXED); /* date */ + +DECLARE gds_$decode_date ENTRY( + (2) FIXED, /* date */ + ANY); /* time record */ + + +DECLARE blob_$display ENTRY ( + (2) FIXED, /* blob_id*/ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* field name */ + ANY); /* name_length */ + +DECLARE blob_$dump ENTRY ( + (2) FIXED, /* blob_id*/ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* file name */ + ANY); /* name_length */ + +DECLARE blob_$edit ENTRY ( + (2) FIXED, /* blob_id*/ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* field name */ + ANY); /* name_length */ + +DECLARE blob_$load ENTRY ( + (2) FIXED, /* blob_id*/ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* file name */ + ANY); /* name_length */ + +/* Dynamic SQL datatypes */ + +%REPLACE SQL_TEXT BY 452; +%REPLACE SQL_VARYING BY 448; +%REPLACE SQL_SHORT BY 500; +%REPLACE SQL_LONG BY 496; +%REPLACE SQL_FLOAT BY 482; +%REPLACE SQL_DOUBLE BY 480; +%REPLACE SQL_DATE BY 510; +%REPLACE SQL_BLOB BY 520; + +/* Dynamic SQL DECLAREs */ + +DECLARE gds_$close ENTRY ( + ANY VALUE, /* status vector */ + ANY /* cursor_name */ + ); + +DECLARE gds_$declare ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* statement_name */ + ANY /* cursor_name */ + ); + +DECLARE gds_$describe ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* statement_name */ + ANY /* descriptor */ + ); + +DECLARE gds_$dsql_finish ENTRY ( + ANY /* db_handle */ + ); + +DECLARE gds_$execute ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* trans_handle */ + ANY, /* statement_name */ + ANY /* descriptor */ + ); + +DECLARE gds_$execute_immediate ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* db_handle */ + ANY, /* trans_handle */ + ANY, /* string_length */ + ANY /* string */ + ); + +DECLARE gds_$fetch ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* cursor_name */ + ANY /* descriptor */ + ) RETURNS (FIXED); + +DECLARE gds_$open ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* trans_handle */ + ANY, /* cursor_name */ + ANY /* descriptor */ + ); + +DECLARE gds_$prepare ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* db_handle */ + ANY, /* trans_handle */ + ANY, /* statement_name */ + ANY, /* string_length */ + ANY, /* string */ + ANY /* descriptor */ + ); + +/* Forms Package definitions */ + +/* Map definition block definitions */ + +$ SYMBOLS PYXIS MAP PYXIS_FORMAT + +/* Field option flags for display options */ + +$ SYMBOLS PYXIS DISPLAY OPT_FORMAT + +/* Field option values following display */ + +$ SYMBOLS PYXIS VALUE OPT_FORMAT + +/* Pseudo key definitions */ + +$ SYMBOLS PYXIS KEY OPT_FORMAT + +/* Menu definition stuff */ + +$ SYMBOLS PYXIS MENU PYXIS_FORMAT + +DECLARE pyxis_$compile_map ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* form handle */ + ANY, /* map handle */ + FIXED BINARY (15), /* length */ + ANY /* map handle */ + ); + +DECLARE pyxis_$compile_sub_map ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* form handle */ + ANY, /* map handle */ + FIXED BINARY (15), /* length */ + ANY /* map */ + ); + +DECLARE pyxis_$create_window ENTRY ( + ANY, /* window handle */ + FIXED BINARY (15), /* length */ + ANY, /* file_name */ + FIXED BINARY (15), /* width */ + FIXED BINARY (15) /* height */ + ); + +DECLARE pyxis_$delete_window ENTRY ( + ANY /* window handle */ + ); + +DECLARE pyxis_$drive_form ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* window handle */ + ANY, /* map handle */ + ANY, /* input */ + ANY /* output */ + ); + +DECLARE pyxis_$fetch ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* map handle */ + ANY /* output */ + ); + +DECLARE pyxis_$insert ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* map handle */ + ANY /* intput */ + ); + +DECLARE pyxis_$load_form ENTRY ( + ANY VALUE, /* status vector */ + ANY, /* database handle */ + ANY, /* transaction handle */ + ANY, /* form handle */ + ANY, /* map handle */ + ANY /* form_name */ + ); + +DECLARE pyxis_$menu ENTRY ( + ANY, /* window handle */ + ANY, /* menu handle */ + FIXED BINARY (15), /* length */ + ANY /* menu */ + ) RETURNS (FIXED BINARY (15)); + +DECLARE pyxis_$pop_window ENTRY ( + ANY /* window handle */ + ); + +DECLARE pyxis_$reset_form ENTRY ( + ANY VALUE, /* status vector */ + ANY /* window handle */ + ); + +DECLARE pyxis_$drive_menu ENTRY ( + ANY, /* window_handle */ + ANY, /* menu_handle */ + FIXED BINARY (15), /* blr_length */ + ANY, /* blr_source */ + FIXED BINARY (15), /* title_length */ + ANY, /* title */ + FIXED BINARY (15), /* terminator */ + FIXED BINARY (15), /* entree_length */ + ANY, /* entree_text */ + ANY /* entree_value */ + ); + +DECLARE pyxis_$get_entree ENTRY ( + ANY, /* menu_handle */ + FIXED BINARY (15), /* entree_length */ + ANY, /* entree_text */ + ANY, /* entree_value */ + FIXED BINARY (15) /* entree_end */ + ); + +DECLARE pyxis_$initialize_menu ENTRY ( + ANY /* menu_handle */ + ); + +DECLARE pyxis_$put_entree ENTRY ( + ANY, /* menu_handle */ + FIXED BINARY (15), /* entree_length */ + ANY, /* entree_text */ + ANY /* entree_value */ + ); +'); +INSERT INTO TEMPLATES (LANGUAGE, "FILE", TEMPLATE) VALUES ('BASIC', 'gds.bas', +' + !* + !* PROGRAM: BASIC preprocessor + !* MODULE: gds.bas + !* DESCRIPTION: BLR constants + !* + !* copyright (c) 1984, 1990 by Interbase Software Corporation + !* + +! Error codes + +$ FORMAT ERROR_FORMAT " DECLARE LONG CONSTANT %-32s= %d\n +$ FORMAT PB_FORMAT " DECLARE BYTE CONSTANT %-32s= %d\n +$ FORMAT OPT_FORMAT " DECLARE WORD CONSTANT %-32s= %d\n +$ SYMBOLS ERROR MECH ERROR_FORMAT + +$ ERROR MAJOR ERROR_FORMAT + +! Minor codes subject to change + +$ ERROR MINOR ERROR_FORMAT + +! Database parameter block stuff + +$ SYMBOLS DPB ITEMS PB_FORMAT + +$ SYMBOLS DPB BITS PB_FORMAT + +! Bit assignments in RDB$SYSTEM_FLAG + +$ SYMBOLS RDB FLAG PB_FORMAT + +! Transaction parameter blob stuff + +$ SYMBOLS TPB ITEMS PB_FORMAT + +! Blob Parameter Block + +$ SYMBOLS BPB ITEMS PB_FORMAT + +! Information call declarations + +! Common, structural codes + +$ SYMBOLS INFO MECH PB_FORMAT + +! Database information items + +$ SYMBOLS INFO DB PB_FORMAT + +! Request information items + +$ SYMBOLS INFO REQUEST PB_FORMAT + +! Blob information items + +$ SYMBOLS INFO BLOB PB_FORMAT + +! Transaction information items + +$ SYMBOLS INFO TRANSACTION PB_FORMAT + +! Dynamic SQL datatypes + +$ SYMBOLS SQL DTYPE OPT_FORMAT + +! Forms Package definitions + +! Map definition block definitions + +$ SYMBOLS PYXIS MAP PB_FORMAT + +! Field option flags for display options + +$ SYMBOLS PYXIS DISPLAY OPT_FORMAT + +! Field option values following display + +$ SYMBOLS PYXIS VALUE OPT_FORMAT + +! Pseudo key definitions + +$ SYMBOLS PYXIS KEY OPT_FORMAT + +! Menu definition stuff + +$ SYMBOLS PYXIS MENU PB_FORMAT + + EXTERNAL LONG FUNCTION GDS_$SQLCODE BY REF + EXTERNAL SUB GDS_$ATTACH_DATABASE BY REF + EXTERNAL SUB GDS_$CANCEL_BLOB BY REF + EXTERNAL SUB GDS_$CANCEL_EVENTS BY REF + EXTERNAL SUB GDS_$CLOSE_BLOB BY REF + EXTERNAL SUB GDS_$COMMIT_RETAINING BY REF + EXTERNAL SUB GDS_$COMMIT_TRANSACTION BY REF + EXTERNAL SUB GDS_$COMPILE_REQUEST BY REF + EXTERNAL SUB GDS_$CREATE_BLOB BY REF + EXTERNAL SUB GDS_$CREATE_BLOB2 BY REF + EXTERNAL SUB GDS_$CREATE_DATABASE BY REF + EXTERNAL SUB GDS_$DETACH_DATABASE BY REF + EXTERNAL SUB GDS_EVENT_WAIT BY REF + EXTERNAL LONG FUNCTION GDS_$GET_SEGMENT BY REF + EXTERNAL SUB GDS_$OPEN_BLOB BY REF + EXTERNAL SUB GDS_$OPEN_BLOB2 BY REF + EXTERNAL SUB GDS_$PREPARE_TRANSACTION BY REF + EXTERNAL SUB GDS_$PREPARE_TRANSACTION2 BY REF + EXTERNAL LONG FUNCTION GDS_$PUT_SEGMENT BY REF + EXTERNAL SUB GDS_$QUE_EVENTS BY REF + EXTERNAL SUB GDS_$RECEIVE BY REF + EXTERNAL SUB GDS_$RELEASE_REQUEST BY REF + EXTERNAL SUB GDS_$ROLLBACK_TRANSACTION BY REF + EXTERNAL SUB GDS_$SEND BY REF + EXTERNAL SUB gds_$set_debug BY REF + EXTERNAL SUB GDS_$START_AND_SEND BY REF + EXTERNAL SUB GDS_$START_REQUEST BY REF + EXTERNAL SUB GDS_$START_MULTIPLE BY REF + EXTERNAL SUB GDS_$START_TRANSACTION BY REF + EXTERNAL SUB GDS_$UNWIND_REQUEST BY REF + EXTERNAL SUB gds_$print_status BY REF + EXTERNAL SUB gds_$encode_date BY REF + EXTERNAL SUB gds_$decode_date BY REF + EXTERNAL SUB blob_$display BY REF + EXTERNAL SUB blob_$dump BY REF + EXTERNAL SUB blob_$edit BY REF + EXTERNAL SUB blob_$load BY REF + EXTERNAL SUB gds_$close BY REF + EXTERNAL SUB gds_$declare BY REF + EXTERNAL SUB gds_$describe BY REF + EXTERNAL SUB gds_$dsql_finish BY REF + EXTERNAL SUB gds_$execute BY REF + EXTERNAL SUB gds_$execute_immediate BY REF + EXTERNAL LONG FUNCTION gds_$fetch BY REF + EXTERNAL SUB gds_$open BY REF + EXTERNAL SUB gds_$prepare BY REF + EXTERNAL SUB gds_$event_counts BY REF + EXTERNAL SUB gds_$event_block BY REF + EXTERNAL SUB gds_$get_slice BY REF + EXTERNAL SUB gds_$put_slice BY REF + EXTERNAL SUB gds_$seek_blob BY REF + EXTERNAL SUB gds_$ddl BY REF + EXTERNAL SUB pyxis_$compile_map BY REF + EXTERNAL SUB pyxis_$compile_sub_map BY REF + EXTERNAL SUB pyxis_$create_window BY REF + EXTERNAL SUB pyxis_$delete_window BY REF + EXTERNAL SUB pyxis_$drive_form BY REF + EXTERNAL SUB pyxis_$fetch BY REF + EXTERNAL SUB pyxis_$insert BY REF + EXTERNAL SUB pyxis_$load_form BY REF + EXTERNAL WORD FUNCTION pyxis_$menu BY REF + EXTERNAL SUB pyxis_$pop_window BY REF + EXTERNAL SUB pyxis_$reset_form BY REF + EXTERNAL SUB pyxis_$drive_menu BY REF + EXTERNAL SUB pyxis_$initialize_menu BY REF + EXTERNAL SUB pyxis_$get_entree BY REF + EXTERNAL SUB pyxis_$put_entree BY REF +'); + +COMMIT WORK;