home *** CD-ROM | disk | FTP | other *** search
- /* blockinput.e (from p 207 of Libraries handbook, modified for E by
- * Trey Van Riper [jvanriper@uncavx.unca.edu])
- */
-
- /* blockinput.e -- program to demonstrate how to block the input from a
- * window using a minimal requester, and how to put up a busy pointer.
- */
-
- OPT OSVERSION=37
-
- MODULE 'exec/types','intuition/intuition','exec/ports','exec/memory',
- 'utility/tagitem'
-
- /*
- * As far as I know, E doesn't let you put data directly in the
- * chip RAM, so you have to CopyMem it from Fastram. So....
- */
-
- DEF chippointer
-
- /*
- * beginWait()
- *
- * Clear the requester with InitRequester. This makes a requester of
- * width =0, height = 0, left = 0, top = 0; in fact, everything is zero.
- * This requester will simply block input to the window until
- * EndRequest is called.
- *
- * The pointer is set to a reasonable 4-color busy pointer, with proper offsets.
- */
-
- PROC beginWait(win, waitRequest)
-
- InitRequester(waitRequest)
- IF Request(waitRequest, win)
- SetPointer(win,chippointer, 16, 16, -6, 0)
- SetWindowTitles(win,'Busy - Input Blocked', Not(0))
- RETURN TRUE
- ELSE
- RETURN FALSE
- ENDIF
-
- ENDPROC
-
- /*
- * endWait()
- *
- * Routine to reset the pointer to the system default, and remove the
- * requester installed with beginWait().
- */
-
- PROC endWait(win, waitRequest)
-
- ClearPointer(win)
- EndRequest(waitRequest, win)
- SetWindowTitles(win,'Not Busy', Not(0))
-
-
- ENDPROC
-
- /*
- * processIDCMP()
- *
- * Wait for the user to close the window.
- */
-
- PROC processIDCMP (wintmp)
-
- DEF done, msg:PTR TO intuimessage, class, myreq:requester, tick_count,
- temp:PTR TO mp,win:PTR TO window
-
- done:=FALSE
- win:=wintmp
- IF beginWait(win, myreq)
- /*
- * Insert code here for a window to act as the requester.
- */
-
- /* We'll count down INTUITICKS, which come about ten times
- * a second. We'll keep the busy state for about three seconds.
- */
- tick_count := 30
- ENDIF
- temp := win.userport
- WHILE Not(done)
- Wait(Shl(1,temp.sigbit))
- WHILE NIL <> (msg := GetMsg(win.userport))
- class := msg.class
- ReplyMsg(msg)
- SELECT class
- CASE IDCMP_CLOSEWINDOW
- done := TRUE
- CASE IDCMP_INTUITICKS
- IF tick_count>0
- DEC tick_count
- IF tick_count = 0 THEN endWait(win,myreq)
- ENDIF
- ENDSELECT
- ENDWHILE
- ENDWHILE
- ENDPROC
-
- PROC main()
- DEF win:PTR TO window,waitpointer
-
- waitpointer:=[$0000, $0000,
-
- $0400, $07C0,
- $0000, $07C0,
- $0100, $0380,
- $0000, $07E0,
- $07C0, $1FF8,
- $1FF0, $3FEC,
- $3FF8, $7FDE,
- $3FF8, $7FBE,
- $7FFC, $FF7F,
- $7EFC, $FFFF,
- $7FFC, $FFFF,
- $3FF8, $7FFE,
- $3FF8, $7FFE,
- $1FF0, $3FFC,
- $07C0, $1FF8,
- $0000, $07E0,
-
- $0000, $0000]:INT
-
- IF chippointer:=AllocVec(72,MEMF_CHIP)
- CopyMemQuick(waitpointer,chippointer,72)
- ENDIF
-
- IF win:=OpenWindowTagList(NIL,
- [WA_IDCMP,IDCMP_CLOSEWINDOW OR IDCMP_INTUITICKS,
- WA_ACTIVATE, TRUE,
- WA_WIDTH, 320,
- WA_HEIGHT, 100,
- WA_CLOSEGADGET, TRUE,
- WA_DRAGBAR, TRUE,
- WA_DEPTHGADGET, TRUE,
- WA_SIZEGADGET, TRUE,
- WA_MAXWIDTH, Not(0),
- WA_MAXHEIGHT, Not(0)])
- processIDCMP(win)
- CloseWindow(win)
- ENDIF
-
- IF chippointer THEN FreeVec(chippointer)
-
- ENDPROC
-