Newsgroup: it.comp.os.linux.development
Titolo: Muovere il cursore in C: cosa usare?

Ciao a tutti!
Sto facendo un programma in C con Linux RH6.1, e vorrei disporre di comandi
per muovere il cursore (come "gotoxy" che usavo con il Borland C++).
Posso trovare qualcosa di simile nelle librerie standard?
Grazie.

per muovere il cursore (come "gotoxy" che usavo con il Borland C++).
leggiti il tutorial delle ncurses (non so come siano organizzati i
pacchetti in RH6.1, nella debian e' nel pacchetto libncurses4-dev)
-- 
Andrea Iosio                                            .---.
                                                       < ^ ; ~,
                                                        (_  _,    "Piyo"
                                                         J^^>

 Posso trovare qualcosa di simile nelle librerie standard?
Purtroppo no. Devi cercare tra quelle non standard fornite dal tuo
compilatore.
EMG

 per muovere il cursore (come "gotoxy" che usavo con il Borland C++).
$ man ncurses
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

:> Posso trovare qualcosa di simile nelle librerie standard?
: Purtroppo no. Devi cercare tra quelle non standard fornite dal tuo
: compilatore.
Falso, le lib curses sono il modo standard di fare questo da SYSV in poi.
Le lib ncurses sono l'implementazione opensource della libreria curses.
L'utilizzo e' semplice e la documentazione a corredo buona.
ciao
antirez

 Falso, le lib curses sono il modo standard di fare questo da SYSV in poi.
Per standard EMG  intende standard c,ossia tutto il c che puoi portare da un
sitema/compilatore all'altro senza problemi.
Ivan Molella

 Falso, le lib curses sono il modo standard di fare questo da SYSV in poi.
Di quale standard stai parlando? Io del C standard ISO. Non ho idea di
cosa sia SYSV.
EMG

 sitema/compilatore all'altro senza problemi.
Perché, esistono altri C standard oltre quello ISO? Io penso che tutti
dovrebbero intendere la stessa cosa altrimenti cosa è stato creato a
fare uno standard?
EMG

 wrote:
: Perché, esistono altri C standard oltre quello ISO? Io penso che tutti
: dovrebbero intendere la stessa cosa altrimenti cosa è stato creato a
: fare uno standard?
Scusate, mi riferivo (sbagliando) allo standard
de facto per fare questa operazione sui sistemi Unix.
Penso che per essere portabile l'unica e' questa:
#ifdef VT100
	bla
...
e poi compilare con -D(my_term_type)
antirez

fare uno standard?
Non e` certo compito di chi definisce il linguaggio occuparsi di una
libreria come curses.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

#ifdef VT100
Questo e` il modo per farti bestemmiare dietro dalla gente che ha un
terminale che tu non conosci.
curses e` standard, se un sistema e` cosi` preistorico o cosi` BSD :-)
da non averla di serie basta compilarla.


 libreria come curses.
E chiaro. Ma allora bisogna specificare che la soluzione proposta non è
standard e funziona solo su tale sistema e/o con tale compilatore.
EMG

Curses e` standard vero. Guarda SUSV2.
Ma non significa Standard C, attenzione.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------

standard e funziona solo su tale sistema e/o con tale compilatore.
Questo e' noto a chiunque conosca il C.
Bonf
---------------------------------------------------------------------------------
-  Bonf : Per scrivermi bonf at penguinpowered com                              - 
---------------------------------------------------------------------------------

Questo e' noto a chiunque conosca il C.
non scherziamo. il C-ANSI e' portabile su qualsiasi
piattaforma che compili C-ANSI.
Oha
-- 
"Qualcuno mi spieghi perche' 144 e' l'unico
quadrato perfetto della serie di Fibonacci"

 wrote:
:>Questo e' noto a chiunque conosca il C.
: non scherziamo. il C-ANSI e' portabile su qualsiasi
: piattaforma che compili C-ANSI.
Mettendo da parte le (sicuramente importantissime) differenze tra standard C,
standard di altri tipi e cosi' via e' il caso di far notare che la libreria
curses e' disponibile praticamente su tutte le piattaforme. In parole
povere se utilizzi la libreria curses puoi compilare l'applicazione
su tantissime piattaforme, che alla fine _e'_ quello che conta, no? :)
antirez
: "Qualcuno mi spieghi perche' 144 e' l'unico
: quadrato perfetto della serie di Fibonacci"
Per lo stesso motivo per cui le uova si
contano in dozzine :)

 Questo e' noto a chiunque conosca il C.
Questo non č affatto vero. Sono in molti (me compreso) a confondere tra
funzioni standard o meno. La precisazione mi sembra quindi doverosa.
EMG

piattaforma che compili C-ANSI.
Non scherzo, e' noto che nel C standard non ci sono funzioni per
gestire lo schermo o la grafica.


EMG
Parlavo di chi conosce il c.


 gestire lo schermo o la grafica.
Se e` per questo neanche per scrivere caratteri sullo schermo (printf e`
una *funzione* di *libreria*).
Senza tirarci le menate pero`, esistono effettivamente alcune librerie che, 
pur non essendo parte del corredo "standard", sono disponibili su qualsiasi 
computer che sia mai esistito sulla faccia della terra. Le curses sono una
di queste librerie.
-- 
  /Kinkie
Se sulla scatola c'e` scritto "Per windows 95 e superiori", dovrebbe
funzionare sotto Linux, vero?

di queste librerie.
Com'e' che non ce l'ho col mio Windows98 ?
Mi ha fregato il rivenditore ?


 una *funzione* di *libreria*).
No, aspetta: printf() fa parte della libreria standard e quindi un
compilatore che si dichiari aderente ad esso è _obbligato_ ad
implementarla.
EMG

Mi ha fregato il rivenditore ?
Questo di sicuro... <g>


Guarda meglio, sono sicuro che e` compilabile anche per win32.
Cosa e' compilabile per Win ? ncurses ? mi sa proprio che ti sbagli !
;)


 ;)
E anche se lo fosse, questo non le trasformerebbe certo in standard.
EMG

 implementarla.
Un  compilatore si dichiara  aderende alle specifiche del linguaggio e
basta (non alle specifiche di una libreria, anche se è standard).
printf fa   parte della  lib  std,  ma   questo  non è scritto   nelle
specifiche del C.
-- 
  Andrea

Cosa e' compilabile per Win ? ncurses ? mi sa proprio che ti sbagli !
Basta usare cygwin. Confesso di non averci provato ne` di avere
intenzione di farlo.


E anche se lo fosse, questo non le trasformerebbe certo in standard.
curses *e`* standard, definito da The Single UNIX Specification,
Version 2.


specifiche del C.
Certo che e' scritto.
Lo standard del linguaggio ha ratificato tutta la libreria standard.


intenzione di farlo.
Gia' stiamo trattando una piattaforma in particolare e gia' stiamo
perdendo in portabilita' ;)


Version 2.
Stiamo confondendo lo standard del linguaggio con altri tipi di
standard. Lo **standard del linguaggio C** non contempla "curses"
(cosi' come non contempla le funzioni dichiarate in conio.h).


 specifiche del C.
Ma sei sicuro di quello che stai scrivendo? Qualcun'altro può confermare
o smentire?
EMG

 Version 2.
Ma scusa, secondo te essere definito da un non meglio identificato "The
Single UNIX Specification" le rende uno standard internazionale come
l'ISO (che significa, appunto, International Standard Organization)?
Allora forse ho capito qual'è il problema: tu parli esclusivamente del
mondo Unix (mi sono infatti appena reso conto che il follow-up di questi
messaggi è anche su it.comp.os.linux.development mentre io pensavo di
postare solo per it.comp.lang.c) mentre io mi riferisco al C standard.
EMG

 o smentire?
Un compilatore  C  interpreta il linguaggio  definito nelle specifiche
del C (e basta).   Tant'è che posso scrivere  un programma in C, senza
far uso  di alcuna funzione della libreria  standard, e vederlo girare
(vedi  ad esempio il  kernel  di Linux, scritto in   C + assembly,  ma
slegato dalla glibc).
Se al posto di scrivere 'printf' scrivi 'prif' il *compilatore* (*non*
il linker, occhio !)  non protesta assolutamente (un warning magari lo
segnala, perchè non  trova  il prototipo  della funzione).  Il  linker
invece si  incazza, perchè   non riesce a    trovare una funzione   da
collegare al tuo codice oggetto.
-- 
  Andrea

Se al posto di scrivere 'printf' scrivi 'prif' il *compilatore* (*non*
Mi sa che si e' perso il filo del discorso.
EMG ha affermato (giustamente) che un compilatore C che rispetta lo
standard del linguaggio DEVE implementare la funzione printf() in
quanto essa e' ratificata dallo standard del linguaggio.
Tu hai detto che non e' cosi' ed e' sbagliato.


 collegare al tuo codice oggetto.
E vorrei vedere che protestasse. Aderire allo standard non significa
rifiutarsi di utilizzare funzioni non standard ma solo essere obbligati
ad implementare quelle standard.
EMG

E anche se lo fosse, questo non le trasformerebbe certo in standard.
Guarda bene ... :-)

intenzione di farlo.
Io ci ho provato :-) Senza successo, alla fine mi sono scritto
qualche piccola utility utilizzando nel prompt di msdos
il driver ansi.sys ... ovviamente parlo di Wincess,
su Unix ncurses a gogo' :-)

 Tu hai detto che non e' cosi' ed e' sbagliato.
Uhm...
man libc
DESCRIPTION
     Functions in this library provide various facilities defined
     by System V, ANSI C, POSIX, and so on.  See standards(5). In
     addition, those facilities previously defined in the inter-
     nationalization  and  the  wide-character  libraries are now
     defined in this library.
Direi quindi che almeno una parte della libc e' definita in ANSI C.
Di sicuro printf() e' definita in POSIX. Comunque la situazione
e' un po' complicata dal fatto che generalmente libc e il s.o.
sottostante sono legate a doppio filo. Possiamo senz'altro
dire pero' che le funzioni del C NON fanno parte della sintassi
del linguaggio (non ci sono funzioni intrinseche come la read/write
del pascal ad esempio, che di fatto NON sono funzioni/procedure implementabili
in pascal). Di fatto non si trovano nelle specifiche bnf del C.
Per POSIX vi posso dire che non contiene traccia delle curses/ncurses.
Per gli altri standard, e sono veramente MOLTI bisognerebbe vedere.
Ad esempio per Solaris 7:
     standards, ANSI,  C,  ISO,  POSIX,  POSIX.1,  POSIX.2,  SUS,
     SUSv2, SVID, SVID3, XNS, XNS4, XNS5, XPG, XPG3, XPG4, XPG4v2
     - standards and specifications supported by Solaris
Mi sa che e' un po' complicato andare a controllare...
-- 
Francesco P. Lovergine  f.lovergine AT 
iesi.ba.cnr.it

 man libc
Quello che c'è scritto o non c'è scritto là è ininfluente. Esiste, lo
ripeto, un solo linguaggio C ed è quello ratificato dallo standard ISO e
che è descritto dalla relativa documentazione.
EMG

in pascal). Di fatto non si trovano nelle specifiche bnf del C.
Certo che non fanno parte della sintassi, ma sono ratificate dallo
standard, in ogni caso.


> man libc

Mi sa che i post dovresti leggerli tutti prima di partire in quarta...
E' precisamente quello che ho scritto, il linguaggio definito in
X3J11/88-001 del 1988 non descrive nulla che non sia la grammatica
del C. D'altro canto so per certo che esistono vari standard (compreso
ANSI) per la libreria. E lo conferma anche il K&R second edition che
in appendice B riassume 'la libreria definita nello standard ANSI'.
Sempre da li' : 'la libreria standard non appartiene propriamente
al linguaggio C, ma...' citazione testuale...
Ma per quello ce ne sono pure altri di 'standard', come quelli citati
nel post precedente


 nel post precedente
Ma non sono standard riconosciuti ufficialmente dall'ISO e quindi non lo
sono. Altrimenti potrei dire che la libreria che ho scritto io è
standard.
EMG

nel post precedente
Allora : chiariamo (visto che l'inutilita' delle affermazioni va di
moda) un concetto che dovrebbe essere gia' chiaro a chi passa gia'
alla seconda pagina di qualsiasi manuale sul C e quindi (si suppone) a
tutti noi qui dentro e cioe' che il C di per se' non concepisce alcuna
funzione in modo implicito, ma ne fornisce soltanto i costrutti
implementativi, per cui funzioni come "printf()" sono comunque esterne
alla sintassi del linguaggio. Questo e' chiaro !
Il problema e' se intendere un compilatore come aderente allo standard
nel caso in cui non si porti dietro la libreria standard. Un
compilatore del genere NON E' accettabile.


libreria. Qualcun altro conferma o smentisce?
Mi era sfuggita !
Certo che lo standard definisce la libreria !
Quante volte si e' parlato di fflush() qui dentro ??
Che poi le funzioni non facciano parte del linguaggio inteso in senso
stretto e' un altro discorso.



Qui fra poco finite per parlare della seconda guerra mondiale.......
NoBoDy

 standard.
Ah perche' solo ISO decide gli standard? Come a dire che la suite TCP/IP
non e' standard, in quanto messa in bella copia da IETF che non se li
caga nessuno perche' non fa parte di ISO...
E i vari X/Open, POSIX e compagnia possono pure loro andare a fare un
bagno, tanto non sono ISO... Peccato, chi glielo spiega a IEEE che 
loro (che hanno scritto POSIX) non definiscono standard poverelli?
Se pero', guardiamo bene:
  [ISO C]
      Text paragraphs preceded by [ISO C] document features and behavior that
      are included in recently approved amendments to the ISO/IEC standard
      for the C programming language. The [ISO C] tag appears only when an
      interface conforms to Issue 4 of the X/Open CAE specification and also
      conforms to an ISO/IEC amendment that was approved after release of the
      X/Open specification. C language extensions that fall into this
      category will automatically become part of Issue 5 of the X/Open stan-
      dard. The [ISO C] tag does not appear when an interface conforms to an
      ISO/IEC standard as approved when the current version of the X/Open
      standard was issued. By definition, X/Open specifications cannot con-
      flict with any ISO/IEC standard. Therefore, on most reference pages
      that document an interface conforming to ISO C, you will not find the
      tag, but will see ISO C listed as one of the standards to which the
      interface conforms.
  [POSIX]
      The [POSIX] tag appears only when an interface conforms to Issue 4 of
      the X/Open specification and also conforms to a version of POSIX that
      was finalized after release of the X/Open standard. The new POSIX sec-
      tion will automatically become part of Issue 5 of the X/Open standard.
      The [POSIX] tag does not appear when an interface conforms to sections
      of POSIX that were approved when the X/Open standard was issued. By
      definition, X/Open specifications cannot conflict with the POSIX stan-
      dard. Therefore, on most reference pages that document an interface
      conforming to POSIX, you will not find the [POSIX] tag, but will see
      POSIX.section listed as a standard to which the interface conforms.
Va beh basta... se no continuiamo cosi' all'infinito.


Ah perche' solo ISO decide gli standard?
International Standards Organization.


 Ah perche' solo ISO decide gli standard?
Per quanto riguarda il linguaggio C si. Altrimenti ci ritroveremo con
tanti dialetti come succede per altri linguaggi meno fortunati. Invece,
per fortuna, il C č uno solo.
EMG

 per aree tecnologiche.
Per il linguaggio C esiste un solo standard. Non mi risulta che
nessun'altra organizzazione oltre l'ISO ne abbia proposto uno
alternativo. Mi sembra che il mercato abbia accettato e come lo standard
relativo.
EMG

 International Standards Organization.
Uno standard e` tale solo se viene riconosciuto dal mercato. Altrimenti e`
carta straccia.
Gli organismi che promuovono standards sono parecchi, divisi per lo piu`
per aree tecnologiche.
ISO dovrebbe essere un po` la "super-organizzazione" di tutte, ma
sono molto importanti anche
IEEE (associazione internazionale degli ingegneri): FireWire e lo status
readback delle stampanti per esempio
ECMA (organismo europeo degli standards, JavaScript e` uno standard ECMA)
IETF per quanto riguarda Internet
MPEG (credo che sia un sub-comitato ISO pero`)
CCITT e` il vecchio organismo degli standards tedesco. I protocolli di
modem non recentissimi sono proposti da questo organismo
ITU altro organismo di standard europeo, ormai dovrebbe essere assorbito in 
OSI
X/Open X11, Posix
ANSI  (organizzazoine standards USA)
ecc ecc ecc.
In realta` nessuno al mondo ha l'autorita` per alzarsi e dire "ora fate
come dico io". Nella migliore delle ipotesi lo prendono a pernacchie. Gli
stessi standard ISO sono abitualmente piu` complessi del necessario per
accontentare un po' tutti (x es: una cella ATM e` lunga 48 byte perche` e`
la media aritmetica tra 64 (che alcuni volevano assolutamente) e 32 (che
altri volevano assolutamente).
-- 
  /Kinkie
Se sulla scatola c'e` scritto "Per windows 95 e superiori",
dovrebbefunzionare sotto Linux, vero?

come dico io".
Che esistano diversi organismi nazionali/internazionali, il cui scopo
e' quello di formulare degli standard, credo lo sappiamo tutti. 
Lo standard americano del linguaggio C e' stato ribattezzato ISO C nel
momento in cui e' stato adottato a livello internazionale e l'ANSI si
e' adeguato di conseguenza. 
