# | Line 35 | Line 35 | |
---|---|---|
35 | * | |
36 | * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). | |
37 | * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). | |
38 | < | * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). |
39 | < | * [4] Vardeman, Stocker & Gezelter, in progress (2010). |
38 | > | * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008). |
39 | > | * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). |
40 | > | * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). |
41 | */ | |
42 | ||
43 | #include <iostream> | |
44 | #include <cstdlib> | |
45 | + | |
46 | + | #ifdef _MSC_VER |
47 | + | #include <Windows.h> |
48 | + | #include <stdio.h> |
49 | + | #include <io.h> |
50 | + | #define isatty _isatty |
51 | + | #define fileno _fileno |
52 | + | #else |
53 | + | #include <cstdio> |
54 | #include <sys/ioctl.h> | |
55 | + | #include <unistd.h> |
56 | + | #endif |
57 | + | |
58 | #ifdef IS_MPI | |
59 | #include <mpi.h> | |
60 | #endif | |
61 | + | |
62 | #include "utils/ProgressBar.hpp" | |
63 | ||
64 | using namespace std; | |
# | Line 73 | Line 87 | namespace OpenMD { | |
87 | ||
88 | void ProgressBar::update() { | |
89 | ||
76 | – | int width; |
77 | – | |
90 | #ifdef IS_MPI | |
91 | if (MPI::COMM_WORLD.Get_rank() == 0) { | |
92 | #endif | |
# | Line 82 | Line 94 | namespace OpenMD { | |
94 | // only do the progress bar if we are actually running in a tty: | |
95 | if (isatty(fileno(stdout)) && (getenv("SGE_TASK_ID")==NULL)) { | |
96 | // get the window width: | |
97 | + | |
98 | + | int width = 0; |
99 | + | #ifdef _MSC_VER |
100 | + | CONSOLE_SCREEN_BUFFER_INFO csbi; |
101 | + | HANDLE hConsole = GetStdHandle( STD_OUTPUT_HANDLE ); |
102 | + | int ret = GetConsoleScreenBufferInfo(hConsole, &csbi); |
103 | + | if(ret) { |
104 | + | width = csbi.dwSize.X - 1; |
105 | + | } |
106 | + | #else |
107 | struct winsize w; | |
108 | ioctl(fileno(stdout), TIOCGWINSZ, &w); | |
109 | width = w.ws_col; | |
110 | + | #endif |
111 | ||
112 | // handle the case when the width is returned as a nonsensical value. | |
113 | if (width <= 0) width = 80; | |
# | Line 111 | Line 134 | namespace OpenMD { | |
134 | struct tm * ender = localtime(&end_); | |
135 | char buffer[22]; | |
136 | strftime(buffer, 22, "%a %b %d @ %I:%M %p", ender); | |
137 | < | |
137 | > | |
138 | > | #ifdef _MSC_VER |
139 | > | csbi.dwCursorPosition.X = 0; |
140 | > | SetConsoleCursorPosition(hConsole, csbi.dwCursorPosition); |
141 | > | #else |
142 | cout << '\r'; | |
143 | + | #endif |
144 | cout.width(3); | |
145 | cout << right << int(percent); | |
146 | cout.width(3); |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |