📄 export.ec
字号:
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 + -