+void PrintAlign(int Row, int Col, int Width, const char *Left, char Pad1, const char *Mid, char Pad2, const char *Right, ...)
+{
+ int lLen, mLen, rLen;
+ int times;
+
+ va_list args;
+
+ // Get the length of the strings
+ va_start(args, Right);
+ lLen = vsnprintf(NULL, 0, Left, args);
+ mLen = vsnprintf(NULL, 0, Mid, args);
+ rLen = vsnprintf(NULL, 0, Right, args);
+ va_end(args);
+
+ // Sanity check
+ if( lLen + mLen/2 > Width/2 || mLen/2 + rLen > Width/2 ) {
+ return ; // TODO: What to do?
+ }
+
+ move(Row, Col);
+
+ // Render strings
+ va_start(args, Right);
+ // - Left
+ {
+ char tmp[lLen+1];
+ vsnprintf(tmp, lLen+1, Left, args);
+ addstr(tmp);
+ }
+ // - Left padding
+ times = Width/2 - mLen/2 - lLen;
+ while(times--) addch(Pad1);
+ // - Middle
+ {
+ char tmp[mLen+1];
+ vsnprintf(tmp, mLen+1, Mid, args);
+ addstr(tmp);
+ }
+ // - Right Padding
+ times = Width/2 - mLen/2 - rLen;
+ while(times--) addch(Pad2);
+ // - Right
+ {
+ char tmp[rLen+1];
+ vsnprintf(tmp, rLen+1, Right, args);
+ addstr(tmp);
+ }
+}
+