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>
168 lines
3.7 KiB
Plaintext
168 lines
3.7 KiB
Plaintext
/*
|
|
** BRIEF -- Basic Reconfigurable Interactive Editing Facility
|
|
**
|
|
** Written by Dave Nanian and Michael Strickman.
|
|
*/
|
|
|
|
/*
|
|
** column.cb:
|
|
**
|
|
** This file contains a set of macros that let perform block operations
|
|
** columns of text. These macros are called by the standard replacement
|
|
** macros; this makes sure that the column functions aren't pulled in unless
|
|
** they're needed.
|
|
*/
|
|
|
|
#define REG_MARK 1
|
|
#define COL_MARK 2
|
|
#define LINE_MARK 3
|
|
#define NI_MARK 4
|
|
#define NOTHING 0
|
|
#define REPLACE 1
|
|
#define REMOVE 2
|
|
|
|
void gen_block (string function_name, string message);
|
|
void _complete_col (int append);
|
|
|
|
/*
|
|
** _col_copy, _do_col_copy:
|
|
**
|
|
** This macro copies a marked area to another buffer. It uses the
|
|
** generic block operation routine to loop through the marked lines.
|
|
** It then inserts these lines into a special buffer. Once all the
|
|
** lines have been copied, this special buffer is copied to the scrap.
|
|
*/
|
|
|
|
void _col_copy (~int append)
|
|
{
|
|
global int col_buf = create_buffer ("Column", NULL, 1);
|
|
|
|
gen_block ("_do_col_copy", "Copying columns to scrap");
|
|
_complete_col (append);
|
|
raise_anchor ();
|
|
message ("Columns copied to scrap.");
|
|
}
|
|
|
|
int _do_col_copy (string line)
|
|
{
|
|
int old_buf = set_buffer (col_buf);
|
|
|
|
if (!index (line, "\n"))
|
|
line += "\n";
|
|
|
|
insert (line);
|
|
set_buffer (old_buf);
|
|
returns (NOTHING);
|
|
}
|
|
|
|
/*
|
|
** _col_cut, _do_col_cut:
|
|
**
|
|
** This macro cuts a marked area to another buffer. It uses the
|
|
** generic block operation routine to loop through the marked lines.
|
|
** It then inserts these lines into a special buffer. Once all the
|
|
** lines have been cut, this special buffer is copied to the scrap.
|
|
*/
|
|
|
|
void _col_cut (~int append)
|
|
{
|
|
int start_col;
|
|
|
|
col_buf = create_buffer ("Column", NULL, 1);
|
|
inq_marked (NULL, start_col);
|
|
gen_block ("_do_col_cut", "Deleting columns to scrap");
|
|
_complete_col (append);
|
|
raise_anchor ();
|
|
move_abs (0, start_col);
|
|
message ("Columns deleted to scrap.");
|
|
}
|
|
|
|
int _do_col_cut (string line)
|
|
{
|
|
int old_buf = set_buffer (col_buf);
|
|
|
|
if (!index (line, "\n"))
|
|
line += "\n";
|
|
|
|
insert (line);
|
|
set_buffer (old_buf);
|
|
returns (REMOVE);
|
|
}
|
|
|
|
/*
|
|
** _complete_col:
|
|
**
|
|
** This routine puts the column scrap buffer onto the regular scrap
|
|
** and then deletes it. If the append parameter is specified, it is passed
|
|
** through to copy.
|
|
*/
|
|
|
|
void _complete_col (int append)
|
|
{
|
|
int old_buf = set_buffer (col_buf);
|
|
|
|
top_of_buffer ();
|
|
drop_anchor (COL_MARK);
|
|
end_of_buffer ();
|
|
prev_char ();
|
|
copy (append);
|
|
set_buffer (old_buf);
|
|
delete_buffer (col_buf);
|
|
}
|
|
|
|
/*
|
|
** _col_paste, _do_col_paste:
|
|
**
|
|
** This routine pastes the standard scrap as columnar information.
|
|
*/
|
|
|
|
void _col_paste ()
|
|
{
|
|
col_buf = set_buffer (inq_scrap ());
|
|
top_of_buffer ();
|
|
drop_anchor (LINE_MARK);
|
|
end_of_buffer ();
|
|
gen_block ("_do_col_paste", "Inserting columns");
|
|
raise_anchor ();
|
|
set_buffer (col_buf);
|
|
message ("Columns inserted.");
|
|
}
|
|
|
|
int _do_col_paste (string line)
|
|
{
|
|
int scrap_buf = set_buffer (col_buf),
|
|
curr_col;
|
|
|
|
line = substr (line, 1, strlen (line) - 1);
|
|
inq_position (NULL, curr_col);
|
|
insert (line);
|
|
move_rel (1, 0);
|
|
move_abs (0, curr_col);
|
|
set_buffer (scrap_buf);
|
|
returns (NOTHING);
|
|
}
|
|
|
|
/*
|
|
** _col_delete, _do_col_delete:
|
|
**
|
|
** This macro deletes a marked columnar area. It uses the generic
|
|
** block operation routine to loop through the marked lines. It then
|
|
** simply tells the routine to remove the information.
|
|
*/
|
|
|
|
void _col_delete ()
|
|
{
|
|
int start_col;
|
|
|
|
inq_marked (NULL, start_col);
|
|
gen_block ("_do_col_delete", "Deleting columns");
|
|
raise_anchor ();
|
|
move_abs (0, start_col);
|
|
message ("Columns deleted.");
|
|
}
|
|
|
|
_do_col_delete (...)
|
|
{
|
|
returns (REMOVE);
|
|
}
|