exposurses

Hex Artifact Content
Login

Artifact fe45387438c3f2d4bb4ef184f9d1508e1e7f8817f62799302f515912ca599c48:


0000: 2f 2a 20 54 68 69 73 20 66 69 6c 65 20 62 61 73  /* This file bas
0010: 65 64 20 6f 6e 20 6d 65 6e 75 5f 73 63 72 6f 6c  ed on menu_scrol
0020: 6c 2e 63 20 66 72 6f 6d 3a 0a 68 74 74 70 3a 2f  l.c from:.http:/
0030: 2f 74 6c 64 70 2e 6f 72 67 2f 48 4f 57 54 4f 2f  /tldp.org/HOWTO/
0040: 4e 43 55 52 53 45 53 2d 50 72 6f 67 72 61 6d 6d  NCURSES-Programm
0050: 69 6e 67 2d 48 4f 57 54 4f 2f 69 6e 74 72 6f 2e  ing-HOWTO/intro.
0060: 68 74 6d 6c 20 2a 2f 0a 23 69 6e 63 6c 75 64 65  html */.#include
0070: 20 3c 63 75 72 73 65 73 2e 68 3e 0a 23 69 6e 63   <curses.h>.#inc
0080: 6c 75 64 65 20 3c 6d 65 6e 75 2e 68 3e 0a 23 69  lude <menu.h>.#i
0090: 6e 63 6c 75 64 65 20 3c 6d 61 74 68 2e 68 3e 0a  nclude <math.h>.
00a0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
00b0: 2e 68 3e 0a 0a 2f 2a 20 4c 65 61 72 6e 69 6e 67  .h>../* Learning
00c0: 20 6e 6f 74 65 73 20 2d 20 54 68 69 73 20 69 73   notes - This is
00d0: 20 61 20 6d 61 63 72 6f 20 74 68 61 74 20 69 73   a macro that is
00e0: 20 65 78 70 61 6e 64 65 64 20 28 74 65 78 74 20   expanded (text 
00f0: 73 75 62 73 74 69 74 75 74 69 6f 6e 29 20 62 65  substitution) be
0100: 66 6f 72 65 20 63 6f 6d 70 69 6c 69 6e 67 20 2a  fore compiling *
0110: 2f 0a 23 64 65 66 69 6e 65 20 41 52 52 41 59 5f  /.#define ARRAY_
0120: 53 49 5a 45 28 61 29 20 28 73 69 7a 65 6f 66 28  SIZE(a) (sizeof(
0130: 61 29 20 2f 20 73 69 7a 65 6f 66 28 61 5b 30 5d  a) / sizeof(a[0]
0140: 29 29 0a 0a 63 68 61 72 20 2a 65 78 70 6f 73 75  ))..char *exposu
0150: 72 65 5f 61 72 72 61 79 5b 5d 20 3d 20 7b 0a 09  re_array[] = {..
0160: 22 2d 36 22 2c 0a 09 22 2d 35 22 2c 0a 09 22 2d  "-6",.."-5",.."-
0170: 34 22 2c 0a 09 22 2d 33 22 2c 0a 09 22 2d 32 22  4",.."-3",.."-2"
0180: 2c 0a 09 22 2d 31 22 2c 0a 09 22 30 22 2c 0a 09  ,.."-1",.."0",..
0190: 22 31 22 2c 0a 09 22 32 22 2c 0a 09 22 33 22 2c  "1",.."2",.."3",
01a0: 0a 09 22 34 22 2c 0a 09 22 35 22 2c 0a 09 22 36  .."4",.."5",.."6
01b0: 22 2c 0a 09 22 37 22 2c 0a 09 22 38 22 2c 0a 09  ",.."7",.."8",..
01c0: 22 39 22 2c 0a 09 22 31 30 22 2c 0a 09 22 31 31  "9",.."10",.."11
01d0: 22 2c 0a 09 22 31 32 22 2c 0a 09 22 31 33 22 2c  ",.."12",.."13",
01e0: 0a 09 22 31 34 22 2c 0a 09 22 31 35 22 2c 0a 09  .."14",.."15",..
01f0: 22 31 36 22 2c 0a 09 4e 55 4c 4c 0a 7d 3b 0a 0a  "16",..NULL.};..
0200: 63 68 61 72 20 2a 69 73 6f 5f 61 72 72 61 79 5b  char *iso_array[
0210: 5d 20 3d 20 7b 0a 09 22 35 30 22 2c 0a 09 22 31  ] = {.."50",.."1
0220: 30 30 22 2c 0a 09 22 32 30 30 22 2c 0a 09 22 34  00",.."200",.."4
0230: 30 30 22 2c 0a 09 22 38 30 30 22 2c 0a 09 22 31  00",.."800",.."1
0240: 36 30 30 22 2c 0a 09 22 33 32 30 30 22 2c 0a 09  600",.."3200",..
0250: 4e 55 4c 4c 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73  NULL.};..char *s
0260: 68 75 74 74 65 72 5f 61 72 72 61 79 5b 5d 20 3d  hutter_array[] =
0270: 20 7b 0a 09 22 4f 56 45 52 22 2c 0a 09 22 31 2f   {.."OVER",.."1/
0280: 31 30 30 30 22 2c 0a 09 22 31 2f 35 30 30 22 2c  1000",.."1/500",
0290: 0a 09 22 31 2f 32 35 30 22 2c 0a 09 22 31 2f 31  .."1/250",.."1/1
02a0: 32 35 22 2c 0a 09 22 31 2f 36 30 22 2c 0a 09 22  25",.."1/60",.."
02b0: 31 2f 33 30 22 2c 0a 09 22 31 2f 31 35 22 2c 0a  1/30",.."1/15",.
02c0: 09 22 31 2f 38 22 2c 0a 09 22 31 2f 34 22 2c 0a  ."1/8",.."1/4",.
02d0: 09 22 31 2f 32 22 2c 0a 09 22 31 22 2c 0a 09 22  ."1/2",.."1",.."
02e0: 55 4e 44 45 52 22 2c 0a 09 4e 55 4c 4c 0a 7d 3b  UNDER",..NULL.};
02f0: 0a 0a 63 68 61 72 20 2a 61 70 65 72 74 75 72 65  ..char *aperture
0300: 5f 61 72 72 61 79 5b 5d 20 3d 20 7b 0a 09 22 55  _array[] = {.."U
0310: 4e 44 45 52 22 2c 0a 09 22 66 2f 31 2e 34 22 2c  NDER",.."f/1.4",
0320: 0a 09 22 66 2f 32 22 2c 0a 09 22 66 2f 32 2e 38  .."f/2",.."f/2.8
0330: 22 2c 0a 09 22 66 2f 34 22 2c 0a 09 22 66 2f 35  ",.."f/4",.."f/5
0340: 2e 36 22 2c 0a 09 22 66 2f 38 22 2c 0a 09 22 66  .6",.."f/8",.."f
0350: 2f 31 31 22 2c 0a 09 22 66 2f 31 36 22 2c 0a 09  /11",.."f/16",..
0360: 22 4f 56 45 52 22 2c 0a 09 4e 55 4c 4c 0a 7d 3b  "OVER",..NULL.};
0370: 0a 0a 49 54 45 4d 20 2a 2a 65 78 70 6f 73 75 72  ..ITEM **exposur
0380: 65 5f 69 74 65 6d 73 3b 0a 49 54 45 4d 20 2a 2a  e_items;.ITEM **
0390: 69 73 6f 5f 69 74 65 6d 73 3b 0a 49 54 45 4d 20  iso_items;.ITEM 
03a0: 2a 2a 73 68 75 74 74 65 72 5f 69 74 65 6d 73 3b  **shutter_items;
03b0: 0a 49 54 45 4d 20 2a 2a 61 70 65 72 74 75 72 65  .ITEM **aperture
03c0: 5f 69 74 65 6d 73 3b 0a 4d 45 4e 55 20 2a 65 78  _items;.MENU *ex
03d0: 70 6f 73 75 72 65 5f 6d 65 6e 75 3b 0a 4d 45 4e  posure_menu;.MEN
03e0: 55 20 2a 69 73 6f 5f 6d 65 6e 75 3b 0a 4d 45 4e  U *iso_menu;.MEN
03f0: 55 20 2a 73 68 75 74 74 65 72 5f 6d 65 6e 75 3b  U *shutter_menu;
0400: 0a 4d 45 4e 55 20 2a 61 70 65 72 74 75 72 65 5f  .MENU *aperture_
0410: 6d 65 6e 75 3b 0a 57 49 4e 44 4f 57 20 2a 65 78  menu;.WINDOW *ex
0420: 70 6f 73 75 72 65 5f 77 69 6e 3b 0a 57 49 4e 44  posure_win;.WIND
0430: 4f 57 20 2a 69 73 6f 5f 77 69 6e 3b 0a 57 49 4e  OW *iso_win;.WIN
0440: 44 4f 57 20 2a 73 68 75 74 74 65 72 5f 77 69 6e  DOW *shutter_win
0450: 3b 0a 57 49 4e 44 4f 57 20 2a 61 70 65 72 74 75  ;.WINDOW *apertu
0460: 72 65 5f 77 69 6e 3b 0a 0a 76 6f 69 64 20 73 65  re_win;..void se
0470: 6c 65 63 74 69 6f 6e 28 63 68 61 72 20 2a 6e 61  lection(char *na
0480: 6d 65 29 3b 0a 76 6f 69 64 20 72 65 6d 6f 76 65  me);.void remove
0490: 5f 6d 65 6e 75 28 49 54 45 4d 20 2a 2a 69 74 65  _menu(ITEM **ite
04a0: 6d 73 2c 20 4d 45 4e 55 20 2a 6d 65 6e 2c 20 69  ms, MENU *men, i
04b0: 6e 74 20 6e 29 3b 0a 76 6f 69 64 20 70 72 69 6e  nt n);.void prin
04c0: 74 5f 69 6e 5f 6d 69 64 64 6c 65 28 57 49 4e 44  t_in_middle(WIND
04d0: 4f 57 20 2a 77 69 6e 2c 20 69 6e 74 20 73 74 61  OW *win, int sta
04e0: 72 74 79 2c 20 69 6e 74 20 73 74 61 72 74 78 2c  rty, int startx,
04f0: 20 69 6e 74 20 77 69 64 74 68 2c 20 63 68 61 72   int width, char
0500: 20 2a 73 74 72 69 6e 67 2c 20 63 68 74 79 70 65   *string, chtype
0510: 20 63 6f 6c 6f 72 29 3b 0a 4d 45 4e 55 20 2a 61   color);.MENU *a
0520: 64 64 5f 6d 65 6e 75 28 49 54 45 4d 20 2a 2a 69  dd_menu(ITEM **i
0530: 74 65 6d 73 29 3b 0a 57 49 4e 44 4f 57 20 2a 61  tems);.WINDOW *a
0540: 64 64 5f 77 69 6e 64 6f 77 28 69 6e 74 20 78 70  dd_window(int xp
0550: 6f 73 2c 20 63 68 61 72 20 2a 74 69 74 6c 65 29  os, char *title)
0560: 3b 0a 49 54 45 4d 20 2a 2a 61 64 64 5f 69 74 65  ;.ITEM **add_ite
0570: 6d 28 63 68 61 72 20 2a 2a 61 72 72 61 79 2c 20  m(char **array, 
0580: 69 6e 74 20 6e 29 3b 0a 69 6e 74 20 65 78 70 6f  int n);.int expo
0590: 73 75 72 65 28 69 6e 74 20 69 73 6f 29 3b 0a 64  sure(int iso);.d
05a0: 6f 75 62 6c 65 20 73 68 75 74 74 65 72 28 69 6e  ouble shutter(in
05b0: 74 20 65 78 70 6f 73 75 72 65 2c 20 64 6f 75 62  t exposure, doub
05c0: 6c 65 20 61 70 65 72 74 75 72 65 29 3b 0a 64 6f  le aperture);.do
05d0: 75 62 6c 65 20 61 70 65 72 74 75 72 65 28 69 6e  uble aperture(in
05e0: 74 20 65 78 70 6f 73 75 72 65 2c 20 64 6f 75 62  t exposure, doub
05f0: 6c 65 20 73 68 75 74 74 65 72 29 3b 0a 69 6e 74  le shutter);.int
0600: 20 6e 65 61 72 65 73 74 5f 6d 61 74 63 68 28 64   nearest_match(d
0610: 6f 75 62 6c 65 20 78 2c 20 69 6e 74 20 6d 65 6e  ouble x, int men
0620: 75 2c 20 69 6e 74 20 6e 5f 61 72 72 61 79 29 3b  u, int n_array);
0630: 0a 64 6f 75 62 6c 65 20 66 72 61 63 74 69 6f 6e  .double fraction
0640: 5f 74 6f 5f 64 6f 75 62 6c 65 28 63 68 61 72 20  _to_double(char 
0650: 2a 66 72 61 63 74 69 6f 6e 29 3b 0a 2f 2a 20 4e  *fraction);./* N
0660: 6f 20 6f 6e 65 20 77 69 6c 6c 20 65 76 65 72 20  o one will ever 
0670: 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 39  need more than 9
0680: 20 62 79 74 65 73 21 20 2a 2f 0a 63 68 61 72 20   bytes! */.char 
0690: 65 78 70 6f 73 75 72 65 5f 73 65 6c 5b 39 5d 20  exposure_sel[9] 
06a0: 3d 20 22 22 3b 0a 63 68 61 72 20 69 73 6f 5f 73  = "";.char iso_s
06b0: 65 6c 5b 39 5d 20 3d 20 22 22 3b 0a 63 68 61 72  el[9] = "";.char
06c0: 20 73 68 75 74 74 65 72 5f 73 65 6c 5b 39 5d 20   shutter_sel[9] 
06d0: 3d 20 22 22 3b 0a 63 68 61 72 20 61 70 65 72 74  = "";.char apert
06e0: 75 72 65 5f 73 65 6c 5b 39 5d 20 3d 20 22 22 3b  ure_sel[9] = "";
06f0: 0a 69 6e 74 20 73 65 6c 65 63 74 69 6f 6e 5f 63  .int selection_c
0700: 6f 75 6e 74 65 72 20 3d 20 31 3b 0a 69 6e 74 20  ounter = 1;.int 
0710: 6d 65 6e 75 5f 63 6f 75 6e 74 65 72 20 3d 20 31  menu_counter = 1
0720: 3b 0a 0a 69 6e 74 20 6d 61 69 6e 28 29 20 7b 0a  ;..int main() {.
0730: 09 69 6e 74 20 63 3b 0a 09 4d 45 4e 55 20 2a 2a  .int c;..MENU **
0740: 6d 65 6e 75 3b 0a 09 57 49 4e 44 4f 57 20 2a 2a  menu;..WINDOW **
0750: 77 69 6e 3b 0a 09 69 6e 74 20 69 3b 0a 09 69 6e  win;..int i;..in
0760: 74 20 6e 5f 65 78 70 6f 73 75 72 65 3b 0a 09 69  t n_exposure;..i
0770: 6e 74 20 6e 5f 69 73 6f 3b 0a 09 69 6e 74 20 6e  nt n_iso;..int n
0780: 5f 73 68 75 74 74 65 72 3b 0a 09 69 6e 74 20 6e  _shutter;..int n
0790: 5f 61 70 65 72 74 75 72 65 3b 0a 0a 09 2f 2a 20  _aperture;.../* 
07a0: 49 6e 69 74 69 61 6c 69 7a 65 20 63 75 72 73 65  Initialize curse
07b0: 73 20 2a 2f 0a 09 69 6e 69 74 73 63 72 28 29 3b  s */..initscr();
07c0: 0a 09 73 74 61 72 74 5f 63 6f 6c 6f 72 28 29 3b  ..start_color();
07d0: 0a 09 63 62 72 65 61 6b 28 29 3b 0a 09 6e 6f 65  ..cbreak();..noe
07e0: 63 68 6f 28 29 3b 0a 09 6b 65 79 70 61 64 28 73  cho();..keypad(s
07f0: 74 64 73 63 72 2c 20 54 52 55 45 29 3b 0a 09 69  tdscr, TRUE);..i
0800: 6e 69 74 5f 70 61 69 72 28 31 2c 20 43 4f 4c 4f  nit_pair(1, COLO
0810: 52 5f 52 45 44 2c 20 43 4f 4c 4f 52 5f 42 4c 41  R_RED, COLOR_BLA
0820: 43 4b 29 3b 0a 09 69 6e 69 74 5f 70 61 69 72 28  CK);..init_pair(
0830: 32 2c 20 43 4f 4c 4f 52 5f 43 59 41 4e 2c 20 43  2, COLOR_CYAN, C
0840: 4f 4c 4f 52 5f 42 4c 41 43 4b 29 3b 0a 0a 09 2f  OLOR_BLACK);.../
0850: 2a 20 43 72 65 61 74 65 20 69 74 65 6d 73 20 2a  * Create items *
0860: 2f 0a 09 2f 2a 20 43 61 6e 27 74 20 72 65 61 6c  /../* Can't real
0870: 6c 79 20 61 76 6f 69 64 20 66 69 6e 64 69 6e 67  ly avoid finding
0880: 20 61 72 72 61 79 20 73 69 7a 65 73 20 68 65 72   array sizes her
0890: 65 20 2a 2f 0a 09 6e 5f 65 78 70 6f 73 75 72 65  e */..n_exposure
08a0: 20 3d 20 41 52 52 41 59 5f 53 49 5a 45 28 65 78   = ARRAY_SIZE(ex
08b0: 70 6f 73 75 72 65 5f 61 72 72 61 79 29 3b 0a 09  posure_array);..
08c0: 6e 5f 69 73 6f 20 3d 20 41 52 52 41 59 5f 53 49  n_iso = ARRAY_SI
08d0: 5a 45 28 69 73 6f 5f 61 72 72 61 79 29 3b 0a 09  ZE(iso_array);..
08e0: 6e 5f 73 68 75 74 74 65 72 20 3d 20 41 52 52 41  n_shutter = ARRA
08f0: 59 5f 53 49 5a 45 28 73 68 75 74 74 65 72 5f 61  Y_SIZE(shutter_a
0900: 72 72 61 79 29 3b 0a 09 6e 5f 61 70 65 72 74 75  rray);..n_apertu
0910: 72 65 20 3d 20 41 52 52 41 59 5f 53 49 5a 45 28  re = ARRAY_SIZE(
0920: 61 70 65 72 74 75 72 65 5f 61 72 72 61 79 29 3b  aperture_array);
0930: 0a 09 65 78 70 6f 73 75 72 65 5f 69 74 65 6d 73  ..exposure_items
0940: 20 3d 20 61 64 64 5f 69 74 65 6d 28 65 78 70 6f   = add_item(expo
0950: 73 75 72 65 5f 61 72 72 61 79 2c 20 6e 5f 65 78  sure_array, n_ex
0960: 70 6f 73 75 72 65 29 3b 0a 09 69 73 6f 5f 69 74  posure);..iso_it
0970: 65 6d 73 20 3d 20 61 64 64 5f 69 74 65 6d 28 69  ems = add_item(i
0980: 73 6f 5f 61 72 72 61 79 2c 20 6e 5f 69 73 6f 29  so_array, n_iso)
0990: 3b 0a 09 61 70 65 72 74 75 72 65 5f 69 74 65 6d  ;..aperture_item
09a0: 73 20 3d 20 61 64 64 5f 69 74 65 6d 28 61 70 65  s = add_item(ape
09b0: 72 74 75 72 65 5f 61 72 72 61 79 2c 20 6e 5f 61  rture_array, n_a
09c0: 70 65 72 74 75 72 65 29 3b 0a 09 73 68 75 74 74  perture);..shutt
09d0: 65 72 5f 69 74 65 6d 73 20 3d 20 61 64 64 5f 69  er_items = add_i
09e0: 74 65 6d 28 73 68 75 74 74 65 72 5f 61 72 72 61  tem(shutter_arra
09f0: 79 2c 20 6e 5f 73 68 75 74 74 65 72 29 3b 0a 09  y, n_shutter);..
0a00: 65 78 70 6f 73 75 72 65 5f 6d 65 6e 75 20 3d 20  exposure_menu = 
0a10: 61 64 64 5f 6d 65 6e 75 28 65 78 70 6f 73 75 72  add_menu(exposur
0a20: 65 5f 69 74 65 6d 73 29 3b 0a 09 69 73 6f 5f 6d  e_items);..iso_m
0a30: 65 6e 75 20 3d 20 61 64 64 5f 6d 65 6e 75 28 69  enu = add_menu(i
0a40: 73 6f 5f 69 74 65 6d 73 29 3b 0a 09 73 68 75 74  so_items);..shut
0a50: 74 65 72 5f 6d 65 6e 75 20 3d 20 61 64 64 5f 6d  ter_menu = add_m
0a60: 65 6e 75 28 73 68 75 74 74 65 72 5f 69 74 65 6d  enu(shutter_item
0a70: 73 29 3b 0a 09 61 70 65 72 74 75 72 65 5f 6d 65  s);..aperture_me
0a80: 6e 75 20 3d 20 61 64 64 5f 6d 65 6e 75 28 61 70  nu = add_menu(ap
0a90: 65 72 74 75 72 65 5f 69 74 65 6d 73 29 3b 0a 09  erture_items);..
0aa0: 65 78 70 6f 73 75 72 65 5f 77 69 6e 20 3d 20 61  exposure_win = a
0ab0: 64 64 5f 77 69 6e 64 6f 77 28 34 2c 20 22 45 56  dd_window(4, "EV
0ac0: 22 29 3b 0a 09 69 73 6f 5f 77 69 6e 20 3d 20 61  ");..iso_win = a
0ad0: 64 64 5f 77 69 6e 64 6f 77 28 34 35 2c 20 22 49  dd_window(45, "I
0ae0: 53 4f 22 29 3b 0a 09 73 68 75 74 74 65 72 5f 77  SO");..shutter_w
0af0: 69 6e 20 3d 20 61 64 64 5f 77 69 6e 64 6f 77 28  in = add_window(
0b00: 38 36 2c 20 22 53 68 75 74 74 65 72 22 29 3b 0a  86, "Shutter");.
0b10: 09 61 70 65 72 74 75 72 65 5f 77 69 6e 20 3d 20  .aperture_win = 
0b20: 61 64 64 5f 77 69 6e 64 6f 77 28 31 32 37 2c 20  add_window(127, 
0b30: 22 41 70 65 72 74 75 72 65 22 29 3b 0a 09 2f 2a  "Aperture");../*
0b40: 20 44 6f 6e 27 74 20 6b 6e 6f 77 20 68 6f 77 20   Don't know how 
0b50: 74 6f 20 61 76 6f 69 64 20 74 68 65 20 72 65 70  to avoid the rep
0b60: 69 74 69 6f 6e 20 62 65 6c 6f 77 20 2a 2f 0a 09  ition below */..
0b70: 73 65 74 5f 6d 65 6e 75 5f 77 69 6e 28 65 78 70  set_menu_win(exp
0b80: 6f 73 75 72 65 5f 6d 65 6e 75 2c 20 65 78 70 6f  osure_menu, expo
0b90: 73 75 72 65 5f 77 69 6e 29 3b 0a 09 73 65 74 5f  sure_win);..set_
0ba0: 6d 65 6e 75 5f 77 69 6e 28 69 73 6f 5f 6d 65 6e  menu_win(iso_men
0bb0: 75 2c 20 69 73 6f 5f 77 69 6e 29 3b 0a 09 73 65  u, iso_win);..se
0bc0: 74 5f 6d 65 6e 75 5f 77 69 6e 28 73 68 75 74 74  t_menu_win(shutt
0bd0: 65 72 5f 6d 65 6e 75 2c 20 73 68 75 74 74 65 72  er_menu, shutter
0be0: 5f 77 69 6e 29 3b 0a 09 73 65 74 5f 6d 65 6e 75  _win);..set_menu
0bf0: 5f 77 69 6e 28 61 70 65 72 74 75 72 65 5f 6d 65  _win(aperture_me
0c00: 6e 75 2c 20 61 70 65 72 74 75 72 65 5f 77 69 6e  nu, aperture_win
0c10: 29 3b 0a 09 73 65 74 5f 6d 65 6e 75 5f 73 75 62  );..set_menu_sub
0c20: 28 65 78 70 6f 73 75 72 65 5f 6d 65 6e 75 2c 20  (exposure_menu, 
0c30: 64 65 72 77 69 6e 28 65 78 70 6f 73 75 72 65 5f  derwin(exposure_
0c40: 77 69 6e 2c 20 36 2c 20 33 38 2c 20 33 2c 20 31  win, 6, 38, 3, 1
0c50: 29 29 3b 0a 09 73 65 74 5f 6d 65 6e 75 5f 73 75  ));..set_menu_su
0c60: 62 28 69 73 6f 5f 6d 65 6e 75 2c 20 64 65 72 77  b(iso_menu, derw
0c70: 69 6e 28 69 73 6f 5f 77 69 6e 2c 20 36 2c 20 33  in(iso_win, 6, 3
0c80: 38 2c 20 33 2c 20 31 29 29 3b 0a 09 73 65 74 5f  8, 3, 1));..set_
0c90: 6d 65 6e 75 5f 73 75 62 28 73 68 75 74 74 65 72  menu_sub(shutter
0ca0: 5f 6d 65 6e 75 2c 20 64 65 72 77 69 6e 28 73 68  _menu, derwin(sh
0cb0: 75 74 74 65 72 5f 77 69 6e 2c 20 36 2c 20 33 38  utter_win, 6, 38
0cc0: 2c 20 33 2c 20 31 29 29 3b 0a 09 73 65 74 5f 6d  , 3, 1));..set_m
0cd0: 65 6e 75 5f 73 75 62 28 61 70 65 72 74 75 72 65  enu_sub(aperture
0ce0: 5f 6d 65 6e 75 2c 20 64 65 72 77 69 6e 28 61 70  _menu, derwin(ap
0cf0: 65 72 74 75 72 65 5f 77 69 6e 2c 20 36 2c 20 33  erture_win, 6, 3
0d00: 38 2c 20 33 2c 20 31 29 29 3b 0a 09 70 6f 73 74  8, 3, 1));..post
0d10: 5f 6d 65 6e 75 28 65 78 70 6f 73 75 72 65 5f 6d  _menu(exposure_m
0d20: 65 6e 75 29 3b 0a 09 70 6f 73 74 5f 6d 65 6e 75  enu);..post_menu
0d30: 28 69 73 6f 5f 6d 65 6e 75 29 3b 0a 09 70 6f 73  (iso_menu);..pos
0d40: 74 5f 6d 65 6e 75 28 73 68 75 74 74 65 72 5f 6d  t_menu(shutter_m
0d50: 65 6e 75 29 3b 0a 09 70 6f 73 74 5f 6d 65 6e 75  enu);..post_menu
0d60: 28 61 70 65 72 74 75 72 65 5f 6d 65 6e 75 29 3b  (aperture_menu);
0d70: 0a 09 77 72 65 66 72 65 73 68 28 65 78 70 6f 73  ..wrefresh(expos
0d80: 75 72 65 5f 77 69 6e 29 3b 0a 09 77 72 65 66 72  ure_win);..wrefr
0d90: 65 73 68 28 69 73 6f 5f 77 69 6e 29 3b 0a 09 77  esh(iso_win);..w
0da0: 72 65 66 72 65 73 68 28 73 68 75 74 74 65 72 5f  refresh(shutter_
0db0: 77 69 6e 29 3b 0a 09 77 72 65 66 72 65 73 68 28  win);..wrefresh(
0dc0: 61 70 65 72 74 75 72 65 5f 77 69 6e 29 3b 0a 09  aperture_win);..
0dd0: 61 74 74 72 6f 6e 28 43 4f 4c 4f 52 5f 50 41 49  attron(COLOR_PAI
0de0: 52 28 32 29 29 3b 0a 09 6d 76 70 72 69 6e 74 77  R(2));..mvprintw
0df0: 28 4c 49 4e 45 53 20 2d 20 32 2c 20 30 2c 20 22  (LINES - 2, 0, "
0e00: 53 65 6c 65 63 74 20 45 56 22 29 3b 0a 09 6d 76  Select EV");..mv
0e10: 70 72 69 6e 74 77 28 4c 49 4e 45 53 20 2d 20 31  printw(LINES - 1
0e20: 2c 20 30 2c 20 22 41 72 72 6f 77 20 6b 65 79 73  , 0, "Arrow keys
0e30: 20 74 6f 20 6e 61 76 69 67 61 74 65 2c 20 45 6e   to navigate, En
0e40: 74 65 72 20 74 6f 20 73 65 6c 65 63 74 2c 20 51  ter to select, Q
0e50: 20 74 6f 20 65 78 69 74 22 29 3b 0a 09 61 74 74   to exit");..att
0e60: 72 6f 66 66 28 43 4f 4c 4f 52 5f 50 41 49 52 28  roff(COLOR_PAIR(
0e70: 32 29 29 3b 0a 09 72 65 66 72 65 73 68 28 29 3b  2));..refresh();
0e80: 0a 0a 09 2f 2a 20 53 65 74 20 64 65 66 61 75 6c  .../* Set defaul
0e90: 74 20 6d 65 6e 75 20 2a 2f 0a 09 6d 65 6e 75 20  t menu */..menu 
0ea0: 3d 20 26 65 78 70 6f 73 75 72 65 5f 6d 65 6e 75  = &exposure_menu
0eb0: 3b 0a 09 77 69 6e 20 3d 20 26 65 78 70 6f 73 75  ;..win = &exposu
0ec0: 72 65 5f 77 69 6e 3b 0a 0a 09 77 68 69 6c 65 28  re_win;...while(
0ed0: 28 63 20 3d 20 67 65 74 63 68 28 29 29 20 21 3d  (c = getch()) !=
0ee0: 20 38 31 29 20 7b 20 2f 2a 20 38 31 20 69 73 20   81) { /* 81 is 
0ef0: 51 20 2a 2f 0a 09 09 73 77 69 74 63 68 28 63 29  Q */...switch(c)
0f00: 20 7b 0a 09 09 09 63 61 73 65 20 4b 45 59 5f 4c   {....case KEY_L
0f10: 45 46 54 3a 0a 09 09 09 09 69 66 20 28 73 65 6c  EFT:.....if (sel
0f20: 65 63 74 69 6f 6e 5f 63 6f 75 6e 74 65 72 20 3e  ection_counter >
0f30: 20 32 29 20 7b 0a 09 09 09 09 09 6d 65 6e 75 5f   2) {......menu_
0f40: 63 6f 75 6e 74 65 72 20 3d 20 33 3b 0a 09 09 09  counter = 3;....
0f50: 09 09 6d 65 6e 75 20 3d 20 26 73 68 75 74 74 65  ..menu = &shutte
0f60: 72 5f 6d 65 6e 75 3b 0a 09 09 09 09 09 77 69 6e  r_menu;......win
0f70: 20 3d 20 26 73 68 75 74 74 65 72 5f 77 69 6e 3b   = &shutter_win;
0f80: 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 65 61 6b  .....}.....break
0f90: 3b 0a 09 09 09 63 61 73 65 20 4b 45 59 5f 52 49  ;....case KEY_RI
0fa0: 47 48 54 3a 0a 09 09 09 09 69 66 20 28 73 65 6c  GHT:.....if (sel
0fb0: 65 63 74 69 6f 6e 5f 63 6f 75 6e 74 65 72 20 3e  ection_counter >
0fc0: 20 32 29 20 7b 0a 09 09 09 09 09 6d 65 6e 75 5f   2) {......menu_
0fd0: 63 6f 75 6e 74 65 72 20 3d 20 34 3b 0a 09 09 09  counter = 4;....
0fe0: 09 09 6d 65 6e 75 20 3d 20 26 61 70 65 72 74 75  ..menu = &apertu
0ff0: 72 65 5f 6d 65 6e 75 3b 0a 09 09 09 09 09 77 69  re_menu;......wi
1000: 6e 20 3d 20 26 61 70 65 72 74 75 72 65 5f 77 69  n = &aperture_wi
1010: 6e 3b 0a 09 09 09 09 7d 0a 09 09 09 09 62 72 65  n;.....}.....bre
1020: 61 6b 3b 0a 09 09 09 63 61 73 65 20 4b 45 59 5f  ak;....case KEY_
1030: 44 4f 57 4e 3a 0a 09 09 09 09 6d 65 6e 75 5f 64  DOWN:.....menu_d
1040: 72 69 76 65 72 28 2a 6d 65 6e 75 2c 20 52 45 51  river(*menu, REQ
1050: 5f 44 4f 57 4e 5f 49 54 45 4d 29 3b 0a 09 09 09  _DOWN_ITEM);....
1060: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
1070: 4b 45 59 5f 55 50 3a 0a 09 09 09 09 6d 65 6e 75  KEY_UP:.....menu
1080: 5f 64 72 69 76 65 72 28 2a 6d 65 6e 75 2c 20 52  _driver(*menu, R
1090: 45 51 5f 55 50 5f 49 54 45 4d 29 3b 0a 09 09 09  EQ_UP_ITEM);....
10a0: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
10b0: 31 30 3a 20 7b 20 2f 2a 20 45 4e 54 45 52 20 2a  10: { /* ENTER *
10c0: 2f 0a 09 09 09 09 49 54 45 4d 20 2a 63 75 72 3b  /.....ITEM *cur;
10d0: 0a 09 09 09 09 76 6f 69 64 20 28 2a 70 29 28 63  .....void (*p)(c
10e0: 68 61 72 20 2a 29 3b 0a 0a 09 09 09 09 63 75 72  har *);......cur
10f0: 20 3d 20 63 75 72 72 65 6e 74 5f 69 74 65 6d 28   = current_item(
1100: 2a 6d 65 6e 75 29 3b 0a 09 09 09 09 70 20 3d 20  *menu);.....p = 
1110: 69 74 65 6d 5f 75 73 65 72 70 74 72 28 63 75 72  item_userptr(cur
1120: 29 3b 0a 09 09 09 09 2f 2a 20 4c 65 61 72 6e 69  );...../* Learni
1130: 6e 67 20 6e 6f 74 65 73 20 2d 20 44 6f 6e 27 74  ng notes - Don't
1140: 20 75 6e 64 65 72 73 74 61 6e 64 20 74 68 69 73   understand this
1150: 20 62 69 74 2e 20 49 73 20 74 68 69 73 20 61 20   bit. Is this a 
1160: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
1170: 3f 20 2a 2f 0a 09 09 09 09 70 28 28 63 68 61 72  ? */.....p((char
1180: 20 2a 29 69 74 65 6d 5f 6e 61 6d 65 28 63 75 72   *)item_name(cur
1190: 29 29 3b 0a 09 09 09 09 2f 2a 20 4e 65 65 64 20  ));...../* Need 
11a0: 74 6f 20 69 67 6f 72 65 20 6f 76 65 72 2f 75 6e  to igore over/un
11b0: 64 65 72 20 69 66 20 73 65 6c 65 63 74 65 64 2c  der if selected,
11c0: 20 70 72 6f 62 61 62 6c 79 20 65 61 73 69 65 72   probably easier
11d0: 20 74 68 61 6e 20 74 72 79 20 74 6f 20 70 72 65   than try to pre
11e0: 76 65 6e 74 20 73 65 6c 65 63 74 69 6f 6e 20 2a  vent selection *
11f0: 2f 0a 09 09 09 09 69 66 20 28 21 28 28 73 74 72  /.....if (!((str
1200: 63 6d 70 28 22 4f 56 45 52 22 2c 20 73 68 75 74  cmp("OVER", shut
1210: 74 65 72 5f 73 65 6c 29 20 3d 3d 20 30 29 0a 09  ter_sel) == 0)..
1220: 09 09 09 09 09 7c 7c 20 28 73 74 72 63 6d 70 28  .....|| (strcmp(
1230: 22 55 4e 44 45 52 22 2c 20 73 68 75 74 74 65 72  "UNDER", shutter
1240: 5f 73 65 6c 29 20 3d 3d 20 30 29 20 0a 09 09 09  _sel) == 0) ....
1250: 09 09 09 7c 7c 20 28 73 74 72 63 6d 70 28 22 4f  ...|| (strcmp("O
1260: 56 45 52 22 2c 20 61 70 65 72 74 75 72 65 5f 73  VER", aperture_s
1270: 65 6c 29 20 3d 3d 20 30 29 20 0a 09 09 09 09 09  el) == 0) ......
1280: 09 7c 7c 20 28 73 74 72 63 6d 70 28 22 55 4e 44  .|| (strcmp("UND
1290: 45 52 22 2c 20 61 70 65 72 74 75 72 65 5f 73 65  ER", aperture_se
12a0: 6c 29 20 3d 3d 20 30 29 29 29 20 7b 0a 09 09 09  l) == 0))) {....
12b0: 09 09 73 77 69 74 63 68 20 28 73 65 6c 65 63 74  ..switch (select
12c0: 69 6f 6e 5f 63 6f 75 6e 74 65 72 29 20 7b 0a 09  ion_counter) {..
12d0: 09 09 09 09 09 63 61 73 65 20 31 3a 20 7b 20 2f  .....case 1: { /
12e0: 2a 20 45 78 70 6f 73 75 72 65 20 73 65 6c 65 63  * Exposure selec
12f0: 74 65 64 20 2a 2f 0a 09 09 09 09 09 09 09 73 65  ted */........se
1300: 6c 65 63 74 69 6f 6e 5f 63 6f 75 6e 74 65 72 20  lection_counter 
1310: 2b 3d 20 31 3b 0a 09 09 09 09 09 09 09 6d 65 6e  += 1;........men
1320: 75 5f 63 6f 75 6e 74 65 72 20 2b 3d 20 31 3b 0a  u_counter += 1;.
1330: 09 09 09 09 09 09 09 6d 6f 76 65 28 4c 49 4e 45  .......move(LINE
1340: 53 20 2d 20 32 2c 20 30 29 3b 0a 09 09 09 09 09  S - 2, 0);......
1350: 09 09 63 6c 72 74 6f 65 6f 6c 28 29 3b 0a 09 09  ..clrtoeol();...
1360: 09 09 09 09 09 6d 76 70 72 69 6e 74 77 28 4c 49  .....mvprintw(LI
1370: 4e 45 53 20 2d 20 32 2c 20 30 2c 20 22 53 65 6c  NES - 2, 0, "Sel
1380: 65 63 74 20 49 53 4f 22 29 3b 0a 09 09 09 09 09  ect ISO");......
1390: 09 09 72 65 66 72 65 73 68 28 29 3b 0a 09 09 09  ..refresh();....
13a0: 09 09 09 09 6d 65 6e 75 20 3d 20 26 69 73 6f 5f  ....menu = &iso_
13b0: 6d 65 6e 75 3b 0a 09 09 09 09 09 09 09 77 69 6e  menu;........win
13c0: 20 3d 20 26 69 73 6f 5f 77 69 6e 3b 0a 09 09 09   = &iso_win;....
13d0: 09 09 09 7d 0a 09 09 09 09 09 09 62 72 65 61 6b  ...}.......break
13e0: 3b 0a 09 09 09 09 09 09 63 61 73 65 20 32 3a 20  ;.......case 2: 
13f0: 7b 20 2f 2a 20 49 53 4f 20 53 65 6c 65 63 74 65  { /* ISO Selecte
1400: 64 20 2a 2f 0a 09 09 09 09 09 09 09 73 65 6c 65  d */........sele
1410: 63 74 69 6f 6e 5f 63 6f 75 6e 74 65 72 20 2b 3d  ction_counter +=
1420: 20 31 3b 0a 09 09 09 09 09 09 09 6d 65 6e 75 5f   1;........menu_
1430: 63 6f 75 6e 74 65 72 20 2b 3d 20 31 3b 0a 09 09  counter += 1;...
1440: 09 09 09 09 09 6d 6f 76 65 28 4c 49 4e 45 53 20  .....move(LINES 
1450: 2d 20 32 2c 20 30 29 3b 0a 09 09 09 09 09 09 09  - 2, 0);........
1460: 63 6c 72 74 6f 65 6f 6c 28 29 3b 0a 09 09 09 09  clrtoeol();.....
1470: 09 09 09 6d 76 70 72 69 6e 74 77 28 4c 49 4e 45  ...mvprintw(LINE
1480: 53 20 2d 20 32 2c 20 30 2c 20 22 53 65 6c 65 63  S - 2, 0, "Selec
1490: 74 20 53 68 75 74 74 65 72 20 6f 72 20 41 70 65  t Shutter or Ape
14a0: 72 74 75 72 65 22 29 3b 0a 09 09 09 09 09 09 09  rture");........
14b0: 72 65 66 72 65 73 68 28 29 3b 0a 09 09 09 09 09  refresh();......
14c0: 09 09 6d 65 6e 75 20 3d 20 26 73 68 75 74 74 65  ..menu = &shutte
14d0: 72 5f 6d 65 6e 75 3b 0a 09 09 09 09 09 09 09 77  r_menu;........w
14e0: 69 6e 20 3d 20 26 73 68 75 74 74 65 72 5f 77 69  in = &shutter_wi
14f0: 6e 3b 0a 09 09 09 09 09 09 7d 0a 09 09 09 09 09  n;.......}......
1500: 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 09 63 61  .break;.......ca
1510: 73 65 20 33 3a 20 7b 20 2f 2a 20 53 68 75 74 74  se 3: { /* Shutt
1520: 65 72 20 6f 72 20 41 70 65 72 74 75 72 65 20 73  er or Aperture s
1530: 65 6c 65 63 74 65 64 20 2a 2f 0a 09 09 09 09 09  elected */......
1540: 09 09 69 66 20 28 73 74 72 63 6d 70 28 22 22 2c  ..if (strcmp("",
1550: 20 73 68 75 74 74 65 72 5f 73 65 6c 29 20 3d 3d   shutter_sel) ==
1560: 20 30 29 20 7b 0a 09 09 09 09 09 09 09 09 63 68   0) {.........ch
1570: 61 72 20 61 70 65 72 74 75 72 65 5f 73 65 6c 5f  ar aperture_sel_
1580: 5b 34 5d 20 3d 20 22 22 3b 0a 09 09 09 09 09 09  [4] = "";.......
1590: 09 09 73 74 72 6e 63 70 79 28 61 70 65 72 74 75  ..strncpy(apertu
15a0: 72 65 5f 73 65 6c 5f 2c 20 61 70 65 72 74 75 72  re_sel_, apertur
15b0: 65 5f 73 65 6c 2b 32 2c 20 33 29 3b 0a 09 09 09  e_sel+2, 3);....
15c0: 09 09 09 09 09 2f 2a 20 55 73 69 6e 67 20 6d 65  ...../* Using me
15d0: 6e 75 5f 64 72 69 76 65 72 20 74 6f 20 67 6f 20  nu_driver to go 
15e0: 75 70 2f 64 6f 77 6e 20 74 6f 20 66 6f 72 63 65  up/down to force
15f0: 20 72 65 66 72 65 73 68 20 61 6e 64 20 63 6f 72   refresh and cor
1600: 72 65 63 74 20 68 69 67 68 6c 69 67 68 74 69 6e  rect highlightin
1610: 67 20 2a 2f 0a 09 09 09 09 09 09 09 09 6d 65 6e  g */.........men
1620: 75 5f 64 72 69 76 65 72 28 73 68 75 74 74 65 72  u_driver(shutter
1630: 5f 6d 65 6e 75 2c 20 52 45 51 5f 53 43 52 5f 55  _menu, REQ_SCR_U
1640: 50 41 47 45 29 3b 0a 09 09 09 09 09 09 09 09 6d  PAGE);.........m
1650: 65 6e 75 5f 64 72 69 76 65 72 28 73 68 75 74 74  enu_driver(shutt
1660: 65 72 5f 6d 65 6e 75 2c 20 52 45 51 5f 53 43 52  er_menu, REQ_SCR
1670: 5f 44 50 41 47 45 29 3b 0a 09 09 09 09 09 09 09  _DPAGE);........
1680: 09 2f 2a 20 54 68 65 72 65 20 69 73 20 70 72 6f  ./* There is pro
1690: 62 61 62 6c 79 20 61 20 6e 69 63 65 72 20 77 61  bably a nicer wa
16a0: 79 20 74 6f 20 66 6f 72 6d 61 74 20 74 68 65 20  y to format the 
16b0: 62 65 6c 6f 77 20 2a 2f 0a 09 09 09 09 09 09 09  below */........
16c0: 09 73 65 74 5f 6d 65 6e 75 5f 70 61 74 74 65 72  .set_menu_patter
16d0: 6e 28 0a 09 09 09 09 09 09 09 09 09 73 68 75 74  n(..........shut
16e0: 74 65 72 5f 6d 65 6e 75 2c 0a 09 09 09 09 09 09  ter_menu,.......
16f0: 09 09 09 73 68 75 74 74 65 72 5f 61 72 72 61 79  ...shutter_array
1700: 5b 6e 65 61 72 65 73 74 5f 6d 61 74 63 68 28 0a  [nearest_match(.
1710: 09 09 09 09 09 09 09 09 09 09 73 68 75 74 74 65  ..........shutte
1720: 72 28 65 78 70 6f 73 75 72 65 28 61 74 6f 69 28  r(exposure(atoi(
1730: 69 73 6f 5f 73 65 6c 29 29 2c 20 73 74 72 74 6f  iso_sel)), strto
1740: 64 28 61 70 65 72 74 75 72 65 5f 73 65 6c 5f 2c  d(aperture_sel_,
1750: 20 4e 55 4c 4c 29 29 2c 0a 09 09 09 09 09 09 09   NULL)),........
1760: 09 09 09 33 2c 0a 09 09 09 09 09 09 09 09 09 09  ...3,...........
1770: 6e 5f 73 68 75 74 74 65 72 0a 09 09 09 09 09 09  n_shutter.......
1780: 09 09 09 29 5d 0a 09 09 09 09 09 09 09 09 29 3b  ...)].........);
1790: 0a 09 09 09 09 09 09 09 09 6d 65 6e 75 5f 64 72  .........menu_dr
17a0: 69 76 65 72 28 73 68 75 74 74 65 72 5f 6d 65 6e  iver(shutter_men
17b0: 75 2c 20 52 45 51 5f 44 4f 57 4e 5f 49 54 45 4d  u, REQ_DOWN_ITEM
17c0: 29 3b 0a 09 09 09 09 09 09 09 09 6d 65 6e 75 5f  );.........menu_
17d0: 64 72 69 76 65 72 28 73 68 75 74 74 65 72 5f 6d  driver(shutter_m
17e0: 65 6e 75 2c 20 52 45 51 5f 55 50 5f 49 54 45 4d  enu, REQ_UP_ITEM
17f0: 29 3b 0a 09 09 09 09 09 09 09 09 77 72 65 66 72  );.........wrefr
1800: 65 73 68 28 73 68 75 74 74 65 72 5f 77 69 6e 29  esh(shutter_win)
1810: 3b 0a 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09  ;........}......
1820: 09 09 69 66 20 28 73 74 72 63 6d 70 28 22 22 2c  ..if (strcmp("",
1830: 20 61 70 65 72 74 75 72 65 5f 73 65 6c 29 20 3d   aperture_sel) =
1840: 3d 20 30 29 20 7b 0a 09 09 09 09 09 09 09 09 6d  = 0) {.........m
1850: 65 6e 75 5f 64 72 69 76 65 72 28 61 70 65 72 74  enu_driver(apert
1860: 75 72 65 5f 6d 65 6e 75 2c 20 52 45 51 5f 53 43  ure_menu, REQ_SC
1870: 52 5f 55 50 41 47 45 29 3b 0a 09 09 09 09 09 09  R_UPAGE);.......
1880: 09 09 6d 65 6e 75 5f 64 72 69 76 65 72 28 61 70  ..menu_driver(ap
1890: 65 72 74 75 72 65 5f 6d 65 6e 75 2c 20 52 45 51  erture_menu, REQ
18a0: 5f 53 43 52 5f 44 50 41 47 45 29 3b 0a 09 09 09  _SCR_DPAGE);....
18b0: 09 09 09 09 09 73 65 74 5f 6d 65 6e 75 5f 70 61  .....set_menu_pa
18c0: 74 74 65 72 6e 28 0a 09 09 09 09 09 09 09 09 09  ttern(..........
18d0: 61 70 65 72 74 75 72 65 5f 6d 65 6e 75 2c 0a 09  aperture_menu,..
18e0: 09 09 09 09 09 09 09 09 61 70 65 72 74 75 72 65  ........aperture
18f0: 5f 61 72 72 61 79 5b 6e 65 61 72 65 73 74 5f 6d  _array[nearest_m
1900: 61 74 63 68 28 0a 09 09 09 09 09 09 09 09 09 09  atch(...........
1910: 61 70 65 72 74 75 72 65 28 65 78 70 6f 73 75 72  aperture(exposur
1920: 65 28 61 74 6f 69 28 69 73 6f 5f 73 65 6c 29 29  e(atoi(iso_sel))
1930: 2c 20 66 72 61 63 74 69 6f 6e 5f 74 6f 5f 64 6f  , fraction_to_do
1940: 75 62 6c 65 28 73 68 75 74 74 65 72 5f 73 65 6c  uble(shutter_sel
1950: 29 29 2c 0a 09 09 09 09 09 09 09 09 09 09 34 2c  )),...........4,
1960: 0a 09 09 09 09 09 09 09 09 09 09 6e 5f 61 70 65  ...........n_ape
1970: 72 74 75 72 65 0a 09 09 09 09 09 09 09 09 09 29  rture..........)
1980: 5d 0a 09 09 09 09 09 09 09 09 29 3b 0a 09 09 09  ].........);....
1990: 09 09 09 09 09 6d 65 6e 75 5f 64 72 69 76 65 72  .....menu_driver
19a0: 28 61 70 65 72 74 75 72 65 5f 6d 65 6e 75 2c 20  (aperture_menu, 
19b0: 52 45 51 5f 44 4f 57 4e 5f 49 54 45 4d 29 3b 0a  REQ_DOWN_ITEM);.
19c0: 09 09 09 09 09 09 09 09 6d 65 6e 75 5f 64 72 69  ........menu_dri
19d0: 76 65 72 28 61 70 65 72 74 75 72 65 5f 6d 65 6e  ver(aperture_men
19e0: 75 2c 20 52 45 51 5f 55 50 5f 49 54 45 4d 29 3b  u, REQ_UP_ITEM);
19f0: 0a 09 09 09 09 09 09 09 09 77 72 65 66 72 65 73  .........wrefres
1a00: 68 28 61 70 65 72 74 75 72 65 5f 77 69 6e 29 3b  h(aperture_win);
1a10: 0a 09 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09  ........}.......
1a20: 09 2f 2a 20 43 6c 65 61 72 20 74 68 65 20 73 65  ./* Clear the se
1a30: 6c 65 63 74 69 6f 6e 73 20 66 6f 72 20 6e 65 78  lections for nex
1a40: 74 20 74 69 6d 65 20 2a 2f 0a 09 09 09 09 09 09  t time */.......
1a50: 09 73 74 72 63 70 79 28 69 73 6f 5f 73 65 6c 2c  .strcpy(iso_sel,
1a60: 20 22 22 29 3b 0a 09 09 09 09 09 09 09 73 74 72   "");........str
1a70: 63 70 79 28 73 68 75 74 74 65 72 5f 73 65 6c 2c  cpy(shutter_sel,
1a80: 20 22 22 29 3b 0a 09 09 09 09 09 09 09 73 74 72   "");........str
1a90: 63 70 79 28 61 70 65 72 74 75 72 65 5f 73 65 6c  cpy(aperture_sel
1aa0: 2c 20 22 22 29 3b 0a 09 09 09 09 09 09 09 2f 2a  , "");......../*
1ab0: 20 41 6e 64 20 73 65 74 20 64 65 66 61 75 6c 74   And set default
1ac0: 73 20 62 61 63 6b 20 74 6f 20 73 74 61 72 74 20  s back to start 
1ad0: 2a 2f 0a 09 09 09 09 09 09 09 73 65 6c 65 63 74  */........select
1ae0: 69 6f 6e 5f 63 6f 75 6e 74 65 72 20 3d 20 31 3b  ion_counter = 1;
1af0: 0a 09 09 09 09 09 09 09 6d 65 6e 75 5f 63 6f 75  ........menu_cou
1b00: 6e 74 65 72 20 3d 20 31 3b 0a 09 09 09 09 09 09  nter = 1;.......
1b10: 09 6d 65 6e 75 20 3d 20 26 65 78 70 6f 73 75 72  .menu = &exposur
1b20: 65 5f 6d 65 6e 75 3b 0a 09 09 09 09 09 09 09 77  e_menu;........w
1b30: 69 6e 20 3d 20 26 65 78 70 6f 73 75 72 65 5f 77  in = &exposure_w
1b40: 69 6e 3b 0a 09 09 09 09 09 09 09 6d 6f 76 65 28  in;........move(
1b50: 4c 49 4e 45 53 20 2d 20 32 2c 20 30 29 3b 0a 09  LINES - 2, 0);..
1b60: 09 09 09 09 09 09 63 6c 72 74 6f 65 6f 6c 28 29  ......clrtoeol()
1b70: 3b 0a 09 09 09 09 09 09 09 6d 76 70 72 69 6e 74  ;........mvprint
1b80: 77 28 4c 49 4e 45 53 20 2d 20 32 2c 20 30 2c 20  w(LINES - 2, 0, 
1b90: 22 53 65 6c 65 63 74 20 45 56 22 29 3b 0a 09 09  "Select EV");...
1ba0: 09 09 09 09 09 72 65 66 72 65 73 68 28 29 3b 0a  .....refresh();.
1bb0: 09 09 09 09 09 09 7d 0a 09 09 09 09 09 09 62 72  ......}.......br
1bc0: 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09  eak;......}.....
1bd0: 7d 0a 09 09 09 09 2f 2a 20 49 66 20 6f 76 65 72  }...../* If over
1be0: 2f 75 6e 64 65 72 20 6e 65 65 64 20 74 6f 20 63  /under need to c
1bf0: 6c 65 61 72 20 73 65 6c 65 63 74 69 6f 6e 20 73  lear selection s
1c00: 6f 20 6b 6e 6f 77 20 77 68 69 63 68 20 69 73 20  o know which is 
1c10: 62 6c 61 6e 6b 20 77 68 65 6e 20 61 20 70 72 6f  blank when a pro
1c20: 70 65 72 20 73 65 6c 65 63 74 69 6f 6e 20 69 73  per selection is
1c30: 20 6d 61 64 65 20 2a 2f 0a 09 09 09 09 69 66 20   made */.....if 
1c40: 28 28 73 74 72 63 6d 70 28 22 4f 56 45 52 22 2c  ((strcmp("OVER",
1c50: 20 73 68 75 74 74 65 72 5f 73 65 6c 29 20 3d 3d   shutter_sel) ==
1c60: 20 30 29 20 7c 7c 20 28 73 74 72 63 6d 70 28 22   0) || (strcmp("
1c70: 55 4e 44 45 52 22 2c 20 73 68 75 74 74 65 72 5f  UNDER", shutter_
1c80: 73 65 6c 29 20 3d 3d 20 30 29 29 20 7b 0a 09 09  sel) == 0)) {...
1c90: 09 09 09 73 74 72 63 70 79 28 73 68 75 74 74 65  ...strcpy(shutte
1ca0: 72 5f 73 65 6c 2c 20 22 22 29 3b 0a 09 09 09 09  r_sel, "");.....
1cb0: 7d 0a 09 09 09 09 69 66 20 28 28 73 74 72 63 6d  }.....if ((strcm
1cc0: 70 28 22 4f 56 45 52 22 2c 20 61 70 65 72 74 75  p("OVER", apertu
1cd0: 72 65 5f 73 65 6c 29 20 3d 3d 20 30 29 20 7c 7c  re_sel) == 0) ||
1ce0: 20 28 73 74 72 63 6d 70 28 22 55 4e 44 45 52 22   (strcmp("UNDER"
1cf0: 2c 20 61 70 65 72 74 75 72 65 5f 73 65 6c 29 20  , aperture_sel) 
1d00: 3d 3d 20 30 29 29 20 7b 0a 09 09 09 09 09 73 74  == 0)) {......st
1d10: 72 63 70 79 28 61 70 65 72 74 75 72 65 5f 73 65  rcpy(aperture_se
1d20: 6c 2c 20 22 22 29 3b 0a 09 09 09 09 7d 0a 09 09  l, "");.....}...
1d30: 09 7d 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d  .}....break;...}
1d40: 0a 09 09 77 72 65 66 72 65 73 68 28 2a 77 69 6e  ...wrefresh(*win
1d50: 29 3b 0a 09 7d 09 0a 09 2f 2a 20 55 6e 70 6f 73  );..}.../* Unpos
1d60: 74 20 61 6e 64 20 66 72 65 65 20 61 6c 6c 20 74  t and free all t
1d70: 68 65 20 6d 65 6d 6f 72 79 20 74 61 6b 65 6e 20  he memory taken 
1d80: 75 70 20 2a 2f 0a 09 72 65 6d 6f 76 65 5f 6d 65  up */..remove_me
1d90: 6e 75 28 65 78 70 6f 73 75 72 65 5f 69 74 65 6d  nu(exposure_item
1da0: 73 2c 20 65 78 70 6f 73 75 72 65 5f 6d 65 6e 75  s, exposure_menu
1db0: 2c 20 6e 5f 65 78 70 6f 73 75 72 65 29 3b 0a 09  , n_exposure);..
1dc0: 72 65 6d 6f 76 65 5f 6d 65 6e 75 28 69 73 6f 5f  remove_menu(iso_
1dd0: 69 74 65 6d 73 2c 20 69 73 6f 5f 6d 65 6e 75 2c  items, iso_menu,
1de0: 20 6e 5f 69 73 6f 29 3b 0a 09 72 65 6d 6f 76 65   n_iso);..remove
1df0: 5f 6d 65 6e 75 28 73 68 75 74 74 65 72 5f 69 74  _menu(shutter_it
1e00: 65 6d 73 2c 20 73 68 75 74 74 65 72 5f 6d 65 6e  ems, shutter_men
1e10: 75 2c 20 6e 5f 73 68 75 74 74 65 72 29 3b 0a 09  u, n_shutter);..
1e20: 72 65 6d 6f 76 65 5f 6d 65 6e 75 28 61 70 65 72  remove_menu(aper
1e30: 74 75 72 65 5f 69 74 65 6d 73 2c 20 61 70 65 72  ture_items, aper
1e40: 74 75 72 65 5f 6d 65 6e 75 2c 20 6e 5f 61 70 65  ture_menu, n_ape
1e50: 72 74 75 72 65 29 3b 0a 09 65 6e 64 77 69 6e 28  rture);..endwin(
1e60: 29 3b 0a 7d 0a 0a 2f 2a 20 42 65 6c 6f 77 20 70  );.}../* Below p
1e70: 6f 69 6e 74 65 72 20 63 6f 6e 66 69 67 75 72 61  ointer configura
1e80: 74 69 6f 6e 20 66 69 67 75 72 65 64 20 6f 75 74  tion figured out
1e90: 20 66 72 6f 6d 3a 0a 20 2a 20 68 74 74 70 73 3a   from:. * https:
1ea0: 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 59 75 72  //github.com/Yur
1eb0: 69 63 6b 68 2f 50 73 79 63 68 6f 2d 54 65 74 72  ickh/Psycho-Tetr
1ec0: 69 73 2f 62 6c 6f 62 2f 6d 61 73 74 65 72 2f 73  is/blob/master/s
1ed0: 72 63 2f 6d 65 6e 75 2e 63 23 4c 39 20 2a 2f 0a  rc/menu.c#L9 */.
1ee0: 49 54 45 4d 20 2a 2a 61 64 64 5f 69 74 65 6d 28  ITEM **add_item(
1ef0: 63 68 61 72 20 2a 2a 61 72 72 61 79 2c 20 69 6e  char **array, in
1f00: 74 20 6e 29 20 7b 0a 09 69 6e 74 20 69 3b 0a 09  t n) {..int i;..
1f10: 49 54 45 4d 20 2a 2a 6c 6f 63 61 6c 5f 69 74 65  ITEM **local_ite
1f20: 6d 73 3b 0a 0a 09 6c 6f 63 61 6c 5f 69 74 65 6d  ms;...local_item
1f30: 73 20 3d 20 28 49 54 45 4d 20 2a 2a 29 63 61 6c  s = (ITEM **)cal
1f40: 6c 6f 63 28 6e 2c 20 73 69 7a 65 6f 66 28 49 54  loc(n, sizeof(IT
1f50: 45 4d 20 2a 29 29 3b 0a 09 66 6f 72 28 69 20 3d  EM *));..for(i =
1f60: 20 30 3b 20 69 3c 6e 3b 20 2b 2b 69 29 20 7b 0a   0; i<n; ++i) {.
1f70: 09 09 6c 6f 63 61 6c 5f 69 74 65 6d 73 5b 69 5d  ..local_items[i]
1f80: 20 3d 20 6e 65 77 5f 69 74 65 6d 28 61 72 72 61   = new_item(arra
1f90: 79 5b 69 5d 2c 20 61 72 72 61 79 5b 69 5d 29 3b  y[i], array[i]);
1fa0: 0a 09 09 73 65 74 5f 69 74 65 6d 5f 75 73 65 72  ...set_item_user
1fb0: 70 74 72 28 6c 6f 63 61 6c 5f 69 74 65 6d 73 5b  ptr(local_items[
1fc0: 69 5d 2c 20 73 65 6c 65 63 74 69 6f 6e 29 3b 0a  i], selection);.
1fd0: 09 7d 0a 09 72 65 74 75 72 6e 20 6c 6f 63 61 6c  .}..return local
1fe0: 5f 69 74 65 6d 73 3b 0a 7d 0a 0a 4d 45 4e 55 20  _items;.}..MENU 
1ff0: 2a 61 64 64 5f 6d 65 6e 75 28 49 54 45 4d 20 2a  *add_menu(ITEM *
2000: 2a 69 74 65 6d 73 29 20 7b 0a 09 4d 45 4e 55 20  *items) {..MENU 
2010: 2a 6c 6f 63 61 6c 5f 6d 65 6e 75 3b 0a 0a 09 6c  *local_menu;...l
2020: 6f 63 61 6c 5f 6d 65 6e 75 20 3d 20 6e 65 77 5f  ocal_menu = new_
2030: 6d 65 6e 75 28 28 49 54 45 4d 20 2a 2a 29 69 74  menu((ITEM **)it
2040: 65 6d 73 29 3b 0a 09 73 65 74 5f 6d 65 6e 75 5f  ems);..set_menu_
2050: 66 6f 72 6d 61 74 28 6c 6f 63 61 6c 5f 6d 65 6e  format(local_men
2060: 75 2c 20 35 2c 20 31 29 3b 0a 09 73 65 74 5f 6d  u, 5, 1);..set_m
2070: 65 6e 75 5f 6d 61 72 6b 28 6c 6f 63 61 6c 5f 6d  enu_mark(local_m
2080: 65 6e 75 2c 20 22 20 2a 20 22 29 3b 0a 09 72 65  enu, " * ");..re
2090: 74 75 72 6e 20 6c 6f 63 61 6c 5f 6d 65 6e 75 3b  turn local_menu;
20a0: 0a 7d 0a 0a 57 49 4e 44 4f 57 20 2a 61 64 64 5f  .}..WINDOW *add_
20b0: 77 69 6e 64 6f 77 28 69 6e 74 20 78 70 6f 73 2c  window(int xpos,
20c0: 20 63 68 61 72 20 2a 74 69 74 6c 65 29 20 7b 0a   char *title) {.
20d0: 09 57 49 4e 44 4f 57 20 2a 6c 6f 63 61 6c 5f 77  .WINDOW *local_w
20e0: 69 6e 3b 0a 0a 09 6c 6f 63 61 6c 5f 77 69 6e 20  in;...local_win 
20f0: 3d 20 6e 65 77 77 69 6e 28 31 30 2c 20 34 30 2c  = newwin(10, 40,
2100: 20 34 2c 20 78 70 6f 73 29 3b 0a 09 6b 65 79 70   4, xpos);..keyp
2110: 61 64 28 6c 6f 63 61 6c 5f 77 69 6e 2c 20 54 52  ad(local_win, TR
2120: 55 45 29 3b 0a 09 62 6f 78 28 6c 6f 63 61 6c 5f  UE);..box(local_
2130: 77 69 6e 2c 20 30 2c 20 30 29 3b 0a 09 70 72 69  win, 0, 0);..pri
2140: 6e 74 5f 69 6e 5f 6d 69 64 64 6c 65 28 6c 6f 63  nt_in_middle(loc
2150: 61 6c 5f 77 69 6e 2c 20 31 2c 20 30 2c 20 34 30  al_win, 1, 0, 40
2160: 2c 20 74 69 74 6c 65 2c 20 43 4f 4c 4f 52 5f 50  , title, COLOR_P
2170: 41 49 52 28 31 29 29 3b 0a 09 6d 76 77 61 64 64  AIR(1));..mvwadd
2180: 63 68 28 6c 6f 63 61 6c 5f 77 69 6e 2c 20 32 2c  ch(local_win, 2,
2190: 20 30 2c 20 41 43 53 5f 4c 54 45 45 29 3b 0a 09   0, ACS_LTEE);..
21a0: 6d 76 77 68 6c 69 6e 65 28 6c 6f 63 61 6c 5f 77  mvwhline(local_w
21b0: 69 6e 2c 20 32 2c 20 31 2c 20 41 43 53 5f 48 4c  in, 2, 1, ACS_HL
21c0: 49 4e 45 2c 20 33 38 29 3b 0a 09 6d 76 77 61 64  INE, 38);..mvwad
21d0: 64 63 68 28 6c 6f 63 61 6c 5f 77 69 6e 2c 20 32  dch(local_win, 2
21e0: 2c 20 33 39 2c 20 41 43 53 5f 52 54 45 45 29 3b  , 39, ACS_RTEE);
21f0: 0a 09 72 65 74 75 72 6e 20 6c 6f 63 61 6c 5f 77  ..return local_w
2200: 69 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 72 65 6d 6f  in;.}..void remo
2210: 76 65 5f 6d 65 6e 75 28 49 54 45 4d 20 2a 2a 69  ve_menu(ITEM **i
2220: 74 65 6d 73 2c 20 4d 45 4e 55 20 2a 6d 65 6e 2c  tems, MENU *men,
2230: 20 69 6e 74 20 6e 29 20 7b 0a 09 69 6e 74 20 69   int n) {..int i
2240: 3b 0a 0a 09 75 6e 70 6f 73 74 5f 6d 65 6e 75 28  ;...unpost_menu(
2250: 6d 65 6e 29 3b 0a 09 66 72 65 65 5f 6d 65 6e 75  men);..free_menu
2260: 28 6d 65 6e 29 3b 0a 09 66 6f 72 28 69 20 3d 20  (men);..for(i = 
2270: 30 3b 20 69 20 3c 20 6e 3b 20 2b 2b 69 29 0a 09  0; i < n; ++i)..
2280: 09 66 72 65 65 5f 69 74 65 6d 28 69 74 65 6d 73  .free_item(items
2290: 5b 69 5d 29 3b 0a 7d 0a 0a 76 6f 69 64 20 70 72  [i]);.}..void pr
22a0: 69 6e 74 5f 69 6e 5f 6d 69 64 64 6c 65 28 57 49  int_in_middle(WI
22b0: 4e 44 4f 57 20 2a 77 69 6e 2c 20 69 6e 74 20 73  NDOW *win, int s
22c0: 74 61 72 74 79 2c 20 69 6e 74 20 73 74 61 72 74  tarty, int start
22d0: 78 2c 20 69 6e 74 20 77 69 64 74 68 2c 20 63 68  x, int width, ch
22e0: 61 72 20 2a 73 74 72 69 6e 67 2c 20 63 68 74 79  ar *string, chty
22f0: 70 65 20 63 6f 6c 6f 72 29 20 7b 0a 09 69 6e 74  pe color) {..int
2300: 20 6c 65 6e 67 74 68 2c 20 78 2c 20 79 3b 0a 09   length, x, y;..
2310: 66 6c 6f 61 74 20 74 65 6d 70 3b 0a 0a 09 69 66  float temp;...if
2320: 28 77 69 6e 20 3d 3d 20 4e 55 4c 4c 29 0a 09 09  (win == NULL)...
2330: 77 69 6e 20 3d 20 73 74 64 73 63 72 3b 0a 09 67  win = stdscr;..g
2340: 65 74 79 78 28 77 69 6e 2c 20 79 2c 20 78 29 3b  etyx(win, y, x);
2350: 0a 09 69 66 28 73 74 61 72 74 78 20 21 3d 20 30  ..if(startx != 0
2360: 29 0a 09 09 78 20 3d 20 73 74 61 72 74 78 3b 0a  )...x = startx;.
2370: 09 69 66 28 73 74 61 72 74 79 20 21 3d 20 30 29  .if(starty != 0)
2380: 0a 09 09 79 20 3d 20 73 74 61 72 74 79 3b 0a 09  ...y = starty;..
2390: 69 66 28 77 69 64 74 68 20 3d 3d 20 30 29 0a 09  if(width == 0)..
23a0: 09 77 69 64 74 68 20 3d 20 38 30 3b 0a 0a 09 6c  .width = 80;...l
23b0: 65 6e 67 74 68 20 3d 20 73 74 72 6c 65 6e 28 73  ength = strlen(s
23c0: 74 72 69 6e 67 29 3b 0a 09 74 65 6d 70 20 3d 20  tring);..temp = 
23d0: 28 77 69 64 74 68 20 2d 20 6c 65 6e 67 74 68 29  (width - length)
23e0: 2f 20 32 3b 0a 09 78 20 3d 20 73 74 61 72 74 78  / 2;..x = startx
23f0: 20 2b 20 28 69 6e 74 29 74 65 6d 70 3b 0a 09 77   + (int)temp;..w
2400: 61 74 74 72 6f 6e 28 77 69 6e 2c 20 63 6f 6c 6f  attron(win, colo
2410: 72 29 3b 0a 09 6d 76 77 70 72 69 6e 74 77 28 77  r);..mvwprintw(w
2420: 69 6e 2c 20 79 2c 20 78 2c 20 22 25 73 22 2c 20  in, y, x, "%s", 
2430: 73 74 72 69 6e 67 29 3b 0a 09 77 61 74 74 72 6f  string);..wattro
2440: 66 66 28 77 69 6e 2c 20 63 6f 6c 6f 72 29 3b 0a  ff(win, color);.
2450: 09 72 65 66 72 65 73 68 28 29 3b 0a 7d 0a 0a 76  .refresh();.}..v
2460: 6f 69 64 20 73 65 6c 65 63 74 69 6f 6e 28 63 68  oid selection(ch
2470: 61 72 20 2a 6e 61 6d 65 29 20 7b 0a 09 73 77 69  ar *name) {..swi
2480: 74 63 68 28 6d 65 6e 75 5f 63 6f 75 6e 74 65 72  tch(menu_counter
2490: 29 20 7b 0a 09 09 63 61 73 65 20 31 3a 0a 09 09  ) {...case 1:...
24a0: 09 73 74 72 63 70 79 28 65 78 70 6f 73 75 72 65  .strcpy(exposure
24b0: 5f 73 65 6c 2c 20 6e 61 6d 65 29 3b 0a 09 09 09  _sel, name);....
24c0: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 32 3a  break;...case 2:
24d0: 0a 09 09 09 73 74 72 63 70 79 28 69 73 6f 5f 73  ....strcpy(iso_s
24e0: 65 6c 2c 20 6e 61 6d 65 29 3b 0a 09 09 09 62 72  el, name);....br
24f0: 65 61 6b 3b 0a 09 09 63 61 73 65 20 33 3a 0a 09  eak;...case 3:..
2500: 09 09 73 74 72 63 70 79 28 73 68 75 74 74 65 72  ..strcpy(shutter
2510: 5f 73 65 6c 2c 20 6e 61 6d 65 29 3b 0a 09 09 09  _sel, name);....
2520: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 34 3a  break;...case 4:
2530: 0a 09 09 09 73 74 72 63 70 79 28 61 70 65 72 74  ....strcpy(apert
2540: 75 72 65 5f 73 65 6c 2c 20 6e 61 6d 65 29 3b 0a  ure_sel, name);.
2550: 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 7d 0a 0a  ...break;..}.}..
2560: 69 6e 74 20 65 78 70 6f 73 75 72 65 20 28 69 6e  int exposure (in
2570: 74 20 69 73 6f 29 20 7b 0a 09 69 6e 74 20 65 76  t iso) {..int ev
2580: 31 30 30 3b 0a 09 65 76 31 30 30 20 3d 20 31 35  100;..ev100 = 15
2590: 3b 0a 09 72 65 74 75 72 6e 20 65 76 31 30 30 20  ;..return ev100 
25a0: 2b 20 28 6c 6f 67 20 28 69 73 6f 20 2f 20 31 30  + (log (iso / 10
25b0: 30 29 20 2f 20 6c 6f 67 20 28 32 29 29 3b 0a 7d  0) / log (2));.}
25c0: 0a 0a 64 6f 75 62 6c 65 20 73 68 75 74 74 65 72  ..double shutter
25d0: 20 28 69 6e 74 20 65 78 70 6f 73 75 72 65 2c 20   (int exposure, 
25e0: 64 6f 75 62 6c 65 20 61 70 65 72 74 75 72 65 29  double aperture)
25f0: 20 7b 0a 09 2f 2a 20 45 56 20 3d 20 6c 6f 67 32   {../* EV = log2
2600: 20 28 4e 5e 32 2f 74 29 20 2a 2f 0a 09 72 65 74   (N^2/t) */..ret
2610: 75 72 6e 20 70 6f 77 28 61 70 65 72 74 75 72 65  urn pow(aperture
2620: 2c 20 32 29 20 2f 20 70 6f 77 28 32 2c 20 65 78  , 2) / pow(2, ex
2630: 70 6f 73 75 72 65 29 3b 0a 7d 0a 0a 64 6f 75 62  posure);.}..doub
2640: 6c 65 20 61 70 65 72 74 75 72 65 20 28 69 6e 74  le aperture (int
2650: 20 65 78 70 6f 73 75 72 65 2c 20 64 6f 75 62 6c   exposure, doubl
2660: 65 20 73 68 75 74 74 65 72 29 20 7b 0a 09 2f 2a  e shutter) {../*
2670: 20 45 56 20 3d 20 6c 6f 67 32 20 28 4e 5e 32 2f   EV = log2 (N^2/
2680: 74 29 20 2a 2f 0a 09 72 65 74 75 72 6e 20 73 71  t) */..return sq
2690: 72 74 28 70 6f 77 28 32 2c 20 65 78 70 6f 73 75  rt(pow(2, exposu
26a0: 72 65 29 20 2a 20 73 68 75 74 74 65 72 29 3b 0a  re) * shutter);.
26b0: 7d 0a 0a 69 6e 74 20 6e 65 61 72 65 73 74 5f 6d  }..int nearest_m
26c0: 61 74 63 68 20 28 64 6f 75 62 6c 65 20 78 2c 20  atch (double x, 
26d0: 69 6e 74 20 6d 65 6e 75 2c 20 69 6e 74 20 6e 5f  int menu, int n_
26e0: 61 72 72 61 79 29 20 7b 0a 09 2f 2a 20 4e 65 65  array) {../* Nee
26f0: 64 20 74 6f 20 73 65 61 72 63 68 20 61 72 72 61  d to search arra
2700: 79 20 66 6f 72 20 63 6c 6f 73 65 73 74 20 6d 61  y for closest ma
2710: 74 63 68 20 2a 2f 0a 09 69 6e 74 20 6e 3b 0a 09  tch */..int n;..
2720: 69 6e 74 20 64 69 66 66 5f 69 64 78 20 3d 20 31  int diff_idx = 1
2730: 3b 0a 09 63 68 61 72 20 61 72 72 61 79 5f 76 61  ;..char array_va
2740: 6c 75 65 5f 73 74 72 5b 39 5d 3b 0a 09 64 6f 75  lue_str[9];..dou
2750: 62 6c 65 20 61 72 72 61 79 5f 76 61 6c 75 65 5f  ble array_value_
2760: 64 62 3b 0a 09 64 6f 75 62 6c 65 20 64 69 66 66  db;..double diff
2770: 3b 0a 0a 09 2f 2a 20 4e 65 65 64 20 61 20 73 74  ;.../* Need a st
2780: 61 72 74 69 6e 67 20 76 61 6c 75 65 20 66 6f 72  arting value for
2790: 20 64 69 66 66 65 72 65 6e 63 65 20 2a 2f 0a 09   difference */..
27a0: 73 77 69 74 63 68 28 6d 65 6e 75 29 20 7b 0a 09  switch(menu) {..
27b0: 09 63 61 73 65 20 33 3a 0a 09 09 09 61 72 72 61  .case 3:....arra
27c0: 79 5f 76 61 6c 75 65 5f 64 62 20 3d 20 66 72 61  y_value_db = fra
27d0: 63 74 69 6f 6e 5f 74 6f 5f 64 6f 75 62 6c 65 28  ction_to_double(
27e0: 73 68 75 74 74 65 72 5f 61 72 72 61 79 5b 31 5d  shutter_array[1]
27f0: 29 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  );....break;...c
2800: 61 73 65 20 34 3a 0a 09 09 09 73 74 72 6e 63 70  ase 4:....strncp
2810: 79 28 61 72 72 61 79 5f 76 61 6c 75 65 5f 73 74  y(array_value_st
2820: 72 2c 20 61 70 65 72 74 75 72 65 5f 61 72 72 61  r, aperture_arra
2830: 79 5b 31 5d 2b 32 2c 20 34 29 3b 0a 09 09 09 61  y[1]+2, 4);....a
2840: 72 72 61 79 5f 76 61 6c 75 65 5f 64 62 20 3d 20  rray_value_db = 
2850: 73 74 72 74 6f 64 28 61 72 72 61 79 5f 76 61 6c  strtod(array_val
2860: 75 65 5f 73 74 72 2c 20 4e 55 4c 4c 29 3b 0a 09  ue_str, NULL);..
2870: 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 09 64 69 66  ..break;..}..dif
2880: 66 20 3d 20 66 61 62 73 28 61 72 72 61 79 5f 76  f = fabs(array_v
2890: 61 6c 75 65 5f 64 62 20 2d 20 78 29 3b 0a 09 2f  alue_db - x);../
28a0: 2a 20 4c 6f 74 73 20 6f 66 20 72 65 70 65 74 69  * Lots of repeti
28b0: 74 69 6f 6e 20 68 65 72 65 20 62 75 74 20 70 6f  tion here but po
28c0: 69 6e 74 65 72 73 20 74 6f 20 61 72 72 61 79 73  inters to arrays
28d0: 20 73 65 65 6d 20 74 6f 20 62 65 20 61 20 62 61   seem to be a ba
28e0: 64 20 74 68 69 6e 67 20 2a 2f 0a 09 73 77 69 74  d thing */..swit
28f0: 63 68 28 6d 65 6e 75 29 20 7b 0a 09 09 63 61 73  ch(menu) {...cas
2900: 65 20 33 3a 0a 09 09 09 66 6f 72 20 28 20 6e 20  e 3:....for ( n 
2910: 3d 20 32 3b 20 6e 20 3c 20 6e 5f 61 72 72 61 79  = 2; n < n_array
2920: 2d 32 3b 20 2b 2b 6e 20 29 20 7b 0a 09 09 09 09  -2; ++n ) {.....
2930: 61 72 72 61 79 5f 76 61 6c 75 65 5f 64 62 20 3d  array_value_db =
2940: 20 66 72 61 63 74 69 6f 6e 5f 74 6f 5f 64 6f 75   fraction_to_dou
2950: 62 6c 65 28 73 68 75 74 74 65 72 5f 61 72 72 61  ble(shutter_arra
2960: 79 5b 6e 5d 29 3b 0a 09 09 09 09 69 66 20 28 66  y[n]);.....if (f
2970: 61 62 73 28 61 72 72 61 79 5f 76 61 6c 75 65 5f  abs(array_value_
2980: 64 62 20 2d 20 78 29 20 3c 20 64 69 66 66 29 20  db - x) < diff) 
2990: 7b 0a 09 09 09 09 09 64 69 66 66 5f 69 64 78 20  {......diff_idx 
29a0: 3d 20 6e 3b 0a 09 09 09 09 09 64 69 66 66 20 3d  = n;......diff =
29b0: 20 66 61 62 73 28 61 72 72 61 79 5f 76 61 6c 75   fabs(array_valu
29c0: 65 5f 64 62 20 2d 20 78 29 3b 0a 09 09 09 09 7d  e_db - x);.....}
29d0: 0a 09 09 09 7d 0a 09 09 09 2f 2a 20 43 68 65 63  ....}..../* Chec
29e0: 6b 20 69 66 20 61 74 20 65 78 74 72 65 6d 69 74  k if at extremit
29f0: 69 65 73 20 61 6e 64 20 74 68 65 6e 20 69 66 20  ies and then if 
2a00: 75 6e 64 65 72 2f 6f 76 65 72 20 65 78 70 6f 73  under/over expos
2a10: 65 64 20 2a 2f 0a 09 09 09 69 66 20 28 64 69 66  ed */....if (dif
2a20: 66 5f 69 64 78 20 3d 3d 20 31 29 20 7b 0a 09 09  f_idx == 1) {...
2a30: 09 09 69 66 20 28 64 69 66 66 20 3e 3d 20 66 72  ..if (diff >= fr
2a40: 61 63 74 69 6f 6e 5f 74 6f 5f 64 6f 75 62 6c 65  action_to_double
2a50: 28 73 68 75 74 74 65 72 5f 61 72 72 61 79 5b 31  (shutter_array[1
2a60: 5d 29 2f 32 29 20 7b 20 0a 09 09 09 09 09 2f 2a  ])/2) { ....../*
2a70: 20 64 69 66 66 20 69 73 20 67 72 65 61 74 65 72   diff is greater
2a80: 20 74 68 61 6e 20 64 69 66 66 20 6f 66 20 6e 65   than diff of ne
2a90: 78 74 20 6f 6e 65 20 64 6f 77 6e 20 6d 69 6e 75  xt one down minu
2aa0: 73 20 6d 61 78 2f 6d 69 6e 20 2a 2f 0a 09 09 09  s max/min */....
2ab0: 09 09 64 69 66 66 5f 69 64 78 20 3d 20 30 3b 0a  ..diff_idx = 0;.
2ac0: 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 09 69 66  ....}....}....if
2ad0: 20 28 64 69 66 66 5f 69 64 78 20 3d 3d 20 6e 5f   (diff_idx == n_
2ae0: 61 72 72 61 79 2d 33 29 20 7b 0a 09 09 09 09 69  array-3) {.....i
2af0: 66 20 28 64 69 66 66 20 3e 3d 20 66 72 61 63 74  f (diff >= fract
2b00: 69 6f 6e 5f 74 6f 5f 64 6f 75 62 6c 65 28 73 68  ion_to_double(sh
2b10: 75 74 74 65 72 5f 61 72 72 61 79 5b 6e 5f 61 72  utter_array[n_ar
2b20: 72 61 79 2d 33 5d 29 2a 32 29 20 7b 0a 09 09 09  ray-3])*2) {....
2b30: 09 09 64 69 66 66 5f 69 64 78 20 3d 20 6e 5f 61  ..diff_idx = n_a
2b40: 72 72 61 79 2d 32 3b 09 0a 09 09 09 09 7d 0a 09  rray-2;......}..
2b50: 09 09 7d 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  ..}....break;...
2b60: 63 61 73 65 20 34 3a 0a 09 09 09 66 6f 72 20 28  case 4:....for (
2b70: 20 6e 20 3d 20 32 3b 20 6e 20 3c 20 6e 5f 61 72   n = 2; n < n_ar
2b80: 72 61 79 2d 32 3b 20 2b 2b 6e 20 29 20 7b 0a 09  ray-2; ++n ) {..
2b90: 09 09 09 73 74 72 6e 63 70 79 28 61 72 72 61 79  ...strncpy(array
2ba0: 5f 76 61 6c 75 65 5f 73 74 72 2c 20 61 70 65 72  _value_str, aper
2bb0: 74 75 72 65 5f 61 72 72 61 79 5b 6e 5d 2b 32 2c  ture_array[n]+2,
2bc0: 20 34 29 3b 0a 09 09 09 09 61 72 72 61 79 5f 76   4);.....array_v
2bd0: 61 6c 75 65 5f 64 62 20 3d 20 73 74 72 74 6f 64  alue_db = strtod
2be0: 28 61 72 72 61 79 5f 76 61 6c 75 65 5f 73 74 72  (array_value_str
2bf0: 2c 20 4e 55 4c 4c 29 3b 0a 09 09 09 09 69 66 20  , NULL);.....if 
2c00: 28 66 61 62 73 28 61 72 72 61 79 5f 76 61 6c 75  (fabs(array_valu
2c10: 65 5f 64 62 20 2d 20 78 29 20 3c 20 64 69 66 66  e_db - x) < diff
2c20: 29 20 7b 20 0a 09 09 09 09 09 64 69 66 66 5f 69  ) { ......diff_i
2c30: 64 78 20 3d 20 6e 3b 0a 09 09 09 09 09 64 69 66  dx = n;......dif
2c40: 66 20 3d 20 66 61 62 73 28 61 72 72 61 79 5f 76  f = fabs(array_v
2c50: 61 6c 75 65 5f 64 62 20 2d 20 78 29 3b 0a 09 09  alue_db - x);...
2c60: 09 09 7d 0a 09 09 09 7d 0a 09 09 09 2f 2a 20 41  ..}....}..../* A
2c70: 70 65 72 74 75 72 65 73 20 73 69 6d 69 6c 61 72  pertures similar
2c80: 6c 79 2e 20 41 6c 74 68 6f 75 67 68 20 70 72 6f  ly. Although pro
2c90: 67 72 65 73 73 69 6f 6e 20 69 73 20 66 69 64 64  gression is fidd
2ca0: 6c 69 65 72 2e 2a 2f 0a 09 09 09 69 66 20 28 64  lier.*/....if (d
2cb0: 69 66 66 5f 69 64 78 20 3d 3d 20 31 29 20 7b 0a  iff_idx == 1) {.
2cc0: 09 09 09 09 73 74 72 6e 63 70 79 28 61 72 72 61  ....strncpy(arra
2cd0: 79 5f 76 61 6c 75 65 5f 73 74 72 2c 20 61 70 65  y_value_str, ape
2ce0: 72 74 75 72 65 5f 61 72 72 61 79 5b 31 5d 2b 32  rture_array[1]+2
2cf0: 2c 20 34 29 3b 0a 09 09 09 09 61 72 72 61 79 5f  , 4);.....array_
2d00: 76 61 6c 75 65 5f 64 62 20 3d 20 73 74 72 74 6f  value_db = strto
2d10: 64 28 61 72 72 61 79 5f 76 61 6c 75 65 5f 73 74  d(array_value_st
2d20: 72 2c 20 4e 55 4c 4c 29 3b 0a 09 09 09 09 69 66  r, NULL);.....if
2d30: 20 28 64 69 66 66 20 3e 3d 20 61 72 72 61 79 5f   (diff >= array_
2d40: 76 61 6c 75 65 5f 64 62 2f 73 71 72 74 28 32 2e  value_db/sqrt(2.
2d50: 30 29 29 20 7b 0a 09 09 09 09 09 2f 2a 20 64 69  0)) {....../* di
2d60: 66 66 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ff is greater th
2d70: 61 6e 20 64 69 66 66 20 6f 66 20 6e 65 78 74 20  an diff of next 
2d80: 6f 6e 65 20 64 6f 77 6e 20 6d 69 6e 75 73 20 6d  one down minus m
2d90: 61 78 2f 6d 69 6e 20 2a 2f 0a 09 09 09 09 09 64  ax/min */......d
2da0: 69 66 66 5f 69 64 78 20 3d 20 30 3b 0a 09 09 09  iff_idx = 0;....
2db0: 09 7d 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 64  .}....}....if (d
2dc0: 69 66 66 5f 69 64 78 20 3d 3d 20 6e 5f 61 72 72  iff_idx == n_arr
2dd0: 61 79 2d 33 29 20 7b 0a 09 09 09 09 73 74 72 6e  ay-3) {.....strn
2de0: 63 70 79 28 61 72 72 61 79 5f 76 61 6c 75 65 5f  cpy(array_value_
2df0: 73 74 72 2c 20 61 70 65 72 74 75 72 65 5f 61 72  str, aperture_ar
2e00: 72 61 79 5b 6e 5f 61 72 72 61 79 2d 33 5d 2b 32  ray[n_array-3]+2
2e10: 2c 20 34 29 3b 0a 09 09 09 09 61 72 72 61 79 5f  , 4);.....array_
2e20: 76 61 6c 75 65 5f 64 62 20 3d 20 73 74 72 74 6f  value_db = strto
2e30: 64 28 61 72 72 61 79 5f 76 61 6c 75 65 5f 73 74  d(array_value_st
2e40: 72 2c 20 4e 55 4c 4c 29 3b 0a 09 09 09 09 69 66  r, NULL);.....if
2e50: 20 28 64 69 66 66 20 3e 3d 20 61 72 72 61 79 5f   (diff >= array_
2e60: 76 61 6c 75 65 5f 64 62 2a 73 71 72 74 28 32 2e  value_db*sqrt(2.
2e70: 30 29 29 20 7b 0a 09 09 09 09 09 64 69 66 66 5f  0)) {......diff_
2e80: 69 64 78 20 3d 20 6e 5f 61 72 72 61 79 2d 32 3b  idx = n_array-2;
2e90: 09 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09  ......}....}....
2ea0: 09 62 72 65 61 6b 3b 0a 09 7d 0a 09 72 65 74 75  .break;..}..retu
2eb0: 72 6e 20 64 69 66 66 5f 69 64 78 3b 0a 7d 0a 0a  rn diff_idx;.}..
2ec0: 64 6f 75 62 6c 65 20 66 72 61 63 74 69 6f 6e 5f  double fraction_
2ed0: 74 6f 5f 64 6f 75 62 6c 65 28 63 68 61 72 20 2a  to_double(char *
2ee0: 66 72 61 63 74 69 6f 6e 29 20 7b 0a 09 64 6f 75  fraction) {..dou
2ef0: 62 6c 65 20 66 72 61 63 74 69 6f 6e 5f 61 73 5f  ble fraction_as_
2f00: 64 62 3b 0a 09 63 68 61 72 20 64 65 6e 6f 6d 69  db;..char denomi
2f10: 6e 61 74 6f 72 5b 39 5d 3b 0a 09 63 68 61 72 20  nator[9];..char 
2f20: 2a 70 74 72 20 3d 20 73 74 72 73 74 72 28 66 72  *ptr = strstr(fr
2f30: 61 63 74 69 6f 6e 2c 20 22 2f 22 29 3b 0a 0a 09  action, "/");...
2f40: 69 66 20 28 70 74 72 29 20 7b 0a 09 09 2f 2a 74  if (ptr) {.../*t
2f50: 68 65 6e 20 73 70 6c 69 74 2a 2f 0a 09 09 73 74  hen split*/...st
2f60: 72 6e 63 70 79 28 64 65 6e 6f 6d 69 6e 61 74 6f  rncpy(denominato
2f70: 72 2c 20 66 72 61 63 74 69 6f 6e 2b 32 2c 20 35  r, fraction+2, 5
2f80: 29 3b 0a 09 09 66 72 61 63 74 69 6f 6e 5f 61 73  );...fraction_as
2f90: 5f 64 62 20 3d 20 31 20 2f 20 73 74 72 74 6f 64  _db = 1 / strtod
2fa0: 28 64 65 6e 6f 6d 69 6e 61 74 6f 72 2c 20 4e 55  (denominator, NU
2fb0: 4c 4c 29 3b 0a 09 7d 0a 09 65 6c 73 65 20 7b 0a  LL);..}..else {.
2fc0: 09 09 66 72 61 63 74 69 6f 6e 5f 61 73 5f 64 62  ..fraction_as_db
2fd0: 20 3d 20 73 74 72 74 6f 64 28 66 72 61 63 74 69   = strtod(fracti
2fe0: 6f 6e 2c 20 4e 55 4c 4c 29 3b 0a 09 7d 0a 09 72  on, NULL);..}..r
2ff0: 65 74 75 72 6e 20 66 72 61 63 74 69 6f 6e 5f 61  eturn fraction_a
3000: 73 5f 64 62 3b 0a 7d 0a 0a 2f 2a 20 44 65 62 75  s_db;.}../* Debu
3010: 67 20 6c 69 6e 65 73 0a 20 2a 20 73 70 72 69 6e  g lines. * sprin
3020: 74 66 28 74 65 6d 70 2c 20 22 25 66 22 2c 20 78  tf(temp, "%f", x
3030: 29 3b 0a 20 2a 20 6d 76 70 72 69 6e 74 77 28 4c  );. * mvprintw(L
3040: 49 4e 45 53 20 2d 20 34 2c 20 30 2c 20 74 65 6d  INES - 4, 0, tem
3050: 70 29 3b 0a 20 2a 20 72 65 66 72 65 73 68 28 29  p);. * refresh()
3060: 3b 2a 2f 0a                                      ;*/.