/* r3rfc.c Copyright (c) 1999 Johan Schon. All rights reserved. revision history: 0.01 1999-03-22 schoen created first version 0.20 1999-10-28 schoen last changes before first upload to CPAN 0.30 1999-11-06 schoen changed format string in r3_getfloat 0.31 1999-11-10 schoen added strlen check in r3_setnum added strlen check in r3_setdate and r3_settime */ #include #include #include #include #include #include #include #include "r3rfc.h" static char buf[65535L*2L+1L]; void r3_stbl(char *s) { int i; for (i=strlen(s)-1; i>=0; i--) { if (s[i]==' ') s[i]=0; else return; } } void r3_ftbl(char *s, int n) { int i; for (i=strlen(s); istrlen(str)) memset(var+strlen(str),' ',n-strlen(str)); } char * r3_getchar(char * var, size_t n) { strncpy(buf, var, n); buf[n]=0; r3_stbl(buf); return buf; } void r3_setdate(char * var, char * str) { size_t l; l=strlen(str); if (l>sizeof(RFC_DATE)) l=sizeof(RFC_DATE); strncpy(var,str,l); if (ln) { strncpy(var, str, n); } else { if (l>0) strncpy(var+n-l, str, l); } if (n>l) { memset(var,'0',n-l); } } char * r3_getnum(char * var, size_t n) { strncpy(buf, var, n); buf[n]=0; r3_stbl(buf); return buf; } void r3_settime(char * var, char * str) { size_t l; l=strlen(str); if (l>sizeof(RFC_TIME)) l=sizeof(RFC_TIME); strncpy(var,str,l); if (l='0' && x<='9') return x-'0'; if (x>='A' && x<='F') return 10+x-'A'; if (x>='a' && x<='f') return 10+x-'a'; return 0; } void r3_setbyte(unsigned char * var, size_t n, char * str) { size_t i; strcpy(buf, str); memset(buf+strlen(str), '0', strlen(str)+n*2); for (i=0; ic) memcpy(s,str+strlen(str)-c,c); else { memset(s,'0',c-strlen(str)); memcpy(s+c-strlen(str),str,strlen(str)); } while((*p) && (c < n*2-1)) s[c++]=*(p++); while(c < n*2-1) s[c++]='0'; s[n*2]=0; r3_setbyte(bcd, n, s); } char * r3_getbcd(unsigned char * bcd, size_t n, int decimals) { char s[256]; size_t c; char * str; str=buf; strcpy(s, r3_getbyte(bcd, n)); if (s[n*2-1]=='D') *(str++)='-'; else *(str++)='+'; for(c=0; c0) { *(str++)='.'; while (c