100 extend 110 & ! BBS:HELP.BAC & & ! Help program for the BBS & & ! By John Wilson, 21-Sep-85 & ! 120 dim topic%(10%), topic$(10%) & \ open '_kb:' as file 1% & \ open 'bbs:help.ndx' as file 2% & \ dim #2%, index%(150%) & \ open 'bbs:help.dat' as file 3%, mode 8192% & \ field #3%, 512% as buf$ & \ on error goto 30000 & \ cctrap$=sys(chr$(6%)+chr$(-7%)) & \ b0%,blk%,offset%=1% & \ get #3%, record 1% & \ ptr%=0% & \ level%=0% & \ k$=cvt$$(sys(chr$(7%)),188%) & \ if len(k$) then ent%=1% else & ent%=0% & \ & & \ & 'HELP V1.0 '; & cvt$$(right(sys(chr$(6%)+chr$(9%)+chr$(0%)),3%),4%) 130 if ent%<>0% and left(k$,2%)='/P' then & k$=cvt$$(right(k$,3%),8%) & \ ent%=0% 140 no%=index%(ptr%+3%) & \ if len(k$) then & gosub 260 & \ if no% then 210 else 230 150 print & \ blk%=index%(ptr%) & \ offset%=index%(ptr%+1%) & \ lngth%=index%(ptr%+2%) & \ & fnrd$(lngth%); 160 blk0%=blk% & \ offset0%=offset% & \ col%,nn%=0% & \ goto 230 unless no% & \ ent%=0% & \ print & \ for i%=ptr%+4% to ptr%+4%+no%*2%-2% step 2% & \ a$=fnrd$(index%(i%)) & \ if col%+len(a$)>66% then & & & \ col%,nn%=0% 170 & tab(col%); a$; & \ nn%=1% & \ col%=col%+16%*int(len(a$)/16%+1%) & \ next i% 180 & if nn% 190 goto 210 if len(k$) & \ goto 30000 if ent% & \ print & \ if level%=0% then & 'Topic? '; & else & topic$(i%); ' '; for i%=1% to level% & \ & 'Subtopic? '; 200 input line #1%, k$ & \ k$=cvt$$(k$,188%) 210 if k$='?' then k$='' & \ goto 140 220 goto 240 if len(k$) & \ goto 30000 unless level% 230 ptr%=topic%(level%) & \ gosub 260 & \ level%=level%-1% & \ goto 190 240 i%=instr(1%,k$,' ') & \ i%=len(k$)+1% unless i% & \ l$=left(k$,i%-1%) & \ k$=right(k$,i%+1%) & \ blk%=blk0% & \ offset%=offset0% & \ for i%=ptr%+4% to ptr%+4%+no%*2%-2% step 2% & \ a$=cvt$$(fnrd$(index%(i%)),32%) & \ goto 250 if l$=left(a$,len(l$)) & \ next i% & \ print & \ & "Sorry, no information available on '"; l$; "' at this level." & \ print & \ & "Information is available on the following:" & \ gosub 260 & \ k$='' & \ ent%=0% & \ goto 160 250 level%=level%+1% & \ topic%(level%)=ptr% & \ topic$(level%)=a$ & \ ptr%=index%(i%+1%) & \ goto 140 260 blk%=index%(ptr%) & \ offset%=index%(ptr%+1%)+index%(ptr%+2%) & \ while offset%>512% & \ blk%=blk%+1% & \ offset%=offset%-512% & \ next & \ blk0%=blk% & \ offset0%=offset% & \ no%=index%(ptr%+3%) & \ return 1000 & ! HELP.NDX file format: & ! topic record: & ! word & ! 0 block number of spiel & ! 1 offset in block of spiel & ! 2 length of spiel & ! 3 number of subtopics & ! subtopic entry: & ! 0 length of name (name follows spiel) & ! 1 pointer to topic record & ! 2000 & ! function to return n% characters at & ! blk%+offset% in HELP.DAT, and update & ! blk% and offset% & & def* fnrd$(n%) & \ get #3%, record blk% if b0%<>blk% & \ b0%=blk% & \ a$=mid(buf$,offset%,n%) & \ offset%=offset%+n% & \ while offset%>512% & \ b0%,blk%=blk%+1% & \ get #3%, record blk% & \ offset%=offset%-512% & \ a$=a$+left(buf$,offset%-1%) & \ next & \ fnrd$=a$ & \ fnend 30000 close 1%,2%,3% & \ print 32767 end