Funzioni di libreria: altre funzioni Win32 |
Le funzioni di questa categoria comprendono dei wrapper per accedere a numerose funzioni che caratterizzano l'ambiente Windows; sono dunque riservate alla versione di Proteus per questa piattaforma. Ricordiamo che la variabile pubblica predefinita OS è uguale a 2 se l'interprete è Proteus Windows; inoltre, è predefinita la direttiva WINDOWS (è possibile condizionare l'esecuzione di codice dentro !ifdef WINDOWS..!endif).
Molte delle funzioni presentate richiedono il passaggio di parametri
costanti, il cui valore è associato ad un nome mnemonico all'interno dei file
includibili win32.prt
e socket.prt, che andrebbero inclusi qualora si utilizzi una
delle funzioni descritte
più sotto.
L'insieme delle chiamate è logicamente suddiviso nei seguenti gruppi:
W32READREGVALUE(nRoot, cPath, @value)
legge la chiave relativa a cPath, nel ramo nRoot, e salva in value quanto trovato. Ritorna -1 in caso di errore, il tipo della chiave altrimenti.
Valori possibili per nRoot:
- W32_HKEY_CLASSES_ROOT
- W32_HKEY_CURRENT_USER
- W32_HKEY_LOCAL_MACHINE
- W32_HKEY_USERS
- W32_HKEY_PERFORMANCE_DATA
- W32_HKEY_CURRENT_CONFIG
Valori possibili ritornati:
- W32_REG_SZ
- W32_REG_EXPAND_SZ
- W32_REG_BINARY
- W32_REG_DWORD
- W32_REG_DWORD_BIG_ENDIAN
- W32_REG_LINK
- W32_REG_MULTI_SZ
- W32_REG_RESOURCE_LIST
- W32_REG_FULL_RESOURCE_DESCRIPTOR
- W32_REG_RESOURCE_REQUIREMENTS_LIST
(vedi win32.prt per ulteriori informazioni)
W32WRITEREGVALUE(nRoot, cPath, nType, value)
scrive value in cPath all'interno del ramo nRoot. Ritorna -1 in caso di errore, 0 altrimenti. Per i possibili valori di nType e nRoot si veda W32READREGVALUE.
W32DELREGVALUE(nRoot, cPath)
cancella il valore identificato da cPath ed nRoot. Ritorna -1 in caso di errore, 0 altrimenti.
W32DELREGKEY(nRoot, cPath)
cancella la chiave identificata da cPath ed nRoot (inclusi tutti i valori contenuti). Ritorna -1 in caso di errore, 0 altrimenti.
ritorna il codice dell'ultimo errore che si è verificato
W32FORMATERROR(nErrNumber)
ritorna la stringa descrittiva corrispondente all'errore nErrNumber indicato
ritorna lo handle della finestra con il fuoco, oppure 0.
W32SETFOCUS(wHandle)
porta in primo piano ed imposta il fuoco alla finestra specificata attraverso il suo handle. Ritorna 0 in caso di errore, un valore diverso da 0 altrimenti.
W32FINDWINDOW(cTitle)
trova la prima finestra corrispondente a cTitle, che può essere specificato attraverso un'espressione regolare semplice (con * e ?). Il confronto è insensibile alle maiuscole.
W32GETWINDOW(wHandle, nRelation)
ritorna lo handle della finestra che si trova nella relazione richiesta rispetto alla finestra specificata, oppure 0 in caso di errore. I possibili valori per nRelation sono (vedi win32.prt):
Valore Significato GW_CHILD ritorna un handle che identifica la finestra figlia in cima all'ordinamento Z, se la finestra specificata è un genitore; ritorna un valore nullo altrimenti. La funzione esamina solo le finestre figlie rispetto a quella specificata, non esamina i suoi discendenti. GW_ENABLEDPOPUP solo per Windows NT 5.0 e successivi: ritorna un handle che identifica la finestra di popup abilitata, posseduta dalla finestra specificata (la ricerca utilizza la prima finestra trovata impiegando GW_HWNDNEXT); se la ricerca fallisce, ritorna wFinestra. GW_HWNDFIRST ritorna lo handle che identifica la finestra dello stesso tipo in cima all'ordinamento Z. GW_HWNDLAST ritorna lo handle che identifica la finestra dello stesso tipo in fondo all'ordinamento Z. GW_HWNDNEXT ritorna lo handle che identifica la finestra sottostante a quella specificata nell'ordinamento Z. GW_HWNDPREV ritorna lo handle che identifica la finestra sopra a quella specificata nell'ordinamento Z. GW_OWNER ritorna lo handle che identifica la finestra proprietaria di quella specificata (se esiste).
W32GETWINTITLE(wHandle)
ritorna il titolo della finestra richiesta, una stringa vuota in caso di errore.
W32CREATEFILE(cPathName, nAccess, nSharing, nCreation, nAttribute[, wTemplate])
crea un file, pipe, mailslot ecc. con i parametri indicati; ritorna lo handle oppure 0 (errore). Il significato dei parametri è il seguente (vedi win32.prt per i valori delle costanti):
Parametro Descrizione cPathName nome del file da creare/aprire nAccess modo di accesso (lettura/scrittura):
- 0 = solo richiesta di accesso
- W32_GENERIC_READ = sola lettura
- W32_GENERIC_WRITE = sola scrittura
nSharing tipo condivisione:
- 0 = nessuna condivisione
- W32_FILE_SHARE_READ = ammette altri accessi in sola lettura
- W32_FILE_SHARE_WRITE = ammette altri accessi in sola scrittura
- W32_FILE_SHARE_DELETE = ammette altri accessi solo per cancellazione
nCreation disposizioni per la creazione:
- W32_CREATE_NEW = crea un nuovo file; fallisce se il file esiste
- W32_CREATE_ALWAYS = crea un nuovo file; se esiste, lo sovrascrive ed azzera gli attributi
- W32_OPEN_EXISTING = apre un file; fallisce se il file non esiste
- W32_OPEN_ALWAYS = apre il file; se non esiste, lo crea
- W32_TRUNCATE_EXISTING = apre il file e lo tronca a lunghezza 0 (richiede i diritti di scrittura); fallisce se il file non esiste
nAttribute attributi:
- W32_FILE_ATTRIBUTE_READONLY = file di sola lettura
- W32_FILE_ATTRIBUTE_HIDDEN = file nascosto
- W32_FILE_ATTRIBUTE_SYSTEM = file di sistema
- W32_FILE_ATTRIBUTE_ARCHIVE = contrassegna il file come da archiviare
- W32_FILE_ATTRIBUTE_NORMAL = file normale (da usarsi da solo)
- W32_FILE_ATTRIBUTE_TEMPORARY = file temporaneo; il file system cerca di mantenerlo in memoria; da cancellare da parte dell'utente non appena non è più necessario
- W32_FILE_ATTRIBUTE_OFFLINE = file non immediatamente disponibile (spostato offline)
- W32_FILE_FLAG_WRITE_THROUGH = scrittura diretta su disco non appena possibile
- W32_FILE_FLAG_RANDOM_ACCESS = file ad accesso casuale (per ottimizzare il caching)
- W32_FILE_FLAG_SEQUENTIAL_SCAN = accesso sequenziale dall'inizio alla fine (per ottimizzare caching); il riposizionamento del file pointer è comunque ammesso
- W32_FILE_FLAG_DELETE_ON_CLOSE = cancellazione alla chiusura del file da parte di tutti i processi che l'hanno aperto
Nel caso di apertura di named pipe:
- W32_SECURITY_SQOS_PRESENT = informazioni sulla qualità della sicurezza del servizio presenti
- W32_SECURITY_ANONYMOUS = anonimo
- W32_SECURITY_IDENTIFICATION = identificazione
- W32_SECURITY_IMPERSONATION = impersonificazione
- W32_SECURITY_DELEGATION = delega
- W32_SECURITY_CONTEXT_TRACKING = modalità tracciamento sicurezza dinamica
- W32_SECURITY_EFFECTIVE_ONLY = solo gli aspetti abilitati del contesto di sicurezza dell'utente sono disponibili al server
wTemplate handle (opzionale) di un file con accesso W32_GENERIC_READ da cui prendere gli attributi per la creazione di un nuovo file
W32CLOSEHANDLE(wHandle)
chiude lo handle passato; ritorna 0 se fallisce (vedi W32GETLASTERROR per l'errore), un valore diverso da 0 altrimenti
W32WRITEFILE(wHandle, cText)
scrive cText su wHandle; ritorna il numero di bytes scritti (che possono non corrispondere alla lunghezza di cText, es. pipe con buffer pieno), -1 se in errore. Se cText ha lunghezza 0, aggiorna solo la data/ora del file.
W32READFILE(wHandle, @cText)
legge STRLEN(cText) caratteri da wHandle; se il numero di bytes disponibili è inferiore, cText viene troncata. Ritorna il numero di bytes letti, oppure -1 in caso di errore
W32READCOM(wHandle, nNumBytes)
legge nNumBytes caratteri dalla porta wHandle; se nNumBytes = 0, legge tutti i bytes disponibili. Ritorna una stringa con i bytes estratti, oppure una stringa vuota in caso di errore. La stringa restituita può avere lunghezza inferiore al numero di bytes richiesti.
W32GETCOMSTATE(wHandle, vDCB)
rileva lo stato della porta seriale aperta su wHandle; ritorna 0 se la funzione ha successo, -1 altrimenti.
vDCB deve essere lo handle di un vettore con almeno 13 elementi; il valore che questi assumono al ritorno è il seguente (vedi win32.prt):
Costante Valore Descrizione W32_COM_GS_DCBLENGTH 1 lunghezza del DCB (ignorare) W32_COM_GS_BAUD 2 baud rate: 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 57600, 115200, 128000, 256000 W32_COM_GS_FLAGS 3 flags; OR numerico dei seguenti valori:
- W32_COM_BINARY = trasmissione binaria, ignora il carattere EOF
- W32_COM_PARITY_ON = imposta il controllo di parità
- W32_COM_CTSFLOW_ON = abilita il controllo di flusso CTS/RTS
- W32_COM_DSRFLOW_ON = abilita il controllo di flusso DSR/DTR
- W32_COM_DTR_ENABLE = abilita la linea linea DTR quando il dispositivo viene aperto e la lascia abilitata
- W32_COM_DTR_HANDSHAKE = abilita l'handshake via DTR
- W32_COM_DSR_SENSITIVITY = specifica se il driver è sensibile allo stato del DSR; se impostato, il driver ignora qualsiasi carattere ricevuto quando la linea non è alta
- W32_COM_XOFF_CONTINUE = XOFF fa continuare la trasmissione
- W32_COM_XONXOFF_OUT = XON/XOFF handshake in uscita
- W32_COM_XONXOFF_IN = XON/XOFF handshake in ingresso
- W32_COM_USE_ERRORCH = utilizza il carattere di errore in caso di parità errata
- W32_COM_STRIP_NULL = elimina i caratteri NULL (chr(0)) dallo stream
- W32_COM_RTS_ENABLE = attiva l'RTS quando apre il dispositivo e lo mantiene abilitato
- W32_COM_RTS_HANDSHAKE = abilita l'handshake: il driver alza l'RTS quando il buffer di input è pieno a metà o meno e lo abbassa quando il buffer è pieno a tre quarti.
- W32_COM_RTS_TOGGLE = alza l'RTS se ci sono bytes da trasmettere, lo abbassa quando sono stati trasmessi
- W32_COM_ERROR_ABORT = termina operazioni di read/write in caso di errore; non saranno accettate altre comunicazioni prima di un'invocazioni di ClearCommError
- 4 riservato W32_COM_GS_TXON 5 soglia per la trasmissione di XON W32_COM_GS_TXOFF 6 soglia per la trasmissione di XOFF W32_COM_GS_BIT 7 numero di bit, da 4 a 8 (tipicamente 7 o 8) W32_COM_GS_PARITY 8 parità:
- W32_COM_PARITY_NONE
- W32_COM_PARITY_ODD
- W32_COM_PARITY_EVEN
- W32_COM_PARITY_MARK
- W32_COM_PARITY_SPACE
W32_COM_GS_STOP 9 bit di stop:
- W32_COM_STOP_1
- W32_COM_STOP_15
- W32_COM_STOP_2
W32_COM_GS_XONCHAR 10 carattere XON (valore ASCII) W32_COM_GS_XOFFCHAR 11 carattere XOFF (valore ASCII) W32_COM_GS_ERRCHAR 12 carattere errore (valore ASCII) W32_COM_GS_EOFCHAR 13 carattere EOF (fine input, valore ASCII) W32_COM_GS_RXCHAR [14] [carattere per evento ricezione (valore ASCII), opzionale]
W32SETCOMSTATE(wHandle, vDCB)
imposta lo stato della porta seriale aperta su wHandle. Si veda W32GETCOMSTATE per i valori impostabili nel vettore vDCB. Ritorna 0 se la funzione ha successo, -1 altrimenti.
W32SETCOMTIMEOUTS(wHandle, vTimeOut)
imposta i timeout di lettura e scrittura per la porta seriale aperta su wHandle; vTimeOut deve essere un vettore con almeno 5 elementi; il valore di questi elementi è il seguente (vedi win32.prt):
Costante Valore Descrizione W32_COM_TO_READ 1 intervallo timeout lettura; tempo massimo, in millisecondi, che può intercorrere tra l'arrivo di due caratteri sulla linea seriale W32_COM_TO_READMUL 2 moltiplicatore timeout totale di lettura; moltiplicatore, in millisecondi, per il calcolo del timeout complessivo; viene moltiplicato per il numero di caratteri da leggere W32_COM_TO_READCONST 3 costante timeout totale di lettura; valore, in millisecondi, aggiunto al prodotto del moltiplicatore per il numero di caratteri da leggere per ottenere il timeout totale.
timeout totale di lettura = (numero caratteri da leggere) * moltiplicatore + costante
Se moltiplicatore e costante sono nulli, non c'è timeout di letturaW32_COM_TO_WRITEMUL 4 moltiplicatore timeout totale di scrittura; viene moltiplicato per il numero di caratteri da scrivere per il calcolo del timeout complessivo W32_COM_TO_WRITECONST 5 costante timeout totale di scrittura; valore, in millisecondi, aggiunto al prodotto del moltiplicatore per il numero di caratteri da scrivere per ottenere il timeout totale.
timeout totale di scrittura = (numero caratteri da scrivere) * moltiplicatore + costante
Se moltiplicatore e costante sono nulli, non c'è timeout di scrittura
W32PURGECOM(wHandle, nFlags)
esegue l'operazione di svuotamento contraddistinta da nFlags su wHandle; ritorna 0 se la funzione ha successo, -1 altrimenti.
Valori ammessi per nFlags:
- W32_PURGE_TXCLEAR = cancella il buffer di trasmissione
- W32_PURGE_RXCLEAR = cancella il buffer di ricezione
W32ESCCOMFUNC(wHandle, nFunction)
esegue la funzione richiesta sul dispositivo il cui wHandle viene indicato; ritorna 0 se la funzione ha successo, -1 altrimenti. I valori possibili per nFunction sono riassunti nella tabella sottostante (vedi win32.prt):
Funzione Descrizione W32_COM_SETXOFF simula la ricezione di un carattere XOFF W32_COM_SETXON simula la ricezione di un carattere XON W32_COM_SETRTS alza il segnale RTS (request-to-send) W32_COM_CLRRTS abbassa il segnale RTS (request-to-send) W32_COM_SETDTR alza il segnale DTR (data-terminal-ready) W32_COM_CLRDTR abbassa il segnale DTR (data-terminal-ready) W32_COM_RESETDEV resetta il dispositivo, se possibile W32_COM_SETBREAK sospende la trasmissione del carattere e pone la linea di trasmissione in stato di break fino all'invocazione della funzione con W32_COM_CLRBREAK. Si noti che questa funzione estesa non scarica i dati che non sono stati trasmessi. W32_COM_CLRBREAK ripristina la trasmissione dei caratteri e pone la linea di trasmissione in uno stato fuori break.
W32CLEARCOMERR(wHandle, @nErrMask, vST)
ritorna in nErrMask la maschera con i tipi di errore ed in vST (vettore di almeno tre elementi) le seguenti informazioni (vedi win32.prt):
Costante Valore Descrizione W32_CE_STATUS 1 stato; OR numerico di uno o più dei seguenti valori:
- W32_CE_RXOVER = overflow nel buffer di ingresso. Non c'è spazio nel buffer di input, o un carattere è stato ricevuto dopo il carattere EOF
- W32_CE_OVERRUN = trabocco del buffer caratteri. Il successivo carattere è perso
- W32_CE_RXPARITY = l'hardware ha rilevato un errore di parità
- W32_CE_FRAME = l'hardware ha rilevato un errore di framing
- W32_CE_BREAK = l'hardware ha rilevato una condizione di break
- W32_CE_TXFULL = l'applicazione ha provato a trasmettere un carattere, ma il buffer di uscita era pieno
- W32_CE_PTO = Windows 95 o superiore: time-out sul dispositivo parallelo
- W32_CE_IOE = un errore di I/O error è accaduto durante la comunicazione con il dispositivo
- W32_CE_DNS = Windows 95 o superiore: dispositivo parallelo non selezionato
- W32_CE_OOP = Windows 95 o superiore: un dispositivo parallelo ha segnalato che ha esaurito la carta
- W32_CE_MODE = il modo richiesto non è supportato, o il parametro handle è errato. Se questo flag è impostato, è l'unico errore valido
W32_CE_RXBYTES 2 bytes nella coda di ricezione W32_CE_TXBYTES 3 bytes nella coda di trasmissione Ritorna 0 se la funzione ha successo, -1 altrimenti.
W32WAITCOMMEVT(wHandle, @nMask)
attende che si verifichi uno degli eventi in nMask; ritorna -1 in caso di errore, 0 se si è verificato uno degli eventi attesi (e aggiorna nMask, passata per riferimento); nMask è data dalla somma di uno o più dei seguenti valori (vedi win32.prt per i valori delle costanti):
Valore Descrizione EV_RXCHAR Ricevuto un carattere qualunque EV_RXFLAG Ricevuto un certo carattere EV_TXEMPTY Coda di trasmissione vuota EV_CTS Cambiato lo stato di CTS EV_DSR Cambiato lo stato di DSR EV_RLSD Cambiato lo stato di RLSD EV_BREAK Ricevuto BREAK EV_ERR Si è verificato un errore sullo stato della linea EV_RING Rilevata suoneria EV_PERR Errore sulla stampante EV_RX80FULL Il buffer di ricezione è pieno all'80% EV_EVENT1 Evento specifico #1 del provider EV_EVENT2 Evento specifico #2 del provider
W32SETCOMBREAK(wHandle)
sospende la trasmissione sulla linea seriale corrispondente a wHandle e mette la linea di trasmissione nello stato di BREAK fino a che non si invoca la funzione W32CLEARCOMBREAK; ritorna -1 in caso di errore, 0 altrimenti
W32CLEARCOMBREAK(wHandle)
ripristina la trasmissione e pone la linea seriale corrispondente a wHandle nello stato di non-break; ritorna -1 in caso di errore, 0 altrimenti
W32GETMODEMSTATUS(wHandle, @nStatus)
ritorna in nStatus lo stato del registro di controllo del modem collegato a wHandle; utile per determinare cosa ha provocato l'uscita da W32WAITCOMMEVT; nStatus è aggiornato per riferimento con una combinazione dei seguenti valori (vedi win32.prt per i valori delle costanti):
Valore Descrizione MS_CTS_ON il segnale CTS è alzato MS_DSR_ON il segnale DSR è alzato MS_RING_ON l'indicatore di suoneria è attivo MS_RLSD_ON il segnale RLSD è alzato Ritorna -1 in caso di errore, 0 altrimenti.
W32WAITRXCHAR(wHandle, nTimeout[, nPolltime])
attende la ricezione di un carattere sulla porta seriale wHandle per nTimeout millisecondi; ritorna 0 se è scaduto il timeout (o si è verificato un errore), il numero di bytes nel buffer altrimenti. Se il valore di nTimeout non è nullo, nPolltime è utilizzato per determinare ogni quanti millisecondi verificare lo stato della porta (default = 55, se non specificato). Se nTimeout è nullo, attende indefinitamente.
W32WAITTXOVER(wHandle, nTimeout[, nPolltime])
attende lo svuotamento del buffer di scrittura della porta seriale wHandle per nTimeout millisecondi; ritorna 0 se è vuoto, altrimenti il numero di bytes nel buffer (timeout scaduto). Se il valore di nTimeout non è nullo, nPolltime è utilizzato per determinare ogni quanti millisecondi verificare lo stato della porta (default = 55, se non specificato). Se nTimeout è nullo, attende indefinitamente.
PIPECALL(cPipeName, cWriteText, @cReadText, nTimeOut)
scrive cWriteText e legge in cReadText (buffer pre-allocato alla dimensione richiesta); attende la disponibilità della pipe corrispondente a cPipeName per nTimeOut millisecondi. Ritorna 0 se la funzione ha successo, il codice di errore altrimenti. Se nTimeOut è uguale a 0, l'attesa è infinita..
PIPECREATE(cPipeName, nOpenMode, nPipeMode, nInstances, nOutBufSize, nInBufSize, nTimeOut)
crea una pipe con le caratteristiche richieste; ritorna un handle alla pipe creata, oppure -1 se si verifica un errore. Il significato dei vari parametri è il seguente (vedi win32.prt):
Costante Descrizione PIPE_ACCESS_DUPLEX pipe bidirezionale; i processi server e client possono leggere e scrivere sulla pipe. Equivale a NOR(GENERIC_READ, GENERIC_WRITE) sul server. Il client può specificare GENERIC_READ, GENERIC_WRITE o entrambi quando si connette alla pipe attraverso W32CREATEFILE PIPE_ACCESS_INBOUND il flusso dei dati va solo dal client al server; il server ha accesso GENERIC_READ; il client deve specificare GENERIC_WRITE quando si collega alla pipe PIPE_ACCESS_OUTBOUND il flusso dei dati va solo dal server al client; il client ha accesso GENERIC_WRITE; il client deve specificare GENERIC_READ quando si collega alla pipe Ulteriori flag (possono apparire o meno in diverse istanze della stessa pipe):
Costante Descrizione W32_FILE_FLAG_WRITE_THROUGH abilita il modo "write-through"; questa modalità influenza le operazioni di scrittura su pipe di tipo byte quando client e server si trovano su differenti computer. Quando abilitata, le funzioni di scrittura non ritornano finché i dati non sono stati trasmessi attraverso la rete e si trovano nel buffer della pipe sul computer remoto. Se questa modalità non viene specificata, il sistema aumenta l'efficienza della rete con operazioni di bufferizzazione
Costante Descrizione PIPE_TYPE_BYTE i dati sono scritti come una sequenza di bytes (default, se modopipe = 0); questa modalità non può essere utilizzata con PIPE_READMODE_MESSAGE PIPE_TYPE_MESSAGE i dati sono scritti come una serie di messaggi. Questa modalità può essere utilizzata con PIPE_READMODE_MESSAGE oppure PIPE_READMODE_BYTE Ulteriori flag (possono apparire o meno in diverse istanze della stessa pipe):
Costante Descrizione PIPE_READMODE_BYTE i dati sono letti dalla pipe come una sequenza di bytes (default, se modopipe = 0); questa modalità può essere utilizzata con PIPE_TYPE_MESSAGE oppure PIPE_TYPE_BYTE PIPE_READMODE_MESSAGE i dati sono letti dalla pipe come una serie di messaggi. Questa modalità può essere utilizzata solo con PIPE_TYPE_MESSAGE. PIPE_WAIT abilita la modalità bloccante (default, se modopipe = 0); quando lo handle della pipe è specificato in W32READFILE o W32WRITEFILE, le operazioni non sono completate finché non ci sono dati da leggere oppure tutti i dati sono stati scritti. PIPE_NOWAIT abilita la modalità non-bloccante; in questa modalità, W32READFILE o W32WRITEFILE ritornano sempre subito.
PIPEWAITCONN(wHandle)
attende la connessione di un client sulla pipe wHandle; ritorna 0 se la funzione ha successo, il codice di errore altrimenti.
PIPEDISCONNECT(wHandle)
disconnette un client dalla pipe wHandle; ritorna 0 se la funzione ha successo, il codice di errore altrimenti.
PIPEPEEK(wHandle, @cBuffer, @nBytesLeft, @nBytesLeftMessage)
legge dalla pipe wHandle in cBuffer (che deve avere lunghezza pari al numero di bytes da leggere) e memorizza in nBytesLeft il numero di bytes ancora da leggere (ed in nBytesLeftMessage il numero di bytes residui del messaggio, se la pipe è di tipo a messaggio); cBuffer viene ridimensionato al numero di bytes effettivamente letti. Ritorna 0 se ha successo, il codice di errore altrimenti.
PIPETRANSACT(wHandle, cWriteText, @cReadText)
scrive la stringa cWriteText sulla pipe identificata da wHandle e legge in cReadText un numero di bytes corrispondente al massimo a STRLEN(cReadText); cReadText viene ridimensionato al numero di bytes effettivamente letti. Ritorna 0 se ha successo, il codice di errore altrimenti. Verificare sempre W32GETLASTERROR() al termine, per controllare se ci sono altri bytes da leggere (ERROR_MORE_DATA).
PIPEWAIT(cPipeName, nTimeOut)
attende che la pipe cPipeName divenga disponibile per nTimeOut millisecondi; ritorna 0 se disponibile, -1 altrimenti. Il significato dei parametri è il seguente:
- cPipeName = nome della pipe; deve essere della forma "\\\\.\\pipe\\nome" (il raddoppio serve perché "\" è il carattere di escape)
- nTimeOut = timeout in millisecondi; utilizzare NMPWAIT_USE_DEFAULT_WAIT per usare il valore associato alla named pipe sul server, oppure NMPWAIT_WAIT_FOREVER per attendere indefinitamente
W32SOCKET(nFamily, nType, nProtocol)
crea un socket con le caratteristiche richieste. Ritorna lo handle oppure -1 in caso di errore.
I valori per nFamily, nType ed nProtocol si trovano nel file socket.prt e sono:
- nFamily: AF_UNIX, AF_INET, AF_IMPLINK, AF_PUP, AF_CHAOS, AF_IPX, AF_NS, AF_ISO, AF_OSI, AF_ECMA, AF_DATAKIT, AF_CCITT, AF_SNA, AF_DECnet, AF_DLI, AF_LAT, AF_HYLINK, AF_APPLETALK, AF_NETBIOS, AF_VOICEVIEW, AF_FIREFOX, AF_UNKNOWN1, AF_BAN
- nType: SOCK_STREAM, SOCK_DGRAM
- nProtocol: IPPROTO_IP, IPPROTO_ICMP, IPPROTO_IGMP, IPPROTO_GGP, IPPROTO_TCP, IPPROTO_PUP, IPPROTO_UDP, IPPROTO_IDP, IPPROTO_ND, IPPROTO_RAW, IPPROTO_MAX
W32BIND(oHandle, nFamily, nPort, cAddress)
collega al socket oHandle l'indirizzo, la porta e la famiglia specificata. Ritorna 0 in caso di successo, un valore diverso da 0 altrimenti. Utilizzare W32LASTSOCKETERR per conoscere l'eventuale errore che si è verificato.
W32LISTEN(oHandle, nLength)
imposta la lunghezza della coda di connessione al socket oHandle. Ritorna 0 in caso di successo, un valore diverso da 0 altrimenti. Utilizzare W32LASTSOCKETERR per conoscere l'eventuale errore che si è verificato.
ritorna l'ultimo errore verificatosi nelle operazioni sui socket; può essere utilizzata per sapere il motivo per il quale l'ultima chiamata sui socket è fallita.
imposta il valore restituito da W32LASTSOCKETERR (può essere utilizzata per resettare il valore dopo che si è verificata un'anomalia nella chiamata di funzioni su socket). Non ritorna alcun valore.
W32CLOSESOCKET(oHandle)
chiude il socket specificato. Ritorna 0 in caso di successo, un valore diverso da 0 altrimenti. Utilizzare W32LASTSOCKETERR per conoscere l'eventuale errore che si è verificato.
W32ACCEPT(oHandle, @nFamily, @nPort, @cAddress)
accetta una connessione, restituisce l'indirizzo del chiamante ed un nuovo socket handle sul quale proseguire la comunicazione (questo socket deve poi essere opportunamente chiuso); nFamily, nPort, cAddress sono passati per riferimento implicito ed aggiornati al ritorno. Ritorna -1 in caso di errore, altrimenti lo handle del nuovo socket. Utilizzare W32LASTSOCKETERR per conoscere l'eventuale errore che si è verificato.
W32GETPEERNAME(oHandle, @nFamily, @nPort, @cAddress)
restituisce cAddress (= indirizzo), nPort (= porta), nFamily (= famiglia) del client connesso al socket. Ritorna -1 in caso di errore, 0 altrimenti.
Utilizzare W32LASTSOCKETERR per conoscere l'eventuale errore che si è verificato.
W32GETSOCKNAME(oHandle, @nFamily, @nPort, @cAddress)
restituisce cAddress (= indirizzo), nPort (= porta), nFamily (= famiglia) del host al quale ci si è connessi (è stato utilizzato W32CONNECT senza passare per W32BIND). Ritorna -1 in caso di errore, 0 altrimenti. Utilizzare W32LASTSOCKETERR per conoscere l'eventuale errore che si è verificato.
W32CONNECT(oHandle, nFamily, nPort, cAddress)
cerca di connettersi ad un socket remoto, specificato attraverso famiglia, porta ed indirizzo. Ritorna -1 in caso di errore, 0 altrimenti. Utilizzare W32LASTSOCKETERR per conoscere l'eventuale errore che si è verificato.
W32IOCTLSOCKET(oHandle, nCommand, @nParameter)
esegue un comando sul socket oHandle. I valori possibili per nCommand sono (vedi socket.prt):
Valore Descrizione FIONBIO nParameter = 0 abilita la modalità non bloccante;
nParameter = 1 abilita la modalità bloccanteFIONREAD memorizza in nParameter il numero di bytes che possono essere letti dal socket SIOCATMARK memorizza in nParameter il valore 0 se ci sono dati out-of-band che attendono di essere letti; memorizza un valore diverso da 0 altrimenti Ritorna -1 in caso di errore, 0 altrimenti. Utilizzare W32LASTSOCKETERR per conoscere l'eventuale errore che si è verificato.
W32SEND(oHandle, cText, nFlag)
invia dati al socket oHandle; nFlag è dato dall'OR numerico di uno o più dei seguenti valori (default = 0, vedi socket.prt):
- MSG_OOB = invia i dati come out-of-band
- MSG_DONTROUTE = non instrada i dati
Ritorna -1 in caso di errore, altrimenti i bytes inviati. Utilizzare W32LASTSOCKETERR per conoscere l'eventuale errore che si è verificato.
W32RECV(oHandle, @cText, nFlag)
riceve dati dal socket oHandle; nFlag è dato dall'OR numerico di uno o più dei seguenti valori (default = 0, vedi socket.prt):
- MSG_PEEK = non rimuove i dati dopo averli prelevati
- MSG_OOB = riceve i dati out-of-band
Ritorna -1 in caso di errore, altrimenti il numero di bytes ricevuti (memorizzati in cText); cText deve essere pre-allocato con lunghezza sufficiente a contenere i dati ricevuti.
W32SHUTDOWN(oHandle, nHow)
disabilita la ricezione o l'invio sul socket oHandle; nHow può valere (vedi socket.prt):
- SD_RECEIVE = disabilita la possibilità di successive W32RECV sul socket
- SD_SEND = disabilita la possibilità di successive W32SEND sul socket
- SD_BOTH = disabilita ricezione ed invio sul socket
Ritorna -1 in caso di errore, 0 altrimenti.
W32SENDTO(oHandle, cText, nFlag, nFamily, nPort, cAddress)
funzione simile a W32SEND. In questo caso, il socket non deve aver avuto un W32BIND; permette di specificare l'indirizzo del host; nFlag è dato dall'OR numerico di uno o più dei seguenti valori (default = 0, vedi socket.prt):
- MSG_OOB = invia i dati come out-of-band
- MSG_DONTROUTE = non instrada i dati
Ritorna -1 in caso di errore, altrimenti i bytes inviati.
W32RECVFROM(oHandle, @cText, nFlag, @nFamily, @nPort, @cAddress)
funzione simile a W32RECV. In questo caso, il socket non deve aver avuto un W32BIND. Ritorna anche la famiglia, la porta e l'indirizzo del client; nFlag è dato dall'OR numerico di uno o più dei seguenti valori (default = 0, vedi socket.prt):
- MSG_PEEK = non rimuove i dati dopo averli prelevati
- MSG_OOB = riceve i dati out-of-band
Ritorna -1 in caso di errore, altrimenti il numero di bytes ricevuti (memorizzati in cText); cText deve essere pre-allocato con lunghezza sufficiente a contenere i dati ricevuti.
W32SELECT(vReadSockets, vWriteSockets, vExceptSockets, nSeconds, nMicroSeconds)
permette di determinare (con timeout) se uno o più socket sono leggibili, scrivibili o in eccezione; vReadSockets, vWriteSockets, vExceptSockets sono vettori di socket handles da verificare per lettura, scrittura o eccezione; nSeconds è un valore in secondi, nMicroSeconds un valore in microsecondi: la somma dei due corrisponde al timeout complessivo; se sono entrambi negativi, attende indefinitamente.
Il valore nResult ritornato può valore:
- 0, in caso di timeout
- -1, in caso di errore
- un valore positivo, che corrisponde al handle di una bitmap, che contiene lo stato dei tre insiemi di vettori.
Nell'ultimo caso, la mappa di bit è impostata a 1 in corrispondenza alle posizioni dei socket nei vettori che, in seguito alla select, sono risultati essere nello stato richiesto (leggibili, scrivibili, in eccezione). Se la funzione ritorna un valore positivo, è necessario poi liberare la mappa di bit con BITMAPFREE(iResult), dopo aver utilizzato il suo contenuto.
Per verificare i socket leggibili, si utilizza BITMAPGET(nResult, n) dove n vale da 1 a VECLEN(vReadSockets).
Per verificare i socket scrivibili, si utilizza la stessa funzione, aggiungendo l'offset W32SELECT_WRITE_OFFSET (vedi socket.prt) alla posizione del socket nel vettore vWriteSockets.
Per verificare i socket in eccezione, si utilizza la stessa funzione, aggiungendo l'offset W32SELECT_EXCEPT_OFFSET (vedi socket.prt) alla posizione del socket nel vettore vExceptSocket.
W32GETSOCKOPT(oHandle, nLevel, nOption, @value)
restituisce il valore di un particolare parametro del socket oHandle; nLevel può valere SOL_SOCKET oppure IPPROTO_TCP. I possibili valori di nOption dipendono da nLevel (vedi socket.prt):
nLevel = SOL_SOCKET
Valore Tipo restituito Significato SO_ACCEPTCONN intero (0/1) Socket in ascolto. SO_BROADCAST intero (0/1) Socket configurato per la trasmissione di messaggi broadcast. SO_DEBUG intero (0/1) Debugging abilitato. SO_DONTLINGER intero (0/1) Se vero, l'opzione SO_LINGER è disabilitata. SO_DONTROUTE intero (0/1) Routing disabilitato. SO_ERROR intero Recupera lo stato di errore e lo azzera. SO_GROUP_ID intero L'identificatore del gruppo al quale appartiene il socket (non supportato). SO_GROUP_PRIORITY intero Priorità relativa per socket che sono parte di un gruppo. SO_KEEPALIVE intero (0/1) Pacchetti "Keepalive" inviati. SO_LINGER struct LINGER Opzioni di "linger" correnti. SO_MAX_MSG_SIZE intero Dimensione massima di un messaggio per socket orientati ai messaggi (es. SOCK_DGRAM). Non ha significato per socket di tipo stream. SO_OOBINLINE intero (0/1) Dati "Out-of-band" ricevuti nel flusso dati normale. SO_PROTOCOL_INFO WSAPROTOCOL_INFO Informazioni sul protocollo collegato al socket. SO_RCVBUF intero Dimensione del buffer in ricezione. SO_REUSEADDR intero (0/1) Socket collegabile ad un indirizzo già in uso. SO_SNDBUF intero Dimensione del buffer in trasmissione. SO_TYPE intero Tipo del socket (per esempio, SOCK_STREAM). PVD_CONFIG binario Struttura dati "opaca" associata dal servizio al socket. SO_RCVLOWAT intero Livello minimo per ricezione SO_RCVTIMEO intero Time-out per ricezione SO_SNDLOWAT intero Livello minimo per trasmissione SO_SNDTIMEO intero Time-out per trasmissione nLevel = IPPROTO_TCP
Valore Tipo restituito Significato TCP_NODELAY intero (0/1) Disabilita l'algoritmo di Nagle per send. TCP_MAXSEG intero Massima dimensione di un segmento TCP Ritorna in value l'opzione richiesta (il tipo è quello indicato). Ritorna 0 se la funzione ha successo, -1 in caso di errore.
W32SETSOCKOPT(oHandle, nLevel, nOption, value)
imposta il valore di un particolare parametro del socket oHandle; nLevel può valere SOL_SOCKET oppure IPPROTO_TCP. I possibili valori di nOption dipendono da nLevel (vedi socket.prt):
nLevel = SOL_SOCKET
Valore Tipo Significato SO_BROADCAST intero (0/1) Socket configurato per la trasmissione di messaggi broadcast. SO_DEBUG intero (0/1) Debugging abilitato. SO_DONTLINGER intero (0/1) Se vero, l'opzione SO_LINGER è disabilitato. SO_DONTROUTE intero (0/1) Routing disabilitato. SO_GROUP_PRIORITY intero Priorità relativa per socket che sono parte di un gruppo. SO_KEEPALIVE intero (0/1) Pacchetti "Keepalive" inviati. SO_LINGER struct LINGER Opzioni di "linger" correnti. SO_OOBINLINE intero (0/1) Dati "Out-of-band" ricevuti nel flusso dati normale. SO_RCVBUF intero Dimensione del buffer in ricezione. SO_REUSEADDR intero (0/1) Socket collegabile ad un indirizzo già in uso. SO_SNDBUF intero Dimensione del buffer in trasmissione. PVD_CONFIG binario Struttura dati "opaca" associata dal servizio al socket. SO_RCVLOWAT intero Livello minimo per ricezione SO_RCVTIMEO intero Time-out per ricezione SO_SNDLOWAT intero Livello minimo per trasmissione SO_SNDTIMEO intero Time-out per trasmissione nLevel = IPPROTO_TCP
Valore Tipo Significato TCP_NODELAY intero (0/1) Disabilita l'algoritmo di Nagle per send. TCP_MAXSEG intero Massima dimensione di un segmento TCP Imposta l'opzione richiesta in base a value; ritorna 0 se la funzione ha successo, -1 in caso di errore.
W32GETSERVBYNAME(@cName, @cProtocol, @cAlias, @nPort)
restituisce nelle variabili (passate per riferimento) il nome, il protocollo, l'alias e la porta del servizio corrispondente alla coppia cName, cProtocol. Aggiorna cName, cProtocol, cAlias ed nPort (riconvertito dal network byte order); cAlias può contenere più stringhe, delimitate da tabulazione (carattere 9). Specificare una stringa vuota per cProtocol per ottenere qualsiasi protocollo. Ritorna -1 in caso di errore, 0 altrimenti.
W32GETHOSTBYNAME(@cName, @cAlias, @nType, @cAddress)
restituisce nelle variabili (passate per riferimento) il nome, l'alias, il tipo e l'indirizzo del host corrispondente a cName. Aggiorna cName, cAlias, nType e cAddress; cAlias e cAddress possono contenere più stringhe, delimitate da tabulazioni (carattere 9). Ritorna -1 in caso di errore, 0 altrimenti.
W32HTONS(n)
ritorna il valore n (short) in network byte order.
W32NTOHS(n)
ritorna il valore n (short) convertito da network byte order.
W32HTONL(n)
ritorna il valore n (long) in network byte order.
W32NTOHL(n)
ritorna il valore n (long) convertito da network byte order.
ritorna l'ID del processo corrente.
sospende l'esecuzione dello script per nfSeconds secondi; ritorna il numero di secondi trascorsi (al termine della chiamata) dall'avvio dell'interprete Proteus. La funzione accetta anche valori in virgola mobile; es. SLEEP(0.5) sospende l'esecuzione per mezzo secondoritorna il numero di millisecondi dall'avvio del sistema.
W32SENDKEYS(cKeys[, nfSeconds])
permette di introdurre in emulazione di tastiera cKeys, formattata in base alle regole seguenti. Il parametro nfSeconds (se presente) indica il ritardo intercarattere; es.
W32SENDKEYS("ABC", 0.1)
introduce nel buffer di tastiera i caratteri A, B e C, attendendo un decimo di secondo dopo ciascuno.Ogni tasto è rappresentato da uno o più caratteri. Per specificare un singolo carattere della tastiera, utilizzare il carattere stesso. Per rappresentare, ad esempio, la lettera A, indicare
"A"
nell'argomento cKeys. Se si desidera rappresentare più caratteri, indicare i caratteri in sequenza. Per rappresentare, ad esempio, le lettere A, B e C, indicare"ABC"
nell'argomento cKeys.Il segno (+), l'accento circonflesso (^), il segno di percentuale (%), la tilde (~) e le parentesi ( ) hanno significati particolari per W32SENDKEYS. Per specificare uno di questi caratteri, racchiuderlo tra parentesi graffe. Per specificare, ad esempio, il segno più, è necessario utilizzare
{+}
. Le parentesi quadre ([ ]) non hanno un significato particolare per W32SENDKEYS, ma vanno racchiuse anch'esse tra parentesi graffe. Per inviare i caratteri parentesi graffe, indicare{{}
e{}}
.Per specificare caratteri ai quali non corrisponde una visualizzazione, quali Invio o Tab, e tasti che rappresentano azioni piuttosto che caratteri, utilizzare i codici della seguente tabella:
Tasto Codice BACKSPACE {BACKSPACE}
,{BS}
, o{BKSP}
INTERR {BREAK}
BLOC MAIUSC {CAPSLOCK}
CANC {DELETE}
o{DEL}
FRECCIA GIÙ {DOWN}
FINE {END}
INVIO {ENTER}
o~
ESC {ESC}
AIUTO {HELP}
HOME {HOME}
INS {INSERT}
o{INS}
FRECCIA SINISTRA {LEFT}
BLOC NUM {NUMLOCK}
PGGIÙ {PGDN}
PGSU {PGUP}
STAMP {PRTSC}
FRECCIA DESTRA {RIGHT}
BLOC SCORR {SCROLLLOCK}
TAB {TAB}
AVANZAMENTO RIGA {LF}
FRECCIA SU {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}
PULISCI {CLEAR}
APPLICAZIONI {APPS}
NUMPAD + {NUMPAD+}
NUMPAD - {NUMPAD-}
NUMPAD * {NUMPAD*}
NUMPAD / {NUMPAD/}
NUMPAD INVIO {NUMPADENTER}
NUMPAD 0..9 {NUMPAD0} .. {NUMPAD9}
NUMPAD SINISTRA {NUMPADLEFT}
NUMPAD DESTRA {NUMPADRIGHT}
NUMPAD SU {NUMPADUP}
NUMPAD GIÙ {NUMPADDOWN}
NUMPAD HOME {NUMPADHOME}
NUMPAD PGSU {NUMPADPGUP}
NUMPAD PGGIÙ {NUMPADPGDN}
NUMPAD FINE {NUMPADEND}
NUMPAD INS {NUMPADINS}
NUMPAD CANC {NUMPADDEL}
CTRL SINISTRO {LCONTROL}
CTRL DESTRO {RCONTROL}
ALT SINISTRO {LMENU}
ALT DESTRO {RMENU}
MAIUSC SINISTRO {LSHIFT}
MAIUSC DESTRO {RSHIFT}
WINDOWS SINISTRO {LWIN}
WINDOWS DESTRO {RWIN}
Per specificare una combinazione di tasti con MAIUSC CTRL e ALT, anteporre al codice del tasto uno o più dei seguenti codici:
Tasto Codice MAIUSC +
CTRL ^
ALT %
Per specificare che MAIUSC , CTRL e ALT vanno tenuti premuti mentre si premono altri tasti, racchiudere il codice dei tasti tra parentesi. Per indicare, ad esempio, che occorre tenere premuto MAIUSC mentre si premono E e C, specificare "
+(EC)
". Per indicare che occorre tenere premuto MAIUSC mentre si preme E quindi rilasciare MAIUSC e premere C, specificare "+EC
".
W32SHELL(cCommand)
esegue cCommand e ritorna 0 (processo avviato correttamente) oppure -1 (impossibile creare il processo). La funzione non attende il completamento del processo prima di ritornare il controllo al programma; si vedano anche le funzioni SYSTEM, CAPTURE ed EXEC.
ritorna il numero di licenza integrato nella chiave hardware di protezione; solo per la versione registrata di Proteus (la versione demo ritorna sempre la stringa "20000000000"). Questa informazione può essere utilizzata per proteggere i propri programmi.
Inizio pagina | Prossimo argomento | Argomento precedente | Indice per argomenti | Indice analitico |