Ticket #81: ffindbug.btm

File ffindbug.btm, 2.7 KB (added by Anton Monroe, 6 weeks ago)
Line 
1 rem demonstrates bug in FFIND /R
2 setlocal
3 set BinFileN=`All_Characters`
4 if exist %BinFileN *del /q %BinFileN
5 rem write the file with Rexx to avoid problems with special characters
6 set RexxCmd=`Str = '';`
7 set RexxCmd=%RexxCmd `do ChrD = 0 to 255 ; Str=Str''d2c(ChrD) ; end ;`
8 set RexxCmd=%RexxCmd `call charout '`%BinFileN`', Str ;`
9 set RexxCmd=%RexxCmd `return stream('`%BinFileN`', 'c', 'CLOSE')`
10 set ret=%@rexx[%RexxCmd]
11 iff "%ret" ne "READY:" then
12 echo `Rexx returned `"%ret" `for file %BinFileN`
13 echo `Something went wrong`
14 quit 99
15 endiff
16 echo `file '`%BinFileN`' has been created. It is a string of all 256 characters.`
17 echo `Now search it with "FFIND /R /V /M /X" for each character.`
18 echo `It should find each character 'nn' at offset 'nn', but`
19 echo `it finds nothing after character 0A (LineFeed)`
20 gosub DoFFIND
21
22 set BinFileN=`All_Characters_except_LF`
23 if exist %BinFileN *del /q %BinFileN
24 set RexxCmd=`Str = '';`
25 set RexxCmd=%RexxCmd `do ChrD = 0 to 9 ; Str=Str''d2c(ChrD) ; end ;`
26 set RexxCmd=%RexxCmd `call charout '`%BinFileN`', Str ;`
27 set RexxCmd=%RexxCmd `return stream('`%BinFileN`', 'c', 'CLOSE')`
28 set ret=%@rexx[%RexxCmd]
29 iff "%ret" ne "READY:" then
30 echo `Rexx returned `"%ret" `for file %BinFileN`
31 echo `Something went wrong`
32 quit 99
33 endiff
34 set RexxCmd=`Str = '';`
35 set RexxCmd=%RexxCmd `do ChrD = 11 to 255 ; Str=Str''d2c(ChrD) ; end ;`
36 set RexxCmd=%RexxCmd `call charout '`%BinFileN`', Str ;`
37 set RexxCmd=%RexxCmd `return stream('`%BinFileN`', 'c', 'CLOSE')`
38 set ret=%@rexx[%RexxCmd]
39 iff "%ret" ne "READY:" then
40 echo `Rexx returned `"%ret" `for file %BinFileN`
41 echo `Something went wrong`
42 quit 99
43 endiff
44 echo.
45 echo `=============================================`
46 echo `file '`%BinFileN`' has been created. It is a string of all characters except 0A`
47 echo `without a character 0A, FFIND starts the reverse search at character 0D`
48 echo `If I delete the character 0D also, it finds nothing at all`
49 gosub DoFFIND
50 quit
51
52 :DoFFIND
53 echo.
54 do chD = 0 to 255
55 set chX=%@right[2,0%@convert[10,16,%chD]]
56 echo `search for character `%chX`h, FFIND says:`
57 ffind /r /v /m /x"%chX" %BinFileN
58 echo `---------------------------------------------`
59 enddo
60