INFORMAZIONI SUL COPYRIGHT
PENSIERINO DI Barninga Z!
IL LINGUAGGIO C: CENNI GENERALI
LA PRODUZIONE DEI PROGRAMMI C
Linguaggi interpretati e compilati
L'Interprete
Il Compilatore
Quale dei due?
Dall'idea all'applicazione
I PROGRAMMI C: UN PRIMO APPROCCIO
LA GESTIONE DEI DATI IN C
I tipi di dato
Le variabili
I puntatori
Gli indirizzi di memoria
Gli operatori * e &
Complicazioni
Puntatori far e huge
Puntatori static
Le stringhe
Gli array
L'aritmetica dei puntatori
Puntatori a puntatori
Puntatori void
L'accessibilità e la durata delle variabili
Le variabili automatic
Le variabili register
Le variabili static
Le variabili external
Le costanti
Le costanti manifeste
Le costanti simboliche
Entità complesse
Le strutture
Le unioni
Gli enumeratori
I campi di bit
GLI OPERATORI
Not logico
Complemento a uno
Negazione algebrica
Autoincremento e autodecremento
Cast e conversioni di tipo
Operatore sizeof()
Operatori aritmetici
Resto di divisione intera
Shift su bit
Operatori logici di test
Operatori logici su bit
Operatore condizionale
Assegnamento
Separatore di espressioni
IL FLUSSO ELABORATIVO
Le istruzioni di controllo condizionale
if...else
switch
goto
I cicli
while
do...while
for
LE FUNZIONI
Definizione, parametri e valori restituiti
Puntatori a funzioni
La ricorsione
main(): parametri e valore restituito
ALLOCAZIONE DINAMICA DELLA MEMORIA
L'I/O E LA GESTIONE DEI FILE
Gli stream
Stream standard
Gli stream in C
Il caching
Altri strumenti di gestione dei file
LANCIARE PROGRAMMI
La libreria C
system()
spawn...()
Funzioni del gruppo "l"
Funzioni del gruppo "v"
exec...()
Tabella sinottica
Condivisione dei files
Portabilità
GLI INTERRUPT: UTILIZZO
ROM-BIOS e DOS, Hardware e Software
La libreria C
I MODELLI DI MEMORIA
Tiny model
Small model
Medium model
Compact model
Large model
Huge model
SCRIVERE FUNZIONI DI LIBRERIA
Accorgimenti generali
Esigenze tecniche
La realizzazione pratica
INTERAZIONE TRA C E ASSEMBLER
Assembler
Inline assembly
Lo stack
Utilizzo dei registri
Variabili e indirizzi C
Altri strumenti di programmazione mista
Pseudoregistri
geninterrupt()
__emit__()
Uno stratagemma: dati nel code segment
C E CLIPPER
Passaggio di parametri e restituzione di valori
Reference e puntatori
Allocazione della memoria
Alcuni esempi
GESTIONE A BASSO LIVELLO DELLA MEMORIA
Il compilatore C
Memoria convenzionale
Upper memory
Memoria espansa
Memoria estesa, High Memory Area e UMB
I servizi XMS per la memoria estesa
I servizi XMS per la HMA
I servizi XMS per gli UMB
GLI INTERRUPT: GESTIONE
La tavola dei vettori
Le funzioni interrupt
Le funzioni far
Utilizzo dei gestori originali
Due o tre esempi
Inibire CTRL-C e CTRL-BREAK
Inibire CTRL-ALT-DEL
Redirigere a video l'output della stampante
I PROGRAMMI TSR
Tipi di TSR
La struttura del TSR
Installazione del TSR
Dati, stack e librerie
Ottimizzazione dell'impiego della RAM
Allocazione dinamica della RAM
I TSR e la memoria EMS
Rilasciare l'environment del TSR
Due parole sullo stack
Utilizzo delle funzioni di libreria
Gestione degli interrupt
Hardware, ROM-BIOS e DOS
I flag del DOS
Int 05h (BIOS): Print Screen
Int 08h (Hardware): Timer
Int 09h (Hardware): Tastiera
Int 10h (BIOS): Servizi video
Int 13h (BIOS): I/O dischi
Int 16h (BIOS): Tastiera
Int 1Bh (BIOS): CTRL-BREAK
Int 1Ch (BIOS): Timer
Int 21h (DOS): servizi DOS
Int 23h (DOS): CTRLC
Int 24h (DOS): Errore critico
Int 28h (DOS): DOS libero
Int 2Fh (DOS): Multiplex
Gestione dello I/O
Tastiera
Video
File
DTA
Gestione del PSP
Ricapitolando...
Disattivazione e disinstallazione
keep() ed exit()
Suggerimenti operativi
Controllo di avvenuta installazione
Richiesta dell'indirizzo dei dati
Rimozione della porzione residente del TSR
Precauzioni
Alcuni esempi pratici
I DEVICE DRIVER
Aspetti tecnici
Il bootstrap
Tipi di device driver
Struttura e comportamento dei device driver
Il Device Driver Header: in profondità
Il Request Header e i servizi: tutti i particolari
Servizio 00: Init
Servizio 01: Media Check
Servizio 02: Build BPB
Servizio 03: IOCTL Read
Servizio 04: Read (Input)
Servizio 05: Nondestructive Read
Servizio 06: Input Status
Servizio 07: Flush Input Buffers
Servizio 08: Write (Output)
Servizio 09: Write With Verify
Servizio 10: Output Status
Servizio 11: Flush Output Buffers
Servizio 12: IOCTL Write
Servizio 13: Device Open
Servizio 14: Device Close
Servizio 15: Removable Media
Servizio 16: Output Until Busy
Servizio 19: Generic IOCTL Request
Servizio 23: Get Logical Device
Servizio 24: Set Logical Device
I Device Driver e il C
Un timido tentativo
Progetto di un toolkit
Il nuovo startup module
La libreria di funzioni
La utility per modificare gli header
Il toolkit al lavoro
La funzione init()
Altre funzioni e macro
L'accesso al device driver request header
Le variabili globali dello startup module
Esempio: alcune cosette che il toolkit rende possibili
Esempio: esperimenti di output e IOCTL
LINGUAGGIO C E PORTABILITA'
Dipendenze dallo hardware
Dipendenze dai compilatori
Dipendenze dal sistema operativo
DI TUTTO... DI PIU'
Due file sono il medesimo file?
Dove mi trovo?
La command line
_setargv__() e _setenvp__()
WILDARGS.OBJ
PSP e command line
Una gestione Unix-like
La sintassi
Le funzioni per la libreria
La gestione degli errori
Un esempio di... disinfestante
Un esempio di... pirateria
Individuare la strategia di protezione
Superare la barriera
Sulla retta via...
Insoddisfatti della vostra tastiera?
Ridefinire la tastiera
Una utility
Vuotare il buffer della tastiera
Catturare il contenuto del video
Disinstallare i TSR
Vettori di interrupt o puntatori?
Il CMOS
C... come Cesare
Lavorare con i file batch
L'idea più semplice: EMPTYLVL
Data e ora nei comandi: DATECMD
File piccoli a piacere: FCREATE
Attendere il momento buono: TIMEGONE
Estrarre una sezione da un file: SELSTR
Estrarre colonne di testo da un file: CUT
Il comando FOR rivisitato: DOLIST
I comandi nidificati: CMDSUBST
Numeri a caso
CONTENUTO DEL FLOPPY DISK