Hollosi Information eXchange /HIX/
HIX CODER 113
Copyright (C) HIX
1998-05-21
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 Re: WinWord header ? (mind)  21 sor     (cikkei)
2 Re: int 21 ReadLN [DOS] (mind)  30 sor     (cikkei)
3 Re: A Do:mo:lki algoritmus (mind)  131 sor     (cikkei)
4 Bitsorozatba bitsorozat kereses. Eles pelda!!! (mind)  76 sor     (cikkei)
5 Re: pedig fejlesztek rajta (#111) (mind)  23 sor     (cikkei)
6 Windows hook (mind)  35 sor     (cikkei)
7 Re: [DOS] int 21 ReadLN (mind)  65 sor     (cikkei)
8 LZW szabadalom (mind)  12 sor     (cikkei)
9 Mindenfele (mind)  57 sor     (cikkei)
10 re:[DOS] int 21 ReadLN (mind)  22 sor     (cikkei)

+ - Re: WinWord header ? (mind) VÁLASZ  Feladó: (cikkei)

Hi!

On Tue, 19 May 1998  wrote:
> WinWord documentumrol szeretnem megtudni, hogy Documentumkent
> vagy Sablonkent lett-e elmentve, anelkul hogy a WinWord rendelkezesemre
> allna az adott gepen.

A DOC-on belul a WordDocument objektum 0xa offsetjen levo byte 0. bitje ha
0 akkor document (doc), ha 1 akkor sablon (dot). A WordDocument objektum
helyenek korrekt meghatarozasa nem egyszeru dolog, de altalaban (en meg
nem talakoztam ellenpeldaval) a fejlec utan van rogton, a fejlec 0x200
hosszu (elmeletileg ez is valtozhat) tehat a vizsgalando byte a file
kezdetetol szamitva a 0x20a offseten van.

> Ugy tudom minden Word verzionak mas a header-e. Tehat elso lepesben a
> verzio szamot kell megtudni belole, aztan johet a megfelelo helyen a jelzo
> bit keresese.
Ha jol tudom, akkor ez ugyanott van minden verzioban (word6, word'97
biztos).

Szilard
+ - Re: int 21 ReadLN [DOS] (mind) VÁLASZ  Feladó: (cikkei)

On 19 May 98 at 15:38,  > wrote:

>     mov dx,offset ide
>     mov cx,8       <- max ennyi karakterk olvas be
>     xor bx,bx       <- billentyuzetrol olvas
>     mov ah,3fh
>     int 21h
> A hiba: ha bekeresnel tobb, mint 8 karakter irok be,
> akkor a kovetkezo meghivasnal egybol kilep s visszaadja
> az elozoleg beirt felesleget.

Ez egyaltalan nem hiba, igy kell mukodnie. A standard input az egy
file-nak tekintendo dolog. Ezt a unix-tol irigyelte el az, aki a
handle-s int21 fuggvenyeket kitalalta (talan maga Bill Gates?). Az
egy kulon bonusz (termeszetesen unixokon is), hogy ha az stdin eppen
a billentyuzet, nem pedig egy diszk file vagy pipe vagy eszkoz,
akkor az olvasas befejezodik (visszater) az <Enter> lenyomasakor,
akkor is, ha nem volt meg a kert szamu betu. Ha viszont a
programodat standard input atiranyitassal futtatod, akkor a fenti
rutin gyonyoruen visszater mindig 8 betuvel, ha eppen kozepre esik a
CrLf (13,10), akkor is. (Unixokon is hasonlokeppen, csak ott persze
CrLf helyett csak Lf van.)

Tehat ha readln-t akarsz csinalni, azt ennel kicsit bonyolultabbra
kell irnod (pl. pufferelni kell), foleg, ha standard input
atiranyitassal is akarod, hogy jol mukodjon a programod.

István
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --
+ - Re: A Do:mo:lki algoritmus (mind) VÁLASZ  Feladó: (cikkei)

No akkor az algoritmus masodik fele:

Egyetlen uj keresovektor hozzaadasaval tudunk olyan feltetelt is
nezni, ami a pontos illeszteshez kepest elvisel egyetlen hibat. Ez a
hiba lehet szubsztitucio (betu helyett valami mas), inzertalas (egy
betuvel tobb van valahol a stringben) vagy torles (egy betu hianyzik
valahonnan).

Az elv az, hogy a pontos vektor mindegyik betunel atorokitodik az
1hibas vektorba megfelelo hibaszituaciok feltetelezesevel, utana
viszont mar pontosan kell folytatodnia, hiszen csak 1 hibat engedtunk
meg.

A pontosabb reszletezes a rutin kommentjeibol olvashato ki, remelem,
ertheto lesz minden, nem irom le itt meg egyszer. A rutin rovidebb,
mint a hozzairt komment :))

A rutinhoz ugyanaz a BuildCVTable tartozik, amit tegnap kozoltem.

; Shift-AND algoritmus (Udi Manber & Sun Wu) Byte 1992 nov.
; One Substitution or Insertion or Deletion
FuzzySearch proc far
; DS:SI= szoveg, amiben keresni kell
;    BX= szoveg hossza
; ES:DI= CVTable                        (BuildCVTable =in=out)
;    CX= keresendo string hossza 1..32  (BuildCVTable =in=out)
;
; ki:   CY=nc, ha talalt. Z=nz, ha pontosat, =z, ha 1hibasat talalt
;
        xor     edx,edx
        stc
        rcr     edx,cl          ; leallunk ilyen hossz utan

;; MSJ szerint:
;;;;;;; mov     ebp,80000000h   ; 1 hibaval egyezo sub-stringek
;;;;;;; mov     ecx,80000000h   ; pontosan egyezo sub-string(ek)
;; szerintem:
        xor     ebp,ebp         ; 1 hibaval egyezo sub-stringek
        xor     ecx,ecx         ; pontosan egyezo sub-string(ek)

        mov     ax,bx
        test    ax,ax
        jz      fzzV
fzzS:
        xor     bh,bh
        mov     bl,[si]
        inc     si
        shl     bx,2            ; pointer CVT-be: ilyen poziciokban
                                ; allhat ez a betu

; pontos illesztes ugyanugy alakul, mint elobb:
;       NEWecx =
; elozo pontos sub-stringek novekszenek tovabb, ha lehet:
;               (ecx >> 1) and cv
; valamint kezdodhet egy 1 hosszusagu sub-string, ha lehet:
;            or (80000000 and cv)
;
; nem pontos illesztes keresovektora:
;       NEWebp =
; OROKLODES
; - elozo 1hibas sub-stringek hosszabbodnak, ha a folytatas pontos:
;               (ebp >> 1) and cv
; SUBSZTITUCIO
; - vagy most valik 1hibassa valami, aminek az eleje pontos volt,
;   most pedig subst:
;            or (ecx >> 1) "and 111111.."
; - es meg kezdodhet egy 1 hosszusagu 1hibas sub-string, most meg
;   teljes hosszaban subst:
;            or 80000000
; INZERTALAS
; - vagy most valik 1hibassa valami, aminek az eleje pontos volt,
;   most insert:
;            or ecx
; TORLES
; - vagy aminek az eleje pontos volt, most is pontos, utana pedig
;   delete:
;            or (NEWecx >> 1)
;
;                             p=abcd      8421                   8421
;                                         abcd                   abcd
;                       insertion:     a  1        deletion:  a  1
;                                      b   1                  b   11
;                                      c    1              -- d     1
;                                  ++ I     1                 e
;                                      d     1
;                                      e
;
        shr     ebp,1           ; nem-pontos keresovektor oroklodes
        and     ebp,es:[di+bx]  ; folytatodott a match?

        or      ebp,ecx         ; insert?

        stc     ; 80000000 lesz ; itt is kezdodhet egy pontos match?
        rcr     ecx,1           ; pontos keresovektor update

        or      ebp,ecx         ; ha most rossz is, eddig jo volt

        and     ecx,es:[di+bx]  ; ez a betu lehet-e ezeken a helyeken
                ; =NEWecx       ; (vagyis meddig jo a pontos match?)

        mov     ebx,ecx
        shr     ebx,1
        or      ebp,ebx         ; delete?

        test    ebp,edx
        jnz     fzzFound        ; teljes hosszusagban jo volt
                                ;       (max. 1 hibaval)!
        dec     ax
        jnz     fzzS
fzzV:
        stc
        ret

fzzFound:
        test    ecx,edx         ; nz: pontos illesztes van
        clc                     ; z: pontatlan (1hibas) illesztes van
        ret
FuzzySearch endp

Termeszetesen itt is megoldhatoak csupan a CV tabla modositasaval
olyan dolgok, hogy egy adott helyen nem csak egy betu, hanem mondjuk
egy betuintervallum allhat. Ami ennek a 'fuzzy'-saga, az az, hogy a
tevesztes stb. viszont elore meg nem hatarozott helyen lehet, es
maximum egyszer csupan.

Tovabbi keresovektor hozzaadasaval hasonlokeppen megoldhato az is,
hogy 2 kulonbseget is elviseljen a kereses, stb.

István
--  Istvan Marosi  --  http://www.sch.bme.hu/~marosi  --
--  Recosoft Ltd.  --  mailto:  --
+ - Bitsorozatba bitsorozat kereses. Eles pelda!!! (mind) VÁLASZ  Feladó: (cikkei)

Hi Coders!

> > A problema: Nem ismerem a keresendo bitsorozatot!!!
> > Tehat a legtobb ismetlodo bitsorozat kell megtalalnia es
> > le kell fedje az teljes (bit)intervallumot.
>
> [ Mit ertesz ezen, hogy lefedni a teljes intervallumot?]

> >Tehat a legtobb ismetlodo bitsorozat kell megtalalnia es
>                  ********************
> >le kell fedje az teljes (bit)intervallumot.
> Ezt (*)  valahogy definialnod kellene, nekem nem sikerult semmi
> ertelmeset kitalalni :)

> Bit alapu tomoritesen torod a fejed ?
Nem egeszen. :)))

Ime egy eles bitsorozat (termeszetesen az eredeti nincs tordelve):

Arra is kivancsi lennek, hogyan lehet olyan biteket keresni
amelyek EGYENLO tavolsagra helyezkednek el.

001001001101101011001011001001101011111101001101101101011011011
001011001111001111001111101101101101011001001101111101001011011
111001011101011111101001101011101101011111111101011111001011001
101101011111011111101101001011111011011011011001001101101111111
001011101101111011101001111001111001111111111011001101011111011
111001101101011011011001011111101101011011001111011101001111101
111101101101101011111101011011101011111111001001001111111111101
101001101111111011011011011101101101111011011001111101011111001
101101011111101111101101011111101101111001101101001111001111001
111001101111001011001011111111101101111111001001011111001111011
001111011111011011001101101001111111011001111101001111011011101
111001001111111111101101111101111111111001011111011101101111101
011011011111001111011111111101111101111011111011111101001111001
011001111101011111111111011011101011111011111011101111001011111
001101111111001011001101111011111001011101011101101101101011001
101101001101111011011011111011111001011101011011001111111111101
101011001101101111101101001111101111111111011011111101101011101
011111001111011011011111111111111111011111011001111111001111001
101111101111101011111011111101111101011011111101001111111111011
001101101101101111101111011001101011111111001011011101011011111
001101101111011111001101011111101101111101111111111101101011111
101111011101111011001001111111111111011111111001001101101111001
111101001111111011101001111111111111011011011101011111001011011
111111001101101111111111001101111001011101111101111111011011001
001101111111011011111011011001111001111011001101011101001111101
101101111111101011111101001111101101011011111111011111101111101
011001101101111111011111101001101111011111101011101101001111011
001011111111111111011101111101101001111011011101011111011011111
111101111111011011111011001001111001111101011111001111001011101
111001101101101111001011101011111111111001001101111111111111111
101111111101101011011101011101101011111101111111001101011011011
001101111111101011111101111011101011011111101101001101011011111
011101101101111111011111101001111111011011111011011101111011101
111111111111101111101001011011101011111101001111111111101111001
111111001101111111001111011101111011111101001001101111011011101
011101011111011111111101011111111001111011101001001101111011011
101101001111101111001101011101111001011001111011111101111011101
001111011111011111111101101011111111011111101011101101111111011
111001011111001011011011011111101101111111101011011111011111101
011101011101011111111011101001111111111101111101111111001111011
111111011101011111101011111011111101011101011111111111011011011
101111111101011011101011111101101001111111001111101111011111011
111101111101101111011101001011111101011101001101101101101011011
011111111101011011001111111011111101111011111001101101011111001
111011101111101111011101011101101011011011101101001111111111111
011111011111111111101101011001101111011101011111111101101011101
111101111111011011111001001011111011111111001111111101101111011
011011011111101011111111011011101111111101111101011111101011011
011011111101111011101111101111111111111011001111111111011111001
001101001101111111011001101101101111011101111011111101111111101
101001111101111111111101001011111111111011111111001111101111111
101111011111001111101011001001101111011101101111001111111111111

udv: XiX
+ - Re: pedig fejlesztek rajta (#111) (mind) VÁLASZ  Feladó: (cikkei)

> Felado :  [United States]

> a windows NT-rol irtak tegnap:
> > gyonyoruen, stabilan megy, pedig fejlesztek rajta.

> es a kerdes: mit lehetne tenni?

Ha szigoruan a tapasztalatoknal maradunk: akar tobb honapig is mukodik
az NT ugy, hogy kozben millioszor fordit az ember, aztan mondjuk valahol
page fault-ot sikerul osszehoznia elrontott mutatokkal, egyebekkel, vagy
akar a GDI-ben hibazik valamivel - tenyleg eleg stabil a (VC5) debug -
szimpla, "user mode" programokkal nehez kiakasztani a rendszert.

Otletek, mivel is lehet megbenitani az NT-t:
- meg kell emelni egy taszk prioritasat, ami folyamatosan dolgozik, pl.
  fut benne egy ciklus, ami rajzol a kepernyore, vagy ilyesmi
- olyan CPL-t (Control Panel Applet) irni, ami kiakad - ez az Explorer
  ciklikus lefagyasat es automatikus ujraindulasat jelenti. :-)  Azert
  ki lehet szallni belole...

Mas most nem is jut eszembe.
--
Tibor
+ - Windows hook (mind) VÁLASZ  Feladó: (cikkei)

Sziasztok!

Delphi 3 es win95 alatt programozgatok.

Szertnem kiprobalni a windows hook-ot. Irtam egy apro
DLL-t, amiben van egy egyszeru hookproc:

function HookProc( code:Integer; wparam:WPARAM; lparam:LPARAM ):
LRESULT stdcall; export;
;

Ha ez igy van, akkor latszolag minden rendben van, csak igy nem
csinal semmit, es nem ez a celom. Gondoltam, hogy az else agban
egy tombbe irnek dolgokat, amire a DLL-ben egy globalis pointer
mutat, es ennek egy foprogramban levo tomb cimet atadom a DLL
egy masik eljarasaban. Ekkor kezdodnek a gondok.
Ha a SetWindowsHookEx eljarasban WH_JOURNALRECORD
parametert adok, akkor latszolag minden rendben van, de ekkor
a HookProc csak a mouse es a keyboard eventeket kapja meg,
nekem viszont a tobbi is kellene ( WM_INITDIALOG, WM_COMMAND
stb ). De ha WH_ akarmi mas parameterrel hivom meg, akkor
az elso egerklick-nel jobbik esetben csak a programom hasal el,
rosszabbik esetben a kernel32 is, es total fagyas lesz belole.
Ha tomb helyett egy DLL-ben globalis file-t hasznalok, akkor is
hasal.

Mit rontok el?
Elore is koszi.

Udv.Csaboca.
+ - Re: [DOS] int 21 ReadLN (mind) VÁLASZ  Feladó: (cikkei)

>    mov dx,offset ide
>    mov cx,8          <- max ennyi karakterk olvas be
>    xor bx,bx         <- billentyuzetrol olvas
>    mov ah,3fh
>    int 21h
>A hiba: ha bekeresnel tobb, mint 8 karakter irok be,
>akkor a kovetkezo meghivasnal egybol kilep s visszaadja
>az elozoleg beirt felesleget.

    Igen, itt te azt kérted tôle, hogy egyszeri hívásra
    csak 8 karaktert adjon vissza abból amit te beírtál
    neki összesen és így is történt...  :)

Ha azt szeretnéd, hogy egy hívással beolvashassad az
összes begépelt karakteredet, akkor én a 3F függvény
helyett inkább a 0A függvényt javasolnám neked. (Én a
3F függvényt fôleg csak file olvasásra szoktam használni.)

A 0A függvény MAXIMUM CSAK 255 KARAKTERT TUD EGYSZERRE BEOLVASNI;
megvárja míg meg nem nyomják az ENTER billentyüt és csak
utána tér vissza. A 3F függvény megengedi, hogy akár 255
byte hosszú stringet beírj, még akkor is ha csak nyolcat
kértél; de ha ennek a függvénynek pl. megadod, hogy csak
40 karaktert szeretnél beolvasni, akkor nem fogsz tuni
hosszabb stringet beírni, hanem csak 40 karakterest vagy
rövidebbet.

Használata:

    AH    <= 0A
    DS:DX <= Buffer pointer

A <Buffer pointer> elsô byte-ja az azt mondja meg a függvénynek, hogy
mennyi karaktert kell beolvasni maximum. Amikor a függvény visszatér,
akkor a beolvasott szöveg a DS:DX-tôl számolt második byte az azt
mondja meg, hogy összesen milyen hosszú string-et sikerűlt beolvasni.
Tehát ha ki akarod olvasni a Buffer-bôl a string-et, akkor a
DS:DX-tôl számított harmadik karaktertôl kezdve kezdjed olvasni az
adatokat.

Példa:

    mov     di,offset ide   ; Most a di-ben van a buffer címe.
    mov     [di],10         ; Maximum ennyi karakterk akarok
                            ; beolvasni.
    mov     dx,di           ; A Buffer címnek a dx-ben kell lennie.
    mov     ah,0ah
    int     21h
                            ; Kész!
    mov     ch,[di]         ; A ch tartalmazza azt, hogy mennyi
                            ; karaktert akartam MAXIMUM beolvastatni.
    mov     cl,[di+1]       ; A cl tartalmazza azt, hogy mégis
                            ; mennyi karaktert írtam be.
    add     di,2            ; Most a di a beolvasott szöveg elejére
                            ; mutat.

God Bless You! * Good Bye!
> -----------------------------------------------
Zsolt N. P. from Dallas, TEXAS
mailto: 

_____________________________________________________________________
You don't need to buy Internet access to use free Internet e-mail.
Get completely free e-mail from Juno at http://www.juno.com
Or call Juno at (800) 654-JUNO [654-5866]
+ - LZW szabadalom (mind) VÁLASZ  Feladó: (cikkei)

>Lehet, hogy a Lemper-Ziv-Welch (LZW) algoritmusbol kellene
>kiindulnod, bar szabadalmaztatva van, ugyhogy csak penzert
>hasznalhato.

Egy pontositas. Meg kell vasarolni az algoritmus hasznalati jogat
ha a program amibe beepitik penzert kerul forgalomba.

Tehat pl freeware vagy GNU-GP licencu programokba szabadon beepitheto.
Mindenkepp, a copyright-t tulajdonost fel kell az algoritmus mellett
tuntetni.

szin.
+ - Mindenfele (mind) VÁLASZ  Feladó: (cikkei)

Hali !

Marosi Istvan irta:
> Lehet, hogy a Lemper-Ziv-Welch (LZW) algoritmusbol kellene
> kiindulnod, bar szabadalmaztatva van, ugyhogy csak penzert
> hasznalhato. Nem pont ezt csinalja (eredendoen tomoritesre talaltak
[...]
> Leirnam, hogy hogyan mukodik, de akkor a masik cikkel egyutt mar tuti
> tullepem a mai sorlimitet :(

Erre kivancsi lennek ! Egyszer megvolt nekem ez a leiras, de elszallt
egy cache buffer ki-nem-iras miatt keletkezett FAT hiba miatt. Viszont
kifejezetten erdekes volt, es nagyon szemleletes.
Nem is azert erdekel mert le akarnam programozni, de egy nagyon
"elegans" algoritmus !

----------
'Gabry' Gaabor irta :
> ekkor a visszadott ertek: 8 byte = "HAJRA LO"
> ezutan megint meghivom, nem var semmire,
> hibat nem jelezve kilep, s visszadja:
> 4 byte = "KI"#13#10
> Nem ertem!!!! Segitseg!!!!

Igazan csak "kohog a bolha" szinten lenne apro otletem, hogy merre
nezelodj,
de utolso kodos emlekeim szerint a bill.puffer eppen nyolc byte hosszu
alapertelmezes szerint. En arra gondolnek, hogy a hibad valahol ezzel
fugg ossze.
Bocs hogy beleszoltam, ennyire futotta tolem. :-(

---------
BeGa  irta:
> Ugy tudom minden Word verzionak mas a header-e. Tehat elso lepesben a
> verzio szamot kell megtudni belole, aztan johet a megfelelo helyen a jelzo
> bit keresese.

Amennyire tudom, a W6 es W95 ugyanazt a W6 formatumu DOC filet
hasznalja, persze a verzio azert jelezve van. Ha megvan a HIX CD
kerestess benne a gurukban Word formatumra, egyszer valaki adott egy
linket egy olyan site-ra, ahol egy _viszonylag_ jo formatum leiras van.
(a pontosat ugyanis nem adja ki a M$)

-------------

A MODERATOROK / LISTA gazda figylemebe !

Valami nem stimmel a coder lista sortores hosszaval !
A level vegen a szabvanyos osszefoglalo keretenek jobbszele a baloldalra
van torve. (hard CR-rel!) kb 2 char-ral szelesebbre kellen venni !

Vagy lehet hogy ez csak nalam jelenik meg igy ?
(Nem hiszem mert meg boven lenne hely az ablakban, illetve ASCII-ban is
igynez ki.)
A GURU vegen levo ugyanilyen osszefoglalo jol jelenik meg.

Csiszar  L.
+ - re:[DOS] int 21 ReadLN (mind) VÁLASZ  Feladó: (cikkei)

>Felado :  [Hungary]
>  A kovi rutin egy readln lenne, csakhogy nem ertem :(
...
>    xor bx,bx         <- billentyuzetrol olvas
>    mov ah,3fh
>    int 21h
>A hiba: ha bekeresnel tobb, mint 8 karakter irok be,
>akkor a kovetkezo meghivasnal egybol kilep s visszaadja
>az elozoleg beirt felesleget.
...
>Nem ertem!!!! Segitseg!!!!
Mit nem lehet ezen erteni ?
A 3f funkcio file olvasas.
Marpedig egy szekvencialis olvasastol az ember igenis elvarja, hogy ne csak
az elso n byteot adja vissza tobbszori meghivaskor, hanem szep sorban az
egesz file-t, es utana jelezze, ha mar nincs mit visszaadni.
Ha 0-t adsz meg file azonositonak, akkor egyszeruen stdin-rol olvas, mas
kulonbseg nincs.
Tanacs: Vagy tobbszori olvasassal uritsd ki a buffert miutan megkaptad a
kivant infot, esetleg adj hibauzenetet, ha tobbet kapsz mint akarsz.

A'kos

AGYKONTROLL ALLAT AUTO AZSIA BUDAPEST CODER DOSZ FELVIDEK FILM FILOZOFIA FORUM GURU HANG HIPHOP HIRDETES HIRMONDO HIXDVD HUDOM HUNGARY JATEK KEP KONYHA KONYV KORNYESZ KUKKER KULTURA LINUX MAGELLAN MAHAL MOBIL MOKA MOZAIK NARANCS NARANCS1 NY NYELV OTTHON OTTHONKA PARA RANDI REJTVENY SCM SPORT SZABAD SZALON TANC TIPP TUDOMANY UK UTAZAS UTLEVEL VITA WEBMESTER WINDOWS