about summary refs log tree commit diff stats
path: root/dwm.h
Commit message (Expand)AuthorAgeFilesLines
* removed the _DWM_PROPERTIES handling, reverted ban/unban to XMoveWindow(), an...Anselm R. Garbe2007-08-221-6/+2
* moved updatebarpos to screenAnselm R. Garbe2007-08-191-2/+2
* added screen.c, removed layout.c and tag.cAnselm R. Garbe2007-08-191-19/+16
* prepared merging layout.c and tag.c into screen.cAnselm R. Garbe2007-08-191-1/+3
* hmm I doubt the usefulness of storing this information...Anselm R. Garbe2007-08-181-3/+5
* cleaned up settags-handlingAnselm R. Garbe2007-08-181-1/+3
* renamed seltag into seltagsAnselm R. Garbe2007-08-171-1/+1
* made tag/view/toggle{tag,view} work on pointer to tags-array, there was the n...Anselm R. Garbe2007-08-161-1/+2
* fififiAnselm R. Garbe2007-08-151-3/+3
* fixed a typoAnselm R. Garbe2007-08-141-1/+1
* tags should be persistent now during X server runAnselm R. Garbe2007-08-131-1/+1
* made Layout a static struct in layout.c, added some convenience getters in la...Anselm R. Garbe2007-08-131-7/+4
* moved floating to layout.c, kept tile.c outsideAnselm R. Garbe2007-08-121-0/+2
* separated layout-specific stuff into separate .h and .c files which are inclu...Anselm R. Garbe2007-08-111-4/+1
* removed VRATIO, NMASTER, inc*(), renamed HRATIO into MASTER, see mailinglist ...Anselm R. Garbe2007-08-101-5/+2
* I introduced {H,V}RATIO and inc{h,v,}ratio() functions - the default behaves ...Anselm R. Garbe2007-08-041-2/+2
* implemented ratio tile as described on the mailinglistAnselm R. Garbe2007-08-031-1/+2
* changed ban/unban implementation to not move the windows anymore, but map/unm...Anselm R. Garbe2007-07-281-0/+1
* removed shiftview(), if you scroll the views in the tag area, you can also us...Anselm R. Garbe2007-07-281-1/+0
* applied Jeroen Schot's shiftview patchAnselm R. Garbe2007-07-241-0/+1
* added an creatnotify event handlerAnselm R. Garbe2007-06-041-1/+3
* making variable declarations in dwm.h extern, this seems to be more ansi comp...Anselm R. Garbe2007-06-011-15/+15
* referred to LICENSE file 4.2Anselm R. Garbe2007-05-301-6/+1
* Jukka also belongs to Copyright holders after all he has contributed and done...Anselm R. Garbe2007-05-301-0/+1
* added nsz to copyright holders as well, because he did a lot recentlyAnselm R. Garbe2007-05-291-0/+1
* added anydot to Copyright holders, because he contributed a lot recentlyAnselm R. Garbe2007-05-291-0/+1
* applied anydot's 3 minor patches, thank you anydotAnselm R. Garbe2007-05-291-2/+1
* fooAnselm R. Garbe2007-05-231-1/+1
* made bar togglalbleAnselm R. Garbe2007-05-151-9/+12
* applied dfenze cleanups, fixed some comments in dwm.hAnselm R. Garbe2007-05-141-4/+5
* fixed the border issue for mplayer, ff is definately broken when using F11 (f... 4.0Anselm R. Garbe2007-04-191-1/+1
* yet another fix of copyright compactisitionAnselm R. Garbe2007-04-131-1/+2
* some changes to updatesizehints, I don't change the aspect ratio algorithm no...Anselm R. Garbe2007-03-011-1/+1
* removed sendeventAnselm R. Garbe2007-02-261-1/+0
* removed an unnecessary newlineAnselm R. Garbe2007-02-241-1/+0
* removed superfluous externs (except for tags, because tags is defined in the ...Anselm R. Garbe2007-02-241-53/+53
* renamed untiled into floating, keeping tiled instead of tiling (afaik tiled s...Anselm R. Garbe2007-02-221-4/+4
* made Fnt an anonymous inner structAnselm R. Garbe2007-02-221-15/+15
* made Fnt an anonymous inner structAnselm R. Garbe2007-02-221-9/+7
* renamed versatile into untiledAnselm R. Garbe2007-02-221-4/+4
* merged focus{prev.next} into focusclient(1/-1)Anselm R. Garbe2007-02-221-2/+1
* made dwm.h more tidy (thx Jukka for the zoom() hint)Anselm R. Garbe2007-02-221-12/+11
* replaced Arg union with const char *arg, seems cleaner to me, even if we need...Anselm R. Garbe2007-02-221-20/+15
* fixing missing extern declars in dwm.h for {de,at}tach()Anselm R. Garbe2007-02-221-0/+2
* several changes, made togglemax extern and separated it from zoom() - moved z...Anselm R. Garbe2007-02-221-15/+15
* reverted accidental removal of sx, syAnselm R. Garbe2007-02-211-1/+1
* removed some global vars which should be static insteadAnselm R. Garbe2007-02-211-2/+2
* moved focus{next,prev} and nexttiled from client.c to layout.c (because those...Anselm R. Garbe2007-02-211-4/+4
* fixed quoting and a comment 3.6Anselm R. Garbe2007-02-211-1/+1
* added draw.c again (except getcolor and setfont which are helpers in main.c)Anselm R. Garbe2007-02-201-4/+6
nt">span class="Comment">//: run again when a specific memory location changes its value. This is mu's</span> <span class="Comment">//: basic technique for orchestrating the order in which different routines</span> <span class="Comment">//: operate.</span> <span class="Delimiter">:(scenario wait_for_location)</span> recipe f1 [ <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">0</span> start-running f2:recipe wait-<span class="Normal">for</span>-location <span class="Constant">1</span>:number <span class="Comment"># now wait for f2 to run and modify location 1 before using its value</span> <span class="Constant">2</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:number ] recipe f2 [ <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">34</span> ] <span class="Comment"># if we got the synchronization wrong we'd be storing 0 in location 2</span> <span class="traceContains">+mem: storing 34 in location 2</span> <span class="Comment">//: define the new state that all routines can be in</span> <span class="Delimiter">:(before &quot;End routine States&quot;)</span> WAITING<span class="Delimiter">,</span> <span class="Delimiter">:(before &quot;End routine Fields&quot;)</span> <span class="Comment">// only if state == WAITING</span> <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> waiting_on_location<span class="Delimiter">;</span> <span class="Normal">int</span> old_value_of_waiting_location<span class="Delimiter">;</span> <span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span> waiting_on_location = old_value_of_waiting_location = <span class="Constant">0</span><span class="Delimiter">;</span> <span class="Comment">//: primitive recipe to put routines in that state</span> <span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span> WAIT_FOR_LOCATION<span class="Delimiter">,</span> <span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span> Recipe_ordinal[<span class="Constant">&quot;wait-for-location&quot;</span>] = WAIT_FOR_LOCATION<span class="Delimiter">;</span> <span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span> <span class="Normal">case</span> WAIT_FOR_LOCATION: <span class="Delimiter">{</span> reagent loc = canonize<span class="Delimiter">(</span>current_instruction<span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span> Current_routine<span class="Delimiter">-&gt;</span>state = WAITING<span class="Delimiter">;</span> Current_routine<span class="Delimiter">-&gt;</span>waiting_on_location = loc<span class="Delimiter">.</span>value<span class="Delimiter">;</span> Current_routine<span class="Delimiter">-&gt;</span>old_value_of_waiting_location = Memory[loc<span class="Delimiter">.</span>value]<span class="Delimiter">;</span> trace<span class="Delimiter">(</span>Primitive_recipe_depth<span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waiting for location &quot;</span> &lt;&lt; loc<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; to change from &quot;</span> &lt;&lt; Memory[loc<span class="Delimiter">.</span>value] &lt;&lt; end<span class="Delimiter">();</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> <span class="Comment">//: scheduler tweak to get routines out of that state</span> <span class="Delimiter">:(before &quot;End Scheduler State Transitions&quot;)</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; SIZE<span class="Delimiter">(</span>Routines<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>waiting_on_location &amp;&amp; Memory[Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>waiting_on_location] != Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>old_value_of_waiting_location<span class="Delimiter">)</span> <span class="Delimiter">{</span> trace<span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waking up routine</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span> Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state = RUNNING<span class="Delimiter">;</span> Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>waiting_on_location = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>old_value_of_waiting_location = <span class="Constant">0</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> <span class="Delimiter">}</span> <span class="Comment">//: also allow waiting on a routine to stop running</span> <span class="Delimiter">:(scenario wait_for_routine)</span> recipe f1 [ <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">0</span> <span class="Constant">12</span>:number/routine<span class="Special"> &lt;- </span>start-running f2:recipe wait-<span class="Normal">for</span>-routine <span class="Constant">12</span>:number/routine <span class="Comment"># now wait for f2 to run and modify location 1 before using its value</span> <span class="Constant">3</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:number ] recipe f2 [ <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">34</span> ] <span class="traceContains">+schedule: f1</span> <span class="traceContains">+run: waiting for routine 2</span> <span class="traceContains">+schedule: f2</span> <span class="traceContains">+schedule: waking up routine 1</span> <span class="traceContains">+schedule: f1</span> <span class="Comment"># if we got the synchronization wrong we'd be storing 0 in location 3</span> <span class="traceContains">+mem: storing 34 in location 3</span> <span class="Delimiter">:(before &quot;End routine Fields&quot;)</span> <span class="Comment">// only if state == WAITING</span> <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> waiting_on_routine<span class="Delimiter">;</span> <span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span> waiting_on_routine = <span class="Constant">0</span><span class="Delimiter">;</span> <span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span> WAIT_FOR_ROUTINE<span class="Delimiter">,</span> <span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span> Recipe_ordinal[<span class="Constant">&quot;wait-for-routine&quot;</span>] = WAIT_FOR_ROUTINE<span class="Delimiter">;</span> <span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span> <span class="Normal">case</span> WAIT_FOR_ROUTINE: <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span>SIZE<span class="Delimiter">(</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span> raise &lt;&lt; current_recipe_name<span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: 'wait-for-routine' requires exactly one ingredient, but got &quot;</span> &lt;&lt; current_instruction<span class="Delimiter">().</span>to_string<span class="Delimiter">()</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!scalar<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span> raise &lt;&lt; current_recipe_name<span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: first ingredient of 'wait-for-routine' should be a routine id generated by 'start-running', but got &quot;</span> &lt;&lt; current_instruction<span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> == Current_routine<span class="Delimiter">-&gt;</span>id<span class="Delimiter">)</span> <span class="Delimiter">{</span> raise &lt;&lt; current_recipe_name<span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: routine can't wait for itself! &quot;</span> &lt;&lt; current_instruction<span class="Delimiter">().</span>to_string<span class="Delimiter">()</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> Current_routine<span class="Delimiter">-&gt;</span>state = WAITING<span class="Delimiter">;</span> Current_routine<span class="Delimiter">-&gt;</span>waiting_on_routine = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span> trace<span class="Delimiter">(</span>Primitive_recipe_depth<span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waiting for routine &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> <span class="Delimiter">:(before &quot;End Scheduler State Transitions&quot;)</span> <span class="Comment">// Wake up any routines waiting for other routines to go to sleep.</span> <span class="Comment">// Important: this must come after the scheduler loop above giving routines</span> <span class="Comment">// waiting for locations to change a chance to wake up.</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; SIZE<span class="Delimiter">(</span>Routines<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>waiting_on_routine<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> id = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>waiting_on_routine<span class="Delimiter">;</span> assert<span class="Delimiter">(</span>id != Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>id<span class="Delimiter">);</span> <span class="Comment">// routine can't wait on itself</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span> j &lt; SIZE<span class="Delimiter">(</span>Routines<span class="Delimiter">);</span> ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)-&gt;</span>id == id &amp;&amp; Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)-&gt;</span>state != RUNNING<span class="Delimiter">)</span> <span class="Delimiter">{</span> trace<span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waking up routine &quot;</span> &lt;&lt; Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>id &lt;&lt; end<span class="Delimiter">();</span> Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state = RUNNING<span class="Delimiter">;</span> Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>waiting_on_routine = <span class="Constant">0</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> <span class="Delimiter">}</span> <span class="Delimiter">}</span> <span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span> SWITCH<span class="Delimiter">,</span> <span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span> Recipe_ordinal[<span class="Constant">&quot;switch&quot;</span>] = SWITCH<span class="Delimiter">;</span> <span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span> <span class="Normal">case</span> SWITCH: <span class="Delimiter">{</span> <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> id = some_other_running_routine<span class="Delimiter">();</span> <span class="Normal">if</span> <span class="Delimiter">(</span>id<span class="Delimiter">)</span> <span class="Delimiter">{</span> assert<span class="Delimiter">(</span>id != Current_routine<span class="Delimiter">-&gt;</span>id<span class="Delimiter">);</span> Current_routine<span class="Delimiter">-&gt;</span>state = WAITING<span class="Delimiter">;</span> Current_routine<span class="Delimiter">-&gt;</span>waiting_on_routine = id<span class="Delimiter">;</span> <span class="Delimiter">}</span> <span class="Identifier">break</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> <span class="Delimiter">:(code)</span> <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> some_other_running_routine<span class="Delimiter">()</span> <span class="Delimiter">{</span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; SIZE<span class="Delimiter">(</span>Routines<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span>i == Current_routine_index<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span> assert<span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> != Current_routine<span class="Delimiter">);</span> assert<span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>id != Current_routine<span class="Delimiter">-&gt;</span>id<span class="Delimiter">);</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state == RUNNING<span class="Delimiter">)</span> <span class="Identifier">return</span> Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>id<span class="Delimiter">;</span> <span class="Delimiter">}</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span> <span class="Delimiter">}</span> </pre> </body> </html> <!-- vim: set foldmethod=manual : -->