home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 5 Edit
/
05-Edit.zip
/
M-BRIEF.ZIP
/
STDMACRO.C
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-22
|
19KB
|
906 lines
/* STDMACRO.c - Standard macros for Msoft editor
**
** Copyright (c) 1988, Christopher Laforet
** All Rights Reserved
**
*/
#define LINT_ARGS
#include <stdio.h>
#include <stdlib.h>
#include "ext.h"
#define TRUE -1
#define FALSE 0
/* Globals */
unsigned char far locbuf[100];
unsigned char far string[61];
unsigned char far filename[51];
unsigned char far zero_length[2];
flagType search_direction = 1; /* no previous search pattern */
flagType case_sensitive = 1; /* case sensitivity */
flagType wrapping = 1; /* word wrapping is off by default */
flagType _tab = 1; /* every 4 spaces to tabs by default */
flagType _soft = 1; /* soft cr is on by default */
LINE top_row;
COL top_col;
LINE bottom_row;
COL bottom_col;
LINE row;
COL col;
COL new_col;
unsigned char key;
unsigned char far *cptr;
unsigned char far *cptr1;
unsigned short line;
unsigned char numbuf[5];
unsigned short factor;
unsigned char execute_buffer[200];
unsigned char name[21];
short character;
flagType rtn;
short count;
short temp;
PFILE cur_file;
PFILE output_file;
flagType pascal EXTERNAL toggle_case(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
if (case_sensitive)
{
case_sensitive = 0;
fExecute("arg \"nocase:\" assign");
DoMessage("Case insensitive searches");
}
else
{
case_sensitive = 1;
fExecute("arg \"case:\" assign");
DoMessage("Case sensitive searches");
}
}
flagType pascal EXTERNAL toggle_wrap(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
if (wrapping)
{
wrapping = 0;
fExecute("Arg \"wordwrap:\" Assign");
DoMessage("Word wrapping is now active");
}
else
{
wrapping = 1;
fExecute("Arg \"nowordwrap:\" Assign");
DoMessage("Word wrapping is now inactive");
}
}
flagType pascal EXTERNAL toggle_tab(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
if (_tab)
{
_tab = 0;
fExecute("Arg \"entab:0\" Assign");
DoMessage("Spaces are not encoded to Tabs");
}
else
{
_tab = 1;
fExecute("Arg \"entab:1\" Assign");
DoMessage("Spaces are encoded to Tabs");
}
}
flagType pascal EXTERNAL toggle_cr(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
if (_soft)
{
_soft = 0;
fExecute("arg \"nosoftcr:\" assign");
DoMessage("Auto indent is off");
}
else
{
_soft = 1;
fExecute("arg \"softcr:\" assign");
DoMessage("Auto indent is on");
}
}
flagType pascal EXTERNAL make_vertical_win(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
DoMessage("Do you want to create a Vertical window? ");
do
{
key = ReadChar();
key &= 0xdf;
}
while((key != 'Y') && (key != 'N'));
DoMessage("Done");
if (key == 'Y')
{
GetCursor(&col,&row); /* save current cursor position */
fExecute("Home"); /* let's get our reference point established */
GetCursor(&top_col,&top_row);
fExecute("Meta Down Meta Right");
GetCursor(&bottom_col,&bottom_row);
MoveCur(top_col + ((bottom_col - top_col) >> 1),row);
fExecute("Arg Arg Window"); /* create window */
MoveCur(col,row); /* leave as it was */
}
return(TRUE);
}
flagType pascal EXTERNAL make_horizontal_win(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
DoMessage("Do you want to create a Horizontal window? ");
do
{
key = ReadChar();
key &= 0xdf;
}
while((key != 'Y') && (key != 'N'));
DoMessage("Done");
if (key == 'Y')
{
GetCursor(&col,&row); /* save current cursor position */
fExecute("Home"); /* let's get our reference point established */
GetCursor(&top_col,&top_row);
fExecute("Meta Down Meta Right");
GetCursor(&bottom_col,&bottom_row);
MoveCur(col,(top_row + ((bottom_row - top_row) >> 1)));
fExecute("Arg Window"); /* create window */
MoveCur(col,row); /* leave as it was */
}
return(TRUE);
}
unsigned char far *cptr3;
unsigned char far *cptr4;
void pascal concat(str1,str2,result)
unsigned char far *str1;
unsigned char far *str2;
unsigned char far *result;
{
cptr3= result;
cptr4 = str1;
while (*cptr4)
{
*cptr3++ = *cptr4++;
}
cptr4 = str2;
while (*cptr4)
{
*cptr3++ = *cptr4++;
}
*cptr3 = 0;
}
flagType pascal EXTERNAL goto_line(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
factor = 1;
line = 0;
numbuf[0] = 0;
cptr = numbuf;
do
{
concat("Go to which line? ",numbuf,locbuf);
DoMessage(locbuf);
key = ReadChar();
if ((key >= '0') && (key <= '9') && (cptr < (numbuf + sizeof(numbuf) - 1)))
{
*cptr++ = key;
*cptr = 0;
}
else if ((key == 8) && (cptr != numbuf))
{
--cptr;
*cptr = 0;
}
}
while((key != 0x1b) && (key != 0xd));
if ((key == 0xd) && (*numbuf))
{
cptr = numbuf;
while (*(cptr + 1))
{
++cptr;
}
while (cptr >= numbuf)
{
line += (short)(*cptr - (char)'0') * factor;
factor *= 10;
--cptr;
}
if (line)
{
line -= 1L;
}
if (line < FileLength(FileNameToHandle(zero_length,zero_length)))
{
MoveCur(0,(LINE)line);
DoMessage("Done");
}
else
{
DoMessage("Invalid line specified");
}
}
else
{
DoMessage("Operation cancelled");
}
}
flagType pascal EXTERNAL psearch_expression(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
string[0] = 0;
cptr = string;
do
{
concat("Search (+) for? ",string,locbuf);
DoMessage(locbuf);
key = ReadChar();
if ((key >= ' ') && (key < 0x7f) && (cptr < (string + sizeof(string) - 1)))
{
*cptr++ = key;
*cptr = 0;
}
else if ((key == 8) && (cptr != string))
{
--cptr;
*cptr = 0;
}
}
while ((key != 0x1b) && (key != 0xd));
if ((key == 0xd) && (*string))
{
search_direction = FALSE;
concat("arg arg \"",string,locbuf);
concat(locbuf,"\" psearch",execute_buffer);
rtn = fExecute(execute_buffer);
if (rtn)
{
DoMessage("");
}
else
{
DoMessage("No match found");
}
}
else
{
DoMessage("Operation cancelled");
}
return(TRUE);
}
flagType pascal EXTERNAL msearch_expression(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
string[0] = 0;
cptr = string;
do
{
concat("Search (-) for? ",string,locbuf);
DoMessage(locbuf);
key = ReadChar();
if ((key >= ' ') && (key < 0x7f) && (cptr < (string + sizeof(string) - 1)))
{
*cptr++ = key;
*cptr = 0;
}
else if ((key == 8) && (cptr != string))
{
--cptr;
*cptr = 0;
}
}
while ((key != 0x1b) && (key != 0xd));
if ((key == 0xd) && (*string))
{
search_direction = TRUE;
concat("arg arg \"",string,locbuf);
concat(locbuf,"\" msearch",execute_buffer);
rtn = fExecute(execute_buffer);
if (rtn)
{
DoMessage("");
}
else
{
DoMessage("No match found");
}
}
else
{
DoMessage("Operation cancelled");
}
return(TRUE);
}
flagType pascal EXTERNAL search_again(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
if (search_direction == 1)
{
DoMessage("No previous search pattern");
return(FALSE);
}
if (search_direction) /* search backwards */
{
concat("Search (-) again for: ",string,locbuf);
DoMessage(locbuf);
concat("arg arg \"",string,locbuf);
concat(locbuf,"\" msearch",execute_buffer);
fExecute(execute_buffer);
if (rtn)
{
DoMessage("");
}
else
{
DoMessage("No match found");
}
}
else
{
concat("Search (+) again for: ",string,locbuf);
DoMessage(locbuf);
concat("arg arg \"",string,locbuf);
concat(locbuf,"\" psearch",execute_buffer);
rtn = fExecute(execute_buffer);
if (rtn)
{
DoMessage("");
}
else
{
DoMessage("No match found");
}
}
return(TRUE);
}
flagType pascal EXTERNAL open_file(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
filename[0] = 0;
cptr = filename;
do
{
concat("Edit what file? ",filename,locbuf);
DoMessage(locbuf);
key = ReadChar();
if ((key >= ' ') && (key < 0x7f) && (cptr < (filename + sizeof(filename) - 1)))
{
if (key == '\\')
{
*cptr++ = '\\'; /* double backslashes */
}
*cptr++ = key;
*cptr = 0;
}
else if ((key == 8) && (cptr != filename))
{
--cptr;
if (*cptr == '\\')
{
--cptr;
}
*cptr = 0;
}
}
while ((key != 0x1b) && (key != 0xd));
if ((key == 0xd) && (*filename))
{
concat("arg \"",filename,locbuf);
concat(locbuf,"\" setfile",execute_buffer);
fExecute(execute_buffer);
DoMessage("");
}
else
{
DoMessage("Operation cancelled");
}
return(TRUE);
}
flagType pascal EXTERNAL write_out_file(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
filename[0] = 0;
cptr = filename;
do
{
concat("Write file to? ",filename,locbuf);
DoMessage(locbuf);
key = ReadChar();
if ((key >= ' ') && (key < 0x7f) && (cptr < (filename + sizeof(filename) - 1)))
{
if (key == '\\')
{
*cptr++ = '\\'; /* double backslashes */
}
*cptr++ = key;
*cptr = 0;
}
else if ((key == 8) && (cptr != filename))
{
--cptr;
if (*cptr == '\\')
{
--cptr;
}
*cptr = 0;
}
}
while ((key != 0x1b) && (key != 0xd));
if ((key == 0xd) && (*filename))
{
concat("arg arg \"",filename,locbuf);
concat(locbuf,"\" setfile",execute_buffer);
fExecute(execute_buffer);
DoMessage("");
}
else
{
DoMessage("Operation cancelled");
}
return(TRUE);
}
flagType pascal EXTERNAL change_file(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
filename[0] = 0;
cptr = filename;
do
{
concat("Change to what file? ",filename,locbuf);
DoMessage(locbuf);
key = ReadChar();
if ((key >= ' ') && (key < 0x7f) && (cptr < (filename + sizeof(filename) - 1)))
{
if (key == '\\')
{
*cptr++ = '\\'; /* double backslashes */
}
*cptr++ = key;
*cptr = 0;
}
else if ((key == 8) && (cptr != filename))
{
--cptr;
if (*cptr == '\\')
{
--cptr;
}
*cptr = 0;
}
}
while ((key != 0x1b) && (key != 0xd));
if (key == 0xd)
{
if (filename[0])
{
concat("arg \"",filename,locbuf);
concat(locbuf,"\" setfile",execute_buffer);
fExecute(execute_buffer);
DoMessage("");
}
else
{
fExecute("setfile");
DoMessage("");
}
}
else
{
DoMessage("Operation cancelled");
}
return(TRUE);
}
flagType pascal EXTERNAL read_in_file(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
filename[0] = 0;
cptr = filename;
do
{
concat("Insert what file? ",filename,locbuf);
DoMessage(locbuf);
key = ReadChar();
if ((key >= ' ') && (key < 0x7f) && (cptr < (filename + sizeof(filename) - 1)))
{
if (key == '\\')
{
*cptr++ = '\\'; /* double backslashes */
}
*cptr++ = key;
*cptr = 0;
}
else if ((key == 8) && (cptr != filename))
{
--cptr;
if (*cptr == '\\')
{
--cptr;
}
*cptr = 0;
}
}
while ((key != 0x1b) && (key != 0xd));
if ((key == 0xd) && (*filename))
{
concat("arg arg \"",filename,locbuf);
concat(locbuf,"\" paste",execute_buffer);
fExecute(execute_buffer);
DoMessage("Done");
}
else
{
DoMessage("Operation cancelled");
}
return(TRUE);
}
void pascal EXTERNAL delete(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
switch (argptr->argType)
{
case STREAMARG:
DelStream(FileNameToHandle(zero_length,zero_length),argptr->arg.streamarg.xStart,argptr->arg.streamarg.yStart,argptr->arg.streamarg.xEnd,argptr->arg.streamarg.yEnd);
break;
case BOXARG:
DelBox(FileNameToHandle(zero_length,zero_length),argptr->arg.boxarg.xLeft,argptr->arg.boxarg.yTop,argptr->arg.boxarg.xRight,argptr->arg.boxarg.yBottom);
break;
case LINEARG:
DelLine(FileNameToHandle(zero_length,zero_length),argptr->arg.linearg.yStart,argptr->arg.linearg.yEnd);
break;
case NOARG:
fExecute("right emacscdel");
break;
}
}
flagType pascal EXTERNAL deltline(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
GetCursor(&col,&row);
DelLine(FileNameToHandle(zero_length,zero_length),row,row);
}
void pascal EXTERNAL hack(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
fExecute("endline");
GetCursor(&col,&row);
MoveCur(argptr->arg.noarg.x,argptr->arg.noarg.y);
DelStream(FileNameToHandle(zero_length,zero_length),argptr->arg.noarg.x,argptr->arg.noarg.y,col,row);
}
flagType pascal EXTERNAL mark_line(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
name[0] = 0;
cptr = name;
do
{
concat("What title do you want to mark this location as? ",name,locbuf);
DoMessage(locbuf);
key = ReadChar();
if ((key >= ' ') && (key < 0x7f) && (cptr < (name + sizeof(name) - 1)))
{
*cptr++ = key;
*cptr = 0;
}
else if ((key == 8) && (cptr != name))
{
--cptr;
*cptr = 0;
}
}
while((key != 0x1b) && (key != 0xd));
if ((key == 0xd) && (*name))
{
concat("arg arg \"",name,locbuf);
concat(locbuf,"\" mark",execute_buffer);
if (fExecute(execute_buffer))
{
DoMessage("Done");
}
}
else
{
DoMessage("Operation cancelled");
}
}
flagType pascal EXTERNAL goto_mark(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
name[0] = 0;
cptr = name;
do
{
concat("Go to which mark? ",name,locbuf);
DoMessage(locbuf);
key = ReadChar();
if ((key >= ' ') && (key < 0x7f) && (cptr < (name + sizeof(name) - 1)))
{
*cptr++ = key;
*cptr = 0;
}
else if ((key == 8) && (cptr != name))
{
--cptr;
*cptr = 0;
}
}
while((key != 0x1b) && (key != 0xd));
if ((key == 0xd) && (*name))
{
concat("arg \"",name,locbuf);
concat(locbuf,"\" mark",execute_buffer);
if (fExecute(execute_buffer))
{
DoMessage("Done");
}
}
else
{
DoMessage("Operation cancelled");
}
}
void pascal EXTERNAL setdel(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
fExecute("arg \"sdelete:del\" assign");
}
void pascal EXTERNAL resetdel(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
fExecute("arg \"delete:del\" assign");
}
void pascal EXTERNAL tab_forward(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
GetCursor(&col,&row);
fExecute("tab");
GetCursor(&new_col,&row);
for (count = col; count < new_col; count++)
{
Replace(' ',col,row,FileNameToHandle(zero_length,zero_length),TRUE);
}
}
flagType pascal EXTERNAL write_area(argtype,argptr,metaflag)
unsigned short argtype;
ARG far *argptr;
flagType metaflag;
{
if (argptr->argType == NOARG)
{
DoMessage("Saving file");
fExecute("arg arg setfile");
DoMessage("");
}
else
{
filename[0] = 0;
cptr = filename;
do
{
concat("Write area as? ",filename,locbuf);
DoMessage(locbuf);
key = ReadChar();
if ((key >= ' ') && (key < 0x7f) && (cptr < (filename + sizeof(filename) - 1)))
{
if (key == '\\')
{
*cptr++ = '\\'; /* double backslashes */
}
*cptr++ = key;
*cptr = 0;
}
else if ((key == 8) && (cptr != filename))
{
--cptr;
if (*cptr == '\\')
{
--cptr;
}
*cptr = 0;
}
}
while ((key != 0x1b) && (key != 0xd));
if ((key == 0xd) && (*filename))
{
DoMessage("Now writing marked area to file");
cur_file = FileNameToHandle(zero_length,zero_length);
AddFile(filename);
output_file = FileNameToHandle(filename,zero_length);
CopyLine(cur_file,output_file,argptr->arg.linearg.yStart,argptr->arg.linearg.yEnd,0L);
pFileToTop(output_file);
concat("arg arg \"",filename,locbuf);
concat(locbuf,"\" setfile",execute_buffer);
if (!fExecute(execute_buffer))
{
DoMessage("Error writing file");
pFileToTop(cur_file);
RemoveFile(output_file);
}
else
{
RemoveFile(output_file);
pFileToTop(cur_file);
DoMessage("");
}
}
else
{
DoMessage("Operation cancelled");
}
}
return(TRUE);
}
WhenLoaded()
{
DoMessage("Standard Macros (v 1.2) -- Copyright (c) 1988-89, Chris Laforet.");
zero_length[0] = (char)'\0';
SetKey("toggle_case","Alt+c");
SetKey("toggle_wrap","Alt+q");
SetKey("toggle_tab","Alt+t");
SetKey("toggle_cr","Alt+y");
SetKey("make_vertical_win","F1");
SetKey("make_horizontal_win","F2");
SetKey("goto_line","Alt+g");
SetKey("psearch_expression","F5");
SetKey("msearch_expression","Shift+F5");
SetKey("search_again","Shift+F6");
SetKey("open_file","Alt+e");
SetKey("read_in_file","Alt+r");
SetKey("delete","Del");
SetKey("deltline","Alt+d");
SetKey("hack","Alt+k");
SetKey("write_out_file","Alt+o");
SetKey("goto_mark","Alt+j");
SetKey("mark_line","Alt+s");
SetKey("tab_forward","Tab");
SetKey("change_file","Alt+n");
SetKey("write_area","Alt+w");
return(TRUE);
}
struct swiDesc swiTable[] =
{
{NULL,NULL,NULL}
};
struct cmdDesc cmdTable[] =
{
{"toggle_case",toggle_case,NULL,NOARG},
{"toggle_wrap",toggle_wrap,NULL,NOARG},
{"toggle_tab",toggle_tab,NULL,NOARG},
{"toggle_cr",toggle_cr,NULL,NOARG},
{"make_vertical_win",make_vertical_win,NULL,NOARG},
{"make_horizontal_win",make_horizontal_win,NULL,NOARG},
{"goto_line",goto_line,NULL,NOARG},
{"psearch_expression",psearch_expression,NULL,NOARG},
{"msearch_expression",msearch_expression,NULL,NOARG},
{"search_again",search_again,NULL,NOARG},
{"open_file",open_file,NULL,NOARG},
{"read_in_file",read_in_file,NULL,NOARG},
{"delete",delete,NULL,NOARG | STREAMARG | BOXARG | LINEARG},
{"deltline",deltline,NULL,NOARG},
{"hack",hack,NULL,NOARG},
{"write_out_file",write_out_file,NULL,NOARG},
{"goto_mark",goto_mark,NULL,NOARG},
{"mark_line",mark_line,NULL,NOARG},
{"setdel",setdel,NULL,NOARG},
{"resetdel",resetdel,NULL,NOARG},
{"tab_forward",tab_forward,NULL,NOARG},
{"write_area",write_area,NULL,NOARG | LINEARG},
{"change_file",change_file,NULL,NOARG},
{NULL,NULL,NULL,NULL}
};