|
@@ -5,43 +5,63 @@
|
|
|
* Internal ascii conversion routine, avoid use of printf, it's a bit big!
|
|
|
*/
|
|
|
|
|
|
-
|
|
|
-static void hit(buf, val)
|
|
|
-char *buf;
|
|
|
-int val;
|
|
|
-{
|
|
|
- *buf = '0' + val % 10;
|
|
|
-}
|
|
|
+
|
|
|
+ * Modified Manuel Novoa III Jan 2001
|
|
|
+ *
|
|
|
+ * Removed static function "hit" and did time-field fills inline and
|
|
|
+ * put day, hour, min, and sec conversions in a loop using a small
|
|
|
+ * table to reduce code size.
|
|
|
+ *
|
|
|
+ * Made daysp[] and mons[] const to move them from bss to text.
|
|
|
+ *
|
|
|
+ * Also fixed day conversion ... ANSI says no leading 0.
|
|
|
+ *
|
|
|
+ */
|
|
|
|
|
|
void __asctime(buffer, ptm)
|
|
|
register char *buffer;
|
|
|
struct tm *ptm;
|
|
|
{
|
|
|
- static char days[] = "SunMonTueWedThuFriSat";
|
|
|
- static char mons[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
|
|
|
- int year;
|
|
|
+ static const char days[] = "SunMonTueWedThuFriSat";
|
|
|
+ static const char mons[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
|
|
|
+
|
|
|
+ static const char template[] = "Err Err 00 00:00:00 0000\n";
|
|
|
+ int tm_field[4];
|
|
|
+ int tmp, i;
|
|
|
+ char *p;
|
|
|
+
|
|
|
+
|
|
|
+ memcpy(buffer, template, sizeof(template));
|
|
|
|
|
|
-
|
|
|
- strcpy(buffer, "Err Err .. ..:..:.. ....\n");
|
|
|
- if ((ptm->tm_wday >= 0) && (ptm->tm_wday <= 6))
|
|
|
+ if ((ptm->tm_wday >= 0) && (ptm->tm_wday <= 6)) {
|
|
|
memcpy(buffer, days + 3 * (ptm->tm_wday), 3);
|
|
|
+ }
|
|
|
|
|
|
- if ((ptm->tm_mon >= 0) && (ptm->tm_mon <= 11))
|
|
|
+ if ((ptm->tm_mon >= 0) && (ptm->tm_mon <= 11)) {
|
|
|
memcpy(buffer + 4, mons + 3 * (ptm->tm_mon), 3);
|
|
|
+ }
|
|
|
+
|
|
|
+ tm_field[0] = ptm->tm_mday;
|
|
|
+ tm_field[1] = ptm->tm_hour;
|
|
|
+ tm_field[2] = ptm->tm_min;
|
|
|
+ tm_field[3] = ptm->tm_sec;
|
|
|
+
|
|
|
+ p = buffer + 9;
|
|
|
+ for (i=0 ; i<4 ; i++) {
|
|
|
+ tmp = tm_field[i];
|
|
|
+ *p-- += tmp % 10;
|
|
|
+ *p += (tmp/10) % 10;
|
|
|
+ p += 4 ;
|
|
|
+ }
|
|
|
|
|
|
+ tmp = ptm->tm_year + 1900;
|
|
|
+ p = buffer + 23;
|
|
|
+ for (i=0 ; i<4 ; i++) {
|
|
|
+ *p-- += tmp % 10;
|
|
|
+ tmp /= 10;
|
|
|
+ }
|
|
|
|
|
|
- hit(buffer + 8, ptm->tm_mday / 10);
|
|
|
- hit(buffer + 9, ptm->tm_mday);
|
|
|
- hit(buffer + 11, ptm->tm_hour / 10);
|
|
|
- hit(buffer + 12, ptm->tm_hour);
|
|
|
- hit(buffer + 14, ptm->tm_min / 10);
|
|
|
- hit(buffer + 15, ptm->tm_min);
|
|
|
- hit(buffer + 17, ptm->tm_sec / 10);
|
|
|
- hit(buffer + 18, ptm->tm_sec);
|
|
|
-
|
|
|
- year = ptm->tm_year + 1900;
|
|
|
- hit(buffer + 20, year / 1000);
|
|
|
- hit(buffer + 21, year / 100);
|
|
|
- hit(buffer + 22, year / 10);
|
|
|
- hit(buffer + 23, year);
|
|
|
+ if (buffer[8] == '0') {
|
|
|
+ buffer[8] = ' ';
|
|
|
+ }
|
|
|
}
|