talef - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       talef (2281B)
       ---
            1 // runtime library definitions
            2 if objtype=="mips2" then objtype="mips";
            3 
            4 include("/sys/src/alef/lib/"+objtype+"/acid");
            5 
            6 defn
            7 pchan(addr)
            8 {
            9         local l, n;
           10 
           11         complex Chan addr;
           12 
           13         if addr.sva then
           14                 print("Sender waiting: buffer ", addr.sva, "\n");
           15         else
           16                 print("No sender\n");
           17 
           18         if addr.rva then
           19                 print("Receiver waiting: buffer ", addr.rva, "\n");
           20         else
           21                 print("No receiver\n");
           22 
           23         if addr.async then {
           24                 n = 0;
           25                 l = addr.qh;
           26                 while l do {
           27                         n = n+1;
           28                         l = l.next;
           29                 }
           30                 print("Async channel\n\t", n\D, " messsages queued\n\t");
           31                 l = addr.free;
           32                 while l do {
           33                         n = n+1;
           34                         l = l.next;
           35                 }
           36                 print(n\D, " free buffers\n");
           37         }
           38                 
           39         if addr.selt then {
           40                 l = "send";
           41                 if addr.selt then
           42                         l = "receive";
           43                 print("In select ", l, ": task ", addr.selt\X, "\n");
           44                 labstk(addr.selt);
           45         }
           46 }
           47 
           48 defn
           49 tdb()
           50 {
           51         local ta, tq;
           52 
           53         // Private proc tdb pointer
           54         ta = *{        0x7fffe000,
           55                 0x0ffdf000,
           56                 0xbfff5000 }[match(objtype, {"mips", "sparc", "386"})];
           57 
           58         complex Tdb ta;
           59 
           60         print("tdb ", ta.ntask, " tasks:");
           61          if *ta then
           62                 print("locked\n");
           63         else
           64                 print("unlocked\n");
           65 
           66         if ta.ctask then {
           67                 print("current task ", ta.ctask, "\n");
           68                 Task(ta.ctask);
           69         }
           70         else
           71                 print("proc is idle\n");
           72 
           73         tq = (Task)ta.runhd;
           74         if tq == 0 then
           75                 return {};
           76 
           77         print("Tasks ready to run:\n");
           78         while tq != 0 do {
           79                 print("Task(", tq, ")\n");
           80                 tq = tq.link;                
           81         }
           82 }
           83 
           84 defn
           85 lselect(addr)
           86 {
           87         local c;
           88 
           89         complex Task addr;
           90         complex Chan c;
           91 
           92         c = addr.slist;
           93         if c == 0 then {
           94                 print("No select pending\n");
           95                 return {};
           96         }
           97         while c do {
           98                 print("pchan(", c\X, ")\n");
           99                 c = c.sellink;
          100         }
          101 }
          102 
          103 defn
          104 pqlock(addr)
          105 {
          106         local t;
          107 
          108         complex QLock addr;
          109 
          110         if *addr then
          111                 print("QLock is under modification\n");
          112         if addr.used == 0 then
          113                 return {};
          114 
          115         print("QLock is held\n");
          116         t = addr.queue;
          117         complex Task t;
          118         if t == 0 then {
          119                 print("No tasks waiting\n");
          120                 return {};
          121         }
          122         print("Tasks waiting:\n");
          123         while t do {
          124                 print("Task(", t, ")\n");
          125                 tq = tq.qlink;                
          126         }
          127 }
          128 
          129 srcpath = {
          130         "./",
          131         "/sys/src/alef/lib/port/",
          132         "/sys/src/alef/lib/p9/",
          133         "/sys/src/alef/lib/"+objtype+"/"
          134 };
          135 
          136 defn labstk(l)
          137 {
          138         if objtype == "386" then
          139                 _stk(ALEF_switch, *l, linkreg(0), 0);
          140         else
          141                 _stk(*(l+4), *l, linkreg(0), 0);
          142 }
          143 
          144 print(acidfile);
          145 
          146 include("/sys/src/alef/lib/port/acid."+objtype);
          147 include("/sys/src/alef/lib/p9/acid."+objtype);