📄 edt_rate.c
字号:
else
sound_bell();
break;
case RIGHT:
if(Tbltop[Count+cur_unit.unit_x-1].length)
move_finger(3,1);
else
sound_bell();
break;
case PAGEUP:
pgup_tbl();
break;
case PAGEDOWN:
pgdn_tbl();
break;
case F2: /* SAVE THE RATE TABLE */
save_tbl(Flag,REFRESH);
break;
case F5: /* DELETE */
delet_item();
break;
case F6: /* AREA No. LOCATE */
loc_tbl();
break;
case F7: /* PAGE No. LOCATE */
loc_page();
break;
case F9:
copy_last_item();
break;
case ENTER:
mode1 = 0x0;
modi_tbl(mode1); /* MODIFY THE RATE TABLE */
break;
default:
sound_bell();
break;
}/* END OF SWITCH */
}/* END OF WHILE */
}
/*-----------------------------------------------------
------------------- save_tbl() --------------------
Function: Save the rate table.
Calls: None
Called by: input_data()
Input: mode -- IDD,DDD,LDD
status -- 0: not refresh
1: refresh
Output: None
Return: None
---------------------------------------------------*/
void save_tbl(UC mode,UC status)
{
int i;
FILE *rate_file;
UC tbl_name[35];
RATE_STRUCT newitem;
RATE_STRUCT huge *tbl;
Tbllen = tbl_len();
message_disp(8,"正在存盘,请稍候..."); /* saving, please wait... */
/***** RESORT THE RATE TABLE *****/
while(Oldend < Tbllen)
{
newitem = Tbltop[Oldend];
sort_tbl(&newitem);
Oldend += 1;
}
/***** SET TRUNK MARK IN THE TABLE *****/
set_trunk();
/***** SAVE THE RATE TABLE *****/
if(mode == IDD)
strcpy(tbl_name, IDDRateFileName);
else if(mode == DDD)
strcpy(tbl_name, DDDRateFileName);
else if(mode == LDD)
strcpy(tbl_name, LDDRateFileName);
tbl = Tbltop;
rate_file = fopen(tbl_name, "wb");
for(i=0;i<Tbllen;i++)
{
fwrite(tbl, sizeof(RATE_STRUCT), 1, rate_file);
tbl++;
}
fclose(rate_file);
message_end();
if(status == REFRESH)
{
hide_finger();
brush_tbl(ITEMS, 16, 7);
disp_tbl(&Tbltop[Count-1], Count); /* REDISPLAY */
echo_finger();
}
return;
}
/*-------------------------------------------------------------
------------------------ sort_tbl() -----------------------
Function: Increase and resort the rate table.
Calls: maxnum
Called by: input_data()
Input: newitem -- a new item of rate table
Output: None
Return: None
-------------------------------------------------------------*/
void sort_tbl(RATE_STRUCT huge *newitem)
{
int result;
UI comp_len;
UI num;
RATE_STRUCT huge *tbl, huge *tblptr;
if(!memicmp(newitem->area_no, "", newitem->length)) /* if it is null */
return;
tbl = Tbltop;
num = 0;
/**** If the rate table is empty, the new item is
the first one in the table. ****/
if(!Oldend)
{
tbl[0] = *newitem;
return;
}
/**** The new item is inserted in middle of the table. ****/
do
{
comp_len = maxnum(tbl->length, newitem->length);
result = memicmp(tbl->area_no, newitem->area_no, comp_len);
if(!result) /* result=0 : the two strings are equal */
return;
if(result > 0) /* INSERT HERE */
{
tblptr = &Tbltop[Oldend];
while(tblptr > tbl)
{
*tblptr = *(tblptr-1);
tblptr--;
}
*tblptr = *newitem;
return;
}
tbl++;
num++;
}while(tbl->length && num<Max_len);
/**** The new item is the last one in the rate table. ****/
*tbl = *newitem;
}
/*-------------------------------------------------------------
------------------------ set_trunk() -----------------------
Function: Set trunk mark in the rate table.
Calls: maxnum
Called by: input_data()
Input: None
Output: None
Return: None
------------------------------------------------------------*/
void set_trunk(void)
{
RATE_STRUCT huge *tbl, huge *l_trunk;
int result;
UI count,num;
Tbllen = tbl_len();
tbl = Tbltop;
num = 0;
tbl->trunk_mark = 1; /* THE FIRST ITEM IN TABLE IS A TRUNK. */
l_trunk = tbl; /* THE LAST TRUNK POSITION */
tbl++;
num++;
while(tbl->length && num<Max_len) /* NOT END OF RATE TABLE */
{
count = l_trunk->length;
result = memicmp(tbl->area_no, l_trunk->area_no, count);
if(result)
{
tbl->trunk_mark = 1; /* SET TRUNK MARK */
l_trunk = tbl;
}
else
tbl->trunk_mark = 0; /* NOT TRUNK */
tbl++;
num++;
}/* END OF WHILE */
}
/*------------------------------------------------------------
---------------------- loc_tbl() --------------------------
Function: Locate according to the area No..
Calls: maxnum,clr_tbl,disp_tbl
Called by: input_data
Input: None
Output: None
Return: None
-----------------------------------------------------------*/
void loc_tbl(void)
{
int res;
RATE_STRUCT huge *tbl;
UC locate_no[6] = "";
UC result;
UI comp_len;
UC *msg="定位区号"; /* DING WEI QU HAO */
UC *warn="没有该区号!"; /* WU CI QU HAO! */
message_disp(8," 输入区号 Enter 确认"); /*district no.*/
pop_back(250, 295, 400, 335, 7);
draw_back(330, 304, 390, 326, 11);
outf(260, 308, 7, 0, "%s", msg);
/***** LOCATE ACCODING TO THE PAGE No. USERS INPUT. *****/
set_get_color(11, 0, 12, 11, 0);
result = get_no(335, 306, 18, 30, 0, 6, locate_no, 0x00);
rid_pop();
message_end();
if(!result) /* IF USER TYPE "Esc", RETRUN. */
return;
/***** Locate the position in the rate table according
to the area number user typeed. *****/
tbl = blocate_area(locate_no);
do
{
comp_len = maxnum(tbl->length, result);
res = memicmp(tbl->area_no, locate_no, comp_len);
if(!res) /* find! */
{
Count = ((UI)(tbl-Tbltop)/16)*16+1;
hide_finger();
brush_tbl(ITEMS, 16, 7);
disp_tbl(&Tbltop[Count-1], Count);
locate_finger(tbl-Tbltop-Count+1, 1); /* LOCATTED */
return;
}
if(tbl > Tbltop)
tbl--;
}while(!tbl->trunk_mark);
comp_len = maxnum(tbl->length, result);
res = memicmp(tbl->area_no, locate_no, comp_len);
if(!res)
{
Count = ((UI)(tbl-Tbltop)/16)*16+1;
hide_finger();
brush_tbl(ITEMS, 16, 7);
disp_tbl(&Tbltop[Count-1], Count);
locate_finger(tbl-Tbltop-Count+1, 1); /* LOCATTED */
return;
}
/***** Cann't locate, warning. *****/
warn_mesg("", warn);
}
/*------------------------------------------------------
------------------- modi_tbl() ---------------------
Function: Modify the rate table.
Calls: tbl_len,maxnum
Called by: input_data()
Input: mode -- mode of inputting data
Output: None
Return: None
----------------------------------------------------*/
void modi_tbl(UC mode)
{
int result;
UC res;
UI num;
UI xs, ys, xe, ye;
UI comp_len;
UI back_in;
UL rate_value = 0, rate_time = 60;
UC areano_buf[9] = "";
UC name_buf[9] = "";
UC *title = "注意:";
UC *warn = "该区号已有, 请重新输入!";
RATE_STRUCT huge *tbl;
UNIT_STRUCT cur_unit;
hide_finger();
get_current(&cur_unit);
xs = cur_unit.dot_sx;
ys = cur_unit.dot_sy;
switch(cur_unit.unit_y)
{
case 1: /* AREA NUMBER */
if(Count+cur_unit.unit_x <= Oldend)
{
sound_bell(); /* add only, do not change */
echo_finger();
return;
}
do
{
back_in = 1;
strcpy(areano_buf,"");
message_disp(8," 输入数字 Enter 确认"); /*number*/
set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
res = get_no(xs, ys, 18, 60, back_in, 8, areano_buf, mode);
message_end();
if(!res)
break;
tbl = Tbltop;
num = 0;
do
{
comp_len = maxnum(res, tbl->length);
result = memicmp(tbl->area_no, areano_buf, comp_len);
/*** THE AREA No. INPUTTED ALREADY EXIST, REINPUT ***/
/* Tbltop[Count+cur_unit.unit_x-1] is the item being
* editted, so not judge it
*/
if(!result && (tbl!=&Tbltop[Count+cur_unit.unit_x-1]))
{
UNIT_STRUCT cur;
warn_mesg(title, warn);
/* clear the current item */
get_current(&cur);
xs = cur.dot_sx;
ys = cur.dot_sy;
xe = cur.dot_ex;
ye = cur.dot_ey;
setfillstyle(1, BK_CLR);
bar(xs, ys, xe, ye);
break;
}
tbl++;
num++;
}while(tbl->length && num<Max_len);
}while(tbl->length && num<Max_len);
/***** RECORD THE AREA No. AND LENGTH INPUTTED. *****/
if(res)
{
strcpy(Tbltop[Count+cur_unit.unit_x-1].area_no, areano_buf);
Tbltop[Count+cur_unit.unit_x-1].length = res;
move_finger(3,1);
}
else
echo_finger();
break;
case 2: /* RECORD AREA NAME INPUTTED */
strcpy(name_buf, Tbltop[Count+cur_unit.unit_x-1].area_name);
message_disp(8," 输入汉字 Enter 确认"); /*chinese char*/
set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
result = get_hz_str(xs, ys, 18, 80, 2, 4, name_buf);
message_end();
if(result)
strcpy(Tbltop[Count+cur_unit.unit_x-1].area_name, name_buf);
move_finger(3,1);
break;
case 3: /* first_RATE */
message_disp(8," 输入数字 Enter 确认"); /*number*/
set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
result = get_money(xs, ys, 18, 59, 2, 3, &rate_value, mode);
message_end();
/***** IF NOT "Esc", RECORD THE RATE INPUTTED. *****/
if(result)
Tbltop[Count+cur_unit.unit_x-1].first_rate = (UI)rate_value;
move_finger(3,1);
break;
case 4: /* first_time */
message_disp(8," 输入数字 Enter 确认"); /*number*/
set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
result = get_dec(xs, ys, 18, 45, 12, 3, &rate_time, mode);
message_end();
/***** IF NOT "Esc", RECORD THE RATE INPUTTED. *****/
if(result)
Tbltop[Count+cur_unit.unit_x-1].first_time = (UI)rate_time;
move_finger(3,1);
break;
case 5: /* normal_RATE */
message_disp(8," 输入数字 Enter 确认"); /*number*/
set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
result = get_money(xs, ys, 18, 59, 2, 3, &rate_value, mode);
message_end();
/***** IF NOT "Esc", RECORD THE RATE INPUTTED. *****/
if(result)
Tbltop[Count+cur_unit.unit_x-1].formal_rate = (UI)rate_value;
move_finger(3,1);
break;
case 6: /* normal_time */
message_disp(8," 输入数字 Enter 确认"); /*number*/
set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
result = get_dec(xs, ys, 18, 45, 12, 3, &rate_time, mode);
message_end();
/***** IF NOT "Esc", RECORD THE RATE INPUTTED. *****/
if(result)
Tbltop[Count+cur_unit.unit_x-1].formal_time = (UI)rate_time;
move_finger(3,1);
break;
case 7: /* add fee */
message_disp(8," 输入数字 Enter 确认"); /*number*/
set_get_color(0, 10, 10, BK_CLR, CHR_CLR);
result = get_money(xs, ys, 18, 59, 2, 1, &rate_value, mode);
message_end();
/***** IF NOT "Esc", RECORD THE RATE INPUTTED. *****/
if(result)
Tbltop[Count+cur_unit.unit_x-1].add_fee = (UI)rate_value;
if(Count+cur_unit.unit_x!=Max_len && Count+cur_unit.unit_x!=Tbllen+1)
move_finger(1,1);
move_finger(2,ITEMS-2);
break;
}/* END OF SWITCH */
Tbllen = tbl_len();
}
/*-----------------------------------------------------
--------------------- pgup_tbl() ------------------
Function: Change a page towards up.
Calls: clr_tbl,disp_tbl
Called by: input_data
Input: None
Output: None
Return: None
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -