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

  1. -> publicscreen.e - open a screen with the pens from a public screen
  2.  
  3. MODULE 'intuition/screens'
  4.  
  5. ENUM ERR_NONE, ERR_SCRN, ERR_LOCKPUB, ERR_GETDRAW
  6.  
  7. RAISE ERR_SCRN    IF OpenScreenTagList()=NIL,
  8.       ERR_LOCKPUB IF LockPubScreen()=NIL,
  9.       ERR_GETDRAW IF GetScreenDrawInfo()=NIL
  10.  
  11. PROC main()
  12.   IF KickVersion(37)
  13.     -> Check the version.  Release 2 is required for public screen functions
  14.     -> E-Note: E automatically opens the Intuition library
  15.     usePubScreenPens()
  16.   ENDIF
  17. ENDPROC
  18.  
  19. -> Open a screen that uses the pens of an existing public screen (the Workbench
  20. -> screen in this case).
  21. PROC usePubScreenPens() HANDLE
  22.   DEF my_screen=NIL:PTR TO screen, pubScreenName,
  23.       pub_screen=NIL:PTR TO screen, screen_drawinfo=NIL:PTR TO drawinfo
  24.   pubScreenName:='Workbench'
  25.  
  26.   -> Get a lock on the Workbench screen
  27.   -> E-Note: automatically error-checked (automatic exception)
  28.   pub_screen:=LockPubScreen(pubScreenName)
  29.  
  30.   -> Get the DrawInfo structure from the locked screen
  31.   -> E-Note: automatically error-checked (automatic exception)
  32.   screen_drawinfo:=GetScreenDrawInfo(pub_screen)
  33.  
  34.   -> The pens are copied in the OpenScreenTagList() call, so we can simply use
  35.   -> a pointer to the pens in the tag list.
  36.   ->
  37.   -> This works better if the depth and colors of the new screen matches that
  38.   -> of the public screen.  Here we are forcing the Workbench screen pens on a
  39.   -> monochrome screen (which may not be a good idea).  You could add the tag:
  40.   ->      (SA_DEPTH, screen_drawinfo.depth)
  41.   -> E-Note: automatically error-checked (automatic exception)
  42.   my_screen:=OpenScreenTagList(NIL,
  43.                               [SA_PENS, screen_drawinfo.pens,
  44.                               -> E-Note: try uncommenting next line (see above)
  45.                               -> SA_DEPTH, screen_drawinfo.depth,
  46.                                NIL])
  47.  
  48.   -> We no longer need to hold the lock on the public screen or a copy of its
  49.   -> DrawInfo structure as we now have our own screen.  Release the screen.
  50.   FreeScreenDrawInfo(pub_screen, screen_drawinfo)
  51.   screen_drawinfo:=NIL
  52.   UnlockPubScreen(pubScreenName, pub_screen)
  53.   pub_screen:=NIL
  54.  
  55.   Delay(90)  -> Should be the rest of the program
  56.  
  57.   -> E-Note: exit and clean up via handler
  58. EXCEPT DO
  59.   -> The first two are freed in the main code if OpenScreenTagList() does not
  60.   -> fail.  If something goes wrong, free them here.
  61.   IF screen_drawinfo THEN FreeScreenDrawInfo(pub_screen, screen_drawinfo)
  62.   IF pub_screen THEN UnlockPubScreen(pubScreenName, pub_screen)
  63.   IF my_screen THEN CloseScreen(my_screen)
  64.   -> E-Note: we can print a minimal error message
  65.   SELECT exception
  66.   CASE ERR_SCRN;    WriteF('Error: Failed to open custom screen\n')
  67.   CASE ERR_LOCKPUB; WriteF('Error: Failed to locked public screen\n')
  68.   CASE ERR_GETDRAW; WriteF('Error: Failed to get DrawInfo of screen\n')
  69.   ENDSELECT
  70. ENDPROC
  71.