Esempio n. 1
0
/********************************************
 * 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);
    }
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
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;
	}
}
Esempio n. 8
0
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;
	}
}
Esempio n. 9
0
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;
}
Esempio n. 10
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;
}
Esempio n. 11
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;
}
Esempio n. 12
0
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;

}