CONV2SND.doc [the updated version from Jeffrey L Hayes – tvdog from 1996]

                        *                      *
                        *  CONV2SND.PAS: 2.02  *
                        *                      *
                        *   February 3, 1993   *
                        *     Kenneth Udut     *
                        *   Revised 10/15/96   *
                        *      J.L. Hayes      *
                        *                      *





[Note: My modifications are also public domain.  Ken wrote much of the 
following, but I have changed a lot of it to match this version. - J.L. 

Now enough of this screaming!

1.  CONV2SND is a program with one thing in mind:  To open the worlds
    of digitized sounds created on other machines and by other methods
    to anyone using a Tandy 1000 SL, TL, RL, RLX, 2500 RLX, RSX and
    every other machine that uses:


    Ken wrote: "I wish that Tandy had created something a few years ago 
    that would have done this, as it might have kept the Tandy's with the 
    superb 8-bit DAC a little more in step with the SoundBlaster, the 
    Macintosh, the Amiga and the Atari ST, all of which are able to create 
    superb digitized sounds and have programs that allow you to share them 
    with one another.

    "So, here it is."

2.  To start the program, type:

        CONV2SND <infile>


        CONV2SND <infile> <outfile>

    The process will then take place (almost) automatically.  Filenames can 
    include drive and path if you want.  If you use the first form, the 
    output filename will be the same as the input filename, including drive 
    and path if present, but with an ".snd" extension attached.  If you use 
    the second form, the output filename will be what you specified.  If 
    the output filename does not have an extension, it defaults to ".snd".  
    There is no default for the input file, so you have to specify the 
    extension for it.  If you want the output file not to have an 
    extension, end its name with a period.

    As of version 2.00, CONV2SND can read and understand .wav headers.  The 
    .wav will be detected by the header, not by the filename.  CONV2SND 
    will check that the .wav is an 8-bit mono file and display some advice 
    if it isn't (see below).  If the .wav is 8-bit mono, CONV2SND will read 
    the sampling rate from the header and check to see if it is within 5% 
    of one of the three rates supported by SOUND.PDM.  If so, the sampling 
    rate will be taken from the .wav header, and you won't be asked about 
    that.  If not, you will be told to resample the file.  There is a 
    program available to do this, discussed below.  If the .wav header is 
    invalid, you will be given the option of continuing as if the file were 
    not a .wav.  I don't know how useful that will be.

    You will be asked a couple of questions.

    A) Asks about the sampling rate (speed of playback).  You won't be 
       asked this question if CONV2SND is able to determine the sampling 
       rate from the .wav header.

       These are the options (Ken's notes):

       5500 is a slow sampling rate, often used for speech purposes or some
            games.  [5500 seems to be rare nowadays. - JLH]

       11000 is the the most common sampling rate.  It is #2 on the 
             selection list and the one you will want to try first.  The 
             only reason it is so popular is that it is of sufficient 
             quality for music and such.  5500 really isn't.  WAV files are 
             usually sampled at 11000 samples per second.

       22000 is most often used with the Macintosh Sound files.  It is of a 
             higher quality, but it does take up more disk space, which is 
             why it is the 2nd most popular sampling rate to record at.  
             [This rate is becoming more common. - JLH]

       If you screw up and select the wrong one, that's okay!  Just redo the
       procedure and select a different rate next time!

       [It should be mentioned that 44000, or 44kHz, is an increasingly 
       common rate.  This is the rate that audio CD's are sampled at.  The 
       Tandy sound chip is perfectly capable of going that fast, but 
       SOUND.PDM does not support that speed.  I have written a .wav player 
       for the Tandy chip that will play .wav's at 44kHz - see Snd2wav.doc.  
       Included here with CONV2SND is a utility called Ppwav that can cut 
       the sampling rate of these .wav's down to 22kHz so that CONV2SND can 
       convert them.  See below. - JLH]

    B) Asks for the "name" of the sound.

       This isn't the file name.  This is the name that appears when you 
       are in SOUND.PDM, right next to "Name: ", in the right hand box.  If 
       you don't specify a name, none will be used.  This is a change from 
       version 1.98, which required you to enter a name.  It is a good idea 
       to specify a name anyway, in case the name of the file gets changed 
       at some point in the future.

       You can read the name of the sound by typing DEBUG filename.snd and 
       then "d".  You will see the name of the sound file in the right hand 
       side of the screen.  (NOTE: "q" gets you out of DEBUG)

    C) Asks whether you want to convert to the new DeskMate .snd file 
       format.  The old format is native to the 1988 version of SOUND.PDM; 
       the new format is native to the 1989 version.  Any version of 
       SOUND.PDM can read the old format, so it is a good idea to convert 
       to that one unless you have a reason not to.  In other words, you 
       probably want to say "no" to this question.

       Programs using Frank Durda's PSSJ Digital Sound Toolkit (not from 
       Tandy) do not understand the old format, so you need to convert to 
       the new format for them.

    D) Asks for your name.  "No real reason yet, but I'm thinking of one!" 
       writes Ken.  Version 1.98 required you to enter your name; this 
       version will call you "CONV2SND user" if you don't enter a name.

    A new file with your sound will be created.  This is the DeskMate SOUND 
    version of the other digitized file.

3.  You will need to do the following after the file is created:

    * Go into SOUND.PDM, and load the new .SND file (F2, Open)

    * Play the file and see if the conversion was done right.  If the file
      sounds like Alvin the Chipmunk, the sampling rate you gave was too 
      low; go back and run CONV2SND again with a higher rate.  If it sounds 
      like Lurch on "The Addams Family," the rate is too high, and you need 
      to try a lower one.  (That is, unless the file *is* a recording of 
      Lurch! :-)  If the file sounds like nothing at all, just static, it 
      may not be an 8-bit mono PCM file.  You will have to use a program 
      called Sox to convert it to one before CONV2SND can use it; see 

      If the input file was a .wav, you should not have this problem.  If 
      the .wav is of a type that can't be converted (most can), CONV2SND 
      will tell you why and halt without creating an output file.

    * If the sampling rate seems right, carefully remove any noise at the 
      beginning of the file, using a very small increment (use "sample").  
      Beginning noise, if present, represents the header of the original 
      sound file; it is not actual sound.  There are a few types of sound 
      files that don't have a header ("raw" files made by Sox are one - see 
      below), but most do.  The noise will be a short click or pop.

      Again, if the input file was a .wav, the .wav header will be deleted 
      automatically, and this problem will not arise.

    * Hit F2 and Save the file.

      Example: ROCKY.WAV is converted into ROCKY.SND
         After listening to the file to check the conversion and getting 
         rid of the little beginning noise, hit F2, and Save.  Exit 
         SOUND.PDM if you don't want to do more with the file at that time.

Here are some problems you may have, and what to do about them:

    * If the file sounds like nothing at all, just static, it may not be an 
      8-bit unsigned mono PCM file.  That means the sound data in the file 
      is not the right type for SOUND.PDM, and it will have to be converted 
      to 8-bit unsigned mono PCM before CONV2SND can use it.  There is a 
      program called Sox that can tell you what kind of file it is and do 
      the conversion.  As of this writing (8/15/1996), Sox is available by 
      ftp from:

      Get file:


      and read the documentation that comes with Sox.  You will need to 
      tell Sox to make its output file a RIFF WAVE file, size "byte," "1 
      channel" and select a sampling rate of 5500, 11000, or 22000.  Use 
      the "verbose" option with the "stat" effect to find out what the 
      sampling rate of the original file is; if it's close to one of those 
      three, leave it alone.  CONV2SND will accept sampling rates within 5% 
      of 5500, 11000, or 22000.  It is best not to resample if you don't 
      have to since it introduces noise.  Warning:  Sox is a little 
      confusing to use at first.

      As an alternative to Sox, this distribution includes a utility called 
      Ppwav that operates only on .wav files.  Ppwav can convert wav's with 
      more than one channel to mono and larger sample sizes to 8-bit.  It 
      can also cut the sampling rate of a file in half.  Sox does all that 
      Ppwav does and more, but Ppwav is much faster and easier to use.  If 
      you have a .wav that can't be converted because of one of the 
      problems that Ppwav can solve, CONV2SND will refuse to convert the 
      file and tell you to use Ppwav.  See the separate documentation file 
      on Ppwav.  Note that there are rare types of .wav's that neither Sox 
      nor Ppwav can convert.

    * If you've tried all 3 sampling rates, 5500, 11000, and 22000, and 
      none of them seems to be right, you will have to resample the sound 
      to change the sampling rate to one of those three.  SOUND.PDM can 
      only use one of those 3 rates.  Sox (see above) can be used to do 
      this.  Changing the sampling rate will introduce noise, unfortun- 
      ately; change to a sampling rate that is an integer multiple of the 
      original to minimize the noise.

      Other sampling rates that I have seen are 8000, 15000, and 44000.  
      Sun .au files are usually sampled at 8000 (note that Sun .au is not 
      PCM but mu-law - Sox can convert these to .wav).  If the input file 
      is a .wav, CONV2SND will refuse to convert the file if the header 
      indicates that the sampling rate is not one of the three that 
      SOUND.PDM supports.

    * If CONV2SND tells you the disk where the output file goes is full, 
      you will need to specify another drive for the output file, one with 
      more space on it.  If you have a single-floppy system, you can 
      specify drive B:, and DOS will prompt you to swap disks when needed.  
      It will be awkward to do it this way, but it will work.

    * If SOUND.PDM tells you the .snd file won't fit in memory, there is 
      unfortunately not much you can do.  If your system can take 
      additional DOS memory, you can install additional memory if you 
      haven't already.  This is a very cheap upgrade and highly 
      recommended; check your owner's manual to find out how.  I'm 
      referring to systems with less than 640k of DOS memory; I doubt that 
      SOUND.PDM will use expanded or extended.

That's it!  Ken's phone (908) 241-6246 is open for your use up 'till about 
11pm or so.  He is Kenneth Udut, 170 East Clay Avenue, Roselle Park, NJ USA 

Note:  Ken hasn't worked 
with this program in a while 
and doesn't seem to be on the 
Internet any more.  
-JL Hayes, Oct 15, 1996

I'm still here, Jeff. :P
-K Udut, March 23, 2015

I am responsible for versions 2.00 and above, 
including much of the above text.  My phone is (207) 866-7903.  I'm on the Internet.  Snailmail: Jeffrey L. Hayes, 130 Forest 
Ave., Lot 1, Orono, Maine 04473.

"Thanks for reading and hope you NOT ONLY enjoy using it, but also play 
around with the source code and work with it!  

"I want to see a world where source code is freely distributable, where 
there isn't all that "data-hiding" and all that.  I would hate to see a 
society where the 'elite programmers' only knew the secrets of 'real' 
programming, while the peons were kept down low...

"I prefer openness and honesty, personally :)

"Talk to you soon!


"February 3, 1993"

FIDONET: Kenneth Udut @ 1:107/900
America Online: K Udut
PC-Link: K Udut
CompuServe: INTERNET>

Home Address:
Kenneth Udut
170 East Clay Avenue
Roselle Park, New Jersey 07204-2050

Phone Numbers:
(908) 241-6246
(908) 241-8528  --  FAX number

Can be found on:
The Juice Bar BBS, located in Roselle Park, New Jersey, USA
(908) 298-0764.  I'm user #11, and a VERY VERY active poster!

I also run a list on BITNET. 
Y-RIGHTS@SJUVM.BITNET - discussion on the rights of kids and teens.

"Leave me a message somewhere or give me a phone call!  I'll set a pot of 
tea out for you and we'll chat :)" - Ken

Also check out the Tandy sound package!  Play mono or stereo 8- or 16-bit 
.wav's of arbitrary size at up to 65535 Hz, record .wav's of arbitrary 
length at up to 62kHz, convert raw 8-bit sound files to .wav, convert 16- 
bit or stereo .wav's to mono 8-bit, convert .snd instrument files to Amiga 
.mod samples (including looped samples!), use your Tandy DAC with programs 
that support a generic DAC, and play your Tandy like a piano with the 3- 
voice chip (chords too!).  All source code included, and the best, most 
complete programming information on the Tandy sound that you will find 
anywhere!  All free!  How do I get this marvellous package, you ask?  Just 
ftp it from:


           -----------[technical stuff]------------

Many (but not all) types of sound files are basically identical to DeskMate 
.snd.  That is, the actual sound data is encoded in exactly the same way.  
The difference lies in the "header."

The header of a file is a small series of bytes, usually 44 in the case of 
DeskMate .snd files.  The purpose of a header?

A header tells the program how big the file is, as most programs that read 
digitized sound files need to be specially told how many bits of sound they 
need to load up.  It also might tell you the "name" or description of the 
sound file.  The sampling rate (how fast the sound was recorded and should 
be played back) is also usually included.

Christopher Taveres was the first to try to decode the .snd header.  
Chris's effort appeared as part of his SOUNDOFF.C program in _PCM_, the 
Tandy magazine.  Here's what he came up with:


/* Sound Off!
/* Written by Christopher Taveres 
/* Copyright (c) January 1992
/* Falsoft, Inc.
/* PCM
/** Definintion for the header block for Deskmate .snd files **/

struct dmheader {            /* Structure of the header block      */
       int marker;           /* Marker bytes - should be 00 1a     */
       char note_count;      /* Number of notes in instrument file */
       char inst_num;        /* Instrument number                  */
       char inst_name[10];   /* Instrument name                    */
       int sample_rate;      /* Sampling rate                      */
       char filler[16];      /* I don't know what this does        */
       unsigned long sample_size;  /* Number of samples in file    */
       char filler2[8];      /* More unknown space                 */


Ken noticed that the marker bytes could be 1A 01 instead of 1A 00.  The 
number of samples confused him, however.  After fiddling around with 
SOUND.PDM for a while, I filled in most of the blanks as follows:

TANDY DESKMATE .SND FORMAT NOTES (old .snd file format)

Tandy .snd files are created by Sound.pdm, a program that came with the 
proprietary DeskMate environment.  They are used by Music.pdm to create 
music modules (.sng files).  DeskMate Sound and Music require the Tandy 
sound chip.

Tandy used two incompatible .snd file formats.  The first format, described 
here, was used by the 1988 and 1989 versions of DeskMate Sound and Music - 
the version bundled with the 1000SL and 1000TL.  The second format, 
described below, was used by the 1990 versions of these programs - the 
version bundled with the 2500-series.  The 1990 version of Sound.pdm can 
read but not write the old file format and can be used to convert to the 
new format; the 1988 version of Sound.pdm does not understand the new 

There are two types of DeskMate .snd files, "sound" files and "instrument" 
files.  Both contain 8-bit unsigned PCM samples.

Sound files are garden-variety sample files with a fixed-length header 
giving the name of the sound, the recording frequency, and the length of 
the sound.  Sound files may be recorded at 5500Hz, 11kHz or 22kHz.

Instrument files contain samples as well as frequency and looping 
information used by Music.pdm to represent an instrument.  Instrument files 
provide for attack, sustain, and decay (I'm not sure whether the decay 
section is ever actually played) with several samples having different 
implied frequencies and being used by Music.pdm to represent the instrument 
in different pitch ranges.  Up to 16 different notes (with 16 different 
samples) can be contained in one instrument file.  Instrument files are 
always recorded at 11kHz.

Frank Durda notes that if the sound was recorded on a Tandy 1000SL or 
1000TL, the actual sampling rate will be slightly different from the rate 
specified in the file.  The adjustment required does not appear to be a 
simple function, though.  The old format does not describe the recording 
hardware anyway.

Both sound files and instrument files may be compressed in one of two ways, 
"music" compression or "speech" compression, or they may be uncompressed.  
Music compression uses a combination of run length encoding and non- 
adaptive differential PCM.  Speech compression adds a silence suppression 
step before the run length encoding.  Both compression types are lossy, 
speech compression more so.  The Tandy Digital Sound Toolkit, now in the 
public domain in binary form, can be used for decompression.  Frank Durda's 
PSSJ Digital Sound Toolkit also contains decompression code.  It is 
available in both source and binary forms but is restricted to 
noncommercial use.  Sound.pdm can also be used to decompress an .snd file.

There are some programs for playing .snd files at my ftp/WWW site:

Basic stuff for beginners :-):

   A sound can be represented mathematically as a waveform that is a 
   function of time; for example, y = sin(t) would represent a pure tone.  
   The sound wave is continuous, however, and computers deal with discrete 
   data.  Hence, to represent a sound in a computer, the waveform is 
   "sampled" at regular intervals and its level recorded.  The more 
   frequently the wave is sampled, and the finer the measurement of its 
   level, the closer the approximation to the original wave, and the better 
   the quality of the recorded sound.  The chip that samples the sound wave 
   is called an "analog-to-digital converter," or ADC.  When the recorded 
   sound is to be played back, another chip takes the samples and changes 
   them back into an approximation of the sound wave.  That chip is called 
   a "digital-to-analog converter," or DAC.  In the Tandy, the same chip, 
   called "PSSJ," performs both functions.

   There are different ways of representing the level of the sound wave 
   when sampling.  The simplest way is to record the sound level as an 
   integer, usually in 8 or 16 bits.  This is called "pulse code 
   modulation," or PCM.  In unsigned PCM, zero is the lowest possible level 
   of the sound wave, and the samples range from 0 to 255 (8 bits) or from 
   0 to 65535 (16 bits).  In signed PCM, zero is the middle level of the 
   wave, and the samples range from -128 to 127 (8 bits) or -32768 to 32767 
   (16 bits).  The Tandy chip uses 8-bit unsigned PCM samples.  It is also 
   possible to record the level of the sound wave as a real number, or 
   rather an approximate real number.  A-law and mu-law encoding are 
   examples of that.  Once the samples have been recorded, they can be 
   compressed by various methods.  "Run length encoding," "differential 
   pulse code modulation," and "adaptive differential pulse code 
   modulation" are a few compression methods.  Some compression methods are 
   "lossy," meaning that when you decompress the compressed file, you don't 
   get back *quite* the original sound.  It is frequently possible to get 
   more compression if you can tolerate some loss in the sound quality.

   Many of the numbers below are given in hexadecimal, or base-16 notation.  
   Hexadecimal is a common way to express numbers when programming at the 
   machine level.  In base-16, letters A through F are used to represent 
   "digits" 10 through 15.  Also: "word" is a 16-bit unsigned integer, and 
   "dword" is a 32-bit unsigned integer.

   "American Standard Pitch" refers to the sound frequencies assigned to 
   the various musical notes by the American Standards Association.  Sound 
   frequencies are based on A above middle C being 440 cycles per second.  
   This A is called A4.  An octave below that is A3, an octave above, A5.  
   The frequency doubles with each octave increase in pitch.  Sound.pdm 
   does not display standard notes to you, though.  Standard octaves begin 
   at C, so you would have A#2, B2, C3.  Sound.pdm starts its octaves at A.

   The sampling rate has nothing to do with the pitch frequency, except 
   that the rate must be at least twice as high as the highest frequency 
   you want to record.

The old DeskMate .snd file header consists of 16 bytes of fixed header 
information followed by one or more 28-byte note records.  The sample 
information, which may be compressed, follows the header.

DeskMate .snd File Format - Fixed Header

  offset    size      what
  ------    ----      ----

  0         byte      1Ah (<control>-Z, prevents DOS TYPE from trying to
                      put the file on the screen).

  1         byte      Compression code:  0 = no compression; 1 = music
                      compression; 2 = speech compression.

  2         byte      Number of notes in the instrument file.  1 if sound
                      file.  There can be a maximum of 16 notes in an
                      instrument file.  Note:  when an instrument file is
                      created, it automatically has one unset note placed
                      in it.

  3         byte      Instrument number.  0 if sound file; 0FFh if instrument
                      file with no number set.  Valid instrument numbers in
                      an instrument file are 1 to 32.  Use this field to
                      distinguish a sound file from an instrument file.

  4         10 bytes  Sound or instrument name.  The name is null-terminated,
                      so the name may be at most 9 characters long.

  0Eh       word      Sampling rate in samples per second.  Note that although
                      a sampling rate other than 5500, 11000 and 22000 can be
                      entered here, Sound.pdm will not actually play at other

  10h       variable  Note records begin, 28 bytes each.  Number of records
                      given in byte 2 above.

DeskMate .snd File Format - Note Record

  0         byte      Pitch of the note:  1 = A1 in American Standard Pitch;
                      2 = A#1; etc.  A1 is lowest note allowed; highest note
                      allowed is B6 (3Fh).  Sound files have 0FFh here; so do
                      instrument files with no note set.
                          Note that Sound.pdm does not designate notes in the
                      standard manner to the user.  Although A1 and B6 in
                      Sound.pdm are the same as A1 and B6 in standard pitch,
                      Sound.pdm starts octaves at A rather than at C (as is
                      standard).  Thus, middle C, C4 in standard pitch, is C3
                      in Sound.pdm.

  1         byte      Sound files, and instrument files with no pitch set,
                      have 0 here.  If the pitch is set, this byte is 0FFh.

  2         2 bytes   Range of the note, first byte is lower limit, second
                      is higher limit.  Byte encoding as for offset 0 (i.e.,
                      01h to 3Fh).  Sound files have FF FF here; so do
                      instrument files with no range set.

  4         dword     Offset in the file where samples for this note begin
                      (zero-relative), after compression if that was done.

  8         dword     If compressed, the length of the compressed data in the
                      file for this note.  Uncompressed files have 0 here.

  0Ch       dword     Set to zero.

  10h       dword     Number of samples in the note, after decompression if

  14h       dword     Number of sample at start of sustain region for the
                      note, relative to the first (zeroth) sample of the note.
                      For sound files, or if sustain is not set, this field is

  18h       dword     Number of sample at end of sustain region for the note,
                      relative to the first (zeroth) sample of the note.  For
                      sound files, or if sustain is not set, this field is 0.


These files are created by the 1990 version of DeskMate Sound.pdm, bundled 
with the Tandy 2500-series computers.

This information was provided by John Ball (, author of 
Playsnd, and by the PSSJ Digital Sound Toolkit of Frank Durda IV.

Like the old format, the new format header consists of a fixed part 
followed by one or more sample descriptors.  The fixed part is 114 bytes; 
the sample descriptors are 46 bytes each.  Samples are still 8-bit unsigned 
PCM, possibly compressed.

Fixed header:
    offset       size        what
    ------       ----        ----
      0          44 bytes    Name or description of the sound.  According 
                             to John Ball, this is null-terminated ASCII.  
                             According to Frank Durda, this is ASCII 
                             terminated with carriage return, line feed, 
                             and <control>-Z (1Ah).
      2Ch        byte        <Control>-Z (1Ah).  As with the old format, 
                             this prevents the file from being typed to the 
                             screen with the DOS TYPE command.
      2Dh        byte        Format code:  80h.
      2Eh        word        Number of sounds in the file, 1 for sound 
                             files.  Instrument files may have more than 1 
                             sound (note).
      30h        byte        Instrument number of an instrument file.  
                             Sound files have 0 here.
      31h        17 bytes    Reserved, set to 0.
      42h        word        Compression code (0 = no compression, 1 =
                             music compression, 2 = speech compression).
      44h        20 bytes    Compression information; refer to the PSSJ 
                             Digital Sound Toolkit.  This information does 
                             not seem to be needed to decompress if 
                             compression types 1 or 2 were used.
      58h        word        Sampling rate in Hz.
      5Ah        word        Reserved, set to 0.
      5Ch        word        Hardware bias value, refers to the recording 
                             hardware used.  Refer to the PSSJ Digital 
                             Sound Toolkit.  If writing the file, you can 
                             set this to 0.
      5Eh        20 bytes    Reserved, set to 0.
      72h        variable    Sample descriptors begin.

Sample descriptors (number given by word at 2Eh above):
    offset       size        what
    ------       ----        ----
      0          dword       Link to next sample descriptor (offset in file
                             of next sample descriptor record).  0 if last.
      4          word        Sound options, refer to the PSSJ Digital Sound 
                             Toolkit.  1 = player should close the file 
                             after playback.  If writing the file, you can 
                             set this to 0.
      6          byte        Pitch of note (01h-3Fh), 01 = A1 in American
                             Standard Pitch; 0FFh if not set.
      7          byte        Unknown (compare old .snd format; value is 00
                             or FF, but seemingly unrelated to pitch 
                             setting).  Only used by Sound.pdm, according 
                             to Mr. Durda.
      8          2 bytes     Range of note.  First byte is lower limit,
                             second is higher limit.  Values as for byte
                             at offset 6 above; FF FFh if not set.
      0Ah        dword       Offset in file of start of sound data for
                             this sample.
      0Eh        dword       Length of sample sound data in bytes, after 
                             compression if that was done.
      12h        dword       Uncompressed length of sound data (number of
      16h        dword       Start of sustain region.
      1Ah        dword       End of sustain region.
      1Eh        16 bytes    Reserved, set to 0.

//// end of conv2snd.doc ////

Leave a comment

Your email address will not be published. Required fields are marked *

2 + nine =

Leave a Reply