482 (void) snprintf(valbuf, sizeof (valbuf), "%s",
483 cval.value ? _("on") : _("off"));
484 break;
485
486 case MIXT_MONOSLIDER:
487 (void) snprintf(valbuf, sizeof (valbuf), "%d",
488 cval.value & 0xff);
489 break;
490
491 case MIXT_STEREOSLIDER:
492 (void) snprintf(valbuf, sizeof (valbuf), "%d:%d",
493 (int)AUDIO_CTRL_STEREO_LEFT(cval.value),
494 (int)AUDIO_CTRL_STEREO_RIGHT(cval.value));
495 break;
496
497 case MIXT_ENUM:
498 str = get_enum_str(cinfop, cval.value);
499 if (str == NULL) {
500 warn(_("Bad enum index %d for control '%s'\n"),
501 cval.value, cinfop->ci.extname);
502 return (EINVAL);
503 }
504
505 (void) snprintf(valbuf, sizeof (valbuf), "%s", str);
506 break;
507
508 default:
509 return (0);
510 }
511
512 /*
513 * possible control values (range/selection)
514 */
515 switch (cinfop->ci.type) {
516 case MIXT_ONOFF:
517 (void) snprintf(selbuf, sizeof (selbuf), _("on,off"));
518 break;
519
520 case MIXT_MONOSLIDER:
521 (void) snprintf(selbuf, sizeof (selbuf), "%d-%d",
522 cinfop->ci.minvalue, cinfop->ci.maxvalue);
815
816 if ((d->mixer.enabled == 0) && (!verbose))
817 continue;
818
819 if (verbose) {
820 msg(_("%s (%s)\n"), d->card.shortname,
821 d->mixer.devnode);
822 } else {
823 msg(_("%s\n"), d->card.shortname);
824 }
825 }
826
827 return (0);
828 }
829
830 int
831 do_show_device(int argc, char **argv)
832 {
833 int optc;
834 char *devname = NULL;
835 device_t *d;
836
837 while ((optc = getopt(argc, argv, "d:v")) != EOF) {
838 switch (optc) {
839 case 'd':
840 devname = optarg;
841 break;
842 case 'v':
843 break;
844 default:
845 help();
846 return (-1);
847 }
848 }
849 argc -= optind;
850 argv += optind;
851 if (argc != 0) {
852 help();
853 return (-1);
854 }
855
856 if ((d = find_device(devname)) == NULL) {
857 return (ENODEV);
858 }
859
860 msg(_("Device: %s\n"), d->mixer.devnode);
861 msg(_(" Name = %s\n"), d->card.shortname);
862 msg(_(" Config = %s\n"), d->card.longname);
863
864 if (strlen(d->card.hw_info)) {
865 msg(_(" HW Info = %s"), d->card.hw_info);
866 }
867
868 return (0);
869 }
870
871 int
872 do_show_control(int argc, char **argv)
873 {
874 int optc;
875 int rval = 0;
876 int verbose = 0;
877 device_t *d;
878 char *devname = NULL;
879 int i;
880 int j;
881 int rv;
882 char *n;
883 cinfo_t *cinfop;
884
885 while ((optc = getopt(argc, argv, "d:v")) != EOF) {
993 warn(_("No such control: %s\n"), cname);
994 }
995
996 return (rval);
997 }
998
999 int
1000 do_save_controls(int argc, char **argv)
1001 {
1002 int optc;
1003 int rval = 0;
1004 device_t *d;
1005 char *devname = NULL;
1006 char *fname;
1007 int i;
1008 int rv;
1009 cinfo_t *cinfop;
1010 FILE *fp;
1011 int fd;
1012 int mode;
1013
1014 mode = O_WRONLY | O_CREAT | O_EXCL;
1015
1016 while ((optc = getopt(argc, argv, "d:f")) != EOF) {
1017 switch (optc) {
1018 case 'd':
1019 devname = optarg;
1020 break;
1021 case 'f':
1022 mode &= ~O_EXCL;
1023 mode |= O_TRUNC;
1024 break;
1025 default:
1026 help();
1027 return (-1);
1028 }
1029 }
1030 argc -= optind;
1031 argv += optind;
1032
1039 if ((d = find_device(devname)) == NULL) {
1040 return (ENODEV);
1041 }
1042
1043 if ((fd = open(fname, mode, 0666)) < 0) {
1044 perror(_("Failed to create file"));
1045 return (errno);
1046 }
1047
1048 if ((fp = fdopen(fd, "w")) == NULL) {
1049 perror(_("Unable to open file\n"));
1050 (void) close(fd);
1051 (void) unlink(fname);
1052 return (errno);
1053 }
1054
1055 (void) fprintf(fp, "# Device: %s\n", d->mixer.devnode);
1056 (void) fprintf(fp, "# Name = %s\n", d->card.shortname);
1057 (void) fprintf(fp, "# Config = %s\n", d->card.longname);
1058
1059 if (strlen(d->card.hw_info)) {
1060 (void) fprintf(fp, "# HW Info = %s", d->card.hw_info);
1061 }
1062 (void) fprintf(fp, "#\n");
1063
1064 print_header(fp, 0);
1065
1066 for (i = 0; i < d->cmax; i++) {
1067 cinfop = &d->controls[i];
1068 rv = print_control(fp, d, cinfop, 0);
1069 rval = rval ? rval : rv;
1070 }
1071
1072 (void) fclose(fp);
1073
1074 return (rval);
1075 }
1076
1077 int
1078 do_load_controls(int argc, char **argv)
1079 {
1080 int optc;
|
482 (void) snprintf(valbuf, sizeof (valbuf), "%s",
483 cval.value ? _("on") : _("off"));
484 break;
485
486 case MIXT_MONOSLIDER:
487 (void) snprintf(valbuf, sizeof (valbuf), "%d",
488 cval.value & 0xff);
489 break;
490
491 case MIXT_STEREOSLIDER:
492 (void) snprintf(valbuf, sizeof (valbuf), "%d:%d",
493 (int)AUDIO_CTRL_STEREO_LEFT(cval.value),
494 (int)AUDIO_CTRL_STEREO_RIGHT(cval.value));
495 break;
496
497 case MIXT_ENUM:
498 str = get_enum_str(cinfop, cval.value);
499 if (str == NULL) {
500 warn(_("Bad enum index %d for control '%s'\n"),
501 cval.value, cinfop->ci.extname);
502 /*
503 * Apparently the driver gave us bogus data for this
504 * control, so we will ignore it.
505 *
506 * Don't confuse the user by returning an error status.
507 */
508 return (0);
509 }
510
511 (void) snprintf(valbuf, sizeof (valbuf), "%s", str);
512 break;
513
514 default:
515 return (0);
516 }
517
518 /*
519 * possible control values (range/selection)
520 */
521 switch (cinfop->ci.type) {
522 case MIXT_ONOFF:
523 (void) snprintf(selbuf, sizeof (selbuf), _("on,off"));
524 break;
525
526 case MIXT_MONOSLIDER:
527 (void) snprintf(selbuf, sizeof (selbuf), "%d-%d",
528 cinfop->ci.minvalue, cinfop->ci.maxvalue);
821
822 if ((d->mixer.enabled == 0) && (!verbose))
823 continue;
824
825 if (verbose) {
826 msg(_("%s (%s)\n"), d->card.shortname,
827 d->mixer.devnode);
828 } else {
829 msg(_("%s\n"), d->card.shortname);
830 }
831 }
832
833 return (0);
834 }
835
836 int
837 do_show_device(int argc, char **argv)
838 {
839 int optc;
840 char *devname = NULL;
841 char *p, *n;
842 const char *m;
843 device_t *d;
844
845 while ((optc = getopt(argc, argv, "d:v")) != EOF) {
846 switch (optc) {
847 case 'd':
848 devname = optarg;
849 break;
850 case 'v':
851 break;
852 default:
853 help();
854 return (-1);
855 }
856 }
857 argc -= optind;
858 argv += optind;
859 if (argc != 0) {
860 help();
861 return (-1);
862 }
863
864 if ((d = find_device(devname)) == NULL) {
865 return (ENODEV);
866 }
867
868 msg(_("Device: %s\n"), d->mixer.devnode);
869 msg(_(" Name = %s\n"), d->card.shortname);
870 msg(_(" Config = %s\n"), d->card.longname);
871
872 for (m = " HW Info = %s\n", p = d->card.hw_info;
873 p != NULL && strlen(p) != 0;
874 m = "\t %s\n", p = n) {
875 if ((n = strchr(p, '\n')) != NULL)
876 *n++ = '\0';
877 msg(_(m), p);
878 }
879
880 return (0);
881 }
882
883 int
884 do_show_control(int argc, char **argv)
885 {
886 int optc;
887 int rval = 0;
888 int verbose = 0;
889 device_t *d;
890 char *devname = NULL;
891 int i;
892 int j;
893 int rv;
894 char *n;
895 cinfo_t *cinfop;
896
897 while ((optc = getopt(argc, argv, "d:v")) != EOF) {
1005 warn(_("No such control: %s\n"), cname);
1006 }
1007
1008 return (rval);
1009 }
1010
1011 int
1012 do_save_controls(int argc, char **argv)
1013 {
1014 int optc;
1015 int rval = 0;
1016 device_t *d;
1017 char *devname = NULL;
1018 char *fname;
1019 int i;
1020 int rv;
1021 cinfo_t *cinfop;
1022 FILE *fp;
1023 int fd;
1024 int mode;
1025 char *p, *n;
1026 const char *m;
1027
1028 mode = O_WRONLY | O_CREAT | O_EXCL;
1029
1030 while ((optc = getopt(argc, argv, "d:f")) != EOF) {
1031 switch (optc) {
1032 case 'd':
1033 devname = optarg;
1034 break;
1035 case 'f':
1036 mode &= ~O_EXCL;
1037 mode |= O_TRUNC;
1038 break;
1039 default:
1040 help();
1041 return (-1);
1042 }
1043 }
1044 argc -= optind;
1045 argv += optind;
1046
1053 if ((d = find_device(devname)) == NULL) {
1054 return (ENODEV);
1055 }
1056
1057 if ((fd = open(fname, mode, 0666)) < 0) {
1058 perror(_("Failed to create file"));
1059 return (errno);
1060 }
1061
1062 if ((fp = fdopen(fd, "w")) == NULL) {
1063 perror(_("Unable to open file\n"));
1064 (void) close(fd);
1065 (void) unlink(fname);
1066 return (errno);
1067 }
1068
1069 (void) fprintf(fp, "# Device: %s\n", d->mixer.devnode);
1070 (void) fprintf(fp, "# Name = %s\n", d->card.shortname);
1071 (void) fprintf(fp, "# Config = %s\n", d->card.longname);
1072
1073 for (m = "# HW Info = %s\n", p = d->card.hw_info;
1074 p != NULL && strlen(p) != 0;
1075 m = "#\t %s\n", p = n) {
1076 if ((n = strchr(p, '\n')) != NULL)
1077 *n++ = '\0';
1078 fprintf(fp, m, p);
1079 }
1080 (void) fprintf(fp, "#\n");
1081
1082 print_header(fp, 0);
1083
1084 for (i = 0; i < d->cmax; i++) {
1085 cinfop = &d->controls[i];
1086 rv = print_control(fp, d, cinfop, 0);
1087 rval = rval ? rval : rv;
1088 }
1089
1090 (void) fclose(fp);
1091
1092 return (rval);
1093 }
1094
1095 int
1096 do_load_controls(int argc, char **argv)
1097 {
1098 int optc;
|