/* MIRBUT -- Mirage Button Command Codes ** Send front panel commands to the Ensoniq Mirage via MIDI ** psl 8/87 */ #include char *Mbn[][2] = { "0", "PROG", "1", 0, "2", 0, "3", 0, "4", 0, "5", 0, "6", 0, "7", 0, "8", 0, "9", 0, "ENTER", "START", "CANCEL", "STOP", "PARAM", 0, "VALUE", 0, "ON", "UP", "OFF", "DOWN", "LOAD UPPER", "LOADUPPER", "LOAD LOWER", "LOADLOWER", "SAMPLE UPPER", "SAMPLEUPPER", "SAMPLE LOWER", "SAMPLELOWER", "REC SEQ", "RECSEQ", "PLAY SEQ", "PLAYSEQ", "LOAD SEQ", "LOADSEQ", "SAVE SEQ", "SAVESEQ", 0, 0, }; main(argc, argv) char *argv[]; { register int i, j; putc(0x00, stdout); putc(0xF0, stdout); putc(0x0F, stdout); putc(0x01, stdout); putc(0x01, stdout); for (i = 1; i < argc; i++) if ((j = code(argv[i])) >= 0) putc(j, stdout); putc(0x7F, stdout); /* end-of-command */ putc(0xF7, stdout); } code(cp) char *cp; { register int i, j, mtch; mtch = -1; for (i = 0; Mbn[i][0]; i++) { for (j = 0; j < 2 && Mbn[i][j]; j++) { if (match(cp, Mbn[i][j])) { if (mtch != -1) { fprintf(stderr, "%s is ambiguous\n", cp); return(-1); } mtch = i; } } } if (mtch == -1) { fprintf(stderr, "%s is not defined\n", cp); return(-1); } return(mtch); } match(cp, pat) char *cp, *pat; { register char c, p; while ((c = *cp++) && (p = *pat++)) if (c != p && (c < 'a' || c > 'z' || (c & 0xDF) != p)) return(0); return(1); }