Charj: Construct Range when a range is given.
[charm.git] / src / langs / pvmc / pvmc_conv.c
1 #include <stdio.h>
2 #include <stddef.h>
3 #include <converse.h>
4 #include "pvmc.h"
5
6 void pvmc_init(void)
7 {
8   pvmc_init_bufs();
9   pvmc_init_comm();
10   pvmc_init_groups();
11 }
12
13 int pvm_mytid(void)
14 {
15   /*
16 #ifdef PVM_DEBUG
17   PRINTF("Pe(%d) tid=%d:pvm_mytid()\n",MYPE(),PE2TID(MYPE()+1));
18 #endif
19 */
20   return PE2TID(MYPE());
21 }
22
23 int pvm_exit(void)
24 {
25   int sleepval;
26
27 #ifdef PVM_DEBUG
28   PRINTF("Pe(%d) tid=%d:pvm_exit()\n",MYPE(),pvm_mytid());
29 #endif
30
31   ConverseExit();
32 }
33
34 int pvm_spawn(char *task, char **argv, int flag,
35               char *where, int ntask, int *tids)
36 {
37   int i;
38   int numt;
39
40 #ifdef PVM_DEBUG
41   PRINTF("Pe(%d) tid=%d:pvm_spawn()\n",MYPE(),pvm_mytid());
42 #endif
43
44   numt = ntask;
45   if (numt > CmiNumPes())
46     numt = CmiNumPes();
47 #ifdef PVM_DEBUG
48   PRINTF("%s: preping %d tids (wanted to prep %d)\n",__FILE__,numt,ntask);
49 #endif
50   for(i=0; i<numt; i++)
51   {
52     tids[i]=PE2TID(i);
53 #ifdef PVM_DEBUG
54     PRINTF("Pe(%d) tids[%d]=%d  (%d)\n",MYPE(),i,PE2TID(i),tids[i]);
55 #endif
56   }
57     
58   return numt;
59 }
60
61 int pvm_parent(void)
62 {
63 #ifdef PVM_DEBUG
64   PRINTF("Pe(%d) tid=%d:pvm_parent()\n",MYPE(),pvm_mytid());
65 #endif
66
67   /*  
68    *  I think it would be better to return PvmNoParent, but
69    *  this may make sense too, and it makes namd2/DPMTA work.
70    */
71   return 1;
72 }
73
74 int pvm_config(int *nhost, int *narch, struct pvmhostinfo **hostp)
75 {
76   int i, nh;
77
78 #ifdef PVM_DEBUG
79   PRINTF("tid=%d:pvm_config(%x,%x,%x)\n",pvm_mytid(),nhost,narch,hostp);
80 #endif
81
82   printf("tid=%d:pvm_config(%x,%x,%x)\n",pvm_mytid(),nhost,narch,hostp);
83   printf("%d\n",*nhost);
84   /*  sleep(10); */
85   
86   if (nhost)
87     *nhost=nh=CmiNumPes();
88   if (narch)
89     *narch=1;
90
91   *hostp = (struct pvmhostinfo *)MALLOC(nh*sizeof(struct pvmhostinfo));
92
93   if (*hostp == (struct pvmhostinfo *)NULL)
94     return -1;
95
96   for(i=0; i<nh; i++) {
97     hostp[i]->hi_tid=PE2TID(i);
98     hostp[i]->hi_name="";
99     hostp[i]->hi_arch="CONVERSE";
100     hostp[i]->hi_speed=1000;
101   }
102
103   return 0;
104 }
105
106 int pvm_tasks(int which, int *ntask, struct pvmtaskinfo **taskp)
107 {
108   int i;
109
110 #ifdef PVM_DEBUG
111   PRINTF("tid=%d:pvm_tasks(%d,%x,%x)\n",pvm_mytid(),which,ntask,taskp);
112 #endif
113
114   if (which==0)
115     *ntask=CmiNumPes();
116   else
117     *ntask=1;
118
119   *taskp = (struct pvmtaskinfo *)MALLOC(*ntask * sizeof(struct pvmtaskinfo));
120   
121   if (*taskp == (struct pvmtaskinfo *)NULL)
122     return -1;
123
124   for(i=0; i<*ntask; i++) {
125     taskp[i]->ti_tid=PE2TID(i);
126     taskp[i]->ti_ptid=PE2TID(0);
127     taskp[i]->ti_host=PE2TID(i);
128     taskp[i]->ti_flag=0;
129     taskp[i]->ti_a_out="";
130   }     
131
132   return 0;
133 }
134
135 int pvm_setopt(int what, int val)
136 {
137 #ifdef PVM_DEBUG
138   PRINTF("tid=%d:pvm_setopt(%d,%d)\n",pvm_mytid(),what,val);
139 #endif
140   return val;
141 }
142
143 int pvm_gsize(char *group)
144 {
145 #ifdef PVM_DEBUG
146   PRINTF("tid=%d:pvm_gsize(%s)\n",pvm_mytid(),group);
147 #endif
148   return CmiNumPes();
149 }
150
151 int pvm_gettid(char *group, int inum)
152 {
153 #ifdef PVM_DEBUG
154   PRINTF("tid=%d:pvm_gettid(%s,%d)\n",pvm_mytid(),group,inum);
155 #endif
156   return inum;
157 }
158
159 int pvm_catchout(FILE *ff)
160 {
161   PRINTF("Warning: pvm_catchout not implemented\n");
162 }