home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / amigae / e_v3.2a / rkrmsrc / intuition / intuition_gui / easyintuition.e next >
Text File  |  1977-12-31  |  4KB  |  111 lines

  1. -> easyintuition.e  Simple backward-compatible V37 Intuition example
  2. ->
  3. -> This example uses extended structures with the pre-V37 OpenScreen() and
  4. -> OpenWindow() functions to compatibly open an Intuition display.  Enhanced
  5. -> V37 options specified via tags are ignored on 1.3 systems.
  6.  
  7. -> E-Note: you need to be more specific about modules than C does about includes
  8. MODULE 'intuition/intuition',  -> Intuition and window data structures and tags
  9.        'intuition/screens',    -> Screen data structures and tags
  10.        'graphics/view',        -> Screen resolutions
  11.        'dos/dos'               -> Official return codes defined here
  12.  
  13. -> Position and sizes for our window
  14. CONST WIN_LEFTEDGE=20, WIN_TOPEDGE=20,
  15.       WIN_WIDTH=400,   WIN_MINWIDTH=80,
  16.       WIN_HEIGHT=150,  WIN_MINHEIGHT=20
  17.  
  18. -> Exception values
  19. -> E-Note: exceptions are a much better way of handling errors
  20. ENUM ERR_NONE, ERR_SCRN, ERR_WIN
  21.  
  22. -> Automatically raise exceptions
  23. -> E-Note: these take care of a lot of error cases
  24. RAISE ERR_SCRN IF OpenS()=NIL,
  25.       ERR_WIN  IF OpenW()=NIL
  26.  
  27. PROC main() HANDLE
  28.   -> Declare variables here
  29.   -> E-Note: the signals stuff is handled directly by WaitIMessage
  30.   DEF screen1=NIL:PTR TO screen, window1=NIL:PTR TO window
  31.  
  32.   -> E-Note: E automatically opens the Intuition library
  33.  
  34.   -> Open the screen
  35.   -> E-Note: automatically error-checked (automatic exception)
  36.   -> E-Note: simplified using OpenS
  37.   screen1:=OpenS(640,             -> Width (high-resolution)
  38.                  STDSCREENHEIGHT, -> Height (non-interlace)
  39.                  2,               -> Depth (4 colours will be available)
  40.                  V_HIRES,         -> The high-resolution display mode
  41.                  'Our Screen',    -> The screen title
  42.   -> We can specify that we want the V37-compatible 3D look when running under
  43.   -> V37 by adding an SA_PENS tag.
  44.                 [SA_PENS, [-1]:INT,  -> Tags for additional V37 features
  45.                  -> E-Note: these tags replace the missing OpenS parameters
  46.                  SA_DETAILPEN, 0,
  47.                  SA_BLOCKPEN,  1,
  48.                  NIL])
  49.  
  50.   -> E-Note: we attach the window to the open screen directly, below
  51.  
  52.   -> ... and open the window
  53.   -> E-Note: automatically error-checked (automatic exception)
  54.   window1:=OpenW(WIN_LEFTEDGE,
  55.                  WIN_TOPEDGE,
  56.                  WIN_WIDTH,
  57.                  WIN_HEIGHT,
  58.  
  59.                  -> This field specifies the events we want to get
  60.                  IDCMP_CLOSEWINDOW,
  61.  
  62.                  -> These flags specify system gadgets and other attributes
  63.                  WFLG_CLOSEGADGET OR WFLG_SMART_REFRESH OR WFLG_ACTIVATE OR
  64.                  WFLG_DRAGBAR OR WFLG_DEPTHGADGET OR WFLG_SIZEGADGET OR
  65.                  WFLG_NOCAREREFRESH,
  66.  
  67.                  'EasyWindow',  -> Window title
  68.                  screen1,       -> Attach to screen1...
  69.                  CUSTOMSCREEN,  -> ... a custom screen
  70.                  NIL,           -> Pointer to first gadget
  71.   -> Under V37, we'll get a special screen title when our window is active
  72.                  -> Tags for additional V37 features
  73.                 [WA_SCREENTITLE, 'Our Screen - EasyWindow is Active',
  74.                  -> E-Note: these tags replace the missing OpenW parameters
  75.                  WA_MINWIDTH,    WIN_MINWIDTH,
  76.                  WA_MINHEIGHT,   WIN_MINHEIGHT,
  77.                  WA_MAXWIDTH,    -1,
  78.                  WA_MAXHEIGHT,   -1,
  79.                  NIL])
  80.  
  81.   -> Here's the main input event loop
  82.   -> E-Note: the signals and stuff is handled by WaitIMessage
  83.   REPEAT
  84.   UNTIL handleIDCMP(window1)
  85.  
  86.   -> E-Note: exit and clean up via handler
  87. EXCEPT DO
  88.   IF window1 THEN CloseW(window1)
  89.   IF screen1 THEN CloseS(screen1)
  90.   -> E-Note: we can print a minimal error message
  91.   SELECT exception
  92.   CASE ERR_SCRN; WriteF('Error: Failed to open custom screen\n')
  93.   CASE ERR_WIN;  WriteF('Error: Failed to open window\n')
  94.   ENDSELECT
  95. -> E-Note: select return code according to exception
  96. ENDPROC IF exception THEN RETURN_WARN ELSE RETURN_OK
  97.  
  98. PROC handleIDCMP(win:PTR TO window)
  99.   DEF class, done=FALSE
  100.   -> E-Note: WaitIMessage replaces a lot of C code concerned with signals
  101.   class:=WaitIMessage(win)
  102.   -> E-Note: other parts of the message are available via MsgXXX() functions
  103.  
  104.   -> See what events occurred
  105.   SELECT class
  106.   CASE IDCMP_CLOSEWINDOW
  107.     done:=TRUE
  108.   ENDSELECT
  109. ENDPROC done
  110.  
  111.