Usando getopt en C con argumentos no opcionales

Estoy haciendo un pequeño programa en C que trata con muchos argumentos de la línea de comandos, así que decidí usar getopt para ordenarlos.

Sin embargo, quiero que dos argumentos no opcionales (archivos de origen y destino) sean obligatorios, por lo que debe tenerlos como argumentos al llamar al programa, incluso si no hay indicadores u otros argumentos.

Aquí hay una versión simplificada de lo que tengo que manejar los argumentos con banderas:

while ((c = getopt(argc, argv, "i:d:btw:h:s:")) != -1) {
    switch (c) {
        case 'i': {
            i = (int)atol(optarg);
        }
        case 'd': {
            d = (int)atol(optarg);
        }
        case 'b':
            buf = 1;
            break;
        case 't':
            time = 1;
            break;
        case 'w':
            w = (int)atol(optarg);
            break;
        case 'h':
            h = (int)atol(optarg);
            break;
        case 's':
            s = (int)atol(optarg);
            break;
        default:
            break;
    }
}

¿Cómo edito esto para que los argumentos sin opción también se manejen?

También quiero tener las no opciones anteso después de las opciones, entonces, ¿cómo se manejaría eso?

Respuestas a la pregunta(2)

Su respuesta a la pregunta