UNIT TP_debug;

INTERFACE
uses TP_decl,
     PRINTER,
     TP_misc;

Procedure WriteDebugInfo(Instring : String);
Procedure ToBothEr(S : STring);
Procedure ErrorExit(errorcode : integer);
Procedure Warning(S:String);

IMPLEMENTATION


(********************************************************)
   Procedure WriteDebugInfo(Instring : String);
(********************************************************)
Begin
If debug then
    case debugout of 
        SCREEN      : WriteLn(InString);
        DEBFILE     : WriteLn(DebugFile,Instring);
        PRINT       : WriteLn(Lst,Instring);
    End;    
End;    


(********************************************)
    Procedure Help;
(********************************************)
Begin
(* WriteLn('A correct call to Midi2TeX looks like this :'); *)
WriteLn('');
WriteLn('    MIDI2TEX midifilename [TeXfilename] [-option1] [-option2] ...');
WriteLn('');
WriteLn('Switch -s suppresses note generation for tracks #');
WriteLn('Switch -o determines order of tracks to display on staffs (up-down)');
WriteLn('Switch -b assigns the bass clef to staff # (counted from top to bottom)');
WriteLn('Switch -a1..-a5 assign the alto clefs to staff # (from top to bottom)');
WriteLn('Switch -i assigns 2 or more staffs to one instrument');
WriteLn('Switch -q determines the quantization note time, 1,2,4,8,16,32,64,128');
WriteLn('Switch -p redefines the part time, (default a quarter note)');
WriteLn('Switch -f forces the slopes of the beams to be zero');
WriteLn('Switch -h changes the horizontal size of the score [1600  *0.1mm]');
WriteLn('Switch -v changes the vertical size of the score [2400 *0.1mm]');
WriteLn('Switch -m select music size [20,16]');
WriteLn('Switch -e change \elemskip value (in pt)');
{$IFDEF ST}
WriteLn('Switch -x skips wait for key hit at end of program');
{$ENDIF}
WriteLn('Switch -d@ switches on debugging info, @ can be any of the following :');
WriteLn(' NONE    : no debugging,             SCREEN  : debug info to the screen');
WriteLn(' PRINTER : debug info to the printer,   FILE : debug info to a file');
WriteLn('Switch -? displays this help message');
End;

(********************************)
 Procedure ToBothEr(S : STring);
(********************************)
Begin
WriteDebugInfo('Fatal error:'+S);
WriteLn('');WriteLn('Fatal error:'+S);
End;

(********************************)
 Procedure Warning(S : STring);
(********************************)
Begin
WriteDebugInfo('Warning:'+S);
WriteLn('Warning:'+S);
End;


(********************************************)
    Procedure ErrorExit(errorcode : integer);
(********************************************)

Begin
  case errorcode of
       0 : Help; 
       1 : ToBothEr(' No input file specified, or file does not exist ');
       3 : ToBothEr(' MidiFile track '+B2S(curtrack)+' is not ok');
       4 : ToBothEr(' Found a NoteOff without a NoteOn');
       5 : ToBothEr(' Can only translate MIDI files of type 1, sorry...');
       6 : ToBothEr(' Nil pointer detected in NoteOff search');
       7 : ToBothEr(' No. of order indices does not correspond with No. of tracks in file');
       8 : ToBothEr(' Staffindex out of range, you tried to change a staff attribute which I cannot handle');
       9 : ToBothEr(' Heap exhausted during initializing memory');
       10: ToBothEr(' The noteheap appeared to be empty during a note request to the noteheap');
       11: ToBothEr(' A note value exceeded 127, probably a program bug');
       12: ToBothEr(' Invalid PartTime entered, only one of 1,2,4,8,16,32 allowed');
       13: ToBothEr(' Invalid quantization time entered, use switch -? to get proper range');
       14: ToBothEr(' Can only define one multi-staff instrument in this version');
       15: ToBothEr(' Definition of an instrument of one track is useless');
       16: ToBothEr(' The Slurr-array is exhausted, too many slurrs (9) for MusicTeX');
       17: ToBothEr(' Process terminated by user ');
       18: ToBothEr(' The Beam-array is exhausted, too many beams (9) for MusicTeX');
       19: ToBothEr(' -h,-v,-m and -k option can only take one parameter');
       20: ToBothEr(' -m option parameter must be either 20 or 16');
       21: ToBothEr(' -k option parameter must be between -8 and 8');
       22: ToBothEr(' -a1..-a5 option parameter is not correct');
       23: ToBothEr(' -s option parameter is not correct');
       24: ToBothEr(' Unexpected end of MIDI file reached, file corrupted ?');
       Else
         ToBothEr(' Unknown error , either a corrupted midi file or a bug..');
  end;
  WriteDebugInfo('Program Terminated');
  Case ErrorCode of
     1,7,8,12,13,14,15 :  WriteLn('Run program with switch -? to get additional help');
  Else
     If MIDIFileOpened Then
        Begin
        WriteLn(TeXFile,'%MIDI2TeX file processing aborted due to a non-run time error');
        WriteLn(TexFile,'\finmorceau');
        WriteLn(TexFile,'\bye');
        End;
  End;
  Halt;
End; (* ErrorExit *)

Begin
End.