summaryrefslogtreecommitdiffstats
path: root/pttbbs/mbbsd/stuff.c
diff options
context:
space:
mode:
Diffstat (limited to 'pttbbs/mbbsd/stuff.c')
-rw-r--r--pttbbs/mbbsd/stuff.c38
1 files changed, 33 insertions, 5 deletions
diff --git a/pttbbs/mbbsd/stuff.c b/pttbbs/mbbsd/stuff.c
index 9f13b2ef..a6aaec46 100644
--- a/pttbbs/mbbsd/stuff.c
+++ b/pttbbs/mbbsd/stuff.c
@@ -337,27 +337,30 @@ belong(char *filelist, char *key)
#ifndef _BBS_UTIL_C_ /* getdata_buf */
time_t
-gettime(int line, time_t dt)
+gettime(int line, time_t dt, char*head)
{
char yn[7];
+ int i;
struct tm *ptime = localtime(&dt), endtime;
memcpy(&endtime, ptime, sizeof(struct tm));
snprintf(yn, sizeof(yn), "%4d", ptime->tm_year + 1900);
+ move(line, 0); prints("%s",head);
+ i=strlen(head);
do {
- getdata_buf(line, 0, "西元年:", yn, 5, LCECHO);
+ getdata_buf(line, i, " 西元年:", yn, 5, LCECHO);
} while ((endtime.tm_year = atoi(yn) - 1900) < 0 || endtime.tm_year > 200);
snprintf(yn, sizeof(yn), "%d", ptime->tm_mon + 1);
do {
- getdata_buf(line, 13, "月:", yn, 3, LCECHO);
+ getdata_buf(line, i+15, "月:", yn, 3, LCECHO);
} while ((endtime.tm_mon = atoi(yn) - 1) < 0 || endtime.tm_mon > 11);
snprintf(yn, sizeof(yn), "%d", ptime->tm_mday);
do {
- getdata_buf(line, 22, "日:", yn, 3, LCECHO);
+ getdata_buf(line, i+24, "日:", yn, 3, LCECHO);
} while ((endtime.tm_mday = atoi(yn)) < 1 || endtime.tm_mday > 31);
snprintf(yn, sizeof(yn), "%d", ptime->tm_hour);
do {
- getdata_buf(line, 31, "時(0-23):", yn, 3, LCECHO);
+ getdata_buf(line, i+33, "時(0-23):", yn, 3, LCECHO);
} while ((endtime.tm_hour = atoi(yn)) < 0 || endtime.tm_hour > 23);
return mktime(&endtime);
}
@@ -660,3 +663,28 @@ StringHash(unsigned char *s)
}
return (v * 2654435769UL) >> (32 - HASH_BITS);
}
+
+inline int *intbsearch(int key, int *base0, int nmemb)
+{
+ /* 改自 /usr/src/lib/libc/stdlib/bsearch.c ,
+ 專給搜 int array 用的, 不透過 compar function 故較快些 */
+ const char *base = (char *)base0;
+ size_t lim;
+ int *p;
+
+ for (lim = nmemb; lim != 0; lim >>= 1) {
+ p = (int *)(base + (lim >> 1) * 4);
+ if( key == *p )
+ return p;
+ if( key > *p ){/* key > p: move right */
+ base = (char *)p + 4;
+ lim--;
+ } /* else move left */
+ }
+ return (NULL);
+}
+
+int qsort_intcompar(const void *a, const void *b)
+{
+ return *(int *)a - *(int *)b;
+}