exposurses

Hex Artifact Content
Login

Artifact 7d4000ba2d4efc1899d5242a19ee482a741aefe204a4a159fe6862d814e7f353:


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 0d 0a 68 74 74 70 3a  l.c from:..http:
0030: 2f 2f 74 6c 64 70 2e 6f 72 67 2f 48 4f 57 54 4f  //tldp.org/HOWTO
0040: 2f 4e 43 55 52 53 45 53 2d 50 72 6f 67 72 61 6d  /NCURSES-Program
0050: 6d 69 6e 67 2d 48 4f 57 54 4f 2f 69 6e 74 72 6f  ming-HOWTO/intro
0060: 2e 68 74 6d 6c 20 2a 2f 0d 0a 23 69 6e 63 6c 75  .html */..#inclu
0070: 64 65 20 3c 63 75 72 73 65 73 2e 68 3e 0d 0a 23  de <curses.h>..#
0080: 69 6e 63 6c 75 64 65 20 3c 6d 65 6e 75 2e 68 3e  include <menu.h>
0090: 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 74 68  ..#include <math
00a0: 2e 68 3e 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 73  .h>..#include <s
00b0: 74 64 6c 69 62 2e 68 3e 0d 0a 0d 0a 2f 2a 20 4c  tdlib.h>..../* L
00c0: 65 61 72 6e 69 6e 67 20 6e 6f 74 65 73 20 2d 20  earning notes - 
00d0: 54 68 69 73 20 69 73 20 61 20 6d 61 63 72 6f 20  This is a macro 
00e0: 74 68 61 74 20 69 73 20 65 78 70 61 6e 64 65 64  that is expanded
00f0: 20 28 74 65 78 74 20 73 75 62 73 74 69 74 75 74   (text substitut
0100: 69 6f 6e 29 20 62 65 66 6f 72 65 20 63 6f 6d 70  ion) before comp
0110: 69 6c 69 6e 67 20 2a 2f 0d 0a 23 64 65 66 69 6e  iling */..#defin
0120: 65 20 41 52 52 41 59 5f 53 49 5a 45 28 61 29 20  e ARRAY_SIZE(a) 
0130: 28 73 69 7a 65 6f 66 28 61 29 20 2f 20 73 69 7a  (sizeof(a) / siz
0140: 65 6f 66 28 61 5b 30 5d 29 29 0d 0a 0d 0a 63 68  eof(a[0]))....ch
0150: 61 72 20 2a 65 78 70 6f 73 75 72 65 5f 61 72 72  ar *exposure_arr
0160: 61 79 5b 5d 20 3d 20 7b 0d 0a 09 22 2d 36 22 2c  ay[] = {..."-6",
0170: 09 09 0d 0a 09 22 2d 35 22 2c 09 09 0d 0a 09 22  ....."-5",....."
0180: 2d 34 22 2c 09 09 0d 0a 09 22 2d 33 22 2c 09 09  -4",....."-3",..
0190: 0d 0a 09 22 2d 32 22 2c 09 09 0d 0a 09 22 2d 31  ..."-2",....."-1
01a0: 22 2c 09 09 0d 0a 09 22 30 22 2c 09 09 0d 0a 09  ",....."0",.....
01b0: 22 31 22 2c 09 09 0d 0a 09 22 32 22 2c 09 09 0d  "1",....."2",...
01c0: 0a 09 22 33 22 2c 09 09 0d 0a 09 22 34 22 2c 09  .."3",....."4",.
01d0: 09 0d 0a 09 22 35 22 2c 09 09 0d 0a 09 22 36 22  ...."5",....."6"
01e0: 2c 09 09 0d 0a 09 22 37 22 2c 09 09 0d 0a 09 22  ,....."7",....."
01f0: 38 22 2c 09 09 0d 0a 09 22 39 22 2c 09 09 0d 0a  8",....."9",....
0200: 09 22 31 30 22 2c 09 09 0d 0a 09 22 31 31 22 2c  ."10",....."11",
0210: 09 09 0d 0a 09 22 31 32 22 2c 09 09 0d 0a 09 22  ....."12",....."
0220: 31 33 22 2c 09 09 0d 0a 09 22 31 34 22 2c 09 09  13",....."14",..
0230: 0d 0a 09 22 31 35 22 2c 09 09 0d 0a 09 22 31 36  ..."15",....."16
0240: 22 2c 09 09 0d 0a 09 4e 55 4c 4c 0d 0a 7d 3b 0d  ",.....NULL..};.
0250: 0a 0d 0a 63 68 61 72 20 2a 69 73 6f 5f 61 72 72  ...char *iso_arr
0260: 61 79 5b 5d 20 3d 20 7b 0d 0a 09 22 35 30 22 2c  ay[] = {..."50",
0270: 0d 0a 09 22 31 30 30 22 2c 0d 0a 09 22 32 30 30  ..."100",..."200
0280: 22 2c 0d 0a 09 22 34 30 30 22 2c 0d 0a 09 22 38  ",..."400",..."8
0290: 30 30 22 2c 0d 0a 09 22 31 36 30 30 22 2c 0d 0a  00",..."1600",..
02a0: 09 22 33 32 30 30 22 2c 0d 0a 09 4e 55 4c 4c 0d  ."3200",...NULL.
02b0: 0a 7d 3b 0d 0a 0d 0a 63 68 61 72 20 2a 73 68 75  .};....char *shu
02c0: 74 74 65 72 5f 61 72 72 61 79 5b 5d 20 3d 20 7b  tter_array[] = {
02d0: 0d 0a 09 22 31 2f 31 30 30 30 22 2c 0d 0a 09 22  ..."1/1000",..."
02e0: 31 2f 35 30 30 22 2c 0d 0a 09 22 31 2f 32 35 30  1/500",..."1/250
02f0: 22 2c 0d 0a 09 22 31 2f 31 32 35 22 2c 0d 0a 09  ",..."1/125",...
0300: 22 31 2f 36 30 22 2c 0d 0a 09 22 31 2f 33 30 22  "1/60",..."1/30"
0310: 2c 0d 0a 09 22 31 2f 31 35 22 2c 0d 0a 09 22 31  ,..."1/15",..."1
0320: 2f 38 22 2c 0d 0a 09 22 31 2f 34 22 2c 0d 0a 09  /8",..."1/4",...
0330: 22 31 2f 32 22 2c 0d 0a 09 22 31 22 2c 0d 0a 09  "1/2",..."1",...
0340: 4e 55 4c 4c 0d 0a 7d 3b 0d 0a 0d 0a 63 68 61 72  NULL..};....char
0350: 20 2a 61 70 65 72 74 75 72 65 5f 61 72 72 61 79   *aperture_array
0360: 5b 5d 20 3d 20 7b 0d 0a 09 22 66 2f 31 2e 34 22  [] = {..."f/1.4"
0370: 2c 0d 0a 09 22 66 2f 32 22 2c 0d 0a 09 22 66 2f  ,..."f/2",..."f/
0380: 32 2e 38 22 2c 0d 0a 09 22 66 2f 34 22 2c 0d 0a  2.8",..."f/4",..
0390: 09 22 66 2f 35 2e 36 22 2c 0d 0a 09 22 66 2f 38  ."f/5.6",..."f/8
03a0: 22 2c 0d 0a 09 22 66 2f 31 31 22 2c 0d 0a 09 22  ",..."f/11",..."
03b0: 66 2f 31 36 22 2c 0d 0a 09 4e 55 4c 4c 0d 0a 7d  f/16",...NULL..}
03c0: 3b 0d 0a 0d 0a 49 54 45 4d 20 2a 2a 65 78 70 6f  ;....ITEM **expo
03d0: 73 75 72 65 5f 69 74 65 6d 73 3b 0d 0a 49 54 45  sure_items;..ITE
03e0: 4d 20 2a 2a 69 73 6f 5f 69 74 65 6d 73 3b 0d 0a  M **iso_items;..
03f0: 49 54 45 4d 20 2a 2a 73 68 75 74 74 65 72 5f 69  ITEM **shutter_i
0400: 74 65 6d 73 3b 0d 0a 49 54 45 4d 20 2a 2a 61 70  tems;..ITEM **ap
0410: 65 72 74 75 72 65 5f 69 74 65 6d 73 3b 0d 0a 4d  erture_items;..M
0420: 45 4e 55 20 2a 65 78 70 6f 73 75 72 65 5f 6d 65  ENU *exposure_me
0430: 6e 75 3b 0d 0a 4d 45 4e 55 20 2a 69 73 6f 5f 6d  nu;..MENU *iso_m
0440: 65 6e 75 3b 0d 0a 4d 45 4e 55 20 2a 73 68 75 74  enu;..MENU *shut
0450: 74 65 72 5f 6d 65 6e 75 3b 0d 0a 4d 45 4e 55 20  ter_menu;..MENU 
0460: 2a 61 70 65 72 74 75 72 65 5f 6d 65 6e 75 3b 0d  *aperture_menu;.
0470: 0a 57 49 4e 44 4f 57 20 2a 65 78 70 6f 73 75 72  .WINDOW *exposur
0480: 65 5f 77 69 6e 3b 0d 0a 57 49 4e 44 4f 57 20 2a  e_win;..WINDOW *
0490: 69 73 6f 5f 77 69 6e 3b 0d 0a 57 49 4e 44 4f 57  iso_win;..WINDOW
04a0: 20 2a 73 68 75 74 74 65 72 5f 77 69 6e 3b 0d 0a   *shutter_win;..
04b0: 57 49 4e 44 4f 57 20 2a 61 70 65 72 74 75 72 65  WINDOW *aperture
04c0: 5f 77 69 6e 3b 0d 0a 0d 0a 76 6f 69 64 20 73 65  _win;....void se
04d0: 6c 65 63 74 69 6f 6e 28 63 68 61 72 20 2a 6e 61  lection(char *na
04e0: 6d 65 29 3b 0d 0a 76 6f 69 64 20 72 65 6d 6f 76  me);..void remov
04f0: 65 5f 6d 65 6e 75 28 49 54 45 4d 20 2a 2a 69 74  e_menu(ITEM **it
0500: 65 6d 73 2c 20 4d 45 4e 55 20 2a 6d 65 6e 2c 20  ems, MENU *men, 
0510: 69 6e 74 20 6e 29 3b 0d 0a 76 6f 69 64 20 70 72  int n);..void pr
0520: 69 6e 74 5f 69 6e 5f 6d 69 64 64 6c 65 28 57 49  int_in_middle(WI
0530: 4e 44 4f 57 20 2a 77 69 6e 2c 20 69 6e 74 20 73  NDOW *win, int s
0540: 74 61 72 74 79 2c 20 69 6e 74 20 73 74 61 72 74  tarty, int start
0550: 78 2c 20 69 6e 74 20 77 69 64 74 68 2c 20 63 68  x, int width, ch
0560: 61 72 20 2a 73 74 72 69 6e 67 2c 20 63 68 74 79  ar *string, chty
0570: 70 65 20 63 6f 6c 6f 72 29 3b 0d 0a 4d 45 4e 55  pe color);..MENU
0580: 20 2a 61 64 64 5f 6d 65 6e 75 28 63 68 61 72 20   *add_menu(char 
0590: 2a 2a 61 72 72 61 79 2c 20 49 54 45 4d 20 2a 2a  **array, ITEM **
05a0: 69 74 65 6d 73 2c 20 69 6e 74 20 6e 29 3b 0d 0a  items, int n);..
05b0: 57 49 4e 44 4f 57 20 2a 61 64 64 5f 77 69 6e 64  WINDOW *add_wind
05c0: 6f 77 28 69 6e 74 20 78 70 6f 73 2c 20 63 68 61  ow(int xpos, cha
05d0: 72 20 2a 74 69 74 6c 65 29 3b 0d 0a 69 6e 74 20  r *title);..int 
05e0: 65 78 70 6f 73 75 72 65 28 69 6e 74 20 69 73 6f  exposure(int iso
05f0: 29 3b 0d 0a 64 6f 75 62 6c 65 20 73 68 75 74 74  );..double shutt
0600: 65 72 28 69 6e 74 20 65 78 70 6f 73 75 72 65 2c  er(int exposure,
0610: 20 64 6f 75 62 6c 65 20 61 70 65 72 74 75 72 65   double aperture
0620: 29 3b 0d 0a 64 6f 75 62 6c 65 20 61 70 65 72 74  );..double apert
0630: 75 72 65 28 69 6e 74 20 65 78 70 6f 73 75 72 65  ure(int exposure
0640: 2c 20 64 6f 75 62 6c 65 20 73 68 75 74 74 65 72  , double shutter
0650: 29 3b 0d 0a 69 6e 74 20 6e 65 61 72 65 73 74 5f  );..int nearest_
0660: 6d 61 74 63 68 28 64 6f 75 62 6c 65 20 78 2c 20  match(double x, 
0670: 69 6e 74 20 6d 65 6e 75 29 3b 0d 0a 64 6f 75 62  int menu);..doub
0680: 6c 65 20 66 72 61 63 74 69 6f 6e 5f 74 6f 5f 64  le fraction_to_d
0690: 6f 75 62 6c 65 28 63 68 61 72 20 2a 66 72 61 63  ouble(char *frac
06a0: 74 69 6f 6e 29 3b 0d 0a 2f 2a 20 4e 6f 20 6f 6e  tion);../* No on
06b0: 65 20 77 69 6c 6c 20 65 76 65 72 20 6e 65 65 64  e will ever need
06c0: 20 6d 6f 72 65 20 74 68 61 6e 20 39 20 62 79 74   more than 9 byt
06d0: 65 73 21 20 2a 2f 0d 0a 63 68 61 72 20 65 78 70  es! */..char exp
06e0: 6f 73 75 72 65 5f 73 65 6c 5b 39 5d 20 3d 20 22  osure_sel[9] = "
06f0: 22 3b 0d 0a 63 68 61 72 20 69 73 6f 5f 73 65 6c  ";..char iso_sel
0700: 5b 39 5d 20 3d 20 22 22 3b 0d 0a 63 68 61 72 20  [9] = "";..char 
0710: 73 68 75 74 74 65 72 5f 73 65 6c 5b 39 5d 20 3d  shutter_sel[9] =
0720: 20 22 22 3b 0d 0a 63 68 61 72 20 61 70 65 72 74   "";..char apert
0730: 75 72 65 5f 73 65 6c 5b 39 5d 20 3d 20 22 22 3b  ure_sel[9] = "";
0740: 0d 0a 69 6e 74 20 73 65 6c 65 63 74 69 6f 6e 5f  ..int selection_
0750: 63 6f 75 6e 74 65 72 20 3d 20 31 3b 0d 0a 69 6e  counter = 1;..in
0760: 74 20 6d 65 6e 75 5f 63 6f 75 6e 74 65 72 20 3d  t menu_counter =
0770: 20 31 3b 0d 0a 0d 0a 69 6e 74 20 6d 61 69 6e 28   1;....int main(
0780: 29 20 7b 0d 0a 09 69 6e 74 20 63 3b 0d 0a 09 4d  ) {...int c;...M
0790: 45 4e 55 20 2a 2a 6d 65 6e 75 3b 0d 0a 09 57 49  ENU **menu;...WI
07a0: 4e 44 4f 57 20 2a 2a 77 69 6e 3b 0d 0a 09 69 6e  NDOW **win;...in
07b0: 74 20 69 3b 0d 0a 09 69 6e 74 20 6e 5f 65 78 70  t i;...int n_exp
07c0: 6f 73 75 72 65 3b 0d 0a 09 69 6e 74 20 6e 5f 69  osure;...int n_i
07d0: 73 6f 3b 0d 0a 09 69 6e 74 20 6e 5f 73 68 75 74  so;...int n_shut
07e0: 74 65 72 3b 0d 0a 09 69 6e 74 20 6e 5f 61 70 65  ter;...int n_ape
07f0: 72 74 75 72 65 3b 0d 0a 0d 0a 09 2f 2a 20 49 6e  rture;...../* In
0800: 69 74 69 61 6c 69 7a 65 20 63 75 72 73 65 73 20  itialize curses 
0810: 2a 2f 0d 0a 09 69 6e 69 74 73 63 72 28 29 3b 0d  */...initscr();.
0820: 0a 09 73 74 61 72 74 5f 63 6f 6c 6f 72 28 29 3b  ..start_color();
0830: 0d 0a 09 63 62 72 65 61 6b 28 29 3b 0d 0a 09 6e  ...cbreak();...n
0840: 6f 65 63 68 6f 28 29 3b 0d 0a 09 6b 65 79 70 61  oecho();...keypa
0850: 64 28 73 74 64 73 63 72 2c 20 54 52 55 45 29 3b  d(stdscr, TRUE);
0860: 0d 0a 09 69 6e 69 74 5f 70 61 69 72 28 31 2c 20  ...init_pair(1, 
0870: 43 4f 4c 4f 52 5f 52 45 44 2c 20 43 4f 4c 4f 52  COLOR_RED, COLOR
0880: 5f 42 4c 41 43 4b 29 3b 0d 0a 09 69 6e 69 74 5f  _BLACK);...init_
0890: 70 61 69 72 28 32 2c 20 43 4f 4c 4f 52 5f 43 59  pair(2, COLOR_CY
08a0: 41 4e 2c 20 43 4f 4c 4f 52 5f 42 4c 41 43 4b 29  AN, COLOR_BLACK)
08b0: 3b 0d 0a 0d 0a 09 2f 2a 20 43 72 65 61 74 65 20  ;...../* Create 
08c0: 69 74 65 6d 73 20 2a 2f 0d 0a 09 2f 2a 20 43 61  items */.../* Ca
08d0: 6e 27 74 20 72 65 61 6c 6c 79 20 61 76 6f 69 64  n't really avoid
08e0: 20 66 69 6e 64 69 6e 67 20 61 72 72 61 79 20 73   finding array s
08f0: 69 7a 65 73 20 68 65 72 65 20 2a 2f 0d 0a 09 6e  izes here */...n
0900: 5f 65 78 70 6f 73 75 72 65 20 3d 20 41 52 52 41  _exposure = ARRA
0910: 59 5f 53 49 5a 45 28 65 78 70 6f 73 75 72 65 5f  Y_SIZE(exposure_
0920: 61 72 72 61 79 29 3b 0d 0a 09 6e 5f 69 73 6f 20  array);...n_iso 
0930: 3d 20 41 52 52 41 59 5f 53 49 5a 45 28 69 73 6f  = ARRAY_SIZE(iso
0940: 5f 61 72 72 61 79 29 3b 0d 0a 09 6e 5f 73 68 75  _array);...n_shu
0950: 74 74 65 72 20 3d 20 41 52 52 41 59 5f 53 49 5a  tter = ARRAY_SIZ
0960: 45 28 73 68 75 74 74 65 72 5f 61 72 72 61 79 29  E(shutter_array)
0970: 3b 0d 0a 09 6e 5f 61 70 65 72 74 75 72 65 20 3d  ;...n_aperture =
0980: 20 41 52 52 41 59 5f 53 49 5a 45 28 61 70 65 72   ARRAY_SIZE(aper
0990: 74 75 72 65 5f 61 72 72 61 79 29 3b 0d 0a 09 65  ture_array);...e
09a0: 78 70 6f 73 75 72 65 5f 6d 65 6e 75 20 3d 20 61  xposure_menu = a
09b0: 64 64 5f 6d 65 6e 75 28 65 78 70 6f 73 75 72 65  dd_menu(exposure
09c0: 5f 61 72 72 61 79 2c 20 65 78 70 6f 73 75 72 65  _array, exposure
09d0: 5f 69 74 65 6d 73 2c 20 6e 5f 65 78 70 6f 73 75  _items, n_exposu
09e0: 72 65 29 3b 0d 0a 09 69 73 6f 5f 6d 65 6e 75 20  re);...iso_menu 
09f0: 3d 20 61 64 64 5f 6d 65 6e 75 28 69 73 6f 5f 61  = add_menu(iso_a
0a00: 72 72 61 79 2c 20 69 73 6f 5f 69 74 65 6d 73 2c  rray, iso_items,
0a10: 20 6e 5f 69 73 6f 29 3b 0d 0a 09 73 68 75 74 74   n_iso);...shutt
0a20: 65 72 5f 6d 65 6e 75 20 3d 20 61 64 64 5f 6d 65  er_menu = add_me
0a30: 6e 75 28 73 68 75 74 74 65 72 5f 61 72 72 61 79  nu(shutter_array
0a40: 2c 20 73 68 75 74 74 65 72 5f 69 74 65 6d 73 2c  , shutter_items,
0a50: 20 6e 5f 73 68 75 74 74 65 72 29 3b 0d 0a 09 61   n_shutter);...a
0a60: 70 65 72 74 75 72 65 5f 6d 65 6e 75 20 3d 20 61  perture_menu = a
0a70: 64 64 5f 6d 65 6e 75 28 61 70 65 72 74 75 72 65  dd_menu(aperture
0a80: 5f 61 72 72 61 79 2c 20 61 70 65 72 74 75 72 65  _array, aperture
0a90: 5f 69 74 65 6d 73 2c 20 6e 5f 61 70 65 72 74 75  _items, n_apertu
0aa0: 72 65 29 3b 0d 0a 09 65 78 70 6f 73 75 72 65 5f  re);...exposure_
0ab0: 77 69 6e 20 3d 20 61 64 64 5f 77 69 6e 64 6f 77  win = add_window
0ac0: 28 34 2c 20 22 45 56 22 29 3b 0d 0a 09 69 73 6f  (4, "EV");...iso
0ad0: 5f 77 69 6e 20 3d 20 61 64 64 5f 77 69 6e 64 6f  _win = add_windo
0ae0: 77 28 34 35 2c 20 22 49 53 4f 22 29 3b 0d 0a 09  w(45, "ISO");...
0af0: 73 68 75 74 74 65 72 5f 77 69 6e 20 3d 20 61 64  shutter_win = ad
0b00: 64 5f 77 69 6e 64 6f 77 28 38 36 2c 20 22 53 68  d_window(86, "Sh
0b10: 75 74 74 65 72 22 29 3b 0d 0a 09 61 70 65 72 74  utter");...apert
0b20: 75 72 65 5f 77 69 6e 20 3d 20 61 64 64 5f 77 69  ure_win = add_wi
0b30: 6e 64 6f 77 28 31 32 37 2c 20 22 41 70 65 72 74  ndow(127, "Apert
0b40: 75 72 65 22 29 3b 0d 0a 09 73 65 74 5f 6d 65 6e  ure");...set_men
0b50: 75 5f 77 69 6e 28 65 78 70 6f 73 75 72 65 5f 6d  u_win(exposure_m
0b60: 65 6e 75 2c 20 65 78 70 6f 73 75 72 65 5f 77 69  enu, exposure_wi
0b70: 6e 29 3b 0d 0a 09 73 65 74 5f 6d 65 6e 75 5f 77  n);...set_menu_w
0b80: 69 6e 28 69 73 6f 5f 6d 65 6e 75 2c 20 69 73 6f  in(iso_menu, iso
0b90: 5f 77 69 6e 29 3b 0d 0a 09 73 65 74 5f 6d 65 6e  _win);...set_men
0ba0: 75 5f 77 69 6e 28 73 68 75 74 74 65 72 5f 6d 65  u_win(shutter_me
0bb0: 6e 75 2c 20 73 68 75 74 74 65 72 5f 77 69 6e 29  nu, shutter_win)
0bc0: 3b 0d 0a 09 73 65 74 5f 6d 65 6e 75 5f 77 69 6e  ;...set_menu_win
0bd0: 28 61 70 65 72 74 75 72 65 5f 6d 65 6e 75 2c 20  (aperture_menu, 
0be0: 61 70 65 72 74 75 72 65 5f 77 69 6e 29 3b 0d 0a  aperture_win);..
0bf0: 09 73 65 74 5f 6d 65 6e 75 5f 73 75 62 28 65 78  .set_menu_sub(ex
0c00: 70 6f 73 75 72 65 5f 6d 65 6e 75 2c 20 64 65 72  posure_menu, der
0c10: 77 69 6e 28 65 78 70 6f 73 75 72 65 5f 77 69 6e  win(exposure_win
0c20: 2c 20 36 2c 20 33 38 2c 20 33 2c 20 31 29 29 3b  , 6, 38, 3, 1));
0c30: 0d 0a 09 73 65 74 5f 6d 65 6e 75 5f 73 75 62 28  ...set_menu_sub(
0c40: 69 73 6f 5f 6d 65 6e 75 2c 20 64 65 72 77 69 6e  iso_menu, derwin
0c50: 28 69 73 6f 5f 77 69 6e 2c 20 36 2c 20 33 38 2c  (iso_win, 6, 38,
0c60: 20 33 2c 20 31 29 29 3b 0d 0a 09 73 65 74 5f 6d   3, 1));...set_m
0c70: 65 6e 75 5f 73 75 62 28 73 68 75 74 74 65 72 5f  enu_sub(shutter_
0c80: 6d 65 6e 75 2c 20 64 65 72 77 69 6e 28 73 68 75  menu, derwin(shu
0c90: 74 74 65 72 5f 77 69 6e 2c 20 36 2c 20 33 38 2c  tter_win, 6, 38,
0ca0: 20 33 2c 20 31 29 29 3b 0d 0a 09 73 65 74 5f 6d   3, 1));...set_m
0cb0: 65 6e 75 5f 73 75 62 28 61 70 65 72 74 75 72 65  enu_sub(aperture
0cc0: 5f 6d 65 6e 75 2c 20 64 65 72 77 69 6e 28 61 70  _menu, derwin(ap
0cd0: 65 72 74 75 72 65 5f 77 69 6e 2c 20 36 2c 20 33  erture_win, 6, 3
0ce0: 38 2c 20 33 2c 20 31 29 29 3b 0d 0a 09 70 6f 73  8, 3, 1));...pos
0cf0: 74 5f 6d 65 6e 75 28 65 78 70 6f 73 75 72 65 5f  t_menu(exposure_
0d00: 6d 65 6e 75 29 3b 0d 0a 09 70 6f 73 74 5f 6d 65  menu);...post_me
0d10: 6e 75 28 69 73 6f 5f 6d 65 6e 75 29 3b 0d 0a 09  nu(iso_menu);...
0d20: 70 6f 73 74 5f 6d 65 6e 75 28 73 68 75 74 74 65  post_menu(shutte
0d30: 72 5f 6d 65 6e 75 29 3b 0d 0a 09 70 6f 73 74 5f  r_menu);...post_
0d40: 6d 65 6e 75 28 61 70 65 72 74 75 72 65 5f 6d 65  menu(aperture_me
0d50: 6e 75 29 3b 0d 0a 09 77 72 65 66 72 65 73 68 28  nu);...wrefresh(
0d60: 65 78 70 6f 73 75 72 65 5f 77 69 6e 29 3b 0d 0a  exposure_win);..
0d70: 09 77 72 65 66 72 65 73 68 28 69 73 6f 5f 77 69  .wrefresh(iso_wi
0d80: 6e 29 3b 0d 0a 09 77 72 65 66 72 65 73 68 28 73  n);...wrefresh(s
0d90: 68 75 74 74 65 72 5f 77 69 6e 29 3b 0d 0a 09 77  hutter_win);...w
0da0: 72 65 66 72 65 73 68 28 61 70 65 72 74 75 72 65  refresh(aperture
0db0: 5f 77 69 6e 29 3b 0d 0a 09 61 74 74 72 6f 6e 28  _win);...attron(
0dc0: 43 4f 4c 4f 52 5f 50 41 49 52 28 32 29 29 3b 0d  COLOR_PAIR(2));.
0dd0: 0a 09 6d 76 70 72 69 6e 74 77 28 4c 49 4e 45 53  ..mvprintw(LINES
0de0: 20 2d 20 32 2c 20 30 2c 20 22 53 65 6c 65 63 74   - 2, 0, "Select
0df0: 20 45 56 22 29 3b 0d 0a 09 2f 2a 6d 76 70 72 69   EV");.../*mvpri
0e00: 6e 74 77 28 4c 49 4e 45 53 20 2d 20 32 2c 20 30  ntw(LINES - 2, 0
0e10: 2c 20 22 53 65 6c 65 63 74 20 49 53 4f 20 61 6e  , "Select ISO an
0e20: 64 20 74 68 65 6e 20 6f 6e 65 20 6f 66 20 53 68  d then one of Sh
0e30: 75 74 74 65 72 2f 41 70 65 72 74 75 72 65 20 74  utter/Aperture t
0e40: 6f 20 63 61 6c 63 75 6c 61 74 65 20 6f 74 68 65  o calculate othe
0e50: 72 20 6f 66 20 53 68 75 74 74 65 72 2f 41 70 65  r of Shutter/Ape
0e60: 72 74 75 72 65 22 29 3b 2a 2f 0d 0a 09 6d 76 70  rture");*/...mvp
0e70: 72 69 6e 74 77 28 4c 49 4e 45 53 20 2d 20 31 2c  rintw(LINES - 1,
0e80: 20 30 2c 20 22 41 72 72 6f 77 20 6b 65 79 73 20   0, "Arrow keys 
0e90: 74 6f 20 6e 61 76 69 67 61 74 65 2c 20 45 6e 74  to navigate, Ent
0ea0: 65 72 20 74 6f 20 73 65 6c 65 63 74 2c 20 51 20  er to select, Q 
0eb0: 74 6f 20 65 78 69 74 22 29 3b 0d 0a 09 61 74 74  to exit");...att
0ec0: 72 6f 66 66 28 43 4f 4c 4f 52 5f 50 41 49 52 28  roff(COLOR_PAIR(
0ed0: 32 29 29 3b 0d 0a 09 72 65 66 72 65 73 68 28 29  2));...refresh()
0ee0: 3b 0d 0a 0d 0a 09 2f 2a 20 73 65 74 20 64 65 66  ;...../* set def
0ef0: 61 75 6c 74 20 6d 65 6e 75 20 2a 2f 0d 0a 09 6d  ault menu */...m
0f00: 65 6e 75 20 3d 20 26 65 78 70 6f 73 75 72 65 5f  enu = &exposure_
0f10: 6d 65 6e 75 3b 0d 0a 09 77 69 6e 20 3d 20 26 65  menu;...win = &e
0f20: 78 70 6f 73 75 72 65 5f 77 69 6e 3b 0d 0a 0d 0a  xposure_win;....
0f30: 09 77 68 69 6c 65 28 28 63 20 3d 20 67 65 74 63  .while((c = getc
0f40: 68 28 29 29 20 21 3d 20 38 31 29 20 7b 20 2f 2a  h()) != 81) { /*
0f50: 20 38 31 20 69 73 20 51 20 2a 2f 0d 0a 09 09 73   81 is Q */....s
0f60: 77 69 74 63 68 28 63 29 20 7b 0d 0a 09 09 09 63  witch(c) {.....c
0f70: 61 73 65 20 4b 45 59 5f 4c 45 46 54 3a 0d 0a 09  ase KEY_LEFT:...
0f80: 09 09 09 69 66 20 28 73 65 6c 65 63 74 69 6f 6e  ...if (selection
0f90: 5f 63 6f 75 6e 74 65 72 20 3e 20 32 29 20 7b 0d  _counter > 2) {.
0fa0: 0a 09 09 09 09 09 6d 65 6e 75 5f 63 6f 75 6e 74  ......menu_count
0fb0: 65 72 20 3d 20 33 3b 0d 0a 09 09 09 09 09 6d 65  er = 3;.......me
0fc0: 6e 75 20 3d 20 26 73 68 75 74 74 65 72 5f 6d 65  nu = &shutter_me
0fd0: 6e 75 3b 0d 0a 09 09 09 09 09 77 69 6e 20 3d 20  nu;.......win = 
0fe0: 26 73 68 75 74 74 65 72 5f 77 69 6e 3b 0d 0a 09  &shutter_win;...
0ff0: 09 09 09 7d 0d 0a 09 09 09 09 62 72 65 61 6b 3b  ...}......break;
1000: 0d 0a 09 09 09 63 61 73 65 20 4b 45 59 5f 52 49  .....case KEY_RI
1010: 47 48 54 3a 0d 0a 09 09 09 09 69 66 20 28 73 65  GHT:......if (se
1020: 6c 65 63 74 69 6f 6e 5f 63 6f 75 6e 74 65 72 20  lection_counter 
1030: 3e 20 32 29 20 7b 0d 0a 09 09 09 09 09 6d 65 6e  > 2) {.......men
1040: 75 5f 63 6f 75 6e 74 65 72 20 3d 20 34 3b 0d 0a  u_counter = 4;..
1050: 09 09 09 09 09 6d 65 6e 75 20 3d 20 26 61 70 65  .....menu = &ape
1060: 72 74 75 72 65 5f 6d 65 6e 75 3b 0d 0a 09 09 09  rture_menu;.....
1070: 09 09 77 69 6e 20 3d 20 26 61 70 65 72 74 75 72  ..win = &apertur
1080: 65 5f 77 69 6e 3b 0d 0a 09 09 09 09 7d 0d 0a 09  e_win;......}...
1090: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61  ...break;.....ca
10a0: 73 65 20 4b 45 59 5f 44 4f 57 4e 3a 0d 0a 09 09  se KEY_DOWN:....
10b0: 09 09 6d 65 6e 75 5f 64 72 69 76 65 72 28 2a 6d  ..menu_driver(*m
10c0: 65 6e 75 2c 20 52 45 51 5f 44 4f 57 4e 5f 49 54  enu, REQ_DOWN_IT
10d0: 45 4d 29 3b 0d 0a 09 09 09 09 62 72 65 61 6b 3b  EM);......break;
10e0: 0d 0a 09 09 09 63 61 73 65 20 4b 45 59 5f 55 50  .....case KEY_UP
10f0: 3a 0d 0a 09 09 09 09 6d 65 6e 75 5f 64 72 69 76  :......menu_driv
1100: 65 72 28 2a 6d 65 6e 75 2c 20 52 45 51 5f 55 50  er(*menu, REQ_UP
1110: 5f 49 54 45 4d 29 3b 0d 0a 09 09 09 09 62 72 65  _ITEM);......bre
1120: 61 6b 3b 0d 0a 09 09 09 63 61 73 65 20 31 30 3a  ak;.....case 10:
1130: 20 7b 20 2f 2a 20 45 4e 54 45 52 20 2a 2f 0d 0a   { /* ENTER */..
1140: 09 09 09 09 49 54 45 4d 20 2a 63 75 72 3b 0d 0a  ....ITEM *cur;..
1150: 09 09 09 09 76 6f 69 64 20 28 2a 70 29 28 63 68  ....void (*p)(ch
1160: 61 72 20 2a 29 3b 0d 0a 0d 0a 09 09 09 09 63 75  ar *);........cu
1170: 72 20 3d 20 63 75 72 72 65 6e 74 5f 69 74 65 6d  r = current_item
1180: 28 2a 6d 65 6e 75 29 3b 0d 0a 09 09 09 09 70 20  (*menu);......p 
1190: 3d 20 69 74 65 6d 5f 75 73 65 72 70 74 72 28 63  = item_userptr(c
11a0: 75 72 29 3b 0d 0a 09 09 09 09 2f 2a 20 4c 65 61  ur);....../* Lea
11b0: 72 6e 69 6e 67 20 6e 6f 74 65 73 20 2d 20 44 6f  rning notes - Do
11c0: 6e 27 74 20 75 6e 64 65 72 73 74 61 6e 64 20 74  n't understand t
11d0: 68 69 73 20 62 69 74 20 2a 2f 0d 0a 09 09 09 09  his bit */......
11e0: 2f 2a 20 49 73 20 74 68 69 73 20 61 20 66 75 6e  /* Is this a fun
11f0: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 3f 20 2a  ction pointer? *
1200: 2f 0d 0a 09 09 09 09 70 28 28 63 68 61 72 20 2a  /......p((char *
1210: 29 69 74 65 6d 5f 6e 61 6d 65 28 63 75 72 29 29  )item_name(cur))
1220: 3b 0d 0a 09 09 09 09 0d 0a 09 09 09 09 73 77 69  ;............swi
1230: 74 63 68 20 28 73 65 6c 65 63 74 69 6f 6e 5f 63  tch (selection_c
1240: 6f 75 6e 74 65 72 29 20 7b 0d 0a 09 09 09 09 09  ounter) {.......
1250: 63 61 73 65 20 31 3a 20 7b 20 2f 2a 20 45 78 70  case 1: { /* Exp
1260: 6f 73 75 72 65 20 73 65 6c 65 63 74 65 64 20 2a  osure selected *
1270: 2f 0d 0a 09 09 09 09 09 09 73 65 6c 65 63 74 69  /........selecti
1280: 6f 6e 5f 63 6f 75 6e 74 65 72 20 2b 3d 20 31 3b  on_counter += 1;
1290: 0d 0a 09 09 09 09 09 09 6d 65 6e 75 5f 63 6f 75  ........menu_cou
12a0: 6e 74 65 72 20 2b 3d 20 31 3b 0d 0a 09 09 09 09  nter += 1;......
12b0: 09 09 6d 6f 76 65 28 4c 49 4e 45 53 20 2d 20 32  ..move(LINES - 2
12c0: 2c 20 30 29 3b 0d 0a 09 09 09 09 09 09 63 6c 72  , 0);........clr
12d0: 74 6f 65 6f 6c 28 29 3b 0d 0a 09 09 09 09 09 09  toeol();........
12e0: 6d 76 70 72 69 6e 74 77 28 4c 49 4e 45 53 20 2d  mvprintw(LINES -
12f0: 20 32 2c 20 30 2c 20 22 53 65 6c 65 63 74 20 49   2, 0, "Select I
1300: 53 4f 22 29 3b 0d 0a 09 09 09 09 09 09 72 65 66  SO");........ref
1310: 72 65 73 68 28 29 3b 0d 0a 09 09 09 09 09 09 6d  resh();........m
1320: 65 6e 75 20 3d 20 26 69 73 6f 5f 6d 65 6e 75 3b  enu = &iso_menu;
1330: 0d 0a 09 09 09 09 09 09 77 69 6e 20 3d 20 26 69  ........win = &i
1340: 73 6f 5f 77 69 6e 3b 0d 0a 09 09 09 09 09 7d 0d  so_win;.......}.
1350: 0a 09 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09  ......break;....
1360: 09 09 09 63 61 73 65 20 32 3a 20 7b 20 2f 2a 20  ...case 2: { /* 
1370: 49 53 4f 20 53 65 6c 65 63 74 65 64 20 2a 2f 0d  ISO Selected */.
1380: 0a 09 09 09 09 09 09 73 65 6c 65 63 74 69 6f 6e  .......selection
1390: 5f 63 6f 75 6e 74 65 72 20 2b 3d 20 31 3b 0d 0a  _counter += 1;..
13a0: 09 09 09 09 09 09 6d 65 6e 75 5f 63 6f 75 6e 74  ......menu_count
13b0: 65 72 20 2b 3d 20 31 3b 0d 0a 09 09 09 09 09 09  er += 1;........
13c0: 6d 6f 76 65 28 4c 49 4e 45 53 20 2d 20 32 2c 20  move(LINES - 2, 
13d0: 30 29 3b 0d 0a 09 09 09 09 09 09 63 6c 72 74 6f  0);........clrto
13e0: 65 6f 6c 28 29 3b 0d 0a 09 09 09 09 09 09 6d 76  eol();........mv
13f0: 70 72 69 6e 74 77 28 4c 49 4e 45 53 20 2d 20 32  printw(LINES - 2
1400: 2c 20 30 2c 20 22 53 65 6c 65 63 74 20 53 68 75  , 0, "Select Shu
1410: 74 74 65 72 20 6f 72 20 41 70 65 72 74 75 72 65  tter or Aperture
1420: 22 29 3b 0d 0a 09 09 09 09 09 09 72 65 66 72 65  ");........refre
1430: 73 68 28 29 3b 0d 0a 09 09 09 09 09 09 6d 65 6e  sh();........men
1440: 75 20 3d 20 26 73 68 75 74 74 65 72 5f 6d 65 6e  u = &shutter_men
1450: 75 3b 0d 0a 09 09 09 09 09 09 77 69 6e 20 3d 20  u;........win = 
1460: 26 73 68 75 74 74 65 72 5f 77 69 6e 3b 0d 0a 09  &shutter_win;...
1470: 09 09 09 09 7d 0d 0a 09 09 09 09 09 62 72 65 61  ....}.......brea
1480: 6b 3b 0d 0a 09 09 09 09 09 63 61 73 65 20 33 3a  k;.......case 3:
1490: 20 7b 20 2f 2a 20 53 68 75 74 74 65 72 20 6f 72   { /* Shutter or
14a0: 20 41 70 65 72 74 75 72 65 20 73 65 6c 65 63 74   Aperture select
14b0: 65 64 20 2a 2f 0d 0a 09 09 09 09 09 09 69 66 20  ed */........if 
14c0: 28 73 74 72 63 6d 70 28 22 22 2c 20 73 68 75 74  (strcmp("", shut
14d0: 74 65 72 5f 73 65 6c 29 20 3d 3d 20 30 29 20 7b  ter_sel) == 0) {
14e0: 0d 0a 09 09 09 09 09 09 09 63 68 61 72 20 61 70  .........char ap
14f0: 65 72 74 75 72 65 5f 73 65 6c 5f 5b 34 5d 20 3d  erture_sel_[4] =
1500: 20 22 22 3b 0d 0a 09 09 09 09 09 09 09 73 74 72   "";.........str
1510: 6e 63 70 79 28 61 70 65 72 74 75 72 65 5f 73 65  ncpy(aperture_se
1520: 6c 5f 2c 20 61 70 65 72 74 75 72 65 5f 73 65 6c  l_, aperture_sel
1530: 2b 32 2c 20 33 29 3b 0d 0a 09 09 09 09 09 09 09  +2, 3);.........
1540: 2f 2a 20 55 73 69 6e 67 20 6d 65 6e 75 5f 64 72  /* Using menu_dr
1550: 69 76 65 72 20 74 6f 20 67 6f 20 75 70 2f 64 6f  iver to go up/do
1560: 77 6e 20 74 6f 20 66 6f 72 63 65 20 72 65 66 72  wn to force refr
1570: 65 73 68 20 61 6e 64 20 63 6f 72 72 65 63 74 20  esh and correct 
1580: 68 69 67 68 6c 69 67 68 74 69 6e 67 20 2a 2f 0d  highlighting */.
1590: 0a 09 09 09 09 09 09 09 6d 65 6e 75 5f 64 72 69  ........menu_dri
15a0: 76 65 72 28 73 68 75 74 74 65 72 5f 6d 65 6e 75  ver(shutter_menu
15b0: 2c 20 52 45 51 5f 53 43 52 5f 55 50 41 47 45 29  , REQ_SCR_UPAGE)
15c0: 3b 0d 0a 09 09 09 09 09 09 09 6d 65 6e 75 5f 64  ;.........menu_d
15d0: 72 69 76 65 72 28 73 68 75 74 74 65 72 5f 6d 65  river(shutter_me
15e0: 6e 75 2c 20 52 45 51 5f 53 43 52 5f 44 50 41 47  nu, REQ_SCR_DPAG
15f0: 45 29 3b 0d 0a 09 09 09 09 09 09 09 2f 2a 20 54  E);........./* T
1600: 68 65 72 65 20 69 73 20 70 72 6f 62 61 62 6c 79  here is probably
1610: 20 61 20 6e 69 63 65 72 20 77 61 79 20 74 6f 20   a nicer way to 
1620: 66 6f 72 6d 61 74 20 74 68 65 20 62 65 6c 6f 77  format the below
1630: 20 2a 2f 0d 0a 09 09 09 09 09 09 09 73 65 74 5f   */.........set_
1640: 6d 65 6e 75 5f 70 61 74 74 65 72 6e 28 0d 0a 09  menu_pattern(...
1650: 09 09 09 09 09 09 09 73 68 75 74 74 65 72 5f 6d  .......shutter_m
1660: 65 6e 75 2c 0d 0a 09 09 09 09 09 09 09 09 73 68  enu,..........sh
1670: 75 74 74 65 72 5f 61 72 72 61 79 5b 6e 65 61 72  utter_array[near
1680: 65 73 74 5f 6d 61 74 63 68 28 0d 0a 09 09 09 09  est_match(......
1690: 09 09 09 09 09 73 68 75 74 74 65 72 28 65 78 70  .....shutter(exp
16a0: 6f 73 75 72 65 28 61 74 6f 69 28 69 73 6f 5f 73  osure(atoi(iso_s
16b0: 65 6c 29 29 2c 20 73 74 72 74 6f 64 28 61 70 65  el)), strtod(ape
16c0: 72 74 75 72 65 5f 73 65 6c 5f 2c 20 4e 55 4c 4c  rture_sel_, NULL
16d0: 29 29 2c 0d 0a 09 09 09 09 09 09 09 09 09 32 0d  )),...........2.
16e0: 0a 09 09 09 09 09 09 09 09 29 5d 0d 0a 09 09 09  .........)].....
16f0: 09 09 09 09 29 3b 0d 0a 09 09 09 09 09 09 09 6d  ....);.........m
1700: 65 6e 75 5f 64 72 69 76 65 72 28 73 68 75 74 74  enu_driver(shutt
1710: 65 72 5f 6d 65 6e 75 2c 20 52 45 51 5f 44 4f 57  er_menu, REQ_DOW
1720: 4e 5f 49 54 45 4d 29 3b 0d 0a 09 09 09 09 09 09  N_ITEM);........
1730: 09 6d 65 6e 75 5f 64 72 69 76 65 72 28 73 68 75  .menu_driver(shu
1740: 74 74 65 72 5f 6d 65 6e 75 2c 20 52 45 51 5f 55  tter_menu, REQ_U
1750: 50 5f 49 54 45 4d 29 3b 0d 0a 09 09 09 09 09 09  P_ITEM);........
1760: 09 77 72 65 66 72 65 73 68 28 73 68 75 74 74 65  .wrefresh(shutte
1770: 72 5f 77 69 6e 29 3b 0d 0a 09 09 09 09 09 09 7d  r_win);........}
1780: 0d 0a 09 09 09 09 09 09 69 66 20 28 73 74 72 63  ........if (strc
1790: 6d 70 28 22 22 2c 20 61 70 65 72 74 75 72 65 5f  mp("", aperture_
17a0: 73 65 6c 29 20 3d 3d 20 30 29 20 7b 0d 0a 09 09  sel) == 0) {....
17b0: 09 09 09 09 09 6d 65 6e 75 5f 64 72 69 76 65 72  .....menu_driver
17c0: 28 61 70 65 72 74 75 72 65 5f 6d 65 6e 75 2c 20  (aperture_menu, 
17d0: 52 45 51 5f 53 43 52 5f 55 50 41 47 45 29 3b 0d  REQ_SCR_UPAGE);.
17e0: 0a 09 09 09 09 09 09 09 6d 65 6e 75 5f 64 72 69  ........menu_dri
17f0: 76 65 72 28 61 70 65 72 74 75 72 65 5f 6d 65 6e  ver(aperture_men
1800: 75 2c 20 52 45 51 5f 53 43 52 5f 44 50 41 47 45  u, REQ_SCR_DPAGE
1810: 29 3b 0d 0a 09 09 09 09 09 09 09 73 65 74 5f 6d  );.........set_m
1820: 65 6e 75 5f 70 61 74 74 65 72 6e 28 0d 0a 09 09  enu_pattern(....
1830: 09 09 09 09 09 09 61 70 65 72 74 75 72 65 5f 6d  ......aperture_m
1840: 65 6e 75 2c 0d 0a 09 09 09 09 09 09 09 09 61 70  enu,..........ap
1850: 65 72 74 75 72 65 5f 61 72 72 61 79 5b 6e 65 61  erture_array[nea
1860: 72 65 73 74 5f 6d 61 74 63 68 28 0d 0a 09 09 09  rest_match(.....
1870: 09 09 09 09 09 09 61 70 65 72 74 75 72 65 28 65  ......aperture(e
1880: 78 70 6f 73 75 72 65 28 61 74 6f 69 28 69 73 6f  xposure(atoi(iso
1890: 5f 73 65 6c 29 29 2c 20 66 72 61 63 74 69 6f 6e  _sel)), fraction
18a0: 5f 74 6f 5f 64 6f 75 62 6c 65 28 73 68 75 74 74  _to_double(shutt
18b0: 65 72 5f 73 65 6c 29 29 2c 0d 0a 09 09 09 09 09  er_sel)),.......
18c0: 09 09 09 09 33 0d 0a 09 09 09 09 09 09 09 09 29  ....3..........)
18d0: 5d 0d 0a 09 09 09 09 09 09 09 29 3b 0d 0a 09 09  ].........);....
18e0: 09 09 09 09 09 6d 65 6e 75 5f 64 72 69 76 65 72  .....menu_driver
18f0: 28 61 70 65 72 74 75 72 65 5f 6d 65 6e 75 2c 20  (aperture_menu, 
1900: 52 45 51 5f 44 4f 57 4e 5f 49 54 45 4d 29 3b 0d  REQ_DOWN_ITEM);.
1910: 0a 09 09 09 09 09 09 09 6d 65 6e 75 5f 64 72 69  ........menu_dri
1920: 76 65 72 28 61 70 65 72 74 75 72 65 5f 6d 65 6e  ver(aperture_men
1930: 75 2c 20 52 45 51 5f 55 50 5f 49 54 45 4d 29 3b  u, REQ_UP_ITEM);
1940: 0d 0a 09 09 09 09 09 09 09 77 72 65 66 72 65 73  .........wrefres
1950: 68 28 61 70 65 72 74 75 72 65 5f 77 69 6e 29 3b  h(aperture_win);
1960: 0d 0a 09 09 09 09 09 09 7d 0d 0a 09 09 09 09 09  ........}.......
1970: 09 2f 2a 20 63 6c 65 61 72 20 74 68 65 20 73 65  ./* clear the se
1980: 6c 65 63 74 69 6f 6e 73 20 66 6f 72 20 6e 65 78  lections for nex
1990: 74 20 74 69 6d 65 20 2a 2f 0d 0a 09 09 09 09 09  t time */.......
19a0: 09 73 74 72 63 70 79 28 69 73 6f 5f 73 65 6c 2c  .strcpy(iso_sel,
19b0: 20 22 22 29 3b 0d 0a 09 09 09 09 09 09 73 74 72   "");........str
19c0: 63 70 79 28 73 68 75 74 74 65 72 5f 73 65 6c 2c  cpy(shutter_sel,
19d0: 20 22 22 29 3b 0d 0a 09 09 09 09 09 09 73 74 72   "");........str
19e0: 63 70 79 28 61 70 65 72 74 75 72 65 5f 73 65 6c  cpy(aperture_sel
19f0: 2c 20 22 22 29 3b 0d 0a 09 09 09 09 09 09 2f 2a  , "");......../*
1a00: 20 41 6e 64 20 73 65 74 20 64 65 66 61 75 6c 74   And set default
1a10: 73 20 62 61 63 6b 20 74 6f 20 73 74 61 72 74 20  s back to start 
1a20: 2a 2f 0d 0a 09 09 09 09 09 09 73 65 6c 65 63 74  */........select
1a30: 69 6f 6e 5f 63 6f 75 6e 74 65 72 20 3d 20 31 3b  ion_counter = 1;
1a40: 0d 0a 09 09 09 09 09 09 6d 65 6e 75 5f 63 6f 75  ........menu_cou
1a50: 6e 74 65 72 20 3d 20 31 3b 0d 0a 09 09 09 09 09  nter = 1;.......
1a60: 09 6d 65 6e 75 20 3d 20 26 65 78 70 6f 73 75 72  .menu = &exposur
1a70: 65 5f 6d 65 6e 75 3b 0d 0a 09 09 09 09 09 09 77  e_menu;........w
1a80: 69 6e 20 3d 20 26 65 78 70 6f 73 75 72 65 5f 77  in = &exposure_w
1a90: 69 6e 3b 0d 0a 09 09 09 09 09 09 6d 6f 76 65 28  in;........move(
1aa0: 4c 49 4e 45 53 20 2d 20 32 2c 20 30 29 3b 0d 0a  LINES - 2, 0);..
1ab0: 09 09 09 09 09 09 63 6c 72 74 6f 65 6f 6c 28 29  ......clrtoeol()
1ac0: 3b 0d 0a 09 09 09 09 09 09 6d 76 70 72 69 6e 74  ;........mvprint
1ad0: 77 28 4c 49 4e 45 53 20 2d 20 32 2c 20 30 2c 20  w(LINES - 2, 0, 
1ae0: 22 53 65 6c 65 63 74 20 45 56 22 29 3b 0d 0a 09  "Select EV");...
1af0: 09 09 09 09 09 72 65 66 72 65 73 68 28 29 3b 0d  .....refresh();.
1b00: 0a 09 09 09 09 09 7d 0d 0a 09 09 09 09 09 62 72  ......}.......br
1b10: 65 61 6b 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09  eak;......}.....
1b20: 7d 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09  }.....break;....
1b30: 7d 0d 0a 09 09 77 72 65 66 72 65 73 68 28 2a 77  }....wrefresh(*w
1b40: 69 6e 29 3b 0d 0a 09 7d 09 0d 0a 09 2f 2a 20 55  in);...}..../* U
1b50: 6e 70 6f 73 74 20 61 6e 64 20 66 72 65 65 20 61  npost and free a
1b60: 6c 6c 20 74 68 65 20 6d 65 6d 6f 72 79 20 74 61  ll the memory ta
1b70: 6b 65 6e 20 75 70 20 2a 2f 0d 0a 09 72 65 6d 6f  ken up */...remo
1b80: 76 65 5f 6d 65 6e 75 28 65 78 70 6f 73 75 72 65  ve_menu(exposure
1b90: 5f 69 74 65 6d 73 2c 20 65 78 70 6f 73 75 72 65  _items, exposure
1ba0: 5f 6d 65 6e 75 2c 20 6e 5f 65 78 70 6f 73 75 72  _menu, n_exposur
1bb0: 65 29 3b 0d 0a 09 72 65 6d 6f 76 65 5f 6d 65 6e  e);...remove_men
1bc0: 75 28 69 73 6f 5f 69 74 65 6d 73 2c 20 69 73 6f  u(iso_items, iso
1bd0: 5f 6d 65 6e 75 2c 20 6e 5f 69 73 6f 29 3b 0d 0a  _menu, n_iso);..
1be0: 09 72 65 6d 6f 76 65 5f 6d 65 6e 75 28 73 68 75  .remove_menu(shu
1bf0: 74 74 65 72 5f 69 74 65 6d 73 2c 20 73 68 75 74  tter_items, shut
1c00: 74 65 72 5f 6d 65 6e 75 2c 20 6e 5f 73 68 75 74  ter_menu, n_shut
1c10: 74 65 72 29 3b 0d 0a 09 72 65 6d 6f 76 65 5f 6d  ter);...remove_m
1c20: 65 6e 75 28 61 70 65 72 74 75 72 65 5f 69 74 65  enu(aperture_ite
1c30: 6d 73 2c 20 61 70 65 72 74 75 72 65 5f 6d 65 6e  ms, aperture_men
1c40: 75 2c 20 6e 5f 61 70 65 72 74 75 72 65 29 3b 0d  u, n_aperture);.
1c50: 0a 09 65 6e 64 77 69 6e 28 29 3b 0d 0a 7d 0d 0a  ..endwin();..}..
1c60: 0d 0a 4d 45 4e 55 20 2a 61 64 64 5f 6d 65 6e 75  ..MENU *add_menu
1c70: 28 63 68 61 72 20 2a 2a 61 72 72 61 79 2c 20 49  (char **array, I
1c80: 54 45 4d 20 2a 2a 69 74 65 6d 73 2c 20 69 6e 74  TEM **items, int
1c90: 20 6e 29 20 7b 0d 0a 09 69 6e 74 20 69 3b 0d 0a   n) {...int i;..
1ca0: 09 4d 45 4e 55 20 2a 6c 6f 63 61 6c 5f 6d 65 6e  .MENU *local_men
1cb0: 75 3b 0d 0a 0d 0a 09 69 74 65 6d 73 20 3d 20 28  u;.....items = (
1cc0: 49 54 45 4d 20 2a 2a 29 63 61 6c 6c 6f 63 28 6e  ITEM **)calloc(n
1cd0: 2c 20 73 69 7a 65 6f 66 28 49 54 45 4d 20 2a 29  , sizeof(ITEM *)
1ce0: 29 3b 0d 0a 09 66 6f 72 28 69 20 3d 20 30 3b 20  );...for(i = 0; 
1cf0: 69 3c 6e 3b 20 2b 2b 69 29 20 7b 0d 0a 09 09 69  i<n; ++i) {....i
1d00: 74 65 6d 73 5b 69 5d 20 3d 20 6e 65 77 5f 69 74  tems[i] = new_it
1d10: 65 6d 28 61 72 72 61 79 5b 69 5d 2c 20 61 72 72  em(array[i], arr
1d20: 61 79 5b 69 5d 29 3b 0d 0a 09 09 73 65 74 5f 69  ay[i]);....set_i
1d30: 74 65 6d 5f 75 73 65 72 70 74 72 28 69 74 65 6d  tem_userptr(item
1d40: 73 5b 69 5d 2c 20 73 65 6c 65 63 74 69 6f 6e 29  s[i], selection)
1d50: 3b 0d 0a 09 7d 0d 0a 09 6c 6f 63 61 6c 5f 6d 65  ;...}...local_me
1d60: 6e 75 20 3d 20 6e 65 77 5f 6d 65 6e 75 28 28 49  nu = new_menu((I
1d70: 54 45 4d 20 2a 2a 29 69 74 65 6d 73 29 3b 0d 0a  TEM **)items);..
1d80: 09 73 65 74 5f 6d 65 6e 75 5f 66 6f 72 6d 61 74  .set_menu_format
1d90: 28 6c 6f 63 61 6c 5f 6d 65 6e 75 2c 20 35 2c 20  (local_menu, 5, 
1da0: 31 29 3b 0d 0a 09 73 65 74 5f 6d 65 6e 75 5f 6d  1);...set_menu_m
1db0: 61 72 6b 28 6c 6f 63 61 6c 5f 6d 65 6e 75 2c 20  ark(local_menu, 
1dc0: 22 20 2a 20 22 29 3b 0d 0a 09 72 65 74 75 72 6e  " * ");...return
1dd0: 20 6c 6f 63 61 6c 5f 6d 65 6e 75 3b 0d 0a 7d 0d   local_menu;..}.
1de0: 0a 0d 0a 57 49 4e 44 4f 57 20 2a 61 64 64 5f 77  ...WINDOW *add_w
1df0: 69 6e 64 6f 77 28 69 6e 74 20 78 70 6f 73 2c 20  indow(int xpos, 
1e00: 63 68 61 72 20 2a 74 69 74 6c 65 29 20 7b 0d 0a  char *title) {..
1e10: 09 57 49 4e 44 4f 57 20 2a 6c 6f 63 61 6c 5f 77  .WINDOW *local_w
1e20: 69 6e 3b 0d 0a 0d 0a 09 6c 6f 63 61 6c 5f 77 69  in;.....local_wi
1e30: 6e 20 3d 20 6e 65 77 77 69 6e 28 31 30 2c 20 34  n = newwin(10, 4
1e40: 30 2c 20 34 2c 20 78 70 6f 73 29 3b 0d 0a 09 6b  0, 4, xpos);...k
1e50: 65 79 70 61 64 28 6c 6f 63 61 6c 5f 77 69 6e 2c  eypad(local_win,
1e60: 20 54 52 55 45 29 3b 0d 0a 09 62 6f 78 28 6c 6f   TRUE);...box(lo
1e70: 63 61 6c 5f 77 69 6e 2c 20 30 2c 20 30 29 3b 0d  cal_win, 0, 0);.
1e80: 0a 09 70 72 69 6e 74 5f 69 6e 5f 6d 69 64 64 6c  ..print_in_middl
1e90: 65 28 6c 6f 63 61 6c 5f 77 69 6e 2c 20 31 2c 20  e(local_win, 1, 
1ea0: 30 2c 20 34 30 2c 20 74 69 74 6c 65 2c 20 43 4f  0, 40, title, CO
1eb0: 4c 4f 52 5f 50 41 49 52 28 31 29 29 3b 0d 0a 09  LOR_PAIR(1));...
1ec0: 6d 76 77 61 64 64 63 68 28 6c 6f 63 61 6c 5f 77  mvwaddch(local_w
1ed0: 69 6e 2c 20 32 2c 20 30 2c 20 41 43 53 5f 4c 54  in, 2, 0, ACS_LT
1ee0: 45 45 29 3b 0d 0a 09 6d 76 77 68 6c 69 6e 65 28  EE);...mvwhline(
1ef0: 6c 6f 63 61 6c 5f 77 69 6e 2c 20 32 2c 20 31 2c  local_win, 2, 1,
1f00: 20 41 43 53 5f 48 4c 49 4e 45 2c 20 33 38 29 3b   ACS_HLINE, 38);
1f10: 0d 0a 09 6d 76 77 61 64 64 63 68 28 6c 6f 63 61  ...mvwaddch(loca
1f20: 6c 5f 77 69 6e 2c 20 32 2c 20 33 39 2c 20 41 43  l_win, 2, 39, AC
1f30: 53 5f 52 54 45 45 29 3b 0d 0a 09 72 65 74 75 72  S_RTEE);...retur
1f40: 6e 20 6c 6f 63 61 6c 5f 77 69 6e 3b 0d 0a 7d 0d  n local_win;..}.
1f50: 0a 0d 0a 76 6f 69 64 20 72 65 6d 6f 76 65 5f 6d  ...void remove_m
1f60: 65 6e 75 28 49 54 45 4d 20 2a 2a 69 74 65 6d 73  enu(ITEM **items
1f70: 2c 20 4d 45 4e 55 20 2a 6d 65 6e 2c 20 69 6e 74  , MENU *men, int
1f80: 20 6e 29 20 7b 0d 0a 09 69 6e 74 20 69 3b 0d 0a   n) {...int i;..
1f90: 0d 0a 09 75 6e 70 6f 73 74 5f 6d 65 6e 75 28 6d  ...unpost_menu(m
1fa0: 65 6e 29 3b 0d 0a 09 66 72 65 65 5f 6d 65 6e 75  en);...free_menu
1fb0: 28 6d 65 6e 29 3b 0d 0a 09 66 6f 72 28 69 20 3d  (men);...for(i =
1fc0: 20 30 3b 20 69 20 3c 20 6e 3b 20 2b 2b 69 29 0d   0; i < n; ++i).
1fd0: 0a 09 09 66 72 65 65 5f 69 74 65 6d 28 69 74 65  ...free_item(ite
1fe0: 6d 73 5b 69 5d 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f  ms[i]);..}....vo
1ff0: 69 64 20 70 72 69 6e 74 5f 69 6e 5f 6d 69 64 64  id print_in_midd
2000: 6c 65 28 57 49 4e 44 4f 57 20 2a 77 69 6e 2c 20  le(WINDOW *win, 
2010: 69 6e 74 20 73 74 61 72 74 79 2c 20 69 6e 74 20  int starty, int 
2020: 73 74 61 72 74 78 2c 20 69 6e 74 20 77 69 64 74  startx, int widt
2030: 68 2c 20 63 68 61 72 20 2a 73 74 72 69 6e 67 2c  h, char *string,
2040: 20 63 68 74 79 70 65 20 63 6f 6c 6f 72 29 20 7b   chtype color) {
2050: 0d 0a 09 69 6e 74 20 6c 65 6e 67 74 68 2c 20 78  ...int length, x
2060: 2c 20 79 3b 0d 0a 09 66 6c 6f 61 74 20 74 65 6d  , y;...float tem
2070: 70 3b 0d 0a 0d 0a 09 69 66 28 77 69 6e 20 3d 3d  p;.....if(win ==
2080: 20 4e 55 4c 4c 29 0d 0a 09 09 77 69 6e 20 3d 20   NULL)....win = 
2090: 73 74 64 73 63 72 3b 0d 0a 09 67 65 74 79 78 28  stdscr;...getyx(
20a0: 77 69 6e 2c 20 79 2c 20 78 29 3b 0d 0a 09 69 66  win, y, x);...if
20b0: 28 73 74 61 72 74 78 20 21 3d 20 30 29 0d 0a 09  (startx != 0)...
20c0: 09 78 20 3d 20 73 74 61 72 74 78 3b 0d 0a 09 69  .x = startx;...i
20d0: 66 28 73 74 61 72 74 79 20 21 3d 20 30 29 0d 0a  f(starty != 0)..
20e0: 09 09 79 20 3d 20 73 74 61 72 74 79 3b 0d 0a 09  ..y = starty;...
20f0: 69 66 28 77 69 64 74 68 20 3d 3d 20 30 29 0d 0a  if(width == 0)..
2100: 09 09 77 69 64 74 68 20 3d 20 38 30 3b 0d 0a 0d  ..width = 80;...
2110: 0a 09 6c 65 6e 67 74 68 20 3d 20 73 74 72 6c 65  ..length = strle
2120: 6e 28 73 74 72 69 6e 67 29 3b 0d 0a 09 74 65 6d  n(string);...tem
2130: 70 20 3d 20 28 77 69 64 74 68 20 2d 20 6c 65 6e  p = (width - len
2140: 67 74 68 29 2f 20 32 3b 0d 0a 09 78 20 3d 20 73  gth)/ 2;...x = s
2150: 74 61 72 74 78 20 2b 20 28 69 6e 74 29 74 65 6d  tartx + (int)tem
2160: 70 3b 0d 0a 09 77 61 74 74 72 6f 6e 28 77 69 6e  p;...wattron(win
2170: 2c 20 63 6f 6c 6f 72 29 3b 0d 0a 09 6d 76 77 70  , color);...mvwp
2180: 72 69 6e 74 77 28 77 69 6e 2c 20 79 2c 20 78 2c  rintw(win, y, x,
2190: 20 22 25 73 22 2c 20 73 74 72 69 6e 67 29 3b 0d   "%s", string);.
21a0: 0a 09 77 61 74 74 72 6f 66 66 28 77 69 6e 2c 20  ..wattroff(win, 
21b0: 63 6f 6c 6f 72 29 3b 0d 0a 09 72 65 66 72 65 73  color);...refres
21c0: 68 28 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20  h();..}....void 
21d0: 73 65 6c 65 63 74 69 6f 6e 28 63 68 61 72 20 2a  selection(char *
21e0: 6e 61 6d 65 29 20 7b 0d 0a 09 73 77 69 74 63 68  name) {...switch
21f0: 28 6d 65 6e 75 5f 63 6f 75 6e 74 65 72 29 20 7b  (menu_counter) {
2200: 0d 0a 09 09 63 61 73 65 20 31 3a 0d 0a 09 09 09  ....case 1:.....
2210: 73 74 72 63 70 79 28 65 78 70 6f 73 75 72 65 5f  strcpy(exposure_
2220: 73 65 6c 2c 20 6e 61 6d 65 29 3b 0d 0a 09 09 09  sel, name);.....
2230: 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 32  break;....case 2
2240: 3a 0d 0a 09 09 09 73 74 72 63 70 79 28 69 73 6f  :.....strcpy(iso
2250: 5f 73 65 6c 2c 20 6e 61 6d 65 29 3b 0d 0a 09 09  _sel, name);....
2260: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20  .break;....case 
2270: 33 3a 0d 0a 09 09 09 73 74 72 63 70 79 28 73 68  3:.....strcpy(sh
2280: 75 74 74 65 72 5f 73 65 6c 2c 20 6e 61 6d 65 29  utter_sel, name)
2290: 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09  ;.....break;....
22a0: 63 61 73 65 20 34 3a 0d 0a 09 09 09 73 74 72 63  case 4:.....strc
22b0: 70 79 28 61 70 65 72 74 75 72 65 5f 73 65 6c 2c  py(aperture_sel,
22c0: 20 6e 61 6d 65 29 3b 0d 0a 09 09 09 62 72 65 61   name);.....brea
22d0: 6b 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 69 6e 74  k;...}..}....int
22e0: 20 65 78 70 6f 73 75 72 65 20 28 69 6e 74 20 69   exposure (int i
22f0: 73 6f 29 20 7b 0d 0a 09 69 6e 74 20 65 76 31 30  so) {...int ev10
2300: 30 3b 0d 0a 09 65 76 31 30 30 20 3d 20 31 35 3b  0;...ev100 = 15;
2310: 0d 0a 09 72 65 74 75 72 6e 20 65 76 31 30 30 20  ...return ev100 
2320: 2b 20 28 6c 6f 67 20 28 69 73 6f 20 2f 20 31 30  + (log (iso / 10
2330: 30 29 20 2f 20 6c 6f 67 20 28 32 29 29 3b 0d 0a  0) / log (2));..
2340: 7d 0d 0a 0d 0a 64 6f 75 62 6c 65 20 73 68 75 74  }....double shut
2350: 74 65 72 20 28 69 6e 74 20 65 78 70 6f 73 75 72  ter (int exposur
2360: 65 2c 20 64 6f 75 62 6c 65 20 61 70 65 72 74 75  e, double apertu
2370: 72 65 29 20 7b 0d 0a 09 2f 2a 20 45 56 20 3d 20  re) {.../* EV = 
2380: 6c 6f 67 32 20 28 4e 5e 32 2f 74 29 20 2a 2f 0d  log2 (N^2/t) */.
2390: 0a 09 72 65 74 75 72 6e 20 70 6f 77 28 61 70 65  ..return pow(ape
23a0: 72 74 75 72 65 2c 20 32 29 20 2f 20 70 6f 77 28  rture, 2) / pow(
23b0: 32 2c 20 65 78 70 6f 73 75 72 65 29 3b 0d 0a 7d  2, exposure);..}
23c0: 0d 0a 0d 0a 64 6f 75 62 6c 65 20 61 70 65 72 74  ....double apert
23d0: 75 72 65 20 28 69 6e 74 20 65 78 70 6f 73 75 72  ure (int exposur
23e0: 65 2c 20 64 6f 75 62 6c 65 20 73 68 75 74 74 65  e, double shutte
23f0: 72 29 20 7b 0d 0a 09 2f 2a 20 45 56 20 3d 20 6c  r) {.../* EV = l
2400: 6f 67 32 20 28 4e 5e 32 2f 74 29 20 2a 2f 0d 0a  og2 (N^2/t) */..
2410: 09 72 65 74 75 72 6e 20 73 71 72 74 28 70 6f 77  .return sqrt(pow
2420: 28 32 2c 20 65 78 70 6f 73 75 72 65 29 20 2a 20  (2, exposure) * 
2430: 73 68 75 74 74 65 72 29 3b 0d 0a 7d 0d 0a 0d 0a  shutter);..}....
2440: 69 6e 74 20 6e 65 61 72 65 73 74 5f 6d 61 74 63  int nearest_matc
2450: 68 20 28 64 6f 75 62 6c 65 20 78 2c 20 69 6e 74  h (double x, int
2460: 20 6d 65 6e 75 29 20 7b 0d 0a 09 2f 2a 20 4e 65   menu) {.../* Ne
2470: 65 64 20 74 6f 20 73 65 61 72 63 68 20 61 72 72  ed to search arr
2480: 61 79 20 66 6f 72 20 63 6c 6f 73 65 73 74 20 6d  ay for closest m
2490: 61 74 63 68 20 2a 2f 0d 0a 09 69 6e 74 20 6e 3b  atch */...int n;
24a0: 0d 0a 09 69 6e 74 20 64 69 66 66 5f 69 64 78 20  ...int diff_idx 
24b0: 3d 20 30 3b 0d 0a 09 63 68 61 72 20 61 72 72 61  = 0;...char arra
24c0: 79 5f 76 61 6c 75 65 5f 73 74 72 5b 39 5d 3b 0d  y_value_str[9];.
24d0: 0a 09 64 6f 75 62 6c 65 20 61 72 72 61 79 5f 76  ..double array_v
24e0: 61 6c 75 65 5f 64 62 3b 0d 0a 09 64 6f 75 62 6c  alue_db;...doubl
24f0: 65 20 64 69 66 66 3b 0d 0a 0d 0a 09 2f 2a 20 4e  e diff;...../* N
2500: 65 65 64 20 61 20 73 74 61 72 74 69 6e 67 20 76  eed a starting v
2510: 61 6c 75 65 20 66 6f 72 20 64 69 66 66 65 72 65  alue for differe
2520: 6e 63 65 20 2a 2f 0d 0a 09 73 77 69 74 63 68 28  nce */...switch(
2530: 6d 65 6e 75 29 20 7b 0d 0a 09 09 63 61 73 65 20  menu) {....case 
2540: 31 3a 0d 0a 09 09 09 61 72 72 61 79 5f 76 61 6c  1:.....array_val
2550: 75 65 5f 64 62 20 3d 20 73 74 72 74 6f 64 28 69  ue_db = strtod(i
2560: 73 6f 5f 61 72 72 61 79 5b 30 5d 2c 20 4e 55 4c  so_array[0], NUL
2570: 4c 29 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a  L);.....break;..
2580: 09 09 63 61 73 65 20 32 3a 0d 0a 09 09 09 61 72  ..case 2:.....ar
2590: 72 61 79 5f 76 61 6c 75 65 5f 64 62 20 3d 20 66  ray_value_db = f
25a0: 72 61 63 74 69 6f 6e 5f 74 6f 5f 64 6f 75 62 6c  raction_to_doubl
25b0: 65 28 73 68 75 74 74 65 72 5f 61 72 72 61 79 5b  e(shutter_array[
25c0: 30 5d 29 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d  0]);.....break;.
25d0: 0a 09 09 63 61 73 65 20 33 3a 0d 0a 09 09 09 73  ...case 3:.....s
25e0: 74 72 6e 63 70 79 28 61 72 72 61 79 5f 76 61 6c  trncpy(array_val
25f0: 75 65 5f 73 74 72 2c 20 61 70 65 72 74 75 72 65  ue_str, aperture
2600: 5f 61 72 72 61 79 5b 30 5d 2b 32 2c 20 34 29 3b  _array[0]+2, 4);
2610: 0d 0a 09 09 09 61 72 72 61 79 5f 76 61 6c 75 65  .....array_value
2620: 5f 64 62 20 3d 20 73 74 72 74 6f 64 28 61 72 72  _db = strtod(arr
2630: 61 79 5f 76 61 6c 75 65 5f 73 74 72 2c 20 4e 55  ay_value_str, NU
2640: 4c 4c 29 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d  LL);.....break;.
2650: 0a 09 7d 0d 0a 09 64 69 66 66 20 3d 20 66 61 62  ..}...diff = fab
2660: 73 28 61 72 72 61 79 5f 76 61 6c 75 65 5f 64 62  s(array_value_db
2670: 20 2d 20 78 29 3b 0d 0a 09 2f 2a 20 6c 6f 74 73   - x);.../* lots
2680: 20 6f 66 20 72 65 70 65 74 69 74 69 6f 6e 20 68   of repetition h
2690: 65 72 65 20 62 75 74 20 70 6f 69 6e 74 65 72 73  ere but pointers
26a0: 20 74 6f 20 61 72 72 61 79 73 20 73 65 65 6d 20   to arrays seem 
26b0: 74 6f 20 62 65 20 61 20 62 61 64 20 74 68 69 6e  to be a bad thin
26c0: 67 20 2a 2f 0d 0a 09 73 77 69 74 63 68 28 6d 65  g */...switch(me
26d0: 6e 75 29 20 7b 0d 0a 09 09 63 61 73 65 20 31 3a  nu) {....case 1:
26e0: 0d 0a 09 09 09 66 6f 72 20 28 20 6e 20 3d 20 31  .....for ( n = 1
26f0: 3b 20 69 73 6f 5f 61 72 72 61 79 5b 6e 5d 20 21  ; iso_array[n] !
2700: 3d 20 4e 55 4c 4c 3b 20 2b 2b 6e 20 29 20 7b 0d  = NULL; ++n ) {.
2710: 0a 09 09 09 09 61 72 72 61 79 5f 76 61 6c 75 65  .....array_value
2720: 5f 64 62 20 3d 20 73 74 72 74 6f 64 28 69 73 6f  _db = strtod(iso
2730: 5f 61 72 72 61 79 5b 6e 5d 2c 20 4e 55 4c 4c 29  _array[n], NULL)
2740: 3b 0d 0a 09 09 09 09 69 66 20 28 66 61 62 73 28  ;......if (fabs(
2750: 61 72 72 61 79 5f 76 61 6c 75 65 5f 64 62 20 2d  array_value_db -
2760: 20 78 29 20 3c 20 64 69 66 66 29 20 7b 20 0d 0a   x) < diff) { ..
2770: 09 09 09 09 09 64 69 66 66 5f 69 64 78 20 3d 20  .....diff_idx = 
2780: 6e 3b 0d 0a 09 09 09 09 09 64 69 66 66 20 3d 20  n;.......diff = 
2790: 66 61 62 73 28 61 72 72 61 79 5f 76 61 6c 75 65  fabs(array_value
27a0: 5f 64 62 20 2d 20 78 29 3b 0d 0a 09 09 09 09 7d  _db - x);......}
27b0: 0d 0a 09 09 09 7d 0d 0a 09 09 09 62 72 65 61 6b  .....}.....break
27c0: 3b 0d 0a 09 09 63 61 73 65 20 32 3a 0d 0a 09 09  ;....case 2:....
27d0: 09 66 6f 72 20 28 20 6e 20 3d 20 31 3b 20 73 68  .for ( n = 1; sh
27e0: 75 74 74 65 72 5f 61 72 72 61 79 5b 6e 5d 20 21  utter_array[n] !
27f0: 3d 20 4e 55 4c 4c 3b 20 2b 2b 6e 20 29 20 7b 0d  = NULL; ++n ) {.
2800: 0a 09 09 09 09 61 72 72 61 79 5f 76 61 6c 75 65  .....array_value
2810: 5f 64 62 20 3d 20 66 72 61 63 74 69 6f 6e 5f 74  _db = fraction_t
2820: 6f 5f 64 6f 75 62 6c 65 28 73 68 75 74 74 65 72  o_double(shutter
2830: 5f 61 72 72 61 79 5b 6e 5d 29 3b 0d 0a 09 09 09  _array[n]);.....
2840: 09 69 66 20 28 66 61 62 73 28 61 72 72 61 79 5f  .if (fabs(array_
2850: 76 61 6c 75 65 5f 64 62 20 2d 20 78 29 20 3c 20  value_db - x) < 
2860: 64 69 66 66 29 20 7b 0d 0a 09 09 09 09 09 64 69  diff) {.......di
2870: 66 66 5f 69 64 78 20 3d 20 6e 3b 0d 0a 09 09 09  ff_idx = n;.....
2880: 09 09 64 69 66 66 20 3d 20 66 61 62 73 28 61 72  ..diff = fabs(ar
2890: 72 61 79 5f 76 61 6c 75 65 5f 64 62 20 2d 20 78  ray_value_db - x
28a0: 29 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 7d 0d  );......}.....}.
28b0: 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61  ....break;....ca
28c0: 73 65 20 33 3a 0d 0a 09 09 09 66 6f 72 20 28 20  se 3:.....for ( 
28d0: 6e 20 3d 20 31 3b 20 61 70 65 72 74 75 72 65 5f  n = 1; aperture_
28e0: 61 72 72 61 79 5b 6e 5d 20 21 3d 20 4e 55 4c 4c  array[n] != NULL
28f0: 3b 20 2b 2b 6e 20 29 20 7b 0d 0a 09 09 09 09 73  ; ++n ) {......s
2900: 74 72 6e 63 70 79 28 61 72 72 61 79 5f 76 61 6c  trncpy(array_val
2910: 75 65 5f 73 74 72 2c 20 61 70 65 72 74 75 72 65  ue_str, aperture
2920: 5f 61 72 72 61 79 5b 6e 5d 2b 32 2c 20 34 29 3b  _array[n]+2, 4);
2930: 0d 0a 09 09 09 09 61 72 72 61 79 5f 76 61 6c 75  ......array_valu
2940: 65 5f 64 62 20 3d 20 73 74 72 74 6f 64 28 61 72  e_db = strtod(ar
2950: 72 61 79 5f 76 61 6c 75 65 5f 73 74 72 2c 20 4e  ray_value_str, N
2960: 55 4c 4c 29 3b 0d 0a 09 09 09 09 69 66 20 28 66  ULL);......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 20 0d 0a 09 09 09 09 09 64 69 66 66 5f 69 64  { .......diff_id
29a0: 78 20 3d 20 6e 3b 0d 0a 09 09 09 09 09 64 69 66  x = n;.......dif
29b0: 66 20 3d 20 66 61 62 73 28 61 72 72 61 79 5f 76  f = fabs(array_v
29c0: 61 6c 75 65 5f 64 62 20 2d 20 78 29 3b 0d 0a 09  alue_db - x);...
29d0: 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 09 62  ...}.....}.....b
29e0: 72 65 61 6b 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75  reak;...}...retu
29f0: 72 6e 20 64 69 66 66 5f 69 64 78 3b 0d 0a 7d 0d  rn diff_idx;..}.
2a00: 0a 0d 0a 64 6f 75 62 6c 65 20 66 72 61 63 74 69  ...double fracti
2a10: 6f 6e 5f 74 6f 5f 64 6f 75 62 6c 65 28 63 68 61  on_to_double(cha
2a20: 72 20 2a 66 72 61 63 74 69 6f 6e 29 20 7b 0d 0a  r *fraction) {..
2a30: 09 64 6f 75 62 6c 65 20 66 72 61 63 74 69 6f 6e  .double fraction
2a40: 5f 61 73 5f 64 62 3b 0d 0a 09 63 68 61 72 20 64  _as_db;...char d
2a50: 65 6e 6f 6d 69 6e 61 74 6f 72 5b 39 5d 3b 0d 0a  enominator[9];..
2a60: 09 63 68 61 72 20 2a 70 74 72 20 3d 20 73 74 72  .char *ptr = str
2a70: 73 74 72 28 66 72 61 63 74 69 6f 6e 2c 20 22 2f  str(fraction, "/
2a80: 22 29 3b 0d 0a 0d 0a 09 69 66 20 28 70 74 72 29  ");.....if (ptr)
2a90: 20 7b 0d 0a 09 09 2f 2a 74 68 65 6e 20 73 70 6c   {..../*then spl
2aa0: 69 74 2a 2f 0d 0a 09 09 73 74 72 6e 63 70 79 28  it*/....strncpy(
2ab0: 64 65 6e 6f 6d 69 6e 61 74 6f 72 2c 20 66 72 61  denominator, fra
2ac0: 63 74 69 6f 6e 2b 32 2c 20 35 29 3b 0d 0a 09 09  ction+2, 5);....
2ad0: 66 72 61 63 74 69 6f 6e 5f 61 73 5f 64 62 20 3d  fraction_as_db =
2ae0: 20 31 20 2f 20 73 74 72 74 6f 64 28 64 65 6e 6f   1 / strtod(deno
2af0: 6d 69 6e 61 74 6f 72 2c 20 4e 55 4c 4c 29 3b 0d  minator, NULL);.
2b00: 0a 09 7d 0d 0a 09 65 6c 73 65 20 7b 0d 0a 09 09  ..}...else {....
2b10: 66 72 61 63 74 69 6f 6e 5f 61 73 5f 64 62 20 3d  fraction_as_db =
2b20: 20 73 74 72 74 6f 64 28 66 72 61 63 74 69 6f 6e   strtod(fraction
2b30: 2c 20 4e 55 4c 4c 29 3b 0d 0a 09 7d 0d 0a 09 72  , NULL);...}...r
2b40: 65 74 75 72 6e 20 66 72 61 63 74 69 6f 6e 5f 61  eturn fraction_a
2b50: 73 5f 64 62 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 44  s_db;..}..../* D
2b60: 65 62 75 67 20 6c 69 6e 65 73 0d 0a 20 2a 20 73  ebug lines.. * s
2b70: 70 72 69 6e 74 66 28 74 65 6d 70 2c 20 22 25 66  printf(temp, "%f
2b80: 22 2c 20 78 29 3b 0d 0a 20 2a 20 6d 76 70 72 69  ", x);.. * mvpri
2b90: 6e 74 77 28 4c 49 4e 45 53 20 2d 20 34 2c 20 30  ntw(LINES - 4, 0
2ba0: 2c 20 74 65 6d 70 29 3b 0d 0a 20 2a 20 72 65 66  , temp);.. * ref
2bb0: 72 65 73 68 28 29 3b 2a 2f 0d 0a                 resh();*/..