sda4: commit the Glaze developer hard-drive dump
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>
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
/*
|
||||
** BRIEF -- Basic Reconfigurable Interactive Editing Facility
|
||||
**
|
||||
** Written by Dave Nanian and Michael Strickman.
|
||||
*/
|
||||
|
||||
/*
|
||||
** routines.cb:
|
||||
**
|
||||
** This file contains macros that allow a programmer to select a
|
||||
** C routine from a menu and then go to it. It makes a few assumptions
|
||||
** about programming style: routines must begin in column one, and
|
||||
** the line with the declaration must end with a close paren (")").
|
||||
*/
|
||||
|
||||
#include "dialog.h"
|
||||
|
||||
/*
|
||||
** routines:
|
||||
**
|
||||
** This macro implements the "go to a routine" feature of BRIEF. It
|
||||
** scans the file for routine declarations, and builds a menu that gets
|
||||
** passed to the BRIEF dialog manager. If a routine is selected from this
|
||||
** menu, on exit "_r_line" will have a non-zero value, and we go to that
|
||||
** line of the file.
|
||||
*/
|
||||
|
||||
int _r_line;
|
||||
|
||||
void routines ()
|
||||
{
|
||||
int menu_buf,
|
||||
old_buf_id,
|
||||
max_width,
|
||||
line,
|
||||
loc;
|
||||
|
||||
string menu_line,
|
||||
routine_name;
|
||||
|
||||
_r_line = 0;
|
||||
save_position ();
|
||||
top_of_buffer ();
|
||||
old_buf_id = inq_buffer ();
|
||||
menu_buf = create_buffer ("Routines", NULL, 1);
|
||||
message ("Scanning for routines...");
|
||||
|
||||
while (search_fwd ("<[~ \t#/\\*;\n\\{\\}(]"))
|
||||
{
|
||||
routine_name = trim (read ());
|
||||
loc = strlen (routine_name);
|
||||
|
||||
if (loc > 1 && substr (routine_name, loc, 1) == ")")
|
||||
{
|
||||
_r_line++;
|
||||
message ("Scanning for routines [#%d]...", _r_line);
|
||||
loc = search_string ("[~ \t (\\*]\\c[ \t]@(", routine_name);
|
||||
routine_name = substr (routine_name, 1, --loc) + "\n";
|
||||
routine_name = substr (routine_name, search_string ("[~ \t\\*][~ \t\\*]@>", routine_name));
|
||||
routine_name = substr (routine_name, 1, strlen (routine_name) - 1);
|
||||
|
||||
inq_position (line);
|
||||
|
||||
if (strlen (routine_name) > max_width)
|
||||
max_width = strlen (routine_name);
|
||||
|
||||
set_buffer (menu_buf);
|
||||
insert ("\n%s\t%d;", routine_name, line);
|
||||
set_buffer (old_buf_id);
|
||||
}
|
||||
next_char ();
|
||||
}
|
||||
_r_line = 0;
|
||||
restore_position ();
|
||||
set_buffer (menu_buf);
|
||||
inq_position (line);
|
||||
top_of_buffer ();
|
||||
|
||||
if (line > 1)
|
||||
{
|
||||
int num_lines,
|
||||
num_cols;
|
||||
|
||||
delete_line ();
|
||||
tabs (80);
|
||||
|
||||
inq_screen_size (num_lines, num_cols);
|
||||
|
||||
if ((line += 3) > (num_lines - 5))
|
||||
line = num_lines - 5;
|
||||
|
||||
if ((max_width += 2) < 15)
|
||||
max_width = 15;
|
||||
|
||||
if (max_width >= num_cols - 3)
|
||||
max_width = num_cols - 3;
|
||||
|
||||
max_width = (max_width + 1) / 2;
|
||||
num_cols = (num_cols + 1 ) / 2;
|
||||
|
||||
set_buffer (old_buf_id);
|
||||
_process_menu (num_cols - max_width, line, num_cols + max_width, 3, NULL, "", NULL, menu_buf, "_r_action", TRUE);
|
||||
|
||||
if (_r_line)
|
||||
goto_line (_r_line);
|
||||
}
|
||||
else
|
||||
{
|
||||
set_buffer (old_buf_id);
|
||||
delete_buffer (menu_buf);
|
||||
message ("No routines found.");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** _r_action:
|
||||
**
|
||||
** This routine is called by the dialog manager when a routine is
|
||||
** selected.
|
||||
*/
|
||||
|
||||
int _r_action (int event_type, ...)
|
||||
{
|
||||
string button_text;
|
||||
|
||||
get_parm (0, event_type);
|
||||
|
||||
|
||||
switch (event_type)
|
||||
{
|
||||
case DIALOG_PICK_MENU:
|
||||
case DIALOG_F10:
|
||||
{
|
||||
get_parm (2, button_text);
|
||||
_r_line = atoi (substr (button_text, rindex (button_text, "\t") + 1));
|
||||
_dialog_esc ();
|
||||
}
|
||||
}
|
||||
returns (TRUE);
|
||||
}
|
||||
Reference in New Issue
Block a user