home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / pascal / pdial / source / tools.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1993-07-09  |  4.8 KB  |  231 lines

  1. unit tools;
  2.  
  3. interface
  4.  
  5. uses gem;
  6.  
  7. type 
  8.     GRECT            =    record
  9.                             g_x, g_y, g_w, g_h    :    integer;
  10.                         end;    
  11. type
  12.     CALLProc    =    procedure(dial: AESTreePtr; obj: integer);                    
  13.     MAPProc    =    function(tree: AESTreePtr; obj: integer): boolean;
  14.     
  15. function min(a, b: integer): integer;
  16. function max(a, b: integer): integer;
  17.  
  18. function hiword(l: longint): word;
  19. function loword(l: longint): word;
  20.  
  21. function  get_cookie(cookie: longint): pointer;
  22.  
  23. procedure set_state  (var obj: AESObject; state: integer);
  24. procedure unset_state(var obj: AESObject; state: integer);
  25. function  is_state   (var obj: AESObject; state: integer): boolean;
  26.    
  27. procedure set_flag  (var obj: AESObject; flag: integer);
  28. procedure unset_flag(var obj: AESObject; flag: integer);
  29. function  is_flag   (var obj: AESObject; flag: integer): boolean;
  30.  
  31. procedure deselect(var obj: AESObject);
  32. procedure draw_object(tree: AESTreePtr; obj: integer);
  33. function  is_enabled(var obj: AESObject): boolean;
  34.  
  35. procedure maptree(tree: AESTreePtr; this, last: integer; 
  36.                         routine: MAPProc);
  37.                     
  38. function isspace(c: char): boolean;
  39.  
  40.  
  41. (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
  42.  
  43. implementation
  44.  
  45. uses tos;
  46.  
  47. function min(a, b: integer): integer;
  48. begin
  49.    if a < b then
  50.        min := a
  51.    else
  52.       min := b;
  53. end;
  54.  
  55. function max(a, b: integer): integer;
  56. begin
  57.    if a > b then
  58.        max := a
  59.    else
  60.       max := b;
  61. end;
  62.  
  63. function hiword(l: longint): word;
  64. begin
  65.     hiword := (l shr 16) and $ffff;
  66. end;
  67.  
  68. function loword(l: longint): word;
  69. begin
  70.     loword := l and $ffff;
  71. end;
  72.  
  73. function get_cookie(cookie: longint): pointer;
  74. type
  75.     COOKJAR    =    record
  76.                         id        :    longint;
  77.                         ptr    :    ^longint;
  78.                     end;    
  79.     COOKTAB    =    array [0..255] of COOKJAR;    
  80.     CTABPtr    =    ^COOKTAB;                    
  81. var
  82.     oldstack        :    longint;
  83.     cookiejar    :    COOKTAB;
  84.     p_cookies    :    CTABPtr absolute $5a0;
  85.     lpcookies    :    longint absolute $5a0;
  86.     lpcval        :    longint;
  87.     i                :    integer;
  88. begin
  89.     oldstack  := Super(pointer(0));
  90.     cookiejar := p_cookies^;
  91.     lpcval     := lpcookies;
  92.     Super(pointer(oldstack));
  93.     
  94.     if lpcval = 0 then 
  95.     begin
  96.         get_cookie := NIL;
  97.         exit;
  98.     end;
  99.     
  100.     i := 0;
  101.     while cookiejar[i].id <> 0 do
  102.     begin
  103.         if cookiejar[i].id = cookie then
  104.         begin
  105.             get_cookie := cookiejar[i].ptr;
  106.             exit;
  107.         end
  108.         else
  109.             inc(i);    
  110.     end;
  111.     get_cookie := NIL;
  112. end;    
  113.  
  114. procedure set_state(var obj: AESObject; state: integer);
  115. begin
  116.     with obj do
  117.         ob_state := ob_state or state;
  118. end;
  119.  
  120. procedure unset_state(var obj: AESObject; state: integer);
  121. begin
  122.     with obj do
  123.         ob_state := ob_state and not(state);
  124. end;
  125.  
  126. function  is_state(var obj: AESObject; state: integer): boolean;
  127. begin
  128.     if (obj.ob_state and state) <> 0 then
  129.         is_state := TRUE
  130.     else
  131.         is_state := FALSE;
  132. end;        
  133.    
  134. procedure set_flag(var obj: AESObject; flag: integer);
  135. begin
  136.     with obj do
  137.         ob_flags := ob_flags or flag;
  138. end;
  139.  
  140. procedure unset_flag(var obj: AESObject; flag: integer);
  141. begin
  142.     with obj do
  143.         ob_flags := ob_flags and not(flag);
  144. end;
  145.  
  146. function  is_flag  (var obj: AESObject; flag: integer): boolean;
  147. begin
  148.     if (obj.ob_flags and flag) <> 0 then
  149.         is_flag := TRUE
  150.     else
  151.         is_flag := FALSE;
  152. end;    
  153.  
  154. procedure deselect(var obj: AESObject);
  155. begin
  156.     with obj do
  157.         ob_state    := ob_state and (not SELECTED);
  158. end;          
  159.  
  160. procedure draw_object(tree: AESTreePtr; obj: integer);
  161. var
  162.     x, y    :    integer; 
  163. begin
  164.     (*
  165.     objc_offset(tree, obj, x, y);
  166.     objc_draw(tree, obj, MAX_DEPTH, x, y, tree^[obj].ob_width, 
  167.               tree^[obj].ob_height);
  168.     *)
  169.     with tree^[ROOT] do
  170.         objc_draw(tree, obj, MAX_DEPTH, ob_x, ob_y, ob_width, ob_height);              
  171. end;    
  172.  
  173.  
  174. function is_enabled(var obj: AESObject): boolean;
  175. begin
  176.     is_enabled := TRUE;
  177.     if is_state(obj, DISABLED) = TRUE then 
  178.         is_enabled := FALSE;
  179.     if is_flag(obj, SELECTABLE) = FALSE then
  180.         is_enabled := FALSE;
  181. end;
  182.  
  183. procedure tree_walk(dial: AESTreePtr; start: integer; 
  184.                     callrout: CALLProc);
  185. var
  186.     i    :    integer;                    
  187. begin
  188.     i := dial^[start].ob_head;
  189.     while (i <> start) and (i <> -1) do
  190.     begin
  191.         callrout(dial, i);
  192.         tree_walk(dial, i, callrout);
  193.         i := dial^[i].ob_next;
  194.     end;
  195. end;                    
  196.  
  197. (* Non-cursive traverse of an object tree.        *)
  198. (* Adapted from: Tim Oren, Professional GEM      *)
  199. procedure maptree(tree: AESTreePtr; this, last: integer; 
  200.                         routine: MAPProc);
  201. var
  202.     tmp1    :    integer;
  203. begin
  204.     tmp1 := this;
  205.     while (this <> last) and (this <> -1) do                            
  206.         if tree^[this].ob_tail <> tmp1 then
  207.         begin
  208.             tmp1 := this;
  209.             this := -1;
  210.             if routine(tree, tmp1) then
  211.                 this := tree^[tmp1].ob_head;
  212.             if this = -1 then
  213.                 this := tree^[tmp1].ob_next;
  214.         end
  215.         else
  216.         begin
  217.             tmp1 := this;
  218.             this := tree^[tmp1].ob_next;
  219.         end;
  220. end;            
  221.  
  222. function isspace(c: char): boolean;
  223. begin
  224.     if c in [#9, #13, #32] then
  225.         isspace := TRUE
  226.     else
  227.         isspace := FALSE;    
  228. end;
  229.  
  230.  
  231. end.