Rev 659 | Blame | Compare with Previous | Last modification | View Log | Download
;PROC findlabel(PBYTE labeltext);{;VAR PBYTE plabel; //ьхЄър т ЄрсышЎх чрърэўштрхЄё эєы╕ь; _hash = hash(labeltext)&0x3ff;; _labelN = _labels0; //_labelpage[(UINT)(_hashhigh&_LABELPAGEMASK)]; //set page (todo ъръ юяЁхфхышЄ№? ёшёЄхьэ√щ ьръЁюё?); _plabel_index = _labelshift[_hash];; WHILE (_plabel_index != _LABELPAGEEOF) { //яюър Ўхяюўър ьхЄюъ эх чръюэўшырё№; plabel = &_labelN[_plabel_index]; //(PBYTE)((POINTER)_labelN + (POINTER)_plabel_index);; _plabel_index = *(PUINT)(plabel);; plabel = &plabel[+sizeof(UINT)]; //(PBYTE)((POINTER)plabel + (POINTER)2);; IF (strcp((PCHAR)labeltext, (PCHAR)plabel)) { //ьхЄър эрщфхэр; _plabel_index = (UINT)(plabel - _labelN) + _labellen; //тъы■ўр 0 //єърчрЄхы№ эр эрўрыю фрээ√ї ёючфртрхьющ ьхЄъш (эрфю юс чрЄхы№эю чряюьэшЄ№!); BREAK; //яюьэшЄ _plabel_index эрўрыр фрээ√ї эрщфхээющ ьхЄъш; };; }; //хёыш эх эрщфхэю, Єю _plabel_index==_LABELPAGEEOF;}findlabel;LD HL,_labels0;LD [_labelN],HLLD de,[findlabel.A.]xor ald h,ald l,afindlabel.hash0.add hl,hladd a,lld l,ald a,[de]inc deor ajp nz,findlabel.hash0.LD A,hAND 3LD H,ALD [_hash],HLadd hl,hlLD de,_labelshiftADD HL,DELD e,[HL]INC HLLD d,[HL]findlabel.B.ld a,dand einc a ;de==_LABELPAGEEOF?jr z,findlabel.returndeLD HL,_labels0;[_labelN]ADD HL,DELD e,[HL]INC HLLD d,[HL]inc hl;LD [findlabel.plabel],HLfindlabel.A.=$+1ld bc,0findlabel.strcp0.ld a,[bc] ;s2cp [hl] ;s1jr nz,findlabel.B.inc hlinc bcor ajp nz,findlabel.strcp0.;hl=findlabel.plabel+_labellen;findlabel.plabel=$+1;LD HL,0LD DE,-_labels0;-[_labelN]add HL,DE;LD DE,[_labellen];ADD HL,DEretfindlabel.returndeex de,hlret