📄 export.ec
字号:
/****************************************************
* 数据转出
* 止付名单转出(hmdtorpt)
* 商户资料转出(shoptorpt)
* A驱:/dev/fd0135ds18 B驱:/dev/fd196ds15
* 若有不同, 需在文件$WORKDIR/etc/Floopy中配置
*
* 最后修改: 周国祥 2001/08/23
****************************************************/
#include <stdio.h>
#include <curses.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <time.h>
#include "tool.h"
#include "mytools.h"
$include "db_struct.h"
EXEC SQL INCLUDE sqlda;
EXEC SQL INCLUDE sqltypes;
EXEC SQL INCLUDE sqlca;
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;
int doscp(char *src, char *driver, char *des)
{
char cmd[128];
sprintf(cmd, "doscp -m %s %s:%s >/dev/null 2>&1", src, driver, des);
return(system(cmd));
}
int dosformat(char *driver, long *disk_size, long *free_size)
{
FILE *fp;
char cmd[128], out[64];
int i;
sprintf(out, "/tmp/.hmdout.%d", getpid());
sprintf(cmd , "dosformat %s <<_!_ >%s 2>/dev/null\n\n_!_", driver, out);
if (system(cmd)) {
unlink(out);
return(-1);
}
fp = fopen(out, "r");
for (i = 0; i < 7; i++) fgets(cmd, 100, fp);
if (*disk_size == 0)
sscanf(cmd, "%ld", disk_size);
fgets(cmd, 100, fp);
sscanf(cmd, "%ld", free_size);
fclose(fp);
unlink(out);
return(0);
}
int getsize(char *driver, long *disk_size, long *free_size)
{
FILE *fp;
char cmd[128], out[64];
unsigned int ret;
int sec, track;
sprintf(out, "/tmp/.hmdout.%d", getpid());
sprintf(cmd, "dosdir %s >%s 2>/dev/null", driver, out);
if (system(cmd)) {
unlink(out);
return(-1);
}
fp = fopen(out, "r");
fseek(fp, -5, SEEK_END);
fscanf(fp, "%s", cmd);
if (!strcmp(cmd, "free")) {
fseek(fp, -19, SEEK_END);
fscanf(fp, "%ld", free_size);
} else
if (*disk_size) *free_size = *disk_size;
else {
fclose(fp);
sprintf(cmd, "dtype %s >%s 2>/dev/null", driver, out);
ret = system(cmd);
if (ret && ret != 0x5d00 && ret != 0x6e00 && ret != 0x6f00) {
unlink(out);
return(-1);
}
fp = fopen(out, "r");
fgets(cmd, 100, fp);
if (!strstr(cmd, "MS-DOS")) {
fclose(fp);
unlink(out);
return(-1);
}
sscanf(cmd, "%*s%*[^0-9]%d%*[^0-9]%d", &sec, &track);
*disk_size = *free_size = (long)sec * track * 1024;
}
fclose(fp);
unlink(out);
return(0);
}
/*
* 转出黑名单数据
* 增加将黑名单转出到硬盘选项 2001.09.08 Wubin Added
*/
int hmdtoprt()
{
$S_wb_list hmd;
FILE *fpout;
WINDOW *win;
char fileday[128], fileout[128], screen[64], name[16];
char driver[16], lastday[11], prefix[5], flag;
char driver1[64], driver2[64];
long disk_size = 0, free_size, bytes;
int ch, diskno = 1;
char buf[128];
char *workdir;
workdir = (char *)getenv("WORKDIR");
sprintf(screen, "/tmp/.hmdtoprt.%d", getpid());
scr_dump(screen);
disp_below("止付名单转出");
clear_wline(stdscr, LINES-1);
win = newwin(16, 80, 4, 0);
wrefresh(win);
strcpy(fileout, "印刷格式转出");
ch = strlen(fileout) + 1;
strcpy(fileout + ch, "报表格式转出");
ch += strlen(fileout + ch) + 1;
strcpy(fileout + ch, " 取消 ");
ch = multi_select(win, 1, " 请选择:", fileout, 3, 0, 0, 0);
if (ch == 2) {
delwin(win);
scr_restore(screen);
unlink(screen);
return(0);
}
if (ch == 1) {
$ifdef zgx010823_added;
$else;
/*
* 因用户提出除转出到软盘外还须于硬盘中保存, 以便软盘损坏时
* 手工转出当时同样的数据, 为此每次转出数据文件保留前两次
*/
sprintf(buf, "mv %s/prt/hmd_02.rpt %s/prt/hmd_01.rpt > /dev/null 2>&1", workdir, workdir);
system(buf);
sprintf(buf, "mv %s/prt/hmd.rpt %s/prt/hmd_02.rpt > /dev/null 2>&1", workdir, workdir);
system(buf);
$endif;
set_prompt(PROMPT_OFF);
getdatef(lastday, "");
mvwprintw(win, 1, 4, "请输入止付名单登记日期: [%s]", lastday);
if (in_item(win, "", 1, 29, lastday, 8, NULL, NULL, 0, 0) !=
ENTER) {
delwin(win);
scr_restore(screen);
unlink(screen);
return(0);
}
mvwprintw(win, 3, 4, "正在生成止付名单统计表, 请稍候 ...");
wrefresh(win);
sprintf(fileout, "%s/prt/hmd.rpt", workdir);
ch = hmd_rpt(fileout, lastday);
if (!ch) {
print_file(win, 5, 14, 1, fileout);
h_winprompt(win, 14, 4, "生成报表成功! 任意键继续...", 1, 0);
} else {
switch (ch) {
case -1:
h_winprompt(win, 14, 4, "生成报表出错!", 1, 0);
break;
case -2:
h_winprompt(win, 14, 4, "数据库操作错误!", 1, 0);
break;
}
}
delwin(win);
scr_restore(screen);
unlink(screen);
return(0);
}
EXEC SQL DECLARE hmd_cur CURSOR FOR
SELECT * FROM wb_list ORDER BY card_no;
EXEC SQL OPEN hmd_cur;
if (sqlca.sqlcode) {
h_winprompt(win, 14, 4, "取止付名单出错, 请重做!", 1, 0);
delwin(win);
scr_restore(screen);
unlink(screen);
return(-1);
}
EXEC SQL FETCH hmd_cur INTO :hmd;
if (sqlca.sqlcode == 100) {
EXEC SQL CLOSE hmd_cur;
h_winprompt(win, 14, 4, "无止付名单, 按任意键继续", 1, 0);
delwin(win);
scr_restore(screen);
unlink(screen);
return(0);
} else if (sqlca.sqlcode) {
EXEC SQL CLOSE hmd_cur;
h_winprompt(win, 14, 4, "取止付名单出错, 请重做!", 1, 0);
delwin(win);
scr_restore(screen);
unlink(screen);
return(-1);
}
prefix[0] = 0;
/***
strcpy(lastday, "0000/00/00");
****/
strcpy(lastday, "00000000");
sprintf(fileday, "%s/etc/HMD", workdir);
fpout = fopen(fileday, "r");
if (fpout) {
fscanf(fpout, "%s", lastday);
fclose(fpout);
}
strcpy(driver1, "/dev/fd0135ds18");
strcpy(driver2, "/dev/fd196ds15");
sprintf(fileout, "%s/etc/Floopy", 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 += strlen(fileout + ch) + 1;
strcpy(fileout + ch, " 取消 ");
ch = multi_select(win, 1, " 请选择驱动器:", fileout, 4, 0, 0, 0);
if (ch == 2) {
sprintf(fileout, "/tmp/.hmdout.%d", getpid());
sprintf(name, "hmd.%03d", diskno);
clear_wline(win, 3);
mvwprintw(win, 3, 4, "止付名单转出中 (文件名: %s/tmp/%s) 请稍候 ...", workdir, name);
wrefresh(win);
fpout = fopen(fileout, "w");
while (1) {
if (strncmp(hmd.card_no, prefix, 4)) {
strncpy(prefix, hmd.card_no, 4);
prefix[4] = 0;
fprintf(fpout, "\n%%%s$\n\n", prefix);
}
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);
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 (diskno == 1) {
sprintf(buf, "mkdir %s/tmp/hmd_01 >/dev/null 2>&1", workdir);
system(buf);
sprintf(buf, "mkdir %s/tmp/hmd_02 >/dev/null 2>&1", workdir);
system(buf);
sprintf(buf, "rm -f %s/tmp/hmd_01/*; mv %s/tmp/hmd_02/hmd.* %s/tmp/hmd_01 > /dev/null 2>&1", workdir, workdir, workdir);
system(buf);
sprintf(buf, "rm -f %s/tmp/hmd_02/hmd.*; mv %s/tmp/hmd.* %s/tmp/hmd_02 > /dev/null 2>&1", workdir, workdir, workdir);
system(buf);
sprintf(buf, "rm -f %s/tmp/hmd.* > /dev/null 2>&1", workdir);
system(buf);
}
sprintf(buf, "cp %s %s/tmp/hmd.%03d > /dev/null 2>&1", fileout, workdir, diskno);
system(buf);
h_winprompt(win, 14, 4, "印刷格式的止付名单转出成功!", 1, 0);
clear_screen(win);
goto end;
}
switch (ch) {
case 0:
strcpy(driver, driver1);
break;
case 1:
strcpy(driver, driver2);
break;
default:
EXEC SQL CLOSE hmd_cur;
delwin(win);
scr_restore(screen);
unlink(screen);
return(-1);
}
sprintf(fileout, "/tmp/.hmdout.%d", getpid());
while (1) {
mvwprintw(win, 1, 4, "请插入第 %d 张软盘 [ Enter 确认 ESC 取消 ]", diskno);
do {
ch = getkey(win);
if (ch == ESCAPE) {
EXEC SQL CLOSE hmd_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 < 31) {
h_winprompt(win, 14, 4, "软盘剩余空间不足, 按任意键继续", 1, 0);
clear_screen(win);
continue;
}
}
sprintf(name, "hmd.%03d", diskno);
clear_wline(win, 3);
mvwprintw(win, 3, 4, "止付名单转出中 (文件名: %s) 请稍候 ...", name);
wrefresh(win);
bytes = 0;
fpout = fopen(fileout, "w");
while (bytes <= free_size - 31) {
if (strncmp(hmd.card_no, prefix, 4)) {
strncpy(prefix, hmd.card_no, 4);
prefix[4] = 0;
fprintf(fpout, "\n%%%s$\n\n", prefix);
bytes += 12;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -