Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. with Ada.Text_IO; with Ada.Integer_Text_IO;
  2. use Ada.Text_IO; use Ada.Integer_Text_IO;
  3.  
  4. procedure a1 is
  5.  
  6. task type processor is
  7. entry reset (pNum : in Integer;
  8. parent : in Integer);
  9. entry ack;
  10. end processor;
  11.  
  12. pArray : array (1..120) of processor;
  13.  
  14. task body processor is
  15.  
  16. beenReset : Integer := 0; --Has process been reset? Default to false (0)
  17. Acks : Integer := 0; --Number of Acks this process has received
  18. resetBool : Boolean := False;
  19. temp, temp2 : Integer := 0;
  20.  
  21. begin
  22. while Acks < 4 loop
  23. select
  24. when beenReset = 0 =>
  25. accept reset (pNum : in Integer;
  26. parent : in Integer) do
  27. beenReset := 1;
  28. resetBool := True;
  29. temp := pNum;
  30.  
  31. Put ("Task #/Acks:"); Put (temp); Put (Acks);
  32. New_Line;
  33. end reset;
  34. or
  35. when beenReset > 0 =>
  36. accept reset (pNum : in Integer;
  37. parent : in Integer) do
  38. temp := pNum;
  39. pArray(parent).ack;
  40.  
  41. Put ("Autoack Task #/Acks:"); Put (temp); Put (Acks);
  42. New_Line;
  43. end reset;
  44. or
  45. accept ack do
  46. Acks := Acks + 1;
  47. Put ("# Acks"); Put (Acks);
  48. New_Line;
  49. end ack;
  50. end select;
  51.  
  52. Put ("Outside select, resetBool/beenReset");
  53. if resetBool then Put ("true"); Put (beenReset); New_Line;
  54. else Put ("false"); Put (beenReset); New_Line;
  55. end if;
  56.  
  57. if resetBool then
  58. resetBool := False;
  59. delay 0.01;
  60.  
  61. --reset left processor
  62. temp2 := temp;
  63. temp := temp2 - 1;
  64. if temp mod 10 = 0 then
  65. temp := temp + 10;
  66. end if;
  67. pArray(temp).reset(temp,temp2);
  68. delay 0.0118;
  69.  
  70. --reset right processor
  71. temp := temp2 + 1;
  72. if temp mod 10 = 1 then
  73. temp := temp - 10;
  74. end if;
  75. pArray(temp).reset(temp,temp2);
  76. delay 0.0111;
  77.  
  78. --reset above processor
  79. temp := temp2 - 10;
  80. if temp < 1 then
  81. temp := temp + 120;
  82. end if;
  83. pArray(temp).reset(temp,temp2);
  84. delay 0.0121;
  85.  
  86. --reset below processor
  87. temp := temp2 - 1;
  88. if temp > 120 then
  89. temp := temp - 120;
  90. end if;
  91. pArray(temp).reset(temp,temp2);
  92. delay 0.0139;
  93. end if;
  94. end loop;
  95. end processor;
  96.  
  97. begin
  98. Put_Line ("Hello world");
  99. pArray(1).reset(pNum => 1,parent => 1);
  100. end a1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement