Un-ignored: the dev drive is the ground truth the restoration and emulator work constantly reference (DPL3/LIBDPL + VRENDER i860 renderer source, BT/RP live+dev game trees, VGL_LABS pod boot, scene/audio content). Kept in-repo for the pod-owner community. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
119 lines
2.4 KiB
Objective-C
119 lines
2.4 KiB
Objective-C
;**
|
|
;** BRIEF -- Basic Reconfigurable Interactive Editing Facility
|
|
;**
|
|
;** Written by Dave Nanian and Michael Strickman.
|
|
;**
|
|
|
|
;** brace.m:
|
|
;**
|
|
;** This macro is an attempt at a "locate the unmatched brace" utility.
|
|
;** Although it attempts to be fairly smart about things, it has an IQ of
|
|
;** 4 or 5, so be careful before taking its word for something.
|
|
;**
|
|
;** It DOES NOT WORK if there are braces inside quotes, apostrophes, or
|
|
;** comments. The macro can, however, be modified to ignore everything
|
|
;** inside these structures (and check for the appropriate mismatches).
|
|
;**
|
|
;** Revision history:
|
|
;** -----------------
|
|
|
|
#define TRUE 1
|
|
#define BACK 1
|
|
#define DONE 2
|
|
|
|
(macro brace
|
|
(
|
|
(int tot_count
|
|
start_line
|
|
start_col
|
|
mismatch
|
|
char_we_got
|
|
backward
|
|
)
|
|
(string msg_pattern
|
|
msg_text)
|
|
|
|
(= msg_pattern "Checking braces, %d unmatched {s.")
|
|
(inq_position start_line start_col)
|
|
(top_of_buffer)
|
|
|
|
(while (< backward DONE)
|
|
(
|
|
(while (&& (char_search backward) (! mismatch))
|
|
(
|
|
(sprintf msg_text msg_pattern tot_count)
|
|
(message msg_text)
|
|
|
|
(if backward
|
|
(= char_we_got (index "}{" (read 1)))
|
|
;else
|
|
(= char_we_got (index "{}" (read 1)))
|
|
)
|
|
(if (== char_we_got 1)
|
|
(++ tot_count)
|
|
;else
|
|
(if (== char_we_got 2)
|
|
(if tot_count
|
|
(-- tot_count)
|
|
;else
|
|
(
|
|
(if backward
|
|
(message "Mismatched opening brace.")
|
|
;else
|
|
(message "Mismatched closing brace.")
|
|
)
|
|
(= mismatch TRUE)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (! mismatch)
|
|
(
|
|
(if backward
|
|
(prev_char)
|
|
;else
|
|
(next_char)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (! mismatch)
|
|
(if tot_count
|
|
(
|
|
(end_of_buffer)
|
|
(= tot_count 0)
|
|
(= backward BACK)
|
|
(= msg_pattern "Locating mismatch, %d unmatched }s.")
|
|
)
|
|
;else
|
|
(= backward DONE)
|
|
)
|
|
;else
|
|
(= backward DONE)
|
|
)
|
|
)
|
|
)
|
|
(if (! mismatch)
|
|
(
|
|
(message "All braces match.")
|
|
(move_abs start_line start_col)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(macro char_search
|
|
(
|
|
(int backward)
|
|
|
|
(get_parm 0 backward)
|
|
|
|
(if backward
|
|
(returns (search_back "[\\{\\}]"))
|
|
;else
|
|
(returns (search_fwd "[\\{\\}]"))
|
|
)
|
|
)
|
|
)
|