⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 export.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
📖 第 1 页 / 共 2 页
字号:
				if (!strcmp(hmd.wb_type, "205")) 
					flag = '-';
				else 
					if (strcmp(hmd.input_date, lastday) >= 0) 
						flag = '+';
					else 
						flag = ' ';

				fprintf(fpout, "%4.4s %4.4s %4.4s %3.3s%c$\n", hmd.card_no + 4, hmd.card_no + 8, hmd.card_no + 12, hmd.card_no + 16, flag);
				bytes += 18;

				EXEC SQL FETCH hmd_cur INTO :hmd;
				if (sqlca.sqlcode == 100) break;
				else if (sqlca.sqlcode) {
		   	 		EXEC SQL CLOSE hmd_cur;
		    		h_winprompt(win, 14, 4, "取止付名单出错, 请重做!", 1, 0);
	    	    	fclose(fpout);
		    		unlink(fileout);
		    		delwin(win);
		    		scr_restore(screen);
		    		unlink(screen);
		    		return(-1);
				}
	        del_st_space("wb_list", &hmd);
	    	}
	    	fclose(fpout);


	   	 	if (doscp(fileout, driver, name)) {
			EXEC SQL CLOSE hmd_cur;
			h_winprompt(win, 14, 4, "写软盘出错, 请重做!", 1, 0);
			unlink(fileout);
			delwin(win);
			scr_restore(screen);
			unlink(screen);
			return(-1);
	    	} else {
			h_winprompt(win, 14, 4, "当前盘转出成功! 按任意键继续", 1, 0);
			clear_screen(win);
			diskno++;
	    	}
	    	if (bytes <= free_size - 31) break;
		}


end:
	EXEC SQL CLOSE hmd_cur;
	unlink(fileout);
	getdatef(lastday, "");
	fpout = fopen(fileday, "w");
	fprintf(fpout, "%s", lastday);
	fclose(fpout);
	delwin(win);
	scr_restore(screen);
	unlink(screen);
	return(0);
}

/*
 * 转出商户数据
 */
int shoptoprt()
{
	FILE *fpout;
	WINDOW *win;
	char fileout[64], screen[64];
	char name[16], driver[16], cmd[128];
	char driver1[64], driver2[64];
	long disk_size = 0, free_size, bytes;
	int ch, diskno = 1;
	$char id[16];
	$S_merchant_base shop;
	$S_sys_param sys;
	char	buf[128];
	char	*workdir;

	sprintf(screen, "/tmp/.shoptoprt.%d", getpid());
	scr_dump(screen);

	disp_below("商户资料转出");
	clear_wline(stdscr, LINES-1);
	win = newwin(16, 80, 4, 0);
	wrefresh(win);

	select_sys_param(&sys);
#ifdef zgx010528_modi
	sprintf(id, "%4.4s%%", sys.bank_id);
#else
	sprintf(id, "%s%%", sys.bank_id);
#endif
	EXEC SQL DECLARE shop_cur CURSOR FOR
	SELECT * FROM merchant_base
	WHERE merchant_id LIKE :id
	ORDER BY merchant_id;

	EXEC SQL OPEN shop_cur;
	if (sqlca.sqlcode) {
	    h_winprompt(win, 14, 4, "取商户资料出错, 请重做!", 1, 0);
	    delwin(win);
	    scr_restore(screen);
	    unlink(screen);
	    return(-1);
	}
	EXEC SQL FETCH shop_cur INTO :shop;
	if (sqlca.sqlcode == 100) {
	    EXEC SQL CLOSE shop_cur;
	    h_winprompt(win, 14, 4, "无特约商户资料, 按任意键继续", 1, 0);
	    delwin(win);
	    scr_restore(screen);
	    unlink(screen);
	    return(0);
	} else if (sqlca.sqlcode) {
	    EXEC SQL CLOSE shop_cur;
	    h_winprompt(win, 14, 4, "取商户资料出错, 请重做!", 1, 0);
	    delwin(win);
	    scr_restore(screen);
	    unlink(screen);
	    return(-1);
	}
	del_st_space("merchant_base", &shop);

	strcpy(driver1, "/dev/fd0135ds18");
	strcpy(driver2, "/dev/fd196ds15");

	sprintf(fileout, "%s/etc/Floopy", getenv("WORKDIR"));
	fpout = fopen(fileout, "r");
	if (fpout) {
	    while (1) {
		fscanf(fpout, "%s", fileout);
		if (feof(fpout)) break;
		if (fileout[0] == 'A') sscanf(fileout, "%*s%s", driver1);
		if (fileout[0] == 'B') sscanf(fileout, "%*s%s", driver2);
	    }
	    fclose(fpout);
	}

	strcpy(fileout, " A 驱 ");
	ch = strlen(fileout) + 1;
	strcpy(fileout + ch, " B 驱 ");
	ch += strlen(fileout + ch) + 1;
	strcpy(fileout + ch, " 取消 ");
	ch = multi_select(win, 1, "    请选择驱动器:", fileout, 3, 0, 0, 0);
	switch (ch) {
	    case 0:
		strcpy(driver, driver1);
		break;
	    case 1:
		strcpy(driver, driver2);
		break;
	    default:
		EXEC SQL CLOSE shop_cur;
		delwin(win);
		scr_restore(screen);
		unlink(screen);
		return(-1);
	}

	sprintf(fileout, "/tmp/.shopout.%d", getpid());

	while (1) {
	    mvwprintw(win, 1, 4, "请插入第 %d 张软盘 [ Enter 确认 ESC 取消 ]", diskno);
	    do {
		ch = getkey(win);
		if (ch == ESCAPE) {
		    exec sql close shop_cur;
		    unlink(fileout);
		    delwin(win);
		    scr_restore(screen);
		    unlink(screen);
		    return(-1);
		}
	    } while (ch != ENTER);

	    if (!yorn(win, 3, "    是否格式化该软盘?", "1.是", "0.否", 0, 0)) {
		mvwprintw(win, 3, 4, "正在格式化软盘, 请稍候 ...");
		wrefresh(win);
		if (dosformat(driver, &disk_size, &free_size)) {
		    h_winprompt(win, 14, 4, "格式化出错, 按任意键继续", 1, 0);
		    clear_screen(win);
		    continue;
		}
	    } else {
		mvwprintw(win, 3, 4, "正在检测软盘, 请稍候 ...");
		wrefresh(win);
		if (getsize(driver, &disk_size, &free_size)) {
		    h_winprompt(win, 14, 4, "读软盘出错, 按任意键继续", 1, 0);
		    clear_screen(win);
		    continue;
		}
		if (free_size < 186) {
		    h_winprompt(win, 14, 4, "软盘剩余空间不足, 按任意键继续", 1, 0);
		    clear_screen(win);
		    continue;
		}
	    }

	    sprintf(name, "shop.%03d", diskno);
	    clear_wline(win, 3);
	    mvwprintw(win, 3, 4, "商户资料转出中 (文件名: %s) 请稍候 ...", name);
	    wrefresh(win);

	    bytes = 0;
	    fpout = fopen(fileout, "w");
	    while (bytes <= free_size - 186) {
		fprintf(fpout, "\n\n%-6.6s\n", shop.post_code);
		fprintf(fpout, "%.68s\n", shop.address_chn);
		fprintf(fpout, "    %.42s %.20s\n", shop.merchant_cname, shop.manager);
		fprintf(fpout, "份数:%-04d  编码:%-15.15s\n", 0/*shop.hmd_number*/, shop.merchant_id);
		bytes += 186;
		EXEC SQL FETCH shop_cur INTO :shop;
		if (sqlca.sqlcode == 100)
			break;
		else if (sqlca.sqlcode) {
		    EXEC SQL CLOSE shop_cur;
		    h_winprompt(win, 14, 4, "取商户资料出错, 请重做!", 1, 0);
	    	    fclose(fpout);
		    unlink(fileout);
		    delwin(win);
		    scr_restore(screen);
		    unlink(screen);
		    return(-1);
		}
		del_st_space("merchant_base", &shop);
	    }
	    fclose(fpout);

$ifdef zgx010824_added;
$else;
	    /*
	     * 因用户提出除转出到软盘外还须于硬盘中保存, 以便软盘损坏时
	     * 手工转出当时同样的数据, 为此每次转出数据文件保留前两次
	     */
	if (diskno == 1) {
	    sprintf(buf, "mkdir %s/tmp/shop_01 >/dev/null 2>&1", workdir);
	    system(buf);
	    sprintf(buf, "mkdir %s/tmp/shop_02 >/dev/null 2>&1", workdir);
	    system(buf);
	    sprintf(buf, "rm -f %s/tmp/shop_01/*; mv %s/tmp/shop_02/shop.* %s/tmp/shop_01 > /dev/null 2>&1", workdir, workdir, workdir);
	    system(buf);
	    sprintf(buf, "rm -f %s/tmp/shop_02/shop.*; mv %s/tmp/shop.* %s/tmp/shop_02 > /dev/null 2>&1", workdir, workdir, workdir);
	    system(buf);
	    sprintf(buf, "rm -f %s/tmp/shop.* > /dev/null 2>&1", workdir);
	    system(buf);
	}
	sprintf(buf, "cp %s %s/tmp/shop.%03d > /dev/null 2>&1", fileout, workdir, diskno);
	system(buf);
$endif;
	    if (doscp(fileout, driver, name)) {
		EXEC SQL CLOSE shop_cur;
		h_winprompt(win, 14, 4, "写软盘出错, 请重做!", 1, 0);
		unlink(fileout);
		delwin(win);
		scr_restore(screen);
		unlink(screen);
		return(-1);
	    } else {
		h_winprompt(win, 14, 4, "当前盘转出成功! 按任意键继续", 1, 0);
		clear_screen(win);
		diskno++;
	    }
	    if (bytes <= free_size - 186) break;
	}

	EXEC SQL CLOSE shop_cur;
	unlink(fileout);
	delwin(win);
	scr_restore(screen);
	unlink(screen);
	return(0);
}


unload(fname,sele_str)
char *fname,*sele_str;
{
    struct sqlda *udesc;
    $char sele_s[1024];
    int i,j;
    int pos,len;
    char ch,*buffer=NULL,*cp,decstr[40];
    struct sqlvar_struct *col;
    FILE *unlfile;
    char delim='|';
    
    strcpy(decstr,fname);
    
    unlfile=fopen(decstr,"w");
    if(unlfile==(FILE *)NULL)
    {
        errcall(ERROR,"Cannot open file '%s'",fname);
        return -1;
    }

    strcpy(sele_s,sele_str);
    $prepare unload_id from $sele_s;
    if(sqlca.sqlcode!=0)
    {
        errcall(ERROR,"无%s表\n",fname);
        return -1;
    }

    $describe unload_id into udesc;

    pos=0;
    for(col=udesc->sqlvar,i=0;i<udesc->sqld;col++,i++)
    {
        switch(col->sqltype)
        {
        case SQLSMFLOAT:
            pos=rtypalign(pos,CFLOATTYPE);
            col->sqltype=CFLOATTYPE;
            col->sqllen=rtypmsize(CFLOATTYPE,0);
            pos+=col->sqllen;
            break;
        case SQLFLOAT:
            pos=rtypalign(pos,CDOUBLETYPE);
            col->sqltype=CDOUBLETYPE;
            col->sqllen=rtypmsize(CDOUBLETYPE,0);
            pos+=col->sqllen;
            break;
        case SQLMONEY:
        case SQLDECIMAL:
            pos=rtypalign(pos,CDECIMALTYPE);
            col->sqltype=CDECIMALTYPE;
            col->sqllen=rtypmsize(CDECIMALTYPE,0);
            pos+=col->sqllen;
            break;
        default:
            pos=rtypalign(pos,CFIXCHARTYPE); 
            col->sqllen=rtypwidth(col->sqltype,col->sqllen)+1;
            pos+=col->sqllen+1;
            col->sqltype=CFIXCHARTYPE;
            break;
        }     
    }

    buffer=(char *)malloc(pos);
    if(buffer==NULL)
    {
        printw("内存失败");
        refresh();
        endwin();
        exit(0);
    }

    pos=0;
    for(col=udesc->sqlvar,i=0;i<udesc->sqld;col++,i++)
    {
        pos=rtypalign(pos,col->sqltype);
        col->sqldata=pos+buffer;
        pos+=col->sqllen;
        if(col->sqltype!=CDECIMALTYPE) pos++;
    }
   
    $declare unload_cur scroll cursor for unload_id;
    $open unload_cur;
    $fetch unload_cur using descriptor udesc;
    j=0;
    while(sqlca.sqlcode==0)
    {
        j++;
        for(col=udesc->sqlvar,i=udesc->sqld;i>0;col++,i--)
        {
            if (col->sqltype==CDECIMALTYPE)
            {
                dectoasc((struct decimal *)col->sqldata,decstr,40,-1);
                ldchar(decstr,40,col->sqldata);
            }
            else
            {
                len=col->sqllen;
                cp=col->sqldata+len-1;
                while(len>1&&*cp==' ') len--,cp--;
                *(++cp)='\0';
            }
            fprintf(unlfile,"%s%c",col->sqldata,delim);
        }
        fprintf(unlfile,"\n");
        $fetch unload_cur using descriptor udesc;
    }
    $close unload_cur;

    if(buffer) free(buffer);

    fclose(unlfile);
    return(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -