Clear high bits on segment script source files so they are readable on modern systems

This commit is contained in:
Lane Roathe 2019-07-20 10:16:14 -07:00
parent c3f50b0432
commit cb3dbd107a
8 changed files with 1949 additions and 9 deletions

View File

@ -1 +1,170 @@
; ******************** ; GBBS Pro v2.2 ; Copyright 1980-2017 ; ******************** ; Bulletin Copy Utility ; By GS @ 04/30/85 ; Modified by Lance @ 4/20/87 ; Updated for 2.1 - 04/11/90 ; Updated for 2.2 - 02/19/17 public start input "press [ret] to continue..." i$ flag=ram s1$="<"+chr$(8):s2$=">"+chr$(8) s3$="{"+chr$(8):s4$="}"+chr$(8) start home print "Bulletin Copy Utility v2.2" print \"Written by Greg Schaefer" print "Modified for v2.2 by BillM" input \"Source Bulletin File (ex: F:B1):" f1$ open #1,f1$:a=mark(1):close if a print \"Cant find "f1$" press [RET] ";:get i$:goto start ready f1$:print chr$(8);:sz=(peek(36)=79) fill ram,64,0:if msg(0) goto status print \"That message file is empty." gosub getret:goto start status home:z=1:b=(msg(0)/20)*5+1 for x=1 to b step 5 a=20:if x=b a=msg(0) mod 20 for y=5 to a+4:a$=left$("*",flag(z)) print @x,y;z;a$;:z=z+1:next:next cmd print @1,1 "R=Restart, Q=Quit, V=View, C=Copy" print "K=Kill, T=Tag, U=Untag, W=Write" print "Enter Cmd: ";chr$(32,28);chr$(8,28); get i$:if i$>"a" i$=chr$(asc(i$)-32) print chr$(8);i$;:z=1 if i$="Q" goto quit if i$="V" goto view if i$="C" goto copy if i$="K" goto kill if i$="T" goto tag if i$="U" goto untag if i$="R" goto restart if i$="W" goto write goto cmd quit input @0 "uit Y/N ?" i$:if i$<>"Y" goto cmd home:goto doquit restart input @0 "estart Y/N ?" i$:if i$<>"Y" goto cmd home:goto start tag input @2 "ag (#[,#] or ALL):" i$ if i$="" goto cmd if left$(i$,1)="A" fill ram,64,255:goto status tag2 a=val(i$):if not ((a=0) or (a>msg(0))) flag(a)=1 a=instr(",",i$):if a i$=mid$(i$,a+1):goto tag2 goto status untag input @2 "ntag (#[,#] or ALL):" i$ if i$="" goto cmd if left$(i$,1)="A" fill ram,64,0:goto status untag2 a=val(i$):if not ((a=0) or (a>msg(0))) flag(a)=0 a=instr(",",i$):if a i$=mid$(i$,a+1):goto untag2 goto status view input @2 "iew (ALL,TAG,#[,#]):" i$ gosub inprng:if i$="" goto cmd home:print "Viewing Bulletin(s):" view2 d=0:gosub show:if a goto view2 gosub getret:goto status write input @2 "rite (ALL,TAG,#[,#]):" i$ gosub inprng:if i$="" goto cmd write2 home:print "Write these bulletins:"\ gosub list:input @2 \"Filename (to write):" f$ if f$="" goto cmd create f$:open #1,f$:append #1 print \"Wait...Writing bulletin(s)" write3 d=1:gosub show:if a goto write3 close:goto status kill input @2 "ill (ALL,TAG,#[,#]):" i$ gosub inprng:if i$="" goto cmd home:print "Kill these bulletins:"\:gosub list input @0 \"Kill: Are you sure Y/N ?" i$ if i$<>"Y" goto status print "Wait...Killing bulletin(s)" b=msg(msg(0)):for x=1 to msg(0) if flag(x+512) kill #msg(x) next:crunch:a=msg(0):if a msg(a)=b update:if a goto status home:print \"All bulletins killed." gosub getret:goto start copy input @2 "opy (ALL,TAG,#[,#]):" i$ gosub inprng:if i$="" goto cmd home:print "Copy these bulletins:"\:gosub list input @0 \"Copy: Are you sure Y/N ?" i$ if i$<>"Y" goto status copy2 print \"Enter destination bulletin file" input @2 \"Destin Bulletin File (ex: D:B2):" f$ if f$="" goto cmd open #1,f$:a=mark(1):close:b=msg(0) if a print "Can't find "f$" press [RET]";:get i$:goto copy2 print \"Wait...Copying bulletin(s): "; open #1,"b:data":input #1,c1,c2,ct,ct$,da$ input #1,nu,mn,wm\lu$:close:ready f$ for x=1 to b:if not flag(x+512) goto copy3 print s1$;:kill "dummy":create "dummy":open #1,"dummy" print s2$;:ready f1$:copy #msg(x),#1:close:ready f$ print s3$;:b=msg(0)+1:copy "dummy",#msg(b):msg(b)=mn update:mn=mn+1:print s4$; copy3 next:open #1,"b:data":print #1,c1,c2,ct,ct$,da$ print #1,nu,mn,wm\lu$:close:ready f1$:goto status inprng if left$(i$,1)="T" move ram,64 to ram2:return if left$(i$,1)="A" fill ram2,64,255:return fill ram2,64,0 inprng2 a=val(i$):if (a=0) or (a>msg(0)) i$="":return flag(a+512)=1:a=instr(",",i$):if not a return i$=mid$(i$,a+1):goto inprng2 list a$="":for x=1 to msg(0) if flag(x+512) print a$x;:a$="," next:if peek(36)>0 print return show if z>msg(0) a=0:return if flag(z+512)=0 z=z+1:goto show input #msg(z),sb$\b,b$\c,c$ print #d,\"Numb ->"z" of "msg(0)\" Sub ->"sb$ print #d, " To ->"b$\"From ->"c$ copy #6,#d:a=1:z=z+1:return getret input @2 \"Press [RETURN] to continue... "i$ return doquit end
; ********************
; GBBS Pro v2.2
; Copyright 1980-2017
; ********************
; Bulletin Copy Utility
; By GS @ 04/30/85
; Modified by Lance @ 4/20/87
; Updated for 2.1 - 04/11/90
; Updated for 2.2 - 02/19/17
public start
input "press [ret] to continue..." i$
flag=ram
s1$="<"+chr$(8):s2$=">"+chr$(8)
s3$="{"+chr$(8):s4$="}"+chr$(8)
start
home
print "Bulletin Copy Utility v2.2"
print \"Written by Greg Schaefer"
print "Modified for v2.2 by BillM"
input \"Source Bulletin File (ex: F:B1):" f1$
open #1,f1$:a=mark(1):close
if a print \"Cant find "f1$" press [RET] ";:get i$:goto start
ready f1$:print chr$(8);:sz=(peek(36)=79)
fill ram,64,0:if msg(0) goto status
print \"That message file is empty."
gosub getret:goto start
status
home:z=1:b=(msg(0)/20)*5+1
for x=1 to b step 5
a=20:if x=b a=msg(0) mod 20
for y=5 to a+4:a$=left$("*",flag(z))
print @x,y;z;a$;:z=z+1:next:next
cmd
print @1,1 "R=Restart, Q=Quit, V=View, C=Copy"
print "K=Kill, T=Tag, U=Untag, W=Write"
print "Enter Cmd: ";chr$(32,28);chr$(8,28);
get i$:if i$>"a" i$=chr$(asc(i$)-32)
print chr$(8);i$;:z=1
if i$="Q" goto quit
if i$="V" goto view
if i$="C" goto copy
if i$="K" goto kill
if i$="T" goto tag
if i$="U" goto untag
if i$="R" goto restart
if i$="W" goto write
goto cmd
quit
input @0 "uit Y/N ?" i$:if i$<>"Y" goto cmd
home:goto doquit
restart
input @0 "estart Y/N ?" i$:if i$<>"Y" goto cmd
home:goto start
tag
input @2 "ag (#[,#] or ALL):" i$
if i$="" goto cmd
if left$(i$,1)="A" fill ram,64,255:goto status
tag2
a=val(i$):if not ((a=0) or (a>msg(0))) flag(a)=1
a=instr(",",i$):if a i$=mid$(i$,a+1):goto tag2
goto status
untag
input @2 "ntag (#[,#] or ALL):" i$
if i$="" goto cmd
if left$(i$,1)="A" fill ram,64,0:goto status
untag2
a=val(i$):if not ((a=0) or (a>msg(0))) flag(a)=0
a=instr(",",i$):if a i$=mid$(i$,a+1):goto untag2
goto status
view
input @2 "iew (ALL,TAG,#[,#]):" i$
gosub inprng:if i$="" goto cmd
home:print "Viewing Bulletin(s):"
view2
d=0:gosub show:if a goto view2
gosub getret:goto status
write
input @2 "rite (ALL,TAG,#[,#]):" i$
gosub inprng:if i$="" goto cmd
write2
home:print "Write these bulletins:"\
gosub list:input @2 \"Filename (to write):" f$
if f$="" goto cmd
create f$:open #1,f$:append #1
print \"Wait...Writing bulletin(s)"
write3
d=1:gosub show:if a goto write3
close:goto status
kill
input @2 "ill (ALL,TAG,#[,#]):" i$
gosub inprng:if i$="" goto cmd
home:print "Kill these bulletins:"\:gosub list
input @0 \"Kill: Are you sure Y/N ?" i$
if i$<>"Y" goto status
print "Wait...Killing bulletin(s)"
b=msg(msg(0)):for x=1 to msg(0)
if flag(x+512) kill #msg(x)
next:crunch:a=msg(0):if a msg(a)=b
update:if a goto status
home:print \"All bulletins killed."
gosub getret:goto start
copy
input @2 "opy (ALL,TAG,#[,#]):" i$
gosub inprng:if i$="" goto cmd
home:print "Copy these bulletins:"\:gosub list
input @0 \"Copy: Are you sure Y/N ?" i$
if i$<>"Y" goto status
copy2
print \"Enter destination bulletin file"
input @2 \"Destin Bulletin File (ex: D:B2):" f$
if f$="" goto cmd
open #1,f$:a=mark(1):close:b=msg(0)
if a print "Can't find "f$" press [RET]";:get i$:goto copy2
print \"Wait...Copying bulletin(s): ";
open #1,"b:data":input #1,c1,c2,ct,ct$,da$
input #1,nu,mn,wm\lu$:close:ready f$
for x=1 to b:if not flag(x+512) goto copy3
print s1$;:kill "dummy":create "dummy":open #1,"dummy"
print s2$;:ready f1$:copy #msg(x),#1:close:ready f$
print s3$;:b=msg(0)+1:copy "dummy",#msg(b):msg(b)=mn
update:mn=mn+1:print s4$;
copy3
next:open #1,"b:data":print #1,c1,c2,ct,ct$,da$
print #1,nu,mn,wm\lu$:close:ready f1$:goto status
inprng
if left$(i$,1)="T" move ram,64 to ram2:return
if left$(i$,1)="A" fill ram2,64,255:return
fill ram2,64,0
inprng2
a=val(i$):if (a=0) or (a>msg(0)) i$="":return
flag(a+512)=1:a=instr(",",i$):if not a return
i$=mid$(i$,a+1):goto inprng2
list
a$="":for x=1 to msg(0)
if flag(x+512) print a$x;:a$=","
next:if peek(36)>0 print
return
show
if z>msg(0) a=0:return
if flag(z+512)=0 z=z+1:goto show
input #msg(z),sb$\b,b$\c,c$
print #d,\"Numb ->"z" of "msg(0)\" Sub ->"sb$
print #d, " To ->"b$\"From ->"c$
copy #6,#d:a=1:z=z+1:return
getret
input @2 \"Press [RETURN] to continue... "i$
return
doquit
end

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1,68 @@
; ******************* ; GBBS "Pro" V:2.2 ; Copyright 1980-2017 ; Kevin M. Smallwood ; ******************* ; Message File 1.0-1.2 to 2.2 Converter ; This module will convert the stock GBBS Pro V:1.2 ; message formats to the standard V:2.2 format. ; *NOTE*: If you have modified your message segments ; to alter the way it writes the header info you will ; need to adjust this program accordingly. ; Written by Lance on 02/03/87 ; Updated to 2.1 on 04/11/90 - LPT ; Updated to 2.2 on 02/19/17 - WPM msg.conv print ' Once this program runs your message files will be in V:2.1 format and will not run under 1.0-1.2. Once you do this there is no turnning back.' print \"Do you wish to continue (YES/[NO]) ? NO"; print chr$(8,2);:input i$ if i$<>"YES" end open #1,"b:data2" mark(1)=1120:input #1,ab close print \"System has "ab" sub-boards"\ for bb=1 to ab gosub read.msg print "Converting Board #"bb" - The "bn$ print "Message #"; for a=1 to msg(0) print a; edit(0):gosub convert print chr$(8,(len(str$(a)))); next:print:print:next print ' Conversion compleate! Your systems Message files are now converted to run under GBBS Pro V:2.2 Please make sure you have made the changes to your message segments before running the board with the messages in this format.':end read.msg open #1,"b:data2":position #1,128,bb+8 input #1,bn$\bf$\b3,b4\bs,bs$\mb,kl,kb close:ready bf$ return convert input #msg(a),un,sb$\fr$ copy #6,#8 ti=0:ti$="All Users" x=msg(a):kill #msg(a) print #msg(a),sb$\ti,ti$\un,mid$(fr$,8) copy #8,#6:msg(a)=x:update return
; *******************
; GBBS "Pro" V:2.2
; Copyright 1980-2017
; Kevin M. Smallwood
; *******************
; Message File 1.0-1.2 to 2.2 Converter
; This module will convert the stock GBBS Pro V:1.2
; message formats to the standard V:2.2 format.
; *NOTE*: If you have modified your message segments
; to alter the way it writes the header info you will
; need to adjust this program accordingly.
; Written by Lance on 02/03/87
; Updated to 2.1 on 04/11/90 - LPT
; Updated to 2.2 on 02/19/17 - WPM
msg.conv
print '
Once this program runs your message
files will be in V:2.1 format and will
not run under 1.0-1.2. Once you do this
there is no turnning back.'
print \"Do you wish to continue (YES/[NO]) ? NO";
print chr$(8,2);:input i$
if i$<>"YES" end
open #1,"b:data2"
mark(1)=1120:input #1,ab
close
print \"System has "ab" sub-boards"\
for bb=1 to ab
gosub read.msg
print "Converting Board #"bb" - The "bn$
print "Message #";
for a=1 to msg(0)
print a;
edit(0):gosub convert
print chr$(8,(len(str$(a))));
next:print:print:next
print '
Conversion compleate!
Your systems Message files are now
converted to run under GBBS Pro V:2.2
Please make sure you have made the
changes to your message segments
before running the board with the
messages in this format.':end
read.msg
open #1,"b:data2":position #1,128,bb+8
input #1,bn$\bf$\b3,b4\bs,bs$\mb,kl,kb
close:ready bf$
return
convert
input #msg(a),un,sb$\fr$
copy #6,#8
ti=0:ti$="All Users"
x=msg(a):kill #msg(a)
print #msg(a),sb$\ti,ti$\un,mid$(fr$,8)
copy #8,#6:msg(a)=x:update
return

File diff suppressed because one or more lines are too long

View File

@ -1 +1,71 @@
; ******************* ; GBBS "Pro" V:2.2 ; New Msg Fix ; Copyright 1980-2017 ; Kevin M. Smallwood ; ******************* byte=ram start text:home print "New Msg Fix V2.2" print \"Reset users to see all or none of" print "the new bulletins?" input @0 \"(All/None):" i$ if i$="A" lr=1 if i$="N" lr=2 if not lr goto start open #1,"b:data" input #1,c1,c2,ct,ct$,da$ input #1,nu,mn,wm,tm\lu$ close:mn=1:tm=0 bb=1:gosub bl.ldinf for x=1 to ab bb=x:gosub bl.ldinf print \"Fixing: "bn$ ready bf$ if not msg(0) goto loop for y=1 to msg(0) msg(y)=mn:mn=mn+1 tm=tm+1:next loop next:update if lr=2 then lr=mn print \"Fixing Users..."\ open #1,"b:users" for x=1 to nu print "Fixing user #"x" of "nu;:poke 36,0 position #1,128,x input #1,a$ if a$="" goto loop2 byte(0)=lr mod 256:byte(1)=lr/256 position #1,128,x,112 write #1,ram,2 loop2 next:close open #1,"b:data" print #1,c1,c2,ct,ct$,da$ print #1,nu,mn,wn,tm\lu$ close print \\"New Msg Fix Complete" end bl.ldinf if bb=0 then bf$="":bl=0:return me=0:if bl=bb ready bf$:return bl=bb:open #1,"b:data2" mark(1)=1120:input #1,ab if bb>ab close:bf$="":bl=0:return position #1,128,bb+8 input #1,bn$\bf$\b3,b4\bs,bs$\mb,kl,kb b1=1:if b3 then b1=flag(b3) b2=1:if b4 then b2=flag(b4) close:if bf$="" then bl=0:return if (b1) ready bf$:nn=nb return
; *******************
; GBBS "Pro" V:2.2
; New Msg Fix
; Copyright 1980-2017
; Kevin M. Smallwood
; *******************
byte=ram
start
text:home
print "New Msg Fix V2.2"
print \"Reset users to see all or none of"
print "the new bulletins?"
input @0 \"(All/None):" i$
if i$="A" lr=1
if i$="N" lr=2
if not lr goto start
open #1,"b:data"
input #1,c1,c2,ct,ct$,da$
input #1,nu,mn,wm,tm\lu$
close:mn=1:tm=0
bb=1:gosub bl.ldinf
for x=1 to ab
bb=x:gosub bl.ldinf
print \"Fixing: "bn$
ready bf$
if not msg(0) goto loop
for y=1 to msg(0)
msg(y)=mn:mn=mn+1
tm=tm+1:next
loop
next:update
if lr=2 then lr=mn
print \"Fixing Users..."\
open #1,"b:users"
for x=1 to nu
print "Fixing user #"x" of "nu;:poke 36,0
position #1,128,x
input #1,a$
if a$="" goto loop2
byte(0)=lr mod 256:byte(1)=lr/256
position #1,128,x,112
write #1,ram,2
loop2
next:close
open #1,"b:data"
print #1,c1,c2,ct,ct$,da$
print #1,nu,mn,wn,tm\lu$
close
print \\"New Msg Fix Complete"
end
bl.ldinf
if bb=0 then bf$="":bl=0:return
me=0:if bl=bb ready bf$:return
bl=bb:open #1,"b:data2"
mark(1)=1120:input #1,ab
if bb>ab close:bf$="":bl=0:return
position #1,128,bb+8
input #1,bn$\bf$\b3,b4\bs,bs$\mb,kl,kb
b1=1:if b3 then b1=flag(b3)
b2=1:if b4 then b2=flag(b4)
close:if bf$="" then bl=0:return
if (b1) ready bf$:nn=nb
return

File diff suppressed because one or more lines are too long

View File

@ -1 +1,95 @@
; ******************* ; GBBS "Pro" V:2.2n ; Copyright 1980-1990 ; Kevin M. Smallwood ; ******************* ; 12/23/86 By Lance ; 04/11/90 Updated to 2.1 - LPT ; 02/19/2017 Updated to 2.2n ; Get data from the Data file for number of users to convert user.conv print ' This program will convert your 1.2 user file to run under the 2.2 format. It will not harm your existing user file.':print print \"Do you wish to continue (YES/[NO]) ? NO"; print chr$(8,2):input i$ if i$<>"YES" end rd.data open #1,"b:data" input #1,c1,c2,ct,ct$,da$ input #1,nu,mn,wm,tm\lu$:close print "System has "nu" users"\ ; Start the actual conversion ; create the temp user file create "b:users.temp" open #1,"b:users" open #2,"b:users.temp" print "Converting User #"; for x=1 to nu:print x; ; set the ram for the old file set pa$=ram,8:set ph$=ram+8,12 when$=ram+20:flag=ram+22 nibble=ram+27:byte=ram+29 gosub rd.old.user d$=d1$+" "+d2$:gosub cn.name:d3$=xx$ ; Save the stats for conversion to the new format tl=nibble(1):ct=nibble(2):up=nibble(3) tc=byte(0):bp=byte(1):dl=byte(2) lm=byte(3):hm=byte(4):wh$=when$:z=flag ; Set up the new 128 byte ram area set pa$=ram,8:set ph$=ram+8,12 when$=ram+20:flag=ram+22 nibble=ram+27:byte=ram+37 ; Give all users zero nulls & convert the number of uploads for l=1 to 4:nibble(l)=0:next nibble(5)=tl:nibble(6)=ct:byte(1)=tc byte(2)=bp:byte(3)=dl:byte(4)=ul byte(5)=lm:byte(6)=hm:byte(0)=0 when$=wh$:flag=z:d4$="":d5$="" gosub wr.new.user print chr$(8,(len(str$(x)))); next:close ; Rename the files so that 2.2 will run. (saving 1.2's file) use "b:xdos","r b:users,b:users.1.2" use "b:xdos","r b:users.temp,b:users" print "System is now ready for 2.1":end rd.old.user position #1,64,x input #1,d1$,d2$\d3$ position #1,64,x,30 read #1,ram,34:return wr.new.user position #2,128,x print #2,d1$,d2$\d3$\d4$,d5$ position #2,128,x,70 write #2,ram,58:return cn.name xx$="":for y=2 to len(d$) q$=mid$(d$,y,1):if q$=" " q$=mid$(d$,y,2):y=y+1:goto cn.name2 if q$="." q$=mid$(d$,y,2):y=y+1:goto cn.name2 if q$="-" q$=mid$(d$,y,2):y=y+1:goto cn.name2 if q$="_" q$=mid$(d$,y,2):y=y+1:goto cn.name2 if q$=" " q$=mid$(d$,y,2):y=y+1:goto cn.name2 a=asc(q$):if (a<65) or (a>91) and (a<97) y=y+1:goto cn.name2 a=a+32:q$=chr$(a) cn.name2 xx$=xx$+q$:next:xx$=left$(d$,1)+xx$:return
; *******************
; GBBS "Pro" V:2.2n
; Copyright 1980-1990
; Kevin M. Smallwood
; *******************
; 12/23/86 By Lance
; 04/11/90 Updated to 2.1 - LPT
; 02/19/2017 Updated to 2.2n
; Get data from the Data file for number of users to convert
user.conv
print '
This program will convert your 1.2 user
file to run under the 2.2 format. It
will not harm your existing user file.':print
print \"Do you wish to continue (YES/[NO]) ? NO";
print chr$(8,2):input i$
if i$<>"YES" end
rd.data
open #1,"b:data"
input #1,c1,c2,ct,ct$,da$
input #1,nu,mn,wm,tm\lu$:close
print "System has "nu" users"\
; Start the actual conversion
; create the temp user file
create "b:users.temp"
open #1,"b:users"
open #2,"b:users.temp"
print "Converting User #";
for x=1 to nu:print x;
; set the ram for the old file
set pa$=ram,8:set ph$=ram+8,12
when$=ram+20:flag=ram+22
nibble=ram+27:byte=ram+29
gosub rd.old.user
d$=d1$+" "+d2$:gosub cn.name:d3$=xx$
; Save the stats for conversion to the new format
tl=nibble(1):ct=nibble(2):up=nibble(3)
tc=byte(0):bp=byte(1):dl=byte(2)
lm=byte(3):hm=byte(4):wh$=when$:z=flag
; Set up the new 128 byte ram area
set pa$=ram,8:set ph$=ram+8,12
when$=ram+20:flag=ram+22
nibble=ram+27:byte=ram+37
; Give all users zero nulls & convert the number of uploads
for l=1 to 4:nibble(l)=0:next
nibble(5)=tl:nibble(6)=ct:byte(1)=tc
byte(2)=bp:byte(3)=dl:byte(4)=ul
byte(5)=lm:byte(6)=hm:byte(0)=0
when$=wh$:flag=z:d4$="":d5$=""
gosub wr.new.user
print chr$(8,(len(str$(x))));
next:close
; Rename the files so that 2.2 will run. (saving 1.2's file)
use "b:xdos","r b:users,b:users.1.2"
use "b:xdos","r b:users.temp,b:users"
print "System is now ready for 2.1":end
rd.old.user
position #1,64,x
input #1,d1$,d2$\d3$
position #1,64,x,30
read #1,ram,34:return
wr.new.user
position #2,128,x
print #2,d1$,d2$\d3$\d4$,d5$
position #2,128,x,70
write #2,ram,58:return
cn.name
xx$="":for y=2 to len(d$)
q$=mid$(d$,y,1):if q$=" " q$=mid$(d$,y,2):y=y+1:goto cn.name2
if q$="." q$=mid$(d$,y,2):y=y+1:goto cn.name2
if q$="-" q$=mid$(d$,y,2):y=y+1:goto cn.name2
if q$="_" q$=mid$(d$,y,2):y=y+1:goto cn.name2
if q$=" " q$=mid$(d$,y,2):y=y+1:goto cn.name2
a=asc(q$):if (a<65) or (a>91) and (a<97) y=y+1:goto cn.name2
a=a+32:q$=chr$(a)
cn.name2
xx$=xx$+q$:next:xx$=left$(d$,1)+xx$:return