+int roundUp(int numToRound, int multiple) {\r
+ if(multiple == 0) {\r
+ return numToRound;\r
+ }\r
+\r
+ int remainder = numToRound % multiple;\r
+ if (remainder == 0)\r
+ return numToRound;\r
+ return numToRound + multiple - remainder;\r
+}\r
+\r
+int makeSubmenuFromArray( const char *menuEntries[], unsigned int menuEntriesSize, void *callback ) {\r
+ if ( menuEntriesSize == 0 ) return -1;\r
+\r
+ int menuNumber = roundUp(menuEntriesSize, 10) / 10;\r
+ int submenuObjects[menuNumber-1];\r
+\r
+ for( int i = 0; i < menuNumber; i++ ) {\r
+ submenuObjects[i] = glutCreateMenu(callback);\r
+ int startNum = i*11 - (i-1);\r
+ for ( int j = startNum - 1; j < (startNum+9); j++ ) {\r
+ if ( j == menuEntriesSize ) break; // Detect if we've reached the end of the array\r
+ glutAddMenuEntry( menuEntries[j], j + 1 );\r
+ }\r
+ }\r
+\r
+ int mainMenu = glutCreateMenu(callback);\r
+ for ( int i = 0; i < menuNumber; i++ ) {\r
+ char name[10]; // buffer to hold name\r
+ int startNum = i*11 - (i-1);\r
+ int endNum = startNum + 9;\r
+ if ( i == menuNumber - 1 ) { // We're on the last one\r
+ endNum = startNum + (menuEntriesSize - startNum); // Work out final number\r
+ }\r
+ sprintf(name, "%d-%d", startNum, endNum);\r
+ glutAddSubMenu( name, submenuObjects[i] );\r
+ }\r