Como te dice Kenji-chan, pero precisando un poco más...
Crea un array con las 256 letras, marca con 1 aquellas que pueden convertirse en mayúsculas o minúsculas, el resto queda con valor 0.
Luego tu función simplemente será un bucle, que recorre cada caracter del string, comprueba si está en el array de 'CaracteresCapitalizables' y hace la conversión. Aquí un sencillo opseudocódigo, para resolver ambos casos en la misma función.
Funcion Capitalizar(string Texto, buleano ToUpper)
Si ToUpper = TRUE
Por cada letra en el Texto
Si CaracteresCapitalizables(letra) = 1 // o TRUE, etc...
... Toupper, para dicha letra.
Fin si
Siguiente
Sino
// mismo código, pero aplicando ToLower
Fin si
Fin funcion
ToUpper
Si Letra and 32 luego // tiene el bit de minúscula
Letra = Letra xor 32 // pués se lo quitamos.
Fin si
ToLower:
Letra = Letra or 32 //ponemos el bit de minúsculas... si ya lo tenía, no cambia nada,
// no necesitamos en este caso perder el tiempo verificando si lo tenía o no.