


	logical*1 function Printabl( Key )

c--
c Return true if Key is printable else return false.
c--


	integer*2 Key

	if( Key .gt. 31 .and. Key .lt. 127 ) then
	  Printabl = .true.
	else
	  Printabl = .false.
	end if

	return
	end


	subroutine ErrMsg( String )

	character*(*) String
	character*80 Buffer
	integer*2 L, Idummy

c -- functions

	integer*2 Length


	L = Length( String )
	if( L .gt. 80 ) L = 80
	if( L .lt. 1 ) L = 1

	Buffer = String(1:L)
	call Cnter( Buffer )

	L = Length( Buffer )
	if( L .lt. 1 ) L = 1

	call SaveAttribute

	call DspAttribute( 0 )
	call EraseRegion( 23, 1, 24, 80 )
	call Beep
	call CsrPos( 23, 1 )
	call DspAttribute( 4 )
	call OutString( Buffer(1:L) )
	call DspAttribute( 0 )
	call CsrPos( 24, 33)
	call OutString( '( Press return )' )
	call CsrPos( 23, 1 )
	call FPGetChar( IDummy )
	call DspAttribute( 0 )
	call EraseRegion( 23, 1, 24, 80 )

	call RstAttribute

	return
	end



	subroutine DspMessage( Strng1, Strng2 )

	character*(*) Strng1, Strng2
	character*80 Buffer
	integer*2 L

c -- functions

	integer*2 Length


	call SaveAttribute
	call DspAttribute( 0 )
	call EraseRegion( 23, 1, 24, 80 )
	call RstAttribute

	L = Length( Strng1 )
	if( L .lt. 1 ) L = 1
	if( L .gt. 80 ) L = 80
	Buffer = Strng1(1:L)
	call Cnter( Buffer )
	L = Length( Buffer )
	if( L .lt. 1 ) L = 1

	call CsrPos( 23, 1 )
	call OutString( Buffer(1:L) )


	L = Length( Strng2 )
	if( L .lt. 1 ) L = 1
	if( L .gt. 80 ) L = 80
	Buffer = Strng2(1:L)
	call Cnter( Buffer )
	L = Length( Buffer )
	if( L .lt. 1 ) L = 1

	call CsrPos( 24, 1 )
	call OutString( Buffer(1:L) )

	return
	end

	subroutine LnMdOn

	logical*1 Flag, LnMode

	data LnMode /.false./

	LnMode = .true.
	return

	entry LnMdOff

	LnMode = .false.
	return

	entry ChkLnMd( Flag )

	Flag = LnMode
	return

	end

