! SPACER.BAS - deletes multiple spaces and replaces them with single
! spaces. should speed up Sharon's editing considerably
! December 14, 1985 ske
! August 27, 1986 - modify to eliminate blank lines, and hopefully
! fix the bug where it gets into an endless loop while eliminating
! leading spaces ske
map1 input'text,s,150
map1 short'name,s,10 ! file name with no extension
map1 input'file'name,s,10
map1 output'file'name,s,10
map1 leader,s,1 ! flag for eliminating leading spaces
map1 blanks,s,1 ! flag for eliminating blank lines
map1 dummy,s,1 ! all purpose string variable
map1 front,f ! set to first printing char of a line
map1 X,f ! lookup variable for file naming
map1 x,f ! checker outer for multiple spaces
map1 y,f ! thumb for input'text (marks the place)
loop:
input line #1, input'text
? ".";
if eof(1) = 1 &
then &
goto thats'all
! check to see if we're supposed to eliminate blank lines
sub'loop:
if blanks = "Y" &
then &
if len(input'text) = 0 &
then &
goto skip'the'line'entirely
! on the other hand, if it's just a line with nothing in it...
if input'text = space(len(input'text)) &
then &
input'text = "" :&
goto forget'it
! Is the first character a control character
! if so, eliminate it.
if input'text[1,1] <= chr(31) &
then &
input'text = input'text[2,len(input'text)] :&
goto sub'loop
! Shall we eliminate leading blanks?
if leader = "Y" &
then &
call check'for'leading'spaces &
else &
front = 1 :&
call set'front
call check'for'four'spaces
call check'for'three'spaces
call check'for'two'spaces
call check'for'trailing'spaces
forget'it:
? #2, input'text
skip'the'line'entirely:
goto loop
thats'all:
? tab(10,1); tab(-1,10); tab(10,35); "Done"
close #1
? tab(16,29); "Results in: " output'file'name
close #2
? tab(23,1);
end
name'that'input'file:
? tab(10,1); tab(-1,10);
? tab(20,20); "The default extension is .TXT"
? tab(10,5);
input "What file shall we de-space? --> ",input'file'name
input'file'name = ucs(input'file'name)
X = 0
X = instr(1,input'file'name,".")
if X = 0 &
then &
input'file'name = input'file'name + ".TXT"
call lookup'input'file
if X <= 0 &
then &
goto name'that'input'file
return
lookup'input'file:
X = 0
lookup input'file'name, X
if X <= 0 &
then &
? tab(10,1); tab(-1,10) :&
? "I'm terribly sorry, but I can't find that file. Please check" :&
? "The spelling, etc. and try again " :&
call pause
return
name'that'output'file:
? tab(10,1); tab(-1,10);
X = instr(1,input'file'name,".")
short'name = input'file'name[1,X-1]
? tab(20,20); "The default name is "short'name".LST"
? tab(10,1);
input "What would you like to call the output file? --> "output'file'name
if len(output'file'name) = 0 &
then &
output'file'name = short'name + ".LST" &
else &
output'file'name = ucs(output'file'name) :&
X = instr(1,output'file'name,".") :&
if X = 0 &
then &
output'file'name = output'file'name + ".LST"
return
shall'we'eliminate'leading'spaces:
? tab(10,1); tab(-1,10);
input "shall we eliminate the leading spaces too? --> ", leader
leader = ucs(leader[1,1])
return
! :::::::::::::::::::::: text processing subroutines :::::::::::::::::::::::
check'for'leading'spaces:
if len(input'text) > 0 &
then &
if input'text[1,1] = " " &
then &
input'text = input'text[2,len(input'text)] :&
goto check'for'leading'spaces
return
check'for'four'spaces:
! x finds the spaces, y marks the spot to start looking
x = 0
if leader = "Y" &
then &
y = 1 &
else &
y = front
find'four'more:
x = instr(y,input'text," ")
if x > 0 &
then &
input'text = input'text[1,x] + input'text[x+4,len(input'text)] :&
y = x :&
x = 0 :&
goto find'four'more
return
check'for'three'spaces:
x = 0
if leader = "Y" &
then &
y = 1 &
else &
y = front
find'three'more:
x = instr(y,input'text," ")
if x > 0 &
then &
input'text = input'text[1,x] + input'text[x+3,len(input'text)] :&
y = x :&
x = 0 :&
goto find'three'more
return
check'for'two'spaces:
x = 0
if leader = "Y" &
then &
y = 1 &
else &
y = front
find'two'more:
x = instr(y,input'text," ")
if x > 0 &
then &
input'text = input'text[1,x] + input'text[x+2,len(input'text)] :&
y = x :&
x = 0 :&
goto find'two'more
return
check'for'trailing'spaces:
if len(input'text) > 0 &
then &
dummy = right(input'text,1)
if dummy = " " &
then &
input'text = input'text[1,len(input'text)-1] :&
goto check'for'trailing'spaces
return
pause:
? tab(23,1); tab(-1,10);
input line "Hit RETURN to continue --> ", dummy
? tab(23,1) ; tab(-1,10);
return
set'front:
! this sets y to the first printing character on the line
if input'text[front,front] = " " &
then &
front = front + 1 :&
goto set'front
return