program trks2mid; uses SysUtils, Algemeen, MidiDoos; var { File containing the filenames of tracks: } Sporen : string; Doel : string; procedure Some_Help; begin Writeln('TRKS2MID'); Writeln; Writeln('Compose Midifile from separate Tracks'); Writeln; writeln('Syntax: [program] [composed] [OMF]'); Writeln; Writeln('composed = name of input file containing filenames of tracks'); Writeln(' OMF = name of Output MidiFile'); end; procedure Read_Parameters(var OK : boolean); begin OK := true; if ParamCount <> 2 then begin Some_Help; OK := false; Exit; end; Sporen := ParamStr(1); Doel := ParamStr(2); if not FileExists(Sporen) then begin Writeln(Sporen + ': does Not exist'); OK := false; Exit; end; end; procedure Append_Track(MF : Midi; naam : string); { Append Track to MidiFile } var lengte,L,k : integer; buffer : bytes; TF : file; begin AssignFile(TF,naam); Reset(TF,1); lengte := FileSize(TF); Setlength(buffer,Lengte); Blockread(TF,buffer[0],lengte); L := Length(MF.invoer); SetLength(MF.invoer,L+lengte-14); for k := 14 to lengte-1 do MF.invoer[L+k-14] := buffer[k]; CloseFile(TF); end; procedure HoofdRoutine; { Beginning of Main program } var MF : Midi; TracksFile : text; tel,zelfde,memo : integer; OK : boolean; naam : string; begin MF := Midi.Create; Read_Parameters(OK); if not OK then Exit; AssignFile(TracksFile,Sporen); Reset(TracksFile); tel := 0; zelfde := 0; while not EoF(TracksFile) do begin Readln(TracksFile,naam); if naam = '' then Continue; if not FileExists(naam) then Continue; MF.Read_MidiFile(naam); MF.Check_Structure(OK); if not OK then Break; OK := (tel = 0) or (zelfde = MF.Ticks); if not OK then begin Writeln(naam,' NOT a correct Track(s)File'); Break; end; zelfde := MF.Ticks; tel := tel + 1; end; if not OK then Exit; if tel < 1 then begin Writeln('NO tracks defined.'); Exit; end; memo := tel; tel := 0; Reset(TracksFile); while not EoF(TracksFile) do begin Readln(TracksFile,naam); if naam = '' then Continue; if not FileExists(naam) then Continue; if tel = 0 then begin MF.Read_MidiFile(naam); if memo > 0 then MF.set_Type01(1); MF.set_Tracks(memo); end else begin Append_Track(MF,naam); end; tel := tel + 1; end; Close(TracksFile); MF.Write_MidiFile(Doel); end; BEGIN HoofdRoutine; END.