...but using /fseek for position would arise the problem in counting $crlf.
Exactly. If /fseek is used without switches, mirc does not count the crlf's, it just jumps to position N, so $fseek().line could only work after a /fseek with -l, -w and -r (-n could -should- be an exception; to jump to the next line, mirc doesn't need to keep track of any previous crlf's in the file) but on an important condition: that /fseek started scanning from the beginning of the file. Consider this example:
fseek blah 1234
fseek -w blah *mirc*
Even though /fseek -w was called, $fseek().line cannot be calculated because /fseek -w started seeking from the 1234th byte in the file, so it doesn't know the number of lines before that point.