12
12
<a name="line2"> 2: </a> #include <A href="../../../../include/petsc.h.html">petsc.h</A>
13
13
<a name="line3"> 3: </a> #include <A href="../../../../include/petscsys.h.html">petscsys.h</A>
15
<a name="line5"> 5: </a><font color="#B22222">/*@C</font>
16
<a name="line6"> 6: </a><font color="#B22222"> <A href="../../../../docs/manualpages/Sys/PetscPopUpSelect.html#PetscPopUpSelect">PetscPopUpSelect</A> - Pops up a windows with a list of choices; allows one to be chosen</font>
18
<a name="line8"> 8: </a><font color="#B22222"> Collective on MPI_Comm</font>
20
<a name="line10"> 10: </a><font color="#B22222"> Input Parameters:</font>
21
<a name="line11"> 11: </a><font color="#B22222">+ <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> - MPI communicator, all processors in communicator must call this but input </font>
22
<a name="line12"> 12: </a><font color="#B22222"> from first communicator is the only one that is used</font>
23
<a name="line13"> 13: </a><font color="#B22222">. machine - location to run popup program or PETSC_NULL</font>
24
<a name="line14"> 14: </a><font color="#B22222">. title - text to display above choices</font>
25
<a name="line15"> 15: </a><font color="#B22222">. n - number of choices</font>
26
<a name="line16"> 16: </a><font color="#B22222">- choices - array of strings</font>
28
<a name="line18"> 18: </a><font color="#B22222"> Output Parameter:</font>
29
<a name="line19"> 19: </a><font color="#B22222">. choice - integer indicating which one was selected</font>
31
<a name="line21"> 21: </a><font color="#B22222"> Level: developer</font>
33
<a name="line23"> 23: </a><font color="#B22222"> Notes:</font>
34
<a name="line24"> 24: </a><font color="#B22222"> Uses DISPLAY variable or -display option to determine where it opens the window</font>
36
<a name="line26"> 26: </a><font color="#B22222"> Currently this uses a file ~username/.popuptmp to pass the value back from the </font>
37
<a name="line27"> 27: </a><font color="#B22222"> xterm; hence this program must share a common file system with the machine</font>
38
<a name="line28"> 28: </a><font color="#B22222"> parameter passed in below.</font>
40
<a name="line30"> 30: </a><font color="#B22222"> Concepts: popup</font>
41
<a name="line31"> 31: </a><font color="#B22222"> Concepts: user selection</font>
42
<a name="line32"> 32: </a><font color="#B22222"> Concepts: menu</font>
44
<a name="line34"> 34: </a><font color="#B22222">@*/</font>
45
<a name="line35"> 35: </a><strong><font color="#4169E1"><a name="PetscPopUpSelect"></a>int <A href="../../../../docs/manualpages/Sys/PetscPopUpSelect.html#PetscPopUpSelect">PetscPopUpSelect</A>(MPI_Comm <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,char *machine,char *title,int n,char **choices,int *choice)</font></strong>
46
<a name="line36"> 36: </a>{
47
<a name="line37"> 37: </a> int i,ierr,<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>,rows = n + 2,cols,len;
48
<a name="line38"> 38: </a> char buffer[2048],display[128],geometry[64];
49
<a name="line39"> 39: </a> FILE *fp;
51
<a name="line42"> 42: </a> <font color="#4169E1">if</font> (!title) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must pass in a title line"</font>);
52
<a name="line43"> 43: </a> <font color="#4169E1">if</font> (n < 1) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must pass in at least one selection"</font>);
53
<a name="line44"> 44: </a> <font color="#4169E1">if</font> (n == 1) {*choice = 0; <font color="#4169E1">return</font>(0);}
55
<a name="line46"> 46: </a> <A href="../../../../docs/manualpages/Sys/PetscStrlen.html#PetscStrlen">PetscStrlen</A>(title,&cols);
56
<a name="line47"> 47: </a> <font color="#4169E1">for</font> (i=0; i<n; i++) {
57
<a name="line48"> 48: </a> <A href="../../../../docs/manualpages/Sys/PetscStrlen.html#PetscStrlen">PetscStrlen</A>(choices[i],&len);
58
<a name="line49"> 49: </a> cols = PetscMax(cols,len);
59
<a name="line50"> 50: </a> }
60
<a name="line51"> 51: </a> cols += 4;
61
<a name="line52"> 52: </a> sprintf(geometry,<font color="#666666">" -geometry %dx%d "</font>,cols,rows);
62
<a name="line53"> 53: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcpy.html#PetscStrcpy">PetscStrcpy</A>(buffer,<font color="#666666">"xterm -bw 100 -bd blue +sb -display "</font>);
63
<a name="line54"> 54: </a> PetscGetDisplay(display,128);
64
<a name="line55"> 55: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,display);
65
<a name="line56"> 56: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,geometry);
66
<a name="line57"> 57: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,<font color="#666666">" -e ${PETSC_DIR}/bin/popup "</font>);
68
<a name="line59"> 59: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,<font color="#666666">"""</font>);
69
<a name="line60"> 60: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,title);
70
<a name="line61"> 61: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,<font color="#666666">"" "</font>);
71
<a name="line62"> 62: </a> <font color="#4169E1">for</font> (i=0; i<n; i++) {
72
<a name="line63"> 63: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,<font color="#666666">"""</font>);
73
<a name="line64"> 64: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,choices[i]);
74
<a name="line65"> 65: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,<font color="#666666">"" "</font>);
75
<a name="line66"> 66: </a> }
76
<a name="line67"> 67: </a> <A href="../../../../docs/manualpages/Sys/PetscPOpen.html#PetscPOpen">PetscPOpen</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,machine,buffer,<font color="#666666">"r"</font>,&fp);
77
<a name="line68"> 68: </a> PetscPClose(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,fp);
79
<a name="line70"> 70: </a> <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_rank.html#MPI_Comm_rank">MPI_Comm_rank</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>);
80
<a name="line71"> 71: </a> <font color="#4169E1">if</font> (!<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>) {
81
<a name="line72"> 72: </a> FILE *fd;
83
<a name="line74"> 74: </a> <A href="../../../../docs/manualpages/Sys/PetscFOpen.html#PetscFOpen">PetscFOpen</A>(PETSC_COMM_SELF,<font color="#666666">"${HOMEDIRECTORY}/.popuptmp"</font>,<font color="#666666">"r"</font>,&fd);
84
<a name="line75"> 75: </a> fscanf(fd,<font color="#666666">"%d"</font>,choice);
85
<a name="line76"> 76: </a> *choice -= 1;
86
<a name="line77"> 77: </a> <font color="#4169E1">if</font> (*choice < 0 || *choice > n-1) <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Selection %d out of range"</font>,*choice);
87
<a name="line78"> 78: </a> <A href="../../../../docs/manualpages/Sys/PetscFClose.html#PetscFClose">PetscFClose</A>(PETSC_COMM_SELF,fd);
88
<a name="line79"> 79: </a> }
89
<a name="line80"> 80: </a> <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Bcast.html#MPI_Bcast">MPI_Bcast</A>(choice,1,MPI_INT,0,<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>);
91
<a name="line82"> 82: </a> <font color="#4169E1">return</font>(0);
92
<a name="line83"> 83: </a>}
15
<a name="line7"> 7: </a><font color="#B22222">/*@C</font>
16
<a name="line8"> 8: </a><font color="#B22222"> <A href="../../../../docs/manualpages/Sys/PetscPopUpSelect.html#PetscPopUpSelect">PetscPopUpSelect</A> - Pops up a windows with a list of choices; allows one to be chosen</font>
18
<a name="line10"> 10: </a><font color="#B22222"> Collective on <A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A></font>
20
<a name="line12"> 12: </a><font color="#B22222"> Input Parameters:</font>
21
<a name="line13"> 13: </a><font color="#B22222">+ <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> - MPI communicator, all processors in communicator must call this but input </font>
22
<a name="line14"> 14: </a><font color="#B22222"> from first communicator is the only one that is used</font>
23
<a name="line15"> 15: </a><font color="#B22222">. machine - location to run popup program or <A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A></font>
24
<a name="line16"> 16: </a><font color="#B22222">. title - text to display above choices</font>
25
<a name="line17"> 17: </a><font color="#B22222">. n - number of choices</font>
26
<a name="line18"> 18: </a><font color="#B22222">- choices - array of strings</font>
28
<a name="line20"> 20: </a><font color="#B22222"> Output Parameter:</font>
29
<a name="line21"> 21: </a><font color="#B22222">. choice - integer indicating which one was selected</font>
31
<a name="line23"> 23: </a><font color="#B22222"> Level: developer</font>
33
<a name="line25"> 25: </a><font color="#B22222"> Notes:</font>
34
<a name="line26"> 26: </a><font color="#B22222"> Uses DISPLAY variable or -display option to determine where it opens the window</font>
36
<a name="line28"> 28: </a><font color="#B22222"> Currently this uses a file ~username/.popuptmp to pass the value back from the </font>
37
<a name="line29"> 29: </a><font color="#B22222"> xterm; hence this program must share a common file system with the machine</font>
38
<a name="line30"> 30: </a><font color="#B22222"> parameter passed in below.</font>
40
<a name="line32"> 32: </a><font color="#B22222"> Concepts: popup</font>
41
<a name="line33"> 33: </a><font color="#B22222"> Concepts: user selection</font>
42
<a name="line34"> 34: </a><font color="#B22222"> Concepts: menu</font>
44
<a name="line36"> 36: </a><font color="#B22222">@*/</font>
45
<a name="line37"> 37: </a><strong><font color="#4169E1"><a name="PetscPopUpSelect"></a>int <A href="../../../../docs/manualpages/Sys/PetscPopUpSelect.html#PetscPopUpSelect">PetscPopUpSelect</A>(<A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A> <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,char *machine,char *title,int n,char **choices,int *choice)</font></strong>
46
<a name="line38"> 38: </a>{
47
<a name="line39"> 39: </a> int i,ierr,<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>,rows = n + 2,cols,len;
48
<a name="line40"> 40: </a> char buffer[2048],display[128],geometry[64];
49
<a name="line41"> 41: </a> FILE *fp;
51
<a name="line44"> 44: </a> <font color="#4169E1">if</font> (!title) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must pass in a title line"</font>);
52
<a name="line45"> 45: </a> <font color="#4169E1">if</font> (n < 1) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"Must pass in at least one selection"</font>);
53
<a name="line46"> 46: </a> <font color="#4169E1">if</font> (n == 1) {*choice = 0; <font color="#4169E1">return</font>(0);}
55
<a name="line48"> 48: </a> <A href="../../../../docs/manualpages/Sys/PetscStrlen.html#PetscStrlen">PetscStrlen</A>(title,&cols);
56
<a name="line49"> 49: </a> <font color="#4169E1">for</font> (i=0; i<n; i++) {
57
<a name="line50"> 50: </a> <A href="../../../../docs/manualpages/Sys/PetscStrlen.html#PetscStrlen">PetscStrlen</A>(choices[i],&len);
58
<a name="line51"> 51: </a> cols = <A href="../../../../docs/manualpages/Sys/PetscMax.html#PetscMax">PetscMax</A>(cols,len);
59
<a name="line52"> 52: </a> }
60
<a name="line53"> 53: </a> cols += 4;
61
<a name="line54"> 54: </a> sprintf(geometry,<font color="#666666">" -geometry %dx%d "</font>,cols,rows);
62
<a name="line55"> 55: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcpy.html#PetscStrcpy">PetscStrcpy</A>(buffer,<font color="#666666">"xterm -bw 100 -bd blue +sb -display "</font>);
63
<a name="line56"> 56: </a> PetscGetDisplay(display,128);
64
<a name="line57"> 57: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,display);
65
<a name="line58"> 58: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,geometry);
66
<a name="line59"> 59: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,<font color="#666666">" -e ${PETSC_DIR}/bin/popup "</font>);
68
<a name="line61"> 61: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,<font color="#666666">"\""</font>);
69
<a name="line62"> 62: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,title);
70
<a name="line63"> 63: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,<font color="#666666">"\" "</font>);
71
<a name="line64"> 64: </a> <font color="#4169E1">for</font> (i=0; i<n; i++) {
72
<a name="line65"> 65: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,<font color="#666666">"\""</font>);
73
<a name="line66"> 66: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,choices[i]);
74
<a name="line67"> 67: </a> <A href="../../../../docs/manualpages/Sys/PetscStrcat.html#PetscStrcat">PetscStrcat</A>(buffer,<font color="#666666">"\" "</font>);
75
<a name="line68"> 68: </a> }
76
<a name="line69"> 69: </a> <A href="../../../../docs/manualpages/Sys/PetscPOpen.html#PetscPOpen">PetscPOpen</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,machine,buffer,<font color="#666666">"r"</font>,&fp);
77
<a name="line70"> 70: </a> PetscPClose(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,fp);
79
<a name="line72"> 72: </a> <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Comm_rank.html#MPI_Comm_rank">MPI_Comm_rank</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,&<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>);
80
<a name="line73"> 73: </a> <font color="#4169E1">if</font> (!<A href="../../../../docs/manualpages/Sys/rank.html#rank">rank</A>) {
81
<a name="line74"> 74: </a> FILE *fd;
83
<a name="line76"> 76: </a> <A href="../../../../docs/manualpages/Sys/PetscFOpen.html#PetscFOpen">PetscFOpen</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_SELF.html#PETSC_COMM_SELF">PETSC_COMM_SELF</A>,<font color="#666666">"${HOMEDIRECTORY}/.popuptmp"</font>,<font color="#666666">"r"</font>,&fd);
84
<a name="line77"> 77: </a> fscanf(fd,<font color="#666666">"%d"</font>,choice);
85
<a name="line78"> 78: </a> *choice -= 1;
86
<a name="line79"> 79: </a> <font color="#4169E1">if</font> (*choice < 0 || *choice > n-1) <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Selection %d out of range"</font>,*choice);
87
<a name="line80"> 80: </a> <A href="../../../../docs/manualpages/Sys/PetscFClose.html#PetscFClose">PetscFClose</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_SELF.html#PETSC_COMM_SELF">PETSC_COMM_SELF</A>,fd);
88
<a name="line81"> 81: </a> }
89
<a name="line82"> 82: </a> <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Bcast.html#MPI_Bcast">MPI_Bcast</A>(choice,1,MPI_INT,0,<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>);
91
<a name="line84"> 84: </a> <font color="#4169E1">return</font>(0);
92
<a name="line85"> 85: </a>}