Newsgroup: it.comp.lang.pascal
Titolo: help!!!!

Salve a tutto il ng.
Non riesco a trovare sull'help delle procedure equivalenti all istruzioni
del dos: "move",
"rename" o "copy". Esistono? Al limite, come faccio a spostare, rinominare o
copiare files?
Inoltre non riesco a capire perchè non mi funziona questo:
program prova;
uses dos;
begin
 exec('c:\prova2\arj','a ciao c:\prova2\*.bmp');
 readln;
end.
Dovrebbe compattare dei file con arj. I parametri sono giusti dato che se
faccio lo stesso
lavoro da promt del dos funziona. Il compile funziona.Schermo nero
nell'esecuzione ma niente errori.
Cosa c'è che non va?
Grazie

Possono esserci problemi di memoria (non abbastanza per
aprire una shell) o magari l'arj non e' li :-)
Cmq se hai il tp7 c'e un buon esempio nell'help di exec( )
ciao
--
Dreadnaut (dn)
drea...@liberoDALLASPAM.it

esistono i comando :
rename(file)
erase(file)
il copy lo crei tu e anche il move
procedure copy(var file1, file2 : file);
var b : word;
begin
    reset(file1);
    rewrite(file2);
    while not eof(file1) do
        begin
            read(file1,b);
            write(file2,b);
        end;
     close(file1);
     close(file2);
(* per la procedura move inserisci in questo punto il  comando erase(file1)
*)
end;
N.B.: non ho provato la procedura, ma penso funzioni bene
Ciao ReDiCuori
Ciao ReDiCuori
"Alex" <el_co...@liberoTOGLIQUESTO.it> ha scritto nel messaggio
news:YvEg6.19855$GM6.8...@news.infostrada.it...


Grazie per le risposte intanto.
Tuttavia conservo il problema della memora: ho inserito le direttive
indicate sell'esempio dell'help (ho anche modificato i valori, ma il
risultato non cambia).
Ho notato che viene il messaggio "out of memory" solo se inserisco la unit
graph. Tuttavia Xò il programma è piccolissimo.
Come devo fare per far usare al programma tutta (o quasi) la mem
disponibile?   (ho 128 di ram per cui ce nè a volontà!)
Grazie ancora
ReDiCuori ha scritto nel messaggio


 disponibile?   (ho 128 di ram per cui ce nè a volontà!)
1) Ma come cavolo scrivi ?  :)
2) I 128 Mbyte di RAM non servono a nulla perché sotto DOS
in modalità reale puoi usare i soliti 640K, e basta, e devono
servire a tutti: sistema operativo, driver e TSR, IDE,
il tuo SW, ARJ. Invece di fare partire direttamente l'ARJ,
prova ad avviare 
COMMAND.COM
. Ti si apre una finestra DOS da
cui puoi provare a far partire, da prompt, l'ARJ.
In questo modo simuli un caso peggiore di quello che accade in realtà:
S.O., IDE, il tuo SW, Command.com, ARJ . Se ti parte
correttamente, significa che il problema non è nella memoria
scarsa, ma in qualcos'altro (path ?). Se non ti parte vuol dire
che c'è poca memoria rimasta (dai il comando MEM e vedi quanta
ram libera sotto 1M rimane), la qual cosa non implica che
necessariamente il SW non funzioni, ma solo che viene sprecata
altrove dall'IDE e da 
command.com
. Magari se esci dall' IDE,
il solo eseguibile funziona.
Studiati l'esempio dell'Help che riporto sotto: ci trovi un po'
di tutto, dall'allocazione della memoria alle variabili d'ambiente.
C'è anche la risposta alla tua esigenza di copiare i file.
{$M 8192,0,0}
uses Dos;
var Command: string[79];
begin
  Write('Enter DOS command: ');
  Readln(Command);
  if Command <> '' then
    Command := '/C ' + Command;
  SwapVectors;
  Exec(GetEnv('COMSPEC'), Command);
  SwapVectors;
  if DosError <> 0 then
    Writeln('Could not execute 
COMMAND.COM
');
end.
--
Virgilio Lattanzi       HARPAX
Tel: 
+39 0733 816872
    via Fontanella, 55
Fax: +39 0733 819133    62012 Civitanova Marche MC
WWW: 
www.harpax.com
     ITALY

Mmmh non proprio, l'ide lavora in dpmi, quindi in mod. protetta, e
nella convenzionale mi sembra ce ne sia veramente poco.
Con o senza ide la differenza e' di qualche kb, non e' essenziale
Poi il command e' meno di 55kb mentre l'arj 200 e passa, fare la prova
lanciando prima una shell poi l'arj non ha molto senso :-)
--
Dreadnaut (dn)
drea...@liberoDALLASPAM.it

> var b : word;
mmmh e se il file ha dimensione dispari ?
La procedure e' un po' lenta cosi'... questa va meglio:
(anche lei non e' testata al 100% :-) )
const
 BufSize : word = xxxxx;
 (* quello che volete basta che <= 65526  - non mi chiedete
      perche', so' solo che di piu' _a volte_ da' fastidio
      cmq piu' grosso e' meglio e' per la velocita'
*)
Procedure fCopy(InFile,OutFile: string);
var
 FileIn,  FileOut : file;
 count, res         : word;
 buffer                : array[0..BufSize] of byte;
 dimen                : longint;
begin;
 Assign  (FileOut, OutFile);
 Assign  (FileIn, InFile);
 Reset  (FileIn, 1);
 Rewrite (FileOut, 1);
dimen := FileSize(FileIn);
while dimen > 0 do
 begin
  if dimen >= BufSize then count := BufSize else count := dimen;
  BlockRead (FileIn, buffer, count, res);
  BlockWrite(FileOut, buffer, res);
  dimen := dimen - res;
 end;
 Close (FileOut);
 Close (FileIn);
end;
occhio, controllo errori = *zero* :-)
