int UNIX_ONLY(main)VMS_ONLY(dbcertify)(int argc, char **argv) { DCL_THREADGBL_ACCESS; /* Initialization of scaffolding we run on */ GTM_THREADGBL_INIT; gtm_imagetype_init(DBCERTIFY_IMAGE); gtm_env_init(); gtm_utf8_mode = FALSE; /* Only ever runs in V4 database so NO utf8 mode -- ever */ psa_gbl = malloc(SIZEOF(*psa_gbl)); memset(psa_gbl, 0, SIZEOF(*psa_gbl)); UNIX_ONLY(err_init(dbcertify_base_ch)); UNIX_ONLY(sig_init(dbcertify_signal_handler, dbcertify_signal_handler, NULL)); VMS_ONLY(util_out_open(0)); VMS_ONLY(SET_EXIT_HANDLER(exi_blk, dbcertify_exit_handler, exi_condition)); /* Establish exit handler */ VMS_ONLY(ESTABLISH(dbcertify_base_ch)); process_id = getpid(); /* Structure checks .. */ assert((24 * 1024) == SIZEOF(v15_sgmnt_data)); /* Verify V4 file header hasn't suddenly increased for some odd reason */ /* Platform dependent method to get the option scan going and invoke necessary driver routine */ dbcertify_parse_and_dispatch(argc, argv); return SS_NORMAL; }
int main(int argc, char *argv[]) { DCL_THREADGBL_ACCESS; GTM_THREADGBL_INIT; set_blocksig(); gtm_imagetype_init(DSE_IMAGE); gtm_wcswidth_fnptr = gtm_wcswidth; gtm_env_init(); /* read in all environment variables */ licensed = TRUE; TREF(transform) = TRUE; op_open_ptr = op_open; patch_curr_blk = get_dir_root(); err_init(util_base_ch); GTM_ICU_INIT_IF_NEEDED; /* Note: should be invoked after err_init (since it may error out) and before CLI parsing */ sig_init(generic_signal_handler, dse_ctrlc_handler, suspsigs_handler); atexit(util_exit_handler); SET_LATCH_GLOBAL(&defer_latch, LOCK_AVAILABLE); get_page_size(); stp_init(STP_INITSIZE); rts_stringpool = stringpool; getjobname(); INVOKE_INIT_SECSHR_ADDRS; getzdir(); prealloc_gt_timers(); initialize_pattern_table(); gvinit(); region_init(FALSE); INIT_GBL_ROOT(); /* Needed for GVT initialization */ getjobnum(); util_out_print("!/File !_!AD", TRUE, DB_LEN_STR(gv_cur_region)); util_out_print("Region!_!AD!/", TRUE, REG_LEN_STR(gv_cur_region)); cli_lex_setup(argc, argv); CREATE_DUMMY_GBLDIR(gd_header, original_header, gv_cur_region, gd_map, gd_map_top); gtm_chk_dist(argv[0]); # ifdef DEBUG if ((gtm_white_box_test_case_enabled && (WBTEST_SEMTOOLONG_STACK_TRACE == gtm_white_box_test_case_number) )) { sgmnt_addrs * csa; node_local_ptr_t cnl; csa = &FILE_INFO(gv_cur_region)->s_addrs; cnl = csa->nl; cnl->wbox_test_seq_num = 1; /*Signal the first step and wait here*/ while (2 != cnl->wbox_test_seq_num) /*Wait for another process to get hold of the semaphore and signal next step*/ LONG_SLEEP(10); } # endif if (argc < 2) display_prompt(); io_init(TRUE); while (1) { if (!dse_process(argc)) break; display_prompt(); } dse_exit(); REVERT; }
int gtm_init() { rhdtyp *base_addr; unsigned char *transfer_addr; error_def(ERR_CITPNESTED); error_def(ERR_CIMAXLEVELS); if (!gtm_startup_active) { /* call-in invoked from C as base. GT.M hasn't been started up yet. */ image_type = GTM_IMAGE; gtm_env_init(); /* read in all environment variables */ err_init(stop_image_conditional_core); cli_lex_setup(0, NULL); /* Initialize msp to the maximum so if errors occur during GT.M startup below, * the unwind logic in gtmci_ch() will get rid of the whole stack. */ msp = (unsigned char*)-1; } ESTABLISH_RET(gtmci_ch, mumps_status); if (!gtm_startup_active) { /* GT.M is not active yet. Create GT.M startup environment */ invocation_mode = MUMPS_CALLIN; init_gtm(); gtm_savetraps(); /* nullify default $ZTRAP handling */ assert(gtm_startup_active); assert(frame_pointer->flags & SFF_CI); nested_level = 1; } else if (!(frame_pointer->flags & SFF_CI)) { /* Nested call-in: setup a new CI environment (SFF_CI frame on top of base-frame) */ /* Mark the beginning of the new stack so that initialization errors in * call-in frame do not unwind entries of the previous stack (see gtmci_ch).*/ fgncal_stack = msp; /* Report if condition handlers stack may overrun during this callin level. * Every underlying level can not have more than 2 active condition handlers, * plus extra MAX_HANDLERS are reserved for this level. */ if (chnd_end - ctxt <= MAX_HANDLERS) rts_error(VARLSTCNT(3) ERR_CIMAXLEVELS, 1, nested_level); /* Disallow call-ins within a TP boundary since TP restarts are not supported * currently across nested call-ins. When we implement TP restarts across call-ins, * this error needs be changed to a Warning or Notification */ if (0 < dollar_tlevel) rts_error(VARLSTCNT(1) ERR_CITPNESTED); base_addr = make_cimode(); transfer_addr = PTEXT_ADR(base_addr); gtm_init_env(base_addr, transfer_addr); SET_CI_ENV(ci_ret_code_exit); gtmci_isv_save(); nested_level++; } /* Now that GT.M is initialized. Mark the new stack pointer (msp) so that errors * while executing an M routine do not unwind stack below this mark. It important that * the call-in frames (SFF_CI), that hold nesting information (eg. $ECODE/$STACK data * of the previous stack), are kept from being unwound. */ fgncal_stack = msp; REVERT; return 0; }
int main (int argc, char **argv) { int res; DCL_THREADGBL_ACCESS; GTM_THREADGBL_INIT; set_blocksig(); gtm_imagetype_init(MUPIP_IMAGE); invocation_mode = MUMPS_UTILTRIGR; gtm_wcswidth_fnptr = gtm_wcswidth; gtm_env_init(); /* read in all environment variables */ err_init(util_base_ch); UNICODE_ONLY(gtm_strToTitle_ptr = >m_strToTitle); GTM_ICU_INIT_IF_NEEDED; /* Note: should be invoked after err_init (since it may error out) and before CLI parsing */ sig_init(generic_signal_handler, NULL, suspsigs_handler, continue_handler); /* Note: no ^C handler is defined (yet) */ atexit(mupip_exit_handler); licensed = TRUE; in_backup = FALSE; op_open_ptr = mu_op_open; mu_get_term_characterstics(); cli_lex_setup(argc,argv); if (argc < 2) /* Interactive mode */ display_prompt(); /* this call should be after cli_lex_setup() due to S390 A/E conversion */ gtm_chk_dist(argv[0]); INIT_GBL_ROOT(); /* Needed for GVT initialization */ init_gtm(); while (TRUE) { func = 0; if ((res = parse_cmd()) == EOF) break; else if (res) { if (1 < argc) rts_error(VARLSTCNT(4) res, 2, LEN_AND_STR(cli_err_str)); else gtm_putmsg(VARLSTCNT(4) res, 2, LEN_AND_STR(cli_err_str)); } if (func) func(); if (argc > 1) /* Non-interactive mode, exit after command */ break; display_prompt(); } mupip_exit(SS_NORMAL); }
void lke(void) { char buff[MAX_LINE]; $DESCRIPTOR (command, buff); uint4 status; short len; bool dcl; DCL_THREADGBL_ACCESS; GTM_THREADGBL_INIT; gtm_imagetype_init(LKE_IMAGE); gtm_env_init(); /* read in all environment variables */ util_out_open(0); SET_EXIT_HANDLER(exi_blk, generic_exit_handler, exi_condition); /* Establish exit handler */ ESTABLISH(util_base_ch); status =lp_id(&lkid); if (SS$_NORMAL != status) rts_error(VARLSTCNT(1) status); get_page_size(); stp_init(STP_INITSIZE); rts_stringpool = stringpool; getjobname(); INVOKE_INIT_SECSHR_ADDRS; ast_init(); initialize_pattern_table(); gvinit(); region_init(TRUE); getjobnum(); status = lib$get_foreign(&command, 0, &len, 0); if ((status & 1) && len > 0) { command.dsc$w_length = len; status = CLI$DCL_PARSE(&command, &lke_cmd, &lib$get_input, 0, 0); if (CLI$_NORMAL == status) { util_out_open(&output_qualifier); CLI$DISPATCH(); util_out_close(); } lke_exit(); } for (;;) lke_process(); }
int main (int argc, char *argv[]) { DCL_THREADGBL_ACCESS; GTM_THREADGBL_INIT; set_blocksig(); gtm_imagetype_init(LKE_IMAGE); gtm_wcswidth_fnptr = gtm_wcswidth; gtm_env_init(); /* read in all environment variables */ licensed = TRUE; err_init(util_base_ch); GTM_ICU_INIT_IF_NEEDED; /* Note: should be invoked after err_init (since it may error out) and before CLI parsing */ sig_init(generic_signal_handler, lke_ctrlc_handler, suspsigs_handler); atexit(util_exit_handler); SET_LATCH_GLOBAL(&defer_latch, LOCK_AVAILABLE); get_page_size(); stp_init(STP_INITSIZE); rts_stringpool = stringpool; getjobname(); INVOKE_INIT_SECSHR_ADDRS; getzdir(); prealloc_gt_timers(); initialize_pattern_table(); gvinit(); region_init(TRUE); getjobnum(); cli_lex_setup(argc, argv); /* this should be after cli_lex_setup() due to S390 A/E conversion */ gtm_chk_dist(argv[0]); while (1) { if (!lke_process(argc) || 2 <= argc) break; } lke_exit(); }
cce() { $DESCRIPTOR(prompt,"CCE> "); int status; char buff[512]; $DESCRIPTOR(command,buff); unsigned short outlen; mstr lnm$group = {9, "LNM$GROUP"}; int CCE_CMD(), CLI$DCL_PARSE(), CLI$DISPATCH(); DCL_THREADGBL_ACCESS; GTM_THREADGBL_INIT; /* This is the first C routine in the cce so do init here */ gtm_env_init(); /* read in all environment variables before any function call (particularly malloc) */ getjobnum(); get_page_size(); dfntmpmbx (lnm$group.len, lnm$group.addr); status = lib$get_foreign(&command,0,&outlen,0); if ((status & 1) && outlen > 0) { command.dsc$w_length = outlen; status = CLI$DCL_PARSE(&command ,&CCE_CMD, &lib$get_input, 0, 0); if (status == CLI$_NORMAL) CLI$DISPATCH(); } else { while (!cce_done) { status = CLI$DCL_PARSE(0 ,&CCE_CMD, &lib$get_input , &lib$get_input, &prompt); if (status == RMS$_EOF) cce_done = TRUE; else if (status == CLI$_NORMAL) { ret_status = 1; CLI$DISPATCH(); } } } return ret_status; }
mupip() { unsigned int status; int4 inid = 0; int4 nid = 0; /* system ID, node number */ int4 days = 128; /* days to expiration */ int4 lic_x = 0; /* license value */ char *h = NULL; /* license data base */ char *pak = NULL; /* pak record */ int4 mdl = 0; /* hardw. model type */ $DESCRIPTOR(dprd, gtm_product); $DESCRIPTOR(dver, gtm_version); DCL_THREADGBL_ACCESS; GTM_THREADGBL_INIT; gtm_imagetype_init(MUPIP_IMAGE); gtm_env_init(); /* read in all environment variables */ licensed = TRUE; TREF(transform) = TRUE; in_backup = FALSE; util_out_open(0); SET_EXIT_HANDLER(exi_blk, generic_exit_handler, exi_condition); /* Establish exit handler */ ESTABLISH(util_base_ch); get_page_size(); getjobnum(); INVOKE_INIT_SECSHR_ADDRS; # ifdef NOLICENSE status = SS$_NORMAL; lid = 1; lic_x = 32767; # else if (NULL == (h = la_getdb(LMDB))) /* license db in mem */ status = LP_NOCNFDB; else status = SS$_NORMAL; if (1 == (status & 1)) /* licensing: node+ system */ status = lm_mdl_nid(&mdl, &nid, &inid); if (1 == (status & 1)) /* licensing: license */ { dprd.dsc$w_length = gtm_product_len; dver.dsc$w_length = gtm_version_len; status = lp_licensed(h, &dprd, &dver, mdl, nid, &lid, &lic_x, &days, pak); } # endif if (1 == (status & 1)) /* licensing: license units */ status = LP_ACQUIRE(pak, lic_x, lid, &lkid); /* def in cryptdef */ # ifdef NOLICENSE status = SS$_NORMAL; # else if (LP_NOCNFDB != status) la_freedb(h); if (1 == (status & 1)) /* licensing */ { if (days < 14) lm_putmsgu(ERR_WILLEXPIRE, 0, 0); } else { licensed = FALSE; if (LP_INVCSM != status) rts_error(VARLSTCNT(1) status); } # endif ast_init(); initialize_pattern_table(); INIT_GBL_ROOT(); stp_init(STP_INITSIZE); rts_stringpool = stringpool; mupip_getcmd(); mupip_exit(SS$_NORMAL); }
gtcm_server() { static readonly int4 reptim[2] = {-100000, -1}; /* 10ms */ static readonly int4 wait[2] = {-1000000, -1}; /* 100ms */ void gtcm_ch(), gtcm_exi_handler(), gtcm_init_ast(), gtcm_int_unpack(), gtcm_mbxread_ast(), gtcm_neterr(), gtcm_read_ast(), gtcm_remove_from_action_queue(), gtcm_shutdown_ast(), gtcm_write_ast(), la_freedb(); bool gtcm_link_accept(); bool alid; char buff[512]; char *h = NULL; char *la_getdb(); char nbuff[256]; char *pak = NULL; char reply; unsigned short outlen; int4 closewait[2] = {0, -1}; int4 inid = 0, mdl = 0, nid = 0, days = 0; int4 lic_status; int4 lic_x; int4 lm_mdl_nid(); uint4 status; int i, receive(), value; mstr name1, name2; struct NTD *cmu_ntdroot(); connection_struct *prev_curr_entry; struct dsc$descriptor_s dprd; struct dsc$descriptor_s dver; $DESCRIPTOR(node_name, nbuff); $DESCRIPTOR(proc_name, "GTCM_SERVER"); $DESCRIPTOR(timout, buff); DCL_THREADGBL_ACCESS; GTM_THREADGBL_INIT; assert(0 == EMPTY_QUEUE); /* check so dont need gdsfhead everywhere */ common_startup_init(GTCM_GNP_SERVER_IMAGE); /* Side-effect: Sets skip_dbtriggers to TRUE for non-trigger platforms */ gtm_env_init(); /* read in all environment variables */ name1.addr = "GTCMSVRNAM"; name1.len = SIZEOF("GTCMSVRNAM") - 1; status = trans_log_name(&name1, &name2, nbuff); if (SS$_NORMAL == status) { proc_name.dsc$a_pointer = nbuff; proc_name.dsc$w_length = node_name.dsc$w_length = name2.len; } else if (SS$_NOLOGNAM == status) { MEMCPY_LIT(nbuff, "GTCMSVR"); node_name.dsc$w_length = SIZEOF("GTCMSVR") - 1; } else rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) status); sys$setprn(&proc_name); status = lib$get_foreign(&timout, 0, &outlen, 0); if ((status & 1) && (6 > outlen)) { for (i = 0; i < outlen; i++) { value = value * 10; if (buff[i] <= '9' && buff[i] >= '0') value += buff[i] - 48; else break; } if (outlen && (i == outlen)) { cm_timeout = TRUE; closewait[0] = value * -10000000; } } dprd.dsc$w_length = cm_prd_len; dprd.dsc$b_dtype = DSC$K_DTYPE_T; dprd.dsc$b_class = DSC$K_CLASS_S; dprd.dsc$a_pointer= cm_prd_name; dver.dsc$w_length = cm_ver_len; dver.dsc$b_dtype = DSC$K_DTYPE_T; dver.dsc$b_class = DSC$K_CLASS_S; dver.dsc$a_pointer= cm_ver_name; ast_init(); licensed = TRUE; lkid = 2; # ifdef NOLICENSE lid = 1; # else /* this code used to be scattered to discourage reverse engineering, but since it now disabled, that seems pointless */ lic_status = ((NULL == (h = la_getdb(LMDB))) ? LP_NOCNFDB : SS$_NORMAL); lic_status = ((1 == (lic_status & 1)) ? lm_mdl_nid(&mdl, &nid, &inid) : lic_status); lic_status = ((1 == (lic_status & 1)) ? lp_licensed(h, &dprd, &dver, mdl, nid, &lid, &lic_x, &days, pak) : lic_status); if (LP_NOCNFDB != lic_status) la_freedb(h); if (1 == (lic_status & 1)) { licensed = TRUE; if (days < 14) rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ERR_WILLEXPIRE); } else { licensed = FALSE; sys$exit(lic_status); } # endif gtcm_ast_avail = astq_dyn_avail - GTCM_AST_OVRHD; stp_init(STP_INITSIZE); rts_stringpool = stringpool; cache_init(); procnum = 0; get_proc_info(0, TADR(login_time), &image_count); memset(proc_to_clb, 0, SIZEOF(proc_to_clb)); status = cmi_init(&node_name, 0, 0, gtcm_init_ast, gtcm_link_accept); if (!(status & 1)) { rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) ((status ^ 3) | 4)); sys$exit(status); } ntd_root = cmu_ntdroot(); ntd_root->mbx_ast = gtcm_mbxread_ast; ntd_root->err = gtcm_neterr; gtcm_connection = FALSE; lib$establish(gtcm_ch); gtcm_exi_blk.exit_hand = >cm_exi_handler; gtcm_exi_blk.arg_cnt = 1; gtcm_exi_blk.cond_val = >cm_exi_condition; sys$dclexh(>cm_exi_blk); INVOKE_INIT_SECSHR_ADDRS; initialize_pattern_table(); assert(run_time); /* Should have been set by common_startup_init */ while (!cm_shutdown) { if (blkdlist) gtcml_chkreg(); assert(!lib$ast_in_prog()); status = sys$dclast(>cm_remove_from_action_queue, 0, 0); if (SS$_NORMAL != status) rts_error_csa(CSA_ARG(NULL) VARLSTCNT(4) CMERR_CMSYSSRV, 0, status, 0); if (INTERLOCK_FAIL == curr_entry) rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) CMERR_CMINTQUE); if (EMPTY_QUEUE != curr_entry) { switch (*curr_entry->clb_ptr->mbf) { case CMMS_L_LKCANALL: reply = gtcmtr_lkcanall(); break; case CMMS_L_LKCANCEL: reply = gtcmtr_lkcancel(); break; case CMMS_L_LKREQIMMED: reply = gtcmtr_lkreqimmed(); break; case CMMS_L_LKREQNODE: reply = gtcmtr_lkreqnode(); break; case CMMS_L_LKREQUEST: reply = gtcmtr_lkrequest(); break; case CMMS_L_LKRESUME: reply = gtcmtr_lkresume(); break; case CMMS_L_LKACQUIRE: reply = gtcmtr_lkacquire(); break; case CMMS_L_LKSUSPEND: reply = gtcmtr_lksuspend(); break; case CMMS_L_LKDELETE: reply = gtcmtr_lkdelete(); break; case CMMS_Q_DATA: reply = gtcmtr_data(); break; case CMMS_Q_GET: reply = gtcmtr_get(); break; case CMMS_Q_KILL: reply = gtcmtr_kill(); break; case CMMS_Q_ORDER: reply = gtcmtr_order(); break; case CMMS_Q_PREV: reply = gtcmtr_zprevious(); break; case CMMS_Q_PUT: reply = gtcmtr_put(); break; case CMMS_Q_QUERY: reply = gtcmtr_query(); break; case CMMS_Q_ZWITHDRAW: reply = gtcmtr_zwithdraw(); break; case CMMS_S_INITPROC: reply = gtcmtr_initproc(); break; case CMMS_S_INITREG: reply = gtcmtr_initreg(); break; case CMMS_S_TERMINATE: reply = gtcmtr_terminate(TRUE); break; case CMMS_E_TERMINATE: reply = gtcmtr_terminate(FALSE); break; case CMMS_U_LKEDELETE: reply = gtcmtr_lke_clearrep(curr_entry->clb_ptr, curr_entry->clb_ptr->mbf); break; case CMMS_U_LKESHOW: reply = gtcmtr_lke_showrep(curr_entry->clb_ptr, curr_entry->clb_ptr->mbf); break; case CMMS_B_BUFRESIZE: reply = CM_WRITE; value = *(unsigned short *)(curr_entry->clb_ptr->mbf + 1); if (value > curr_entry->clb_ptr->mbl) { free(curr_entry->clb_ptr->mbf); curr_entry->clb_ptr->mbf = malloc(value); } *curr_entry->clb_ptr->mbf = CMMS_C_BUFRESIZE; curr_entry->clb_ptr->mbl = value; curr_entry->clb_ptr->cbl = 1; break; case CMMS_B_BUFFLUSH: reply = gtcmtr_bufflush(); break; case CMMS_Q_INCREMENT: reply = gtcmtr_increment(); break; default: reply = FALSE; if (SS$_NORMAL == status) rts_error_csa(CSA_ARG(NULL) VARLSTCNT(3) ERR_BADGTMNETMSG, 1, (int)*curr_entry->clb_ptr->mbf); break; } if (curr_entry) /* curr_entry can be NULL if went through gtcmtr_terminate */ { status = sys$gettim(&curr_entry->lastact[0]); if (SS$_NORMAL != status) rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) status); /* curr_entry is used by gtcm_mbxread_ast to determine if it needs to defer the interrupt message */ prev_curr_entry = curr_entry; if (CM_WRITE == reply) { /* if ast == gtcm_write_ast, let it worry */ curr_entry->clb_ptr->ast = gtcm_write_ast; curr_entry = EMPTY_QUEUE; cmi_write(prev_curr_entry->clb_ptr); } else { curr_entry = EMPTY_QUEUE; if (1 == (prev_curr_entry->int_cancel.laflag & 1)) { /* valid interrupt cancel msg, handle in gtcm_mbxread_ast */ status = sys$dclast(gtcm_int_unpack, prev_curr_entry, 0); if (SS$_NORMAL != status) rts_error_csa(CSA_ARG(NULL) VARLSTCNT(1) status); } else if (CM_READ == reply) { prev_curr_entry->clb_ptr->ast = gtcm_read_ast; cmi_read(prev_curr_entry->clb_ptr); } } } } else if (1 < astq_dyn_avail) { # ifdef GTCM_REPTIM /* if reptim is not needed - and smw doesn't know why it would be - remove this */ status = sys$schdwk(0, 0, &wait[0], &reptim[0]); # else status = sys$schdwk(0, 0, &wait[0], 0); # endif sys$hiber(); sys$canwak(0, 0); } if (cm_timeout && (0 == gtcm_users)) sys$setimr(efn_ignore, closewait, gtcm_shutdown_ast, &cm_shutdown, 0); } }
/* On OSF/1 (Digital Unix), pointers are 64 bits wide; the only exception to this is C programs for which one may * specify compiler and link editor options in order to use (and allocate) 32-bit pointers. However, since C is * the only exception and, in particular because the operating system does not support such an exception, the argv * array passed to the main program is an array of 64-bit pointers. Thus the C program needs to declare argv[] * as an array of 64-bit pointers and needs to do the same for any pointer it sets to an element of argv[]. */ int main(int argc, char_ptr_t argv[]) { omi_conn *cptr, conn; int i; char buff[OMI_BUFSIZ]; DCL_THREADGBL_ACCESS; GTM_THREADGBL_INIT; set_blocksig(); gtm_env_init(); /* read in all environment variables before calling any function particularly malloc (from err_init below)*/ /* Open the packet log file for playback */ if (argc == 1) conn.fd = fileno(stdin); else if (argc == 2) { if (INV_FD_P((conn.fd = open(argv[argc - 1], O_RDONLY)))) { PRINTF("%s: open(\"%s\"): %s\n", argv[0], argv[argc - 1], STRERROR(errno)); exit(-1); } } else { PRINTF("%s: bad command line arguments\n\t%s [ filename ]\n", argv[0], argv[0]); exit(-1); } /* Initialize everything but the network */ err_init(gtcm_exit_ch); omi_errno = OMI_ER_NO_ERROR; ESTABLISH_RET(omi_dbms_ch, -1); /* any return value to signify error return */ gtcm_init(argc, argv); #ifdef GTCM_RC rc_create_cpt(); #endif REVERT; if (omi_errno != OMI_ER_NO_ERROR) exit(omi_errno); /* Initialize the connection structure */ conn.next = (omi_conn *)0; conn.bsiz = OMI_BUFSIZ; conn.bptr = conn.buff = buff; conn.xptr = (char *)0; conn.blen = 0; conn.exts = 0; conn.state = OMI_ST_DISC; conn.ga = (ga_struct *)0; /* struct gd_addr_struct */ conn.of = (oof_struct *)0; /* struct rc_oflow */ conn.pklog = FD_INVALID; /* Initialize the statistics */ conn.stats.bytes_recv = 0; conn.stats.bytes_send = 0; conn.stats.start = time((time_t *)0); for (i = 0; i < OMI_OP_MAX; i++) conn.stats.xact[i] = 0; for (i = 0; i < OMI_ER_MAX; i++) conn.stats.errs[i] = 0; for (;;) if (omi_srvc_xact(&conn) < 0) break; PRINTF("%ld seconds connect time\n", time((time_t)0) - conn.stats.start); PRINTF("%d OMI transactions\n", omi_nxact); PRINTF("%d OMI errors\n", omi_nerrs); #ifdef GTCM_RC PRINTF("%d RC transactions\n", rc_nxact); PRINTF("%d RC errors\n", rc_nerrs); #endif /* defined(GTCM_RC) */ PRINTF("%d bytes recv'd\n", conn.stats.bytes_recv); PRINTF("%d bytes sent\n", conn.stats.bytes_send); gtcm_exit(); return 0; }