Artifact 7d4000ba2d4efc1899d5242a19ee482a741aefe204a4a159fe6862d814e7f353:
- File
exposurses.c
— part of check-in
[c2741c67e7]
at
2013-09-18 11:01:38
on branch origin/master
— Make the add_menu and add_win subs work
I was still using the "variable pointers" technique, well trying to, and
it wasn't working for things like `set_menu_win` so pull this back out
into main.Seg faults on exit, but haven't fixed that bit yet. (user: base@atomicules.co.uk size: 11195)
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();*/..