コード例 #1
0
ファイル: VString.cpp プロジェクト: mikelsv/opensource
VString PartLineDoubleUp(VString line, VString el, VString er){
	unsigned char *pos=line, *lpos;
	if(!rtmsu(line.endu(), el, el, pos)){ return VString(); }
	lpos=pos+=el.sz; //el.setu(pos+el.sz, line.endu()-pos-el.sz);
	if(!rtmsu(line.endu(), er, er, pos)){ return VString(); }
	return VString(lpos, pos-lpos);
}
コード例 #2
0
ファイル: VString.cpp プロジェクト: mikelsv/opensource
VString dspacevt(VString &line, int s){ // удаление пробелов и табов s - начало конец вернуть;  1,2,4
	unsigned char *ln=line, *to=line.endu();
	if(s&1) for(ln; ln<to; ln++){ if(*ln!=' ' && *ln!='\t' ) break; }
	if(s&2) for(to; ln<to; to--){ if(*(to-1)!=' ' && *(to-1)!='\t') break; }
	if(s&4) return line=VString(ln, to-ln);
	return VString(ln, to-ln);
}
コード例 #3
0
ファイル: VString.cpp プロジェクト: mikelsv/opensource
// ParamLine
int ParamLine(VString line, VString &name, unsigned char *k, VString *v, int sz){
	int count=0;

	VString t;
	unsigned char *ln=line, *lln=ln, *to=line.endu(), lk=0, f=1;

	while(ln<to+1){
		if(ln==to || *ln=='.' || *ln==',' || *ln=='=' || *ln=='!' || *ln=='*' || *ln=='/' || *ln=='+'/* || *ln=='-'*/ || *ln=='!' || *ln=='~' || *ln==':'){
			t.setu(lln, ln-lln); dspacev(t, 7);

			if(f){
				f=0;
				name=t;
			}
			else{
				if(count<sz){
					k[count]=lk;
					v[count]=t;
					count++;
				}
			}

			lk=*ln; lln=ln+1;
		}
		ln++;
	}

	return count;
}
コード例 #4
0
ファイル: VString.cpp プロジェクト: mikelsv/opensource
VString PartLineST(VString line, VString &two){ // one = "Text Part ONe" [Space || Tab] "Text Part Two" -> two
	unsigned char *ln = line, *to =line.endu();

	while(ln < to && (*ln != ' ' || *ln !='\t'))
		ln ++;

	if(ln == to){
		two.Clean();
		return line;
	}

	line = line.str(ln - line.data);

	while(ln < to && (*ln == ' ' || *ln =='\t'))
		ln ++;

	two.setu(ln, to - ln);

	return line;
}
コード例 #5
0
ファイル: VString.cpp プロジェクト: mikelsv/opensource
VString PartLineTwo(VString line, VString &two, VString el, VString el2){
	unsigned char *pos = line, *pos2 = pos;
	
	if(!rtms(line.endu(), el, el, pos))
		pos = line.endu();
	
	if(!rtms(line.endu(), el2, el2, pos2))
		pos2 = line.endu();

	pos = pos < pos2 ? pos : pos2;

	if(pos == line.endu()){
		 two.Clean();
		 return line;
	}

	two.setu(pos+el.sz, line.endu()-pos-el.sz);
	return VString(line.uchar(), pos-line.uchar());
}
コード例 #6
0
ファイル: time.cpp プロジェクト: mikelsv/opensource
unsigned int MTime::rpmf_date(unsigned char *ret, unsigned int rsz, const VString line, unsigned int tm, bool gmt, bool eng, BYTE c){
	unsigned char *aret=ret, *rt=ret ? ret+rsz : 0; // define
	unsigned char *ln=line, *to=line.endu();

	//LString ret; Itos it;

	//for(unsigned int i=0; i<line.size(); i++){
	for(ln; ln<to; ln++){
		if(c){
			if(*ln!=c){ if(ret<rt) *ret++=*ln; continue; }
			ln++;
			continue;
		}

		switch(*ln){
		case 'a': if(ret+2<rt){ *ret++= hour<12 ? 'a' : 'p'; *ret++='m'; } else ret+=2; break;
		case 'A': if(ret+2<rt){ *ret++= hour<12 ? 'a' : 'p'; *ret++='M'; } else ret+=2; break; //ret+=hour<12 ? "AM" : "PM"; break;
		// b
		case 'd': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, day, 10, 2); break;
		case 'D': if(!eng){ if(ret+3<rt){ memcpy(ret, MTIME_MTDAYS_USE[((year-1970)*365+(year-1970+1)/4+doy+4)%7], 3); } ret+=3; } //  ret+=VString(MTIME_MTDAYS_USE[((year-1970)*365+(year-1970+1)/4+doy+4)%7]).Left(3); 
			else { if(ret+3<rt){ memcpy(ret, mtdays[((year-1970)*365+(year-1970+1)/4+doy+4)%7], 3); } ret+=3; }
			break;
				//ret+=VString(mtdays[((year-1970)*365+(year-1970+1)/4+doy+4)%7]).Left(3); break; // day name
/*		case 'F': if(!eng) ret+=MTIME_MTMONTH_USE[month-1]; else ret+=mtmonths[month-1]; break; // month name
*/		case 'g': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, hour-(hour>11 ? 12 : 0)); break;
		case 'h': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, hour-(hour>11 ? 12 : 0), 10, 2); break;
		case 'G': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, hour); break;
		case 'H': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, hour, 10, 2); break;
		case 'i': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, minute, 10, 2); break;
		//i
/*		case 'l': if(!eng) ret+=MTIME_MTDAYS_USE[((year-1970)*365+(year-1970+1)/4+doy+4)%7];
			else ret+=mtdays[((year-1970)*365+(year-1970+1)/4+doy+4)%7]; break; // day name
		case 'J': ret+=it.itos(day); break;
		case 'L': ret+=(year-2%4)? "0" : "1"; break;
*/		case 'm': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, month, 10, 2); break;
		case 'M': if(!eng){ if(ret+3<rt){ memcpy(ret, MTIME_MTMONTH_USE[month-1], 3); } ret+=3; }
				  else{ if(ret+3<rt){ memcpy(ret, mtmonths[month-1], 3); } ret+=3; }
				  break;
/*		//M
		case 'p':{ int d=(::time()-::time()%86400-tm+86400)/86400;
			if(!eng) if(d<3) ret+=MTIME_MTPDAYS_USE[2-d];
				   else ret+=MTIME_MTDAYS_USE[((year-1970)*365+(year-1970+1)/4+doy+4)%7];
			else if(d<3) ret+=mtdays[2-d];
				   else ret+=mtdays[((year-1970)*365+(year-1970+1)/4+doy+4)%7]; break; // day name
			break;}
*/	//	case 'n': ret+=it.itos(month-1); break;
		case 'O':
			if(timezone<=0){ if(ret<rt){ *ret='+'; } ret++; }
			ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, -timezone/60, 10, 2);
			ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, dstflag, 10, 2);
			break;
		case 'r': ret+=rpmf_date(ret, ret<rt ? rt-ret : 0, "D, d M Y H:i:s O", tm, gmt, eng, c); break;
		case 's': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, sec, 10, 2); break;
		case 't': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, day); break;
		case 'Y': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, year); break;
		case 'y': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, year%100); break;
		case 'w': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, ((year-1970)*365+(year-1970+1)/4+doy+4)%7); break;
		case 'z': ret+=prmf_itos(ret, ret<rt ? rt-ret : 0, doy); break;

/*
В строке формата распознаются следующие символы: 
B - время Swatch Internet 

I (заглавная i) - "1", если Daylight Savings Time, "0" - в противном случае.
//l ('L' в нижнем регистре) - день недели, буквенный, long; например, "Friday" 

//M - месяц, буквенный, 3 буквы; например, "Jan" 
O - Разница с временем по Гринвичу, в часах; например, "+0200" 
r - RFC 822 формат даты; например, "Thu, 21 Dec 2000 16:01:07 +0200" (введён в PHP 4.0.4) 

S - простой английский суффикс для дня (числа) месяца, 2 символа; т.е. "st", "nd", "rd" или "th"

T - установка Timezone/Часовой пояс на данной машине; например, "EST" или "MDT" 
U - секунды эпохи Unix Epoch (начиная с January 1 1970 00:00:00 GMT) 
w - день недели, числовой, т.е. от "0" (Sunday) до "6" (Saturday) 
W - ISO-8601 номер недели в году, недели начинаются с понедельника/Monday (введено в PHP 4.1.0) 
Z - смещение часового пояса, в секундах (т.е. от "-43200" до "43200"). Смещение часовых поясов к западу от UTC всегда отрицательное, а для поясов в востоку от UTC - всегда положительное.
*/
		default:
			if(*ln=='\\' && ln+1<to){ if(ret<rt) *ret=*(ln+1); ln++; ret++; }
			else{ if(ret<rt) *ret=*ln; ret++; }
		}
	}

	return ret-aret;
}
コード例 #7
0
ファイル: VString.cpp プロジェクト: mikelsv/opensource
VString PartLineOT(VString line, VString el){ // Get One, tvo part
	unsigned char *pos=line;
	if(!rtms(line.endu(), el, el, pos)){ return VString(); }
	return VString(pos+el.sz, line.endu()-pos-el.sz);
}
コード例 #8
0
ファイル: VString.cpp プロジェクト: mikelsv/opensource
VString PartLineIfO(VString line, VString el){ // Get One If found
	unsigned char *pos=line;
	if(!rtms(line.endu(), el, el, pos)){ return VString(); }
	return VString(line.uchar(), pos-line.uchar());
}
コード例 #9
0
ファイル: VString.cpp プロジェクト: mikelsv/opensource
VString PartLineFind(VString line, VString el){
	unsigned char *pos=line;
	if(!rtms(line.endu(), el, el, pos)){ return VString(); }
	return VString(pos, el);
}
コード例 #10
0
ファイル: VString.cpp プロジェクト: mikelsv/opensource
// PartLine
VString PartLine(VString line, VString &two, VString el){
	unsigned char *pos=line;
	if(!rtms(line.endu(), el, el, pos)){ two.Clean(); return line; }
	two.setu(pos+el.sz, line.endu()-pos-el.sz);
	return VString(line.uchar(), pos-line.uchar());
}