/* * $Id$ */ //******************************************************************* // creader.prg: A creader oszt ly implement ciąja. // 1999, Csisz r Levente #include "objgen.ch" #define _CREADER_PRG_ #define _IMPLEMENT_ONEW_ #include "creader.och" #include "ctoken.ch" //******************************************************************* #include "cr_lf.ch" //******************************************************************* implement read() // Itt ez kell ‚s nem a readItem() local c,c2,w c:=super:read() if (valtype(c)=="C") if (c==CHAR_CR) c2:=super:read() if (valtype(c2)=="C" .and. c2==CHAR_LF) w:=aclone(CTK_EOL) w[2]:=c+c2 w[3]:=this:pos c:=w this:line++ this:pos:=1 else super:unread(c2) endif elseif (c==CHAR_LF) w:=aclone(CTK_EOL) w[2]:=c w[3]:=this:pos c:=w this:line++ this:pos:=1 elseif (this:pos!=0) // Ez kell!!!! Ezzel jelzi, hogy a sorra // visszal‚ptek, ‚s Ągy a pozĄcią nem // ismert. this:pos++ endif endif return c //******************************************************************* implement unread(item) // A line-t ‚s a pozĄciąt vissza llĄtja, az EOS-t ‚s a BOS-t viszont // nem figyeli. (Ezt az lreader-nek kellene megtennie, ha // szks‚ges.) local str /* if (valtype(item)=="C") if (CHAR_LF$item) // Itt sor sz ml ląt ugyan vissza lehet  llĄtani, de a // pozĄciąt nem, mert ahhoz tudni kellene, milyen hosszŁ // volt az el“z“ sor. // Mj.: Ez lehets‚ges lenne, ha a CR_LF-be belekądoln nk a // sor hosszt. Ekkor persze token lenne ‚s nem dupla // karakter. this:pos:=0 this:line-=xnumat(CHAR_LF,item) elseif (this:pos!=0) this:pos-=len(item) endif endif */ if (valtype(item)=="A") if (item[1]==CTKID_EOL) str:=item[2] this:pos:=item[3] this:line-- else str:=item endif else str:=item endif return super:unread(str) //******************************************************************* implement getFile() return this:name //******************************************************************* implement getLine() return this:line //******************************************************************* implement getPos() return this:pos //******************************************************************* implement oinit(name,errorStream) super:oinit(name,errorStream) this:line:=1 this:pos:=1 return this //*******************************************************************