Re: A question for a programmer

1998-07-10 Thread Shaul
 I am going through a book on Linux programming. One of the examples does 
 not work. I was wondering if someone could take a look at the script and 
 see why it doesn't work. The program is exactly like the example from the 
 book, in fact I downloaded it from www.wrox.com the 
 publisher of the book Beginning Linux Programming. The part that doesn't 
 work is the list_tracks section. 
 

I don't know the answer to your question. However, they have a page that 
reports errors and corrections for this book. If it isn't there, you might 
want to report it as an error.




--  
Unsubscribe?  mail -s unsubscribe [EMAIL PROTECTED]  /dev/null


A question for a programmer

1998-07-09 Thread Keith Alen Vance
I am going through a book on Linux programming. One of the examples does 
not work. I was wondering if someone could take a look at the script and 
see why it doesn't work. The program is exactly like the example from the 
book, in fact I downloaded it from www.wrox.com the 
publisher of the book Beginning Linux Programming. The part that doesn't 
work is the list_tracks section. 

Thank You,
Keith 
[EMAIL PROTECTED]

#!/bin/sh


# Very simple example shell script for managing a CD collection.
# Copyright (C) 1996 Wrox Press.

# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.

# This program is distributed in the hopes that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.

# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.
# 675 Mass Ave, Cambridge, MA 02139, USA.


# A few global variables we need. Put them here for clarity.

menu_choice=
current_cd=
title_file=title.cdb
tracks_file=tracks.cdb
temp_file=/tmp/cdb.$$
trap 'rm -f $temp_file' EXIT

get_return() {
  echo -e Press return \c
  read x
  return 0
}

get_confirm() {
  echo -e Are you sure? \c
  while true
  do
read x
case $x in
  y | yes | Y | Yes | YES ) 
return 0;;
  n | no  | N | No  | NO ) 
echo 
echo Cancelled
return 1;;
  *) echo Please enter yes or no ;;
esac
  done
}

set_menu_choice() {
  clear
  echo Options :-
  echo
  echo a) Add new CD
  echo f) Find CD
  echo c) Count the CDs and tracks in the catalog
  if [ $cdcatnum !=  ]; then
echo   l) List tracks on $cdtitle
echo   r) Remove $cdtitle
echo   u) Update track information for $cdtitle
  fi
  echo q) Quit
  echo
  echo -e Please enter choice then press return \c
  read menu_choice
  return
}

insert_title() {
  echo $*  $title_file
  return
}

insert_track() {
  echo $*  $tracks_file
  return
}

add_record_tracks() {
  echo Enter track information for this CD
  echo When no more tracks enter q
  cdtrack=1
  cdttitle=
  while [ $cdttitle != q ]
  do
  echo -e Track $cdtrack, track title? \c
  read tmp
#  case $tmp in
#  ) continue
#  ;;
#  *,*)echo Sorry, no commas allowed
#  continue
#  ;;
#  esac
  cdttitle=${tmp%%,*}
  if [ $tmp != $cdttitle ]; then
echo Sorry, no commas allowed
continue
  fi
  if [ -n $cdttitle ]; then
if [ $cdttitle != q ]; then
  insert_track $cdcatnum,$cdtrack,$cdttitle
fi
  else
cdtrack=$((cdtrack-1))
  fi
cdtrack=$((cdtrack+1))
  done
}

# This allows adding of a new CD

add_records() {
  # Prompt for the initial information

  echo -e Enter catalog number \c
  read tmp
  cdcatnum=${tmp%%,*}

  echo -e Enter title \c
  read tmp
  cdtitle=${tmp%%,*}

  echo -e Enter type \c
  read tmp
  cdtype=${tmp%%,*}

  echo -e Enter artist/composer \c
  read tmp
  cdac=${tmp%%,*}

  # Check that they want to enter the information
  
  echo About to add new entry
  echo $cdcatnum $cdtitle $cdtype $cdac

  # If confirmed then append it to the titles file
  
#  get_confirm  insert_title $cdcatnum,$cdtitle,$cdtype,$cdac
  if get_confirm ; then
insert_title $cdcatnum,$cdtitle,$cdtype,$cdac
add_record_tracks
  else
remove_records
  fi 

  return
}

find_cd() {
  if [ $1 = n ]; then
asklist=n
  else
asklist=y
  fi
  cdcatnum=
  echo -e Enter a string to search for in the CD titles \c
  read searchstr
  if [ $searchstr =  ]; then
return 0
  fi

  grep $searchstr $title_file  $temp_file

#  set $(wc -l $temp_file)
#  linesfound=$1
  linesfound=$(wc -l $temp_file)
  case $linesfound in
  0)echo Sorry, nothing found
get_return
return 0
;;
  1);;
  2)echo Sorry, not unique.
echo Found the following
cat $temp_file
get_return
return 0
  esac

#  if [ $linesfound = 0 ]; then
#echo Sorry, nothing found
#get_return  return 0
#  fi
#  if [ $linesfound != 1 ]; then
#echo Sorry, not unique.
#echo Found the following ...
#cat $temp_file
#get_return  return 0
#  fi

#  cdcatnum=$(cut -f 1 -d , $temp_file)

  IFS=,
  read cdcatnum cdtitle cdtype cdac  $temp_file
  IFS= 

#  if [ $cdcatnum =  ]; then
  if [ -z $cdcatnum ]; then
echo Sorry, could not extract catalog field from $temp_file
#cat $temp_file
get_return 
return 0
  fi

#  cdtitle=$(cut -f 2 -d , $temp_file)
#  cdtype=$(cut -f 3 -d , $temp_file)
#  cdac=$(cut -f 4 -d , $temp_file)

  echo

  echo Catalog number $cdcatnum
  

Re: A question for a programmer

1998-07-09 Thread Shaleh
Keith Alen Vance wrote:
 
 I am going through a book on Linux programming. One of the examples does
 not work. I was wondering if someone could take a look at the script and
 see why it doesn't work. The program is exactly like the example from the
 book, in fact I downloaded it from www.wrox.com the
 publisher of the book Beginning Linux Programming. The part that doesn't
 work is the list_tracks section.
 
 Thank You,
 Keith
 [EMAIL PROTECTED]
 
 
 list_tracks() {
   if [ $cdcatnum =  ]; then
 echo no CD selected yet
 return
   else
 grep $cdcatnum $tracks_file  $temp_file
 set $(wc -l $temp_file)
 num_tracks=$1
 if [ $num_tracks = 0 ]; then
   echo no tracks found for $cdtitle
 else {
   echo
   echo $cdtitle :-
   echo
   cut -f 2- -d , $temp_file
   echo }| more
^
This look fishy.  Is this a typo on your part?

 fi
   fi
   get_return
   return
 }

Normal bourne shell syntax does not use { } for blocks of code.  You
just use if...fi, fordone, etc.  What error do you get when you run
this?  I have not grabbed the source and run it myself.


--  
Unsubscribe?  mail -s unsubscribe [EMAIL PROTECTED]  /dev/null