{ How do I make from a procedure or function an inline version? If I run the following program, the computer locks up. What's wrong?? Help!! } var s1, s2: string; procedure CopySubStr( Str1: string; start, nrchars: byte; var Str2: string ); { copy part of Str1 (beginning at start for nrchars) to Str2 if start > length of Str1, Str2 will contain a empty string. if nrchars specifies more characters than remain starting at the start position, Str2 will contain just that remainder of Str1. } InLine( $55/ { push bp } $89/$E5/ { mov bp,sp } $C5/$76/$0C/ { lds si,[bp+0C] } $FC/ { cld } $C4/$7E/$04/ { les di,[bp+04] } $8A/$24/ { mov ah,[si] } $20/$E4/ { and ah,ah } $74/$16/ { je @null } $8A/$5E/$0A/ { mov bl,[bp+0A] } $38/$DC/ { cmp ah,bl } $72/$0F/ { jb @null } $8A/$46/$08/ { mov al,[bp+08] } $88/$C6/ { mov dh,al } $00/$DE/ { add dh,bl } $FE/$CE/ { dec dh } $38/$F4/ { cmp ah,dh } $72/$06/ { jb @rest } $EB/$0A/ { jmp @copy } { @null: } $B0/$00/ { mov al,00 } $EB/$15/ { jmp @done } { @rest: } $28/$DC/ { sub ah,bl } $FE/$C4/ { inc ah } $88/$E0/ { mov al,ah } { @copy: } $88/$C1/ { mov cl,al } $30/$ED/ { xor ch,ch } $30/$FF/ { xor bh,bh } $01/$DE/ { add si,bx } $89/$FA/ { mov dx,di } $47/ { inc di } $F3/$A4/ { rep movsb } $89/$D7/ { mov di,dx } { @done: } $88/$05/ { mov [di],al } { @exit: } $5D { pop bp } ) { CopySubStr }; procedure StrCopy( var Str1, Str2: string ); { copy str1 to str2 } InLine( $89/$EA/ { mov dx,bp } $89/$E5/ { mov bp,sp } $C5/$76/$08/ { lds si,[bp+08] } $FC/ { cld } $C4/$7E/$04/ { les di,[bp+04] } $30/$ED/ { xor ch,ch } $8A/$0C/ { mov cl,[si] } $41/ { inc cx } $F3/$A4/ { rep movsb } $89/$D5 { mov bp,dx } ) { StrCopy }; function StrPos( var str1, str2: string ): byte; { returns position of the first occurrence of str1 in str2 } { return value in AX } { str1 - string to search for } { str2 - string to search in } InLine( $55/ { push bp } $89/$E5/ { mov bp,sp } $FC/ { cld } $C4/$7E/$04/ { les di,[bp+04] } $30/$ED/ { xor ch,ch } $8A/$0D/ { mov cl,[di] } $21/$C9/ { and cx,cx } $74/$2A/ { je @negatief } $47/ { inc di } $C5/$76/$08/ { lds si,[bp+08] } $AC/ { lodsb } $20/$C0/ { and al,al } $74/$21/ { je @negatief } $88/$C4/ { mov ah,al } $FE/$CC/ { dec ah } $AC/ { lodsb } { @start: } $F2/$AE/ { repnz scasb } $75/$18/ { jne @negatief } $38/$E1/ { cmp cl,ah } $72/$14/ { jb @negatief } $89/$F2/ { mov dx,si } $89/$CB/ { mov bx,cx } $88/$E1/ { mov cl,ah } $F3/$A6/ { rep cmpsb } $74/$0E/ { je @positief } $29/$D6/ { sub si,dx } $29/$F7/ { sub di,si } $89/$D6/ { mov si,dx } $89/$D9/ { mov cx,bx } $EB/$E4/ { jmp @start } { @Negatief: } $31/$C0/ { xor ax,ax } $EB/$09/ { jmp @exit } { @Positief: } $30/$E4/ { xor ah,ah } $C4/$7E/$04/ { les di,[bp+04] } $8A/$05/ { mov al,[di] } $29/$D8/ { sub ax,bx } { @Exit: } $5D { pop bp } ) { StrPos }; procedure Trim( var Str: string ); { remove leading and trailing white space from str } InLine( { setup } $55/ { push bp } $89/$E5/ { mov bp,sp } $C5/$76/$04/ { lds si,[bp+04] } $8C/$D8/ { mov ax,ds } $8E/$C0/ { mov es,ax } $8A/$04/ { mov al,[si] } $20/$C0/ { and al,al } $74/$45/ { je @exit } $89/$F7/ { mov di,si } $88/$C4/ { mov ah,al } { remove trailing white space } $30/$ED/ { xor ch,ch } $88/$E1/ { mov cl,ah } $01/$CE/ { add si,cx } { @start1: } $8A/$04/ { mov al,[si] } $3C/$20/ { cmp al,20 } $77/$09/ { ja @stop1 } $4E/ { dec si } $FE/$C9/ { dec cl } $20/$C9/ { and cl,cl } $74/$02/ { je @stop1 } $EB/$F1/ { jmp @start1 } { @stop1: } $20/$C9/ { and cl,cl } $74/$26/ { je @done } { look for leading white space } $89/$FE/ { mov si,di } { @start2: } $46/ { inc si } $8A/$04/ { mov al,[si] } $3C/$20/ { cmp al,20 } $77/$08/ { ja @stop2 } $FE/$C9/ { dec cl } $20/$C9/ { and cl,cl } $74/$02/ { je @stop2 } $EB/$F1/ { jmp @start2 } { @stop2: } $89/$F2/ { mov dx,si } $29/$FA/ { sub dx,di } $83/$FA/$01/ { cmp dx,0001 } $74/$0C/ { je @done } $FC/ { cld } $89/$CB/ { mov bx,cx } $89/$FA/ { mov dx,di } $47/ { inc di } $F3/$A4/ { rep movsb } $89/$D7/ { mov di,dx } $89/$D9/ { mov cx,bx } { @done: } $88/$0D/ { mov [di],cl } { @exit: } $5D { pop bp } ) { Trim }; begin s1 := '123456789-123456789-'; s2 := ''; CopySubStr( s1, 1, 12, s2 ); writeln( s2 ); s1 := '123qqwerty'; s2 := 'qwerty'; CopySubStr( s1, 1, 12, s2 ); writeln( s2 ); StrCopy( s1, s2 ); writeln( s2 ); s1 := '123456789-123456789-'; s2 := '4567'; writeln( StrPos( s1, s2 ) ); s1 := ' 123qqwerty '; s2 := 'qwerty'; writeln( StrPos( s1, s2 ) ); Trim( s1 ); writeln( s2 ); end.