Skip to content

Commit 89f4923

Browse files
committed
Worked on msg reader.
1 parent 3135817 commit 89f4923

File tree

4 files changed

+118
-10
lines changed

4 files changed

+118
-10
lines changed

crates/icy_board_engine/src/icy_board/state/functions.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -181,11 +181,11 @@ impl IcyBoardState {
181181
self.run_ppe(&file, None).await?;
182182
}
183183
PPECallType::Menu => {
184-
self.display_menu(&call.file).await?;
184+
let _ = self.display_menu(&call.file).await?;
185185
}
186186
PPECallType::File => {
187187
let file = self.get_board().await.resolve_file(&call.file);
188-
self.display_file(&file).await?;
188+
let _ = self.display_file(&file).await?;
189189
}
190190
}
191191
return Ok(());

crates/icy_board_engine/src/icy_board/state/mod.rs

+3
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ pub struct Session {
241241
/// The current default answer on last input_string
242242
pub default_answer: Option<String>,
243243
pub last_answer: Option<String>,
244+
245+
pub memorized_msg: Option<(usize, u32)>,
244246
}
245247

246248
impl Session {
@@ -301,6 +303,7 @@ impl Session {
301303
search_pattern: None,
302304
default_answer: None,
303305
last_answer: None,
306+
memorized_msg: None,
304307
}
305308
}
306309

crates/icy_board_engine/src/icy_board/state/user_commands/mods/messagereader/mod.rs

+109-7
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,12 @@ impl IcyBoardState {
286286
opt.high_read_msg = opt.high_read_msg.max(number);
287287
message_base.write_last_read(opt)?;
288288
}
289+
let mut flag = ReadLoopType::InsideReadLoop;
290+
let mut first = number;
291+
let mut last = number;
292+
let mut since = false;
293+
let mut keep_going = false;
294+
289295
loop {
290296
match message_base.read_header(number) {
291297
Ok(header) => {
@@ -325,20 +331,116 @@ impl IcyBoardState {
325331
.await?;
326332

327333
if text.is_empty() {
328-
break;
329-
}
330-
self.session.push_tokens(&text);
334+
if !keep_going {
335+
break;
336+
}
337+
} else {
338+
self.session.push_tokens(&text);
339+
let token = self.session.tokens.pop_front().unwrap_or_default();
340+
match token.as_str() {
341+
"-" | "L" => {
342+
if token == "L" {
343+
flag = ReadLoopType::OutsideReadLoop;
344+
}
345+
first = if flag == ReadLoopType::InsideReadLoop { number - 1 } else { number };
346+
last = 1;
347+
}
348+
"+" => {
349+
if flag == ReadLoopType::InsideReadLoop {
350+
first = 1;
351+
last = i32::MAX as u32;
352+
} else {
353+
since = true;
354+
}
355+
356+
keep_going = true;
357+
}
358+
// "A" => {} // Abandon
359+
"Z" | "D" | "C" => {
360+
let zip_msg = token == "Z";
361+
let cap_ask = token != "D";
362+
// todo capture!
363+
}
364+
"*" | "S" => {
365+
// Read new messages
366+
since = true;
367+
keep_going = true;
368+
// todo
369+
}
370+
"E" => {
371+
self.edit_header(message_base, number).await?;
372+
}
373+
"F" => {
374+
// TODO
375+
}
376+
"G" => {
377+
self.goodbye().await?;
378+
}
379+
"M" => {
380+
// memorize msg
381+
self.session.memorized_msg = Some((self.session.current_message_area, number));
382+
self.display_text(IceText::MessageNumberMemorized, display_flags::LFBEFORE).await?;
383+
}
384+
"N" => {
385+
// STOP
386+
break;
387+
}
388+
"P" => { // Make cur msg private
389+
// TODO
390+
}
391+
"Q" => { // Quickscan
392+
// TODO
393+
}
394+
"T" => { // Threading
395+
// TODO
396+
}
331397

332-
match self.session.tokens.pop_front().unwrap_or_default() {
333-
text => {
334-
if let Ok(new_number) = text.parse::<u32>() {
335-
number = new_number;
398+
"U" => { // Unprotect
399+
// TODO
400+
}
401+
402+
"V" => { // View File
403+
// TODO
404+
}
405+
406+
"X" => { // export
407+
// TODO
408+
}
409+
410+
"Y" => { // YourMessages
411+
// TODO
412+
}
413+
"/" => {
414+
// Redisplay
336415
continue;
337416
}
417+
text => {
418+
if let Ok(new_number) = text.parse::<u32>() {
419+
number = new_number;
420+
continue;
421+
}
422+
}
423+
}
424+
}
425+
if keep_going {
426+
if last < number {
427+
number -= 1;
428+
} else if number > first {
429+
number += 1;
338430
}
339431
}
340432
}
341433

342434
Ok(())
343435
}
436+
437+
async fn edit_header(&self, message_base: &mut jamjam::jam::JamMessageBase, number: u32) -> Res<()> {
438+
Ok(())
439+
}
440+
}
441+
442+
#[derive(Clone, Copy, Debug, PartialEq)]
443+
enum ReadLoopType {
444+
InsideReadLoop,
445+
OutsideReadLoop,
344446
}

crates/icy_board_engine/src/semantic/mod.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -1564,7 +1564,10 @@ impl AstVisitor<VariableType> for SemanticVisitor {
15641564
if matches!(self.references[idx].0, ReferenceType::Function(_)) {
15651565
let f = self.function_containers.iter().find(|p| p.name == call.get_identifier()).unwrap();
15661566
if let FunctionDeclaration::Function(f) = &f.functions.clone() {
1567-
self.check_arg_count(f.get_parameters().len(), call.get_arguments().len(), call.get_identifier_token());
1567+
let param_count = f.get_parameters().len();
1568+
let arg_count = call.get_arguments().len();
1569+
let identifier_token = call.get_identifier_token();
1570+
self.check_arg_count(param_count, arg_count, identifier_token);
15681571
self.check_arg_types(f.get_parameters(), call.get_arguments());
15691572
}
15701573

0 commit comments

Comments
 (0)