1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Запуск программы с параметрами, (выбор каталога, куда будет смотреть прога)
Сделал программку, которая залезает в заданный каталог и считает контрольную сумму находящихся там файлов. Надо, чтобы имя каталога можно было задавать во время выполнения программы. Т.е. в нортон коммандоре набрав что-то типа
Код
sum test1
программа работала внутри C:/Test1, соответственно при "sum test2", внутри C:/Test2
Код программы :
program sum; {$R-} { kill checking on error 201} {$o-} { in theory kills overlay or maybe error 215 - arifmetic overflow} uses Dos,Printer,OPString,Graph,CRT; var S : SearchRec; dir_name:string; control_sum : longint;{with longint works, originally it was "word"} all_sum : longint; read_sumb : word; f:file of char; {i:integer;}{dublirovanie peremennoi, - maybe in future need to uncomment} ch : char;
{/////////////////////////////////////////////} procedure calc_control_sum; var i : integer; ch : char; begin assign(f,dir_name+S.name); reset(f); control_sum := 0; while not EOF(f) do begin for i :=0 to 2 do begin if EOF(f) = true then break; read(f,ch); read_sumb := (read_sumb + longint(ch)) shl 8; {shl-left sdvig} end; if EOF(f) = true then break; read(f,ch); read_sumb := read_sumb + longint(ch); {$Q-} control_sum := (control_sum + read_sumb); {$Q+} if (control_sum and $80000000) <> $0 then i := 1 else i := 0; control_sum := (control_sum shl 1) + longint(i); end; writeln(HexL(control_sum)); {$Q-} all_sum:=all_sum+control_sum; {$Q+} close(f); end;
procedure look_into_rmo; begin writeln('C:\Fregat\'); writeln('_________________________'); dir_name:='C:\fregat\'; FindFirst(dir_name+'*.*' ,SysFile,S); while DosError=0 do begin with S do write('KC '+Name+' = '); calc_control_sum; FindNext(S); end; writeln('___________________________'); writeln(''); end;
procedure look_into_decod; begin writeln('C:\Fregat\decod'); writeln('___________________________'); dir_name:='C:\fregat\decod\'; FindFirst(dir_name+'*.*' ,SysFile,S); while DosError=0 do begin with S do write('KC '+Name+' = '); calc_control_sum; FindNext(S); end; writeln('___________________________'); writeln(''); end;
procedure look_into_mod; begin writeln('C:\Fregat\mod'); writeln('___________________________'); dir_name:='C:\fregat\mod\'; FindFirst(dir_name+'*.*' ,SysFile,S); while DosError=0 do begin with S do write('KC '+Name+' = '); calc_control_sum; FindNext(S); end; writeln('___________________________'); writeln(''); end;
procedure look_into_tbl; begin writeln('C:\Fregat\tbl'); writeln('___________________________'); dir_name:='C:\fregat\tbl\'; FindFirst(dir_name+'*.*' ,SysFile,S); while DosError=0 do begin with S do write('KC '+Name+' = '); calc_control_sum; FindNext(S); end; writeln('___________________________'); writeln(''); end; { //////////////////////////////////////////// ///// Main Program ///// //////////////////////////////////////////// } var test:char; catalog:boolean; begin all_sum:=0;
catalog:=true; dir_name:='C:\fregat\'; FindFirst(dir_name+'*.*' ,SysFile,S); while DosError=3 do begin catalog:=false; writeln('Љ в «®Ј C:\Fregat Ґ бгйҐбвўгҐв.'); break; end; while DosError=0 do look_into_rmo; { dir_name:='C:\fregat\decod\'; FindFirst(dir_name+'*.*' ,SysFile,S); while DosError=3 do break; while DosError=0 do look_into_decod;
dir_name:='C:\fregat\mod\'; FindFirst(dir_name+'*.*' ,SysFile,S); while DosError=3 do break; while DosError=0 do look_into_mod;