All pastes #992511 Raw Edit

amiga example code

public c v1 · immutable
#992511 ·published 2008-04-21 21:31 UTC
rendered paste body
/* This example shows a simple Intuition program that works with * Release 2 (V36) and later versions of the Amiga operating system. *//* easyintuition37.c -- Simple Intuition program for V37   *//* (Release 2) and later versions of the operating system. *//* Compiled with Lattice C v5.04: lc -L easyintuition37.c  */#include <exec/types.h>             /* The Amiga data types file.         */#include <intuition/intuition.h>    /* Intuition data strucutres, etc.    */#include <graphics/displayinfo.h>   /* Release 2 Amiga display mode ID's  */#include <libraries/dos.h>          /* Official return codes defined here */#include <clib/exec_protos.h>       /* Exec function prototypes           */#include <clib/intuition_protos.h>  /* Intuition function prototypes      *//* Force use of new variable names to help prevent errors  */#define INTUI_V36_NAMES_ONLY#ifdef LATTICE                      /* Disable Ctrl-C handling in SAS/C   */int CXBRK(void)  {return(0);}void chkabort(void) {return;}#endif/* Use lowest non-obsolete version that supplies the functions needed. */#define INTUITION_REV 37/* Declare the prototypes of our own functions.  Prototypes for system *//* functions are declared in the header files in the clib directory.   */VOID cleanExit( struct Screen *, struct Window *, LONG );BOOL handleIDCMP( struct Window *);struct Library *IntuitionBase = NULL;/* Position and sizes for our window */#define WIN_LEFTEDGE   20#define WIN_TOPEDGE    20#define WIN_WIDTH     400#define WIN_MINWIDTH   80#define WIN_HEIGHT    150#define WIN_MINHEIGHT  20VOID main(int argc, char *argv[]){    /* Declare variables here */    ULONG signalmask, winsignal, signals;    BOOL done = FALSE;    UWORD pens[]={~0};    struct Screen *screen1 = NULL;    struct Window *window1 = NULL;    /* Open the Intuition Library */    IntuitionBase = OpenLibrary( "intuition.library",INTUITION_REV );    if (IntuitionBase == NULL)        cleanExit(screen1, window1, RETURN_WARN);    /* Open any other required libraries and make */    /* any assignments that were postponed above  */    /* Open the screen */    screen1 = OpenScreenTags(NULL,                             SA_Pens,  (ULONG)pens,                             SA_DisplayID, HIRES_KEY,                             SA_Depth, 2,                             SA_Title, (ULONG)"Our Screen",                             TAG_DONE);    if (screen1 == NULL)        cleanExit(screen1, window1, RETURN_WARN);    /* ... and open the window */    window1 = OpenWindowTags(NULL,                             /* Specify window dimensions and limits */                             WA_Left,         WIN_LEFTEDGE,                             WA_Top,          WIN_TOPEDGE,                             WA_Width,        WIN_WIDTH,                             WA_Height,       WIN_HEIGHT,                             WA_MinWidth,     WIN_MINWIDTH,                             WA_MinHeight,    WIN_MINHEIGHT,                             WA_MaxWidth,     ~0,                             WA_MaxHeight,    ~0,                             /* Specify the system gadgets we want */                             WA_CloseGadget,  TRUE,                             WA_SizeGadget,   TRUE,                             WA_DepthGadget,  TRUE,                             WA_DragBar,      TRUE,                             /* Specify other attributes           */                             WA_Activate,     TRUE,                             WA_NoCareRefresh,TRUE,                             /* Specify the events we want to know about */                             WA_IDCMP,        IDCMP_CLOSEWINDOW,                             /* Attach the window to the open screen ...*/                             WA_CustomScreen, screen1,                             WA_Title,        "EasyWindow",                             WA_ScreenTitle,  "Our Screen - EasyWindow is Active",                             TAG_DONE);    if (window1 == NULL)        cleanExit(screen1, window1, RETURN_WARN);    /* Set up the signals for the events we want to hear about ...   */    winsignal = 1L << window1->UserPort->mp_SigBit;  /* window IDCMP */    signalmask = winsignal;   /* we are only waiting on IDCMP events */    /* Here's the main input event loop where we wait for events.    */    /* We have asked Intuition to send us CLOSEWINDOW IDCMP events   */    /* Exec will wake us if any event we are waiting for occurs.     */    while( !done )    {        signals = Wait(signalmask);        /* An event occurred - now act on the signal(s) we received.*/        /* We were only waiting on one signal (winsignal) in our    */        /* signalmask, so we actually know we received winsignal.   */        if(signals & winsignal)            done = handleIDCMP(window1);    /* done if close gadget */    }    cleanExit(screen1, window1, RETURN_OK); /* Exit the program     */}BOOL handleIDCMP( struct Window *win ){    BOOL done = FALSE;    struct IntuiMessage *message = NULL;    ULONG class;    /* Examine pending messages */    while( message = (struct IntuiMessage *)GetMsg(win->UserPort) )    {        class = message->Class;  /* get all data we need from message */        /* When we're through with a message, reply */        ReplyMsg( (struct Message *)message);        /* See what events occurred */        switch( class )        {            case IDCMP_CLOSEWINDOW:                done = TRUE;                break;            default:                break;        }    }    return(done);}VOID cleanExit( struct Screen *scrn, struct Window *wind, LONG returnValue ){    /* Close things in the reverse order of opening */    if (wind) CloseWindow( wind );      /* Close window if opened */    if (scrn) CloseScreen( scrn );      /* Close screen if opened */    /* Close the library, and then exit */    if (IntuitionBase) CloseLibrary( IntuitionBase );    exit(returnValue);}