/******************************************** * RedirectDevice - redirect a device to a remote resource * ON ENTRY: * deviceStr has a string with the device name: * either disk or printer (ex. 'D:' or 'LPT1') * resourceStr has a string with the server and name of resource * (ex. 'TIM\TOOLS') * deviceType indicates the type of device being redirected * 3 = printer, 4 = disk * deviceParameter is a value to be saved with this redirection * which will be returned on GetRedirectionList * ON EXIT: * returns CC_SUCCESS if the operation was successful, * otherwise returns the DOS error code * NOTES: * deviceParameter is used in DOSEMU to return the drive attribute * It is not actually saved and returned as specified by the redirector * specification. This type of usage is common among commercial redirectors. ********************************************/ static uint16 RedirectDevice(char *deviceStr, char *resourceStr, uint8 deviceType, uint16 deviceParameter) { char slashedResourceStr[MAX_RESOURCE_PATH_LENGTH]; struct REGPACK preg = REGPACK_INIT; char *dStr, *sStr; /* prepend the resource string with slashes */ strcpy(slashedResourceStr, "\\\\"); strcat(slashedResourceStr, resourceStr); /* should verify strings before sending them down ??? */ dStr = com_strdup(deviceStr); preg.r_ds = FP_SEG(dStr); preg.r_si = FP_OFF(dStr); sStr = com_strdup(slashedResourceStr); preg.r_es = FP_SEG(sStr); preg.r_di = FP_OFF(sStr); preg.r_cx = deviceParameter; preg.r_bx = deviceType; preg.r_ax = DOS_REDIRECT_DEVICE; intr(0x21, &preg); com_strfree(dStr); com_strfree(sStr); if (preg.r_flags & CARRY_FLAG) { return (preg.r_ax); } else { return (CC_SUCCESS); } }
char * cb_get_env(char *filename, int num) { char *path = NULL; char buff[BUFFSIZE]; size_t len; switch(num) { case 1: com_dupenv(&path, &len, "OPNCBL_COBDIR"); break; case 2: com_dupenv(&path, &len, "OPNCBL_SRCDIR"); break; case 3: com_dupenv(&path, &len, "OPNCBL_EROUT"); break; default: break; } if(path == NULL) return com_strdup(filename); memset(buff,0,strlen(buff)); com_strcpy(buff,sizeof(buff),path); com_strcat(buff,sizeof(buff),filename); return com_strdup(buff); }
char * gettmpname(const char *name) { char buff[BUFFSIZE]; memset(buff, 0, sizeof(buff)); com_sprintf (buff, sizeof(buff), "%scob%d%s", "", processid, name); return com_strdup(buff); }
int cb_search_list(char *text) { struct cb_hostreference_list *l; struct cb_hostreference_list *p; l = host_reference_list; int i = 0; for(; l ; l = l->next) { i++; } p = malloc (sizeof (struct cb_hostreference_list)); p->hostreference = com_strdup (text); p->hostno = i+1; p->lineno = hostlineno; p->next = NULL; if ( host_reference_list == NULL ){ host_reference_list = p; } else { l = host_reference_list; for(; l->next ; l = l->next); l->next = p; } return i+1; }
char * gettranslatename(char *name) { char buff[BUFFSIZE]; char basename[BUFFSIZE]; memset(basename, 0, sizeof(basename)); memset(buff, 0, sizeof(buff)); file_basename (name, basename); com_sprintf (buff, sizeof(buff), "preeql%s.cob", basename); return com_strdup(buff); }
char * cb_host_list_add (struct cb_hostreference_list *list, char *text) { int hostno; char temps[BUFFSIZE]; hostno = cb_search_list(text); com_sprintf(temps,sizeof(temps),"$%d",hostno); return com_strdup(temps); }
void cb_res_host_list_add (struct cb_res_hostreference_list *list, char *text) { struct cb_res_hostreference_list *l; struct cb_res_hostreference_list *p; p = malloc (sizeof (struct cb_res_hostreference_list)); p->hostreference = com_strdup (text); p->lineno = hostlineno; p->next = NULL; if ( res_host_reference_list == NULL ){ res_host_reference_list = p; } else { l = res_host_reference_list; for(; l->next ; l = l->next); l->next = p; } }
struct cb_sql_list * cb_text_list_add (struct cb_sql_list *list, char *text) { struct cb_sql_list *p; struct cb_sql_list *l; p = malloc (sizeof (struct cb_sql_list)); p->sqltext = com_strdup (text); p->next = NULL; if (!list) { return p; } else { for (l = list; l->next; l = l->next) ; l->next = p; return list; } }
int com_dossetcurrentdir(char *path) { /*struct com_starter_seg *ctcb = owntcb->params;*/ char *s = com_strdup(path); com_errno = 8; if (!s) return -1; pre_msdos(); HI(ax) = 0x3b; SREG(ds) = DOSEMU_LMHEAP_SEG; LWORD(edx) = DOSEMU_LMHEAP_OFFS_OF(s); call_msdos(); /* call MSDOS */ com_strfree(s); if (LWORD(eflags) & CF) { post_msdos(); return -1; } post_msdos(); return 0; }
static int load_and_run_DOS_program(char *command, char *cmdline, int quit) { BMEM(pa4) = (struct param4a *)lowmem_alloc(sizeof(struct param4a)); if (!BMEM(pa4)) return -1; BMEM(allocated) = 1; BMEM(quit) = quit; BMEM(cmd) = com_strdup(command); if (!BMEM(cmd)) { com_errno = 8; return -1; } BMEM(cmdl) = lowmem_alloc(256); if (!BMEM(cmdl)) { com_strfree(BMEM(cmd)); com_errno = 8; return -1; } if (!cmdline) cmdline = ""; snprintf(BMEM(cmdl), 256, "%c %s\r", (char)(strlen(cmdline)+1), cmdline); /* prepare param block */ BMEM(pa4)->envframe = 0; // ctcb->envir_frame; BMEM(pa4)->cmdline = MK_FARt(DOSEMU_LMHEAP_SEG, DOSEMU_LMHEAP_OFFS_OF(BMEM(cmdl))); BMEM(pa4)->fcb1 = MK_FARt(COM_PSP_SEG, offsetof(struct PSP, FCB1)); BMEM(pa4)->fcb2 = MK_FARt(COM_PSP_SEG, offsetof(struct PSP, FCB2)); SREG(es) = DOSEMU_LMHEAP_SEG; LWORD(ebx) = DOSEMU_LMHEAP_OFFS_OF(BMEM(pa4)); /* path of programm to load */ SREG(ds) = DOSEMU_LMHEAP_SEG; LWORD(edx) = DOSEMU_LMHEAP_OFFS_OF(BMEM(cmd)); fake_call_to(BIOSSEG, GET_RETCODE_HELPER); LWORD(eax) = 0x4b00; real_run_int(0x21); return 0; }
/* * <Function name> * create_conn * * <Outline> * 接続用リストの要素を新規に作成する * * <Input> * dbtype : データベースのタイプ * connname : 接続時に指定した識別子(指定が無い場合はNULL) * connaddr : コネクションリソースのアドレス(PostgresならPGconn *と同等) * * <Output> * success : struct conn_list * * failure ; NULL */ static struct conn_list * create_conn(int dbtype, char *connname, unsigned long connaddr){ // initialize int newId; struct conn_list *p; p = (struct conn_list *)malloc(sizeof(struct conn_list)); if(p != NULL){ newId = _next_conn_id; _next_conn_id++; p->next = NULL; p->sc.id = newId; p->sc.cid = com_strdup(connname); p->sc.dbtype = dbtype; p->sc.connaddr = connaddr; p->sc.resaddr = OCDB_RES_DEFAULT_ADDRESS; p->sc.result = RESULT_SUCCESS;; p->sc.errorMessage = NULL; p->sc.pid = NULL; } return p; }
int main (int argc, char *argv[]) { struct filename transfile = {NULL, NULL}; char *fileandpath = NULL; char *outputname = NULL; const char *prelopt = "--"; int preloptlen = 2; const char *preopt = "-"; int preoptlen = 1; char *opthead; char *opt; char *optval; char *env; char *tempid; int iret; int i; int optind; int optfile_idx = 1; for (optind=1; optind<argc; optind++){ if(strncmp(prelopt, argv[optind], preloptlen) == 0){ // long option char *p; opthead = argv[optind] + sizeof(char) * preloptlen; p = strchr(opthead, '='); optval = p + sizeof(char); *p = '\0'; if(strcmp("inc", opthead) == 0){ include_path = com_strdup(optval); } else if(strcmp("version", opthead) == 0){ print_version(); break; } else if(strcmp("help", opthead) == 0){ print_usage(); break; } else if(strcmp("help", opthead) == 0){ printf("invalid option: %s\n", argv[optind]); print_usage(); break; } } else if(strncmp(preopt, argv[optind], preoptlen) == 0){ print_usage(); break; } else { if(transfile.source == NULL){ fileandpath = cb_get_env(argv[optind], 1); transfile.source = com_strdup(fileandpath); } else if(outputname == NULL){ fileandpath = cb_get_env(argv[optind], 2); outputname = com_strdup(fileandpath); } else if(errorfilename == NULL){ fileandpath = cb_get_env(argv[optind], 3); errorfilename = com_strdup(fileandpath); } else { printf("too many arguments.\n"); print_usage(); } } } if(transfile.source == NULL){ print_usage(); } else { #ifdef _WIN32 tempid = strrchr(fileandpath,'\\'); #else tempid = strrchr(fileandpath,'/'); #endif if(!tempid){ tempid = fileandpath; }else{ tempid = tempid + 1; } for(i=0;i<strlen(tempid);i++){ if(tempid[i] == '-'){ tempid[i] = '_'; }else if(tempid[i] == '.'){ tempid[i] = '\0'; } } filenameID = com_strdup(tempid); } printf("precompile start: %s\n",transfile.source); printf("=======================================================\n"); printf(" LIST OF CALLED DB Library API \n"); printf("=======================================================\n"); processid = com_getpid(); if( outputname != NULL) transfile.translate = outputname; else transfile.translate = gettranslatename(transfile.source); size_t len; com_dupenv(&env, &len, "OCESQL_EXT"); if(env == NULL) flag_external=0; else if(strcmp(env,"Y")==0) flag_external=1; else flag_external=0; iret = translate(&transfile); printf("=======================================================\n"); free(filenameID); if(iret != 0){ printf("translate error\n"); return 1; } return 0; }