mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c++
Titolo: printf scanf cout cin

mi sto avvicinando da poco al C/C++ e su 2 libri diversi ho notato che
uno usa sempre cin e cout mentre l'altro printf e scanf.
che differenze ci sono?
thanx

le prime due sono tendenzialmente c++, le seconde tipiche c
-- 
giove
------------------------------------------------------------------------
Visualizza questa discussione: 
http://www.freenfo.net/usenet/thread594165.html
Profilo di giove: 
http://www.freenfo.net/usenet/member.php?userid=137

"tendenzialmente" e "tipiche" non vuol dire esclusive, giusto?
significa che potrei usare sempre le prime o sempre le seconde in C++ a
mia scelta o hanno oppure le prime permettono cose che le seconde non
fanno? o viceversa?
grazie...

 writes:

direi che queste cose dovrebbero essere ampiamente coperte da
qualunque testo base di c++.  comunque ecco la risposta della faq list
di comp.lang.c++...
[15.1] Why should I use <iostream> instead of the traditional <cstdio>?
Increase type safety, reduce errors, allow extensibility, and provide
inheritability.
printf() is arguably not broken, and scanf() is perhaps livable despite being
error prone, however both are limited with respect to what C++ I/O can do.  C++
I/O (using << and >>) is, relative to C (using printf() and scanf()):
 * More type-safe: With <iostream>, the type of object being I/O'd is known
   statically by the compiler.  In contrast, <cstdio> uses "%" fields to figure
   out the types dynamically.
 * Less error prone: With <iostream>, there are no redundant "%" tokens that
   have to be consistent with the actual objects being I/O'd.  Removing
   redundancy removes a class of errors.
 * Extensible: The C++ <iostream> mechanism allows new user-defined types to be
   I/O'd without breaking existing code.  Imagine the chaos if everyone was
   simultaneously adding new incompatible "%" fields to printf() and
   scanf()?!).
 * Inheritable: The C++ <iostream> mechanism is built from real classes such as
   std::ostream and std::istream.  Unlike <cstdio>'s FILE*, these are real
   classes and hence inheritable.  This means you can have other user-defined
   things that look and act like streams, yet that do whatever strange and
   wonderful things you want.  You automatically get to use the zillions of
   lines of I/O code written by users you don't even know, and they don't need
   to know about your "extended stream" class.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg


wrote:

Con le classi di iostream puoi fare tutto ciň che fai con
printf()/scanf(), ma lo fai in modo piů sicuro.  Inoltre,  considera
quanto riportato da Maurizio Loreti: "The C++ <iostream> mechanism
allows new user-defined types to be I/O'd without breaking existing
code.".  Quindi, in C++, č sicuramente meglio usare std::cin e
std::cout visto che ci sono.
Newsgroup: it.comp.lang.c++
Titolo: Controllare la porta parallela ad eventi (interrupt)

Ciao a tutti,
sono un po' a digiuno di C, poiché sviluppo più che altro in Java.
Dovrei controllare il cambiamento di stato della porta parallela e avevo
pensato di attivare il controllo dei nuovi valori allorché si modifica
almeno un bit degli 8 bit di dati.
Mi chiedevo quale sia la strada percorrere per intercettare gli eventi di
questo tipo.
Ho letto abbastanza riguardo alla difficoltà di gestione delle porte su
sistemi Win NT, 2000, XP, ma, se non ho capito male, dovrebbe essere
comunque possibile avendo gli strumenti giusti? Non è così?
Grazie a tutti e auguri!
Dustin

io ho creato qualche prog che invia e ho trovato stringhe che ricevono
sulla porta parallela.
contattami via email che facciamo una collaborazione.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c++
Titolo: [OT] qualità dei compilatori

Mi accade una cosa strana.
Ho un programma di ottimizzazione combinatoria (a console) che compilo
con DJGPP, EGCS e udite udite CBuilder4. Che ci crediate o no
l'eseguibile prodotto dal Builder è 3 volte circa **più lento** di
quello prodotto da DJGPP!!! Quando dico 3 volte significa che invece
di 10 secondi ce ne mette 30 (uso time(0) per calcolare il running
time). Incredibile... a dire il vero, nel Builder ho attivato le
ottimizzazioni (tutte quelle possibili a mio avviso) dal form
project-option, con DJGPP l'opzione -O3.
Il run dell'eseguibile viene fatto da finestra DOS sotto NT e il
codice *non* viene modificato di una virgola se non aggiungendo gli
header propri del Builder per le applicazioni a console.
Però, un compilatore che costa fior di soldoni... fare una figura
così... Certo, sarà ottimizzato per le applicazioni windows vere e
proprie, ma la fiura del menga ci rimane tutta... o sbaglio?
il_t@sso
il_t...@freemail.it

 proprie, ma la fiura del menga ci rimane tutta... o sbaglio?
prima di tutto il djgpp procuce codice a 32bit in modalità protetta
(gira anche sotto dos con dpmi), e non codice per win32. ovvio che
l'eseguibile dos gira di per sè più velocimente. L'opzione -O3 del djgpp
(come nei vari compilatori gnu) attiva -O2 e -finline-functions che
raramente incrementa le prestazioni. Devo dire che però usando anch'io
borland c++ builder, e djgpp gli eseguibili realizzati con il djgpp sono
sempre leggermente più veloci. Il fatto è che il djgpp viene
costantemente aggiornato alle nuove tecnologie!!! La borland invece
rilascia raramenti degli aggiornamenti del compilatore. C'è da dire
anche però che un compilatore borland riesce a rilevare meglio i
warning, segnala perdite di informazioni, descrive i warning ecc ecc =)
il test bisognerebbe effettuarlo realizzando un semplice programmino che
non visualizza output, magari scrivendo solo su file, e facendogli il
profiling :)
___________________________________________________________
                    _
 \ \// // //| | // |_ _|_|_ member of EventOrizon software
  \//\// // | |//  |_  | |   
http://members.xoom.it/wavexx
___________________________________________________________

profiling :)
SI, ma si output non ne fa per niente: 2 stringhe: start compute e
finished... per il resto è tutto calcolo sugli interi. La matrice
viene caricata interamente in memoria....
il_t@sso
il_t...@freemail.it

un'altra cosa che mi è venuta in mente: la qualità "del codice" del
djgpp è leggermente + scadente. Spesso e mal volentieri trovo bug nelle
classi basi + elementari, inoltre essendo il codice anche molto meno
esteso (mancano un sacco di funzioni che mettono nel borland) e che
penso contribuisca a rendere il codice più veloce

Newsgroup: it.comp.lang.c++
Titolo: Template che odia i 64 bit

Sto portando il codice di un newsreader a 64 bit.
Ho questo template che va benissimo a 32 bit, ma compilato a 64 bit dï¿œ
errore... non avendoli praticamente mai usati, sono un pï¿œ in ambasce.
//--------------------------------------------------------
template <> void AFXAPI
SerializeElements <TRange> (CArchive & ar, TRange *pItem, int nCount);
//--------------------------------------------------------
l'errore ï¿œ "error C2912: explicit specialization; is not a
specialization of a function template.
La prima prova che ho fatto (cambiare il typedef di RANGEINT in TRange)
non ha avuto effetto.
La seconda (scrivere template <class TRange> ecc. ecc.) ha cambiato
l'errore in "illegal use of explicit template arguments".
Posto la classe TRange qui sotto.
//--------------------------------------------------------
typedef LONG   RANGEINT;
class TRange : public CObject
{
public:
	DECLARE_SERIAL(TRange)
	TRange () {}
	TRange (RANGEINT lowerAndUpper) {m_lower = m_upper = lowerAndUpper;}
	TRange (RANGEINT lower, RANGEINT upper) {m_lower = lower; m_upper = upper;}
	TRange & operator=(const TRange &);
	TRange (const TRange& src);
	~TRange () {}
	RANGEINT Upper () const
	{return m_upper;}
	RANGEINT Lower () const
	{return m_lower;}
	void SetUpper (RANGEINT upper) {m_upper = upper;}
	void SetLower (RANGEINT lower) {m_lower = lower;}
	void Serialize (CArchive & archive);
#if defined(_DEBUG)
	virtual void Dump(CDumpContext& dc) const;
#endif
private:
	RANGEINT m_lower;
	RANGEINT m_upper;
};
//-----------------------------------------------------

 specialization of a function template.
L'istruzione sopra ha senso se prima il compilatore incontra 
un'istruzione del tipo:
template<class T> void AFXAPI
SerializeElements(CArchive& ar, TRange *pItem, int nCount)
Dovresti postare tale istruzione (o aggiungerla nel codice se manca, ma 
non credo, altrimenti darebbe errore anche a 32 bit).
-- 
Carlo Milanesi
http://carlomilanesi.wordpress.com/

 non credo, altrimenti darebbe errore anche a 32 bit).
Risolto.
Guardando la definizione di SerializeElements ho visto che definiva
nCount come INT_PTR, per cui bastava definirlo cosï¿œ anche nel template.
Grazie :-)
Newsgroup: it.comp.lang.c++
Titolo: Compilare per Dos

E' Possibile compilare con Microsoft Visual C++ un programma c / c++ che
giri in  Dos reale?
Se si come?
Grazie

Penso di no!
Prova con il DJGPP
--
Ciao da Kleidemos
C++ Programmer
Visual C++ 6

 wrote in message
news:85zga.53302$
Lr4.1...@twister2.libero.it

Io ne ho ancora fatti, (cosa intendi x DOS REALE??).
Se intendi una shell normalissima nella quale visualizzi tutto
in modalità testo, allora non dovrebbe essere un problema.
Io avevo creato un semplice SOURCE FILE e l'avevo compilato normalmente.
Come per i programmi win32 creo un file appropiato, lo faccio anche
per quelli in dos.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
news:1c8079978c43232df4f...@mygate.mailgate.org...

quello che hai fatto tu non credo sia dos ma credo sia windows in modalità
console.. il processore è in modalità protetta, hai 2GB di memoria a
disposizione (si fa per dire), puoi accedere alle API di windows, anche
grafiche (per esempio puoi aprire MessageBox o usare delle common dialog) e
sopratttutto non funziona se lo fai girare su un sistema operativo DOS
(quello che lui intende, credo, con dos "reale") :)
x tmx : Come detto su, puoi provare djgpp, se intendi come dos reale il
fatto che possa girare sotto una comune macchina con DOS installato. Se
invece richiedi per forza che il processore sia in modalità reale allora
dovrai cercare un compilatore vecchio mi sa (djgpp lavora comunque in
modalità protetta se non erro, appoggiandosi alle API DPMI).
Byez :)


Ho afferrato! Hai ragione, non girano infatti sotto dos, ti danno 
solo l'idea, vista la modalità testo.
Una ottima alternativa credo allora sia il compilatore della borland,
fermandosi alla versione 3.11, che ho usato anni fa. Credo che quello
soddisfa la richiesta di "dos reale".
Ciao, ciao.


 E' Possibile compilare con Microsoft Visual C++ un programma c / c++ che

New->Win32 Console Application dovrebbe fare al caso tuo


 Prova con il DJGPP
scherzi? il DJGPP è *strettamente* a 32 bit
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.0. C, C++ and ASM developers
                               and beta testers are welcome!

 scherzi? il DJGPP č *strettamente* a 32 bit
Ma, se non vado errato, puň funzionare anche in MS-DOS puro se si
attivano i servizi DPMI con l'apposito file (del quale non ricordo piů
il nome...).
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 ha scritto nel messaggio
news:85zga.53302$Lr4.1...@twister2.libero.it...

Grazie amici proverň con djgpp.
Newsgroup: it.comp.lang.c++
Titolo: CreateProcess

Problema:
come faccio a lanciare un mio programma (ad es mio.exe) con la CreateProcess
catturandone l'output? Mi perdo tra i 2000 parametri......
Fondamentalmente io creo un thread, lancio la CreateProcess e poi mi serve
catturare "da qualche parte" i messaggi (di testo) che il programma in
esecuzione sta lanciando.
NB - non posso usare popen() o _popen()!!!!
Grazie
Stefano Pirra

 ha scritto nel messaggio
news:8r5fig$71k$1...@nslave3.tin.it...

Scusa, eh... ma di quale sistema operativo stai parlando ?
Perché ho l'impressione che sia un'informazione fondamentale ;-)
Massimo

.....scusa.......intendevo sotto Win32


Newsgroup: it.comp.lang.c++
Titolo: compilatori..consigli

Borland Turbo Debugger 5.5 
The Free Borland C++Builder Compiler
Mi sapete dire qualcosa di questi due prodotti ?
Sono consigliati per iniziare ?
grazie...Adriano 

sono proprio alle prime armi...:(
ho installato 'The Free Borland C++Builder Compiler'
e non vedo niente..nessuna icona da cui partire...
installando poi il seguente...Borland Turbo Debugger 5.5
e cliccando su td32.exe mi si apre il 'turbo debugger'...è con questo che
posso editare e compilare i programmi ?
di nuovo grazie....Adriano

Newsgroup: it.comp.lang.c++
Titolo: Console e Processi

Ciao a tutti.
Devo aprire il processo: cmd.exe in una console, e passare input e output a
questo processo da un programma, invece che da tastira.
L'output, devo metterlo in un file.
Ho creato il processo con il seguente comando:
CreateProcess( "c:\\winnt\\system32\\cmd.exe",NULL,NULL,NULL,TRUE,CREATE_NEW
_CONSOLE,NULL,NULL,&si,&pi );
Cosě vedo la console che si apre.
Come posso fare a scrivere all'interno di tale console??
Ho trovato le funzioni:
WriteConsole(si.hStdInput,&charwr,1,&numcharwr,NULL);
Perň non scrivono.
Secondo me il problema č il HANDLE hConsoleOutput, che passo alla funzione
WriteConsole.
Come faccio a ricavarmelo dalla funzione CreateProcess???
Grazie 1000 a tutti.
Spero di essere stato chiaro.
Saluti
Maurizio
pra...@ciaoweb.it

 writes:

Questo messaggio non riguarda tanto il linguaggio C++ in se, quanto
piuttosto problematiche che sono caratteristiche di un particolare
compilatore e di un particolare ambiente operativo.
Per questo motivo il messaggio e' off-topic in questo gruppo, di cui
ti prego di leggere il charter; puoi avere maggior fortuna chiedendo
su it.comp.programmare.win32 .
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
Newsgroup: it.comp.lang.c++
Titolo: Perche' non funziona? (WSAStartup)

Sto provando a creare una applicazione di prova per mandare dei messaggi tra
2 computer collegati in rete e ho bisogno di usare una certa funzione che
pero' da' problemi, la parte di codice incrimanata e':
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData ); /* e' questa la riga che
da' errore*/
pero' in fase di link da errore:
Cpp1.obj : error LNK2001: unresolved external symbol _WSAStartup@8
Debug/Cpp1.exe : fatal error LNK1120: 1 unresolved externals
ho consultato la guida microsoft e la funzione si usa esattamente come
faccio io.
Perche' non funzia?
ciao

 faccio io.
Sei OT, questo NG parla di C++ e non di programmazione socket per windows!
Ad ogni mdo credo tu non abbia aggiunto la libreria ws2_32.lib al progetto
(se stai includendo winsock2.h).
Tommy


includi  : Winsock2.h
linka     : Ws2_32.lib
Newsgroup: it.comp.lang.c++
Titolo: c++ templates

qualcuno sa dirmi o indicarmi le giuste spiegazioni sui templates in c++?
grazie
< 
marv...@tiscalinet.it
 >

su 
http://www.icce.rug.nl/docs/cplusplus/
 c'e' un' ottima guida online sul
linguaggio, i templates vengono trattati in maniera esaustiva in un bel
capitolo di 40 pagine...
io l'ho stampato, tra l'altro sta tutto su un file html che puoi salvare
senza problemi...
ciao, in bocca al lupo, Davide
/ - / - | - \ - \
Davide Piras
pir...@engineer.com
\ - \ - | - / - /
Newsgroup: it.comp.lang.c++
Titolo: Passaggio di struttura ad una funzione

Salve, sto provando da parecchio tempo a far funzionare questa cosa che ho
in testa, ma non ci riesco mai e devo sempre trovare un'altra soluzione.
Ho dichiarato una struttura in un file così:
struct struttura
{
    int var1;
    int var2;
} nome[10];
All'interno di una funzione nello stesso file ho poi passato questo vettore
di strutture ad un'altra funzione, presente però in un altro file, tipo
così:
void main()
{
    ...;
    funzione(..., nome);
    ...;
}
dove funzione è appunto in un altro file, ovviamente messo negli include.
Nell'altro file, la funzione è dichiarata così:
void funzione(..., struttura nome[]);
però ricevo moltissimi errori, in particolare sulla riga del prototipo di
funzione il compilatore dice:
syntax error: identifier struttura
Qual'è il problema secondo voi? Immagino che ci saranno magari anche più
errori dato che purtroppo non ho trovato molti esempi e quindi sono andato
un pò seguendo quello che si fa di solito con le variabili normali. E'
fattibile una cosa del genere? In un caso simile, la struttura viene passata
per indirizzo o per valore? Cio+ nella funzione "funzione" la posso
modificare (come con i vettori normali) o viene copiata?
Grazie mille e scusate se sono stato impreciso.
Luca

Il problema e' che devi definire un file .h nel quale metti la struttura 
e poi puoi includere questo .h in entrambi i .cpp
Nel file ilmioheader.h metti la dichiarazione della struct
------------------------------------------------
struct struttura
{
     int var1;
     int var2;
};
// prototipo della fn
void funzione (...struttura *nome);
------------------------------------------------
Nel file  codice1.cpp
------------------------------------------------
#include "ilmioheader.h"
// Dichiara l'array
struttura nome[10];
void main ()
{
...
funzione (...nome);
}
------------------------------------------------
Nel file codice2.cpp
------------------------------------------------
#include "ilmioheader.h"
void funzione (...struttura *nome)
{
    	....
    	....
}
------------------------------------------------

 ------------------------------------------------
Grazie mille per la spiegazione. Avrei solo un'altra domanda. Ora il
compilatore rileva solo un errore ma non riusco a capire di che errore si
tratti. Probabilmente potrebbe essere un errore che ho commesso io
all'interno della funzione ma non capisco cosa sia, l'errore è:
program error LNK2019: unresolved external symbol "void __cdecl
funzione2(char * const,struct struttura*)"
(?funzione2@@YAXQADPAUstructFactors@@@Z) referenced in function "int __cdecl
funzione1(char * const,char * const)" (?funzione1@@YAHQAD0@Z)
dove funzione2 è chiamata all'interno di funzione1. Cosa significa questa
roba?
Grazie ancora per la pazienza.
Luca

 Grazie ancora per la pazienza.
Significa che nel progetto non hai incluso il file .cpp nel quale hai 
definito la funzione2.
Nel tuo progetto devi includere tutti i file .cpp che usi e tutti i .h
Newsgroup: it.comp.lang.c++
Titolo: MessageBox

Principiante.
Ho scritto il codice che segue ed ora vorrei poter mostrare il risultato
dell'elaborazione (Ici dovuta) in un MessageBox. come posso fare?
#include <iostream>
using namespace std;
class Ici {
public:
   Ici();      // contruttore
   void setIci( int, double, double, int, double ); // setta elementi
imposta
   void calcolaIci();     // calcola imposta
private:
   int capitale;
   double aliquota;
   double percentualePossesso;
   int mesiPossesso;
   double detrazione;
};
// Il contruttore Ici inizializza ogni dato-membro a 0.
Ici::Ici() { capitale = aliquota = percentualePossesso = mesiPossesso =
detrazione = 0; }
// Setta nuovi valori.
void Ici::setIci( int cap, double ali, double perc, int mesi, double detr )
{
     capitale = cap;
     aliquota = ali;
     percentualePossesso = perc;
     mesiPossesso = mesi;
     detrazione = detr;
}
// Calcola l'imposta
void Ici::calcolaIci()
{
     cout << ( capitale * aliquota / 1000 * percentualePossesso *
mesiPossesso / 12 ) - detrazione;
}
// Testa la classe Ici
int main()
{
    Ici I;   // Istanzia l'oggetto I della classe Ici
    int C = 0;   // Capitale
    double A = 0;  // Aliquota
    double PP = 0;  // Percentuale Possesso
    int MP = 0;   // Mesi possesso
    double D = 0;  // Detrazione
     cout << "Capitale: ";
     cin >> C;
     cout << "\nAliquota: ";
     cin >> A;
     cout << "\nPercentuale di possesso: ";
     cin >> PP;
     cout << "\nMesi di possesso: ";
     cin >> MP;
     cout << "\ndetrazione: ";
    cin >> D;
    I.setIci( C, A, PP, MP, D ); //Accede ai membri-dato privati tramite
setIci (pubblico)
    cout << "\nIci dovuta: ";
    I.calcolaIci();
    cout << endl;
    return 0;
}
Grazie per qualsiasi aiuto.
OS

 dell'elaborazione (Ici dovuta) in un MessageBox. come posso fare?
Ti leggi che di parametri ha bisogno la MessageBox e glie li passi? Non mi
sembra così difficile! Di sicuro la MB usa solo stringhe, quindi trasformi
la tua ICI in una stringa!
--- bye

Newsgroup: it.comp.lang.c++
Titolo: reference e puntatore

Ho la seguente funzione
funzione(const Classe & )
se ho un puntatore ad un oggetto Classe come posso passare tale oggetto alla
funzione?
L'oggetto puntato deve essere const?
Ciao.
Mau.

 L'oggetto puntato deve essere const?
No, non č necessario. La funzione non viola nessun diritto di accesso 
all'oggetto, garantendo un accesso piů ristretto.
-- 
---
In silenzio anche un idiota sembra intelligente. Ma non c'č problema,
l'idiota vuol sempre dire la sua.

 Mau.
Ciao!

 L'oggetto puntato deve essere const?
No, non e' necessario,l'importante e' che i metodi che vengono invocati in
"funzione(const Classe & )" abbiano uno specificatore d'accesso const, che
garantisce la non modifica dell' invarianza(rappresentazione interna)  dell'
oggetto.
--
Ivan Molella
ICQ: 162760950
Newsgroup: it.comp.lang.c++
Titolo: sstream o strstream

Salve,
il mio compilatore non possiede sstream e al suo posto (credo) e' definita
strstream:
anche gli oggetti sono diversi, infatti invece di ostringstream devo usare
ostrstream.
Come mai? E' una vecchia libreria? Il compilatore mi pare sia il DJGPP 2.95.
Anche il mingw32 (non so la versione ma e' quello del Dev-C++ 4) mi da gli
stessi errori.
Grazie

 Il compilatore mi pare sia il DJGPP 2.95.
Troppo vecchio. Io ho il 3.31 e non ha problemi con la libreria sstream.
Comunque la versione attualmente presente su 
www.delorie.com
 è la 3.43.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg
Newsgroup: it.comp.lang.c++
Titolo: Dimensione di Stak e Heap

Ciao ,
  Avrei delle domande che probabilmente ai piů sembreranno banali ma avere
delle risposte per me sarebbe importante.
Io ho un programma scritto in linguaggio C++; per quel che ne so, quando lo
stesso va in esecuzione gli vengono riservate 4 zone di memoria cosě
denominate:
1) Area Codice
2)Area Dati Globali
3)Stack
4)Heap
1)L'Area codice contiene ovviamente il codice del programma
2)L'Area Dati Globali contiene tutte le variabili a cui viene assegnata
memoria in modo statico ovvero per tutta la durata del programma.
   Finiscono in questa area:
                            -variabili globali
                            -eventuali dati membri statici delle classi
                            -variabili locali statiche di funzioni
                            -...........
3) Nello Stack finiscono i record di attivazione delle funzioni che
contengono parametri, variabili locali non statiche, indirizzo di
ritorno,valore restituito dalla funzione.Quando la funzione termina il
record di attivazione viene tolto.Pertanto lo Stack, come l'Heap,varia
dinamicamente.
4)Nell'Heap viene allocata memoria per i puntatori in modo dinamico mediante
le funzioni "new" o "malloc".-
Le dimensioni dell'Area Codice e dell'Area Dati sono note fin dall'inizio
dell'esecuzione del programma.
L'Heap e lo Stack invece  variano dinamicamente.La mia domanda č: all'inizio
dell'esecuzione del programma valgono "0" e poi man mano che il programma si
sviluppa variano dinamicamente la propria dimensione? Oppure, fin
dall'inizio al programma viene assegnata un'area Eeap e un'area Stack
entrambe con una certa dimensione e ,quindi, ciň che varia dinamicamente č
la percentuale di occupazione di queste aree con le dimensioni fissate? In
questo secondo caso, chi č che stabilisce quando debba essere grande l'Heap
e quanto debba essere grande lo Stack?Il compilatore?   Non ci sarebbe il
pericolo che data una dimensione troppo piccola all'Heap durante
l'esecuzione del programma questa venga prima riempita e poi superata
conducendo il programma al crash?
Suppongo di lavorare in ambiente windows.
Grazie

 Grazie
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/
Newsgroup: it.comp.lang.c++
Titolo: Array con diemnsione dipendente da costante

Ciao a tutti,
come posso dichiarare in una classe un array la cui dimensione dipende
da una costante ?
Posso usare la notazione array [cost] già nel prototipo ?
Grazie, Max

da una costante ?
Tutti gli 'array standard' hanno una dimensione definita da una
costante... tu cosa intendi???
Luc.

Luc wrote:

Intendo poter definire tra gli attributi di una classe una costante intera
e quindi settare come dimensione dell'array quello della costante.
Come si fa ?

 Come si fa ?
Puoi fare come qua sotto:
class A {
  static const int i = 5;
  double d[i];
};
Attenzione che non e' detto che tutti i compilatori supportino questa
tecnica.
Ciao,
Nicola

 tecnica.
allora forse un'espressione del tipo:
class  Bunch {
   enum {  size =  1000 };
   int  i[ size];
};
potrebbe risolvere il problema.
ciao
Claves do Amaral
claves.d...@netbusiness.it

};
Esteticamente mi sembra una soluzione molto brutta.
Da qualche parte ho comunque letto che il problema é risolvibile
inizializzando la costante esternamente come si fa con i classici
attributi static.
class Bunch
    {
    static const int size;
    int i[size];
    };
const int Bunch::size = 20;
Quest'ultima soluzione con il djgpp funziona correttamente, con il
BCB3 invece no.
Il Ghenio
-----
ZIO : Fun and games are over with. Anyone who dares
get in my way shall perish.
-----

In base allo Standard e' ora possibile inizializzare una costante statica
all'interno della definizione della classe.
class Bunch
    {
    static const int size = 20;
    int i[size];
    };
Alex

 BCB3 invece no.
appunto. hai provato con l'enum hack?
Claves do Amaral
claves.d...@netbusiness.it

Esteticamente mi sembra una soluzione molto brutta.
talmente brutta che č *consigliata* nientemeno che da Kernighan e Pike
in "Programmazione nella pratica". Anche se forse in C++ č preferibile
const static.
Anto
--
Antonio Cuni, 19 anni, studente
Brainbench Certification: 
Master C++: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688

 Grazie, Max
Forse voi questo ?
template <int size>
  class A {
        int     a[size];
  };
[...]
  A<50> a;
        a.a[i]  //  0<= i < 50
Newsgroup: it.comp.lang.c++
Titolo: Borland C++ Projet problem!!!

Se ho un main di estensione main.cpp che richiama una classe sott.h le quali
funzioni sono implementate in un file sott.cpp, come faccio a costruire un
Projet con il mio compilatore Borland C++ 5.00?
Grazie



Semplice, inserisci nel project i due file con estensione .cpp e, se
proprio devi modificare il file sott.h, aggiungilo pero' in cascata a
sott.cpp. Attento al TargetExpert, il target deve essere il DOS.
Bye.
Joseph Parrello - OWL/C++ Programmer
http://JoParrello.freeweb.org
(
jopar...@geocities.com
)

 wrote in message
3795013c...@news.iol.it...


 [...]
Prego evitare simili lunghi posting, specialmente se ripetuti due volte!
Grazie.
EMG
Newsgroup: it.comp.lang.c++
Titolo: Vettore di stringhe

Vorrei inizializzare in una classe un vettore costante di stringhe.
Non riesco a capire come posso farlo:
Cosa devo mettere nell'header della classe? E nel costruttore?
Ho provato con:
// Header
char **Lista;
//Costruttore
Lista = {"Nome1", "Nome2", "Nome3"...
Ho anche fatto delle prove con lunghezza fissa:
char d[3][4] = {"mmmm","llll"};
Poi però quando ridefinisco il vettore (es d[3][4] = {"mmmm","llll","kkk"};)
da errore....
Boh, cosa sbaglio?

 Ho provato con:
Ma credo tu non abbia provato con
std::vector<std::string>
Io ti consiglierei di farlo...
-- 
Gerolamo


Se è un vettore costante perchè lo devi ridefinire? L'inizializzazione con
{} è permessa solo all'atto della dichiarazione.
Al limite comunque puoi usare strcpy
strcpy(Lista[2] ,"kkk");
Ciao
Andrea



La sintassi che usi per assegnare stringhe costanti ad un vettore è
fattibile SOLO in fase di inizializzazione.
char d[3][4] = {"mmmm","llll"}; //questo è possibile
d[3][4] = {"mmmm","llll"}; // questo no
:)

 Boh, cosa sbaglio?
eheh deve dare per forza errore! meno male che il compilatore è preciso!
:-))
Pensaci, d[3][4] cosa vuol dire? un vettore di stringhe non è altro,come
l'hai anche
tu dichiarata, una matrice m x n con elementi di tipo char di 1 byte quindi.
per cui l'elemento d[3][4] è un carattere!!! della 3° riga e 4° colonna.....
non puoi inizializzarlo così !!!
es. corretto(penso.....eheh):
char VET_STR[ ] [ ] = {"ehyyy", "ci sei alloraaaa?" };
così sarà il compilatore a dimensionare correttamente e non te ne devi
importare tu.
ed è già una costante sennò anteponi "const" e niente lo potrà modificare.
oppure, per le dimensioni:
#define RIGHE 10
#define COLONNE 30
const char V [RIGHE] [COLONNE] { ....come hai visto prima.....};
o meglio ancora in C++ è infine
rendere costanti anche le dimensioni, così:
const short int COLONNE = 10;
const short int COLONNE = 30;
(supponendo poche righe e colonne.....e non migliaia o milioni....perciò ho
messo
short int e non int)
Ciao ciao
Francesco
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

:-)
Grazie a tutti!!

 char VET_STR[ ] [ ] = {"ehyyy", "ci sei alloraaaa?" };
Non mi pare corretto. Un array multidimensionale deve avere specificate
tutte le dimensioni tranne eventualmente la prima. Quindi si puo' fare
cosi':
char VET_STR[ ] [80] = {"ehyyy", "ci sei alloraaaa?" };
oppure cosi':
char VET_STR[2] [80] = {"ehyyy", "ci sei alloraaaa?" };
o anche cosi':
char *VET_STR[2] = {"ehyyy", "ci sei alloraaaa?" };
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila
Newsgroup: it.comp.lang.c++
Titolo: Porta parallela

Problema:
Ho creato un OCX  in vb5 per gestire la porta parallela.
Ho scritto una dll in c++  utilizzata dall'OCX per avere direttamente
accesso alla  porta(senza passare da driver windows)
Es. di funzioni della dll
#define LPT1 0x3BC   // indirizzo porta parallela
#ifndef WIN32
extern "C" CALLBACK WEP(int);
extern "C" int FAR PASCAL LibMain(HANDLE hModule,WORD wDataSeg,WORD
cbHeapSize,LPSTR lpszCmdLine);
#define DLLCALL _export
#else
#define DLLCALL  __stdcall    //_declspec(dllexport)
#endif
BOOL DLLCALL ScriviSuLPT1(int Valore)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
_outp(LPT1,(BYTE)Valore);
return TRUE;
}
int DLLCALL LeggiSuLPT1(void)
{
int ValoreLetto;
AFX_MANAGE_STATE(AfxGetStaticModuleState());
ValoreLetto=_inp(LPT1);
return ValoreLetto;
}
Il codice funziona ma non fa quello che dovrebbe perche', oltre a fornire il
dato occorre (credo)  inviare sempre sulla porta un comando.
La mia parallela e' allocata da 03BC a 03BF.
Penso che il comando vada inviatoad uno di questi quattro indirizzi.
Non ho comunque le idee chiare in merito.
Mi piacerebbe avere chiarimenti ed in particolare un esempio della sequenza
di  'outp(xxx,xxx) necessaria a inviare un dato su parallela. (Sarebbe bello
anche per leggere.)
Grazie mille!!!!!!! e a buon rendere!!
Alessandro        
alem...@tin.it


La tua implementazione è troppo elementare, avresti qualche probabilità che ti
funzioni se la tua porta e di tipo EPP o ECP dopo aver configurato
correttamente usando le altre porte il tipo di funzionamento.
Se pensi di usarla in modo manuale devi anche aggiungere i vari comandi di
strobe ecc.
Essendo il tema abbastanza lungo ti consiglio di andare sul
sito INTEL e prelevare la documentazione relativa al chipset per la gestione
della parallela per aggiungere al tuo codice le inp e outp necessarie.
Dopo che le avrai lette magari ci risentiamo.
-----------== Posted via Deja News, The Discussion Network ==----------
http://www.dejanews.com/
       Search, Read, Discuss, or Start Your Own
Newsgroup: it.comp.lang.c++
Titolo: Linkaggio, o meglio, linking

Se io ho un file .LIB da 100 Mb pieno di funzioni e lo linko insieme a un
OBJ che mi chiama UNA SOLA di quelle funzioni, nel risultante EXE ci saranno
tutti i 100 Mb o solo quelli che servono (ammettendo che la funzione che mi
serve non ne chiami altre a sua volta) ???
Ciao by Stefano from Italy
http://www.aspide.it/freeweb/imperial

serve non ne chiami altre a sua volta) ???
no, nessun liker che sia almeno decente ti mette tutti i 100Mb. I
linker normali ti mettono tutto il modulo in cui risiede la funzione,
mentre i migliori (se gli obj sono stati compilati in modo opportuno)
ti mettono solo la funzione che viene effettivamente usata.
Gianpaolo Bottin
- Live Long and Prosper -

serve non ne chiami altre a sua volta) ???
Solo quelle che servono (ammettendo che il file .LIB sia organizzato in modo
semi-decente... sarebbe *teoricamente* possibile fare un .LIB con un solo
.OBJ gigante, ma sarebbe anche assurdo!).
Alex

ti mettono solo la funzione che viene effettivamente usata.
E secondo te il linker dato insieme al Visual C++ 5 che fa ??? :-)
PS.
Che vuol dire "modulo" che contiene la funzione ???
Per caso che se io creo 4 file .cpp da 25Mb l'uno pieni zeppi di funzioni,
li compilo e li unisco in un solo .LIB, poi linko quel lib a un obj che
richiede una funzione del terzo (per esempio) di quei file, lui mi ci mette
solo i 25Mb del file ???


solo i 25Mb del file ???
si e' cosi'. Un modulo e' un'unita' di compilazione, un file c/cpp o
il rispettivo obj. I linker piu' vecchi funzionavano tutti cosi',
mentre quelli piu recenti (almeno quelli MS) se gli obj sono stati
compilati con le giuste opzioni (Enable function level linking) sono
in grado di estrarre dall'obj solo le funzioni che effettivamente
servono.


solo i 25Mb del file ???
Si`, questo fa un linker "normale" (supponendo che tu *riesca* a mettere
insieme 4 OBJ da 25M ciascuno, naturalmente...).
Alex

 solo i 25Mb del file ???
Solo se questo modulo non usa funzioni che risiedono negli altri 
moduli, senno' timette 50-75 o 100 a seconda dei casi.
<< The show must go home ! >>
** Email replies to 
md7...@mclink.it
 **
visit my homepage at: 
http://www.volftp.tin.it/IT/IT/ITALIANI/rullo/index.htm
 

 servono.
What happens with variables with file scope? ( In case of function level
linking)
Alexei

linking)
mmm, this is interesting. I really don't know what happens, I haven't
done any test about this, but I think that a smart linker will include
a copy only if a function refences them. A dumb linker will include
them every time a function of that module is included.
Gianpaolo Bottin
- The truth is out there -
Newsgroup: it.comp.lang.c++
Titolo: problemi con classi virtuali e g++

ciao a tutti
ho un problema con una gerarchia di classi di 2 livelli.
al primo livello c'è una classe base con due metodi virtuali puri, al 
secondo livello, ci sono delle classi che iplementano i metodi virtuali 
puri ereditati.
il problema è che quando dalla classe derivata chiamo il metodo virtuale
(regolarmente implementato) ottengo un segmentation fault.
o ispezionato tutto con gdb, e ho notato, usando il comando
print ComputeBoundingVolume(), che è il mio metodo virtuale, che il 
punto di ingresso del metodo e 0x0
ovvero NULL.
che sta succedendo?
ho anche provato a implementare inline i metodi virtuali nella classe 
base ma niente, l'errore resta.
uso g++ 3.2.3 su slackware 9.1

 
non riesci a postare un breve codice compilabile che manifesti il problema?

 non riesci a postare un breve codice compilabile che manifesti il problema?
cercherò di riprodurre l'errore.
grazie

 virtuale nel costruttore?
potrebbero uscirti i demoni dal naso. Scherzi a parte, il c++ prevede 
comportamento indefinito, quindi evita di chiamare funzioni virtuali sia 
nel costruttore che nel distruttore.
-- 
There are better things in life than alcohol, but alcohol makes up for 
not having them. - Terry Pratchett.

 nel costruttore che nel distruttore.
Questo soltanto se si tratta di funzioni virtuali *pure*. Negli altri casi,
la chiamata a funzioni virtuali durante l'esecuzione del costruttore e del
distruttore di una classe base viene risolta con la funzione definita in
quella stessa classe (o in una sua classe base), non quindi con l'eventuale
override della classe derivata.
Max

 override della classe derivata.
Giustissimo, svista mia. Bisogna però averla ben chiara questa regola, 
altrimenti c'è la possibilità che il programma non faccia quello che ci 
si aspetta.


Newsgroup: it.comp.lang.c++
Titolo: Linguaggio Eiffel

Ciao a tutti,
qualcuno sa se esistono compilatori free per Eiffel?
Qualcuno di voi ha esperienze con questo linguaggio/metodologia di sviluppo?
GRAZIE
Daniele.

 qualcuno sa se esistono compilatori free per Eiffel?
http://www.loria.fr/projets/SmallEiffel/
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
Newsgroup: it.comp.lang.c++
Titolo: Acquisizione risorse e FILE*

Ciao.
Devo interfacciarmi ad una libreria (C++!!!) che si aspetta un FILE*.
Siccome fare FILE*=fopen... mi costringe ad un bel try/catch, preferirei
incapsulare il FILE* in una classe ed usare un oggetto automatico,
cosicche' il file verra' comunque chiuso all'uscita della funzione.
Domanda:
_ esiste qualcosa di standard? (nella libreria c++?)
_ c'e' modo di recuperare il FILE* da un std::ifstream?
_ esiste qualcosa in altre librerie piu' o meno diffusamente accettate?
(boost?)
So che scrivere una classe che faccia quello che voglio e' banale, solo
vorrei evitare di riempire i miei progetti di cose inutili...
 bye & Thanks
	av.

 (boost?)
Che io sappia, no.
Ciao,
Nicola

 _ c'e' modo di recuperare il FILE* da un std::ifstream?
Spero che questo possa aiutarti
http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&selm=58if8r%24dkj%242%40news.belwue.de&rnum=3
Marco.

 (boost?)
...
Per le tue prime due domande la risposta è si ( al contrario di ciò che
qualcun'altro ha scritto ).
Leggi:
 "Using FILE*s and file descriptors with IOStreams"
http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html
Buon lavoro,
FabioMDF
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 
http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html
Dove, cito testualmente, è scritto:
    The v2 library included non-standard extensions to...
                            ^^^
                            |||
Così ha pienamente ragione chi ha già detto
che la risposta alla domanda:
    ....esiste qualcosa di standard?...
è un secco:
    NO !
- Dario (stanco di contraddire chi risponde alle domande senza leggerle)

 _ esiste qualcosa in altre librerie piu' o meno diffusamente accettate?
C'e' un'interfaccia tra ifstreams e FILE * che funziona bene, scritta
da Nicolai Josuttis.  
http://www.josuttis.com/cppcode/fdstream.html
 .
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg

 puo' lanciare eccezioni.
Certo che fopen non lancera' eccezioni; del resto, se lo facesse,
immagino che il FILE* non sarebbe ancora aperto e il problema non
sussisterebbe.
Cio' che mi preoccupa e' invece che un'eccezione possa essere generata
*tra* la chiamata a fopen e quella a fclose.
 bye & Thanks
	av.
Newsgroup: it.comp.lang.c++
Titolo: eccezione

Salve a tutti! Sto studiando le eccezioni ed ho scritto e compilato questo
piccolo programma come esempio, ma non da i risultati che dovrebbe. Il
codice è:
#include <iostream>
using namespace std;
void Xhandler()
{
  try {
    throw "ciao";
  }
  catch(char *) {
      cout<<"Cattura di un char * all'interno di Xhandler\n";
      throw;
    }
}
int main()
{
  cout<<"Inizio\n";
  try {
  Xhandler();
    throw "ciao";
  }
  catch(char *) {
    cout<<"Cattura di un char * all'interno di main\n";
  }
  cout<<"Fine\n";
  return 0;
}
Molto semplice, ma dopo la compilazione (senza errori) il risultato è:
#./eccezione
Inizio
Aborted
La domanda è semplice: perchè? Qual'è l'errore che ho commesso?
Grazie per l'aiuto, 
MAX

    catch(char *) {
    catch( const char * ) { 
MM

Prova questo:
void Xhandler() throw(const char *)
{
  try {
    throw "ciao";
  }
  catch(const char *e) {
      cout<<"Cattura di un char * all'interno di Xhandler "<<e<<endl;
      throw;
    }
}
int main()
{
  cout<<"Inizio\n";
  try {
      Xhandler();
  }
  catch(const char *e) {
    cout<<"Cattura di un char * all'interno di main"<<e<<endl;
  }
  cout<<"Fine\n";
  return 0;
}
Il throw chiamato senza parametri ti permette di rilanciare l'eccezione
catturata.
Occhio al tipo dell'eccezione e alla funzione che deve essere
dichiarata con throw ...
Ciao

 dichiarata con throw ...
Non e' obbligatorio. Tra l'altro diversi compilatori ignorano
bellamente le exception specifications e sono molti a ritenere che
queste portino piu' problemi che benefici.
Ciao,
Nicola

Grazie ad entrambi (sia Max M. che Feno!). La soluzione che ho adottato č
una č via di mezzo di quella che avete proposto voi, ho cioč aggiunto
nei due catch:
catch(const char*),
cosě ora tutto č regolare:
#:/eccezione
Inizio
Cattura di un char * all'interno di Xhandler 
Cattura di un char * all'interno di main 
Fine
La domanda che vi pongo č perchč ho dovuto fare questa correzione?
Sapete dove potrei leggere qualcosa on-line di specifico su questa cosa?
Grazie ancora,
MAX

Occhio che tu hai passato alla throw una char * non istanziato e
prefissato "ciao"!!!
Se tu modifichi il codice in questo modo ottieni lo stesso risultato
con la differenza che passi una stringa variabile.
void Xhandler() throw(char *)
{
  char *pippo = "ciao";
  try {
    throw pippo;
  }
  catch(char *e) {
....
e nel main:
  try {
      Xhandler();
  }
  catch(char *e) {
Ciao
Newsgroup: it.comp.lang.c++
Titolo: Gestione righe di un file txt - c++

Ciao a tutti..
arrivo subito al punto..
dovrei creare un metodo (anzi due) di una classe file che esegua
l'inserimento o la cancellazione di un record in un file di testo
(txt) in c++..
le ho provate di tutte anche con i seekp e seekg per accedere
direttamente ai recordo ma niente..
qualcuno conosce qualche algoritmo particolare per eseguire queste
operazioni?
Praticamente dato in input il numero della riga (-1 ovviamente)
dovrebbe o aggiungere una riga e quindi scalare di un posto le
seguenti; oppure,sempre data la riga in input la riga, la elimini e
trasli in su le seguenti..
Accetto qualsiasi suggerimento..
grazie mille..

Accetto qualsiasi suggerimento..
Devi riscrivere interamente il file. E' l'unica strada possibile, per
la natura stessa dei file di testo.

 fai le operazioni che devi poi riscrivi tutto.
Concordo pienamente. Anzi, visto che l'OP parla di record, potrebbe
forse rendere il tutto piu' flessibile utilizzando una lista con tipo
una struttura custom rappresentante il contenuto dei record. In
lettura de-serializza, in scrittura serializza.
Saluti,
The Librarian

Newsgroup: it.comp.lang.c++
Titolo: aiutoooooooooo

Ho un problema che mi sta facendo impazzire! Per molti sara' sicuramente una
cavolata....
Allora, come faccio a chiamare un exe esterno al mio progetto usando il
borland c++ builder??
Non trovo nulla sull'help e non so come muovermi?
Ringrazio anticipatamente chi vorra' aiutarmi...

borland c++ builder??
Prova a vedere l'help della funzione "system()"
Luc.


int system(const char *command);
Ciao.

Grazie dell'aiuto. Ho creato un file bat che faccio eseguire con system()
Mi ero abituato troppo bene con il runapp del delphi (un componente fatto ad
hoc per quella funzione).
Ciao,
Marco,
"Luc" <TOGL...@katamail.com-TOGLI> ha scritto nel messaggio
news:mgeeits3ova517ull...@4ax.com...


 Ringrazio anticipatamente chi vorra' aiutarmi...
Prego. Se non trovi altro, cercati via http un esempio su come usare la
CreateProcess.
Ciauz.
Newsgroup: it.comp.lang.c++
Titolo: Programmare Tcp/Ip sotto Dos

Salve a chiunque voglia rispondermi,
sono un novello programmatore C++, ma per far vedere al mio principale
quanto valgo vorrei creare un programma che a lui servirebbe come il pane.
Il programma dovrebbe svolgere le seguenti funzioni:
1) Girare sotto Dos ovviamente
2) Collegarsi ad Internet tramite modem utilizzando un qualsiasi ISP
(Internet Service Provider non tutti lo sanno).
3) Collegarsi ad un'indirizzo IP ed entrare in un FTP
4) Fare l'upload di un file di testo di circa 300 Kb
5) Fare il download di un file analogo
6) Scollegarsi da Internet
7) Salutare l'utente (Quest'ultimo magari si può anche evitare)
In attesa di una risposta, ringrazio anticipatamente
Ciao
Matrix

> 7) Salutare l'utente
std::cout << "Ciao" << std::endl;
spero di esserti stato utile.  >-)
ciao
xaero

 7) Salutare l'utente (Quest'ultimo magari si può anche evitare)
E' un signor programma.
Suggerimento: un buon programmatore C++/su_compilatore_X,
oltre a saper fare tutto in C++/su_compilatore_X,
sa anche quando non usarlo.
Scaricati il perl per windows da 
www.perl.com
.
potrai creare dei file batch in perl, che basta lanciarli
da riga di comando "perl nomefile"
o farci doppio click con il mouse affinchè vengano eseguiti.
con il perl si dispongono gia' di comodi comandi
per uploadare/downloadare in ftp:
io non l'ho usato, ma mio cugino proprio
in questi giorni ha scelto questa strada con successo,
a quanto pare.
E con rapidita': se conosci gia' il perl, in un giorno
hai finito, con lo stupore del tuo capo.

 E' un signor programma.
Potresti chiamarlo "Linux"; sarebbe meglio, visto che saluta anche.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
The instructions said to use Windows 98 or better - so I installed FreeBSD.

 hai finito, con lo stupore del tuo capo.
ma cosa gli racconti nei 6 mesi che servono per cominciare ad 
impararlo?-) 

 impararlo?-)
Mio cugino l'altro ieri aveva questo identico problema.
Ieri mattina ci stava provando con BCB4.0 ed i componenti
ftp della netmanage.
Ieri pomeriggio, constatato che non sarebbe stato
comunque agevole, ha scaricato il perl
e si e' messo a tampicciare -non conosceva il perl-.
Questa mattina mi ha mandato una mail in
cui afferma che c'e' riuscito.
Non credo sia diventato un drago del perl,
cmq c'e' riuscito -se devo credere a mio cugino-.

 wrote in
message GDTD6.550$2l....@news1.tin.it...
