こんな感じでしょうか。
ヒントをたくさん書きましたので、何をやっているかわかると思います。
*InitDynamicVars
sdim buf_input,1000
sdim buf_mesbox,1000
buf_mesbox = {"
00001
00002
00003
00004
00005
"}
*MakeAppWindow
screen 0,300,200,0
title "FindStringFromText"
syscolor 4 : boxf
sysfont 17
syscolor 7
pos 5,5 : mes "keyword"
pos 50,3 : input buf_input,195,18,0
objsize 45,20 : objmode 1,1
pos 250,2 : button gosub "Search",*Search
pos 5,30 : mes "source"
pos 5,45 : mesbox buf_mesbox,290,150,4
objsize 60,20
pos 235,23 : button gosub "Open File",*OpenFile
goto *Wait_Main
*OpenFile
dialog "*",16,""
if stat = 0 : end
sdim buf_mesbox,1000
notesel buf_mesbox
noteload refstr
objprm 2,buf_mesbox
*Wait_Main
stop
*Search //////////////////////////////////////////// ここがミソ ////////////////////////////////////////////
; 〜留意すること〜
; 改行とて所詮は「コード」で表現されるから普通の文字と似たようなもの。
; 改行コード (13 10) も文字列としてinstrで検索できます。
; だから複数行文字列もコンピュータから見ればただの直列なデータです。
; (ex) あいう
; えおか
; きくけ
; ・・・
;
; ↓
;
; あいう[改行コード]えおか[改行コード]きくけ・・・
x(0) = instr(buf_mesbox,0,buf_input) ;先頭からキーワードを探す
if x(0) = -1 : dialog "The keyword could not be found in the source.",1 : return
buf = strmid(buf_mesbox,0,x(0));キーワード直前までの文字列を全部bufにコピー。もちろん改行コードも含まれている。(※peekやpokeを使って文字列が操れるなら、こういうことをせずにもう少し高速化できるがここでは紹介しない。)
strrep buf,"\n","\n" ;bufの中の改行コード(13 10)の数を数える。結果はstatに入る。
x(1) = stat+1 ;それに1を足せば、キーワードが"含まれ"ている行の番号。(※あくまで含まれていることがわかるだけで、この時点では一致とは断定できない。)
notesel buf_mesbox
noteget buf,x(1)-1 ;その行を見てみる。
if buf_input ! buf : dialog "The keyword could not be found in the source.",1 : return ;ただ含まれていただけで完全には一致していないということが判明したら、ここでアウト。
dialog "The keyword was found in line "+x(1)+" for the first time.",0
return
でも、これはキーワードの複数行でのヒットを想定していません。
もし複数行ヒットの考慮が必要なら、これを参考にして機能拡張にトライしてみましょう。