Module: D:\SOURCE\IFBG\ifbg.cpp Group: 'DGROUP' CONST,CONST2,_DATA,_BSS Segment: _TEXT PARA 00000851 bytes Comdat: int near charEqual( char, char, int ) SEGMENT ANY '_TEXT' 0000001e bytes #include #include #include #include #include #include #include inline int charEqual(char c1, char c2, int i) { return c1==c2 || (i && toupper(c1)==c2); 0000 38 d0 cmp al,dl 0002 74 13 je L92 0004 85 db test bx,bx 0006 74 13 je L93 0008 30 e4 xor ah,ah 000a e8 00 00 call toupper_ 000d 89 c3 mov bx,ax 000f 88 d0 mov al,dl 0011 30 e4 xor ah,ah 0013 39 c3 cmp bx,ax 0015 75 04 jne L93 0017 b8 01 00 L92 mov ax,0001H 001a c3 ret 001b 31 c0 L93 xor ax,ax } 001d c3 ret No disassembly errors ------------------------------------------------------------ 0000 int near match( char const far *, char const far *, int ): 0000 56 push si 0001 57 push di 0002 55 push bp 0003 89 e5 mov bp,sp 0005 83 ec 16 sub sp,0016H 0008 89 46 ee mov -12H[bp],ax 000b 89 56 f2 mov -0eH[bp],dx 000e 89 5e ec mov -14H[bp],bx 0011 89 4e f0 mov -10H[bp],cx int match(const char *s, const char *ss, int ignoreCase) { int sl=strlen(s); 0014 89 c7 mov di,ax 0016 8e c2 mov es,dx 0018 b9 ff ff mov cx,0ffffH 001b 31 c0 xor ax,ax 001d f2 ae repne scasb 001f f7 d1 not cx 0021 49 dec cx int ssl=strlen(ss); 0022 8b 7e ec mov di,-14H[bp] 0025 8e 46 f0 mov es,-10H[bp] 0028 89 cb mov bx,cx 002a 89 4e fc mov -4H[bp],cx 002d b9 ff ff mov cx,0ffffH 0030 31 c0 xor ax,ax 0032 f2 ae repne scasb 0034 f7 d1 not cx 0036 49 dec cx int si=0; 0037 31 d2 xor dx,dx 0039 89 4e fe mov -2H[bp],cx 003c 85 db test bx,bx 003e 0f 8e e1 00 jle L17 while(si=0; i--) { 021d 8b 5e ec L25 mov bx,-14H[bp] 0220 8b 4e f0 mov cx,-10H[bp] 0223 83 c3 b0 add bx,0ffb0H 0226 49 dec cx 0227 89 5e ec mov -14H[bp],bx 022a 89 4e f0 mov -10H[bp],cx 022d 85 c9 test cx,cx 022f 7d 16 jge L27 0231 eb 63 jmp L32 do { 0233 8b 56 f0 L26 mov dx,-10H[bp] 0236 c1 e0 02 shl ax,02H 0239 01 d0 add ax,dx 023b c1 e0 04 shl ax,04H 023e 05 00 00 add ax,offset char far string[][80] 0241 8c 56 ee mov -12H[bp],ss 0244 89 46 ec mov -14H[bp],ax 0247 8b 46 ec L27 mov ax,-14H[bp] 024a 89 46 f2 mov -0eH[bp],ax 024d 8b 46 ee mov ax,-12H[bp] 0250 89 46 f4 mov -0cH[bp],ax 0253 8b 4e f4 L28 mov cx,-0cH[bp] if(match(line[l],string[i],ignoreCase)==-1) { 0256 36 8b 1e 00 00 mov bx,ss:int far ignoreCase 025b 89 f8 mov ax,di 025d 8c d2 mov dx,ss 025f 88 c4 mov ah,al 0261 53 push bx 0262 30 c0 xor al,al 0264 8b 5e f2 mov bx,-0eH[bp] 0267 05 00 00 add ax,offset char far line[][256] 026a e8 00 00 call int near match( char const far *, char const far *, int ) 026d 3d ff ff cmp ax,0ffffH 0270 75 1a jne L31 l = l==0 ? MAXLINES : l-1; 0272 85 ff test di,di 0274 75 05 jne L29 0276 bf 32 00 mov di,0032H 0279 eb 01 jmp L30 027b 4f L29 dec di span++; } else break; 027c 8b 4e fc L30 mov cx,-4H[bp] 027f 41 inc cx } while(span<=maxBlockSpan); 0280 36 8b 16 00 00 mov dx,ss:int far maxBlockSpan 0285 89 4e fc mov -4H[bp],cx 0288 39 d1 cmp cx,dx 028a 7e c7 jle L28 if(span>maxBlockSpan) break; } 028c 8b 46 fc L31 mov ax,-4H[bp] 028f 36 3b 06 00 00 cmp ax,ss:int far maxBlockSpan 0294 7e 87 jle L25 if(span<=maxBlockSpan) { 0296 8b 46 fc L32 mov ax,-4H[bp] 0299 36 3b 06 00 00 cmp ax,ss:int far maxBlockSpan 029e 7f 50 jg L34 printf("%s:\n",filename); 02a0 8b 7e ea mov di,-16H[bp] 02a3 57 push di 02a4 8b 46 e8 mov ax,-18H[bp] 02a7 50 push ax 02a8 68 00 00 push seg L94 02ab 68 02 00 push offset L95 for(int s=0; s ...\n"); 0574 68 00 00 push seg L94 0577 68 47 00 push offset L104 057a e8 00 00 call printf_ 057d 83 c4 04 add sp,0004H printf(" -i Ignore case\n"); 0580 68 00 00 push seg L94 0583 68 80 00 push offset L105 0586 e8 00 00 call printf_ 0589 83 c4 04 add sp,0004H printf(" -r Recurse directories\n"); /*printf(" -o search string order is important\n");*/ 058c 68 00 00 push seg L94 058f 68 96 00 push offset L106 0592 e8 00 00 call printf_ 0595 83 c4 04 add sp,0004H printf(" -bs# block span. (default=1)\n"); 0598 68 00 00 push seg L94 059b 68 b4 00 push offset L107 059e e8 00 00 call printf_ return -1; } 05a1 b8 ff ff mov ax,0ffffH 05a4 83 c4 04 add sp,0004H 05a7 e9 9e 02 jmp L91 char filename[256]=""; 05aa b9 80 00 L61 mov cx,0080H 05ad 8d be 28 fe lea di,-1d8H[bp] 05b1 8c d0 mov ax,ss int recurse=0; 05b3 31 d2 xor dx,dx 05b5 8e c0 mov es,ax 05b7 8e d8 mov ds,ax 05b9 be 00 00 mov si,offset char const far int near main( int, char far * far * )::.0::__staticinit[] 05bc 89 56 7a mov +7aH[bp],dx 05bf f3 a5 repe movsw while(*++argv) { 05c1 c5 5e 7c L62 lds bx,dword ptr +7cH[bp] 05c4 83 c3 04 add bx,0004H 05c7 8b 07 mov ax,[bx] 05c9 8b 57 02 mov dx,+2H[bx] 05cc 89 5e 7c mov +7cH[bp],bx 05cf 85 d2 test dx,dx 05d1 75 06 jne L63 05d3 85 c0 test ax,ax 05d5 0f 84 9c 01 je L81 if(argv[0][0]=='-') { 05d9 89 de L63 mov si,bx 05db 8b 34 mov si,[si] 05dd 8e da mov ds,dx 05df 80 3c 2d cmp byte ptr [si],2dH 05e2 0f 85 d8 00 jne L72 05e6 b8 00 00 mov ax,seg L94 if(strcmp(argv[0],"-i")==0) 05e9 bf d6 00 mov di,offset L108 05ec 8e c0 mov es,ax 05ee a6 cmpsb 05ef 75 11 jne L64 05f1 4f dec di 05f2 4e dec si 05f3 b9 ff ff mov cx,0ffffH 05f6 31 c0 xor ax,ax 05f8 f2 ae repne scasb 05fa f7 d1 not cx 05fc 29 cf sub di,cx 05fe f3 a6 repe cmpsb 0600 74 05 je L65 0602 19 c9 L64 sbb cx,cx 0604 83 d9 ff sbb cx,0ffffH 0607 85 c9 L65 test cx,cx 0609 75 09 jne L66 ignoreCase=1; 060b 36 c7 06 00 00 01 00 mov word ptr ss:int far ignoreCase,0001H 0612 eb ad jmp L62 else if(strcmp(argv[0],"-r")==0) 0614 8e 5e 7e L66 mov ds,+7eH[bp] 0617 89 de mov si,bx 0619 bf d9 00 mov di,offset L109 061c 8b 34 mov si,[si] 061e 8e 5f 02 mov ds,+2H[bx] 0621 a6 cmpsb 0622 75 11 jne L67 0624 4f dec di 0625 4e dec si 0626 b9 ff ff mov cx,0ffffH 0629 31 c0 xor ax,ax 062b f2 ae repne scasb 062d f7 d1 not cx 062f 29 cf sub di,cx 0631 f3 a6 repe cmpsb 0633 74 05 je L68 0635 19 c9 L67 sbb cx,cx 0637 83 d9 ff sbb cx,0ffffH 063a 85 c9 L68 test cx,cx 063c 75 08 jne L69 recurse=1; 063e c7 46 7a 01 00 mov word ptr +7aH[bp],0001H 0643 e9 7b ff jmp L62 else if(strncmp(argv[0],"-bs",3)==0) { 0646 6a 03 L69 push 0003H 0648 8e 5e 7e mov ds,+7eH[bp] 064b 8c c1 mov cx,es 064d 8b 07 mov ax,[bx] 064f 8b 57 02 mov dx,+2H[bx] 0652 bb dc 00 mov bx,offset L110 0655 e8 00 00 call strncmp_ 0658 85 c0 test ax,ax 065a 75 3c jne L71 maxBlockSpan=atoi(argv[0]+3); 065c c5 5e 7c lds bx,dword ptr +7cH[bp] 065f 8b 07 mov ax,[bx] 0661 8b 57 02 mov dx,+2H[bx] 0664 05 03 00 add ax,0003H 0667 e8 00 00 call atoi_ 066a 36 a3 00 00 mov ss:int far maxBlockSpan,ax if(maxBlockSpan<1 || maxBlockSpan>MAXLINES) { 066e 3d 01 00 cmp ax,0001H 0671 7c 07 jl L70 0673 3d 32 00 cmp ax,0032H 0676 0f 8e 47 ff jle L62 fprintf(stderr,"-bs must be between 1 and %d\n",MAXLINES); 067a 6a 32 L70 push 0032H 067c 68 00 00 push seg L94 067f 68 e0 00 push offset L111 0682 16 push ss 0683 68 24 00 push offset ___iob+24H 0686 e8 00 00 call fprintf_ return -1; } } else { 0689 b8 ff ff mov ax,0ffffH 068c 83 c4 0a add sp,000aH 068f 8d a6 80 00 lea sp,+80H[bp] 0693 5d pop bp 0694 5f pop di 0695 5e pop si 0696 5a pop dx 0697 c3 ret fprintf(stderr,"Unknown option: %s\n",argv[0]); 0698 c5 5e 7c L71 lds bx,dword ptr +7cH[bp] 069b 8b 47 02 mov ax,+2H[bx] 069e 50 push ax 069f 8b 17 mov dx,[bx] 06a1 52 push dx 06a2 68 00 00 push seg L94 06a5 68 fe 00 push offset L112 06a8 16 push ss 06a9 68 24 00 push offset ___iob+24H 06ac e8 00 00 call fprintf_ return -1; } } else { 06af b8 ff ff mov ax,0ffffH 06b2 83 c4 0c add sp,000cH 06b5 8d a6 80 00 lea sp,+80H[bp] 06b9 5d pop bp 06ba 5f pop di 06bb 5e pop si 06bc 5a pop dx 06bd c3 ret if(!filename[0]) { 06be 80 be 28 fe 00 L72 cmp byte ptr -1d8H[bp],00H 06c3 75 27 jne L75 strcpy(filename,argv[0]); 06c5 8c d0 mov ax,ss 06c7 8d be 28 fe lea di,-1d8H[bp] 06cb 8e c0 mov es,ax 06cd 57 push di 06ce 8a 04 L73 mov al,[si] 06d0 26 88 05 mov es:[di],al 06d3 3c 00 cmp al,00H 06d5 74 11 je L74 06d7 8a 44 01 mov al,+1H[si] 06da 83 c6 02 add si,0002H 06dd 26 88 45 01 mov es:+1H[di],al 06e1 83 c7 02 add di,0002H 06e4 3c 00 cmp al,00H 06e6 75 e6 jne L73 06e8 5f L74 pop di } else { 06e9 e9 d5 fe jmp L62 if(strings .... 007f 00 - . 0080 20 20 2d 69 20 20 20 20 L105 - -i 0088 20 49 67 6e 6f 72 65 20 - Ignore 0090 63 61 73 65 0a 00 - case.. 0096 20 20 2d 72 20 20 20 20 L106 - -r 009e 20 52 65 63 75 72 73 65 - Recurse 00a6 20 64 69 72 65 63 74 6f - directo 00ae 72 69 65 73 0a 00 - ries.. 00b4 20 20 2d 62 73 23 20 20 L107 - -bs# 00bc 20 62 6c 6f 63 6b 20 73 - block s 00c4 70 61 6e 2e 20 28 64 65 - pan. (de 00cc 66 61 75 6c 74 3d 31 29 - fault=1) 00d4 0a 00 - .. 00d6 2d 69 00 L108 - -i. 00d9 2d 72 00 L109 - -r. 00dc 2d 62 73 00 L110 - -bs. 00e0 2d 62 73 20 6d 75 73 74 L111 - -bs must 00e8 20 62 65 20 62 65 74 77 - be betw 00f0 65 65 6e 20 31 20 61 6e - een 1 an 00f8 64 20 25 64 0a 00 - d %d.. 00fe 55 6e 6b 6e 6f 77 6e 20 L112 - Unknown 0106 6f 70 74 69 6f 6e 3a 20 - option: 010e 25 73 0a 00 - %s.. 0112 4d 61 78 69 6d 75 6d 20 L113 - Maximum 011a 25 64 20 73 74 72 69 6e - %d strin 0122 67 73 20 63 61 6e 20 62 - gs can b 012a 65 20 73 70 65 63 69 66 - e specif 0132 69 65 64 00 - ied. 0136 2e 5c 00 L114 - .\. No disassembly errors ------------------------------------------------------------