home *** CD-ROM | disk | FTP | other *** search
- /*
- * pcwdemo.c: Dimostrativo della libreria PcWindow
- *
- * (c) 1989 - Pasquale Cantiello
- *
- *
- * Allegato alla versione 1.31 di PcWindow
- *
- *
- * Questo programma e' stato scritto con lo scopo di dimostrare
- * l'uso e le funzioni di PcWindow e pertanto si e' cercato
- * di adoperare uno stile di scrittura che fosse quanto di
- * piu' chiaro possibile, anche a discapito di qualche ottimiz-
- * zazione.
- *
- * In alcuni casi sono stati usati dei cast e delle definizioni
- * che potrebbero sembrare superflue, ma si e' voluto fare in modo
- * che anche con il livello di warning al massimo il compilatore
- * non segnalasse alcun errore.
- *
- */
-
-
-
- #include <pcw.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string.h>
-
-
-
- /* Definizioni globali */
-
- #define MAX_WINDOWS 4
- #define MAX_OPEN_WINDOWS 3
- #define MAX_MENU 1
- #define MAX_BUF_SIZE 80*25
- #define STDATT attrib(WHITE,NORMAL,BLACK,STEADY)
-
-
- #define DESC_25 "Premere ALT + la lettera maiuscola nel nome, oppure F1 per l'Help"
- #define ATTR_25 attrib(WHITE,NORMAL,BLUE,STEADY)
-
-
-
- /* Definizioni per l'unico menu adottato */
-
- #define MENU_ID 0
- #define MENU_LEN 80
- #define MENU_SUBNUM 5
- #define MENU_ITNUM 7
- #define MENU_WSIZE 7
- #define MENU_ATT attrib(BLACK,NORMAL,CYAN,STEADY)
- #define MENU_SELSUBATT attrib(YELLOW,HILIGHT,MAGENTA,STEADY)
- #define MENU_SUBATT attrib(BLACK,NORMAL,WHITE,STEADY)
- #define MENU_SELITATT attrib(WHITE,HILIGHT,BLACK,STEADY)
- #define MENU_BORDATT attrib(CYAN,NORMAL,BLUE,STEADY)
- #define MENU_BORDSUATT attrib(CYAN,NORMAL,BLUE,STEADY)
- #define MENU_TYPE ONELINE
- #define MENU_LINETYPE LT_SINGLE
- #define MENU_SUBLINETYPE LT_DOUBLE
- #define MENU_EXTDATT attrib(WHITE,NORMAL,BLUE,STEADY)
-
- static char *menu_desc[] = {
- "Generali",
- "Help", "Informazioni", "Registrazione", "Uscita", "", "", "",
- "Window",
- "Note", "Apertura", "Chiusura", "Movimento", "Scrolling", "Viewing", "siZeing",
- "Input",
- "Note", "Tipi", "Select", "", "", "", "",
- "Menu",
- "Note", "Descrizioni", "Abilitazione", "Lunghezza", "", "", "",
- "Varie",
- "Note", "Interrogazioni", "Velocita'", "Suoni", "Cursore", "Opzioni", "Attributi"
- };
-
- #define MENU_DESC menu_desc
-
-
-
- /* Codifica dei valori di uscita del menu */
-
- #define MC_HELP 0x0100
- #define MC_INFO 0x0101
- #define MC_REG 0x0102
- #define MC_OUT 0x0103
-
- #define MC_WIN_INFO 0x0200
- #define MC_WIN_OPEN 0x0201
- #define MC_WIN_CLOSE 0x0202
- #define MC_WIN_MOVE 0x0203
- #define MC_WIN_SCROLL 0x0204
- #define MC_WIN_VIEW 0x0205
- #define MC_WIN_SIZE 0x0206
-
- #define MC_INP_INFO 0x0300
- #define MC_INP_TYPE 0x0301
- #define MC_INP_SELECT 0x0302
-
- #define MC_MENU_INFO 0x0400
- #define MC_MENU_DESC 0x0401
- #define MC_MENU_ENABLE 0x0402
- #define MC_MENU_LEN 0x0403
-
- #define MC_VAR_INFO 0x0500
- #define MC_VAR_QUERY 0x0501
- #define MC_VAR_SPEED 0x0502
- #define MC_VAR_SOUND 0x0503
- #define MC_VAR_CURSOR 0x0504
- #define MC_VAR_OPTION 0x0505
- #define MC_VAR_ATTR 0x0506
-
-
-
-
- /* Descrizioni aggiuntive che compaiono in 25esima riga */
-
-
- static char *menu_extdesc[] = {
- "Aiuto generale", "Informazioni su PcWindow", "Come registrarsi a PcWindow",
- "Uscita dal demo e ritorno al Dos", "", "", "",
- "Informazioni sulla gestione delle Window", "Modi possibili di apertura",
- "Modi possibili di chiusura", "Tipi di movimento delle finestre",
- "Scorrimento del testo all'interno delle finestre",
- "Modifica del punto di vista", "Modifica delle dimensioni",
- "Informazioni sull'input controllato", "Tipi di input possibili",
- "Selezione di elementi da una lista", "", "", "", "",
- "Informazioni sulla gestione dei menu pull-down", "Descrizioni aggiuntive",
- "Abilitazione e disabilitzione di elementi", "Lunghezza sub-menu",
- "", "", "",
- "Informazioni sulle funzioni ausiliarie", "Funzioni di interrogazione",
- "Tipi di velocita' possibili", "Gestione dei suoni",
- "Gestione del cursore", "Opzioni modificabili", "Attributi Video"
- };
-
- #define MENU_EXTDESC menu_extdesc
-
-
-
- /*
- * Definizioni dei parametri delle varie finestre adottate: prima le finestre
- * temporanee che quindi non richiedono un identificatore in quanto viene
- * ricavato di volta in volta.
- *
- * Per tutte le finestre che mostrano solo una pagina di informazioni, e'
- * stata usata una definizione globale dei parametri, particolarizzando
- * solo le dimensioni, il titolo e il testo.
- *
- */
-
- /* Definizioni globali per tutte le finestre con una pagina di testo */
-
- #define W_GLOB_LINTYP LT_DOUBLE
- #define W_GLOB_BORDATT attrib(GREEN,NORMAL,BLUE,STEADY)
- #define W_GLOB_WNDATT attrib(YELLOW,HILIGHT,BLUE,STEADY)
- #define W_GLOB_TTLATT attrib(RED,HILIGHT,BLUE,STEADY)
- #define W_GLOB_BNATT attrib(YELLOW,HILIGHT,BLUE,BLINK)
- #define W_GLOB_EVATT attrib(CYAN,HILIGHT,BLUE,STEADY)
-
-
-
-
- /* Finestra per mostrare le informazioni generiche sul programma */
- /* Non segue la regola generale */
-
-
- #define W_INFO_XWID 48
- #define W_INFO_YWID 18
- #define W_INFO_TITLE ""
-
-
-
-
- /* Finestra con note sulla registrazione */
-
- #define W_REG_XWID 70
- #define W_REG_YWID 20
- #define W_REG_TITLE "Registrazione all'uso di PcWindow"
-
- static char *reg_body_text[] = {
- "Tutti coloro che hanno la libreria PcWindow e hanno intenzione di",
- "usarla sono tenuti ad effettuare la registrazione.",
- "Per le persone che hanno la versione commerciale della libreria, la",
- "registrazione e' fondamentale perche' e' condizione indispensabile per",
- "poter ricevere gli eventuali aggiornamenti alle condizioni previste",
- "dal contratto di licenza.",
- "Per coloro che invece hanno la versione di pubblico dominio, la regi-",
- "strazione serve per un'indagine statistica e inoltre e' l'unico modo",
- "per poter ricevere la comunicazione di eventuali modifiche o segnala-",
- "zioni di errore.",
- "Gli utenti registrati hanno inoltre diritto di accesso ad un'apposita",
- "area file contenuta su S.Maria C.V. BBS contenente esempi e applica-",
- "zioni per PcWindow.",
- " ",
- "La registrazione all'uso di PcWindow e' completamente gratuita e non",
- "costituisce impegno alcuno per il mittente",
- "Per registrarsi compilare il modulo CARD.PCW contenuto nel pacchetto",
- "e seguire le istruzioni previste nel manuale.",
- " ",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_REG_BODY reg_body_text
-
-
-
- /* Finestra con note sulla gestione Window */
-
- #define W_WIN_INFO_XWID 70
- #define W_WIN_INFO_YWID 9
- #define W_WIN_INFO_TITLE "Gestione Window"
-
- static char *win_info_body_text[] = {
- "La parte principale del programma PcWindow e' costituita dalla fun-",
- "zioni che gestiscono una finestra.",
- "Lasciando in ogni caso al manuale il compito di documentare tutte le",
- "funzioni relative alle Window nelle scelte di questo stesso submenu",
- "sono riportate le funzioni piu' significative.",
- "",
- "Viene usata la finestra dell'Help come esempio.",
- " ",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_WIN_INFO_BODY win_info_body_text
-
-
-
- /* Finestra per l'esempio degli effetti di apertura */
-
- #define W_WIN_OPEN_XWID 67
- #define W_WIN_OPEN_YWID 6
- #define W_WIN_OPEN_TITLE "Effetti di apertura"
-
- static char *win_open_body_text[] = {
- "Adesso potremo osservare tutti gli effetti con i quali e' possibile",
- "aprire una Window.",
- "Ci serviamo della finestra di Help come campione."
- };
-
- #define W_WIN_OPEN_BODY win_open_body_text
- #define W_WIN_OPEN_BODYLEN 3
-
-
-
- /* Finestra per l'esempio degli effetti di chiusura */
-
- #define W_WIN_CLOSE_XWID 67
- #define W_WIN_CLOSE_YWID 6
- #define W_WIN_CLOSE_TITLE "Effetti di chiusura"
-
- static char *win_close_body_text[] = {
- "Adesso potremo osservare tutti gli effetti con i quali e' possibile",
- "chiudere una Window.",
- "Ci serviamo della finestra di Help come campione."
- };
-
- #define W_WIN_CLOSE_BODY win_close_body_text
- #define W_WIN_CLOSE_BODYLEN 3
-
-
-
- /* Finestra con note sulla gestione dell'input */
-
- #define W_INP_INFO_XWID 70
- #define W_INP_INFO_YWID 5
- #define W_INP_INFO_TITLE "Input Controllato"
-
- static char *inp_info_body_text[] = {
- "Sotto la voce Input Controllato rientrano un insieme di funzioni che",
- "consentono al programmatore di richiedere dei dati all'interno del",
- "programma con la sicurezza che l'utente dia solo risposte sensate.",
- " ",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_INP_INFO_BODY inp_info_body_text
-
-
-
-
- /* Finestra per l'esempio dei tipi di input */
-
- #define W_INP_TYPE_XWID 70
- #define W_INP_TYPE_YWID 20
- #define W_INP_TYPE_TITLE "Tipi di input possibili"
-
- static char *inp_type_body_text[] = {
- "Qui di seguito un esempio con i possibili tipi di input ammessi",
- "da PcWindow. E' possibile passare da un campo all'altro con i",
- "tasti cursore.",
- "",
- "--Nome-- --Descrizione input-- --Input--"
- };
-
- #define W_INP_TYPE_BODY inp_type_body_text
- #define W_INP_TYPE_BODYLEN 5
-
- #define MAXTYPE 14
-
- static char input_data[MAXTYPE][11]; /* Dati in uscita da input */
-
- static char *input_type_desc[] = { /* Descrizione dei vari tipi */
- "IT_ALFANUM Tutti i caratteri Ascii .................. :",
- "IT_ALFANUPP Come ALFANUM, ma con conversione maiuscole :",
- "IT_ALFAB Solo i caratteri alfabetici .............. :",
- "IT_ALFABUPP Come ALFAB, ma con conversione maiuscole.. :",
- "IT_INTEGER Solo numeri interi ....................... :",
- "IT_CODE Come INTEGER ma con fill di 0 ............ :",
- "IT_FIXED1 Virgola fissa 1 decimale ................. :",
- "IT_FIXED2 Virgola fissa 2 decimali ................. :",
- "IT_FIXED3 Virgola fissa 3 decimali ................. :",
- "IT_REAL Virgola mobile ........................... :",
- "IT_DATE Giorno/Mese/Anno ......................... :",
- "IT_HOUR Ore:Minuti ............................... :",
- "IT_HEX Numero esadecimale ....................... :",
- "IT_LOGICAL S oppure N ............................... :"
- };
-
- static unsigned int input_type[] = { /* Tipi di input */
- IT_ALFANUM, IT_ALFANUPP, IT_ALFAB, IT_ALFABUPP, IT_INTEGER, IT_CODE,
- IT_FIXED1, IT_FIXED2, IT_FIXED3, IT_REAL, IT_DATE, IT_HOUR, IT_HEX,
- IT_LOGICAL
- };
-
- static unsigned int input_len[] = { /* Lunghezze dei campi */
- 10, 10, 10, 10, 6, 6, 8, 8, 8, 9, 8, 5, 4, 1
- };
-
-
-
-
- /* Finestra per l'esempio della funzione select */
-
- #define W_INP_SELECT_XWID 66
- #define W_INP_SELECT_YWID 10
- #define W_INP_SELECT_LINTYP LT_DOUBLE
- #define W_INP_SELECT_BORDATT attrib(BLUE,NORMAL,RED,STEADY)
- #define W_INP_SELECT_WNDATT attrib(YELLOW,HILIGHT,MAGENTA,STEADY)
- #define W_INP_SELECT_TTLATT attrib(RED,HILIGHT,BLUE,STEADY)
- #define W_INP_SELECT_XLIM W_INP_SELECT_XWID
- #define W_INP_SELECT_YLIM W_INP_SELECT_YWID
- #define W_INP_SELECT_TITLE "Funzione select"
- #define W_INP_SELECT_BNATT attrib(YELLOW,HILIGHT,MAGENTA,BLINK)
- #define W_INP_SELECT_EVATT attrib(CYAN,HILIGHT,MAGENTA,STEADY)
-
- static char *inp_select_body_text[] = {
- "Un esempio della funzione Pcw_select che consente di selezionare",
- "un elemento da un insieme di lunghezza finita.",
- "L'insieme puo' essere piu' lungo della finestra visualizzata.",
- "Esiste una variante di Pcw_select chiamata Pcw_ext_sel che puo'",
- "essere usata quando non e' noto a run-time il numero di elementi",
- "nella lista (esempio: ricerca di un nome in un archivio)."
- };
-
- #define W_INP_SELECT_BODY inp_select_body_text
- #define W_INP_SELECT_BODYLEN 6
-
- /* Valori su cui e' possibile effettuare la scelta */
-
- static char *scelte[] = {
- "la Stampatrice", "il Monitore", "il Modulo", "le Diskette",
- "il Minidisco", "l'Adattatore telematico", "il tasto Immis",
- "l'Unita' di puntamento", "Che belle traduzioni!",
- "Fine delle risate"
- };
-
- #define MAX_SCELTE 10
-
- #define W_SELECT_YWID 5
- #define W_SELECT_COUNT MAX_SCELTE
- #define W_SELECT_LINTYP LT_SINGLE
- #define W_SELECT_WNDATT attrib(WHITE,HILIGHT,BLUE,STEADY)
- #define W_SELECT_BORDATT attrib(RED,NORMAL,BLUE,STEADY)
- #define W_SELECT_EVATT reverse(W_SELECT_WNDATT)
-
-
-
- /* Finestra per l'esempio delle possibilita' di movimento */
-
- #define W_WIN_MOVE_XWID 66
- #define W_WIN_MOVE_YWID 8
- #define W_WIN_MOVE_TITLE "Movimento finestre"
-
- static char *win_move_body_text[] = {
- "PcWindow consente di muovere una finestra lungo lo schermo.",
- "Esistono due funzioni di spostamento: una in coordinate assolute",
- "e un'altra in coordinate relative. Per entrambe lo spostamento",
- "puo' essere istantaneo o graduale ed e' possibile specificare il",
- "verso principale di movimento."
- };
-
- #define W_WIN_MOVE_BODY win_move_body_text
- #define W_WIN_MOVE_BODYLEN 5
-
-
-
- /* Finestra per l'esempio delle possibilita' di scrolling */
-
- #define W_WIN_SCROLL_XWID 68
- #define W_WIN_SCROLL_YWID 6
- #define W_WIN_SCROLL_TITLE "Scrolling del testo finestre"
-
- static char *win_scroll_body_text[] = {
- "PcWindow consente lo scrolling del testo all'interno delle finestre.",
- "Lo scrolling puo' essere istantaneo o graduale in tutte e quattro le",
- "direzioni."
- };
-
- #define W_WIN_SCROLL_BODY win_scroll_body_text
- #define W_WIN_SCROLL_BODYLEN 3
-
-
-
-
- /* Finestra per l'esempio delle possibilita' di Viewing */
-
- #define W_WIN_VIEW_XWID 68
- #define W_WIN_VIEW_YWID 6
- #define W_WIN_VIEW_TITLE "Modifica del punto di vista"
-
- static char *win_view_body_text[] = {
- "E' possibile cambiare la regione di testo visibile quando la fine-",
- "stra e' piu' grande delle dimensioni dell'area visualizzata.",
- " "
- };
-
- #define W_WIN_VIEW_BODY win_view_body_text
- #define W_WIN_VIEW_BODYLEN 3
-
-
-
-
-
- /* Finestra per l'esempio delle possibilita' di sizeing */
-
- #define W_WIN_SIZE_XWID 68
- #define W_WIN_SIZE_YWID 6
- #define W_WIN_SIZE_TITLE "Modifica delle dimensioni della finestra"
-
- static char *win_size_body_text[] = {
- "E' possibile modificare dinamicamente le dimensioni di una window.",
- "La modifica puo' essere istantanea o graduale in tutte e quattro",
- "le direzioni."
- };
-
- #define W_WIN_SIZE_BODY win_size_body_text
- #define W_WIN_SIZE_BODYLEN 3
-
-
-
-
- /* Finestra con note sui menu pull-down */
-
- #define W_MENU_INFO_XWID 70
- #define W_MENU_INFO_YWID 8
- #define W_MENU_INFO_TITLE "Menu pull-down"
-
- static char *menu_info_body_text[] = {
- "Un gruppo di funzioni all'interno di PcWindow riguarda la gestione",
- "dei menu pull-down.",
- "I menu, come e' possibile osservare, sono a due livelli:",
- "uno orizzontale sempre visibile e l'altro verticale con finestre",
- "che si aprono in corrispondenza delle scelte effettuate sul primo",
- "livello.",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_MENU_INFO_BODY menu_info_body_text
-
-
-
-
- /* Finestra con note sulle descrizioni aggiuntive */
-
- #define W_MENU_DESC_XWID 70
- #define W_MENU_DESC_YWID 8
- #define W_MENU_DESC_TITLE "Descrizioni aggiuntive"
-
- static char *menu_desc_body_text[] = {
- "E' possibile agganciare un'insieme di descrizioni aggiuntive al menu",
- "pull down da far comparire in 25esima riga durante la selezione.",
- "Questa caratteristica e' utile per evitare di avere menu troppo",
- "larghi e per poter fornire all'utente una descrizione piu' detta-",
- "gliata di quello che sta per scegliere.",
- "Questa funzione e' utilizzata anche in questo esempio.",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_MENU_DESC_BODY menu_desc_body_text
-
-
-
-
- /* Finestra con note sulle funzioni di abilitrazione */
-
- #define W_MENU_ENABLE_XWID 70
- #define W_MENU_ENABLE_YWID 11
- #define W_MENU_ENABLE_TITLE "Abilitazione e disabilitazione"
-
- static char *menu_enable_body_text[] = {
- "E' possibile, durante il funzionamento del programma, abilitare e",
- "disabilitare qualche scelta all'interno dei vari sub-menu in modo",
- "evitare all'utente scelte che sono prive di significato in un",
- "determinato istante.",
- "Come e' possibile osservare, al fianco di ognuna delle scelte e'",
- "presente un simbolo che indica che la scelta e' possibile.",
- "L'assenza di questo simbolo non consente all'utente di effettuare",
- "la selezione. E' possibile inoltre cambiare questo simbolo con uno",
- "qualunque dei caratteri del set IBM",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_MENU_ENABLE_BODY menu_enable_body_text
-
-
-
-
- /* Finestra con note sulla lunghezza dei menu */
-
- #define W_MENU_LEN_XWID 70
- #define W_MENU_LEN_YWID 11
- #define W_MENU_LEN_TITLE "Lunghezza dei sub-menu"
-
- static char *menu_len_body_text[] = {
- "Come si puo' osservare dal menu di questo esempio, non tutti i",
- "sub-menu hanno la stessa lunghezza e questo e' abbastanza ovvio.",
- "Un'altra cosa che invece e' possibile fare durante la definizione",
- "di un menu e' quella di avere un sub-menu con un numero di ele-",
- "menti maggiore dell'ampiezza della finestra relativa.",
- "In tal caso, nella finestra saranno visualizzati solo nel numero",
- "quelli che vi entrano. Gli altri saranno accessibili mediante",
- "pressione dei tasti cursore in basso e in alto con conseguente",
- "scrolling all'interno della finestra.",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_MENU_LEN_BODY menu_len_body_text
-
-
-
- /* Finestra con informazioni sulle funzioni varie */
-
- #define W_VAR_INFO_XWID 60
- #define W_VAR_INFO_YWID 7
- #define W_VAR_INFO_TITLE "Funzioni varie"
-
- static char *var_info_body_text[] = {
- "Esistono un insieme di funzioni di supporto in PcWindow che",
- "consentono di modificare parametri globali, leggere stati e",
- "parametri del sistema, agire sul cursore, sul suono e tante",
- "altre cose, come mostrato dalle prossime voci di questo",
- "sub-menu.",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_VAR_INFO_BODY var_info_body_text
-
-
-
- /* Finestra per le funzioni di interrogazione */
-
- #define W_VAR_QUERY_XWID 65
- #define W_VAR_QUERY_YWID 14
- #define W_VAR_QUERY_TITLE "Funzioni di interrogazione"
-
- static char *var_query_body_text[] = {
- "Con queste funzioni e' possibile avere a run-time le seguenti",
- "informazioni:",
- "",
- "- Data e ora correnti",
- "- CPU presente nel sistema",
- "- Scheda video presente nel sistema",
- "- Numero di finestre attive",
- "- Numero della finestra corrente",
- "- Dimensioni attuali di una finestra",
- "- Stato corrente di una finestra",
- "- Versione di PcWindow in uso",
- "- Posizione attuale di una finestra",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_VAR_QUERY_BODY var_query_body_text
-
-
-
- /* Finestra per le velocita' */
-
- #define W_VAR_SPEED_XWID 65
- #define W_VAR_SPEED_YWID 13
- #define W_VAR_SPEED_TITLE "Velocita' degli effetti"
-
- static char *var_speed_body_text[] = {
- "Tutte le funzioni che comportano movimento (open, move, size,",
- "scroll, close, etc.. consentono la scelta fra vari effetti di",
- "dissolvenza. E' possibile, tramite una funzione di PcWindow,",
- "scegliere la velocita' con cui avvengono queste operazioni tra",
- "quattro possibili velocita':",
- "SLOW, FAST, VERYFAST, NOSYNC",
- "",
- "La cosa importante e' che la velocita' scelta e' indipendente",
- "dal calcolatore utilizzato per cui il programma si comportera'",
- "allo stesso modo sia un PC a 4.77 MHz che su un 386 a 25 Mhz,",
- "tranne che per la modalita' NOSYNC.",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_VAR_SPEED_BODY var_speed_body_text
-
-
-
-
- /* Finestra per il suono */
-
- #define W_VAR_SOUND_XWID 65
- #define W_VAR_SOUND_YWID 11
- #define W_VAR_SOUND_TITLE "Gestione del suono"
-
- static char *var_sound_body_text[] = {
- "Esistono due funzioni in PcWindow che consentono la generazione",
- "di suoni.",
- "La prima e' la funzione Pcw_beep() che come dice il nome genera",
- "un beep diverso da quello che si potrebbe ottenere normalmente",
- "in quanto e' piu' corto di durata e piu' acuto di tonalita'.",
- "",
- "La seconda funzione e' Pcw_tone(freq, dur) che consente di gene-",
- "rare un suono di frequenza e durata scelte a piacere. In tal",
- "modo si possono anche generare delle semplici musichette.",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_VAR_SOUND_BODY var_sound_body_text
-
-
-
-
- /* Finestra per il cursore */
-
- #define W_VAR_CURSOR_XWID 60
- #define W_VAR_CURSOR_YWID 8
- #define W_VAR_CURSOR_TITLE "Gestione del cursore"
-
- static char *var_cursor_body_text[] = {
- "Per quanto riguarda la manipolazione del cursore nell'ambito",
- "di PcWindow e' possibile fare le seguenti cose:",
- "",
- "- Disabilitarne la visualizzazione",
- "- Abilitarne la visualizzazione",
- "- Scegliere tra cursore sottolineato o cursore pieno",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_VAR_CURSOR_BODY var_cursor_body_text
-
-
-
- /* Finestra per la funzione option */
-
- #define W_VAR_OPTION_XWID 60
- #define W_VAR_OPTION_YWID 11
- #define W_VAR_OPTION_TITLE "Gestione delle opzioni"
-
- static char *var_option_body_text[] = {
- "Una funzione in PcWindow consente la modifica di una serie",
- "di paramtri e di opzioni e precisamente:",
- "",
- "- Se il sistema deve eseguire un beep in caso di errore",
- "- Se i valori in uscita dall'input devono essere riempiti",
- " di blank quando la loro lunghezza e' minore del massimo",
- "- Caratteri da usare come delimitatori del titolo",
- "- Carattere da usare come separatore per i decimali",
- "- Carattere da usare come indicatore di enable per i menu",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_VAR_OPTION_BODY var_option_body_text
-
-
-
- /* Finestra per gli attributi */
-
- #define W_VAR_ATTR_XWID 60
- #define W_VAR_ATTR_YWID 13
- #define W_VAR_ATTR_TITLE "Attributi video"
-
- static char *var_attr_body_text[] = {
- "E' possibile una gestione completa degli attributi video e",
- "a tal proposito esiste la macro attrib(FORE,HIL,BACK,BLI)",
- "che consente di ottenere il codice di attributo a partire",
- "da:",
- "- Colore di FOREGROUND",
- "- Eventuale DOPPIA INTENSITA'",
- "- Colore di BACKGROUND",
- "- Eventuale LAMPEGGIO",
- "",
- "Esiste inoltre la macro reverse(ATTR) che a partire da un",
- "codice di attributo genera il relativo REVERSE",
- "",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_VAR_ATTR_BODY var_attr_body_text
-
-
-
-
-
-
-
- /* Finestra di aiuto al programma [ID = 0] */
-
- #define W_HELP_ID 0
- #define W_HELP_XWID 68
- #define W_HELP_YWID 14
- #define W_HELP_LINTYP LT_SINGLE
- #define W_HELP_BORDATT attrib(BLUE,NORMAL,RED,STEADY)
- #define W_HELP_WNDATT attrib(YELLOW,HILIGHT,MAGENTA,STEADY)
- #define W_HELP_TTLATT attrib(RED,HILIGHT,BLUE,STEADY)
- #define W_HELP_XLIM W_HELP_XWID
- #define W_HELP_YLIM W_HELP_YWID
- #define W_HELP_TITLE "Spiegazioni per l'uso"
- #define W_HELP_BNATT attrib(YELLOW,HILIGHT,MAGENTA,BLINK)
- #define W_HELP_EVATT attrib(CYAN,HILIGHT,MAGENTA,STEADY)
-
- static char *help_body_text[] = {
- "Questo dimostrativo consente di valutare e verificare le prestazioni",
- "della libreria PcWindow. E' fondamentale pero' analizzare anche il",
- "listato per poter capire come sono state realizzate le cose che qui",
- "si vedono.",
- "All'interno del menu' e' possibile effettuare le proprie scelte ser-",
- "vendosi dei quattro tasti cursore, oppure mediante pressione della",
- "lettera maiuscola presente nel nome. Dopo aver evidenziato la fun-",
- "zione desiderata, basta premere RETURN per selezionarla, oppure ESC",
- "per annullare la selezione.",
- "Questo demo e' organizzato in modo da presentare la maggior parte",
- "delle funzioni disponibili in PcWindow raggruppate opportunamente.",
- "In ogni caso conviene consultare sempre il manuale.",
- " ",
- "Premere un tasto qualsiasi per continuare"
- };
-
- #define W_HELP_BODY help_body_text
- #define W_HELP_BODYLEN 14
-
-
-
-
-
- /* Effetti possibili: nomi e simboli */
-
- static char *effect_name[] = {
- "ISTANT", "FADEUP", "FADEDOWN", "FADELEFT", "FADERIGHT", "FADEHORIZ",
- "FADEVERT" };
-
- static unsigned int effect[] = {
- ISTANT, FADEUP, FADEDOWN, FADELEFT, FADERIGHT, FADEHORIZ, FADEVERT };
-
- #define MAX_EFFECT 7
-
-
- /* Macro di uso generale */
-
-
- #define WAIT_FOR_A_KEY while(kbhit())getch();getch();while(kbhit())getch();
-
- /* Prototipi delle funzioni chiamate dal main */
-
- void define_all(void);
- void set_default(void);
- void display_info(void);
- void display_help(void);
- void demo_open(void);
- void demo_close(void);
- void demo_inp_type(void);
- void demo_select(void);
- void demo_move(void);
- void demo_scroll(void);
- void demo_view(void);
- void demo_size(void);
-
- void show_info(unsigned int, unsigned int, char *, char **);
-
-
-
- /*
- * Qui inizia il main program del dimostrativo.
- *
- */
-
-
- void main(void)
- {
-
- BOOLEAN fine;
- int scelta;
-
-
-
- /* Inizializzazione del toolkit */
-
- if (Pcw_init(MAX_WINDOWS, MAX_OPEN_WINDOWS, MAX_BUF_SIZE) != OK) {
- printf("\n\n\nErrore nell'inizializzazione toolkit !!\n\n");
- exit (1);
- }
-
-
- /* Controllo versione PcWindow: da eseguire sempre! */
-
- if (Pcw_version() < __PCW__) {
- printf("\n\n\nErrore: E' richiesta almeno la versione %d.%02d !!\n\n",
- __PCW__/100,__PCW__%100);
- exit (1);
- }
-
-
- /* Inizializzazione gestore menu */
-
- if (Pcm_init(MAX_MENU) != OK) {
- printf("\n\n\nErrore inizializzazione menu !!\n\n");
- exit (1);
- }
-
-
- /* Tutte le chiamate alle funzioni in questo demo sono effettuate senza
- * controllare i valori di ritorno. E' opportuno controllarli in fase di
- * debugging dei propri programmi.
- */
-
- Pcw_clear_screen(STDATT); /* Cancella schermo */
-
- define_all(); /* Definisce menu e Windows */
-
- set_default(); /* Stabilisce valori di default */
-
-
- Pcm_open(MENU_ID); /* Visualizza menu */
-
-
-
-
- /* Di seguito il ciclo principale: Si entra nel menu e si effettua una
- * scelta. In conseguenza della scelta si attiva la funzione apposita.
- */
-
- fine = FALSE;
-
- while (! fine) {
-
- Pcw_write_25(DESC_25, ATTR_25); /* Aiuto in 25esima linea */
-
- scelta = Pcm_enter_menu(NOCHAR, FKEYS);
-
- Pcw_clear_25();
-
- switch (scelta) {
-
- case 0 : /* Tasto ESC */
- break;
-
- case -(IN_FKEY + 1) : /* Tasto F1 */
- case MC_HELP : /* Finestra di aiuto */
- display_help();
- break;
-
- case MC_OUT : /* Fine dimostrativo */
- fine = TRUE;
- break;
-
- case MC_INFO : /* Informazioni su PcWindow */
- display_info();
- break;
-
- case MC_REG : /* Registrazione a PcWindow */
- show_info(W_REG_XWID, W_REG_YWID, W_REG_TITLE, W_REG_BODY);
- break;
-
- case MC_WIN_INFO : /* Informazioni sulla gestione delle Window */
- show_info(W_WIN_INFO_XWID, W_WIN_INFO_YWID, W_WIN_INFO_TITLE,
- W_WIN_INFO_BODY);
- break;
-
- case MC_WIN_OPEN : /* Effetti di apertura */
- demo_open();
- break;
-
- case MC_WIN_CLOSE : /* Effetti di chiusura */
- demo_close();
- break;
-
- case MC_WIN_MOVE : /* Effetti di movimento */
- demo_move();
- break;
-
- case MC_WIN_SCROLL :
- demo_scroll(); /* Effetti di scrolling */
- break;
-
- case MC_WIN_VIEW : /* Effetti di Viewing */
- demo_view();
- break;
-
- case MC_WIN_SIZE : /* Effetti di Sizeing */
- demo_size();
- break;
-
- case MC_INP_INFO : /* Informazioni sull'input controllato */
- show_info(W_INP_INFO_XWID, W_INP_INFO_YWID, W_INP_INFO_TITLE,
- W_INP_INFO_BODY);
- break;
-
- case MC_INP_TYPE : /* Dimostrativo tipi di input */
- demo_inp_type();
- break;
-
- case MC_INP_SELECT :
- demo_select(); /* Dimostrativo funzione select */
- break;
-
- case MC_MENU_INFO : /* Informazioni sui menu pull down */
- show_info(W_MENU_INFO_XWID, W_MENU_INFO_YWID, W_MENU_INFO_TITLE,
- W_MENU_INFO_BODY);
- break;
-
- case MC_MENU_DESC : /* Informazioni sulle descrizioni aggiuntive */
- show_info(W_MENU_DESC_XWID, W_MENU_DESC_YWID, W_MENU_DESC_TITLE,
- W_MENU_DESC_BODY);
- break;
-
- case MC_MENU_ENABLE : /* Informazioni sulle funzioni di abilitazione*/
- show_info(W_MENU_ENABLE_XWID, W_MENU_ENABLE_YWID, W_MENU_ENABLE_TITLE,
- W_MENU_ENABLE_BODY);
- break;
-
- case MC_MENU_LEN : /* Informazioni sulla lunghezza dei menu */
- show_info(W_MENU_LEN_XWID, W_MENU_LEN_YWID, W_MENU_LEN_TITLE,
- W_MENU_LEN_BODY);
- break;
-
- case MC_VAR_INFO : /* Informazioni sulle funzioni varie */
- show_info(W_VAR_INFO_XWID, W_VAR_INFO_YWID, W_VAR_INFO_TITLE,
- W_VAR_INFO_BODY);
- break;
-
- case MC_VAR_QUERY : /* Funzioni di interrogazione */
- show_info(W_VAR_QUERY_XWID, W_VAR_QUERY_YWID, W_VAR_QUERY_TITLE,
- W_VAR_QUERY_BODY);
- break;
-
- case MC_VAR_SPEED : /* Velocita' degli effetti */
- show_info(W_VAR_SPEED_XWID, W_VAR_SPEED_YWID, W_VAR_SPEED_TITLE,
- W_VAR_SPEED_BODY);
- break;
-
- case MC_VAR_SOUND : /* Funzioni per la gestione del suono */
- show_info(W_VAR_SOUND_XWID, W_VAR_SOUND_YWID, W_VAR_SOUND_TITLE,
- W_VAR_SOUND_BODY);
- break;
-
- case MC_VAR_CURSOR : /* Funzioni per la gestione del cursore */
- show_info(W_VAR_CURSOR_XWID, W_VAR_CURSOR_YWID, W_VAR_CURSOR_TITLE,
- W_VAR_CURSOR_BODY);
- break;
-
- case MC_VAR_OPTION : /* Funzioni per la funzione option */
- show_info(W_VAR_OPTION_XWID, W_VAR_OPTION_YWID, W_VAR_OPTION_TITLE,
- W_VAR_OPTION_BODY);
- break;
-
- case MC_VAR_ATTR : /* Gestione degli attributi */
- show_info(W_VAR_ATTR_XWID, W_VAR_ATTR_YWID, W_VAR_ATTR_TITLE,
- W_VAR_ATTR_BODY);
- break;
-
- }
-
- }
-
-
-
- Pcm_close(); /* Chiude il menu */
-
- exit (0); /* Terminare sempre con exit !! */
- }
-
-
-
-
-
- /*
- * Funzione define_all: Definisce il menu e le finestre statiche usate nel
- * programma.
- */
-
- void define_all(void)
- {
-
- register i;
-
- /* Definizione dell'unico menu utilizzato. Le varie costanti utilizzate
- * sono definite in testa al programma.
- */
-
- Pcm_define(MENU_ID, MENU_LEN, MENU_SUBNUM, MENU_ITNUM, MENU_WSIZE,
- MENU_ATT, MENU_SELSUBATT, MENU_SUBATT, MENU_SELITATT, MENU_BORDATT,
- MENU_BORDSUATT, MENU_DESC, MENU_TYPE, MENU_LINETYPE, MENU_SUBLINETYPE,
- FALSE);
-
-
- /* Adesso viene agganciato al menu l'insieme delle descrizioni
- * aggiuntive utili per spiegare le varie funzioni in fase di scelta.
- */
-
- Pcm_ext_desc(MENU_ID, MENU_EXTDATT, MENU_EXTDESC);
-
-
-
- /* Qui viene definita la finestra contenente il test di Help visualizzato
- * mediante l'apposita funzione del menu o in taluni casi mediante F1
- */
-
- Pcw_define(W_HELP_ID, W_HELP_XWID, W_HELP_YWID, W_HELP_LINTYP,
- W_HELP_BORDATT, W_HELP_WNDATT, W_HELP_TTLATT, W_HELP_XLIM,
- W_HELP_YLIM, W_HELP_TITLE);
-
- i = 0;
- while (i < W_HELP_BODYLEN) {
- Pcw_sprintat(W_HELP_ID, 0, i, W_HELP_BODY[i], W_HELP_WNDATT);
- ++i;
- }
-
- }
-
-
-
-
- /*
- * Funzione set_default: Stabilisce i vari valori di default
- */
-
- void set_default(void)
- {
-
-
- Pcw_no_flick(); /* Disabilitazione dei flicker: questa funzione
- * andrebbe invocata solo se la scheda lo richiede.
- * Nel nostro caso viene invocato comunque, in
- * quanto non pregiudica in modo osservabile le
- * prestazioni del programma
- */
-
-
-
-
- /* Di seguito viene usata la funzione Pcw_set_option per abilitare il
- * segnalatore acustico degli errori. Altre opzioni sono discusse a
- * parte.
- */
-
- Pcw_set_option("BEEP_ON_ERROR=YES");
-
-
- /* Adesso viene scelta la velocita' piu' alta possibile per gli effetti.
- * Questa e' valida solo in macchine dotate di CPU 80286 o 80386.
- * Se la macchina ospite non possiede uno di questi due processori,
- * il toolkit provvede ad abbassare la velocita' a FAST.
- */
-
- Pcw_set_speed(VERYFAST);
-
-
- }
-
-
-
-
- /*
- * Funzione display_info: Mostra le informazioni base su PcWindow.
- *
- * La funzione ottiene un numero di finestra disponibile.
- * Esegue poi la definizione e la scrittura e quindi mostra la
- * finestra con le informazioni richieste.
- * Dopodiche' alla pressione di un tasto la finestra viene chiusa
- * e viene liberato il numero.
- *
- * Anche in questo caso occorrerebbe controllare i valori in uscita
- * dalle varie funzioni e in special modo dalla funzione
- * Pcw_first_free. Nel nostro caso per come e' fatto il programma
- * siamo sicuri che esiste una finestra libera.
- *
- */
-
-
- void display_info(void)
- {
-
- int temp_window;
- register i;
-
- char temp_string[20];
-
- temp_window = Pcw_first_free(); /* Ottiene un numero libero */
-
-
- /* Definizione finestra: tutti i nomi sono definiti in testa al prog.*/
-
- Pcw_define(temp_window, W_INFO_XWID, W_INFO_YWID, W_GLOB_LINTYP,
- W_GLOB_BORDATT, W_GLOB_WNDATT, W_GLOB_TTLATT, W_INFO_XWID,
- W_INFO_YWID, W_INFO_TITLE);
-
-
- /* Scrittura del testo */
-
- Pcw_sprintat(temp_window, ALIGN_CENTER, 0, "PcWindow", W_GLOB_BNATT);
- Pcw_sprintat(temp_window, ALIGN_CENTER, 1,
- "Personal Computer Window Management Tool", W_GLOB_WNDATT);
- Pcw_sprintat(temp_window, ALIGN_CENTER, 2,
- "(c) 1989 by Pasquale Cantiello", W_GLOB_WNDATT);
-
- Pcw_sprintat(temp_window, 1, 4, "Versione :", W_GLOB_WNDATT);
-
-
- /* Legge il numero della versione nella stringa destinazione */
-
- itoa(Pcw_version(), temp_string+1, 10);
- temp_string[0] = temp_string[1];
- temp_string[1] = '.';
-
- Pcw_sprintat(temp_window, 12, 4, temp_string, W_GLOB_EVATT);
-
-
- /* Legge data e ora e le visualizza */
-
- Pcw_sprintat(temp_window, 1, 6, "Data odierna :", W_GLOB_WNDATT);
- Pcw_sprintat(temp_window, 27, 6, "Ore :", W_GLOB_WNDATT);
- Pcw_get_date(temp_string);
- Pcw_sprintat(temp_window, 16, 6, temp_string, W_GLOB_EVATT);
- Pcw_get_time(temp_string);
- Pcw_sprintat(temp_window, 33, 6, temp_string, W_GLOB_EVATT);
-
-
- /* Legge il tipo di CPU */
-
- Pcw_sprintat(temp_window, 1, 7, "CPU presente :", W_GLOB_WNDATT);
-
- switch(Pcw_cpu_type()) {
-
- case CPU_8088 :
- strcpy(temp_string, "Intel 8088");
- break;
- case CPU_8086 :
- strcpy(temp_string, "Intel 8086");
- break;
- case CPU_80188 :
- strcpy(temp_string, "Intel 80188");
- break;
- case CPU_80186 :
- strcpy(temp_string, "Intel 80186");
- break;
- case CPU_V20 :
- strcpy(temp_string, "Nec V20");
- break;
- case CPU_V30 :
- strcpy(temp_string, "Nec V30");
- break;
- case CPU_80286 :
- strcpy(temp_string, "Intel 80286");
- break;
- case CPU_80386 :
- strcpy(temp_string, "Intel 80386");
- break;
- default :
- strcpy(temp_string, "sconosciuta");
- break;
- }
-
- Pcw_sprintat(temp_window, 16, 7, temp_string, W_GLOB_EVATT);
-
-
- /* Legge il tipo di scheda video e lo visualizza */
-
- Pcw_sprintat(temp_window, 1, 8, "Scheda video :", W_GLOB_WNDATT);
-
- switch(Pcw_video_card()) {
-
- case VIDEO_MONO :
- strcpy(temp_string, "MDA");
- break;
- case VIDEO_HERC :
- strcpy(temp_string, "Hercules");
- break;
- case VIDEO_CGA :
- strcpy(temp_string, "CGA");
- break;
- case VIDEO_EGA :
- strcpy(temp_string, "EGA");
- break;
- case VIDEO_MCGA :
- strcpy(temp_string, "MCGA");
- break;
- case VIDEO_VGA :
- strcpy(temp_string, "VGA");
- break;
- default :
- strcpy(temp_string, "sconosciuta");
- break;
- }
-
- Pcw_sprintat(temp_window, 16, 8, temp_string, W_GLOB_EVATT);
-
-
- Pcw_sprintat(temp_window, 1, 10, "Pasquale Cantiello S.M.C.V. BBS", W_GLOB_WNDATT);
- Pcw_sprintat(temp_window, 1, 11, "c/o I.D.M. srl FidoNet 2:335/2", W_GLOB_WNDATT);
- Pcw_sprintat(temp_window, 1, 12, "Viale Kennedy, 33 300/1200/2400 baud", W_GLOB_WNDATT);
- Pcw_sprintat(temp_window, 1, 13, "81055 S.Maria C.V. (CE) Tel. (0823) - 812533", W_GLOB_WNDATT);
- Pcw_sprintat(temp_window, 1, 14, "Tel. (0823) - 812533 Feriali: 20:00 - 08:00", W_GLOB_WNDATT);
- Pcw_sprintat(temp_window, 25, 15, "Sabato : dalle 14:00", W_GLOB_WNDATT);
- Pcw_sprintat(temp_window, 25, 16, "Festivi: 24 ore", W_GLOB_WNDATT);
-
- Pcw_printat(temp_window, 0, 9, 218, W_GLOB_EVATT, 1);
- Pcw_printat(temp_window, 1, 9, 196, W_GLOB_EVATT, 48);
- Pcw_printat(temp_window, 24, 9, 194, W_GLOB_EVATT, 1);
- Pcw_printat(temp_window, 47, 9, 191, W_GLOB_EVATT, 1);
-
- for (i = 0; i < 7; i++) {
- Pcw_printat(temp_window, 0, 10+i, 179, W_GLOB_EVATT, 1);
- Pcw_printat(temp_window, 24, 10+i, 179, W_GLOB_EVATT, 1);
- Pcw_printat(temp_window, 47, 10+i, 179, W_GLOB_EVATT, 1);
- }
-
- Pcw_printat(temp_window, 0, 17, 192, W_GLOB_EVATT, 1);
- Pcw_printat(temp_window, 1, 17, 196, W_GLOB_EVATT, 48);
- Pcw_printat(temp_window, 24, 17, 193, W_GLOB_EVATT, 1);
- Pcw_printat(temp_window, 47, 17, 217, W_GLOB_EVATT, 1);
-
-
-
-
- /* Viene aperta la finestra centrata in orizzontale rispetto al video */
-
- Pcw_open_pos(temp_window, FADEHORIZ, ALIGN_CENTER, ALIGN_CENTER);
-
-
-
- /* Aspetta la pressione di un tasto */
-
- WAIT_FOR_A_KEY;
-
-
-
- /* Chiude la finestra */
-
- Pcw_close(FADEHORIZ);
-
-
- /* Libera il numero di finestra */
-
- Pcw_undef(temp_window);
-
- }
-
-
-
- /*
- * Funzione display_help: Mostra una paginetta di aiuto.
- *
- * In questo caso viene sfruttata una finestra predefinita e infatti
- * occorre conoscere l'ID della finestra.
- */
-
-
- void display_help(void)
- {
-
- Pcw_open_pos(W_HELP_ID, ISTANT, ALIGN_CENTER, ALIGN_CENTER);
-
- WAIT_FOR_A_KEY;
-
- Pcw_close(ISTANT);
-
- }
-
-
-
-
- /*
- * Funzione display_reg: Mostra le informazioni sulla registrazione a PcW.
- *
- */
-
-
-
-
-
-
-
-
- /* Funzione demo_open: dimostrativo dei possibili effetti di apertura */
-
- void demo_open(void)
- {
-
- register i;
- int temp_window;
-
- temp_window = Pcw_first_free();
-
- Pcw_define(temp_window, W_WIN_OPEN_XWID, W_WIN_OPEN_YWID, W_GLOB_LINTYP,
- W_GLOB_BORDATT, W_GLOB_WNDATT, W_GLOB_TTLATT, W_WIN_OPEN_XWID,
- W_WIN_OPEN_YWID, W_WIN_OPEN_TITLE);
-
- i = 0;
- while (i < W_WIN_OPEN_BODYLEN) {
- Pcw_sprintat(temp_window, 0, i, W_WIN_OPEN_BODY[i], W_GLOB_WNDATT);
- ++i;
- }
-
-
-
- Pcw_open_pos(temp_window, ISTANT, ALIGN_BEGIN, ALIGN_END);
-
-
- /* Adesso mostra uno per uno i vari effetti */
-
- for (i = 0; i < MAX_EFFECT; i ++) {
-
- Pcw_sprintat(temp_window, 0, 4, "Effetto :", W_GLOB_WNDATT);
- Pcw_sprintat(temp_window, 10, 4, effect_name[i], W_GLOB_EVATT);
- Pcw_sprintat(temp_window, 0, 5, "Premi un tasto", W_GLOB_WNDATT);
- WAIT_FOR_A_KEY;
- Pcw_printat(temp_window, 0, 5, ' ', W_GLOB_WNDATT, W_WIN_OPEN_XWID);
-
- Pcw_open_pos(W_HELP_ID, effect[i], ALIGN_END, 4);
- Pcw_sprintat(temp_window, 0, 5, "Premi un tasto", W_GLOB_WNDATT);
- WAIT_FOR_A_KEY;
- Pcw_printat(temp_window, 0, 5, ' ', W_GLOB_WNDATT, W_WIN_OPEN_XWID);
- Pcw_close(ISTANT);
- Pcw_printat(temp_window, 0, 4, ' ', W_GLOB_WNDATT, W_WIN_OPEN_XWID);
-
- }
-
- WAIT_FOR_A_KEY;
-
- Pcw_close(ISTANT);
-
- Pcw_undef(temp_window);
-
- }
-
-
-
-
- /* Funzione demo_close: dimostrativo dei possibili effetti di chiusura */
-
- void demo_close(void)
- {
-
- register i;
- int temp_window;
-
- temp_window = Pcw_first_free();
-
- Pcw_define(temp_window, W_WIN_CLOSE_XWID, W_WIN_CLOSE_YWID, W_GLOB_LINTYP,
- W_GLOB_BORDATT, W_GLOB_WNDATT, W_GLOB_TTLATT, W_WIN_CLOSE_XWID,
- W_WIN_CLOSE_YWID, W_WIN_CLOSE_TITLE);
-
- i = 0;
- while (i < W_WIN_CLOSE_BODYLEN) {
- Pcw_sprintat(temp_window, 0, i, W_WIN_CLOSE_BODY[i], W_GLOB_WNDATT);
- ++i;
- }
-
-
-
- Pcw_open_pos(temp_window, ISTANT, ALIGN_BEGIN, ALIGN_END);
-
-
- /* Adesso mostra uno per uno i vari effetti */
-
- for (i = 0; i < MAX_EFFECT; i ++) {
-
- Pcw_sprintat(temp_window, 0, 4, "Effetto :", W_GLOB_WNDATT);
- Pcw_sprintat(temp_window, 10, 4, effect_name[i], W_GLOB_EVATT);
- Pcw_sprintat(temp_window, 0, 5, "Premi un tasto", W_GLOB_WNDATT);
- WAIT_FOR_A_KEY;
- Pcw_printat(temp_window, 0, 5, ' ', W_GLOB_WNDATT, W_WIN_CLOSE_XWID);
-
- Pcw_open_pos(W_HELP_ID, ISTANT, ALIGN_END, 4);
- Pcw_sprintat(temp_window, 0, 5, "Premi un tasto", W_GLOB_WNDATT);
- WAIT_FOR_A_KEY;
- Pcw_printat(temp_window, 0, 5, ' ', W_GLOB_WNDATT, W_WIN_CLOSE_XWID);
- Pcw_close(effect[i]);
- Pcw_printat(temp_window, 0, 4, ' ', W_GLOB_WNDATT, W_WIN_CLOSE_XWID);
-
- }
-
- WAIT_FOR_A_KEY;
-
- Pcw_close(ISTANT);
-
- Pcw_undef(temp_window);
-
- }
-
-
-
-
-
-
- /* Funzione demo_inp_type: Mostra i possibili tipi di input */
-
- void demo_inp_type(void)
- {
-
- register i;
- int temp_window, result;
-
- temp_window = Pcw_first_free();
-
- Pcw_define(temp_window, W_INP_TYPE_XWID, W_INP_TYPE_YWID, W_GLOB_LINTYP,
- W_GLOB_BORDATT, W_GLOB_WNDATT, W_GLOB_TTLATT, W_INP_TYPE_XWID,
- W_INP_TYPE_YWID, W_INP_TYPE_TITLE);
-
- i = 0;
- while (i < W_INP_TYPE_BODYLEN) {
- Pcw_sprintat(temp_window, 0, i, W_INP_TYPE_BODY[i], W_GLOB_WNDATT);
- ++i;
- }
-
-
-
- Pcw_open_pos(temp_window, FADEHORIZ, ALIGN_CENTER, ALIGN_CENTER);
-
- /* Azzeramento valori di default */
-
- for (i = 0; i < MAXTYPE; i++) {
- input_data[i][0] = '\0';
- Pcw_sprintat(temp_window, 0, i+5, input_type_desc[i], W_GLOB_WNDATT);
-
- }
-
- i = 0;
-
- /* Setta il modo di input */
-
- Pcw_set_input_mode(BLANK, reverse(W_GLOB_EVATT), W_GLOB_EVATT, CURS);
-
- /* Sceglie il tipo di input */
-
- Pcw_set_input_flag(INP);
-
-
- while (i < MAXTYPE) {
-
- result = Pcw_input(input_type[i], 59, i+5, input_len[i], input_data[i], input_data[i]);
-
- switch(result) {
-
- case OK :
- case IN_CRD :
- ++i;
- break;
-
- case IN_CRU :
- if (i)
- --i;
- break;
-
-
- }
- }
-
- WAIT_FOR_A_KEY;
-
- Pcw_close(FADEHORIZ);
-
- Pcw_undef(temp_window);
-
- }
-
-
-
-
-
- /* Funzione demo_select: Mostra la funzione select */
-
- void demo_select(void)
- {
-
- register i;
- int temp_window, result;
-
- temp_window = Pcw_first_free();
-
- Pcw_define(temp_window, W_INP_SELECT_XWID, W_INP_SELECT_YWID, W_INP_SELECT_LINTYP,
- W_INP_SELECT_BORDATT, W_INP_SELECT_WNDATT, W_INP_SELECT_TTLATT, W_INP_SELECT_XLIM,
- W_INP_SELECT_YLIM, W_INP_SELECT_TITLE);
-
- i = 0;
- while (i < W_INP_SELECT_BODYLEN) {
- Pcw_sprintat(temp_window, 0, i, W_INP_SELECT_BODY[i], W_INP_SELECT_WNDATT);
- ++i;
- }
-
-
-
- Pcw_open_pos(temp_window, FADEHORIZ, ALIGN_CENTER, ALIGN_CENTER);
-
- result = 0;
-
- do {
-
- result = Pcw_select(10, 13, W_SELECT_YWID, result, MAX_SCELTE, scelte,
- W_SELECT_LINTYP, W_SELECT_BORDATT, W_SELECT_WNDATT, W_SELECT_EVATT,
- ISTANT);
-
- Pcw_sprintat(temp_window, 0, 8, "Hai scelto : ", W_INP_SELECT_WNDATT);
- Pcw_sprintat(temp_window, 0, 9, "Premi un tasto per continuare", W_INP_SELECT_WNDATT);
- Pcw_sprintat(temp_window, 13, 8, scelte[result], W_INP_SELECT_EVATT);
-
- WAIT_FOR_A_KEY;
-
- Pcw_printat(temp_window, 0, 8, ' ', W_INP_SELECT_WNDATT, W_INP_SELECT_XLIM);
- Pcw_printat(temp_window, 0, 9, ' ', W_INP_SELECT_WNDATT, W_INP_SELECT_XLIM);
-
-
- } while (result != MAX_SCELTE-1);
-
- Pcw_close(FADEHORIZ);
-
- Pcw_undef(temp_window);
-
- }
-
-
-
-
- /* Funzione demo_move: Mostra i possibili movimenti della finestra */
-
- void demo_move(void)
- {
-
- register i;
- int temp_window;
-
- temp_window = Pcw_first_free();
-
- Pcw_define(temp_window, W_WIN_MOVE_XWID, W_WIN_MOVE_YWID, W_GLOB_LINTYP,
- W_GLOB_BORDATT, W_GLOB_WNDATT, W_GLOB_TTLATT, W_WIN_MOVE_XWID,
- W_WIN_MOVE_YWID, W_WIN_MOVE_TITLE);
-
- i = 0;
- while (i < W_WIN_MOVE_BODYLEN) {
- Pcw_sprintat(temp_window, 0, i, W_WIN_MOVE_BODY[i], W_GLOB_WNDATT);
- ++i;
- }
-
-
- Pcw_sprintat(temp_window, 0, W_WIN_MOVE_BODYLEN + 1,
- "Premi un tasto per continuare", W_GLOB_WNDATT);
-
-
- Pcw_open_pos(temp_window, FADEHORIZ, ALIGN_CENTER, ALIGN_CENTER);
-
- WAIT_FOR_A_KEY;
-
- Pcw_printat(temp_window, 0, W_WIN_MOVE_BODYLEN + 1, ' ', W_GLOB_WNDATT, W_WIN_MOVE_XWID);
-
-
- /* Usa la finestra di help ma ristretta */
-
- Pcw_size(W_HELP_ID, RESTRICT, RIGHT, 30, ISTANT);
- Pcw_size(W_HELP_ID, RESTRICT, DOWN, 5, ISTANT);
-
-
- Pcw_open_pos(W_HELP_ID, ISTANT, 0, 0);
-
- Pcw_move_abs(ALIGN_END_VIEW, ALIGN_END_VIEW, ISTANT);
- Pcw_move_abs(ALIGN_BEGIN_VIEW, ALIGN_BEGIN_VIEW, ISTANT);
- Pcw_move_abs(ALIGN_END_VIEW, ALIGN_END_VIEW, FADEHORIZ);
- Pcw_move_abs(ALIGN_BEGIN_VIEW, ALIGN_BEGIN_VIEW, FADEHORIZ);
- Pcw_move_abs(ALIGN_END_VIEW, ALIGN_END_VIEW, FADEVERT);
- Pcw_move_abs(ALIGN_BEGIN_VIEW, ALIGN_BEGIN_VIEW, FADEVERT);
- Pcw_move_abs(ALIGN_END_VIEW, ALIGN_BEGIN_VIEW, FADEHORIZ);
- Pcw_move_abs(ALIGN_CENTER_VIEW, ALIGN_BEGIN_VIEW, FADEHORIZ);
- Pcw_move_abs(ALIGN_CENTER_VIEW, ALIGN_END_VIEW, FADEVERT);
- Pcw_move_abs(ALIGN_END_VIEW, ALIGN_BEGIN_VIEW, FADEVERT);
- Pcw_move_abs(ALIGN_END_VIEW, ALIGN_END_VIEW, FADEVERT);
-
-
- Pcw_sprintat(temp_window, 0, W_WIN_MOVE_BODYLEN + 1,
- "Premi un tasto per continuare", W_GLOB_WNDATT);
-
-
- WAIT_FOR_A_KEY;
-
-
-
- /* Rimette a posto la finestra */
-
- Pcw_set_view(W_HELP_ID, 0, 0);
- Pcw_move_abs(0, 0, ISTANT);
- Pcw_close(ISTANT);
- Pcw_size(W_HELP_ID, ENLARGE, RIGHT, 30, ISTANT);
- Pcw_size(W_HELP_ID, ENLARGE, DOWN, 5, ISTANT);
-
- Pcw_close(FADEHORIZ);
-
- Pcw_undef(temp_window);
-
- }
-
-
-
-
-
- /* Funzione demo_scroll: Mostra lo scrolling nella window */
-
- void demo_scroll(void)
- {
-
- register i;
- int temp_window;
-
- temp_window = Pcw_first_free();
-
- Pcw_define(temp_window, W_WIN_SCROLL_XWID, W_WIN_SCROLL_YWID, W_GLOB_LINTYP,
- W_GLOB_BORDATT, W_GLOB_WNDATT, W_GLOB_TTLATT, W_WIN_SCROLL_XWID,
- W_WIN_SCROLL_YWID, W_WIN_SCROLL_TITLE);
-
- i = 0;
- while (i < W_WIN_SCROLL_BODYLEN) {
- Pcw_sprintat(temp_window, 0, i, W_WIN_SCROLL_BODY[i], W_GLOB_WNDATT);
- ++i;
- }
-
-
- Pcw_sprintat(temp_window, 0, W_WIN_SCROLL_BODYLEN + 1,
- "Premi un tasto per continuare", W_GLOB_WNDATT);
-
-
- Pcw_open_pos(temp_window, FADEHORIZ, ALIGN_CENTER, ALIGN_CENTER);
-
- WAIT_FOR_A_KEY;
-
- Pcw_printat(temp_window, 0, W_WIN_SCROLL_BODYLEN + 1, ' ', W_GLOB_WNDATT, W_WIN_SCROLL_XWID);
-
-
- /* Usa la finestra di help ma ristretta */
-
- Pcw_size(W_HELP_ID, RESTRICT, RIGHT, 30, ISTANT);
- Pcw_size(W_HELP_ID, RESTRICT, DOWN, 5, ISTANT);
-
-
- Pcw_open_pos(W_HELP_ID, ISTANT, ALIGN_CENTER_VIEW, ALIGN_CENTER_VIEW);
-
- Pcw_scroll(W_HELP_ID, RIGHT, 10, FADE);
- Pcw_scroll(W_HELP_ID, LEFT, 10, FADE);
- Pcw_scroll(W_HELP_ID, DOWN, 5, FADE);
- Pcw_scroll(W_HELP_ID, UP, 5, FADE);
- Pcw_scroll(W_HELP_ID, RIGHT, 10, FADE);
- Pcw_scroll(W_HELP_ID, LEFT, 10, FADE);
- Pcw_scroll(W_HELP_ID, DOWN, 5, FADE);
- Pcw_scroll(W_HELP_ID, UP, 5, FADE);
-
-
- Pcw_sprintat(temp_window, 0, W_WIN_SCROLL_BODYLEN + 1,
- "Premi un tasto per continuare", W_GLOB_WNDATT);
-
-
- WAIT_FOR_A_KEY;
-
-
-
-
- /* Rimette a posto la finestra */
-
- Pcw_set_view(W_HELP_ID, 0, 0);
- Pcw_move_abs(0, 0, ISTANT);
- Pcw_close(ISTANT);
- Pcw_size(W_HELP_ID, ENLARGE, RIGHT, 30, ISTANT);
- Pcw_size(W_HELP_ID, ENLARGE, DOWN, 5, ISTANT);
-
- Pcw_close(FADEHORIZ);
-
- Pcw_undef(temp_window);
-
- }
-
-
-
-
- /* Funzione demo_view: Mostra effetti di viewing */
-
- void demo_view(void)
- {
-
- register i;
- int temp_window;
-
- temp_window = Pcw_first_free();
-
- Pcw_define(temp_window, W_WIN_VIEW_XWID, W_WIN_VIEW_YWID, W_GLOB_LINTYP,
- W_GLOB_BORDATT, W_GLOB_WNDATT, W_GLOB_TTLATT, W_WIN_VIEW_XWID,
- W_WIN_VIEW_YWID, W_WIN_VIEW_TITLE);
-
- i = 0;
- while (i < W_WIN_VIEW_BODYLEN) {
- Pcw_sprintat(temp_window, 0, i, W_WIN_VIEW_BODY[i], W_GLOB_WNDATT);
- ++i;
- }
-
-
- Pcw_sprintat(temp_window, 0, W_WIN_VIEW_BODYLEN + 1,
- "Premi un tasto per continuare", W_GLOB_WNDATT);
-
-
- Pcw_open_pos(temp_window, FADEHORIZ, ALIGN_CENTER, ALIGN_CENTER);
-
- WAIT_FOR_A_KEY;
-
- Pcw_printat(temp_window, 0, W_WIN_VIEW_BODYLEN + 1, ' ', W_GLOB_WNDATT, W_WIN_VIEW_XWID);
-
-
- /* Usa la finestra di help ma ristretta */
-
- Pcw_size(W_HELP_ID, RESTRICT, RIGHT, 30, ISTANT);
- Pcw_size(W_HELP_ID, RESTRICT, DOWN, 5, ISTANT);
-
-
- Pcw_open_pos(W_HELP_ID, ISTANT, ALIGN_CENTER_VIEW, ALIGN_CENTER_VIEW);
-
- Pcw_set_view(W_HELP_ID, 10, 4);
-
- WAIT_FOR_A_KEY;
-
- Pcw_set_view(W_HELP_ID, 10, 0);
-
- WAIT_FOR_A_KEY;
-
- Pcw_set_view(W_HELP_ID, 0, 4);
-
- WAIT_FOR_A_KEY;
-
- Pcw_sprintat(temp_window, 0, W_WIN_VIEW_BODYLEN + 1,
- "Premi un tasto per continuare", W_GLOB_WNDATT);
-
-
- WAIT_FOR_A_KEY;
-
-
-
-
- /* Rimette a posto la finestra */
-
- Pcw_set_view(W_HELP_ID, 0, 0);
- Pcw_move_abs(0, 0, ISTANT);
- Pcw_close(ISTANT);
-
- Pcw_size(W_HELP_ID, ENLARGE, RIGHT, 30, ISTANT);
- Pcw_size(W_HELP_ID, ENLARGE, DOWN, 5, ISTANT);
-
- Pcw_close(FADEHORIZ);
- Pcw_undef(temp_window);
-
-
- }
-
-
-
-
-
-
- /* Funzione demo_size: Mostra effetti di sizeing */
-
- void demo_size(void)
- {
-
- register i;
- int temp_window;
-
- temp_window = Pcw_first_free();
-
- Pcw_define(temp_window, W_WIN_SIZE_XWID, W_WIN_SIZE_YWID, W_GLOB_LINTYP,
- W_GLOB_BORDATT, W_GLOB_WNDATT, W_GLOB_TTLATT, W_WIN_SIZE_XWID,
- W_WIN_SIZE_YWID, W_WIN_SIZE_TITLE);
-
- i = 0;
- while (i < W_WIN_SIZE_BODYLEN) {
- Pcw_sprintat(temp_window, 0, i, W_WIN_SIZE_BODY[i], W_GLOB_WNDATT);
- ++i;
- }
-
-
- Pcw_sprintat(temp_window, 0, W_WIN_SIZE_BODYLEN + 1,
- "Premi un tasto per continuare", W_GLOB_WNDATT);
-
-
- Pcw_open_pos(temp_window, FADEHORIZ, ALIGN_CENTER, ALIGN_CENTER);
-
- WAIT_FOR_A_KEY;
-
- Pcw_printat(temp_window, 0, W_WIN_SIZE_BODYLEN + 1, ' ', W_GLOB_WNDATT, W_WIN_SIZE_XWID);
-
-
-
- Pcw_open_pos(W_HELP_ID, ISTANT, ALIGN_CENTER_VIEW, ALIGN_CENTER_VIEW);
-
- Pcw_size(W_HELP_ID, RESTRICT, RIGHT, 30, FADE);
- Pcw_size(W_HELP_ID, ENLARGE, RIGHT, 30, FADE);
-
- Pcw_size(W_HELP_ID, RESTRICT, DOWN, 5, FADE);
- Pcw_size(W_HELP_ID, ENLARGE, DOWN, 5, FADE);
-
- Pcw_size(W_HELP_ID, RESTRICT, LEFT, 30, FADE);
- Pcw_size(W_HELP_ID, ENLARGE, LEFT, 30, FADE);
-
- Pcw_size(W_HELP_ID, RESTRICT, UP, 5, FADE);
- Pcw_size(W_HELP_ID, ENLARGE, UP, 5, FADE);
-
- Pcw_size(W_HELP_ID, RESTRICT, HORIZ, 20, FADE);
- Pcw_size(W_HELP_ID, ENLARGE, HORIZ, 20, FADE);
-
- Pcw_size(W_HELP_ID, RESTRICT, VERT, 5, FADE);
- Pcw_size(W_HELP_ID, ENLARGE, VERT, 5, FADE);
-
- Pcw_size(W_HELP_ID, RESTRICT, BOTH, 5, FADE);
- Pcw_size(W_HELP_ID, ENLARGE, BOTH, 5, FADE);
-
-
-
- Pcw_sprintat(temp_window, 0, W_WIN_SIZE_BODYLEN + 1,
- "Premi un tasto per continuare", W_GLOB_WNDATT);
-
-
- WAIT_FOR_A_KEY;
-
-
- Pcw_close(ISTANT);
-
-
- Pcw_close(FADEHORIZ);
-
- Pcw_undef(temp_window);
-
- }
-
-
-
-
-
-
-
-
-
-
-
- /* Funzione show_info: Mostra informazioni generiche */
-
- void show_info(xwid, ywid, title, text)
- unsigned int xwid; /* Dimensione lungo X della window */
- unsigned int ywid; /* Dimensione lungo Y della window */
- char *title; /* Titolo della window */
- char **text; /* Testo da visualizzare */
- {
-
- register i;
- int temp_window;
-
- temp_window = Pcw_first_free();
-
- Pcw_define(temp_window, xwid, ywid, W_GLOB_LINTYP, W_GLOB_BORDATT,
- W_GLOB_WNDATT, W_GLOB_TTLATT, xwid, ywid, title);
-
- i = 0;
- while (i < ywid) {
- Pcw_sprintat(temp_window, 0, i, text[i], W_GLOB_WNDATT);
- ++i;
- }
-
-
-
- Pcw_open_pos(temp_window, ISTANT, ALIGN_CENTER, ALIGN_CENTER);
-
- WAIT_FOR_A_KEY;
-
- Pcw_close(ISTANT);
-
- Pcw_undef(temp_window);
-
- }
-