From d6e399973e9bc6447a28b80cacffcbc6a768f1ed Mon Sep 17 00:00:00 2001
From: thajohns <thajohns@clarkson.edu>
Date: Thu, 9 Sep 2021 01:15:22 -0400
Subject: got pre-linking steps working, removed glob includes

---
 src/main.rs | 103 +++++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 60 insertions(+), 43 deletions(-)

(limited to 'src/main.rs')

diff --git a/src/main.rs b/src/main.rs
index 9c61733..38c2e78 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,26 +1,19 @@
-use std::{io, env, thread, iter, time, mem, ffi};
-use std::io::*;
-use std::fs::*;
+use std::collections::VecDeque;
+use std::fs::File;
+use std::io::Read;
 use std::net::*;
 use std::sync::*;
-use std::collections::VecDeque;
+use std::{env, iter, thread, ffi};
 
-extern crate synfone;
 extern crate portaudio;
-// #[macro_use]
-// extern crate glium;
-// use glium::{glutin, Surface};
-// use glium::index::PrimitiveType;
-// extern crate palette;
-// use palette::IntoColor;
 use portaudio as pa;
-use synfone::*;
-use synfone::synth::*;
+use synfone::client::*;
 use synfone::lang::*;
 use synfone::proto::*;
-use synfone::client::*;
+use synfone::synth::*;
+use synfone::*;
 
-fn main() {
+fn main() -> Result<(), std::io::Error> {
     let cmd = env::args_os().nth(1).expect("Please pass a command as the first argument; use `help` as a command for more information.");
     let cmds = cmd.into_string().expect("Couldn't parse command");
 
@@ -28,60 +21,82 @@ fn main() {
 
     match &*cmds {
         "help" => eprintln!("TODO! Commands are help, client."),
-        "client" => main_client(new_args),
+        "client" => main_client(new_args)?,
         _ => eprintln!("Unknown command; `help` for help."),
     }
+    Ok(())
 }
 
 
-const GFX: bool = false;
-
-fn main_client(args: Vec<ffi::OsString>) {
+fn main_client(args: Vec<ffi::OsString>) -> Result<(), std::io::Error> {
     let env = Environment::default();
 
     let mut genfile = File::open(args.iter().nth(1).expect("Need first argument to be a file with a generator vector")).expect("Failed to open file");
     let mut genstr = String::new();
-    genfile.read_to_string(&mut genstr);
+    genfile.read_to_string(&mut genstr)?;
 
-    let gens = Parser::new(Tokenizer::new(genstr.chars()), env.clone()).expect("Failed to get first token").parse_gen_vec().expect("Failed to compile generators");
+    let gens = Parser::new(Tokenizer::new(genstr.chars()), env.clone())
+        .expect("Failed to get first token")
+        .parse_gen_vec()
+        .expect("Failed to compile generators");
     let sock = UdpSocket::bind("0.0.0.0:13676").expect("Failed to bind socket");
 
     eprintln!("Parsed {} generator definitions", gens.len());
 
-    let mut client = Arc::new(Mutex::new(Client::new(sock.try_clone().expect("Failed to clone socket"), gens, env.clone()).expect("Failed to create client")));
-    let mut last_buffer = Arc::new(Mutex::new(<VecDeque<Sample>>::with_capacity(env.default_buffer_size * 9)));
+    let client = Arc::new(Mutex::new(
+        Client::new(
+            sock.try_clone().expect("Failed to clone socket"),
+            gens,
+            env.clone(),
+        )
+        .expect("Failed to create client"),
+    ));
+    let last_buffer = Arc::new(Mutex::new(<VecDeque<Sample>>::with_capacity(
+        env.default_buffer_size * 9,
+    )));
     let last_buffer_lim = env.default_buffer_size * 8;
-    last_buffer.lock().expect("Failed to init shared buffer").append(&mut iter::repeat(0.0f32).take(last_buffer_lim).collect());
+    last_buffer
+        .lock()
+        .expect("Failed to init shared buffer")
+        .append(&mut iter::repeat(0.0f32).take(last_buffer_lim).collect());
 
     let pa_inst = pa::PortAudio::new().expect("Failed to create PortAudio interface");
-    let settings = pa_inst.default_output_stream_settings(1, env.sample_rate as f64, env.default_buffer_size as u32).expect("Failed to instantiate stream settings");
+    let settings = pa_inst
+        .default_output_stream_settings(1, env.sample_rate as f64, env.default_buffer_size as u32)
+        .expect("Failed to instantiate stream settings");
     let mut stream;
     {
         let client = client.clone();
         let last_buffer = last_buffer.clone();
         let mut ring: VecDeque<Sample> = VecDeque::new();
         ring.reserve_exact(2 * env.default_buffer_size);
-        stream = pa_inst.open_non_blocking_stream(settings, move |pa::OutputStreamCallbackArgs { buffer, frames, .. }| {
-            while frames > ring.len() {
-                let mut cli = client.lock().unwrap();
-                cli.next_frames();
-                {
-                    let mut buf = last_buffer.lock().expect("Failed to acquire shared buffer in audio callback");
-                    buf.append(&mut cli.buffer().samples.iter().map(|&x| x).collect());
-                    let len = buf.len();
-                    if len > last_buffer_lim {
-                        buf.drain(..(len - last_buffer_lim));
+        stream = pa_inst
+            .open_non_blocking_stream(
+                settings,
+                move |pa::OutputStreamCallbackArgs { buffer, frames, .. }| {
+                    while frames > ring.len() {
+                        let mut cli = client.lock().unwrap();
+                        cli.next_frames();
+                        {
+                            let mut buf = last_buffer
+                                .lock()
+                                .expect("Failed to acquire shared buffer in audio callback");
+                            buf.append(&mut cli.buffer().samples.iter().map(|&x| x).collect());
+                            let len = buf.len();
+                            if len > last_buffer_lim {
+                                buf.drain(..(len - last_buffer_lim));
+                            }
+                        }
+                        ring.append(&mut cli.buffer().iter().map(|&x| x).collect());
                     }
-                }
-                ring.append(&mut cli.buffer().iter().map(|&x| x).collect());
-            }
-            let samps = ring.drain(..frames).collect::<Vec<f32>>();
-            buffer.copy_from_slice(&samps);
-            pa::Continue
-        }).expect("Failed to create stream");
+                    let samps = ring.drain(..frames).collect::<Vec<f32>>();
+                    buffer.copy_from_slice(&samps);
+                    pa::Continue
+                },
+            )
+            .expect("Failed to create stream");
     }
 
-
     eprintln!("Starting.");
 
     stream.start().expect("Failed to start stream");
@@ -115,4 +130,6 @@ fn main_client(args: Vec<ffi::OsString>) {
     net_thread.join().expect("Network thread panicked");
 
     eprintln!("Exiting.");
+
+    Ok(())
 }
-- 
cgit v1.2.3-70-g09d2