; Copyright 1996 Acorn Computers Ltd ; ; Licensed under the Apache License, Version 2.0 (the "License"); ; you may not use this file except in compliance with the License. ; You may obtain a copy of the License at ; ; http://www.apache.org/licenses/LICENSE-2.0 ; ; Unless required by applicable law or agreed to in writing, software ; distributed under the License is distributed on an "AS IS" BASIS, ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ; See the License for the specific language governing permissions and ; limitations under the License. ; ; > Sources.Wimp01 ;;---------------------------------------------------------------------------- ;; Window Manager module ;; ;; ********************* ;; *** CHANGE LIST *** ;; ********************* ;; ;; 28-Jul-87 0.17 Change list added ;; 28-Jul-87 Wimp defines its own soft characters ;; KEY CODES -- New values returned (use *FX221,2 etc.) ;; 0.18 Wimp icons allow Shift-Arrowdebugsw etc. ;; 29-Jul-87 Wimp_CloseDown added ;; Wimp restores *FX 221 etc. status on exit ;; Introduce 'MySWI' macro ;; 0.18 Implement 'page up/down' in scroll bars ;; 30-Jul-87 0.19 Fiddle with OS_ChangeEnvironment (multi-tasking) ;; Put in bulk of multi-tasking code ;; 3-Aug-87 Put in conditional assembly so I can make Wimp 0.18 ;; Make Wimp mode-indipendant ;; 0.19 Fix quit handling so Wimp exits correctly ;; 4-Aug-87 0.19 Don't replace quit handler if it's me anyway ;; Fix bug in dragbox - reset dotdash if get_rectangle ;; 5-Aug-87 0.19 Release non-tasking version of Wimp 0.19 ;; 0.20 Make Wimp read size of screen window limits ;; 18-Aug-87 Re-initialise Wimp on soft-break ;; 19-Aug-87 0.21 Allow multiple sprite areas within a window ;; Implement new window flags for border bits ;; 20-Aug-87 Allow compatibility between old & new border flags ;; Fix bug in Create_Menu (menucaretwindow) ;; 21-Aug-87 Convert to use SWI XOS_Plot ;; 24-Aug-87 Invent new button type (writeable + notify) ;; Fix buglet in Open_Window (didn't use dx,dy) ;; 25-Aug-87 Fix mode 22 pointer and VDU 5 caret ;; 26-Aug-87 0.21a Fix bug: windows get bigger in mode 22! ;; 1-Sep-87 Fix bug: drag box with 'trespass' windows ;; Make double-click check distance moved by mouse ;; 3-Sep-87 0.22 Allow variable caret colour (bit set in 'height') ;; 14-Sep-87 1.00 Release Wimp 1.00 ;; 28-Sep-87 1.01 Fix bug: immoveable window disallowed all drags ;; 28-Sep-87 Fix bug: woggles wrong icon if menu arrow selected ;; 28-Sep-87 Fix bug: toggle icon not redrawn if window doesn't move ;; 28-Sep-87 Fix bug: if window moving, don't reset toggled state ;; 2-Oct-87 Make Wimp border size vary with pixel size ;; 22-Oct-87 Fix bug: task restarting should close menus ;; 29-Oct-87 1.21 Add SWI Wimp_ReportError ;; 30-Oct-87 Change Wimp_CloseDown so it doesn't take control away ;; 30-Oct-87 Fiddle about with error reporting in multi-tasking ;; 2-Nov-87 Implement Wimp_TaskHandle ;; 3-Nov-87 Remove Wimp_TaskHandle ;; 9-Nov-87 Fix bug: pagehoriz goes to wrong bhandle ;; 19-Nov-87 1.22 Make Wimp_SetExtent not reset the 'toggled' state ;; 25-Nov-87 1.30 Implement validation strings ;; 25-Nov-87 Fix bug: Wimp_GetPointerInfo returned 1 word too many ;; 26-Nov-87 Add SWI Wimp_GetWindowOutline ;; 2-Dec-87 Change Wimp_Initialise so task handle is in R1 on exit ;; 2-Dec-87 Wimp_Initialise: R0 on entry = latest known Wimp ;; 2-Dec-87 Fix bug: Wimp_CloseDown checked wrong task index ;; 2-Dec-87 Fix bug: Wimp_Poll deleted task incarnation number ;; 3-Dec-87 Sort out Wimp_CloseDown - turns pointer off etc. ;; 3-Dec-87 Change sprite icon plotting so fg colour is set up ;; 9-Dec-87 1.31 Fix bug: *pointer set bbox to 0,0,1280,1024 ;; 9-Dec-87 Change Wimp_Init: *Print .!Palette ;; initialise Wimp$Resources to adfs:% if not there ;; 31-Dec-87 1.32 Call ErrorV when Wimp_ReportError called ;; 10-Jan-88 1.33 Redefine only chars &80-&85, &88-&8B ;; 20-Jan-88 Implement persistent menus ;; 20-Jan-88 Implement scrollable icons (automatic) ;; 21-Jan-88 1.34 Implement SWI Wimp_PollIdle (R2 = target time) ;; 22-Jan-88 Implement SWI Wimp_PlotIcon (R1-->icon defn) ;; 25-Jan-88 Implement Wimp colour lookup table & assoc. SWIs ;; 25-Jan-88 Change Wimp_Init: *.!Palette ;; ** changed again - palette held in Wimp itself ;; ** can be overridden before Wimp_Init, using *WimpPalette ;; 26-Jan-88 Implement palette table lookup ;; 26-Jan-88 Implement Wimp_SetMode ;; 27-Jan-88 Fix bug in Wimp_CloseDown (closes all tasks) ;; 28-Jan-88 Implement ECFs for Wimp monochrome modes ;; 28-Jan-88 Implement Wimp_SetPalette and Wimp_ReadPalette ;; 29-Jan-88 Change tasking so that taskcount can get to 0 ;; (fixes bug: OS_Exit called without Wimp_CloseDown) ;; 29-Jan-88 Implement Wimp_SetColour ;; 1-Feb-88 Implement 'back window' for old-style Wimp_Init ;; 1-Feb-88 Extend window area to cover whole screen ;; 1-Feb-88 Make GetPointerInfo return handle -1 if backwindow ;; ** cancelled - now Ptr_Entering/Leaving is bodged instead ;; 2-Feb-88 Make OpenWindow remove dragbox first ;; 2-Feb-88 Make single-tasking progs get exclusive use of Wimp ;; 2-Feb-88 Single-tasking progs don't have mode/palette set up ;; 2-Feb-88 Remove Wimp's default UnusedSWI handler ;; 2-Feb-88 Allow window to have NO borders ;; (wf_newformat=1 and wf_iconbits = 0) ;; ** changed so that w_tfcol=255 forces that ;; 3-Feb-88 Fix bug in Wimp_Init : single task palette is 1:1 ;; 3-Feb-88 Check that 200 <= R0 <= 10000 on entry to Wimp_Init ;; 3-Feb-88 Do soft key expansion inside Wimp_ProcessKey ;; 8-Feb-88 Implement Wimp_SendMessage ;; 9-Feb-88 Ignore errors from soft key expansion ;; 9-Feb-88 Added WimpCantKill error message in Die routine ;; 9-Feb-88 Change message poll codes to 17..19 ;; 9-Feb-88 Implement Lose_Caret and Gain_Caret reason codes ;; 11-Feb-88 1.35 Change task data storage to use the RMA ;; 15-Feb-88 Implement common sprite area for Wimp programs ;; (*IconSprites, MergeSpriteFile and BaseOfSprites) ;; 16-Feb-88 Check that parent task is alive in Wimp_StartTask ;; 16-Feb-88 Implement Wimp_BlockCopy ;; 17-Feb-88 Allow window/areaCBptr=1 ==> use common sprite area ;; 18-Feb-88 Implement iconbar create/delete icon & auto-scrolling ;; 19-Feb-88 Change escape handling so CHR$(27) is used ;; 19-Feb-88 Implement *Desktop command & allow Wimp to be RMRun ;; 25-Feb-88 1.36 Change Wimp_CloseDown: no cls with old tasks ;; 25-Feb-88 Make Wimp SWIs preserve flags unless V set on exit ;; 25-Feb-88 Implement Wimp_SlotSize ;; 25-Feb-88 1.40 Implement Switcher! ;; 25-Feb-88 Change window flags: title fg=255 ==> no borders at all ;; 25-Feb-88 Make error box bigger ;; 25-Feb-88 Add WimpBadSubMenu error (no parent tree) ;; 1-Mar-88 Change palette initialisation so it's done at Init time ;; - also, *WimpPalette only affects table if no tasks ;; 2-Mar-88 Implement Wimp_ReadPixTrans ;; 2-Mar-88 Selectively disallow Wimp SWIs depending on context ;; - change 'MySWI' macro to allow this ;; Disallow non-owner access to windows in some cases ;; 2-Mar-88 Implement UpCall trapping (disc prompting) ;; 2-Mar-88 Use Wimp$Path for OpenTemplate (can't MergeSpriteFile) ;; - removed - modules use 'Wimp:' to get it ;; 2-Mar-88 Wimp$Path set up in init code to DeskFS:, ;; - removed - Desktop module is responsible ;; 2-Mar-88 Implement 'mode changed' message from Wimp ;; 2-Mar-88 Change scroll bar code to use MUL, and avoid overflow ;; 3-Mar-88 1.41 Change structure so handlers are swapped in pagetask ;; - crashes if handlers called while memory not there! ;; 3-Mar-88 Intercept ChangeEnvironmentV to check on handlers ;; - allows Wimp to replace 1st task's handlers ;; 3-Mar-88 Avoid ECFs when restoring the screen on CloseDown ;; 3-Mar-88 Make Wimp remember 'current mode' for restoring ;; 3-Mar-88 Disallow Wimp_Init if Quit handler is inserted ;; -eg Twin can't run another Wimp task if run from Wimp ;; 3-Mar-88 Allow Wimp_SetMode when no tasks running (just set var) ;; 3-Mar-88 Implement *configure wimpmode and *wimpmode ;; 4-Mar-88 Claim/release vectors properly on soft reset ;; 4-Mar-88 Remove *WimpMode command (only *Configure WimpMode) ;; 4-Mar-88 Fix bug: MergeSpriteFile doesn't check 'not found' ;; 4-Mar-88 Move mode variable checking to Service call handler ;; 5-Mar-88 1.42 EOR CMOS mode with 12 so that is he default ;; 5-Mar-88 Issue Service_StartedWimp when *desktop finished ;; 7-Mar-88 Fix bug: exit to dead parent ;; 7-Mar-88 Put identifying message into error box ;; 7-Mar-88 Fix bug: Wimp_ProcessKey errors if no input focus ;; 7-Mar-88 Disallow non-graphic modes in Wimp_SetMode ;; 8-Mar-88 Put Wimp *commands in alphabetical order ;; 8-Mar-88 Fix caret so it's never outside the icon bounds ;; 8-Mar-88 1.43 Change window memory allocation to use RMA ;; 9-Mar-88 Put w_relhandle field into window definition ;; 9-Mar-88 Kill message queue when last task dies ;; 9-Mar-88 Allow user-supplied subroutine in Wimp_DragBox ;; 9-Mar-88 Fix caret: only subtract 1 from top (not dy) ;; - now compatible with old Wimps if icon big enough ;; 10-Mar-88 If waitdrag pending, drag immediately if icon changes ;; 10-Mar-88 Fix caret: always put 'knobs' on the top ;; 11-Mar-88 Add TaskInit/CloseDown messages from Wimp ;; 11-Mar-88 Move error messages so ADR works (use XError in macros) ;; 12-Mar-88 Implement WimpFlags and continuous dragging/scrolling ;; 14-Mar-88 Fix bug: deletemessagequeue frees blocks incorrectly ;; 14-Mar-88 Fix bug: use int_processkey to avoid re-entrancy ;; 15-Mar-88 Change Wimp_SlotSize so R0<0 ==> don't change value ;; 16-Mar-88 1.44 Set parentquithandler = address of code (not wsptr) ;; set it to 0 when starting a task (insist on new app.) ;; 17-Mar-88 Use OS_ReadDefaultHandler to set up ALL handlers ;; - removed for Arthur 1.37 since it doesn't work! ;; 17-Mar-88 Change text width/height using scaled characters ;; 17-Mar-88 Use Service_MemoryMoved to reshuffle page tables ;; Wimp claims CAOpointer on Wimp_Initialise ;; ---- version 2.04 - only done in OS_ChangeDynamicArea ;; 17-Mar-88 Change *Pointer to check for HiResMono properly ;; 17-Mar-88 Use 'tasknumber' to make task verion number global ;; - avoids problem: OS_GenerateError/Exit ;; means that a task doesn't know if it's been aborted ;; subsequent *RMkill kills the OLD task version no. ;; 17-Mar-88 Fix bug: wimpquithandler check should look at R1 ;; 18-Mar-88 Check for applicationspacesize>memorylimit in findpgs ;; 18-Mar-88 Implement ChangeDynamicArea checking ;; 18-Mar-88 Change Die code so it doesn't call initptrs again ;; 21-Mar-88 Implement Wimp_ClaimFreeMemory ;; 22-Mar-88 1.45 Increase max number of windows to 64 ;; 22-Mar-88 1.46 Fix bug: Wimp_SendMessage should ignore task version ;; Always try to send the message (unless illegal handle) ;; The message is only ignored later ;; 23-Mar-88 Implement OS_ChangeDynamicArea call to move memory ;; between application space and the free pool ;; - changed to be in Wimp_SlotSize ;; 23-Mar-88 Implement *WimpRun command ;; 23-Mar-88 Give source of *Desktop stuff to Tim & delete from Wimp ;; 24-Mar-88 Change Wimp_SlotSize so current slot can be altered ;; 24-Mar-88 Don't set Wimp$Path in Init code ;; 24-Mar-88 Change order of sethandlers/findpages ;; - what if BASIC was running when *desktop invoked? ;; 24-Mar-88 Load error/iconbar/back window from Wimp:Templates.Wimp ;; - do it when the first task initialises ;; - before setting up the handlers! ;; 25-Mar-88 Use pixtrans for 1- and 2-bpp sprite icons ;; 25-Mar-88 Fix bug in SendMessage (ack) - msb_ used instead of ms_ ;; 25-Mar-88 Make Wimp load 'Wimp:Sprites.Wimp' on init (1st time) ;; 25-Mar-88 1.47 Change addtoiconbar so it copies the icon onto stack ;; 25-Mar-88 Fix bug: error box title wasn't indirected ;; 25-Mar-88 1.48 Fix bug: message 19 kills all message types now ;; 26-Mar-88 Fix bug: click in icon finds wrong text posn ;; 26-Mar-88 Change gaps at side of scroll bars ;; 28-Mar-88 Improve Wimp ecf patterns (for grey-scales) ;; 28-Mar-88 Make SendMessage to window -1 just lose the message ;; 28-Mar-88 1.49 Make ReportError switch output to screen ;; 28-Mar-88 Implement w_minxy word in window header ;; 29-Mar-88 Fix bug: 'addsub' rounds coords to pixel boundaries ;; 29-Mar-88 Fix bug: Wimp_ReportError should set text size ;; 29-Mar-88 1.50 Fix bug: ExitWimp set redrawhandle=nullptr if V set ;; 29-Mar-88 Implement call to set ecf origin in redraw/update ;; 30-Mar-88 1.51 Implement wf_grabkeys and Wimp_ProcessKey hierarchy ;; 30-Mar-88 Fix bug: intrect must round coords to pixels ;; 31-Mar-88 1.52 Start tasks up with escape enabled, then disable it ;; 31-Mar-88 Change pointerwindow so it only subtracts 1 from x1,y1 ;; 31-Mar-88 Change graphicswindow similarly ;; 31-Mar-88 Force old-style tasks to have w_minx/y = 0 ;; 3-Apr-88 Make text gap 6 OS units (not 3*dx) ;; 4-Apr-88 Implement *WimpSlot command (leave *WimpRun in for now) ;; 4-Apr-88 Put *Pointer command into Wimp_ReportError ;; 4-Apr-88 Exit Wimp_ReportError if pressed ;; 7-Apr-88 Make Wimp_ReportError invert the relevant icon ;; 7-Apr-88 Change max no of tasks to 32 ;; 7-Apr-88 1.53 Allow icons to have text AND sprite bits set ;; 8-Apr-88 Implement if_halfsize (half-size sprites) ;; 9-Apr-88 Make Wimp_SendMessage use R2,R3 and return R2 ;; 10-Apr-88 Issue Service_MouseTrap in menu selection code ;; - also in drag activation ;; 10-Apr-88 Drag window: only issue Open_Window if different ;; 11-Apr-88 Change iconbar window handle on exit to -2 ;; 11-Apr-88 1.54 Make GetPointerInfo return -2 for iconbar window ;; 11-Apr-88 1.55 Remove 'Access to window denied' for IJack (netmon) ;; 12-Apr-88 1.56 Implement Wimp_CommandWindow (R0 --> title) ;; 13-Apr-88 Remove *WimpRun command ;; 13-Apr-88 Make Wimp_ReportError acknowledge escape ;; 13-Apr-88 Implement *WimpTask command for Desktop auto-boot ;; 13-Apr-88 Disallow toggled bit when creating a window ;; 13-Apr-88 Fix bug: Wimp_SetColour to pass on ecf action ;; 13-Apr-88 Use Wimp_CommandWindow when Wimp_StartTask starts ;; 13-Apr-88 Make Wimp more re-entrant (stack polltaskhandle etc.) ;; 13-Apr-88 When window/icon killed, delete messages if nec. ;; 13-Apr-88 1.57 Change back/quit box so click without release used ;; 14-Apr-88 Debounce Wimp_ReportError clicks better ;; 14-Apr-88 1.58 Grab pages from current slot on OS_ChangeDynamicArea ;; 14-Apr-88 Singletask errors to ReportError unless chars printed ;; 14-Apr-88 ReportError takes note of commandflag setting ;; 14-Apr-88 Implement Wimp_TextColour ;; 14-Apr-88 Use Wimp_TextColour to set command window colours ;; 14-Apr-88 Use Wimp_TextColour to set colours on exit from Wimp ;; 14-Apr-88 Allow ReadPalette etc. outside Wimp_Init ;; 15-Apr-88 Fix bug: recalcpalette AFTER taskcount increased ;; 15-Apr-88 Change Wimp Template/SendMessage so ROM is not written ;; 15-Apr-88 -------- Arthur 1.60 ----------- ;; 18-Apr-88 1.61 Fix bug: drag returned for deleted window ==> exception ;; 19-Apr-88 Fix bug: checkversion AFTER error checks (singletaskh) ;; 19-Apr-88 Fix bug: reset pending flags if window deleted ;; 19-Apr-88 Treat Wimp_Poll as Wimp_PollIdle (0 timeout) ;; 21-Apr-88 Fix bug: *RMTidy causes Wimp not to re-initialise w/s ;; 21-Apr-88 Change CommandWindow so VDU 15 rather than 14 ;; 22-Apr-88 1.62 Change Wimp_SlotSize so Message_SlotSize is issued ;; 22-Apr-88 1.63 Make ASCII 8 equivalent to 127 in writeable icons ;; 25-Apr-88 Change *Pointer and *IconSprites help text ;; 27-Apr-88 Fix bug: ExitPoll set redrawhandle=-1 ;; 27-Apr-88 Change Wimp_ReportError so redrawhandle/rects are saved ;; 27-Apr-88 1.64 Change GetRect so it only re-validates redraw rects ;; (not update), and it does it at the start (not end) ;; 28-Apr-88 Further change it so bg clearing done in Get_Rectangle ;; YUK = false ==> new-style drawing ;; 29-Apr-88 1.65 Claim 24k block on init, shrinking it for each claim ;; 3-May-88 1.66 Fix bug: GetRectangle returned wrong clip window ;; 5-May-88 1.67 Implement 2-way scroll buttons (use ADJUST) ;; 5-May-88 Don't pass UpCall on even if Cancel selected ;; 5-May-88 1.68 Print 'Press SPACE or click mouse' after text error ;; 6-May-88 1.69 Fix bug: Task_PollIdle was bit 19 (same as Mess_Ack) ;; 13-May-88 1.70 Fix bug: task must be paged in for seticonptrs ;; 18-May-88 Implement Wimp_TransferBlock ;; 20-May-88 Fix bug: RMA leak if task dies while not mapped in ;; 20-May-88 Remove code to claim RMA block in advance ;; 20-May-88 Extend CommandWindow spec so ShellCLI can use it ;; 20-May-88 1.71 Force screen size towards default on mode change ;; 23-May-88 1.72 Fix bug: system icons didn't call seticonptrs ;; 23-May-88 1.73 Allow Sspr1,spr2 in validation string for txt+spr icons ;; 23-May-88 Fix bug: Wimp_TransferBlock mustn't disallow RMA tasks ;; 23-May-88 Change default palette so colour 7 is 0,0,0 RGB ;; 23-May-88 Tweak Wimp_Init so commandwindow state OK if error ;; 23-May-88 Fix bug: move CommandWindow off from CloseDown to Poll ;; 23-May-88 1.74 Add Wimp_ReadSysInfo call to read no. of active tasks ;; 23-May-88 Change Wimp_StartTask so task is initially 'dead' ;; 23-May-88 1.75 Implement button type 11 (select+notify / drag) ;; 23-May-88 1.76 No MODE on singletask exit if commandwindow pending ;; 24-May-88 Fix bug: SlotSize doesn't send message if task dead ;; 24-May-88 1.77 Cope with '*desktop' from old-style tasks ;; reset screen on Init/Exit, and set pending on closedown ;; 25-May-88 1.78 Fix bug: change handlers BEFORE mapping slot out ;; 25-May-88 1.79 Fix bug: nulltaskhandle introduced for null events ;; 25-May-88 Change double-click movement limit to 16 OS units ;; 25-May-88 Fix bug: CommandWindow (1) didn't set up keys ;; 25-May-88 1.80 Add Service_WimpCloseDown for ShellCLI etc. ;; 2-Jun-88 Fix bug: send Message_ModeChange before OpenWindowRq's ;; 3-Jun-88 1.81 Fix bug: page in correct task before OpenWindowRq ;; 7-Jun-88 Fix bug: set text window immediately in CommandWindow ;; 7-Jun-88 Use SWI OS_Confirm in Wimp_ReportError ;; - removed in Wimp 1.84 ;; 7-Jun-88 1.82 R1 bit 3 in Wimp_ReportError ==> don't wait for key ;; 8-Jun-88 1.83 Allow ESC to cancel menu tree (bodged hot-key) ;; 8-Jun-88 Remove SWI OS_Confirm in Wimp_ReportError ;; 8-Jun-88 1.84 Fix bug: sh-f4 in dbox (caused by int_close_window) ;; 9-Jun-88 1.85 Fix bug: FontSetPalette called with wrong parameters ;; 21-Jun-88 Check for invalid pointers on entry to Wimp SWIs ;; 21-Jun-88 Change default palette so colour 14 is 0,0,0 RGB ;; 21-Jun-88 Introduce 2 iconsprites areas (1 RAM, 1 ROM) ;; 21-Jun-88 Change Wimp_BaseOfSprites to reflect this ;; 22-Jun-88 Change Wimp_MergeSprites to Wimp_SpriteOp ;; 22-Jun-88 Use ttr to implement sprite inverting/shading ;; 23-Jun-88 Fix bug: use title width if minx=0 (ignore miny) ;; 24-Jun-88 Fix highlighting of text+sprite icon ;; 24-Jun-88 Keep error box central (don't follow mouse) ;; 24-Jun-88 1.86 Move/resize don't bring to front if SHIFT pressed ;; 27-Jun-88 1.87 Fix bug: toggle should look at shift key also ;; 29-Jun-88 Change colour 11 in default palette to full red ;; 29-Jun-88 1.88 Fix bug: use [oldcallback] to stash previous handler ;; 30-Jun-88 Make right-click in scroll bar do reverse page scroll ;; 5-Jul-88 Shrink screen memory to minimum (ignore default) ;; 5-Jul-88 Implement Wimp_SetFontColours ;; 5-Jul-88 1.88a Implement the 'F' field in validation strings ;; 6-Jul-88 1.88b Implement formattable text icons ;; 6-Jul-88 Implement bit 4 in ReportError (omit 'Error from') ;; 6-Jul-88 1.88c Change 'Error from ADFS' to 'Message from ADFS' ;; 11-Jul-88 1.88d Change Shift key stuff to ADJ button ;; 13-Jul-88 1.88e Implement erf_poll bit (used in UpCall handling) ;; 15-Jul-88 1.88f Call Hourglass_Smash in Wimp_ReportError (not *pointer) ;; 18-Jul-88 1.88g Fix bug: Wimp to preserve terminator in writeable icons ;; 19-Jul-88 1.88h Implement backwindow template (not colour 15) ;; 19-Jul-88 1.88i Fix bug: disallow 'hot keys' in single tasks ;; 19-Jul-88 1.88j Change: set default mode colours on exit from wimp ;; 19-Jul-88 1.88k Fix bug: close menus immediately if old-style task ;; 19-Jul-88 1.88l Fix bug: check CAOPointer up to ApplicationSpaceSize ;; 21-Jul-88 1.88m Fix bug: Wimp_ReportError with erf_poll set (various) ;; 25-Jul-88 1.88n Fix bug: Wimp_ProcessKey must page in correct task ;; 25-Jul-88 1.88o Fix bug: menus kept disappearing after [f1] [RETURN] ;; (open backwindow/iconbar at back, not front!) ;; 26-Jul-88 1.88p Fix bug: set flagword=0 when system task paged in ;; 29-Jul-88 Make *Pointer use Wimp_SpriteOp (SetPointerShape) ;; 29-Jul-88 Don't map colour 15 onto a grey scale ;; 29-Jul-88 Implement ^U in writeable icons ;; 29-Jul-88 Allow R1=0 in Wimp_SetPalette to set default palette ;; 29-Jul-88 Return icons -2 etc. for new-style tasks (-1 for old) ;; 29-Jul-88 Add vertical scroll bar if menu is too high ;; 29-Jul-88 Beep in Wimp_ReportError if wimpflags bit 4 unset ;; 29-Jul-88 Fix bug: remember OK/Cancel colours for later ;; 29-Jul-88 1.88q Fix bug: open singletasking backwindow at FRONT !!! ;; 29-Jul-88 1.88r Make toggle icon work properly with SetExtent etc. ;; 1-Aug-88 1.88s Change Wimp_SpriteOp SetPointerShape to default palette ;; 1-Aug-88 1.88t Fix bug: wrong memory limit check in Wimp_TransferBlock ;; 2-Aug-88 Change default slot size to 80 pages (640k on a 310) ;; 2-Aug-88 1.89 Fix bug: don't rub out text bg in Sprite+Text if null ;; 3-Aug-88 1.89a Fix bug: CreateMenu doesn't work if scrollbar needed ;; 3-Aug-88 1.89b Change default slot size so it's always 640k ;; 8-Aug-88 1.89c Fix bug: text origin is slightly wrong in MODE 20 ;; 10-Aug-88 1.89d Fix bug: text origin is still wrong in MODE 20! ;; 15-Aug-88 Fix bug: Wimp_ProcessKey gave bad task handle for CR ;; 15-Aug-88 1.89e Fix bug: function keys ignored ctrl codes ;; 15-Aug-88 1.89f Fix bug: deleted icons accessed by drawing code ;; 15-Aug-88 1.89g Store taskhandle in location &FF8 for Stuart ;; 16-Aug-88 1.89h Check Exec file handle on exit from a task ;; 18-Aug-88 1.89i Fix bug: Wimp_ReportError in command window was wrong ;; 19-Aug-88 1.89j Fix bug: acknowledge escape in Exec file stuff ;; 19-Aug-88 1.89k Fix bug: Wimp breaks MemoryLimit if no free pool ;; 19-Aug-88 1.89l Wimp_Init: set mode if new task without cf_pending ;; 22-Aug-88 1.89m Wimp_Init: don't set mode twice for 1st task ;; 24-Aug-88 1.89n Fix bug: command window left suspended if erf_pollexit ;; 24-Aug-88 1.89o Fix bug: Wimp breaks MemoryLimit if no free pool ;; 1-Sep-88 1.89p Remove ":" from UpCall string ;; 8-Sep-88 1.89q Fix bug: force native ecf's inside Wimp environment ;; 9-Sep-88 1.89r Fix bug: Wimp_SendMessage returned incorrect R2 ;; 9-Sep-88 2.00 Release version! ;; 12-Oct-88 2.01 BUG: pending slot not scanned on screen remapping ;; 8-Nov-88 2.02 BUG: Wimp objects to >= 256 pages, not > 256 ;; 19-Dec-88 2.03 BUG: Message block too small not checked for ;; 5-Jan-89 2.04 BUG: Wrong value of CAOPointer read in OS_ChangeDynamic ;; - don't store CAOPointer in Service_NewApplication ;; - don't overwrite CAOPointer in Wimp_Initialise ;; 5-Jan-89 2.05 BUG: Address exception if 0 pages on startup ;; ( Retrospective version for Fox produced ;; 31-Jan-90 =====( With 'bigmac' true (for > 256 pages) ;; ( Changes from: 2.07 / 2.10 / 2.41 / 2.65 ;; 12-Jan-89 2.06 BUG: Wimp_ReportError always returns R1=1 ;; 10-Feb-89 2.07 Enable interrupts in Service_MemoryMoved (MOS bug) ;; 28-Mar-89 2.08 Implement 2-way scrolling (drag_scrollboth) ;; 21-Apr-89 2.09 Errors in Wimp_Poll are reported internally ;; debugescape option introduced ;; 23-May-89 Remember pointer position over a mode change ;; Use separate buffers for errors and starttask ;; (Problems if task causes an upcall) ;; Report error if window deleted while dragging ;; Stop dragging menu / dbox if menus closed ;; *Help WimpSlot message altered slightly ;; Move dynamic error block up 4 bytes ;; (It's overlaid on the error handler's buffer!) ;; Ensure that Wimp_CreateMenu can return an error ;; Check for errors while creating menu icons ;; 2.10 Delete menu window if error while creating icons ;; 2.10 Correct behaviour of caret / menu selection ;; 25-May-89 2.11 Switch off pointer during 2-D scrolling ;; 9-Jun-89 2.12 Return task handle from Wimp_StartTask ;; 22-Jun-89 2.13 Issue Open_Window_Requests later on a mode change ;; 24-Jul-89 2.14 Issue Open_Window_Requests from back to front ;; Also allow for window stack changing (make a copy) ;; 25-Jul-89 2.15 Fix pointer readjustment when drag extent changes ;; 26-Jul-89 2.16 Allow windows to go off bottom-right (if CMOS bit set) ;; Implement wf_onscreen for menus ;; Implement ws_onscreenonce for toggling and mode change ;; Round window extent to pixels in Wimp_SetExtent ;; Disallow double-click with different buttons ;; Allow iconbar to scroll even if a drag is in progress ;; 27-Jul-89 2.17 Change pointer shape during double-click period ;; Cancel double-click as soon as ptr moves away ;; Cancel double-click if Wimp_DragBox is called ;; 27-Jul-89 2.18 Allow messages for menu windows to go to menu owner ;; Implement Wimp_GetMenuState ;; 28-Jul-89 2.19 Increase drag timeout to 1/2 double-click timeout ;; and report drag immediately if pointer moves too far ;; 28-Jul-89 2.20 Implement *Wimp_SetMode (equivalent to the SWI) ;; If first char=22, command window is not displayed ;; 31-Jul-89 2.21 Allow iconbar icons to be opened next to each other ;; 1-Aug-89 2.22 Fix bug: handle must be returned from openiconbar ;; 1-Aug-89 2.23 Implement new Wimp_Poll(Idle) bits in R0 which indicate ;; that R3 is a pointer to a 'poll word'. ;; 2-Aug-89 2.24 Fix bug: the above didn't work with Wimp_PollIdle ;; 2-Aug-89 2.25 Change name of *Wimp_SetMode command to *WimpMode ;; 3-Aug-89 2.26 Set bit 14 of windowflags on create/setextent ;; 3-Aug-89 2.27 Set bit 14 of windowflags on menu/dbox creation ;; 3-Aug-89 2.28 Implement erf_nobeep bit in Wimp_ReportError ;; 7-Aug-89 2.29 Increase drag radius to 32 OS units ;; 10-Aug-89 Increase double-click radius to 32 OS units ;; 10-Aug-89 2.30 Include file_fea and small_fea in sprite pool ;; 24-Aug-89 2.31 Get ROM sprite area via Wimp$Path ;; 30-Aug-89 2.32 Don't give error in Init if sprites can't be found ;; 7-Sep-89 Make recalcpalette suspend/resume command window ;; 8-Sep-89 2.33 Fix syntax message for *WimpMode ;; 14-Sep-89 Make *IconSprites look for 23 if in mono mode ;; Pick up DeskFS:$.Sprites or DeskFS:$.Sprites23 ;; 2.34 Add Wimp_ReadSysInfo R0=1 => R0=current Wimp mode ;; 14-Sep-89 2.35 Fix bug with OpenWindowRequests going to menu owner ;; 20-Sep-89 Don't issue Message_ModeChange unless mode different ;; 20-Sep-89 Don't scroll iconbar on mode change ;; 20-Sep-89 Make Wimp_ReportError box same as text one re: escape ;; 20-Sep-89 Increase max number of windows to 256 ;; 20-Sep-89 2.36 "Bad Wimp mode" for double-pixel modes ;; 21-Sep-89 2.37 Implement FP register saving ;; 21-Sep-89 2.38 Implement flexible window extents ;; 21-Sep-89 2.39 Implement double-width caret plotting (VDU 5 only) ;; 22-Sep-89 2.40 Fix bug: don't re-open backdrop & iconbar if same mode ;; 2-Oct-89 Fix bug: the following calls should accept window -2: ;; Wimp_GetWindowState Wimp_GetWindowInfo ;; Wimp_GetWindowOutline Wimp_ForceRedraw ;; Wimp_DragBox Wimp_WhichIcon ;; Make caret single-width again ;; 2.41 Allow > 256 pages (use word array for free pool) ;; 3-Oct-89 2.42 Allow f11 to toggle iconbar between front and back ;; 4-Oct-89 2.43 Fix bug: Wimp_ForceRedraw(-2) did screen not iconbar ;; 6-Oct-89 2.44 Make *WimpMode only set the mode if different ;; 18-Oct-89 Change f11 behaviour to toggle the 'back' bit ;; Wimp_GetWindowInfo R1 bit 0 set => don't return icons ;; 2.45 Wimp_LoadTemplate R1 <= 0 => return block sizes ;; 20-Oct-89 2.46 Fix bug: Wimp_LoadTemplate can take -ve R1 ;; 20-Oct-89 Make Wimp_SetExtent only set ws_onscreenonce if ;; window was entirely on the screen ;; 2.47 Make Wimp_OpenWindow prevent windows getting bigger ;; than the screen size even if they're not being ;; forced onto the screen. ;; 20-Oct-89 2.48 Call recalcpalette before int_allbutmode on mode change ;; 24-Oct-89 Ignore clicks on greyed-out menu items ;; 25-Oct-89 Return Message_MenusDeleted if menus deleted ;; 25-Oct-89 2.49 Return mouse clicks via messages if queue non-empty ;; 25-Oct-89 Use HiResMono bit to decide whether to use Sprites23 ;; 25-Oct-89 2.50 Wimp_OpenWindow should keep window on screen if was closed ;; 26-Oct-89 2.51 Make menu disappear if SELECT clicked on grey item ;; 27-Oct-89 Allow interactive help to 'see' greyed-out menu items ;; 27-Oct-89 2.52 Implement mif_traverse (can see submenus of grey items) ;; 27-Oct-89 Issue Service_WimpPalette on Wimp_SetPalette ;; 27-Oct-89 2.53 Return R2 = sender's task handle from Wimp_Poll(Idle) ;; (Only if task knows about Wimp 2.53) ;; 30-Oct-89 2.54 Call int_sendmessage_fromwimp to give taskhandle 0 ;; 31-Oct-89 2.55 Fix bug: *Iconsprites in mode 23 used wrong R2 ;; 3-Nov-89 2.56 Issue Message_MenusDeleted when escape kills menus ;; 9-Nov-89 2.57 *IconSprites tries 20 if <= 2 OS units per ypix ;; 10-Nov-89 *IconSprites tries , then ;; It also uses the values cached in getromsprites ;; 2.58 Wimp_ReadSysInfo (2) returns ptr to xeig,yeig,log2bpp ;; 15-Nov-89 2.59 Change *WimpTask so it works from a dead task ;; 15-Nov-89 2.60 Change IconSprites to use or "23" ;; 16-Nov-89 2.61 Implement Wimp$State ("desktop" or "commands") ;; 17-Nov-89 Make Wimp_ReadSysInfo (3) return 0 or 1 ;; 2.62 f11 looks at whether window is covered, and sets wf_backwindow ;; 20-Nov-89 Still send Message_ModeChange even if same mode ;; 2.63 But don't set ws_onscreenonce unless size smaller in x or y ;; 30-Nov-89 Fix FP register saving, and set status=&7000 if not saved ;; Fix scrolled menu dotted line redrawing ;; Don't send iconbar to back on mode change ;; Use OS_CheckModeValid when checking for HiResMono modes ;; 2.64 Clear bottom bits of palette entries in Wimp_ReadPalette ;; 1-Dec-89 Don't send Message_SlotSize if slot is same size ;; Report memory full errors in Wimp_SlotSize correctly ;; Make OS_ChangeDynamicArea and findpages work with 16Mb ;; Allow pointer to go off bottom-right in size dragging ;; Fix bug: don't zero bottom bytes in Wimp_ReadPalette ;; 2.65 Ensure that pointerwindow coords are signed 16-bit ;; 6-Dec-89 2.66 Fix bug: Wimp_SlotSize corrupted R4 on exit! ;; 7-Dec-89 Fix bug: Wimp_LoadTemplate didn't count indirected data properly ;; Fix bug: turn double-click ptr off if pending window deleted ;; 2.67 Fix bug: allow validation = 1 and size <= 0 in templates ;; 8-Dec-89 2.68 Add "-next" parameter to *WimpSlot command ;; 8-Dec-89 2.69 Change default Wimp palette so it works better in mode 15 ;; 31-Jan-90 Introduced 'bigmac' switch for Fox Wimp (additions to 2.05) ;; 19-Feb-90 2.70 Included resource files inside module, using ResourceFS ;; 23-Feb-90 Implement *WimpWriteDir for changing to Hebrew mode ;; Menus with title starting "\" are reversed ;; 2.71 Wimp_ReadSysInfo (4) returns current write direction ;; 23-Feb-90 2.72 Fix bug: didn't initialise ROM sprites if loaded after ResourceFS ;; 26-Feb-90 2.73 Allow Wimp_CreateIcon with R1 = -5,-6,-7,-8 ;; 28-Feb-90 2.74 Fix bug: iconbar extent should be pixel-aligned ;; 9-Mar-90 2.75 Fix bug: return click from menu icon if clicked as the mouse enters ;; 13-Mar-90 2.76 Icons stored separately from windows. This allows window structs to stay still. ;; Change sequence of LNKs to GETs from Sources.Wimp ;; Change references to headers to Hdr:, not &.Hdr. ;; Pass reason code messages <= CloseRequest through the message system ;; under task ID 'pmiW' ("Wimp"), this enables mode change to send open messages for ;; all windows. ;; Send messages for all windows being opened after a mode change, and ;; stop using the stack to hold the window stacking order for this ;; operation. ;; Implement infinite windows. ;; Backwindow bit slightly changed in meaning: now, the frontmost back window ;; determins where windows opened behind window -2 get opened; if a specific ;; window handle is given, even if that window is behind a back window, then the ;; opened window will open behind the window specified. ;; 26-Mar-90 2.77 Handle rectangle area full redraw screen better: ;; braindead_panic_redraw indicates the state of the rect area full problem: ;; 2 - not full, everything's ok. If the rect area becomes full this upgrades ;; to a 2. ;; 3 - has become full once, we are currently in the redraw whole ;; screen intelligently scheme. If the rectangle area becomes ;; full in this state this upgrades to a 3. ;; 0 - has become full once and all rectangle operations should be ignored. ;; If redraw notices this on entry to redrawing this will downgrade ;; to a 1 with the whole screen as the invalid rectangle. ;; 1 - has become full whilst doing an intelligent whole screen redraw due to ;; a rectangle area full. This means its time to do a ;; BRAINDEAD_PANIC_REDRAW. Redraw noticing this will commence doing ;; a brain dead redraw sequence (redraw all of all the windows from ;; the back of the stack to the front). ;; - braindead_panic_redraw is in progress. This handle is the ;; handle of the next window to be redrawn braindead fashion. Once ;; the stack has been redrawn this flag drops to 0 again. ;; So, the sequence if the stack is only slightly full (eg a task with a huge ;; number of windows is closing down, overflowing the rectangle area as all the windows ;; are closed, but eventually leaving a less complex rectangular situation) is: ;; 2 - then rect area becomes full ;; 0 - then more rect operations do nothing as the windows are closed ;; 0 - then the redraw comes along and notices this, downgrading to a ;; 3 - intelligent redraw happens which has no problems due to the much ;; reduced window stack. ;; 3 - intelligent redraw finishes and the system settles back to a ;; 2 - no problem. ;; The sequence if there are just too many windows to handle is: ;; 2 - rect area becomes full ;; 0 - then more rect operations do nothing, until ;; 0 - redraw comes around and downgrades to a ;; 3 - and starts doing an intelligent redraw, after a while of redrawing ;; 3 - the rect area becomes full (again) causing an upgrade to a ;; 1 - which the redraw sequence picks up, and skips out to do a braindead ;; redraw sequence. ;; 1 - braindead redraw sequence starts (clears background then) ;; - redraw this window braindead fashion, then run out of windows ;; 2 - no more windows, back to 'normal'. ;; Notice in states 0 and 1 rectangle operations should be curtailed, but ;; in states 2 and above (unsigned) rectangle area operations are ok (above 3 ;; the operations should have been vetted by the panic redraw handling to be safe). ;; 13-Jul-90 2.78 Fix bug: address exception when clicking on greyed-out menu item ;; 02-Aug-90 2.79 Iconize messages implemented. ;; 04-Aug-90 2.80 Fix bug, address exception when task died while pointer in one of its windows. ;; 14-Aug-90 2.81 Changed number of tasks to 128. ;; 03-Sep-90 2.82 F11 action (Toggle iconbar) moved to F12. ;; 20-Sep-90 2.83 Fixed bug, drag user sprite called move address first ;; 20-Sep-90 now calls plot first. ;; 25-Sep-90 2.84 Centre error box on screen. ;; Fixed bug in 3d writable icons, colour now forced only if icon has a border. ;; Fixed bug in 3d icons, wrong colours in 8bpp modes. ;; Added r3-> list of messages expected if task knows about version 284 or later. ;; Moved task priority and message list code to be conditional on Version >= 284 ;; and not on Swapping. ;; Shift-Full_Size toggle to max size that doesn't hide icon bar. ;; 30-Nov-90 2.85 Added pointer shape changes (P command in validation string). ;; Added border types for icons (B command in validation string). ;; Added SWI Wimp_RegisterFilter for filter manager. ;; 02-Jan-91 2.86 Read timeouts and distances from CMOS RAM. ;; Added auto submenu opening. ;; 05-Mar-91 2.87 Fixed bug in messages list. ;; Uses OS_ReadSysInfo to read configured mode. ;; 21-Mar-91 2.88 Fixed bug: Now Uses OS_ReadSysInfo to read configured ;; mode in both places where it is read. ;; 30-Mar-91 2.89 Added sysflags_nobounds to enable all windows be opened off screen ;; in all directions. ;; * Fixed bug in NewLook stuff that changed graphics clip window ;; while dragging without instant effects enabled. ;; * Added UserBars flag to enable the use of sprites for all the window ;; tools including the scroll bars. ;; * Removed *Configure wimpmode. ;; * Changed template loading to use OS_File, and fall back ;; to OS_GBPB if the OS_File fails. ;; * Moved toggle icon bar to Shift+F12 ;; 24-Apr-91 2.90 Cache UserBars sprites on init and mode changes. ;; * Divided userBars title sprite into two. ;; * Read configured mode when first task starts. ;; * Fixed a number of positioning bugs in UserBars stuff ;; * Added slowdown code for portable. ;; 06-May-91 2.91 Changed delay configuration units to 1/10 sec. ;; * Added WimpMenuDragDelay ;; * Fixed bug: horizontal scroll bar vanished in 8bpp modes when ;; y0 was 0 (R7 was set to 0 on entry to getspriteinfo). ;; 28-May-91 2.92 Added K command in validation string ;; * Wimp now looks sprites up in Wimp pool if not found in window's ;; 1-Jun-91 2.93 Fixed bug, page in task to check for mouse events enabled. ;; * Fixed bug, caret data returned for correct icon if KNA ;; * Fixed bug, don't page in input focus task if no key pressed ;; * Fixed bug, KR,KT now move to end of data in new icon. ;; * Fixed bug, Auto menu no longer opens greyed out submenus. ;; * Changed sprites, removed pointer sprites. ;; 14-Jun-91 2.94 Bug fixes ;; 2.95 Fixed bug, Wimp_ReportError stiffed machine if R1=0 on entry and in text mode. ;; * Fixed bug, !Madness made icon bar move. ;; * Added SWI Wimp_AddMessages ;; * Wimp_Initialise now only reports an error if passed in version is <200 or > 300 ;; if 200 < version < 300 then 200 is used as the version number. ;; * Error boxes now only respond to and . ;; 07-Aug-91 2.96 Fixed bug, crashed on soft key expansion ;; * Fixed bug, check that window for opening behind is open. ;; 28-Aug-91 2.97 Added redraw and block copy filters. ;; * Fixed ARM IIas bug. ;; * Fixed submenu opening in wrong place bug ;; 2.98 Made Wimp respond to Service_ValidateAddress ;; 2.99 * DOES NOT EXIST * ;; 17-Sep-91 3.00 Release version !!! (For RISC OS 3.00) ;; -------------------------------------------------------------------------------------- ;; 25-Nov-91 Wimp now looks up messages in MessageTrans in normal way, defaults are not held in the code module. ;; 25-Nov-91 Bug fix: Call to filters used ADR LR, now uses MOV LR,PC ;; 25-Nov-91 3.01 Implemented portable speed control. Now only calls Protable_Speed if Portable module is present. ;; -------------------------------------------------------------------------------------- ;; 26-Nov-91 Modified to use ColourTrans for colour mapping ;; 29-Nov-91 Fix bug: WimpSlot now accepts 6 parameters ie: "-min k -max k -next k" ;; 30-Nov-91 Uses ColourTrans for setting GCOLs. ;; 30-Nov-91 Wimp_ReadPixTrans now uses dynamic workspace. ;; 30-Nov-91 Check dither CMOS on mode change and set a suitable workspace location. ;; 3-Dec-91 Implement Wimp_SetColourMapping. ;; 5-Dec-91 Optimised for 1:1 mapping on colours - sets needsfactors. ;; 5-Dec-91 Inversion and greying of sprites re-introduced. ;; 5-Dec-91 Bug fix: When looking for a sprite tries the wimp pool if all fails. ;; 5-Dec-91 Bug fix: User gadgets now plot using correct mappings - also optimised for space. ;; 5-Dec-91 Bug fix: Wimp_ReadPalette reads the mapping palette if applied. ;; 5-Dec-91 Bug fix: Remapping colours works correctly. ;; 6-Dec-91 Bug fix: Wimp_ReadPalette now returns the pointer colours if remapping applied. ;; 6-Dec-91 Bug fix: Screen redraw if Log2BPP >=8 and remapping is *not* applied on setting the palette. ;; 6-Dec-91 Consistent and improved greying and inversion of sprites. ;; 9-Dec-91 New caret plotting introduced. ;; 11-Dec-91 3.02 Bug fix: Caret inversion colours corrected. ;; 30-Dec-91 Bug fix: Die entry when reporting Wimp cannot die error message. ;; 10-Jan-92 3.03 In monochrome modes always dither Wimp colours 0-7. ;; 10-Jan-92 Wimp_ReadPalette works properly; R2 ="TRUE" means return full 24bit values. ;; 10-Jan-92 Wimp_SetPalette works properly; R2 ="TRUE" means user specifing full 24bit values. ;; 10-Jan-92 Bug fix: recalcpalette no longer forces redraw of the screen unless really needed. ;; 10-Jan-92 Bug fix: Wimp_ReadPalette returns GCOL in bottom eight bits. ;; 14-Jan-92 Experiment with new inversion code and ColourTrans functions. ;; 14-Jan-92 Recoded the despatch of Wimp_ReadSysInfo reason codes. ;; 15-Jan-92 3.04 Bug fix: When setting palette preserve supremacy bits. ;; 15-Jan-92 Bug fix: Screen update in 8BPP modes when palette changed. ;; 18-Jan-92 Dot dash line rotation speed now based on timer, rather than internal counter. ;; 23-Jan-92 3.05 Tweeked the rotation speed of the line, tad faster. ;; 7-Feb-92 Service_WimpSpritesMoved added - R2,R3 -> ROM, RAM sprite pools. ;; 7-Feb-92 Added sprite name caching routines. ;; 7-Feb-92 Intergrated the use of sprite name cache. ;; 7-Feb-92 Improved sorting performed on the sprite list. ;; 7-Feb-92 Removed lots of conditional assembly from Wimp01. ;; 8-Feb-92 Removed more conditional assembly, sorted out internationalised code and service trapping. ;; 12-Feb-92 Bug fix: Message token lookup for media search boxes. ;; 12-Feb-92 ** Bug fix: Wimp_ReportError getting the title bar wrong. ;; 12-Feb-92 Now uses OS_FindMemMapEntries rather than its own *SLOW* implementation. ;; 12-Feb-92 Wimp_RemoveMessages added. ;; 12-Feb-92 Improved seaching of messages list - now stored on a per-task basis. ;; 12-Feb-92 Bug fix: duplicate removal on sprite list sort is biased towards RAM pool. ;; 13-Feb-92 More conditional code removed (Wimp06). ;; 13-Feb-92 Icon borders tidyied and added back in. ;; 14-Feb-92 Template loading catches resources: objects. ;; 15-Feb-92 Bug fix: caching sprites gets correct prefix. ;; 16-Feb-92 Indirected menu titles implemented for long application titles. ;; 16-Feb-92 Bug fix: indirected title bars and wimp created sub-menus. ;; 16-Feb-92 Bug fix: Rogers palette problems - not converted properly. ;; 18-Feb-92 Changed the reseting of filters to a default state, and issuing of Service_RegisterFilters ;; 18-Feb-92 Re-ordered filter despatch workspace; now called using LDMIA Rx,{WP,PC} - coded to macro. ;; 18-Feb-92 Wimp_ReadSysInfo (5) get current task + version of task. ;; 19-Feb-92 Bug fix: all filters passed R2 contain task handle. ;; 23-Feb-92 Only plot the icon borders if task specified Wimp version >= 306, solves clash of validation strings. ;; 23-Feb-92 Added *ToolSprites command to allow loading of sprite borders for windows. ;; 24-Feb-92 Caching of the tool sprites information added. ;; 24-Feb-92 Bug fix: border sprites not seen by Wimp_PlotIcon / Wimp_SpriteOp - saves confusion. ;; 25-Feb-92 Finished new tools sprites routines. ;; 25-Feb-92 Changed syntax of ToolSprites to allow no parameters - meaning default set from WindowManger:Tools. ;; 25-Feb-92 Bug fix: excessive recaching of sprite border pointers - only does once on a mode change. ;; 25-Feb-92 Bug fix: does not reprogram the VDU 5 glyphs if the tool sprites are present. ;; 26-Feb-92 ** Bug fix: slot size genertes the correct error if not enough memory - not gobbldy gook! ;; 26-Feb-92 Bug fix: source clipping works properly on window gadgets. ;; 26-Feb-92 Further optimisation of dofunkytitle, dofunkyhscroll and dofunkyvscroll. ;; 26-Feb-92 Now keeps SpriteOp paramaters cached to save recalculating them. ;; 26-Feb-92 Some more conditional code removed. ;; 26-Feb-92 Bug fix: pre-scroll offset for scroll bars adjusted by borders properly. ;; 26-Feb-92 3.06 If not sprite tools loaded then falls back to VDU 5 style glyphs, including reprogramming welsh doofers. ;; 27-Feb-92 3.07 Fix bug in Wimp10 preventing error boxes working on dead tasks. ;; 11-Mar-92 3.08 LRust - fix help message for WimpMenuDragDelay - fixes G-RO-8313 ;; 12-Mar-92 LRust - messages flag is initialised immediately after claiming ws to ensure ;; if errors are looked up during init (eg in ValidateMode) no address exceptions ;; occur (e.g. if invalid configured screen mode). Fixes RP-0725 and RP-1679 ;; 13-Mar-92 LRust - Menu tick and arrow revert to sprites. ;; * Tools and sprites are always included, messages and templates ;; are included if standalone flag set true. ;; 16-Mar-92 LRust - Mode 23 toolsprites are correctly cached, fixes window border ;; redraw errors in mode 23, fixes RP-1691 ;; 19-Mar-92 3.09 LRust - Redraw of pressed gadgets fixed to not leave in pressed state ;; * help text for WimpDragDelay etc. tidied. ;; * Iconsprites now no longer merges the window border tools. ;; This speeds up *iconsprites and prevents address exceptions ;; caused by cached toolsprites having moved. ;; * Wimp_SetCaretPosition now pages in task losing caret if icon ;; has indirected data. ;; 24-Mar-92 3.10 LRust - Fixed caret positioning in writable icons by ensuring that ;; drawicon_system in Wimp04 adjusts for borders before calling ;; findtextorigin - thus text is correctly aligned in bordered icons. ;; * Menu titles can be indirected using bit8 of the first menu item ;; 25-Mar-92 LRust - KA validation string now causes caret to move to the same character ;; position within the new icon when up or down arrow pressed. ;; * Fixed bug RP-2025, adjust drag scroll bars without instant vertical effects ;; erroneously called a user drag routine, and went BANG!! ;; 26-Mar-92 LRust - Fix RP-1809, Wimp_ReportError now forces VDU output back to the ;; screen before drawing the error box, and restores re-direction and ;; other states on exit ;; * Fixed RP-1913, Wimp_Initialise now accepts any control character to ;; terminate the task descriptor string. Subr Count0 fixed to do this. ;; LRust - Fix RP-1537. *WimpPalette now checks that there are exactly 16 palette ;; entries in the file, thus avoiding problems with the 256 colour variety ;; 30-Mar-92 LRust - KA validation string cause up/down arrow to move to end of new field, ;; fixes G-RO-7130, RP-1168 ;; 31-Mar-92 LRust - Sprite highlighting changed again! fixes RR-1674 and Rp-1402 ;; * Sprite graying changed again! fixes RP-2094 ;; * Initptrs now preserves R0, preventing R0 from being corrupted on Service_Reset ;; 01-Apr-92 LRust - Fix RP-2148 and RP-2150 - F command in validation specifying font colours ;; now accepts lowercase hex colour numbers. ;; * Fix RP-2153 - Mode change now uses default colour mappings for the mode to ensure ;; the physical palette isn't changed by use of Wimp_SetColourMapping to alter ;; logical colour mapping. In addition Wimp_SetColourMapping also forces ;; re-caching of tool sprites to ensure the cached palette is correct. ;; 02-Apr-92 LRust - Fix die entry if tasks are active to restore R12 after (and not before!) ;; translating the CantKill error. ;; 03-Apr-92 LRust - Add constants to define validation strings. ;; * Service_InvalidateCache invalidates toolsprite cache. ;; * Add reason code 7 to ReadSysInfo to return Wimp version ;; * The wimps's templates are now loaded by first finding the buffer size ;; required, allocating the buffer and then loading the template ;; * Fix RP-2030, Wimp_ProcessKey correctly inserts keystrokes into writeable ;; icons even if the window is not topmost. ;; * Icon border validation string correctly parsed for highlight colour ;; 07-Apr-92 3.11 LRust - Dofunkyvscroll and hscroll fixed to only plot icons if clipping rectangle ;; is non null, pressed hscroll drawn correctly. Fixes RP-1766 and other 3d complaints ;; * Service_InvalidateCache disposes of tool_list only, redrawing window with ;; empty tool_list calls maketoollist to re-cache tool info. ;; * IconSprites now correctly checks for duplicates at end of sorted list ;; fixes RP-2127 ;; * Wimp_DeleteIcon now correctly deletes a writable icon with the caret, ;; fixing RP-0803 ;; * Disabled editable icons with border command validation don't have black border ;; 09-Apr-92 3.12 LRust - ExitPoll only calls post filter if event in R0 is valid (ie not when ;; R0 is setup for Wimp_StartTask. ;; * ExitPoll call to portable module for non null events optimised. ;; 13-Apr-92 LRust - Recoded scanpollwords to use a packed list of pollword tasks to improve ;; search time. Fixes G-RO-7574 ;; * Submenus now displayed immediately to right of arrow (left in hebrew), not ;; to right of window, in case title wider than item. ;; 15-Apr-92 LRust - Fixed template loading to correctly preserve file handle if insufficient ;; RMA to cache the file. Fixes RO-8608 (Acorn DTP not starting on 1 Mb machine). ;; * Wimp_ReportError correctly returns cancel if escape pressed with highlight on ok ;; 22-Apr-92 RMokady - Take away input focus from windows open behind the backdrop (-3) ;; ;; 23-Apr-92 3.13 LRust - Fixed scrollbar redraw problem when off screen and moved in negative direction. ;; RMokady - Fixed problem with caret size not taking into accound wide borders. ;; * Added Squash sprite to ROM sprite file ;; 24-Apr-92 3.14 LRust - Fixed CopyFilter to preserve R2, debugged CallAFilter macro ;; 29 Apr-92 3.16 LRust - fixed address exception during mode change with little RMA ;; * VDU 5 glyphs correctly used for undefined toolsprites ;; ---------------------------------- RISC OS 3.10 release version ---------------------------------- ;; 17-Jun-92 Bug fix: deleting window with active icon in it - no longer goes bang! ;; 17-Jun-92 Stripped more conditional code, leaving just the poll word speeds ups by Lawrence ;; 17-Jun-92 Mouse polling reduced to 100hz - ticker sets internal flag and then we read next time ;; 17-Jun-92 Scroll bars now have new blip icons, plotted centrally on the bar ;; 19-Jun-92 Bug fix: Shift toggle no longer thinks the window *ISN'T FULLED* ;; 22-Jun-92 Wimp_ReadPalette with bpp >= 16 does not return colour numbers in bottom bytes ;; 26-Jun-92 Optimising of the pixel translation table no longer performed if > 256 entries (needed for 16bpp) ;; 1-Jul-92 FindNext and FindPrev for editable fields now looks at ESG group within icons ;; 6-Aug-92 Bug fix: blip handling min size of window limited by these sprites ;; 6-Aug-92 Bug fix: Illegal character sequence in Font_Paint string no longer generated with fancy font fields ;; 6-Aug-92 Some optimisations, TickerV released correctly on deallocpointers! ;; 7-Aug-92 Started support for Wimp$Font and Wimp$FontSize ;; 10-Aug-92 Bug fix: Fancy font handling now works using Font_Paint rather than old style VDU calls ;; 10-Aug-92 Bug fix: Rubout on fancy fonted icons works again properly ;; 12-Sep-92 Bug fix: Fancy font icons which D in validation string now translate properly ;; 21-Sep-92 Ensure it flushes ColourTranz (sic) cache when palette reprogrammed! ;; 21-Oct-92 Improved some more of the caret handling for fancy font Wimp. ;; ;; 19-Mar-93 3.20 Following enhancements and bug-fixes by Neil Kelleher ;; ;; Caret position in dialogs with passwords ;; now correct. Base of sprites no longer missing (though still ;; a problem in some sizes of text). Can use *Set as well as ;; *SetEval to alter text size and width. Empty-string L40 ;; icons no longer cause Data Abort. ;; Auto Menu width ammended as follows: If menu has no writeable ;; entries then automatically determine the width, otherwise use ;; given menu width as a minimum. ;; Fixed bug involving proportional system font being written on ;; top of itself ;; Fixed bug reported by ddv- if wimp$font is unset then selecting ;; an icon knocks off the top line(s) of pixels. Caret moving ;; after clicking or typing first character fixed. ;; Improved background filling for inverted and sprite+text icons. ;; Support Wimp_ReadSysInfo (Reason 8) returning system font ;; handle in R0 and symbol font handle in R1. Fixed some validation ;; string problems affecting stability. ;; Random character problem fixed. ;; Unfilled Text icons drawn with correct background- now uses ;; correct antialiasing colours. ;; Icons with Border validation (eg. R6,14) go correct colour when ;; pressed. ;; 'Kar' bug fixed. ;; Wimp now sends message when system font changes. ;; Added new SWI, Wimp_GetIconInfo. Creating icons on icon bar, automatically ;; widen if text (in current system font) doesn't fit- NOTE, if fontwidth ;; changes during desktop use, it is not updated. ;; Filer templates removed from wimp RM, WIMPSymbol font built in. ;; Implemented prototype features for tiling window backdrops and slab in/out ;; of border 1 sprite icons. ;; ;; 21-Mar-93 3.21 Implemented new error system, service calls etc. ;; 15-Jul-93 3.22 Added Medusa memory management support. Fixed various bugs. ;; Improved outline system font mechanism. See spec 0384,405/FS. ;; 20-Aug-93 3.23 Added SWI's TextOp (replacing GetIconInfo) ResizeIcon, Extend and ;; SetWatchdogState. Added CMOS support for Desktop font. Return and ;; escape usable on Custom button dialog boxes. various bug fixes. ;; 27-Aug-93 3.24 Added CMOS control for desktop tiling. ;;-------------------------------------Medusa A Audit version------------------------------ ;; 03-Sep-93 3.25 Added different tile depth support. rearranged sources. ;; auto menu width now takes sprites into account ;; 17-Sep-93 3.27 altered window furniture code - should be more efficient. ;; made DA sprite area on medusa more efficient ;; can *WimpMode outside of desktop. fixed a few bugs incl. grey modes ;; 30-Sep-93 3.28 WrCh vector now released on Service_ModeChange - catches 'single tasking' ;; apps that change screen mode with OS_ScreenMode rather than VDU 22. ;; 30-Sep-93 3.29 updated to cope with increased sprite op reason code. ;; 03-Oct-93 3.30 updated !WIMPSymbol. ;; 06-Oct-93 3.31 tweaked darwin. reorganised sources - can now build with outlinefont off. ;; speeded up mode changes. fixed some selected icon problems. ;; 08-Oct-93 3.32 On Medusa memory is returned when exiting desktop. ;; workaround for toolsprites code causing lots of 'can't find sprite' ;; 11-Oct-93 3.33 now uses look up table for program errors. few memory fixes. ;; caret is red on 16/32 bit modes. ;; 19-Oct-93 3.34 yet more memory fixes. error block now copied so message trans ;; overwritting buffers is ok. ;; 03-Nov-93 3.36 and some more memory fixes! fixed line across the screen from an error ;; box bug. increased minimum scrollbar height and fixed cannot scroll to ;; end bug. ;; 18-Nov-93 3.37 memory fixes and MED-01061 00973 01097 00297 01103 ;; 01-Dec-93 3.38 fixed MED-00967/8 00974 MED-00966 MED-01342 01346 01431 ;; altered icon selection (faster, sprites slightly different colours) ;; ALT-BREAK now used for watchdog. ;; 09-Dec-93 3.39 fixed MED-01406 00776 01228 01588 00414 ;; 12-Jan-94 3.40 Stopped acknowledging messages from deleting events : fixes MED-00003 and ;; MED-00985. fixed MED-00943, better handling for iconbar icons with variable ;; text. fixed MED-00946 01364 01418 01711 01818 01894 MED-02090,1,2122,2146,2202 ;; fixed MED-02095. recoded tiling. ;; 20-Jan-94 3.41 fixed MED-00240 00563 02050 01910. Tweaked memory management and tiling. ;; 21-Jan-94 3.42 Improved font manager death recovery. fixed (MED-00114) toolsprite probs. ;; Wimp_ClaimFreeMemory works on machines with more than 28 meg. ;; tweaked error box templates ;; 31-Jan-94 3.44 W_CFM now returns free pool EEK!!!. fixed MED-01852. fixed MED-02443 ;; fixed MED-02497, fixed MED-01910 ;; 03-Feb-94 3.45 improved FM death recovery (now loses fonts so that useage should go down ;; to zero). custom buttons get correct border if they are a default (ie. no ok ;; or cancel). fixed load template giving spurious errors (affected Magpie and ;; Junior Pinpoint). fixed MED-02285. fixed MED-02269 ;; 08-Feb-94 3.46 fixed MED-01796. improved Watchdog to cope with special circumstances such ;; as a running Print Job or output switched to sprite. ;; improved font preservation (when to do it/ when not to). fixed menu delay offset bug. ;; 09-Feb-94 3.47 Thought about font preservation and removed it for now. ;; 11-Feb-94 3.48 Fixed MED-02301, substantially changed unfilled text only icons. Fixed MED-02598 ;; Fixed bug that could cause program errors to go wrong themselves. fixed tiling bug - ;; only occurred when a window had a custom sprite. put in (different) font ;; preservation checking. Added 'vertical justification' bit to TestOp, Wimp_RenderText ;; 16-Feb-94 3.49 Fixed W_CFM (asking for lots of memory didn't fail). Added extra FM abuse security ;; (eg. MED-00669) ;; 17-Feb-94 3.50 changed Sprite Op's 'can't do that in this depth' error to User one. ;; Yeeeee Haaaaaa!!!!! we're here!!! ;; ;; -------------------------------------------------------------------------------------------------- ;; ---------------------------------- RISC OS 3.50 release version ---------------------------------- ;; -------------------------------------------------------------------------------------------------- ;; ;; 21-Apr-94 3.51 (RM) added power saving code for Stork ;; 15-Sep-95 3.71 Remove mode check from module initialisation to enable soft loadable modes. ;; ;;---------------------------------------------------------------------------- ;; 29th Apr 97 3.89 (JRC) Modify UpCall handler; restore font colours before calling Service_WimpReportError at end ;; of SWI Wimp_ReportError. ;;---------------------------------------------------------------------------- ;; 15th Jul 98 3.95 (SMC) Made modifications to make NC's work turn to only use IconHigh when not using ;; a mouse and to turn the pointer on and off correctly. ;; 25th Jul 98 3.96 (SMC) Now uses new flag, PreservePointerOnError, to turn on/off the preservation ;; of the mouse pointer state over errors. This depends on BuildForNC also being true.