pkg://jex-1.3.7-1.src.rpm:114631/jex-1.3.7.tar.gz
info downloads
jex-1.3.7/ 40755 0 0 0 6674510012 10273 5 ustar root root jex-1.3.7/about.c 100644 0 0 10655 6672727026 11712 0 ustar root root #include <Xm/MessageB.h>
#include <Xm/Form.h>
#include <Xm/Label.h>
#include "jex.h"
#include "xpm.h"
#include "jexlogo.xpm"
#include "jexrlogo.xpm"
Pixmap logo=0,logo2;
extern Widget top;
void AboutOK(Widget w,Editor *e,void *cbs)
{
SetCurrentWidget(e->text);
}
void ShowAboutDialog(Editor *e)
{
Widget w,f,l,l2;
Pixel fg,bg;
XmString xstr;
char version[30];
SP("ShowAboutDialog");
WatchCursor(e,1);
if (!e->abd)
{
e->abd=XmCreateMessageDialog(e->shell,"About",NULL,0);
XtUnmanageChild(XmMessageBoxGetChild(e->abd,XmDIALOG_CANCEL_BUTTON));
XtUnmanageChild(XmMessageBoxGetChild(e->abd,XmDIALOG_HELP_BUTTON));
XtAddCallback(e->abd,XmNokCallback,(XtCallbackProc)AboutOK,(void*)e);
if (!logo)
{
XtVaGetValues(e->abd,XmNforeground,&fg,XmNbackground,&bg,NULL);
/* logo=XCreatePixmapFromBitmapData(XtDisplay(top),
RootWindowOfScreen(XtScreen(top)),
jexlogo_bits,jexlogo_width,jexlogo_height,
fg,bg,
DefaultDepthOfScreen(XtScreen(top)));
logo2=XCreatePixmapFromBitmapData(XtDisplay(top),
RootWindowOfScreen(XtScreen(top)),
jexrlogo_bits,jexrlogo_width,jexrlogo_height,
fg,bg,
DefaultDepthOfScreen(XtScreen(top)));*/
logo=CreatePixmapFromXPM(top,jexlogo_xpm);
logo2=CreatePixmapFromXPM(top,jexrlogo_xpm);
}
f=XtVaCreateManagedWidget("aboutform",xmFormWidgetClass,e->abd,
XmNfractionBase,8,
NULL);
l=XtVaCreateManagedWidget("aboutlogo",xmLabelWidgetClass,f,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,logo,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_NONE,
XmNtopAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_FORM,
NULL);
l2=XtVaCreateManagedWidget("aboutlogo2",xmLabelWidgetClass,f,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,logo2,
XmNleftAttachment,XmATTACH_NONE,
XmNrightAttachment,XmATTACH_FORM,
XmNtopAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_FORM,
NULL);
xstr=XmStringCreateLocalized("JEX");
w=XtVaCreateManagedWidget("about1",xmLabelWidgetClass,f,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,l,
XmNrightAttachment,XmATTACH_WIDGET,
XmNrightWidget,l2,
XmNtopAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_POSITION,
XmNbottomPosition,2,
XmNleftOffset,20,
XmNrightOffset,20,
XmNlabelString,xstr,
NULL);
XmStringFree(xstr);
xstr=XmStringCreateLocalized("Jorgen Editor for X");
w=XtVaCreateManagedWidget("about2",xmLabelWidgetClass,f,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,l,
XmNrightAttachment,XmATTACH_WIDGET,
XmNrightWidget,l2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,2,
XmNbottomAttachment,XmATTACH_POSITION,
XmNbottomPosition,3,
XmNleftOffset,20,
XmNrightOffset,20,
XmNlabelString,xstr,
NULL);
XmStringFree(xstr);
xstr=XmStringCreateLocalized("A programmer's editor");
w=XtVaCreateManagedWidget("about3",xmLabelWidgetClass,f,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,l,
XmNrightAttachment,XmATTACH_WIDGET,
XmNrightWidget,l2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,3,
XmNbottomAttachment,XmATTACH_POSITION,
XmNbottomPosition,4,
XmNleftOffset,20,
XmNrightOffset,20,
XmNlabelString,xstr,
NULL);
XmStringFree(xstr);
sprintf(version,"Version %d.%d.%d",MAJOR_VERSION,MINOR_VERSION,SUB_MINOR_VERSION);
xstr=XmStringCreateLocalized(version);
w=XtVaCreateManagedWidget("about4",xmLabelWidgetClass,f,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,l,
XmNrightAttachment,XmATTACH_WIDGET,
XmNrightWidget,l2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,5,
XmNbottomAttachment,XmATTACH_POSITION,
XmNbottomPosition,6,
XmNleftOffset,20,
XmNrightOffset,20,
XmNlabelString,xstr,
NULL);
XmStringFree(xstr);
xstr=XmStringCreateLocalized("(c) 1996-1998 by Jorgen Bosman");
w=XtVaCreateManagedWidget("about5",xmLabelWidgetClass,f,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,l,
XmNrightAttachment,XmATTACH_WIDGET,
XmNrightWidget,l2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,7,
XmNbottomAttachment,XmATTACH_FORM,
XmNleftOffset,20,
XmNrightOffset,20,
XmNlabelString,xstr,
NULL);
XmStringFree(xstr);
}
XtManageChild(e->abd);
WatchCursor(e,0);
EP;
}
jex-1.3.7/asksave.c 100644 0 0 2510 6672726717 12212 0 ustar root root #include <stdio.h>
#include <Xm/MessageB.h>
#include "jex.h"
extern Widget top;
void Function(void (*f)(),Editor *e)
{
SP("Function");
if (f)
f(e);
EP;
}
void NoSave(Widget w,Editor *e,void *cbs)
{
SP("NoSave");
if (e->f!=NULL)
Function((void(*)(void))e->f,e);
EP;
}
void CancelAskToSave(Widget w,Editor *e,void *cbs)
{
SP("CancelAskToSave");
XtUnmanageChild(e->ats);
SetCurrentWidget(e->text);
EP;
}
void AskToSaveOK(Widget w,Editor *e,void *cbs)
{
SP("AskToSaveOK");
Save(NULL,e,e->f);
SetCurrentWidget(e->text);
EP;
}
void AskToSave(Editor *e,void *f)
{
SP("AskToSave");
if (e->ats==NULL)
{
e->ats=XmCreateQuestionDialog(e->shell,"AskToSave",NULL,0);
e->f=f;
XtAddCallback(e->ats,XmNokCallback,(XtCallbackProc)AskToSaveOK,e);
XtAddCallback(e->ats,XmNcancelCallback,(XtCallbackProc)NoSave,e);
XtAddCallback(e->ats,XmNhelpCallback,(XtCallbackProc)CancelAskToSave,e);
}
else
{
XtRemoveAllCallbacks(e->ats,XmNokCallback);
XtRemoveAllCallbacks(e->ats,XmNcancelCallback);
XtRemoveAllCallbacks(e->ats,XmNhelpCallback);
e->f=f;
XtAddCallback(e->ats,XmNokCallback,(XtCallbackProc)AskToSaveOK,e);
XtAddCallback(e->ats,XmNcancelCallback,(XtCallbackProc)NoSave,e);
XtAddCallback(e->ats,XmNhelpCallback,(XtCallbackProc)CancelAskToSave,e);
}
XtManageChild(e->ats);
EP;
}
jex-1.3.7/bookmark.c 100644 0 0 7665 6672726717 12402 0 ustar root root #include "jex.h"
#include <Xm/List.h>
#include <Xm/MessageB.h>
#include <Xm/PushBG.h>
Widget bd=NULL,bdl;
extern Widget top;
extern Pixmap pixmap;
void OpenBookmark(Widget w,Editor *e,void *cbs)
{
XmString xstr;
char *str;
SP("OpenBookmark");
XtVaGetValues(w,XmNlabelString,&xstr,NULL);
XmStringGetLtoR(xstr,XmSTRING_DEFAULT_CHARSET,&str);
XmStringFree(xstr);
if (e->new_window)
{
CreateNewEditor();
if (loadfile(editor[editors-1],str,0,1))
LoadError(editor[editors-1]);
}
else
{
db_strcpy(e->choice,str);
if (e->saved)
LoadOldFile(e);
else
AskToSave(e,(void*)LoadOldFile);
}
EP;
}
void UpdateEditorBookmarks(Editor *e)
{
int count,x;
XmStringTable items;
SP("UpdateEditorBookmarks");
XtVaGetValues(bdl,XmNitemCount,&count,XmNitems,&items,NULL);
for (x=0;x<count && x<MAXBOOKMARKBUTTONS;x++)
{
e->bookm[x]=XtVaCreateManagedWidget("bookmarkbutton",
xmPushButtonGadgetClass,e->bookmarkmenu,XmNlabelString,items[x],NULL);
XtAddCallback(e->bookm[x],XmNactivateCallback,(XtCallbackProc)OpenBookmark,(void*)e);
}
EP;
}
void DeleteEditorBookmarks(Editor *e)
{
int count,x;
SP("DeleteEditorBookmarks");
XtVaGetValues(bdl,XmNitemCount,&count,NULL);
for (x=0;x<count && x<MAXBOOKMARKBUTTONS;x++)
XtDestroyWidget(e->bookm[x]);
EP;
}
void CloseBookmark(Widget w,void *e,void *cbs)
{
SP("CloseBookmark");
XtPopdown(bd);
EP;
}
void GotoBookmark(Widget w,void *date,XmListCallbackStruct *cbs)
{
XmStringTable selected_items;
int num_selected;
char *str;
int x;
SP("GotoBookmark");
XtVaGetValues(bdl,XmNselectedItemCount,&num_selected,XmNselectedItems,&selected_items,NULL);
if (num_selected==0)
{
EP;
return;
}
XmStringGetLtoR(selected_items[0],XmSTRING_DEFAULT_CHARSET,&str);
for (x=0;x<editors;x++)
{
if (db_strcmp(editor[x]->filename,str)==0)
{
XMapRaised(XtDisplay(editor[x]->shell),XtWindow(editor[x]->shell));
XtFree(str);
EP;
return;
}
}
CreateNewEditor();
if (loadfile(editor[editors-1],str,0,1))
LoadError(editor[editors-1]);
XtFree(str);
EP;
}
void DeleteBookmark(Widget w,void *data,void *cbs)
{
int *pos,count,x;
SP("DeleteBookmark");
XmListGetSelectedPos(bdl,&pos,&count);
if (count)
{
for (x=0;x<editors;x++)
DeleteEditorBookmarks(editor[x]);
XmListDeletePos(bdl,pos[0]);
XtFree((char*)pos);
for (x=0;x<editors;x++)
UpdateEditorBookmarks(editor[x]);
}
EP;
}
void CreateBookmarkDialog(void)
{
Widget w;
Arg arg[2];
SP("CreateBookmarkDialog");
if (bd==NULL)
{
bd=XtVaAppCreateShell("BookmarkDialog","BookmarkDialog",topLevelShellWidgetClass,XtDisplay(top),
XmNallowShellResize,True,
XmNiconPixmap,pixmap,
NULL);
w=XmCreateMessageBox(bd,"BookmarkDialog",NULL,0);
XtSetArg(arg[0],XmNlistSizePolicy,XmCONSTANT);
bdl=XmCreateScrolledList(w,"BookmarkList",arg,1);
XtVaSetValues(XtParent(bdl),
XmNscrollBarDisplayPolicy,XmSTATIC,
NULL);
XtVaSetValues(bdl,
XmNscrollBarDisplayPolicy,XmSTATIC,
XmNlistSizePolicy,XmCONSTANT,
NULL);
XtAddCallback(bdl,XmNdefaultActionCallback,(XtCallbackProc)GotoBookmark,NULL);
XtAddCallback(w,XmNokCallback,(XtCallbackProc)CloseBookmark,NULL);
XtAddCallback(w,XmNcancelCallback,(XtCallbackProc)GotoBookmark,NULL);
XtAddCallback(w,XmNhelpCallback,(XtCallbackProc)DeleteBookmark,NULL);
XtManageChild(bdl);
XtManageChild(w);
}
EP;
}
void AddBookmark(char *str)
{
XmString xstr;
int x;
SP("AddBookmark");
if (bdl && str[0])
{
for (x=0;x<editors;x++)
DeleteEditorBookmarks(editor[x]);
xstr=XmStringCreateLocalized(str);
if (!XmListItemExists(bdl,xstr))
XmListAddItemUnselected(bdl,xstr,0);
XmStringFree(xstr);
for (x=0;x<editors;x++)
UpdateEditorBookmarks(editor[x]);
}
EP;
}
void ShowBookmarkDialog(void)
{
SP("ShowBookmarkDialog");
XtPopup(bd,XtGrabNone);
XMapRaised(XtDisplay(bd),XtWindow(bd));
EP;
}
jex-1.3.7/combo.c 100644 0 0 14217 6672726722 11677 0 ustar root root #include <Xm/Xm.h>
#include <Xm/Form.h>
#include <Xm/TextF.h>
#include <Xm/DrawnB.h>
#include <Xm/RowColumn.h>
#include <Xm/PushBG.h>
#include "jbdbg.h"
#include "jex.h"
#include "list.h"
List combo_list=NULL;
extern Pixmap lov;
extern OwnRes ownres;
void ComboBoxSelect(Widget w,Widget text,void *cbs)
{
ComboBox c;
int x;
SP("ComboBoxSelect");
if (!FindElement(combo_list,&c,sizeof(Widget),&text))
{
EP;
return;
}
for (x=0;x<c.itemcount;x++)
{
if (c.items[x].button==w)
{
XtVaSetValues(text,XmNvalue,c.items[x].item,NULL);
if (c.function)
c.function(w,c.client_data,cbs);
break;
}
}
EP;
}
void UpdateComboBox(Widget w,char *str)
{
int x,end,exists=0;
XmString xstr;
ComboBox c;
SP("UpdateComboBox");
if (!FindElement(combo_list,&c,sizeof(Widget),&w))
{
EP;
return;
}
end=c.itemcount;
if (str && str[0])
{
for (x=0;x<c.itemcount;x++)
{
if (db_strcmp(c.items[x].item,str)==0)
{
end=x+1;
exists=1;
break;
}
}
if (c.itemcount<c.maxitems && !exists)
{
if (c.form)
{
c.items[c.itemcount].button=XtVaCreateManagedWidget("combobutton",
xmPushButtonGadgetClass,c.popup,NULL);
XtAddCallback(c.items[c.itemcount].button,XmNactivateCallback,(XtCallbackProc)ComboBoxSelect,c.text);
}
c.items[c.itemcount].item=NULL;
c.itemcount++;
end=c.itemcount;
}
for (x=end-2;x>=0;x--)
{
c.items[x+1].item=(char*)db_realloc(c.items[x+1].item,db_strlen(c.items[x].item)+1);
db_strcpy(c.items[x+1].item,c.items[x].item);
}
c.items[0].item=(char*)db_realloc(c.items[0].item,db_strlen(str)+1);
db_strcpy(c.items[0].item,str);
}
for (x=0;c.form && x<end;x++)
{
xstr=XmStringCreateLocalized(c.items[x].item);
XtVaSetValues(c.items[x].button,XmNlabelString,xstr,NULL);
XmStringFree(xstr);
}
ReplaceCurrentElement(combo_list,&c);
EP;
}
void ShowComboMenu(Widget b,Widget text,XmPushButtonCallbackStruct *cbs)
{
Position y,y2,h,x,x2,w;
Widget tmp;
ComboBox c;
XButtonPressedEvent xbe;
SP("ShowComboMenu");
if (!FindElement(combo_list,&c,sizeof(Widget),&text))
{
EP;
return;
}
xbe=*(XButtonPressedEvent*)&cbs->event;
tmp=XtParent(c.text);
y2=0;
x2=0;
while (!XtIsShell(tmp))
{
XtVaGetValues(tmp,XmNx,&x,XmNy,&y,NULL);
x2+=x;
y2+=y;
tmp=XtParent(tmp);
}
XtVaGetValues(c.text,XmNx,&x,XmNy,&y,XmNwidth,&w,XmNheight,&h,NULL);
xbe.y_root=y2+y+h;
xbe.x_root=x2+x;
XtVaGetValues(c.button,XmNwidth,&x,NULL);
w+=x;
if (c.itemcount)
XtVaSetValues(c.items[0].button,XmNwidth,w,NULL);
XmMenuPosition(c.popup,&xbe);
XtManageChild(c.popup);
EP;
}
Widget CreateComboBox(Widget parent,String name,ArgList arglist,Cardinal argcount,int maxitems)
{
ComboBox c;
char str[100];
SP("CreateComboBox");
if (!combo_list)
combo_list=CreateList(sizeof(ComboBox));
c.maxitems=maxitems;
c.itemcount=0;
c.items=(ComboButton*)db_malloc(sizeof(ComboButton)*maxitems);
c.function=NULL;
if (parent)
{
db_sprintf(str,"%s_form",name);
c.form=XmCreateForm(parent,str,arglist,argcount);
XtManageChild(c.form);
db_sprintf(str,"%s_button",name);
c.button=XtVaCreateManagedWidget(str,xmDrawnButtonWidgetClass,c.form,
XmNrightAttachment,XmATTACH_FORM,
XmNtopAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,lov,
XmNhighlightThickness,0,
XmNtopOffset,2,
XmNbottomOffset,2,
NULL);
c.text=XtVaCreateManagedWidget(name,xmTextFieldWidgetClass,c.form,
XmNleftAttachment,XmATTACH_FORM,
XmNtopAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_WIDGET,
XmNrightWidget,c.button,
NULL);
db_sprintf(str,"%s_popup",name);
c.popup=XmVaCreateSimplePopupMenu(c.form,str,NULL,
NULL);
XtAddCallback(c.button,XmNarmCallback,(XtCallbackProc)ShowComboMenu,c.text);
}
else
{
c.text=(Widget)db_strdup(name);
c.form=NULL;
c.button=NULL;
c.popup=NULL;
}
AddElement(combo_list,&c);
EP;
return c.text;
}
void DestroyAllComboBoxes(void)
{
ComboBox c;
int x;
if (combo_list)
{
if (GetFirstElement(combo_list,&c))
{
do
{
for (x=0;x<c.itemcount;x++)
db_free(c.items[x].item);
db_free(c.items);
if (!c.form)
db_free(c.text);
} while (GetNextElement(combo_list,&c));
}
DisposeList(combo_list);
}
}
int GetComboBox(Widget w,ComboBox *c)
{
SP("GetComboBox");
if (!FindElement(combo_list,c,sizeof(Widget),&w))
{
EP;
return 0;
}
EP;
return 1;
}
void InitializeComboBox(Widget w,Widget ref)
{
ComboBox c;
int x;
char *home,file[255],ini[255],*param,str[255],label[255];
FILE *f;
SP("InitializeComboBox");
if (editors)
{
if (!GetComboBox(ref,&c))
{
EP;
return;
}
for (x=0;x<c.itemcount;x++)
UpdateComboBox(w,c.items[x].item);
}
else
{
if (!GetComboBox(w,&c))
{
EP;
return;
}
if ((int)ownres.histhome)
{
home=getenv("HOME");
if (home)
db_sprintf(file,"%s/.jexhistory",home);
else
db_strcpy(file,".jexhistory");
}
else
db_strcpy(file,".jexhistory");
if ((f=fopen(file,"r"))==NULL)
{
EP;
return;
}
sprintf(label,"%s:",(c.form!=NULL)?XtName(w):(char*)w);
while (fgets(str,255,f))
{
str[db_strlen(str)-1]='\0';
sscanf(str,"%s",ini);
param=&str[db_strlen(ini)+1];
if (!strcmp(ini,label))
UpdateComboBox(w,param);
}
fclose(f);
}
EP;
}
void CopyComboBoxToFile(Widget w,FILE *f)
{
ComboBox c;
int x;
SP("CopyComboBoxToFile");
if (GetComboBox(w,&c))
{
for (x=0;x<c.itemcount;x++)
fprintf(f,"%s: %s\n",(c.form!=NULL)?XtName(w):(char*)w,c.items[x].item);
}
EP;
}
void ComboBoxAddCallback(Widget w,XtCallbackProc f,void *d)
{
ComboBox c;
if (!GetComboBox(w,&c))
return;
c.function=f;
c.client_data=d;
ReplaceCurrentElement(combo_list,&c);
}
jex-1.3.7/edit.c 100644 0 0 20032 6672726717 11521 0 ustar root root #include <Xm/MessageB.h>
#include <Xm/Text.h>
#include <ctype.h>
#include "jex.h"
extern Widget top;
void ClearSelection(Widget w,Editor *e,void *cbs)
{
XmTextPosition f,l,x;
char *str;
SP("ClearSelection");
if (e->read_only)
{
EP;
return;
}
WatchCursor(e,1);
XmTextGetSelectionPosition(e->text,&f,&l);
if (f==l)
{
WatchCursor(e,0);
EP;
return;
}
str=XmTextGetSelection(e->text);
for (x=0;x<l-f;x++)
{
if (str[x]!='\n')
str[x]=' ';
}
XmTextReplace(e->text,f,l,str);
XtFree(str);
SetCurrentWidget(e->text);
WatchCursor(e,0);
EP;
}
void CapsSelection(Widget w,Editor *e,void *cbs)
{
XmTextPosition f,l,x;
char *str;
SP("CapsSelection");
if (e->read_only)
{
EP;
return;
}
WatchCursor(e,1);
XmTextGetSelectionPosition(e->text,&f,&l);
if (f==l)
{
WatchCursor(e,0);
EP;
return;
}
str=XmTextGetSelection(e->text);
for (x=0;x<l-f;x++)
{
if (str[x]!='\n')
str[x]=toupper(str[x]);
}
XmTextReplace(e->text,f,l,str);
XmTextSetSelection(e->text,f,l,0);
XtFree(str);
SetCurrentWidget(e->text);
WatchCursor(e,0);
EP;
}
void LowsSelection(Widget w,Editor *e,void *cbs)
{
XmTextPosition f,l,x;
char *str;
SP("LowsSelection");
if (e->read_only)
{
EP;
return;
}
WatchCursor(e,1);
XmTextGetSelectionPosition(e->text,&f,&l);
if (f==l)
{
WatchCursor(e,0);
EP;
return;
}
str=XmTextGetSelection(e->text);
for (x=0;x<l-f;x++)
{
if (str[x]!='\n')
str[x]=tolower(str[x]);
}
XmTextReplace(e->text,f,l,str);
XmTextSetSelection(e->text,f,l,0);
XtFree(str);
SetCurrentWidget(e->text);
WatchCursor(e,0);
EP;
}
int FindTextString(Editor *e,char *str,int start_over,int set_pos)
{
static XmTextPosition pos=1,prev_pos=0,len=0;
XmTextPosition f,l;
SP("FindTextString");
XmTextGetSelectionPosition(e->text,&f,&l);
if (f!=l && f && pos!=0)
XmTextSetInsertionPosition(e->text,f+1);
if (XmTextFindString(e->text,XmTextGetInsertionPosition(e->text),str,XmTEXT_FORWARD,&pos))
{
prev_pos=pos;
len=db_strlen(str);
if (set_pos)
XmTextShowPosition(e->text,pos);
XmTextSetSelection(e->text,pos,pos+len,0);
if (set_pos)
XmTextSetInsertionPosition(e->text,pos+len);
EP;
return 1;
}
else if (pos!=0 && start_over)
{
if (XmTextFindString(e->text,0,str,XmTEXT_FORWARD,&pos))
{
pos=0;
if (set_pos)
XmTextSetInsertionPosition(e->text,0);
EP;
return FindTextString(e,str,1,set_pos);
}
else
{
EP;
return 0;
}
}
EP;
return 0;
}
int FindReverseTextString(Editor *e,char *str,int start_over)
{
static XmTextPosition pos=1,prev_pos=0,len=0;
XmTextPosition f,l;
SP("FindReverseTextString");
XmTextGetSelectionPosition(e->text,&f,&l);
if (f!=l && f && pos!=XmTextGetLastPosition(e->text))
XmTextSetInsertionPosition(e->text,f-1);
if (XmTextFindString(e->text,XmTextGetInsertionPosition(e->text),str,XmTEXT_BACKWARD,&pos))
{
prev_pos=pos;
len=db_strlen(str);
XmTextShowPosition(e->text,pos);
XmTextSetSelection(e->text,pos,pos+len,0);
if (pos)
XmTextSetInsertionPosition(e->text,pos+len);
else
XmTextSetInsertionPosition(e->text,XmTextGetLastPosition(e->text));
EP;
return 1;
}
else if (pos!=XmTextGetLastPosition(e->text) && start_over)
{
if (XmTextFindString(e->text,XmTextGetLastPosition(e->text),str,XmTEXT_BACKWARD,&pos))
{
pos=XmTextGetLastPosition(e->text);
XmTextSetInsertionPosition(e->text,pos);
EP;
return FindReverseTextString(e,str,1);
}
else
{
EP;
return 0;
}
}
EP;
return 0;
}
void ReplaceText(Editor *e,char *str)
{
XmTextPosition f,l;
SP("ReplaceText");
if (e->read_only)
{
EP;
return;
}
XmTextGetSelectionPosition(e->text,&f,&l);
XmTextReplace(e->text,f,l,str);
EP;
}
void CutText(Widget w,Editor *e,void *cbs)
{
SP("CutText");
XmTextCut(e->text,0);
EP;
}
void CopyText(Widget w,Editor *e,void *cbs)
{
SP("CopyText");
XmTextCopy(e->text,0);
EP;
}
void PasteText(Widget w,Editor *e,void *cbs)
{
SP("PasteText");
if (e->read_only)
{
EP;
return;
}
XmTextPaste(e->text);
EP;
}
void DeleteLine(Widget w,XAnyEvent *event,String *args,int *num_args)
{
char *str;
XmTextPosition left,right;
int len,selection=1;
SP("DeleteLine");
XtVaGetValues(w,XmNvalue,&str,NULL);
len=db_strlen(str);
if (!XmTextGetSelectionPosition(w,&left,&right) || left==right)
{
left=right=XmTextGetInsertionPosition(w);
selection=0;
}
while (left>0 && str[left-1]!='\0' && str[left-1]!='\n')
left--;
if ((right && str[right-1]!='\n') || right!=left)
right--;
while (right>=0 && right<len && str[right]!='\0' && str[right]!='\n')
right++;
if (right<len-1)
right++;
else if (left)
left--;
if (left>=right)
{
XtFree(str);
EP;
return;
}
XtFree(str);
XmTextSetSelection(w,left,right,0);
XmTextRemove(w);
EP;
}
void NotFound(Editor *e,char *findstr)
{
char str[200];
XmString xstr;
SP("NotFound");
if (db_strlen(findstr)>150)
strcpy(str,"Search string not found!");
else
sprintf(str,"String '%s' not found!",findstr);
xstr=XmStringCreateLocalized(str);
if (e->fd==NULL)
{
e->fd=XmCreateWarningDialog(e->shell,"NotFound",NULL,0);
XtUnmanageChild(XmMessageBoxGetChild(e->fd,XmDIALOG_CANCEL_BUTTON));
XtUnmanageChild(XmMessageBoxGetChild(e->fd,XmDIALOG_HELP_BUTTON));
}
XtVaSetValues(e->fd,XmNmessageString,xstr,NULL);
XmStringFree(xstr);
XtManageChild(e->fd);
EP;
}
void FindDown(Widget w,Editor *e,void *cbs)
{
char *str,*str2;
SP("FindDown");
WatchCursor(e,1);
XtVaGetValues(e->findf,XmNvalue,&str,NULL);
if (str[0])
{
UpdateComboBox(e->findf,str);
if (FindTextString(e,str,0,1)==0)
NotFound(e,str);
}
else
{
str2=XmTextGetSelection(e->text);
if (str2)
{
if (FindTextString(e,str2,0,1)==0)
NotFound(e,str2);
XtFree(str2);
}
}
XtFree(str);
WatchCursor(e,0);
EP;
}
void FindUp(Widget w,Editor *e,void *cbs)
{
char *str,*str2;
int x;
SP("FindUp");
WatchCursor(e,1);
XtVaGetValues(e->findf,XmNvalue,&str,NULL);
if (str[0])
{
for (x=0;x<editors;x++)
UpdateComboBox(editor[0]->findf,str);
/* UpdateFindList(str);*/
if (FindReverseTextString(e,str,0)==0)
NotFound(e,str);
}
else
{
str2=XmTextGetSelection(e->text);
if (str2)
{
if (FindReverseTextString(e,str2,0)==0)
NotFound(e,str2);
XtFree(str2);
}
}
XtFree(str);
WatchCursor(e,0);
EP;
}
void Replace(Widget w,Editor *e,void *cbs)
{
char *findstr,*replstr;
XmTextPosition f,l;
int x;
SP("Replace");
if (e->read_only)
{
EP;
return;
}
WatchCursor(e,1);
XtVaGetValues(e->findf,XmNvalue,&findstr,NULL);
XtVaGetValues(e->replf,XmNvalue,&replstr,NULL);
XmTextGetSelectionPosition(e->text,&f,&l);
if (w)
{
/* UpdateReplList(replstr);
UpdateFindList(findstr);*/
for (x=0;x<editors;x++)
{
UpdateComboBox(editor[0]->findf,findstr);
UpdateComboBox(editor[0]->replf,replstr);
}
}
if (f!=l)
ReplaceText(e,replstr);
if (findstr[0])
FindTextString(e,findstr,0,((int)cbs==-1)?0:1);
XtFree(findstr);
XtFree(replstr);
WatchCursor(e,0);
EP;
}
void ReplaceAll(Widget w,Editor *e,void *cbs)
{
char *findstr,*replstr;
XmTextPosition f,l;
int x;
SP("ReplaceAll");
if (e->read_only)
{
EP;
return;
}
WatchCursor(e,1);
XtVaGetValues(e->findf,XmNvalue,&findstr,NULL);
XtVaGetValues(e->replf,XmNvalue,&replstr,NULL);
XmTextGetSelectionPosition(e->text,&f,&l);
for (x=0;x<editors;x++)
{
UpdateComboBox(editor[0]->findf,findstr);
UpdateComboBox(editor[0]->replf,replstr);
}
/* UpdateReplList(replstr);
UpdateFindList(findstr);*/
if (db_strcmp(findstr,replstr)!=0)
{
if (f==l)
{
FindTextString(e,findstr,0,0);
XmTextGetSelectionPosition(e->text,&f,&l);
}
while (f!=l)
{
Replace(NULL,e,(void*)-1);
XmTextGetSelectionPosition(e->text,&f,&l);
}
}
XtFree(findstr);
XtFree(replstr);
WatchCursor(e,0);
EP;
}
jex-1.3.7/editors.c 100644 0 0 4445 6672726717 12237 0 ustar root root #include "jex.h"
#include <Xm/List.h>
#include <Xm/MessageB.h>
Widget edd=NULL,edl;
extern Widget top;
extern Pixmap pixmap;
void CloseEditors(Widget w,void *e,void *cbs)
{
SP("CloseEditors");
/* XtUnmanageChild(edd);*/
XtPopdown(edd);
EP;
}
void GotoEditor(Widget w,void *data,XmListCallbackStruct *cbs)
{
int pos_count;
int *positions;
SP("GotoEditor");
if (XmListGetSelectedPos(edl,&positions,&pos_count))
{
if (positions[0]<=editors)
XMapRaised(XtDisplay(editor[positions[0]-1]->shell),XtWindow(editor[positions[0]-1]->shell));
XtFree((char*)positions);
}
EP;
}
void CreateEditorDialog(void)
{
Widget w;
Arg arg[2];
SP("CreateEditorDialog");
if (edd==NULL)
{
edd=XtVaAppCreateShell("EditorsDialog","EditorsDialog",topLevelShellWidgetClass,XtDisplay(top),
XmNallowShellResize,True,
XmNiconPixmap,pixmap,
NULL);
w=XmCreateMessageBox(edd,"EditorsDialog",NULL,0);
XtSetArg(arg[0],XmNlistSizePolicy,XmCONSTANT);
edl=XmCreateScrolledList(w,"EditorList",arg,1);
XtVaSetValues(XtParent(edl),
XmNscrollBarDisplayPolicy,XmSTATIC,
NULL);
XtVaSetValues(edl,
XmNscrollBarDisplayPolicy,XmSTATIC,
XmNlistSizePolicy,XmCONSTANT,
NULL);
XtAddCallback(edl,XmNdefaultActionCallback,(XtCallbackProc)GotoEditor,NULL);
/* XtUnmanageChild(XmMessageBoxGetChild(w,XmDIALOG_HELP_BUTTON));*/
XtAddCallback(w,XmNokCallback,(XtCallbackProc)CloseEditors,NULL);
XtAddCallback(w,XmNcancelCallback,(XtCallbackProc)GotoEditor,NULL);
XtAddCallback(w,XmNhelpCallback,(XtCallbackProc)Help,"Editors");
XtManageChild(edl);
XtManageChild(w);
}
EP;
}
void UpdateEditorDialog(void)
{
int x;
XmString xstr;
SP("UpdateEditorDialog");
if (edl)
{
XtUnmanageChild(edl);
XmListDeleteAllItems(edl);
for (x=0;x<editors;x++)
{
if (editor[x]->filename[0])
xstr=XmStringCreateLocalized(editor[x]->filename);
else
xstr=XmStringCreateLocalized("<Untitled>");
XmListAddItemUnselected(edl,xstr,0);
XmStringFree(xstr);
}
XtManageChild(edl);
}
EP;
}
void ShowEditorDialog(void)
{
SP("ShowEditorDialog");
if (!edd)
{
CreateEditorDialog();
UpdateEditorDialog();
}
/* XtManageChild(edd);*/
XtPopup(edd,XtGrabNone);
XMapRaised(XtDisplay(edd),XtWindow(edd));
EP;
}
jex-1.3.7/execute.c 100644 0 0 45007 6672726717 12247 0 ustar root root #include <Xm/Xm.h>
#include <Xm/Text.h>
#include <Xm/TextF.h>
#include <Xm/DialogS.h>
#include <Xm/List.h>
#include <Xm/MessageB.h>
#include <Xm/Form.h>
#include <Xm/LabelG.h>
#include <Xm/PushBG.h>
#include <Xm/Separator.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <sys/wait.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <unistd.h>
#include <fcntl.h>
#include "jex.h"
extern Widget top;
extern XtAppContext app;
extern Pixmap pixmap;
#define WORKTIMEOUT 150
#define WORKCOUNTS 20
/*char *workstr[]={"|","/","-","\\"};*/
char *workstr[]={
"/.........",
"./........",
"../.......",
".../......",
"..../.....",
"...../....",
"....../...",
"......./..",
"......../.",
"........./",
".........\\",
"........\\.",
".......\\..",
"......\\...",
".....\\....",
"....\\.....",
"...\\......",
"..\\.......",
".\\........",
"\\........."
};
void InputCallback1(Editor *e,int f,XtInputId l);
void InputCallback2(Editor *e,int f,XtInputId l);
void SetLabel(Editor *e,...)
{
va_list app;
char str[255],*tmp;
XmString xstr;
SP("SetLabel");
va_start(app,e);
tmp=va_arg(app,char *);
vsprintf(str,tmp,app);
va_end(app);
xstr=XmStringCreateLtoR(str,XmSTRING_DEFAULT_CHARSET);
XtVaSetValues(e->iodtext,XmNlabelString,xstr,NULL);
XmStringFree(xstr);
EP;
}
void wprintf(Widget window,...)
{
va_list app;
char str[512],*tmp;
XmString xstr;
SP("wprintf");
va_start(app,window);
/* if (!XtIsManaged(XtParent(XtParent(XtParent(window)))))
XtManageChild(XtParent(XtParent(XtParent(window))));*/
/* XtPopup(XtParent(XtParent(XtParent(window))),XtGrabNone);*/
tmp=va_arg(app,char *);
vsprintf(str,tmp,app);
va_end(app);
xstr=XmStringCreateLtoR(str,XmSTRING_DEFAULT_CHARSET);
XmListAddItemUnselected(window,xstr,0);
XmListSetBottomPos(window,0);
XmStringFree(xstr);
EP;
}
void SplitUp(char *str,char *list[])
{
SP("SplitUP");
while (*str!=0)
{
while ((*str==' ') || (*str=='\t') || (*str=='\n'))
*(str++)=0;
*(list++)=str;
while ((*str!=0) && (*str!=' ') && (*str!='\t') && (*str!='\n'))
str++;
}
*list=0;
EP;
}
void RemoveInputs(Editor *e,void *tid)
{
SP("RemoveInputs");
XtRemoveInput(e->t.id);
XtRemoveInput(e->t.id2);
db_close(e->t.fd[0]);
db_close(e->t.fd[1]);
db_close(e->t.fd2[0]);
db_close(e->t.fd2[1]);
db_close(e->t.fd3[0]);
db_close(e->t.fd3[1]);
EP;
}
void FreeClose(int sig,XtIntervalId tid)
{
int status,pid=0,x,y;
SP("FreeClose");
for (y=0;y<editors;y++)
{
if (editor[y]->t.pid)
{
if ((pid=waitpid(editor[y]->t.pid,&status,WNOHANG))==-1)
{
EP;
return;
}
else
{
if (pid)
{
for (x=0;x<editors;x++)
{
if (editor[x]->t.pid==pid)
{
XtAppAddTimeOut(app,0,(XtTimerCallbackProc)RemoveInputs,editor[x]);
if (sig)
{
InputCallback1(editor[x],0,0);
InputCallback2(editor[x],0,0);
}
if (editor[x]->x)
{
editor[x]->buf[editor[x]->x]=0;
wprintf(editor[x]->io_win,"%s",editor[x]->buf);
}
if (WIFEXITED(status)!=0)
{
if (WEXITSTATUS(status)==0)
SetLabel(editor[x],"%s has finished normally.",editor[x]->t.name);
else
SetLabel(editor[x],"%s has finished with error code %d.",
editor[x]->t.name,WEXITSTATUS(status));
}
else if (WIFSIGNALED(status))
SetLabel(editor[x],"%s has finished abnormally!! (signal %d)",
editor[x]->t.name,WTERMSIG(status));
else
SetLabel(editor[x],"%s has finished abnormally for an unknown reason!!",
editor[x]->t.name);
XtVaSetValues(editor[x]->compile,XmNsensitive,True,NULL);
XtVaSetValues(editor[x]->make,XmNsensitive,True,NULL);
XtVaSetValues(editor[x]->run,XmNsensitive,True,NULL);
XtVaSetValues(editor[x]->grep,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(editor[x]->mb,"*toolsmenu.button_0"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(editor[x]->mb,"*toolsmenu.button_1"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(editor[x]->mb,"*toolsmenu.button_2"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(editor[x]->mb,"*toolsmenu.button_3"),XmNsensitive,True,NULL);
#endif
if (editor[x]->tid)
{
XtRemoveTimeOut(editor[x]->tid);
editor[x]->tid=0;
}
editor[x]->t.pid=0;
}
}
}
}
}
}
EP;
}
void ChildSignal(int sig)
{
SP("ChildSignal");
XtAppAddTimeOut(app,0,(XtTimerCallbackProc)FreeClose,(void*)sig);
EP;
}
void InputTimeout1(Editor *e,XtIntervalId tid)
{
SP("InputTimeout1");
if (e->x)
{
if (e->same_line)
XmListDeletePos(e->io_win,0);
e->buf[e->x]=0;
wprintf(e->io_win,e->buf);
e->same_line=1;
}
e->tid7=0;
EP;
}
void InputCallback1(Editor *e,int f,XtInputId l)
{
unsigned int bread;
SP("InputCallback1");
if (e->tid7)
XtRemoveTimeOut(e->tid7);
e->tid7=XtAppAddTimeOut(app,250,(XtTimerCallbackProc)InputTimeout1,e);
while ((bread=read(e->t.fd[0],&e->buf[e->x],1))==1)
{
if (e->x+1==BUFSIZE-1 || e->buf[e->x]=='\n')
{
if (e->buf[e->x]=='\n')
e->buf[e->x]='\0'; /* Make sure string is 0-terminated. */
else
e->buf[e->x+1]='\0'; /* Make sure string is 0-terminated. */
wprintf(e->io_win,"%s",e->buf);
e->same_line=0;
e->x=0;
}
else
{
e->x++;
}
}
if (bread==-1 && l==0)
FreeClose(0,0);
EP;
}
void InputCallback2(Editor *e,int f,XtInputId l)
{
unsigned int bread;
SP("InputCallback2");
if (e->tid7)
XtRemoveTimeOut(e->tid7);
e->tid7=XtAppAddTimeOut(app,250,(XtTimerCallbackProc)InputTimeout1,e);
while ((bread=read(e->t.fd2[0],&e->buf[e->x],1))==1)
{
if (e->x+1==BUFSIZE-1 || e->buf[e->x]=='\n')
{
if (e->buf[e->x]=='\n')
e->buf[e->x]='\0'; /* Make sure string is 0-terminated. */
else
e->buf[e->x+1]='\0'; /* Make sure string is 0-terminated. */
wprintf(e->io_win,"%s",e->buf);
e->x=0;
}
else
e->x++;
}
if (bread==-1 && l==0)
FreeClose(0,0);
EP;
}
void CloseCompile(Widget w,Editor *e,void *cbs)
{
SP("CloseCompile");
/* XtUnmanageChild(e->iod);*/
XtPopdown(e->iod);
SetCurrentWidget(e->text);
EP;
}
void CheckChild(int pid,XtIntervalId tid)
{
int status,result;
SP("CheckChild");
result=waitpid(pid,&status,WNOHANG);
if (result>=0)
{
kill(pid,SIGKILL);
}
EP;
}
void StopCompile(Widget w,Editor *e,void *cbs)
{
SP("StopCompile");
if (e->t.pid)
{
kill(e->t.pid,SIGQUIT);
SetLabel(e,"Sent quit signal to program...");
XtAppAddTimeOut(app,5000,(XtTimerCallbackProc)CheckChild,(void*)e->t.pid);
if (e->tid)
{
XtRemoveTimeOut(e->tid);
e->tid=0;
}
}
EP;
}
void SendInput(Widget w,Editor *e,void *cbs)
{
char *tmpstr;
SP("SendInput");
if (e->t.pid)
{
XtVaGetValues(e->owi,XmNvalue,&tmpstr,NULL);
write(e->t.fd3[1],tmpstr,strlen(tmpstr));
write(e->t.fd3[1],"\n",strlen("\n"));
if (strlen(e->buf)+strlen(tmpstr)<BUFSIZE)
{
if (e->same_line)
XmListDeletePos(e->io_win,0);
strcat(e->buf,tmpstr);
wprintf(e->io_win,"%s",e->buf);
e->x=0;
e->same_line=0;
}
XtFree(tmpstr);
XmTextFieldSetString(e->owi,""); // Clear the textfield.
}
EP;
}
void CreateOutputWindow(Editor *e)
{
Widget w,w2,w3;
Arg arg[9];
Dimension height;
SP("CreateOutputWindow");
if (!e->iod)
{
/* e->iod=XtVaCreateManagedWidget("IODialog",topLevelShellWidgetClass,top,
XmNallowShellResize,False,
XmNiconPixmap,pixmap,
NULL);*/
e->iod=XtVaAppCreateShell("IODialog","IODialog",topLevelShellWidgetClass,XtDisplay(top),
XmNallowShellResize,False,
XmNiconPixmap,pixmap,
NULL);
w2=XtVaCreateManagedWidget("IODialogForm",xmFormWidgetClass,e->iod,
NULL);
e->iodtext=XtVaCreateManagedWidget("IODialogText",xmLabelGadgetClass,w2,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_NONE,
XmNalignment,XmALIGNMENT_CENTER,
NULL);
w3=XtVaCreateManagedWidget("IOButtons",xmFormWidgetClass,w2,
XmNtopAttachment,XmATTACH_NONE,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_FORM,
XmNfractionBase,9,
XmNbottomOffset,10,
NULL);
w=XtVaCreateManagedWidget("IO_OK",xmPushButtonGadgetClass,w3,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_POSITION,
XmNleftPosition,1,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,2,
XmNbottomAttachment,XmATTACH_FORM,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)CloseCompile,e);
w=XtVaCreateManagedWidget("IO_Stop",xmPushButtonGadgetClass,w3,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_POSITION,
XmNleftPosition,3,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,4,
XmNbottomAttachment,XmATTACH_FORM,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)StopCompile,e);
w=XtVaCreateManagedWidget("IO_Goto",xmPushButtonGadgetClass,w3,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_POSITION,
XmNleftPosition,5,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,6,
XmNbottomAttachment,XmATTACH_FORM,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)GotoError,e);
w=XtVaCreateManagedWidget("IO_Help",xmPushButtonGadgetClass,w3,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_POSITION,
XmNleftPosition,7,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,8,
XmNbottomAttachment,XmATTACH_FORM,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)Help,"OutputWindow");
w=XtVaCreateManagedWidget("IOSep",xmSeparatorWidgetClass,w2,
XmNtopAttachment,XmATTACH_NONE,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_WIDGET,
XmNbottomWidget,w3,
XmNorientation,XmHORIZONTAL,
XmNbottomOffset,10,
NULL);
w3=XtVaCreateManagedWidget("IOInputLabel",xmLabelGadgetClass,w2,
XmNtopAttachment,XmATTACH_NONE,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_WIDGET,
XmNbottomWidget,w,
NULL);
e->owi=XtVaCreateManagedWidget("IOInputField",xmTextFieldWidgetClass,w2,
XmNtopAttachment,XmATTACH_NONE,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w3,
XmNrightAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_WIDGET,
XmNbottomWidget,w,
NULL);
XtAddCallback(e->owi,XmNactivateCallback,(XtCallbackProc)SendInput,e);
XtVaGetValues(e->owi,XmNheight,&height,NULL);
XtVaSetValues(w3,XmNheight,height,NULL);
XtSetArg(arg[0],XmNtopAttachment,XmATTACH_WIDGET);
XtSetArg(arg[1],XmNtopWidget,e->iodtext);
XtSetArg(arg[2],XmNleftAttachment,XmATTACH_FORM);
XtSetArg(arg[3],XmNrightAttachment,XmATTACH_FORM);
XtSetArg(arg[4],XmNbottomAttachment,XmATTACH_WIDGET);
XtSetArg(arg[5],XmNbottomWidget,e->owi);
XtSetArg(arg[6],XmNlistSizePolicy,XmCONSTANT);
XtSetArg(arg[7],XmNbottomOffset,10);
XtSetArg(arg[8],XmNtopOffset,10);
e->io_win=XmCreateScrolledList(w2,"IOList",arg,9);
XtVaSetValues(e->io_win,
XmNscrollBarDisplayPolicy,XmSTATIC,
XmNlistSizePolicy,XmCONSTANT,
NULL);
XtAddCallback(e->io_win,XmNdefaultActionCallback,(XtCallbackProc)GotoError,(void*)e);
XtManageChild(e->io_win);
}
EP;
}
void SetWorkingLabel(Editor *e,void *t)
{
SP("SetWorkingLabel");
e->workcount=(e->workcount+1)%WORKCOUNTS;
SetLabel(e,workstr[e->workcount]);
e->tid=XtAppAddTimeOut(app,WORKTIMEOUT,(XtTimerCallbackProc)SetWorkingLabel,e);
EP;
}
void ExecProg(Editor *e,char *_prog)
{
static char *command[20];
char *prog;
int pid;
SP("ExecProg");
WatchCursor(e,1);
XtVaSetValues(e->compile,XmNsensitive,False,NULL);
XtVaSetValues(e->make,XmNsensitive,False,NULL);
XtVaSetValues(e->run,XmNsensitive,False,NULL);
XtVaSetValues(e->grep,XmNsensitive,False,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_0"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_1"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_2"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_3"),XmNsensitive,False,NULL);
#endif
CreateOutputWindow(e);
/* XtManageChild(e->iod);*/
XtPopup(e->iod,XtGrabNone);
XMapRaised(XtDisplay(e->iod),XtWindow(e->iod));
XmListDeleteAllItems(e->io_win);
e->x=0;
WatchCursor(e,0);
if (db_pipe(e->t.fd)!=0)
{
SetLabel(e,"Too many open files!");
XtVaSetValues(e->compile,XmNsensitive,True,NULL);
XtVaSetValues(e->make,XmNsensitive,True,NULL);
XtVaSetValues(e->run,XmNsensitive,True,NULL);
XtVaSetValues(e->grep,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_0"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_1"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_2"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_3"),XmNsensitive,True,NULL);
#endif
EP;
return;
}
if (db_pipe(e->t.fd2)!=0)
{
SetLabel(e,"Too many open files!");
db_close(e->t.fd[0]);
db_close(e->t.fd[1]);
XtVaSetValues(e->compile,XmNsensitive,True,NULL);
XtVaSetValues(e->make,XmNsensitive,True,NULL);
XtVaSetValues(e->run,XmNsensitive,True,NULL);
XtVaSetValues(e->grep,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_0"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_1"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_2"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_3"),XmNsensitive,True,NULL);
#endif
EP;
return;
}
if (db_pipe(e->t.fd3)!=0)
{
SetLabel(e,"Too many open files!");
db_close(e->t.fd[0]);
db_close(e->t.fd[1]);
db_close(e->t.fd2[0]);
db_close(e->t.fd2[1]);
XtVaSetValues(e->compile,XmNsensitive,True,NULL);
XtVaSetValues(e->make,XmNsensitive,True,NULL);
XtVaSetValues(e->run,XmNsensitive,True,NULL);
XtVaSetValues(e->grep,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_0"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_1"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_2"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_3"),XmNsensitive,True,NULL);
#endif
EP;
return;
}
prog=(char*)db_malloc(db_strlen(_prog)*2);
db_strcpy(prog,_prog);
SetLabel(e,"%s",prog);
e->tid=XtAppAddTimeOut(app,500,(XtTimerCallbackProc)SetWorkingLabel,(void*)e);
e->same_line=0;
fcntl(e->t.fd[0],F_SETFL,O_NONBLOCK);
fcntl(e->t.fd2[0],F_SETFL,O_NONBLOCK);
e->t.id=XtAppAddInput(app,e->t.fd[0],(XtPointer)XtInputReadMask,(XtInputCallbackProc)InputCallback1,(XtPointer)e);
e->t.id2=XtAppAddInput(app,e->t.fd2[0],(XtPointer)XtInputReadMask,(XtInputCallbackProc)InputCallback2,(XtPointer)e);
SplitUp(prog,command);
db_strncpy(e->t.name,command[0],99);
signal(SIGCHLD,ChildSignal);
if ((pid=fork())>=0)
{
if (pid>0)
{
e->t.pid=pid;
db_free(prog);
e->grepped=0;
}
if (pid==0)
{
db_dup2(e->t.fd3[0],0);
db_dup2(e->t.fd[1],1);
db_dup2(e->t.fd2[1],2);
if (execvp(command[0],command)==-1)
exit(-1);
exit(0);
}
}
else
{
SetLabel(e,"fork() failed!");
XtVaSetValues(e->compile,XmNsensitive,True,NULL);
XtVaSetValues(e->make,XmNsensitive,True,NULL);
XtVaSetValues(e->run,XmNsensitive,True,NULL);
XtVaSetValues(e->grep,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_0"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_1"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_2"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_3"),XmNsensitive,True,NULL);
#endif
EP;
return;
}
EP;
}
void CompileOK(Editor *e)
{
char str[255];
SP("CompileOK");
sprintf(str,e->compile_command,e->filename);
ExecProg(e,str);
EP;
}
void Compile(Widget w,Editor *e,void *cbs)
{
int x;
SP("Compile");
for (x=0;x<editors;x++)
{
if (!editor[x]->saved && editor[x]->filename[0])
Save(NULL,editor[x],NULL);
}
if (e->saved && e->filename[0])
CompileOK(e);
else
Save(NULL,e,(void*)CompileOK);
EP;
}
void MakeOK(Editor *e)
{
SP("MakeOK");
ExecProg(e,e->make_command);
EP;
}
void Make(Widget w,Editor *e,void *cbs)
{
int x;
SP("Make");
for (x=0;x<editors;x++)
{
if (!editor[x]->saved && editor[x]->filename[0])
Save(NULL,editor[x],NULL);
}
if (e->saved && e->filename[0])
MakeOK(e);
else
Save(NULL,e,(void*)MakeOK);
EP;
}
void LatestVersion(void)
{
char *cmd[3];
char browser[256];
if (!FindHelpFile("netscape",browser))
{
if (!FindHelpFile("Mosaic",browser))
{
if (!FindHelpFile("arena",browser))
{
HelpError("You can find the latest version at http://www.club.innet.be/~year1939/applications.html");
return;
}
}
}
if (!fork())
{
cmd[0]=strdup(browser);
cmd[1]=strdup("http://www.club.innet.be/~year1939/applications.html");
cmd[2]=NULL;
if (execvp(cmd[0],cmd)==-1)
exit(-1);
exit(0);
}
}
void RunOK(Editor *e)
{
char runstr[1000];
SP("Run");
sprintf(runstr,e->run_command,e->filename);
ExecProg(e,runstr);
EP;
}
void Run(Widget w,Editor *e,void *cbs)
{
SP("Run");
if (!e->run_command[0])
ShowError(e,"You must specify in the settings which program to run!");
else
{
if (e->saved && e->filename[0])
RunOK(e);
else
Save(NULL,e,(void*)RunOK);
}
EP;
}
jex-1.3.7/filemenu.c 100644 0 0 15372 6672726717 12413 0 ustar root root #include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/RowColumn.h>
#include "jex.h"
extern char fl_files[FILELIST][255];
void Quit(Widget w,Editor *e,void *cbs)
{
SP("Quit");
if (e->saved)
Exit(e);
else
AskToSave(e,(void*)Exit);
EP;
}
void DoNew(Widget *w,Editor *e,void *cbs)
{
SP("DoNew");
if (e->saved)
New(e);
else
AskToSave(e,(void*)New);
EP;
}
void DoOpen(Widget *w,Editor *e,void *cbs)
{
SP("DoOpen");
if (e->saved)
Load(e);
else
AskToSave(e,(void*)Load);
EP;
}
void DoNewWindow(Widget *w,void *e,void *cbs)
{
SP("DoNewWindow");
CreateNewEditor();
EP;
}
void DoClone(Widget *w,Editor *e,void *cbs)
{
SP("DoClone");
CreateNewEditor();
if (e->filename[0])
{
if (loadfile(editor[editors-1],e->filename,0,1))
LoadError(editor[editors-1]);
}
EP;
}
void file_cb(Widget w,int item,void *cbs)
{
int x;
SP("file_cb");
for (x=0;x<editors;x++)
{
if (editor[x]->mb==XtParent(XtParent(XtParent(w))))
{
switch (item)
{
case 0: /* New window */
CreateNewEditor();
break;
case 1: /* New window */
CreateNewEditor();
if (editor[x]->filename[0])
{
if (loadfile(editor[editors-1],editor[x]->filename,0,1))
LoadError(editor[editors-1]);
}
break;
case 2: /* New */
if (editor[x]->saved)
New(editor[x]);
else
AskToSave(editor[x],(void*)New);
break;
case 3: /* Load */
if (editor[x]->saved)
Load(editor[x]);
else
AskToSave(editor[x],(void*)Load);
break;
case 4:
Save(NULL,editor[x],NULL);
break;
case 5:
editor[x]->func2=NULL;
SaveAs(editor[x]);
break;
case 6:
Reload(editor[x]);
break;
case 7:
Revert(editor[x]);
break;
case 8:
Insert(editor[x]);
break;
case 9:
Print(editor[x]);
break;
case 10:
Quit(NULL,editor[x],NULL);
break;
}
}
}
EP;
}
void edit_cb(Widget w,int item,void *cbs)
{
int x;
SP("edit_cb");
for (x=0;x<editors;x++)
{
if (editor[x]->mb==XtParent(XtParent(XtParent(w))))
{
switch (item)
{
case 0:
UndoAction(NULL,editor[x],NULL);
break;
case 1:
RedoAction(NULL,editor[x],NULL);
break;
case 2:
RepeatAction(NULL,editor[x],NULL);
break;
case 3:
CopyText(NULL,editor[x],NULL);
break;
case 4:
CutText(NULL,editor[x],NULL);
break;
case 5:
PasteText(NULL,editor[x],NULL);
break;
case 6:
ClearSelection(NULL,editor[x],NULL);
break;
case 7:
CapsSelection(NULL,editor[x],NULL);
break;
case 8:
LowsSelection(NULL,editor[x],NULL);
break;
case 9:
ShiftLeft(NULL,editor[x],NULL);
break;
case 10:
ShiftRight(NULL,editor[x],NULL);
break;
case 11:
FindMatchingChar(NULL,editor[x],NULL);
break;
case 12:
SetMarker(NULL,editor[x],NULL);
break;
case 13:
GotoMarker(NULL,editor[x],NULL);
break;
}
}
}
EP;
}
void PopupMenu(Widget w,XButtonPressedEvent *event,String *args,int *num_args)
{
int x;
SP("PopupMenu");
while (!XtIsShell(w))
w=XtParent(w);
for (x=0;x<editors;x++)
{
if (editor[x]->shell==w)
{
XmMenuPosition(editor[x]->pm,event);
XtManageChild(editor[x]->pm);
}
}
EP;
}
void popup_cb(Widget w,int item,XmAnyCallbackStruct *cbs)
{
int x;
SP("popup_cb");
for (x=0;x<editors;x++)
{
if (editor[x]->pm==XtParent(w))
{
switch ((int)item)
{
case 0:
CopyText(NULL,editor[x],NULL);
break;
case 1:
CutText(NULL,editor[x],NULL);
break;
case 2:
PasteText(NULL,editor[x],NULL);
break;
case 3:
ClearSelection(NULL,editor[x],NULL);
break;
case 4:
UndoAction(NULL,editor[x],NULL);
break;
case 5:
RedoAction(NULL,editor[x],NULL);
break;
case 6:
GotoLine(NULL,editor[x],NULL);
break;
}
}
}
EP;
}
void option_cb(Widget w,int item,void *cbs)
{
int x;
Boolean set;
SP("option_cb");
for (x=0;x<editors;x++)
{
if (editor[x]->mb==XtParent(XtParent(XtParent(w))))
{
switch (item)
{
case 0: Settings(editor[x]);break;
case 1: XtVaGetValues(w,XmNset,&set,NULL);
XtVaSetValues(editor[x]->text,XmNeditable,set?False:True,NULL);
editor[x]->read_only=set?1:0;
break;
case 3: Compile(NULL,editor[x],NULL);break;
case 4: Make(NULL,editor[x],NULL);break;
case 5: Grep(NULL,editor[x],NULL);break;
}
}
}
EP;
}
void bookmark_cb(Widget w,int item,void *cbs)
{
int x;
SP("bookmark_cb");
for (x=0;x<editors;x++)
{
if (editor[x]->mb==XtParent(XtParent(XtParent(w))))
{
switch (item)
{
case 0: AddBookmark(editor[x]->filename);break;
case 1: ShowBookmarkDialog();break;
}
}
}
EP;
}
void tools_cb(Widget w,int item,void *cbs)
{
int x;
SP("tools_cb");
for (x=0;x<editors;x++)
{
if (editor[x]->mb==XtParent(XtParent(XtParent(w))))
{
switch (item)
{
case 0: Compile(NULL,editor[x],NULL);break;
case 1: Make(NULL,editor[x],NULL);break;
case 2: Run(NULL,editor[x],NULL);break;
case 3: Grep(NULL,editor[x],NULL);break;
}
}
}
EP;
}
void view_cb(Widget w,int item,void *cbs)
{
int x;
SP("view_cb");
for (x=0;x<editors;x++)
{
if (editor[x]->mb==XtParent(XtParent(XtParent(w))))
{
switch (item)
{
case 0: ShowEditorDialog();break;
case 1: CreateOutputWindow(editor[x]);
/*XtManageChild(editor[x]->iod);*/
XtPopup(editor[x]->iod,XtGrabNone);
XMapRaised(XtDisplay(editor[x]->iod),XtWindow(editor[x]->iod));
break;
case 2: ShowStats(editor[x]);break;
}
}
}
EP;
}
void help_cb(Widget w,int item,void *cbs)
{
int x;
SP("help_cb");
for (x=0;x<editors;x++)
{
if (editor[x]->mb==XtParent(XtParent(XtParent(w))))
{
switch (item)
{
case 0: Help(NULL,"Contents",NULL);break;
case 1: LatestVersion();break;
case 2: ShowAboutDialog(editor[x]);break;
}
}
}
EP;
}
jex-1.3.7/files.c 100644 0 0 13174 6672726717 11707 0 ustar root root #include <Xm/Xm.h>
#include <Xm/FileSB.h>
#include <Xm/Text.h>
#include <Xm/TextStrSoP.h>
#include <Xm/MessageB.h>
#include "jex.h"
extern Widget top;
void CheckSaveAsOK(Widget w,Editor *e,Widget fw);
void SetTitle(Editor *e,char *str)
{
char title[255],directory[255],file[255];
SP("SetTitle");
if (str && *str)
{
sprintf(title,"jex: %s",str);
SplitPath(str,directory,file);
XtVaSetValues(e->shell,XmNiconName,file,NULL);
}
else
{
db_strcpy(title,"jex");
XtVaSetValues(e->shell,XmNiconName,"jex",NULL);
}
XtVaSetValues(e->shell,XmNtitle,title,NULL);
UpdateEditorDialog();
EP;
}
void SaveOK(Editor *e)
{
int stat;
char *str;
SP("SaveOK");
if (e->read_only)
{
EP;
return;
}
XtVaGetValues(e->text,XmNvalue,&str,NULL);
stat=savefile(e,e->filename,str);
XtFree(str);
if (!stat)
SaveError(e);
else
{
e->saved=1;
e->changes=0;
/* XtUnmanageChild(e->save);*/
SetSave(e,False);
if (e->func2!=NULL)
Function((void(*)(void))e->func2,e);
}
EP;
}
void SaveAsOK(Widget w,Editor *e,Widget fw)
{
char *file;
int x;
SP("SaveAsOK");
if (e->read_only)
{
EP;
return;
}
XtVaGetValues(fw,XmNvalue,&file,NULL);
db_strcpy(e->filename,file);
GetFullFileName(e->filename);
SetTitle(e,e->filename);
SaveOK(e);
if (strcmp(e->filename,file))
{
if (e->oldsource)
{
printf("1\n");
DetachEditor(e,file);
}
else
{
printf("2\n");
for (x=0;x<editors;x++)
{
if (editor[x]!=e && db_strcmp(editor[x]->filename,file)==0)
{
printf("3\n");
XmTextSetSource(e->tmpsource,XmTextGetSource(e->text),0,0);
XmTextSetSource(e->text,XmTextGetSource(editor[x]->text),0,0);
e->oldsource=1;
editor[x]->oldsource=1;
break;
}
}
}
}
XtFree(file);
EP;
}
void NoOverwrite(Widget w,Editor *e,void *cbs)
{
SP("NoOverwrite");
CreateFileSelectionDialog(e,"Save As",(void*)CheckSaveAsOK,e->func2);
EP;
}
void CancelAskToOverwrite(Widget w,Editor *e,void *cbs)
{
SP("CancelAskToOverwrite");
XtUnmanageChild(e->ato);
SetCurrentWidget(e->text);
EP;
}
void AskToOverwriteOK(Widget w,Editor *e,void *cbs)
{
SP("AskToOverwriteOK");
SaveAsOK(w,e,e->f);
SetCurrentWidget(e->text);
EP;
}
void CheckSaveAsOK(Widget w,Editor *e,Widget fw)
{
char *file;
struct stat st;
SP("CheckSaveAsOK");
if (e->read_only)
{
EP;
return;
}
XtVaGetValues(fw,XmNvalue,&file,NULL);
if (db_stat(file,&st)==-1)
SaveAsOK(w,e,fw);
else
{
if (e->ato==NULL)
{
e->ato=XmCreateQuestionDialog(e->shell,"AskToOverwrite",NULL,0);
e->f=fw;
XtAddCallback(e->ato,XmNokCallback,(XtCallbackProc)AskToOverwriteOK,e);
XtAddCallback(e->ato,XmNcancelCallback,(XtCallbackProc)NoOverwrite,e);
XtAddCallback(e->ato,XmNhelpCallback,(XtCallbackProc)CancelAskToOverwrite,e);
}
else
{
XtRemoveAllCallbacks(e->ato,XmNokCallback);
XtRemoveAllCallbacks(e->ato,XmNcancelCallback);
XtRemoveAllCallbacks(e->ato,XmNhelpCallback);
e->f=fw;
XtAddCallback(e->ato,XmNokCallback,(XtCallbackProc)AskToOverwriteOK,e);
XtAddCallback(e->ato,XmNcancelCallback,(XtCallbackProc)NoOverwrite,e);
XtAddCallback(e->ato,XmNhelpCallback,(XtCallbackProc)CancelAskToOverwrite,e);
}
XtManageChild(e->ato);
}
}
void SaveAs(Editor *e)
{
SP("SaveAs");
if (e->read_only)
{
EP;
return;
}
CreateFileSelectionDialog(e,"Save As",(void*)CheckSaveAsOK,e->func2);
EP;
}
void Save(Widget w,Editor *e,void *cbs)
{
SP("Save");
if (e->read_only)
{
EP;
return;
}
if (w)
e->func2=NULL;
else
e->func2=cbs;
if (e->filename[0])
SaveOK(e);
else
SaveAs(e);
EP;
}
void ValueChanged(Widget w,Editor *e,void *cbs)
{
SP("ValueChanged");
/* XtManageChild(e->save);*/
SetSave(e,True);
e->saved=0;
EP;
}
void New(Editor *e)
{
SP("New");
UnlinkFile(e);
DetachEditor(e,NULL);
XtVaSetValues(e->text,XmNvalue,"",NULL);
e->saved=1;
SetTitle(e,"");
e->filename[0]=0;
/* XtUnmanageChild(e->save);*/
SetSave(e,False);
NoUndo(e);
EP;
}
void LoadOK(Widget w,Editor *e,Widget fw)
{
char *file;
SP("LoadOK");
XtVaGetValues(fw,XmNvalue,&file,NULL);
if (loadfile(e,file,0,1))
LoadError(e);
else
{
/* db_strcpy(e->filename,file);*/
XtFree(file);
/* SetTitle(e,e->filename);*/
}
EP;
}
void Load(Editor *e)
{
SP("Load");
CreateFileSelectionDialog(e,"Load",(void*)LoadOK,NULL);
EP;
}
void Revert(Editor *e)
{
char tmpstr[255];
int result;
FILE *f;
SP("Revert");
if (e->read_only)
{
EP;
return;
}
if (e->filename[0])
{
if (e->saved)
{
sprintf(tmpstr,"%s~",e->filename);
if ((f=fopen(tmpstr,"r"))!=NULL)
{
fclose(f);
CopyFile(tmpstr,e->filename);
result=loadfile(e,tmpstr,0,0);
CopyFile(e->filename,tmpstr);
}
else
{
EP;
return;
}
}
else
result=loadfile(e,e->filename,0,0);
if (result!=0)
LoadError(e);
else
SetTitle(e,e->filename);
}
EP;
}
void PrintOK(Editor *e)
{
SP("PrintOK");
printfile(e,e->filename);
EP;
}
void Print(Editor *e)
{
SP("Print");
if (!e->saved)
{
e->f=(void*)PrintOK;
Save(NULL,(void*)e,NULL);
}
else
PrintOK(e);
EP;
}
void InsertOK(Widget w,Editor *e,Widget fw)
{
char *file;
SP("InsertOK");
if (e->read_only)
{
EP;
return;
}
XtVaGetValues(fw,XmNvalue,&file,NULL);
if (loadfile(e,file,1,0))
LoadError(e);
XtFree(file);
EP;
}
void Insert(Editor *e)
{
SP("Insert");
if (e->read_only)
{
EP;
return;
}
CreateFileSelectionDialog(e,"Insert",(void*)InsertOK,NULL);
EP;
}
jex-1.3.7/filesb.c 100644 0 0 27565 6672726717 12062 0 ustar root root #include <stdio.h>
#include <string.h>
#include <Xm/MessageB.h>
#include <Xm/LabelG.h>
#include <Xm/Form.h>
#include <Xm/List.h>
#include <Xm/TextF.h>
#include <Xm/RowColumn.h>
#include <Xm/SeparatoG.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include "match.h"
#include "jex.h"
extern Widget top,combo1,combo2,combo3;
void AddItem(Widget list,char *newtext)
{
char *text;
XmString str,*strlist;
int u_bound,l_bound=0,i;
SP("AddItem");
XtVaGetValues(list,XmNitemCount,&u_bound,
XmNitems,&strlist,
NULL);
u_bound--;
while (u_bound>=l_bound)
{
i=l_bound+(u_bound-l_bound)/2;
if (!XmStringGetLtoR(strlist[i],XmSTRING_DEFAULT_CHARSET,&text))
break;
if (db_strcmp(text,newtext)>0)
u_bound=i-1;
else
l_bound=i+1;
XtFree(text);
}
str=XmStringCreateLocalized(newtext);
XmListAddItemUnselected(list,str,l_bound+1);
XmStringFree(str);
EP;
}
void SplitPath(char *orig_path,char *directory,char *filter)
{
char *tmp;
char path[255];
SP("SplitPath");
db_strcpy(path,orig_path);
tmp=db_strrchr(path,'/');
if (tmp)
{
*tmp=0;
db_strcpy(directory,path);
if (!directory[0])
db_strcpy(directory,"/");
db_strcpy(filter,tmp+1);
if (!filter[0])
db_strcpy(filter,"*");
}
else
{
db_strcpy(directory,".");
db_strcpy(filter,path);
if (!filter[0])
db_strcpy(filter,"*");
}
EP;
}
void GetDirectory(Editor *e,char *directory,char *filter)
{
DIR *dp;
struct dirent *dir;
struct stat sbuf;
char file[255];
SP("GetDirectory");
XmListDeleteAllItems(e->filefield);
XmListDeleteAllItems(e->dir_field);
if ((dp=db_opendir(directory))==NULL)
{
/* fprintf(stderr,"Can't open directory %s\n",path);*/
EP;
return;
}
XtUnmanageChild(e->filefield);
XtUnmanageChild(e->dir_field);
while ((dir=db_readdir(dp))!=NULL)
{
if (dir->d_ino==0)
continue;
if (directory[db_strlen(directory)-1]!='/')
sprintf(file,"%s/%s",directory,dir->d_name);
else
sprintf(file,"%s%s",directory,dir->d_name);
if (db_stat(file,&sbuf)<0)
{
if (db_lstat(file,&sbuf)<0)
{
continue;
}
}
if ((sbuf.st_mode&S_IFMT)==S_IFDIR)
{
AddItem(e->dir_field,file);
continue;
}
if (match(filter,dir->d_name))
{
AddItem(e->filefield,dir->d_name);
}
}
db_closedir(dp);
XtManageChild(e->filefield);
XtManageChild(e->dir_field);
EP;
}
void SelectDir(Widget w,Editor *e,XmListCallbackStruct *cbs)
{
char *newdir,*curdir,directory[255],*filter,newpath[255],prevdir[255],tmp[255];
char olddir[255],newdirectory[255];
XmString size;
SP("SelectDir");
WatchCursor(e,1);
XmStringGetLtoR(cbs->item,XmSTRING_DEFAULT_CHARSET,&newdir);
XtVaGetValues(e->dirfilter_field,XmNvalue,&curdir,NULL);
XtVaGetValues(e->filter_field,XmNvalue,&filter,NULL);
SplitPath(newdir,olddir,newdirectory);
if (db_strcmp(newdirectory,".")==0)
{
if (olddir[db_strlen(prevdir)-1]!='/')
sprintf(newpath,"%s/%s",olddir,filter);
else
sprintf(newpath,"%s%s",olddir,filter);
}
else if (db_strcmp(newdirectory,"..")==0)
{
SplitPath(curdir,prevdir,tmp);
if (prevdir[db_strlen(prevdir)-1]!='/')
sprintf(newpath,"%s/%s",prevdir,filter);
else
sprintf(newpath,"%s%s",prevdir,filter);
}
else
{
if (newdir[db_strlen(newdir)-1]!='/')
sprintf(newpath,"%s/%s",newdir,filter);
else
sprintf(newpath,"%s%s",newdir,filter);
}
SplitPath(newpath,directory,filter);
XtVaSetValues(e->dirfilter_field,XmNvalue,directory,NULL);
XtVaSetValues(e->sel_field,XmNvalue,directory,NULL);
size=XmStringCreateLocalized("0 bytes");
XtVaSetValues(e->fssize,XmNlabelString,size,NULL);
GetDirectory(e,directory,filter);
XmStringFree(size);
XtFree(curdir);
XtFree(filter);
XtFree(newdir);
WatchCursor(e,0);
EP;
}
void BrowseSelect(Widget w,Editor *e,XmListCallbackStruct *cbs)
{
char *newfile,*curdir,filter[255];
struct stat st;
XmString size;
SP("BrowseSelect");
XmStringGetLtoR(cbs->item,XmSTRING_DEFAULT_CHARSET,&newfile);
XtVaGetValues(e->dirfilter_field,XmNvalue,&curdir,NULL);
if (curdir[db_strlen(curdir)-1]!='/')
sprintf(filter,"%s/%s",curdir,newfile);
else
sprintf(filter,"%s%s",curdir,newfile);
XtVaSetValues(e->sel_field,XmNvalue,filter,NULL);
db_stat(filter,&st);
if (st.st_size>1024*1024)
sprintf(filter,"%.1f Mb",(double)st.st_size/(1024.0*1024.0));
else if (st.st_size>1024)
sprintf(filter,"%.1f Kb",(double)st.st_size/1024.0);
else
sprintf(filter,"%lu bytes",(unsigned long)st.st_size);
size=XmStringCreateLocalized(filter);
XtVaSetValues(e->fssize,XmNlabelString,size,NULL);
XmStringFree(size);
XtFree(newfile);
XtFree(curdir);
EP;
}
void CallFunction(void (*f)(),Editor *e)
{
SP("CallFunction");
f(e->fs,e,e->sel_field);
EP;
}
void FSOKCallback(Widget w,Editor *e,void *cbs)
{
char *str;
int x;
SP("FSOKCallback");
XtVaGetValues(e->sel_field,XmNvalue,&str,NULL);
UpdateComboBox(combo3,str);
for (x=0;x<editors;x++)
{
if (editor[x]->fs)
UpdateComboBox(editor[x]->sel_field,str);
}
XtFree(str);
XtUnmanageChild(e->fs);
if (e->func!=NULL)
CallFunction((void(*)(void))e->func,e);
EP;
}
void FSCancelCallback(Widget w,Editor *e,void *cbs)
{
SP("FSCancelCallback");
XtUnmanageChild(e->fs);
EP;
}
void FSFilterCallback(Widget w,Editor *e,void *cbs)
{
char *filter,*dir;
XmString size;
int x;
SP("FSFilterCallback");
XtVaGetValues(e->filter_field,XmNvalue,&filter,NULL);
XtVaGetValues(e->dirfilter_field,XmNvalue,&dir,NULL);
UpdateComboBox(combo1,filter);
UpdateComboBox(combo2,dir);
for (x=0;x<editors;x++)
{
UpdateComboBox(editor[x]->filter_field,filter);
UpdateComboBox(editor[x]->dirfilter_field,dir);
}
GetDirectory(e,dir,filter);
size=XmStringCreateLocalized("0 bytes");
XtVaSetValues(e->fssize,XmNlabelString,size,NULL);
XmStringFree(size);
XtFree(dir);
XtFree(filter);
EP;
}
void CreateFileSelectionDialog(Editor *e,char *title,void *f,void *f2)
{
XmString xstr;
Arg arg[10];
char path[255];
Widget w,rc,l;
int n;
SP("CreateFileSelectionDialog");
e->func=f;
e->func2=f2;
WatchCursor(e,1);
if (e->fs==NULL)
{
XtSetArg(arg[0],XmNautoUnmanage,False);
XtSetArg(arg[1],XmNdefaultButtonType,NULL);
e->fs=XmCreateMessageDialog(e->shell,"FileSelection",arg,2);
XtAddCallback(e->fs,XmNokCallback,(XtCallbackProc)FSOKCallback,(void*)e);
XtAddCallback(e->fs,XmNcancelCallback,(XtCallbackProc)FSCancelCallback,(void*)e);
XtAddCallback(e->fs,XmNhelpCallback,(XtCallbackProc)FSFilterCallback,(void*)e);
xstr=XmStringCreateLocalized("Filter");
XtVaSetValues(e->fs,
XmNhelpLabelString,xstr,
XmNdialogStyle,XmDIALOG_FULL_APPLICATION_MODAL,
NULL);
XmStringFree(xstr);
e->form=XtVaCreateManagedWidget("FSForm",xmFormWidgetClass,e->fs,NULL);
l=XtVaCreateManagedWidget("FSTitle",xmLabelGadgetClass,e->form,
XmNtopAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_FORM,
NULL);
l=XtVaCreateManagedWidget("FSTitle",xmSeparatorGadgetClass,e->form,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,l,
XmNrightAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_FORM,
NULL);
rc=XtVaCreateManagedWidget("FSRC",xmRowColumnWidgetClass,e->form,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,l,
XmNrightAttachment,XmATTACH_FORM,
XmNorientation,XmVERTICAL,
XmNmarginWidth,0,
XmNmarginHeight,0,
NULL);
w=XtVaCreateManagedWidget("FSFilter",xmLabelGadgetClass,rc,
XmNalignment,XmALIGNMENT_BEGINNING,
NULL);
e->filter_field=CreateComboBox(rc,"FSFilterField",NULL,0,10);
InitializeComboBox(e->filter_field,combo1);
ComboBoxAddCallback(e->filter_field,(XtCallbackProc)FSFilterCallback,(void*)e);
XtAddCallback(e->filter_field,XmNactivateCallback,(XtCallbackProc)FSFilterCallback,(void*)e);
rc=XtVaCreateManagedWidget("FSRC",xmRowColumnWidgetClass,e->form,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,l,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_WIDGET,
XmNrightWidget,rc,
XmNorientation,XmVERTICAL,
XmNmarginWidth,0,
XmNmarginHeight,0,
NULL);
w=XtVaCreateManagedWidget("FSFilterDirLabel",xmLabelGadgetClass,rc,
XmNalignment,XmALIGNMENT_BEGINNING,
NULL);
e->dirfilter_field=CreateComboBox(rc,"FSFilterDirField",NULL,0,10);
InitializeComboBox(e->dirfilter_field,combo2);
ComboBoxAddCallback(e->dirfilter_field,(XtCallbackProc)FSFilterCallback,(void*)e);
XtAddCallback(e->dirfilter_field,XmNactivateCallback,(XtCallbackProc)FSFilterCallback,(void*)e);
e->dirlabel=XtVaCreateManagedWidget("FSDirLabel",xmLabelGadgetClass,e->form,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,XtParent(XtParent(e->filter_field)),
XmNleftAttachment,XmATTACH_FORM,
NULL);
XtSetArg(arg[0],XmNlistSizePolicy,XmRESIZE_IF_POSSIBLE);
e->dir_field=XmCreateScrolledList(e->form,"FSDirList",arg,1);
XtVaSetValues(XtParent(e->dir_field),
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->dirlabel,
XmNleftAttachment,XmATTACH_FORM,
XmNscrollBarDisplayPolicy,XmSTATIC,
NULL);
XtVaSetValues(e->dir_field,
XmNscrollBarDisplayPolicy,XmSTATIC,
XmNlistSizePolicy,XmRESIZE_IF_POSSIBLE,
NULL);
XtAddCallback(e->dir_field,XmNdefaultActionCallback,(XtCallbackProc)SelectDir,(void*)e);
XtManageChild(e->dir_field);
e->filelabel=XtVaCreateManagedWidget("FSFileLabel",xmLabelGadgetClass,e->form,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,XtParent(XtParent(e->filter_field)),
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,XtParent(e->dir_field),
XmNrightAttachment,XmATTACH_FORM,
NULL);
e->filefield=XmCreateScrolledList(e->form,"FSFileList",arg,1);
XtVaSetValues(XtParent(e->filefield),
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->filelabel,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,XtParent(e->dir_field),
XmNrightAttachment,XmATTACH_FORM,
XmNscrollBarDisplayPolicy,XmSTATIC,
XmNlistSizePolicy,XmRESIZE_IF_POSSIBLE,
NULL);
XtVaSetValues(e->filefield,
XmNscrollBarDisplayPolicy,XmSTATIC,
XmNlistSizePolicy,XmRESIZE_IF_POSSIBLE,
NULL);
XtAddCallback(e->filefield,XmNbrowseSelectionCallback,(XtCallbackProc)BrowseSelect,(void*)e);
XtAddCallback(e->filefield,XmNdefaultActionCallback,(XtCallbackProc)FSOKCallback,(void*)e);
XtManageChild(e->filefield);
e->fssize=XtVaCreateManagedWidget("FSSize",xmLabelGadgetClass,e->form,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,XtParent(e->dir_field),
XmNleftAttachment,XmATTACH_NONE,
XmNrightAttachment,XmATTACH_FORM,
NULL);
e->selection=XtVaCreateManagedWidget("FSSelection",xmLabelGadgetClass,e->form,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,XtParent(e->dir_field),
XmNleftAttachment,XmATTACH_FORM,
NULL);
n=0;
XtSetArg(arg[n],XmNtopAttachment,XmATTACH_WIDGET);n++;
XtSetArg(arg[n],XmNtopWidget,e->selection);n++;
XtSetArg(arg[n],XmNleftAttachment,XmATTACH_FORM);n++;
XtSetArg(arg[n],XmNrightAttachment,XmATTACH_FORM);n++;
e->sel_field=CreateComboBox(e->form,"FSSelectionField",arg,n,10);
InitializeComboBox(e->sel_field,combo3);
XtAddCallback(e->sel_field,XmNactivateCallback,(XtCallbackProc)FSOKCallback,(void*)e);
db_getcwd(path,255);
XtVaSetValues(e->filter_field,XmNvalue,"*",NULL);
XtVaSetValues(e->dirfilter_field,XmNvalue,path,NULL);
XtVaSetValues(e->sel_field,XmNvalue,path,NULL);
GetDirectory(e,path,"*");
}
else
FSFilterCallback(NULL,e,NULL); /* Refresh */
XtVaSetValues(XtParent(e->fs),XmNtitle,title,NULL);
xstr=XmStringCreateLocalized(title);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->fs,"*FSTitle"),XmNlabelString,xstr,NULL);
#endif
XmStringFree(xstr);
XtManageChild(e->fs);
WatchCursor(e,0);
EP;
}
jex-1.3.7/genres.c 100644 0 0 2114 6672726717 12040 0 ustar root root #include <stdio.h>
#include "jbdbg.h"
int main(int argc,char *argv[])
{
FILE *f1,*f2;
int ml=0;
char str[100];
if (argc!=3)
{
printf("Usage: genres header-file resource-file\n");
return 1;
}
if ((f1=db_fopen(argv[1],"r"))==NULL)
{
printf("Can't open file %s\n",argv[1]);
return 1;
}
if ((f2=db_fopen(argv[2],"w+"))==NULL)
{
printf("Can't create file %s\n",argv[2]);
return 1;
}
while (db_fgets(str,100,f1))
{
str[db_strlen(str)-1]=0;
if (db_strlen(str)>3 && str[0]=='"' && str[db_strlen(str)-1]==',' && str[db_strlen(str)-2]=='"')
{
str[db_strlen(str)-2]='\0';
fprintf(f2,"%s\n",&str[1]);
}
else if (db_strlen(str)>3 && str[db_strlen(str)-1]=='\\')
{
if (str[0]=='"')
fprintf(f2,"%s\n",&str[1]);
else
fprintf(f2,"%s\n",str);
ml=1;
}
else if (ml && db_strlen(str)>3 && str[db_strlen(str)-1]==',' && str[db_strlen(str)-2]=='"')
{
str[db_strlen(str)-2]='\0';
fprintf(f2,"%s\n",str);
ml=0;
}
}
db_fclose(f1);
db_fclose(f2);
return 0;
}
jex-1.3.7/gotoerr.c 100644 0 0 3534 6672726717 12245 0 ustar root root #include "jex.h"
#include <ctype.h>
#include <Xm/List.h>
int FindFileLine(char *str,Editor *e,char *file,int *l)
{
int x;
if (e->grepped)
return sscanf(str,"%[^:]:%d:",file,l);
for (x=0;x<e->ce_count;x++)
{
if (sscanf(str,e->compiler_error[x],file,l)==2)
return 2;
}
return 0;
}
void GotoError(Widget w,Editor *e,void *cbs)
{
char *str;
char file[255]/*,dir[255],name[255],name2[255]*/;
int line,x;
XmStringTable selected_items;
int num_selected,res;
SP("GotoError");
XtVaGetValues(e->io_win,XmNselectedItemCount,&num_selected,XmNselectedItems,&selected_items,NULL);
if (num_selected==0)
{
EP;
return;
}
WatchCursor(e,1);
XmStringGetLtoR(selected_items[0],XmSTRING_DEFAULT_CHARSET,&str);
res=FindFileLine(str,e,file,&line);
if (res==2)
{
/* SplitPath(file,dir,name2);*/
GetFullFileName(file);
for (x=0;x<editors;x++)
{
/* SplitPath(editor[x]->filename,dir,name);
if (db_strcmp(name,name2)==0)*/
if (db_strcmp(editor[x]->filename,file)==0)
{
XMapRaised(XtDisplay(editor[x]->shell),XtWindow(editor[x]->shell));
if (res==2)
{
sprintf(file,"%d",line);
XtVaSetValues(editor[x]->gotofield,XmNvalue,file,NULL);
GotoLine(NULL,editor[x],NULL);
}
XtFree(str);
WatchCursor(e,0);
EP;
return;
}
}
CreateNewEditor();
/* db_strcpy(editor[editors-1]->filename,file);
SetTitle(editor[editors-1],editor[editors-1]->filename);*/
if (loadfile(editor[editors-1],file,0,1))
LoadError(editor[editors-1]);
if (res==2)
{
sprintf(file,"%d",line);
XtVaSetValues(editor[editors-1]->gotofield,XmNvalue,file,NULL);
GotoLine(NULL,editor[editors-1],NULL);
}
XtFree(str);
WatchCursor(e,0);
EP;
return;
}
WatchCursor(e,0);
EP;
}
jex-1.3.7/grep.c 100644 0 0 10026 6672726717 11533 0 ustar root root #include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include <ctype.h>
#include "match.h"
#include "jex.h"
#include "list.h"
int subdirs=0,case_sensitive=0,do_replace=0;
List f_list=NULL;
void strupr(char *str)
{
SP("strupr");
while (str && *str)
{
*str=toupper(*str);
str++;
}
EP;
}
void ReplaceString(char *str,char *srch,char *repl)
{
int x;
char tmpstr[255],tmppat[255];
SP("ReplaceString");
db_strcpy(tmpstr,str);
db_strcpy(tmppat,srch);
if (!case_sensitive)
{
strupr(tmpstr);
strupr(tmppat);
}
for (x=0;x<db_strlen(tmpstr);x++)
{
if ((x>db_strlen(tmpstr)-db_strlen(srch)) || ((db_strlen(tmpstr)+db_strlen(repl)-db_strlen(tmppat))>=255))
{
EP;
return;
}
if (db_memcmp(&tmpstr[x],tmppat,db_strlen(tmppat))==0)
{
if (x==0 || (x>0 && !isalpha(tmpstr[x-1]) && tmpstr[x-1]!='_'))
{
db_memmove(&str[x],&str[x+db_strlen(srch)],db_strlen(str)-x-db_strlen(srch)+1);
db_memmove(&str[x+db_strlen(repl)],&str[x],db_strlen(str)-x+1);
db_memcpy(&str[x],repl,db_strlen(repl));
db_memmove(&tmpstr[x],&tmpstr[x+db_strlen(tmppat)],db_strlen(tmpstr)-x-db_strlen(tmppat)+1);
db_memmove(&tmpstr[x+db_strlen(repl)],&tmpstr[x],db_strlen(tmpstr)-x+1);
db_memcpy(&tmpstr[x],repl,db_strlen(repl));
x+=db_strlen(repl);
}
}
}
EP;
}
void DoGrep(char *patrn,char *replace)
{
FILE *f,*f3=NULL;
int line=0,x,nl=1;
char str[255],str2[255],nw[255];
char path[255],direc[255],pattern[255],file[255],pat[255];
DIR *dp;
struct dirent *dir;
struct stat sbuf;
SP("DoGrep");
sprintf(pat,"*%s*",patrn);
if (!case_sensitive)
strupr(pat);
while (GetFirstElement(f_list,path))
{
DeleteFirstElement(f_list);
SplitPath(path,direc,pattern);
if ((dp=db_opendir(direc))==NULL)
{
fprintf(stderr,"Can't open directory %s\n",path);
continue;
}
while ((dir=db_readdir(dp))!=NULL)
{
if (dir->d_ino==0)
continue;
if (db_strcmp(direc,".")==0 || db_strcmp(direc,"./")==0)
sprintf(file,dir->d_name);
else
{
if (direc[db_strlen(direc)-1]!='/')
sprintf(file,"%s/%s",direc,dir->d_name);
else
sprintf(file,"%s%s",direc,dir->d_name);
}
if (db_stat(file,&sbuf)<0)
{
if (db_lstat(file,&sbuf)<0)
{
continue;
}
}
if ((sbuf.st_mode&S_IFMT)==S_IFDIR)
{
if (subdirs && db_strcmp(dir->d_name,".")!=0 && db_strcmp(dir->d_name,"..")!=0)
{
sprintf(path,"%s/%s",file,pattern);
AddFirstElement(f_list,path);
}
continue;
}
if (match(pattern,dir->d_name))
{
if ((f=db_fopen(file,"r"))==NULL)
{
printf("Can't open file %s\n",file);
continue;
}
if (do_replace)
{
sprintf(nw,"%s.tmp",file);
if ((f3=db_fopen(nw,"w+"))==NULL)
{
printf("Cannot open file %s\n",nw);
db_fclose(f);
return;
}
}
line=0;
while (db_fgets(str,254,f)!=NULL)
{
if (str[db_strlen(str)-1]=='\n')
{
line++;
str[db_strlen(str)-1]='\0';
nl=1;
}
else
nl=0;
db_strcpy(str2,str);
if (do_replace)
{
ReplaceString(str2,patrn,replace);
if (nl)
db_fprintf(f3,"%s\n",str2);
else
db_fprintf(f3,"%s",str2);
}
if (!case_sensitive)
strupr(str);
if (match(pat,str))
{
for (x=0;x<db_strlen(str2);x++)
{
if (str2[x]=='\t')
str2[x]=' ';
}
printf("%s:%d: %s\n",file,line,str2);
}
}
db_fclose(f);
if (do_replace)
db_fclose(f3);
db_rename(nw,file);
}
}
db_closedir(dp);
}
EP;
}
jex-1.3.7/grepd.c 100644 0 0 24633 6672726717 11710 0 ustar root root #include <Xm/MessageB.h>
#include <Xm/Form.h>
#include <Xm/LabelG.h>
#include <Xm/TextF.h>
#include <Xm/ToggleB.h>
#include <Xm/DrawnB.h>
#include <Xm/PushBG.h>
#include <Xm/List.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <sys/wait.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <unistd.h>
#include "list.h"
#include "jex.h"
extern List f_list;
extern int subdirs,grep_size,grep_file_size,case_sensitive,do_replace;
extern XtAppContext app;
extern Pixmap lov;
extern Widget combo4,combo5,combo6;
void GrepOK(Widget wdg,Editor *e,void *cbs)
{
char *what;
char *where;
char *repl="";
char str[255];
Boolean subdir,casesens,replace;
char *args[20];
int x,pid;
SP("GrepOK");
XtVaGetValues(e->gpat,XmNvalue,&what,NULL);
if (what[0]=='\0')
{
XtFree(what);
EP;
return;
}
UpdateComboBox(combo4,what);
for (x=0;x<editors;x++)
UpdateComboBox(editor[x]->gpat,what);
/* UpdateGrepList(what);*/
XtVaSetValues(e->compile,XmNsensitive,False,NULL);
XtVaSetValues(e->make,XmNsensitive,False,NULL);
XtVaSetValues(e->run,XmNsensitive,False,NULL);
XtVaSetValues(e->grep,XmNsensitive,False,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_0"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_1"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_2"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_3"),XmNsensitive,False,NULL);
#endif
XtVaGetValues(e->gfiles,XmNvalue,&where,NULL);
if (where[0]=='\0')
{
XtFree(where);
where=(char*)XtMalloc(2);
db_strcpy(where,"*");
}
XtVaGetValues(XtNameToWidget(e->gd,"*GrepReplace"),XmNset,&replace,NULL);
if (replace)
{
do_replace=replace?1:0;
#ifndef LESSTIFF
XtVaGetValues(XtNameToWidget(e->gd,"*GrepReplaceField"),XmNvalue,&repl,NULL);
#endif
UpdateComboBox(combo6,repl);
for (x=0;x<editors;x++)
{
#ifndef LESSTIFF
if (XtNameToWidget(editor[x]->gd,"*GrepReplaceField"))
UpdateComboBox(XtNameToWidget(editor[x]->gd,"*GrepReplaceField"),repl);
#endif
}
}
UpdateComboBox(combo5,where);
for (x=0;x<editors;x++)
UpdateComboBox(editor[x]->gfiles,where);
/* UpdateGrepFileList(where);*/
XtVaGetValues(e->gsubd,XmNset,&subdir,NULL);
XtVaGetValues(e->casesens,XmNset,&casesens,NULL);
SplitUp(where,args);
e->t.pid=0;
CreateOutputWindow(e);
XtPopup(e->iod,XtGrabNone);
XMapRaised(XtDisplay(e->iod),XtWindow(e->iod));
XmListDeleteAllItems(e->io_win);
e->x=0;
SetLabel(e,"Grep");
if (db_pipe(e->t.fd)!=0)
{
SetLabel(e,"Too many open files!");
XtVaSetValues(e->compile,XmNsensitive,True,NULL);
XtVaSetValues(e->make,XmNsensitive,True,NULL);
XtVaSetValues(e->run,XmNsensitive,True,NULL);
XtVaSetValues(e->grep,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_0"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_1"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_2"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_3"),XmNsensitive,True,NULL);
#endif
if (replace)
XtFree(repl);
EP;
return;
}
if (db_pipe(e->t.fd2)!=0)
{
SetLabel(e,"Too many open files!");
db_close(e->t.fd[0]);
db_close(e->t.fd[1]);
XtVaSetValues(e->compile,XmNsensitive,True,NULL);
XtVaSetValues(e->make,XmNsensitive,True,NULL);
XtVaSetValues(e->run,XmNsensitive,True,NULL);
XtVaSetValues(e->grep,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_0"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_1"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_2"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_3"),XmNsensitive,True,NULL);
#endif
if (replace)
XtFree(repl);
EP;
return;
}
if (db_pipe(e->t.fd3)!=0)
{
SetLabel(e,"Too many open files!");
db_close(e->t.fd[0]);
db_close(e->t.fd[1]);
db_close(e->t.fd2[0]);
db_close(e->t.fd2[1]);
XtVaSetValues(e->compile,XmNsensitive,True,NULL);
XtVaSetValues(e->make,XmNsensitive,True,NULL);
XtVaSetValues(e->run,XmNsensitive,True,NULL);
XtVaSetValues(e->grep,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_0"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_1"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_2"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_3"),XmNsensitive,True,NULL);
#endif
EP;
return;
}
e->tid=XtAppAddTimeOut(app,500,(XtTimerCallbackProc)SetWorkingLabel,(void*)e);
fcntl(e->t.fd[0],F_SETFL,O_NONBLOCK);
fcntl(e->t.fd2[0],F_SETFL,O_NONBLOCK);
e->t.id=XtAppAddInput(app,e->t.fd[0],(XtPointer)XtInputReadMask,(XtInputCallbackProc)InputCallback1,(XtPointer)e);
e->t.id2=XtAppAddInput(app,e->t.fd2[0],(XtPointer)XtInputReadMask,(XtInputCallbackProc)InputCallback2,(XtPointer)e);
db_strcpy(e->t.name,"Grep");
signal(SIGCHLD,ChildSignal);
if ((pid=fork())>=0)
{
if (pid>0)
{
e->t.pid=pid;
XtFree(what);
XtFree(where);
e->grepped=1;
}
if (pid==0)
{
db_postmortemdump=0;
signal(SIGQUIT,SIG_DFL);
signal(SIGILL,SIG_DFL);
signal(SIGTRAP,SIG_DFL);
signal(SIGIOT,SIG_DFL);
signal(SIGFPE,SIG_DFL);
signal(SIGKILL,SIG_DFL);
signal(SIGBUS,SIG_DFL);
signal(SIGSEGV,SIG_DFL);
signal(SIGTERM,SIG_DFL);
signal(SIGHUP,SIG_DFL);
signal(SIGSTOP,SIG_DFL);
signal(SIGINT,SIG_DFL);
signal(SIGIO,SIG_DFL);
signal(SIGPIPE,SIG_DFL);
signal(SIGUSR1,SIG_DFL);
signal(SIGUSR2,SIG_DFL);
signal(SIGPROF,SIG_DFL);
signal(SIGABRT,SIG_DFL);
db_setbuf(stdout,NULL);
db_dup2(e->t.fd[1],1);
db_dup2(e->t.fd2[1],2);
db_dup2(e->t.fd3[0],0);
subdirs=subdir;
case_sensitive=casesens;
f_list=CreateList(255);
x=0;
while (args[x])
{
db_strcpy(str,args[x]);
AddElement(f_list,str);
x++;
}
DoGrep(what,repl);
DisposeList(f_list);
exit(0);
}
}
else
{
SetLabel(e,"fork() failed!");
XtVaSetValues(e->compile,XmNsensitive,True,NULL);
XtVaSetValues(e->make,XmNsensitive,True,NULL);
XtVaSetValues(e->run,XmNsensitive,True,NULL);
XtVaSetValues(e->grep,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_0"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_1"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_2"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*toolsmenu.button_3"),XmNsensitive,True,NULL);
#endif
EP;
return;
}
EP;}
void GrepCancel(Widget w,Editor *e,void *cbs)
{
SetCurrentWidget(e->text);
}
void ReplaceActive(Widget w,Widget f,XmToggleButtonCallbackStruct *cbs)
{
SP("ReplaceActive");
XtVaSetValues(f,XmNsensitive,(Boolean)cbs->set,NULL);
EP;
}
void Grep(Widget wdg,Editor *e,void *cbs)
{
Widget f,w1,w2,w3,w;
int n;
Arg arg[10];
SP("Grep");
WatchCursor(e,1);
if (e->gd==NULL)
{
e->gd=XmCreateMessageDialog(e->shell,"GrepDialog",NULL,0);
XtAddCallback(e->gd,XmNokCallback,(XtCallbackProc)GrepOK,(void*)e);
XtAddCallback(e->gd,XmNcancelCallback,(XtCallbackProc)GrepCancel,(void*)e);
XtAddCallback(e->gd,XmNhelpCallback,(XtCallbackProc)Help,"Grep");
f=XtVaCreateManagedWidget("GrepForm",xmFormWidgetClass,e->gd,
XmNfractionBase,3,NULL);
w1=XtVaCreateManagedWidget("GrepPatLabel",xmLabelGadgetClass,f,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_FORM,
XmNtopOffset,5,
XmNalignment,XmALIGNMENT_BEGINNING,
NULL);
n=0;
XtSetArg(arg[n],XmNtopAttachment,XmATTACH_FORM);n++;
XtSetArg(arg[n],XmNleftAttachment,XmATTACH_WIDGET);n++;
XtSetArg(arg[n],XmNleftWidget,w1);n++;
XtSetArg(arg[n],XmNrightAttachment,XmATTACH_FORM);n++;
e->gpat=CreateComboBox(f,"GrepPattern",arg,n,10);
InitializeComboBox(e->gpat,combo4);
w3=XtVaCreateManagedWidget("GrepFileLabel",xmLabelGadgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,XtParent(e->gpat),
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_OPPOSITE_WIDGET,
XmNrightWidget,w1,
XmNtopOffset,5,
XmNalignment,XmALIGNMENT_BEGINNING,
NULL);
n=0;
XtSetArg(arg[n],XmNtopAttachment,XmATTACH_WIDGET);n++;
XtSetArg(arg[n],XmNtopWidget,XtParent(e->gpat));n++;
XtSetArg(arg[n],XmNleftAttachment,XmATTACH_WIDGET);n++;
XtSetArg(arg[n],XmNleftWidget,w3);n++;
XtSetArg(arg[n],XmNrightAttachment,XmATTACH_FORM);n++;
e->gfiles=CreateComboBox(f,"GrepFiles",arg,n,10);
InitializeComboBox(e->gfiles,combo5);
w2=XtVaCreateManagedWidget("GrepReplace",xmToggleButtonWidgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,XtParent(e->gfiles),
XmNleftAttachment,XmATTACH_FORM,
NULL);
w3=XtVaCreateManagedWidget("GrepReplaceLabel",xmLabelGadgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,w2,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_OPPOSITE_WIDGET,
XmNrightWidget,w1,
XmNtopOffset,5,
XmNalignment,XmALIGNMENT_BEGINNING,
NULL);
n=0;
XtSetArg(arg[n],XmNtopAttachment,XmATTACH_WIDGET);n++;
XtSetArg(arg[n],XmNtopWidget,w2);n++;
XtSetArg(arg[n],XmNleftAttachment,XmATTACH_WIDGET);n++;
XtSetArg(arg[n],XmNleftWidget,w3);n++;
XtSetArg(arg[n],XmNrightAttachment,XmATTACH_FORM);n++;
w=CreateComboBox(f,"GrepReplaceField",arg,n,10);
InitializeComboBox(w,combo6);
XtAddCallback(w2,XmNvalueChangedCallback,(XtCallbackProc)ReplaceActive,(void*)w);
e->gsubd=XtVaCreateManagedWidget("GrepSubDirs",xmToggleButtonWidgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,XtParent(w),
XmNleftAttachment,XmATTACH_FORM,
NULL);
e->casesens=XtVaCreateManagedWidget("GrepCase",xmToggleButtonWidgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->gsubd,
XmNleftAttachment,XmATTACH_FORM,
NULL);
}
XtManageChild(e->gd);
WatchCursor(e,0);
EP;
}
jex-1.3.7/help.c 100644 0 0 24102 6672726717 11526 0 ustar root root #include <Xm/Xm.h>
#include <Xm/MessageB.h>
#include <Xm/Text.h>
#include <Xm/List.h>
#include <Xm/DialogS.h>
#include <Xm/Protocols.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "list.h"
#include "jex.h"
#include "help.h"
#include "helpstack.h"
extern Widget top;
List help_topics=NULL;
extern Pixmap pixmap;
Widget help_dialog=NULL,textw,tlist=NULL,tshell=NULL,ad=NULL;
HStack *hst=NULL;
char current_topic[40],helpfile[255];
List l=NULL;
extern XtAppContext app;
void SetZeroPos(Widget w,void *id)
{
SP("SetZeroPos");
XmTextSetInsertionPosition(w,0);
XmTextShowPosition(w,0);
EP;
}
/* Checks if the user has clicked on a link, if so, the current link is pushed
on the stack and the next topic is displayed.*/
void CheckLink(Widget w,List data,XmTextVerifyCallbackStruct *cbs)
{
int pos=cbs->newInsert;
HelpText ht;
HStackElem el;
SP("CheckLink");
if (GetFirstElement(data,&ht))
{
do
{
if (pos>=ht.start && pos<=ht.end)
{
XtRemoveCallback(w,XmNmotionVerifyCallback,(XtCallbackProc)CheckLink,data);
db_strncpy(el.data,current_topic,40);
Push(hst,el);
XtSetSensitive(XmMessageBoxGetChild(help_dialog,XmDIALOG_CANCEL_BUTTON),True);
DisplayTopic(w,ht.link,helpfile,data);
XtAppAddTimeOut(app,0,(XtTimerCallbackProc)SetZeroPos,w);
EP;
return;
}
} while (GetNextElement(data,&ht));
}
EP;
}
/* Display a new topic in the help window. The text is loaded from the file. */
void DisplayTopic(Widget w,char *topic,char *file,List l)
{
FILE *f;
HelpTopic htop;
HelpText ht,ht2;
char *str;
XmTextPosition position=0;
int found=0,first;
SP("DisplayTopic");
/* XmTextSetString(w,""); */
if ((f=db_fopen(file,"r"))==NULL)
{
/* XmTextSetString(w,"Cannot open help file!");*/
HelpError("Cannot open help file!");
XtAddCallback(w,XmNmotionVerifyCallback,(XtCallbackProc)CheckLink,l);
EP;
return;
}
if (GetFirstElement(help_topics,&htop))
{
do
{
if (db_strcmp(topic,htop.topic)==0)
{
found=1;
break;
}
} while (GetNextElement(help_topics,&htop));
if (!found)
{
/* XmTextSetString(w,"Topic not found!");*/
HelpError("Topic not found!");
XtAddCallback(w,XmNmotionVerifyCallback,(XtCallbackProc)CheckLink,l);
db_fclose(f);
EP;
return;
}
}
db_strncpy(current_topic,topic,40);
ClearList(l);
XmTextSetString(w,"");
if (GetFirstElement(htop.list,&ht))
{
first=ht.start;
do
{
db_fseek(f,ht.start,0);
str=(char *)db_malloc(ht.end-ht.start+1);
db_fread(str,ht.end-ht.start,1,f);
str[ht.end-ht.start]=0;
XmTextReplace(w,position,position+ht.end-ht.start,str);
ht2.start=position;
position+=ht.end-ht.start;
ht2.end=position;
db_strcpy(ht2.link,ht.link);
db_free(str);
if (ht.type==LINK_TEXT)
{
XmTextSetHighlight(w,ht2.start,ht2.end,XmHIGHLIGHT_SECONDARY_SELECTED);
AddElement(l,&ht2);
}
/* XmTextSetInsertionPosition(w,0);
XmTextShowPosition(w,0);*/
} while (GetNextElement(htop.list,&ht));
}
XmTextSetInsertionPosition(w,0);
XmTextShowPosition(w,0);
XtAddCallback(w,XmNmotionVerifyCallback,(XtCallbackProc)CheckLink,l);
db_fclose(f);
EP;
}
void help_ok(Widget w,List data,void *cbs)
{
SP("help_ok");
/* DisposeList(data);
l=NULL;
XtPopdown(XtParent(help_dialog));
help_dialog=NULL; */
XtUnmanageChild(help_dialog);
EP;
}
void help_cancel(Widget w,List data,void *cbs)
{
HStackElem el;
SP("help_cancel");
Pop(hst,&el);
XtRemoveCallback(textw,XmNmotionVerifyCallback,(XtCallbackProc)CheckLink,data);
if (StackSize(hst)==0)
XtSetSensitive(XmMessageBoxGetChild(help_dialog,XmDIALOG_CANCEL_BUTTON),False);
DisplayTopic(textw,el.data,helpfile,data);
EP;
}
void Help(Widget widget,char *c,void *d)
{
Arg arg[7];
XmTextScanType s_array[5];
/* Atom wm_delete;*/
SP("Help");
if (help_dialog==NULL)
{
hst=CreateHStack();
if ((help_topics=CompileHelp())==NULL)
{
HelpError("Can't find help file!");
EP;
return;
}
l=CreateList(sizeof(HelpText));
XtSetArg(arg[1],XmNdeleteResponse,XmDO_NOTHING);
XtSetArg(arg[0],XmNautoUnmanage,False);
help_dialog=XmCreateMessageDialog(top,"Help",arg,1);
XtAddCallback(help_dialog,XmNokCallback,help_ok,l);
XtAddCallback(help_dialog,XmNcancelCallback,help_cancel,l);
XtAddCallback(help_dialog,XmNhelpCallback,Index,NULL);
XtSetSensitive(XmMessageBoxGetChild(help_dialog,XmDIALOG_CANCEL_BUTTON),False);
if (help_topics==0)
XtSetSensitive(XmMessageBoxGetChild(help_dialog,XmDIALOG_HELP_BUTTON),False);
s_array[0]=XmSELECT_POSITION;
s_array[1]=XmSELECT_POSITION;
s_array[2]=XmSELECT_POSITION;
s_array[3]=XmSELECT_POSITION;
s_array[4]=XmSELECT_POSITION;
XtSetArg(arg[0],XmNeditable,False);
XtSetArg(arg[1],XmNeditMode,XmMULTI_LINE_EDIT);
XtSetArg(arg[2],XmNselectionArray,s_array);
XtSetArg(arg[3],XmNselectionArrayCount,5);
XtSetArg(arg[4],XmNcursorPositionVisible,False);
XtSetArg(arg[5],XmNwordWrap,True);
XtSetArg(arg[6],XmNscrollHorizontal,False);
textw=XmCreateScrolledText(help_dialog,"help_text",arg,7);
/* wm_delete=XmInternAtom(XtDisplay(help_dialog),"WM_DELETE_WINDOW",False);
XmAddWMProtocolCallback(XtParent(help_dialog),wm_delete,help_ok,NULL);*/
XtManageChild(textw);
XtManageChild(help_dialog);
}
else
{
HStackElem el;
db_strncpy(el.data,current_topic,40);
Push(hst,el);
XtSetSensitive(XmMessageBoxGetChild(help_dialog,XmDIALOG_CANCEL_BUTTON),True);
if (help_topics==0)
XtSetSensitive(XmMessageBoxGetChild(help_dialog,XmDIALOG_HELP_BUTTON),False);
XtRemoveCallback(textw,XmNmotionVerifyCallback,(XtCallbackProc)CheckLink,l);
XtManageChild(help_dialog);
}
DisplayTopic(textw,c,helpfile,l);
EP;
}
/* Callback for the index, when the user selects a topic. */
void list_select(Widget w,void *data,XmListCallbackStruct *cbs)
{
HelpTopic htop;
SP("list_select");
GetNthElement(help_topics,cbs->item_position-1,&htop);
Help(NULL,htop.topic,NULL);
XtPopdown(tshell);
EP;
}
void index_close(Widget w,void *d,void *cbs)
{
SP("index_close");
XtPopdown(tshell);
EP;
}
int SortProc(const void *n1,const void *n2)
{
int x;
SP("SortProc");
x=db_strcmp(((HelpTopic*)n1)->topic_text,((HelpTopic*)n2)->topic_text);
if (x<0)
{
EP;
return -1;
}
else if (x>0)
{
EP;
return 1;
}
EP;
return 0;
}
void Index(Widget w,void *data,void *cbs)
{
XmStringTable tops;
int x=0,n;
HelpTopic htop;
Atom wm_delete;
SP("Index");
if (tshell==NULL)
{
n=NumberElements(help_topics);
if (n==0)
{
EP;
return;
}
tops=(XmStringTable)XtMalloc(n*sizeof(XmString));
SortList(help_topics,SortProc);
if (GetFirstElement(help_topics,&htop))
{
do
{
tops[x++]=XmStringCreateLocalized(htop.topic_text);
} while (GetNextElement(help_topics,&htop));
}
tshell=XtVaCreatePopupShell("Topics",xmDialogShellWidgetClass,top,
XmNdeleteResponse,XmDO_NOTHING,
XmNallowShellResize,True,
NULL);
tlist=XmCreateScrolledList(tshell,"help_topics",NULL,0);
XtVaSetValues(tlist,XmNitems,tops,
XmNitemCount,n,
XmNdeleteResponse,XmDO_NOTHING,
XmNselectionPolicy,XmBROWSE_SELECT,
NULL);
XtAddCallback(tlist,XmNdefaultActionCallback,(XtCallbackProc)list_select,NULL);
wm_delete=XmInternAtom(XtDisplay(tshell),"WM_DELETE_WINDOW",False);
XmAddWMProtocolCallback(tshell,wm_delete,index_close,NULL);
XtManageChild(tlist);
XtManageChild(tshell);
}
else
XtPopup(tshell,XtGrabNone);
EP;
}
int FindHelpFile(char *helpfile,char *file)
{
char *env,*pos,*orig;
FILE *f;
SP("FindHelp");
if (!getenv("PATH"))
{
EP;
return 0;
}
orig=env=db_strdup(getenv("PATH"));
pos=db_strchr(env,':');
while (pos)
{
*pos=0;
sprintf(file,"%s/%s",env,helpfile);
if ((f=fopen(file,"r"))!=NULL)
{
fclose(f);
db_free(orig);
EP;
return 1;
}
env=pos+1;
pos=db_strchr(env,':');
}
sprintf(file,"%s/%s",env,helpfile);
if ((f=fopen(file,"r"))!=NULL)
{
fclose(f);
db_free(orig);
EP;
return 1;
}
db_free(orig);
EP;
return 0;
}
List CompileHelp(void)
{
FILE *f;
char ch,str[100];
int start,end,eof=0;
HelpText ht;
HelpTopic htop;
List l;
SP("CompileHelp");
if (!FindHelpFile("jex.hlp",helpfile))
{
EP;
return NULL;
}
if ((f=db_fopen(helpfile,"r"))==NULL)
{
EP;
return NULL;
}
l=CreateList(sizeof(HelpTopic));
while (!db_feof(f))
{
start=db_ftell(f);
fscanf(f,"%s",str);
if (db_strcmp(str,".topic")==0)
{
htop.list=CreateList(sizeof(HelpText));
fscanf(f,"%s",htop.topic);
ht.start=start=db_ftell(f)+1;
while ('\n'!=db_fgetc(f));
while ((ch=db_fgetc(f))==' ' || ch=='\t' || ch=='\n');
db_ungetc(ch,f);
db_fgets(htop.topic_text,100,f);
htop.topic_text[strlen(htop.topic_text)-1]=0;
AddElement(l,&htop);
for (;;)
{
ch=db_fgetc(f);
if (db_feof(f))
{
end=db_ftell(f);
eof=1;
break;
}
if (ch=='.')
{
end=db_ftell(f)-1;
fscanf(f,"%s",str);
db_fseek(f,end,0);
if (db_strcmp(str,"topic")==0)
break;
else
db_fseek(f,end+1,0);
}
else if (ch=='{')
{
end=db_ftell(f)-1;
ht.end=end;
ht.type=NORMAL_TEXT;
AddElement(htop.list,&ht);
ht.start=end+1;
ht.type=LINK_TEXT;
do
{
ch=db_fgetc(f);
} while (ch!=':' && ch!='}');
ht.end=db_ftell(f)-1;
if (ch=='}')
db_fseek(f,end+1,0);
end=0;
do
{
ch=db_fgetc(f);
if (ch!=' ' && ch!='}')
ht.link[end++]=ch;
} while (ch!='}');
ht.link[end]=0;
AddElement(htop.list,&ht);
ht.start=start=db_ftell(f);
}
else if (ch=='\\')
{
ht.end=db_ftell(f)-1;
ht.type=NORMAL_TEXT;
AddElement(htop.list,&ht);
db_fgetc(f);
ht.start=db_ftell(f)-1;
}
}
ht.type=NORMAL_TEXT;
ht.end=end;
AddElement(htop.list,&ht);
if (eof)
break;
}
else
{
db_fclose(f);
EP;
return NULL;
}
}
db_fclose(f);
EP;
return l;
}
jex-1.3.7/helpstack.c 100644 0 0 3304 6672726717 12535 0 ustar root root #include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "helpstack.h"
#include "jex.h"
HStack *CreateHStack(void)
{
HStack *hst;
SP("CreateHStack");
if ((hst=(HStack*)db_malloc(sizeof(HStack)))==NULL)
{
EP;
return NULL;
}
hst->nelems=0;
hst->last=NULL;
EP;
return hst;
}
void DestroyHStack(HStack *hst)
{
HStackElement *ptr;
SP("DestroyHStack");
if (!hst)
{
EP;
return;
}
ptr=hst->last;
while (hst->last && ptr->prev)
{
hst->last=ptr->prev;
db_free(ptr);
ptr=hst->last;
}
if (hst->last)
db_free(hst->last);
db_free(hst);
EP;
}
void StackClear(HStack *hst)
{
HStackElement *ptr;
SP("StackClear");
if (!hst)
{
EP;
return;
}
ptr=hst->last;
while (hst->last && ptr->prev)
{
hst->last=ptr->prev;
db_free(ptr);
ptr=hst->last;
}
if (hst->last)
db_free(hst->last);
hst->last=NULL;
hst->nelems=0;
EP;
}
int Push(HStack *hst,HStackElem data)
{
HStackElement *ptr;
SP("Push");
if (!hst)
{
EP;
return 0;
}
if ((ptr=(HStackElement *)db_malloc(sizeof(HStackElement)))==NULL)
{
EP;
return -1;
}
db_memcpy(&ptr->s,&data,sizeof(HStackElem));
ptr->prev=hst->last;
hst->last=ptr;
hst->nelems++;
EP;
return hst->nelems-1;
}
int Pop(HStack *hst,HStackElem *data)
{
HStackElement *ptr;
SP("Pop");
if (!hst || !data)
{
EP;
return 0;
}
if (hst->nelems==0)
{
EP;
return 0;
}
db_memcpy(data,&hst->last->s,sizeof(HStackElem));
ptr=hst->last;
hst->last=hst->last->prev;
db_free(ptr);
hst->nelems--;
EP;
return hst->nelems;
}
int StackSize(HStack *hst)
{
SP("StackSize");
if (!hst)
{
EP;
return 0;
}
EP;
return hst->nelems;
}
jex-1.3.7/history.c 100644 0 0 3665 6672726717 12272 0 ustar root root #include <Xm/PushB.h>
#include <Xm/Xm.h>
#include <Xm/RowColumn.h>
#include <Xm/PushBG.h>
#include "jex.h"
int fl_size=0;
char fl_files[FILELIST][255];
void LoadOldFile(Editor *e)
{
SP("LoadOldFile");
if (loadfile(e,e->choice,0,1))
LoadError(e);
EP;
}
void OpenOldFile(Widget w,Editor *e,void *cbs)
{
int x;
SP("OpenOldFile");
for (x=0;x<fl_size;x++)
{
if (e->filelist[x]==w)
{
if (e->new_window)
{
CreateNewEditor();
if (loadfile(editor[editors-1],fl_files[x],0,1))
LoadError(editor[editors-1]);
}
else
{
db_strcpy(e->choice,fl_files[x]);
if (e->saved)
LoadOldFile(e);
else
AskToSave(e,(void*)LoadOldFile);
}
break;
}
}
EP;
}
void UpdateFileList(char *file)
{
int x,end,exists=0,e;
XmString xstr;
SP("UpdateFileList");
end=fl_size;
if (file && file[0])
{
for (x=0;x<fl_size;x++)
{
if (db_strcmp(fl_files[x],file)==0)
{
end=x+1;
exists=1;
break;
}
}
if (fl_size<FILELIST && !exists)
{
for (x=0;x<editors;x++)
{
editor[x]->filelist[fl_size]=XtVaCreateManagedWidget("filebutton",
xmPushButtonGadgetClass,editor[x]->filemenu,NULL);
XtAddCallback(editor[x]->filelist[fl_size],XmNactivateCallback,(XtCallbackProc)OpenOldFile,(void*)editor[x]);
}
fl_size++;
end=fl_size;
}
for (x=end-2;x>=0;x--)
db_strcpy(fl_files[x+1],fl_files[x]);
db_strcpy(fl_files[0],file);
}
for (x=0;x<end;x++)
{
xstr=XmStringCreateLocalized(fl_files[x]);
for (e=0;e<editors;e++)
{
XtVaSetValues(editor[e]->filelist[x],XmNlabelString,xstr,NULL);
}
XmStringFree(xstr);
}
EP;
}
void Reload(Editor *e)
{
SP("Reload");
if (e->filename[0])
{
db_strcpy(e->choice,e->filename);
if (e->saved)
LoadOldFile(e);
else
AskToSave(e,(void*)LoadOldFile);
}
EP;
}
jex-1.3.7/jex.c 100644 0 0 100317 6672727056 11404 0 ustar root root #include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/Form.h>
#include <Xm/RowColumn.h>
#include <Xm/Text.h>
#include <Xm/TextF.h>
#include <Xm/PushBG.h>
#include <Xm/PushB.h>
#include <Xm/DrawnB.h>
#include <Xm/ArrowBG.h>
#include <Xm/LabelG.h>
#include <Xm/ArrowB.h>
#include <Xm/Protocols.h>
#include <X11/Shell.h>
#include <sys/types.h>
#include <sys/time.h>
#include "fallbacks.h"
#include "jex.h"
#include "xpm.h"
#include "jex.xpm"
#include "lov.xbm"
#include "new.xpm"
#include "open.xpm"
#include "save.xpm"
#include "save2.xpm"
#include "clear.xpm"
#include "clone.xpm"
#include "compile.xpm"
#include "copy.xpm"
#include "cut.xpm"
#include "grep.xpm"
#include "left.xpm"
#include "make.xpm"
#include "newwind.xpm"
#include "paste.xpm"
#include "redo.xpm"
#include "right.xpm"
#include "undo.xpm"
#include "undo2.xpm"
#include "redo2.xpm"
#include "compile2.xpm"
#include "make2.xpm"
#include "grep2.xpm"
#include "up.xpm"
#include "down.xpm"
#include "setmarker.xpm"
#include "gotomarker.xpm"
#include "gotomarker2.xpm"
#include "caps.xpm"
#include "lows.xpm"
#include "down2.xpm"
#include "run.xpm"
#include "run2.xpm"
#include "gotoline.xpm"
#ifndef MAX
#define MAX(x,y) (((x)>(y))?(x):(y))
#endif
Widget top,combo1,combo2,combo3,combo4,combo5,combo6;
XtAppContext app;
int editors=0;
Editor *editor[MAXEDITORS];
Pixmap pixmap,lov,_new,_open,_save,_save2,_clear,_clone,_compile,_copy,_cut;
Pixmap _grep,_left,_make,_newwind,_paste,_redo,_right,_undo,_undo2,_redo2;
Pixmap _compile2,_make2,_grep2,_up,_down,_lows,_caps,_setmarker,_gotomarker;
Pixmap _gotomarker2,_down2,_run,_run2,_gotoline;
extern int fl_size,find_size,repl_size;
OwnRes ownres;
XtResource resources[]={
{"history_in_home_dir","History_In_Home_Dir",XtRBoolean,sizeof(Boolean),XtOffsetOf(OwnRes,histhome),XtRString,"False"},
{"settings_in_home_dir","Settings_In_Home_Dir",XtRBoolean,sizeof(Boolean),XtOffsetOf(OwnRes,setthome),XtRString,"False"}
};
void WriteTime(Editor *e,XtIntervalId id)
{
char timebuffer[100];
time_t t;
XmString xstr;
struct tm *lt;
SP("WriteTime");
time(&t);
strftime(timebuffer, 100, "%d/%m/%Y %H:%M",
localtime(&t));
xstr=XmStringCreateLocalized(timebuffer);
XtVaSetValues(e->clock,XmNlabelString,xstr,NULL);
XmStringFree(xstr);
lt=localtime(&t);
if (lt->tm_sec>60 || lt->tm_sec<0)
lt->tm_sec=59;
e->tid2=XtAppAddTimeOut(app,MAX(0,(60-lt->tm_sec)*1000),(XtTimerCallbackProc)WriteTime,e);
EP;
}
void CreateEditor(Widget top)
{
Widget mf,rc1,rc2,find,repl,aup,adown,replall;
Widget w,_goto,lows,caps;
Arg args[10];
Atom atom;
Editor *e;
int x,n;
SP("CreateEditor");
if (editors>=MAXEDITORS)
{
EP;
return;
}
e=(Editor*)db_malloc(sizeof(Editor));
editor[editors]=e;
e->undolist=CreateList(sizeof(Undo_T));
e->redolist=CreateList(sizeof(Undo_T));
mf=XtVaCreateManagedWidget("mainform",xmFormWidgetClass,top,NULL);
e->mb=XmVaCreateSimpleMenuBar(mf,"menubar",
XmVaCASCADEBUTTON,NULL,0,
XmVaCASCADEBUTTON,NULL,0,
XmVaCASCADEBUTTON,NULL,0,
XmVaCASCADEBUTTON,NULL,0,
XmVaCASCADEBUTTON,NULL,0,
XmVaCASCADEBUTTON,NULL,0,
XmVaCASCADEBUTTON,NULL,0,
XmVaCASCADEBUTTON,NULL,0,
XmNrightAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_FORM,
XmNtopAttachment,XmATTACH_FORM,
NULL);
e->filemenu=XmVaCreateSimplePulldownMenu(e->mb,"filemenu",0,file_cb,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaSEPARATOR,
NULL);
XmVaCreateSimplePulldownMenu(e->mb,"editmenu",1,edit_cb,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
NULL);
XmVaCreateSimplePulldownMenu(e->mb,"optionmenu",2,option_cb,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaRADIOBUTTON,NULL,0,NULL,NULL,
NULL);
e->bookmarkmenu=XmVaCreateSimplePulldownMenu(e->mb,"bookmarkmenu",3,bookmark_cb,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaSEPARATOR,
NULL);
XmVaCreateSimplePulldownMenu(e->mb,"toolsmenu",4,tools_cb,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
NULL);
XmVaCreateSimplePulldownMenu(e->mb,"viewmenu",5,view_cb,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
NULL);
w=XmVaCreateSimplePulldownMenu(e->mb,"helpmenu",7,help_cb,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
XmVaSEPARATOR,
XmVaPUSHBUTTON,NULL,0,NULL,NULL,
NULL);
#ifndef LESSTIFF
if ((w=XtNameToWidget(e->mb,"button_7"))!=NULL)
XtVaSetValues(e->mb,XmNmenuHelpWidget,w,NULL);
#endif
XtManageChild(e->mb);
rc1=XtVaCreateManagedWidget("toprc",xmFormWidgetClass,mf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->mb,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_NONE,
XmNfractionBase,10,
NULL);
e->rowcol=XtVaCreateManagedWidget("1:1",xmLabelGadgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_NONE,
XmNrightAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_FORM,
NULL);
w=XtVaCreateManagedWidget("DBNew",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_new,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)DoNew,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,False,(XtEventHandler)SmallHelp,(void*)1);
XtAddEventHandler(w,LeaveWindowMask,False,(XtEventHandler)RemoveSmallHelp,NULL);
w=XtVaCreateManagedWidget("DBOpen",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_open,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)DoOpen,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)2);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
e->save=XtVaCreateManagedWidget("DBSave",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_save,
XmNlabelInsensitivePixmap,_save2,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(e->save,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(e->save,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)3);
XtAddEventHandler(e->save,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
w=XtVaCreateManagedWidget("DBNewWind",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,e->save,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_newwind,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
XmNleftOffset,10,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)DoNewWindow,NULL);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)4);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
w=XtVaCreateManagedWidget("DBClone",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_clone,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)DoClone,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)5);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
w=XtVaCreateManagedWidget("DBCut",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_cut,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
XmNleftOffset,10,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)CutText,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)6);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
w=XtVaCreateManagedWidget("DBCopy",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_copy,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)CopyText,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)7);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
w=XtVaCreateManagedWidget("DBPaste",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_paste,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)PasteText,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)8);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
w=XtVaCreateManagedWidget("DBClear",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_clear,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)ClearSelection,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)9);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
w=XtVaCreateManagedWidget("DBUndo",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_undo,
XmNlabelInsensitivePixmap,_undo2,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
XmNleftOffset,10,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)UndoAction,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)10);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
e->undo=w;
w=XtVaCreateManagedWidget("DBRedo",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_redo,
XmNlabelInsensitivePixmap,_redo2,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RedoAction,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)11);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
e->redo=w;
w=XtVaCreateManagedWidget("DBCompile",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_compile,
XmNlabelInsensitivePixmap,_compile2,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
XmNleftOffset,10,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)Compile,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)14);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
e->compile=w;
w=XtVaCreateManagedWidget("DBMake",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_make,
XmNlabelInsensitivePixmap,_make2,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)Make,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)15);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
e->make=w;
w=XtVaCreateManagedWidget("DBRun",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_run,
XmNlabelInsensitivePixmap,_run2,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)Run,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)26);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
e->run=w;
w=XtVaCreateManagedWidget("DBGrep",xmDrawnButtonWidgetClass,rc1,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_grep,
XmNlabelInsensitivePixmap,_grep2,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)Grep,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)16);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
e->grep=w;
e->clock=XtNameToWidget(e->mb,"button_6");
XtAddCallback(e->save,XmNactivateCallback,(XtCallbackProc)Save,e);
SetSave(e,False);
rc2=XtVaCreateManagedWidget("bottomform",xmFormWidgetClass,mf,
XmNtopAttachment,XmATTACH_NONE,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_FORM,
XmNhorizontalSpacing,0,
XmNfractionBase,20,
NULL);
repl=XtVaCreateManagedWidget("Replace",xmLabelGadgetClass,rc2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,10,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_FORM,
XmNalignment,XmALIGNMENT_BEGINNING,
NULL);
find=XtVaCreateManagedWidget("Find",xmLabelGadgetClass,rc2,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_OPPOSITE_WIDGET,
XmNrightWidget,repl,
XmNbottomAttachment,XmATTACH_POSITION,
XmNbottomPosition,10,
XmNalignment,XmALIGNMENT_BEGINNING,
NULL);
n=0;
XtSetArg(args[n],XmNtopAttachment,XmATTACH_FORM);n++;
XtSetArg(args[n],XmNleftAttachment,XmATTACH_WIDGET);n++;
XtSetArg(args[n],XmNleftWidget,find);n++;
XtSetArg(args[n],XmNrightAttachment,XmATTACH_NONE);n++;
XtSetArg(args[n],XmNbottomAttachment,XmATTACH_POSITION);n++;
XtSetArg(args[n],XmNbottomPosition,10);n++;
e->findf=CreateComboBox(rc2,"findfield",args,n,10);
InitializeComboBox(e->findf,editor[0]->findf);
XtAddCallback(e->findf,XmNactivateCallback,(XtCallbackProc)FindDown,e);
n=0;
XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET);n++;
XtSetArg(args[n],XmNtopWidget,XtParent(e->findf));n++;
XtSetArg(args[n],XmNleftAttachment,XmATTACH_WIDGET);n++;
XtSetArg(args[n],XmNleftWidget,repl);n++;
XtSetArg(args[n],XmNrightAttachment,XmATTACH_NONE);n++;
XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM);n++;
e->replf=CreateComboBox(rc2,"replacefield",args,n,10);
InitializeComboBox(e->replf,editor[0]->replf);
XtAddCallback(e->replf,XmNactivateCallback,(XtCallbackProc)Replace,e);
adown=XtVaCreateManagedWidget("DBDown",xmDrawnButtonWidgetClass,rc2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,1,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,XtParent(e->findf),
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_down,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
XmNleftOffset,2,
NULL);
XtAddCallback(adown,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(adown,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)17);
XtAddEventHandler(adown,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
XtAddCallback(adown,XmNactivateCallback,(XtCallbackProc)FindDown,e);
aup=XtVaCreateManagedWidget("DBUp",xmDrawnButtonWidgetClass,rc2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,1,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,adown,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_up,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(aup,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(aup,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)18);
XtAddEventHandler(aup,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
XtAddCallback(aup,XmNactivateCallback,(XtCallbackProc)FindUp,e);
adown=XtVaCreateManagedWidget("DBDown2",xmDrawnButtonWidgetClass,rc2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,11,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,XtParent(e->replf),
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_down,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
XmNleftOffset,2,
NULL);
XtAddEventHandler(adown,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)19);
XtAddEventHandler(adown,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
XtAddCallback(adown,XmNactivateCallback,(XtCallbackProc)Replace,e);
XtAddCallback(adown,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
replall=XtVaCreateManagedWidget("DBDown3",xmDrawnButtonWidgetClass,rc2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,11,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,adown,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_down2,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddEventHandler(replall,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)20);
XtAddEventHandler(replall,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
XtAddCallback(replall,XmNactivateCallback,(XtCallbackProc)ReplaceAll,e);
XtAddCallback(replall,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
w=XtVaCreateManagedWidget("DBLeft",xmDrawnButtonWidgetClass,rc2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,1,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,aup,
XmNleftOffset,10,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_left,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
XmNleftOffset,10,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)ShiftLeft,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)12);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
w=XtVaCreateManagedWidget("DBRight",xmDrawnButtonWidgetClass,rc2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,1,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_right,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)ShiftRight,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)13);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
caps=XtVaCreateManagedWidget("Caps",xmDrawnButtonWidgetClass,rc2,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_caps,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,1,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNleftOffset,10,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(caps,XmNactivateCallback,(XtCallbackProc)CapsSelection,e);
XtAddCallback(caps,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(caps,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)21);
XtAddEventHandler(caps,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
lows=XtVaCreateManagedWidget("Lows",xmDrawnButtonWidgetClass,rc2,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_lows,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,1,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,caps,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(lows,XmNactivateCallback,(XtCallbackProc)LowsSelection,e);
XtAddCallback(lows,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(lows,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)22);
XtAddEventHandler(lows,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
_goto=XtVaCreateManagedWidget("Goto",xmDrawnButtonWidgetClass,rc2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,11,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,replall,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNleftOffset,10,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_gotoline,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(_goto,XmNactivateCallback,(XtCallbackProc)GotoLine,e);
XtAddCallback(_goto,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(_goto,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)27);
XtAddEventHandler(_goto,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
n=0;
XtSetArg(args[n],XmNtopAttachment,XmATTACH_POSITION);n++;
XtSetArg(args[n],XmNtopPosition,10);n++;
XtSetArg(args[n],XmNleftAttachment,XmATTACH_WIDGET);n++;
XtSetArg(args[n],XmNleftWidget,_goto);n++;
XtSetArg(args[n],XmNrightAttachment,XmATTACH_NONE);n++;
XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM);n++;
e->gotofield=CreateComboBox(rc2,"gotofield",args,n,10);
InitializeComboBox(e->gotofield,editor[0]->gotofield);
XtAddCallback(e->gotofield,XmNactivateCallback,(XtCallbackProc)GotoLine,e);
w=XtVaCreateManagedWidget("DBSetMarker",xmDrawnButtonWidgetClass,rc2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,1,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,lows,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_setmarker,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
XmNleftOffset,10,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)SetMarker,e);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)23);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
w=XtVaCreateManagedWidget("DBGotoMarker",xmDrawnButtonWidgetClass,rc2,
XmNtopAttachment,XmATTACH_POSITION,
XmNtopPosition,1,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
XmNlabelType,XmPIXMAP,
XmNlabelPixmap,_gotomarker,
XmNlabelInsensitivePixmap,_gotomarker2,
XmNhighlightThickness,1,
XmNpushButtonEnabled,True,
NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveSmallHelp,(void*)1);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)GotoMarker,e);
XtAddEventHandler(w,EnterWindowMask,True,(XtEventHandler)SmallHelp,(void*)24);
XtAddEventHandler(w,LeaveWindowMask,True,(XtEventHandler)RemoveSmallHelp,(void*)0);
n=0;
XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET);n++;
XtSetArg(args[n],XmNtopWidget,rc1);n++;
XtSetArg(args[n],XmNbottomAttachment,XmATTACH_WIDGET);n++;
XtSetArg(args[n],XmNbottomWidget,rc2);n++;
XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM);n++;
XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM);n++;
XtSetArg(args[n],XmNeditMode,XmMULTI_LINE_EDIT);n++;
/* XtSetArg(args[7],XmNtranslations,XtParseTranslationTable(translations));*/
e->text=XmCreateScrolledText(mf,"text",args,n);
XtManageChild(e->text);
e->tmpsource=XtVaCreateWidget("tmpsource",xmTextWidgetClass,mf,NULL);
XtAddCallback(e->text,XmNvalueChangedCallback,(XtCallbackProc)ValueChanged,e);
XtAddCallback(e->text,XmNmotionVerifyCallback,(XtCallbackProc)FindRowCol,e);
XtAddCallback(e->text,XmNmodifyVerifyCallback,(XtCallbackProc)DeleteText,e);
e->pm=XmVaCreateSimplePopupMenu(e->text/*mf*/,"Popup",(XtCallbackProc)popup_cb,
XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
XmVaPUSHBUTTON,NULL,NULL,NULL,NULL,
NULL);
for (x=0;x<fl_size;x++)
{
e->filelist[x]=XtVaCreateManagedWidget("filebutton",
xmPushButtonGadgetClass,e->filemenu,NULL);
XtAddCallback(e->filelist[x],XmNactivateCallback,(XtCallbackProc)OpenOldFile,(void*)e);
}
atom=XmInternAtom(XtDisplay(top),"WM_DELETE_WINDOW",False);
XmAddWMProtocolCallback(top,atom,(XtCallbackProc)Quit,e);
XtVaSetValues(top,XmNiconPixmap,pixmap,NULL);
NoUndo(e);
e->shell=top;
e->ats=NULL;
e->fd=NULL;
e->iod=NULL;
e->saved=1;
e->fs=NULL;
e->undosize=0;
e->changes=0;
e->lastaction=0;
e->redosize=0;
e->le=NULL;
e->se=NULL;
e->sd=NULL;
e->err=NULL;
e->ato=NULL;
e->gd=NULL;
e->filename[0]='\0';
e->tid2=0;
e->tid3=0;
e->tid4=0;
e->tid5=0;
e->tid6=0;
e->tid7=0;
db_strcpy(e->print_command,"lpr");
db_strcpy(e->compile_command,"cc -c %s");
db_strcpy(e->make_command,"make");
db_strcpy(e->run_command,"");
e->auto_indent=1;
e->undolevels=100;
e->tid=0;
e->workcount=0;
e->locked=0;
e->read_only=0;
e->abd=NULL;
e->std=NULL;
e->oldsource=0;
e->t.pid=0;
e->new_window=0;
e->blockundo=1;
e->autosave=0;
e->autosavetimeout=5;
e->ce_count=0;
e->compiler_error=NULL;
WriteTime(e,0);
LoadSettings(e);
RemoveMarker(e);
UpdateEditorBookmarks(e);
editors++;
UpdateFileList(NULL);
UpdateEditorDialog();
EP;
}
void CreateNewEditor(void)
{
Widget shell;
SP("CreateNewEditor");
shell=XtVaAppCreateShell("jex","Jex",topLevelShellWidgetClass,XtDisplay(top),
XmNallowShellResize,True,
NULL);
CreateEditor(shell);
XtVaSetValues(shell,XmNallowShellResize,False,NULL);
XtPopup(shell,XtGrabNone);
SetCurrentWidget(editor[editors-1]->text);
EP;
}
int main(argc,argv)
int argc;
char *argv[];
{
XtActionsRec actions[2];
int x,y=0;
Pixel fg,bg;
SP("main");
top=XtVaAppInitialize(&app,"Jex",NULL,0,&argc,argv,fallbacks,NULL);
XtGetApplicationResources(top,&ownres,resources,XtNumber(resources),NULL,0);
combo1=CreateComboBox(NULL,"FSFilterField",NULL,0,10);
InitializeComboBox(combo1,NULL);
combo2=CreateComboBox(NULL,"FSFilterDirField",NULL,0,10);
InitializeComboBox(combo2,NULL);
combo3=CreateComboBox(NULL,"FSSelectionField",NULL,0,10);
InitializeComboBox(combo3,NULL);
combo4=CreateComboBox(NULL,"GrepPattern",NULL,0,10);
InitializeComboBox(combo4,NULL);
combo5=CreateComboBox(NULL,"GrepFiles",NULL,0,10);
InitializeComboBox(combo5,NULL);
combo6=CreateComboBox(NULL,"GrepReplaceField",NULL,0,10);
InitializeComboBox(combo6,NULL);
actions[0].string="PopupMenu";
actions[0].proc=(XtActionProc)PopupMenu;
actions[1].string="delete-line";
actions[1].proc=(XtActionProc)DeleteLine;
XtAppAddActions(app,actions,2);
pixmap=CreatePixmapFromXPM(top,jex_xpm);
/* pixmap=XCreatePixmapFromBitmapData(XtDisplay(top),
RootWindowOfScreen(XtScreen(top)),
jex_bits,jex_width,jex_height,
BlackPixelOfScreen(XtScreen(top)),
WhitePixelOfScreen(XtScreen(top)),
DefaultDepthOfScreen(XtScreen(top)));
*/
XtVaGetValues(top,XmNforeground,&fg,XmNbackground,&bg,NULL);
lov=XCreatePixmapFromBitmapData(XtDisplay(top),
RootWindowOfScreen(XtScreen(top)),
(char*)lov_bits,lov_width,lov_height,
BlackPixelOfScreen(XtScreen(top)),bg,
DefaultDepthOfScreen(XtScreen(top)));
_new=CreatePixmapFromXPM(top,new_data);
_open=CreatePixmapFromXPM(top,open_data);
_save=CreatePixmapFromXPM(top,save_data);
_save2=CreatePixmapFromXPM(top,save2_data);
_clear=CreatePixmapFromXPM(top,clear_data);
_clone=CreatePixmapFromXPM(top,clone_data);
_compile=CreatePixmapFromXPM(top,compile_data);
_copy=CreatePixmapFromXPM(top,copy_data);
_cut=CreatePixmapFromXPM(top,cut_data);
_grep=CreatePixmapFromXPM(top,grep_data);
_left=CreatePixmapFromXPM(top,left_data);
_make=CreatePixmapFromXPM(top,make_data);
_newwind=CreatePixmapFromXPM(top,newwind_data);
_paste=CreatePixmapFromXPM(top,paste_data);
_redo=CreatePixmapFromXPM(top,redo_data);
_right=CreatePixmapFromXPM(top,right_data);
_undo=CreatePixmapFromXPM(top,undo_data);
_undo2=CreatePixmapFromXPM(top,undo2_data);
_redo2=CreatePixmapFromXPM(top,redo2_data);
_compile2=CreatePixmapFromXPM(top,compile2_data);
_make2=CreatePixmapFromXPM(top,make2_data);
_grep2=CreatePixmapFromXPM(top,grep2_data);
_up=CreatePixmapFromXPM(top,up_data);
_down=CreatePixmapFromXPM(top,down_data);
_caps=CreatePixmapFromXPM(top,caps_data);
_lows=CreatePixmapFromXPM(top,lows_data);
_setmarker=CreatePixmapFromXPM(top,setmarker_data);
_gotomarker=CreatePixmapFromXPM(top,gotomarker_data);
_gotomarker2=CreatePixmapFromXPM(top,gotomarker2_data);
_down2=CreatePixmapFromXPM(top,down2_data);
_run=CreatePixmapFromXPM(top,run_data);
_run2=CreatePixmapFromXPM(top,run2_data);
_gotoline=CreatePixmapFromXPM(top,gotoline_data);
CreateBookmarkDialog();
StartEditor();
CreateEditor(top);
XtRealizeWidget(top);
SetCurrentWidget(editor[editors-1]->text);
for (x=1;x<argc;x++)
{
if (argv[x][0]!='-' && !y)
{
loadfile(editor[0],argv[1],0,2);
/* db_strcpy(editor[0]->filename,argv[1]);
SetTitle(editor[0],editor[0]->filename);*/
y=1;
}
else if (argv[x][0]!='-' && y)
{
CreateNewEditor();
/* db_strcpy(editor[editors-1]->filename,argv[x]);
SetTitle(editor[editors-1],editor[editors-1]->filename);*/
loadfile(editor[editors-1],argv[x],0,1);
}
}
UpdateEditorDialog();
XtAppMainLoop(app);
EP;
return 0;
}
jex-1.3.7/jexappl.c 100644 0 0 36501 6672726721 12242 0 ustar root root #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <ctype.h>
#include <sys/stat.h>
#include <Xm/Text.h>
#include <Xm/TextStrSoP.h>
#include <Xm/PushBG.h>
#include "jex.h"
#include "helpstack.h"
#define READSIZE 250000
extern Widget top,bdl,combo1,combo2,combo3,combo4,combo5,combo6;
extern XtAppContext app;
void Terminate();
extern int fl_size;
extern char fl_files[FILELIST][255];
extern OwnRes ownres;
extern List help_topics;
extern HStack *hst;
extern List l;
void SetSave(Editor *e,Boolean enabled)
{
SP("SetSave");
XtVaSetValues(e->save,XmNsensitive,enabled,NULL);
EP;
}
void SetCurrentWidget(Widget w)
{
Widget tmp;
SP("SetCurrentWidget");
tmp=w;
while (!XtIsShell(tmp))
tmp=XtParent(tmp);
XmProcessTraversal(tmp,XmTRAVERSE_CURRENT);
XmProcessTraversal(w,XmTRAVERSE_CURRENT);
EP;
}
void SetMarker(Widget w,Editor *e,void *cbs)
{
SP("SetMarker");
e->marker=XmTextGetInsertionPosition(e->text);
XtVaSetValues(XtNameToWidget(e->mb,"*editmenu.button_12"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->shell,"*DBGotoMarker"),XmNsensitive,True,NULL);
SetCurrentWidget(e->text);
EP;
}
void GotoMarker(Widget w,Editor *e,void *cbs)
{
SP("GotoMarker");
if (e->marker!=-1)
{
XmTextSetInsertionPosition(e->text,e->marker);
XmTextShowPosition(e->text,e->marker);
}
SetCurrentWidget(e->text);
EP;
}
void RemoveMarker(Editor *e)
{
SP("RemoveMarker");
e->marker=-1;
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*editmenu.button_12"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->shell,"*DBGotoMarker"),XmNsensitive,False,NULL);
#endif
EP;
}
int CheckEditor(Editor *e)
{
int x;
SP("CheckEditor");
for (x=0;x<editors;x++)
{
if (editor[x]==e)
{
EP;
return 1;
}
}
EP;
return 0;
}
void UnlinkFile(Editor *e)
{
char file[255];
SP("UnlinkFile");
WatchCursor(e,1);
if (e->filename[0])
{
sprintf(file,"%s~",e->filename);
unlink(file);
}
WatchCursor(e,0);
EP;
}
void StartEditor(void)
{
FILE *f;
int x,y,z,n,w,v,vc;
char str[255],ini[255],*param,*home,file[255];
SP("StartEditor");
/* signal(SIGQUIT,Terminate);
signal(SIGILL,Terminate);
signal(SIGTRAP,Terminate);
signal(SIGIOT,Terminate);
signal(SIGFPE,Terminate);
signal(SIGKILL,Terminate);
signal(SIGBUS,Terminate);
signal(SIGSEGV,Terminate);
signal(SIGTERM,Terminate);
signal(SIGHUP,Terminate);
signal(SIGSTOP,SIG_IGN);
signal(SIGINT,Terminate);
signal(SIGIO,SIG_IGN);
signal(SIGPIPE,SIG_IGN);
signal(SIGUSR1,SIG_IGN);
signal(SIGUSR2,SIG_IGN);
signal(SIGPROF,SIG_IGN);
signal(SIGABRT,Terminate);*/
DBInit("jex","jex.log",0,Terminate);
db_debug_mode=0;
if ((int)ownres.histhome)
{
home=getenv("HOME");
if (home)
sprintf(file,"%s/.jexhistory",home);
else
db_strcpy(file,".jexhistory");
}
else
db_strcpy(file,".jexhistory");
if ((f=fopen(file,"r"))==NULL)
{
EP;
return;
}
x=0;
y=0;
z=0;
w=0;
v=0;
vc=0;
while (fgets(str,255,f))
{
str[db_strlen(str)-1]='\0';
n=sscanf(str,"%s",ini);
n=2;
param=&str[db_strlen(ini)+1];
if (db_strcmp(ini,"file:")==0 && x<FILELIST)
{
db_strcpy(fl_files[x],param);
if (fl_files[x][0])
x++;
}
else if (db_strcmp(ini,"bookmark:")==0)
{
AddBookmark(param);
}
else if (db_strcmp(ini,"version:")==0)
{
CheckVersion(param);
vc=1;
}
else if (n==1 && x<FILELIST)
{
db_strcpy(fl_files[x],ini);
if (fl_files[x][0])
x++;
}
}
if (!vc)
ShowVersion();
fl_size=x;
fclose(f);
EP;
}
void StopEditor(void)
{
FILE *f;
int x;
char *home,file[255],*str;
int count;
XmStringTable items;
HelpTopic ht;
SP("StopEditor");
if (ownres.histhome)
{
home=getenv("HOME");
if (home)
sprintf(file,"%s/.jexhistory",home);
else
db_strcpy(file,".jexhistory");
}
else
db_strcpy(file,".jexhistory");
if ((f=db_fopen(file,"w+"))==NULL)
{
EP;
return;
}
fprintf(f,"version: %d.%d.%d\n",MAJOR_VERSION,MINOR_VERSION,SUB_MINOR_VERSION);
for (x=0;x<fl_size;x++)
fprintf(f,"file: %s\n",fl_files[x]);
CopyComboBoxToFile(combo1,f);
CopyComboBoxToFile(combo2,f);
CopyComboBoxToFile(combo3,f);
CopyComboBoxToFile(combo4,f);
CopyComboBoxToFile(combo5,f);
CopyComboBoxToFile(combo6,f);
CopyComboBoxToFile(editor[0]->findf,f);
CopyComboBoxToFile(editor[0]->replf,f);
CopyComboBoxToFile(editor[0]->gotofield,f);
XtVaGetValues(bdl,XmNitemCount,&count,XmNitems,&items,NULL);
for (x=0;x<count;x++)
{
XmStringGetLtoR(items[x],XmSTRING_DEFAULT_CHARSET,&str);
fprintf(f,"bookmark: %s\n",str);
XtFree(str);
}
db_fclose(f);
DisposeList(l);
if (GetFirstElement(help_topics,&ht))
{
do
{
DisposeList(ht.list);
} while (GetNextElement(help_topics,&ht));
}
DisposeList(help_topics);
DestroyHStack(hst);
EP;
}
void Exit(Editor *e)
{
int x,y;
char file[255];
SP("Exit");
db_strcpy(file,e->filename);
UnlinkFile(e);
for (x=0;x<editors;x++)
{
if (editor[x]->shell==e->shell)
{
XtRemoveAllCallbacks(e->text,XmNvalueChangedCallback);
XtRemoveAllCallbacks(e->text,XmNmotionVerifyCallback);
XtRemoveAllCallbacks(e->text,XmNmodifyVerifyCallback);
MP; XtUnmapWidget(e->shell);
MP; XtPopdown(e->shell);
if (e->iod)
/* XtUnmanageChild(e->iod);*/
MP, XtPopdown(e->iod);
if (e->fs)
MP, XtUnmanageChild(e->fs);
if (e->ats)
MP, XtUnmanageChild(e->ats);
if (e->fd)
MP, XtUnmanageChild(e->fd);
if (e->le)
MP, XtUnmanageChild(e->le);
if (e->se)
MP, XtUnmanageChild(e->se);
if (e->std)
MP, XtUnmanageChild(e->std);
if (e->tid)
MP, XtRemoveTimeOut(e->tid);
if (e->tid2)
MP, XtRemoveTimeOut(e->tid2);
if (e->tid3)
MP, XtRemoveTimeOut(e->tid3);
if (e->tid4)
MP, XtRemoveTimeOut(e->tid4);
if (e->tid5)
MP, XtRemoveTimeOut(e->tid5);
if (e->tid6)
MP, XtRemoveTimeOut(e->tid6);
if (e->tid7)
MP, XtRemoveTimeOut(e->tid7);
if (e->t.pid)
{
MP, RemoveInputs(e,NULL);
MP, kill(e->t.pid,SIGKILL);
}
if (e->oldsource)
{
XmTextSetSource(e->text,XmTextGetSource(e->tmpsource),0,0);
XtDestroyWidget(e->tmpsource);
e->tmpsource=XtVaCreateWidget("tmpsource",xmTextWidgetClass,XtParent(XtParent(e->text)),NULL);
e->oldsource=0;
}
MP; if (e->ce_count)
{
for (y=0;y<e->ce_count;y++)
db_free(e->compiler_error[y]);
db_free(e->compiler_error);
e->compiler_error=NULL;
e->ce_count=0;
}
MP, XtVaSetValues(e->text,XmNvalue,"",NULL);
MP, NoUndo(e);
/* XtDestroyWidget(XtParent(XtParent(e->text)));*/
MP, DisposeList(e->undolist);
MP, DisposeList(e->redolist);
if (editors==1)
StopEditor();
MP, db_free((char*)editor[x]);
if (x<editors-1)
MP, db_memmove(&editor[x],&editor[x+1],(editors-x-1)*sizeof(Editor*));
MP, editors--;
MP, UpdateEditorDialog();
if (file[0])
MP, UpdateFileList(file);
break;
}
}
if (!editors)
{
/*MP, StopEditor();*/
DestroyAllComboBoxes();
MP, exit(0);
}
EP;
}
void GetFullFileName(char *file)
{
char cdir[255],name[255],path[255];
SP("GetFullFileName");
if (file && file[0]=='/')
{
EP;
return;
}
db_getcwd(cdir,255);
SplitPath(file,path,name);
db_chdir(path);
db_getcwd(path,255);
if (path[db_strlen(path)-1]=='/')
sprintf(file,"%s%s",path,name);
else
sprintf(file,"%s/%s",path,name);
db_chdir(cdir);
EP;
}
void DetachEditor(Editor *e,char* file)
{
SP("DetachEditor");
if (e->oldsource)
{
XmTextSetSource(e->text,XmTextGetSource(e->tmpsource),0,0);
XtDestroyWidget(e->tmpsource);
e->tmpsource=XtVaCreateWidget("tmpsource",xmTextWidgetClass,XtParent(XtParent(e->text)),NULL);
e->oldsource=0;
if (file)
loadfile(e,file,0,0);
}
EP;
}
int loadfile(Editor *e,char *fl,int insert,int setname)
{
char *str,file[255];
FILE *f;
int i,x;
XmTextPosition pos;
struct stat sbuf;
SP("loadfile");
db_strcpy(file,fl);
GetFullFileName(file);
if ((f=db_fopen(file,"r"))==NULL)
{
if (setname==2)
{
db_strcpy(e->filename,file);
SetTitle(e,e->filename);
}
SetCurrentWidget(e->text);
EP;
return 1;
}
if (db_stat(file,&sbuf)<0)
{
if (db_lstat(file,&sbuf)<0)
{
if (setname==2)
{
db_strcpy(e->filename,file);
SetTitle(e,e->filename);
}
db_fclose(f);
SetCurrentWidget(e->text);
EP;
return 1;
}
}
if ((sbuf.st_mode&S_IFMT)==S_IFDIR)
{
db_fclose(f);
EP;
SetCurrentWidget(e->text);
return 2;
}
WatchCursor(e,1);
if (e->filename[0])
UpdateFileList(e->filename);
str=(char*)db_malloc(READSIZE+1);
if (insert)
pos=XmTextGetInsertionPosition(e->text);
else
{
DetachEditor(e,file);
XtVaSetValues(e->text,XmNvalue,"",NULL);
pos=0;
}
if (!insert)
XtRemoveAllCallbacks(e->text,XmNmodifyVerifyCallback);
XtUnmanageChild(e->text);
do
{
i=db_fread(str,1,READSIZE,f);
str[i]='\0';
XmTextInsert(e->text,pos,str);
pos+=i;
} while (i==READSIZE);
XtManageChild(e->text);
if (!insert)
XtAddCallback(e->text,XmNmodifyVerifyCallback,(XtCallbackProc)DeleteText,e);
db_free(str);
db_fclose(f);
UnlinkFile(e);
if (!insert)
{
NoUndo(e);
XmTextSetInsertionPosition(e->text,0);
XmTextShowPosition(e->text,0);
e->saved=1;
/* XtUnmanageChild(e->save);*/
SetSave(e,False);
for (x=0;x<editors;x++)
{
if (editor[x]!=e && db_strcmp(editor[x]->filename,file)==0)
{
XmTextSetSource(e->tmpsource,XmTextGetSource(e->text),0,0);
XmTextSetSource(e->text,XmTextGetSource(editor[x]->text),0,0);
e->oldsource=1;
editor[x]->oldsource=1;
break;
}
}
}
if (setname)
{
db_strcpy(e->filename,file);
SetTitle(e,e->filename);
}
WatchCursor(e,0);
SetCurrentWidget(e->text);
EP;
return 0;
}
int savefile(Editor *e,char *file,char *str)
{
FILE *f;
char save[512];
SP("savefile");
if (e->read_only)
{
EP;
return 0;
}
WatchCursor(e,1);
if ((f=fopen(file,"r"))!=NULL)
{
fclose(f);
sprintf(save,"%s~",file);
if ((f=fopen(save,"w+"))!=NULL)
{
fclose(f);
sprintf(save,"cp %s %s~",file,file);
system(save);
}
}
if ((f=db_fopen(file,"w+"))==NULL)
{
WatchCursor(e,0);
EP;
return 0;
}
if (db_fwrite(str,1,db_strlen(str),f)!=db_strlen(str))
{
db_fclose(f);
WatchCursor(e,0);
EP;
return 0;
}
db_fclose(f);
db_strcpy(e->filename,file);
WatchCursor(e,0);
EP;
return 1;
}
void CopyFile(char *s,char *t)
{
char str[255];
SP("CopyFile");
sprintf(str,"cp %s %s",s,t);
system(str);
EP;
}
void NoHighlight(Editor *e,void *id)
{
SP("NoHighlight");
XmTextSetHighlight(e->text,0,XmTextGetLastPosition(e->text),XmHIGHLIGHT_NORMAL);
e->tid5=0;
EP;
}
void GotoLine(Widget w,Editor *e,void *cbs)
{
int line,x,l=2,len,left;
char *linestr,*str;
SP("GotoLine");
WatchCursor(e,1);
#ifdef FAST_GET_TEXT_VALUE
XmTextSource ts;
ts=XmTextGetSource(e->text);
str=((XmTextSourceRec*)ts)->data->ptr;
#else
XtVaGetValues(e->text,XmNvalue,&str,NULL);
#endif
XtVaGetValues(e->gotofield,XmNvalue,&linestr,NULL);
for (x=0;x<editors;x++)
UpdateComboBox(editor[x]->gotofield,linestr);
line=atoi(linestr);
XtFree(linestr);
#ifdef FAST_GET_TEXT_VALUE
len=((XmTextSourceRec*)ts)->data->length;
#else
len=db_strlen(str);
#endif
if (line==1)
{
XmTextShowPosition(e->text,0);
XmTextSetInsertionPosition(e->text,0);
#ifndef FAST_GET_TEXT_VALUE
XtFree(str);
#endif
left=0;
x=left+1;
if (str[left]!='\n')
{
while (x<len && str[x]!='\n')
x++;
}
XmTextSetHighlight(e->text,left,x,XmHIGHLIGHT_SELECTED);
e->tid5=XtAppAddTimeOut(app,1000,(XtTimerCallbackProc)NoHighlight,e);
WatchCursor(e,0);
EP;
return;
}
for (x=0;x<len;x++)
{
if (str[x]=='\n')
{
if (l==line || line==1)
{
XmTextShowPosition(e->text,(x==0)?0:(x+1));
XmTextSetInsertionPosition(e->text,(x==0)?0:(x+1));
left=(x==0)?0:(x+1);
x=left+1;
if (str[left]!='\n')
{
while (x<len && str[x]!='\n')
x++;
}
XmTextSetHighlight(e->text,left,x,XmHIGHLIGHT_SELECTED);
e->tid5=XtAppAddTimeOut(app,1000,(XtTimerCallbackProc)NoHighlight,e);
break;
}
l++;
}
}
#ifndef FAST_GET_TEXT_VALUE
XtFree(str);
#endif
SetCurrentWidget(e->text);
WatchCursor(e,0);
EP;
}
void CalcRowCol(Editor *e,void *ti)
{
int x=0,l=1,c=1,y=0,col=0;
char cstr[20],*str;
XmString xstr;
XmTextPosition f;
#ifdef FAST_GET_TEXT_VALUE
XmTextSource ts;
SP("CalcRowCol");
if (!CheckEditor(e))
{
Log("Reference to Unknown editor");
return;
}
ts=XmTextGetSource(e->text);
str=((XmTextSourceRec*)ts)->data->ptr;
#else
SP("CalcRowCol");
if (!CheckEditor(e))
{
Log("Reference to Unknown editor");
return;
}
XtVaGetValues(e->text,XmNvalue,&str,NULL);
#endif
f=XmTextGetInsertionPosition(e->text);
for (x=0;x<f;x++)
{
if (str[x]=='\n')
{
l++;
y=x+1;
}
}
/* for (x=f-1;x>=0 && str[x]!='\n';x--)
c++;*/
for (x=y;x<f;x++)
{
if (str[x]=='\t')
{
c+=8-col%8;
col=0;
}
else
{
c++;
col++;
}
}
sprintf(cstr,"%d:%d",l,c);
xstr=XmStringCreateLocalized(cstr);
XtVaSetValues(e->rowcol,XmNlabelString,xstr,NULL);
XmStringFree(xstr);
#ifndef FAST_GET_TEXT_VALUE
XtFree(str);
#endif
e->tid6=0;
EP;
}
void FindRowCol(Widget w,Editor *e,XmTextVerifyCallbackStruct *cbs)
{
SP("FindRowCol");
if (e->tid6)
XtRemoveTimeOut(e->tid6);
e->tid6=XtAppAddTimeOut(app,250,(XtTimerCallbackProc)CalcRowCol,e);
EP;
}
void printfile(Editor *e,char *file)
{
char lpstr[255];
SP("printfile");
WatchCursor(e,1);
sprintf(lpstr,"%s %s",e->print_command,file);
system(lpstr);
WatchCursor(e,0);
EP;
}
void Terminate(int sig)
{
char *str;
int x,y;
/* printf("jex: Terminating on signal %d...\n\n",sig);*/
StopEditor();
for (x=0;x<editors;x++)
{
if (!editor[x]->saved)
{
str=XmTextGetString(editor[x]->text);
if (editor[x]->filename[0]=='\0')
db_strcpy(editor[x]->filename,tempnam(".","jex"));
else
db_strcat(editor[x]->filename,".rescue");
if (savefile(editor[x],editor[x]->filename,str)!=0)
{
printf("A copy of your edit file has been saved to '%s'\n",editor[x]->filename);
db_strcat(editor[x]->filename,"~");
unlink(editor[x]->filename);
}
else
printf("Sorry, but I was unable to save a copy of your edit file!\n");
XtFree(str);
}
if (editor[x]->ce_count)
{
for (y=0;y<editor[x]->ce_count;y++)
db_free(editor[x]->compiler_error[y]);
db_free(editor[x]->compiler_error);
}
NoUndo(editor[x]);
DisposeList(editor[x]->undolist);
DisposeList(editor[x]->redolist);
db_free((char*)editor[x]);
}
DestroyAllComboBoxes();
printf("\nPlease send a copy of the file jex.log to: jbosman@village.uunet.be\n");
printf(" or: jbosma@fercomsys.be\n");
printf("and describe what you were doing to make jex crash.\n");
/* exit(sig);*/
}
jex-1.3.7/list.c 100644 0 0 27347 6672726720 11561 0 ustar root root /* LIST.C
Author : Jorgen Bosman.
Last update: 13-04-1994
*/
#include "list.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "jbdbg.h"
#define debug 0
#if debug==1
#define Debug(l,s) VisualizeList(l,s)
#else
#define Debug(l,s)
#endif
typedef struct ListEl {
void *element;
struct ListEl *next;
struct ListEl *prev;
} ListElem;
typedef struct {
unsigned el_size;
ListElem *first;
ListElem *last;
ListElem *current;
} ListDef;
typedef ListDef *_List;
void VisualizeList(List l,char *str)
{
ListElem *ptr,*ptr2;
int x=0;
printf("\n%s:\n ",str);
if (!l || !((_List)l)->first)
printf("List empty");
else
{
ptr=ptr2=((_List)l)->first;
printf("F");
if (ptr==((_List)l)->current)
printf("C");
if (ptr==((_List)l)->last)
printf("L");
printf("%d",*(int*)ptr->element);
while (ptr->next)
{
x++;
ptr=ptr->next;
if (ptr->prev==ptr2)
printf("<-");
if (ptr2->next==ptr)
printf("->");
if (ptr==((_List)l)->current)
printf("C");
if (ptr==((_List)l)->last)
printf("L");
printf("%d",*(int*)ptr->element);
ptr2=ptr;
}
}
printf("\n");
}
List CreateList(unsigned el_size)
{
_List l;
SP("CreateList");
if ((l=(ListDef *)db_malloc(sizeof(ListDef)))!=NULL)
{
l->first=NULL;
l->last=NULL;
l->current=NULL;
l->el_size=el_size;
}
Debug(l,"Createlist");
EP;
return (List)l;
}
int ListEmpty(List list)
{
Debug(list,"ListEmpty");
return (list==NULL || ((_List)list)->first==NULL);
}
int AddElement(List l,void *element)
{
SP("AddElement");
Debug(l,"AddElement start");
if (!l)
{
EP;
return 0;
}
if (NULL==((_List)l)->last)
{
if ((((_List)l)->last=(ListElem*)db_malloc(sizeof(ListElem)))==NULL)
{
EP;
return 0;
}
((_List)l)->first=((_List)l)->last;
((_List)l)->last->prev=NULL;
}
else
{
if ((((_List)l)->last->next=(ListElem*)db_malloc(sizeof(ListElem)))==NULL)
{
EP;
return 0;
}
((_List)l)->last->next->prev=((_List)l)->last;
((_List)l)->last=((_List)l)->last->next;
}
if ((((_List)l)->last->element=db_malloc(((_List)l)->el_size))==NULL)
{
EP;
return 0;
}
((_List)l)->last->element=db_memcpy(((_List)l)->last->element,element,((_List)l)->el_size);
((_List)l)->last->next=NULL;
((_List)l)->current=((_List)l)->last;
Debug(l,"AddElement end");
EP;
return 1;
}
int AddFirstElement(List l,void *element)
{
SP("AddFirstElement");
Debug(l,"AddFirstElement start");
if (!l)
{
EP;
return 0;
}
if (!((_List)l)->last) /* List is empty. */
{
if ((((_List)l)->last=(ListElem*)db_malloc(sizeof(ListElem)))==NULL)
{
EP;
return 0;
}
((_List)l)->first=((_List)l)->last;
((_List)l)->last->prev=NULL;
((_List)l)->last->next=NULL;
((_List)l)->current=((_List)l)->last;
}
else
{
if ((((_List)l)->first->prev=(ListElem*)db_malloc(sizeof(ListElem)))==NULL)
{
EP;
return 0;
}
((_List)l)->current=((_List)l)->first->prev;
((_List)l)->current->next=((_List)l)->first;
((_List)l)->current->prev=NULL;
((_List)l)->first=((_List)l)->current;
}
if ((((_List)l)->first->element=db_malloc(((_List)l)->el_size))==NULL)
{
EP;
return 0;
}
((_List)l)->first->element=db_memcpy(((_List)l)->first->element,element,((_List)l)->el_size);
Debug(l,"AddFirstElement end");
EP;
return 1;
}
int InsertElement(List list,void *element)
{
ListElem *l;
SP("InsertElement");
Debug(list,"InsertElement start");
if (!list || !((_List)list)->first || !((_List)list)->first->prev)
{
EP;
return AddFirstElement(list,element);
}
else if (((_List)list)->current==((_List)list)->last)
{
EP;
return AddElement(list,element);
}
else
{
if (!(l=(ListElem*)db_malloc(sizeof(ListElem))))
{
EP;
return 0;
}
l->prev=((_List)list)->current->prev;
l->next=((_List)list)->current;
((_List)list)->current->prev=l;
((_List)list)->current->prev->next=l;
((_List)list)->current=l;
if (!(l->element=db_malloc(((_List)list)->el_size)))
{
EP;
return 0;
}
l->element=db_memcpy(l->element,element,((_List)list)->el_size);
}
Debug(list,"InsertElement Last");
EP;
return 1;
}
int GetFirstElement(List list,void *element)
{
SP("GetFirstElement");
Debug(list,"GetFirstElement start");
if (!list || !((_List)list)->first)
{
EP;
return 0;
}
element=db_memcpy(element,((_List)list)->first->element,((_List)list)->el_size);
((_List)list)->current=((_List)list)->first;
Debug(list,"GetFirstElement end");
EP;
return 1;
}
int GetCurrentElement(List list,void *element)
{
SP("GetCurrentElement");
Debug(list,"GetCurrentElement start");
if (!list || !((_List)list)->current)
{
EP;
return 0;
}
element=db_memcpy(element,((_List)list)->current->element,((_List)list)->el_size);
Debug(list,"GetCurrentElement end");
EP;
return 1;
}
int GetNextElement(List list,void *element)
{
SP("GetNextElement");
Debug(list,"GetNextElement start");
if (!list || !((_List)list)->current || !((_List)list)->current->next)
{
EP;
return 0;
}
((_List)list)->current=((_List)list)->current->next;
element=db_memcpy(element,((_List)list)->current->element,((_List)list)->el_size);
Debug(list,"GetNextElement end");
EP;
return 1;
}
int GetPreviousElement(List list,void *element)
{
SP("GetPreviousElement");
Debug(list,"GetPreviousElement start");
if (!list || !((_List)list)->current || !((_List)list)->current->prev)
{
EP;
return 0;
}
((_List)list)->current=((_List)list)->current->prev;
element=db_memcpy(element,((_List)list)->current->element,((_List)list)->el_size);
Debug(list,"GetPreviousElement end");
EP;
return 1;
}
int GetLastElement(List list,void *element)
{
SP("GetLastElement");
Debug(list,"GetLastElement start");
if (!list || !((_List)list)->last)
{
EP;
return 0;
}
element=db_memcpy(element,((_List)list)->last->element,((_List)list)->el_size);
((_List)list)->current=((_List)list)->last;
Debug(list,"GetLastElement end");
EP;
return 1;
}
int GetNthElement(List list,int n,void *element)
{
int x=0;
SP("GetNthElement");
Debug(list,"GetNthElement start");
if (!list || !((_List)list)->last)
{
EP;
return 0;
}
if (GetFirstElement(list,element))
{
do
{
if (x++==n)
{
EP;
return 1;
}
} while (GetNextElement(list,element));
}
Debug(list,"GetNthElement end");
EP;
return 0;
}
int DisposeList(List list)
{
ListElem *ptr,*ptr2;
SP("DisposeList");
Debug(list,"DisposeList start");
if (!list)
{
EP;
return 0;
}
ptr=((_List)list)->first;
while (ptr)
{
ptr2=ptr;
ptr=ptr->next;
db_free((char*)ptr2->element);
db_free((char*)ptr2);
}
db_free((char*)list);
list=NULL;
Debug(list,"DisposeList end");
EP;
return 0;
}
int ClearList(List list)
{
ListElem *ptr,*ptr2;
SP("ClearList");
Debug(list,"ClearList start");
if (!list)
{
EP;
return 0;
}
ptr=((_List)list)->first;
while (ptr)
{
ptr2=ptr;
ptr=ptr->next;
db_free((char*)ptr2->element);
db_free((char*)ptr2);
}
((_List)list)->first=NULL;
((_List)list)->last=NULL;
((_List)list)->current=NULL;
Debug(list,"ClearList end");
EP;
return 0;
}
int FindElement(List list,void *element,int key_size,void *key)
{
ListElem *ptr;
SP("FindElement");
Debug(list,"ClearList start");
ptr=((_List)list)->first;
while (db_memcmp(ptr->element,key,key_size)!=0 && ptr->next)
ptr=ptr->next;
if (db_memcmp(ptr->element,key,key_size)==0)
{
element=db_memcpy(element,ptr->element,((_List)list)->el_size);
((_List)list)->current=ptr;
EP;
return 1;
}
Debug(list,"ClearList end");
EP;
return 0;
}
int DeleteLastElement(List list)
{
SP("DeleteLastElement");
Debug(list,"DeleteLastElement start");
if (!list || !((_List)list)->last)
{
EP;
return 0;
}
if (((_List)list)->last->prev)
{
((_List)list)->last=((_List)list)->last->prev;
db_free((char*)((_List)list)->last->next->element);
db_free((char*)((_List)list)->last->next);
((_List)list)->last->next=NULL;
}
else
{
((_List)list)->first=NULL;
((_List)list)->current=NULL;
db_free((char*)((_List)list)->last->element);
db_free((char*)((_List)list)->last);
((_List)list)->last=NULL;
}
Debug(list,"DeleteLastElement end");
EP;
return 1;
}
int DeleteFirstElement(List list)
{
SP("DeleteFirstElement");
Debug(list,"DeleteFirstElement start");
if (!list || !((_List)list)->first)
{
EP;
return 0;
}
if (((_List)list)->first->next)
{
db_free((char*)((_List)list)->first->element);
((_List)list)->current=((_List)list)->first->next;
db_free((char*)((_List)list)->current->prev);
((_List)list)->current->prev=NULL;
((_List)list)->first=((_List)list)->current;
}
else
{
((_List)list)->last=NULL;
((_List)list)->current=NULL;
db_free((char*)((_List)list)->first->element);
db_free((char*)((_List)list)->first);
((_List)list)->first=NULL;
}
Debug(list,"DeleteFirstElement end");
EP;
return 1;
}
int DeleteCurrentElement(List list)
{
ListElem *ptr;
SP("DeleteCurrentElement");
Debug(list,"DeleteCurrentElement start");
if (!list)
{
EP;
return 0;
}
ptr=((_List)list)->current;
if (!ptr)
{
EP;
return 0;
}
if (ptr->prev)
ptr->prev->next=ptr->next;
else
((_List)list)->first=ptr->next;
if (ptr->next)
{
ptr->next->prev=ptr->prev;
((_List)list)->current=ptr->next;
}
else
((_List)list)->last=((_List)list)->current=ptr->prev;
db_free((char*)ptr->element);
db_free((char*)ptr);
Debug(list,"DeleteCurrentElement end");
EP;
return 1;
}
int DeleteElement(List list,int key_size,void *key)
{
ListElem *ptr;
SP("DeleteElement");
Debug(list,"DeleteElement start");
if (!list)
{
EP;
return 0;
}
ptr=((_List)list)->first;
while (db_memcmp(ptr->element,key,key_size)!=0 && ptr->next)
ptr=ptr->next;
if (db_memcmp(ptr->element,key,key_size)==0)
{
if (ptr->prev)
ptr->prev->next=ptr->next;
else
((_List)list)->first=ptr->next;
if (ptr->next)
{
ptr->next->prev=ptr->prev;
((_List)list)->current=ptr->next;
}
else
((_List)list)->last=((_List)list)->current=ptr->prev;
db_free((char*)ptr->element);
db_free((char*)ptr);
Debug(list,"DeleteElement end");
EP;
return 1;
}
Debug(list,"DeleteElement end");
EP;
return 0;
}
void ReplaceCurrentElement(List list,void *element)
{
SP("ReplaceCurrentElement");
Debug(list,"ReplaceCurrentElement start");
if (list==NULL)
{
EP;
return;
}
((_List)list)->current->element=db_memcpy(((_List)list)->current->element,element,((_List)list)->el_size);
EP;
Debug(list,"ReplaceCurrentElement end");
}
void SortList(List list,int (*sort_proc)(const void *element1,const void *element2))
{
char *data,*tmp;
ListElem *ptr1;
int n;
SP("SortList");
Debug(list,"SortList start");
tmp=data=(char*)db_malloc((n=NumberElements(list))*((_List)list)->el_size);
ptr1=((_List)list)->first;
while (ptr1)
{
data=(char*)db_memcpy(data,ptr1->element,((_List)list)->el_size);
data+=((_List)list)->el_size;
ptr1=ptr1->next;
}
ClearList(list);
data=tmp;
qsort(data,n,((_List)list)->el_size,sort_proc);
while (n--)
{
AddElement(list,data);
data+=((_List)list)->el_size;
}
db_free((char*)tmp);
Debug(list,"SortList end");
EP;
}
int NumberElements(List list)
{
ListElem *ptr;
int count=0;
SP("NumberElements");
Debug(list,"NumberElements start");
if (!list)
{
EP;
return 0;
}
ptr=((_List)list)->first;
while (ptr)
{
ptr=ptr->next;
count++;
}
Debug(list,"NumberElements end");
EP;
return count;
}
jex-1.3.7/loaderror.c 100644 0 0 3131 6672726720 12540 0 ustar root root #include <Xm/MessageB.h>
#include "jex.h"
extern Widget top;
Widget he=NULL;
void LoadError(Editor *e)
{
SP("LoadError");
if (e->le==NULL)
{
e->le=XmCreateErrorDialog(e->shell,"LoadError",NULL,0);
XtUnmanageChild(XmMessageBoxGetChild(e->le,XmDIALOG_CANCEL_BUTTON));
XtUnmanageChild(XmMessageBoxGetChild(e->le,XmDIALOG_HELP_BUTTON));
}
XtManageChild(e->le);
SetCurrentWidget(e->text);
EP;
}
void ShowError(Editor *e,char *errstr)
{
XmString xstr;
SP("ShowError");
if (e->err==NULL)
{
e->err=XmCreateErrorDialog(e->shell,"ErrorDialog",NULL,0);
XtUnmanageChild(XmMessageBoxGetChild(e->err,XmDIALOG_CANCEL_BUTTON));
XtUnmanageChild(XmMessageBoxGetChild(e->err,XmDIALOG_HELP_BUTTON));
}
xstr=XmStringCreateLocalized(errstr);
XtVaSetValues(e->err,XmNmessageString,xstr,NULL);
XmStringFree(xstr);
XtManageChild(e->err);
EP;
}
void SaveError(Editor *e)
{
SP("SaveError");
if (e->se==NULL)
{
e->se=XmCreateErrorDialog(e->shell,"SaveError",NULL,0);
XtUnmanageChild(XmMessageBoxGetChild(e->se,XmDIALOG_CANCEL_BUTTON));
XtUnmanageChild(XmMessageBoxGetChild(e->se,XmDIALOG_HELP_BUTTON));
}
XtManageChild(e->se);
SetCurrentWidget(e->text);
EP;
}
void HelpError(char *msg)
{
XmString xstr;
SP("HelpError");
if (he==NULL)
{
he=XmCreateErrorDialog(top,"HelpError",NULL,0);
XtUnmanageChild(XmMessageBoxGetChild(he,XmDIALOG_CANCEL_BUTTON));
XtUnmanageChild(XmMessageBoxGetChild(he,XmDIALOG_HELP_BUTTON));
}
xstr=XmStringCreateLocalized(msg);
XtVaSetValues(he,XmNmessageString,xstr,NULL);
XmStringFree(xstr);
XtManageChild(he);
EP;
}
jex-1.3.7/match.c 100644 0 0 40715 6672726720 11674 0 ustar root root /*
EPSHeader
File: match.c
Author: J. Kercheval
Created: Sat, 01/05/1991 22:21:49
*/
/*
EPSRevision History
J. Kercheval Wed, 02/20/1991 22:29:01 Released to Public Domain
J. Kercheval Fri, 02/22/1991 15:29:01 fix '\' bugs (two :( of them)
J. Kercheval Sun, 03/10/1991 19:31:29 add error return to matche()
J. Kercheval Sun, 03/10/1991 20:11:11 add is_valid_pattern code
J. Kercheval Sun, 03/10/1991 20:37:11 beef up main()
J. Kercheval Tue, 03/12/1991 22:25:10 Released as V1.1 to Public Domain
*/
/*
Wildcard Pattern Matching
*/
#include "match.h"
int matche_after_star (register char *pattern, register char *text);
int fast_match_after_star (register char *pattern, register char *text);
/*----------------------------------------------------------------------------
*
* Return TRUE if PATTERN has any special wildcard characters
*
----------------------------------------------------------------------------*/
BOOLEAN is_pattern (char *p)
{
while ( *p ) {
switch ( *p++ ) {
case '?':
case '*':
case '[':
case '\\':
return TRUE;
}
}
return FALSE;
}
/*----------------------------------------------------------------------------
*
* Return TRUE if PATTERN has is a well formed regular expression according
* to the above syntax
*
* error_type is a return code based on the type of pattern error. Zero is
* returned in error_type if the pattern is a valid one. error_type return
* values are as follows:
*
* PATTERN_VALID - pattern is well formed
* PATTERN_ESC - pattern has invalid escape ('\' at end of pattern)
* PATTERN_RANGE - [..] construct has a no end range in a '-' pair (ie [a-])
* PATTERN_CLOSE - [..] construct has no end bracket (ie [abc-g )
* PATTERN_EMPTY - [..] construct is empty (ie [])
*
----------------------------------------------------------------------------*/
BOOLEAN is_valid_pattern (char *p, int *error_type)
{
/* init error_type */
*error_type = PATTERN_VALID;
/* loop through pattern to EOS */
while( *p ) {
/* determine pattern type */
switch( *p ) {
/* check literal escape, it cannot be at end of pattern */
case '\\':
if( !*++p ) {
*error_type = PATTERN_ESC;
return FALSE;
}
p++;
break;
/* the [..] construct must be well formed */
case '[':
p++;
/* if the next character is ']' then bad pattern */
if ( *p == ']' ) {
*error_type = PATTERN_EMPTY;
return FALSE;
}
/* if end of pattern here then bad pattern */
if ( !*p ) {
*error_type = PATTERN_CLOSE;
return FALSE;
}
/* loop to end of [..] construct */
while( *p != ']' ) {
/* check for literal escape */
if( *p == '\\' ) {
p++;
/* if end of pattern here then bad pattern */
if ( !*p++ ) {
*error_type = PATTERN_ESC;
return FALSE;
}
}
else
p++;
/* if end of pattern here then bad pattern */
if ( !*p ) {
*error_type = PATTERN_CLOSE;
return FALSE;
}
/* if this a range */
if( *p == '-' ) {
/* we must have an end of range */
if ( !*++p || *p == ']' ) {
*error_type = PATTERN_RANGE;
return FALSE;
}
else {
/* check for literal escape */
if( *p == '\\' )
p++;
/* if end of pattern here then bad pattern */
if ( !*p++ ) {
*error_type = PATTERN_ESC;
return FALSE;
}
}
}
}
break;
/* all other characters are valid pattern elements */
case '*':
case '?':
default:
p++; /* "normal" character */
break;
}
}
return TRUE;
}
/*----------------------------------------------------------------------------
*
* Match the pattern PATTERN against the string TEXT;
*
* returns MATCH_VALID if pattern matches, or an errorcode as follows
* otherwise:
*
* MATCH_PATTERN - bad pattern
* MATCH_LITERAL - match failure on literal mismatch
* MATCH_RANGE - match failure on [..] construct
* MATCH_ABORT - premature end of text string
* MATCH_END - premature end of pattern string
* MATCH_VALID - valid match
*
*
* A match means the entire string TEXT is used up in matching.
*
* In the pattern string:
* `*' matches any sequence of characters (zero or more)
* `?' matches any character
* [SET] matches any character in the specified set,
* [!SET] or [^SET] matches any character not in the specified set.
*
* A set is composed of characters or ranges; a range looks like
* character hyphen character (as in 0-9 or A-Z). [0-9a-zA-Z_] is the
* minimal set of characters allowed in the [..] pattern construct.
* Other characters are allowed (ie. 8 bit characters) if your system
* will support them.
*
* To suppress the special syntactic significance of any of `[]*?!^-\',
* and match the character exactly, precede it with a `\'.
*
----------------------------------------------------------------------------*/
int matche ( register char *p, register char *t )
{
register char range_start, range_end; /* start and end in range */
BOOLEAN invert; /* is this [..] or [!..] */
BOOLEAN member_match; /* have I matched the [..] construct? */
BOOLEAN loop; /* should I terminate? */
for ( ; *p; p++, t++ ) {
/* if this is the end of the text then this is the end of the match */
if (!*t) {
return ( *p == '*' && *++p == '\0' ) ? MATCH_VALID : MATCH_ABORT;
}
/* determine and react to pattern type */
switch ( *p ) {
/* single any character match */
case '?':
break;
/* multiple any character match */
case '*':
return matche_after_star (p, t);
/* [..] construct, single member/exclusion character match */
case '[': {
/* move to beginning of range */
p++;
/* check if this is a member match or exclusion match */
invert = FALSE;
if ( *p == '!' || *p == '^') {
invert = TRUE;
p++;
}
/* if closing bracket here or at range start then we have a
malformed pattern */
if ( *p == ']' ) {
return MATCH_PATTERN;
}
member_match = FALSE;
loop = TRUE;
while ( loop ) {
/* if end of construct then loop is done */
if (*p == ']') {
loop = FALSE;
continue;
}
/* matching a '!', '^', '-', '\' or a ']' */
if ( *p == '\\' ) {
range_start = range_end = *++p;
}
else {
range_start = range_end = *p;
}
/* if end of pattern then bad pattern (Missing ']') */
if (!*p)
return MATCH_PATTERN;
/* check for range bar */
if (*++p == '-') {
/* get the range end */
range_end = *++p;
/* if end of pattern or construct then bad pattern */
if (range_end == '\0' || range_end == ']')
return MATCH_PATTERN;
/* special character range end */
if (range_end == '\\') {
range_end = *++p;
/* if end of text then we have a bad pattern */
if (!range_end)
return MATCH_PATTERN;
}
/* move just beyond this range */
p++;
}
/* if the text character is in range then match found.
make sure the range letters have the proper
relationship to one another before comparison */
if ( range_start < range_end ) {
if (*t >= range_start && *t <= range_end) {
member_match = TRUE;
loop = FALSE;
}
}
else {
if (*t >= range_end && *t <= range_start) {
member_match = TRUE;
loop = FALSE;
}
}
}
/* if there was a match in an exclusion set then no match */
/* if there was no match in a member set then no match */
if ((invert && member_match) ||
!(invert || member_match))
return MATCH_RANGE;
/* if this is not an exclusion then skip the rest of the [...]
construct that already matched. */
if (member_match) {
while (*p != ']') {
/* bad pattern (Missing ']') */
if (!*p)
return MATCH_PATTERN;
/* skip exact match */
if (*p == '\\') {
p++;
/* if end of text then we have a bad pattern */
if (!*p)
return MATCH_PATTERN;
}
/* move to next pattern char */
p++;
}
}
break;
}
/* next character is quoted and must match exactly */
case '\\':
/* move pattern pointer to quoted char and fall through */
p++;
/* if end of text then we have a bad pattern */
if (!*p)
return MATCH_PATTERN;
/* must match this character exactly */
default:
if (*p != *t)
return MATCH_LITERAL;
}
}
/* if end of text not reached then the pattern fails */
if ( *t )
return MATCH_END;
else
return MATCH_VALID;
}
/*----------------------------------------------------------------------------
*
* recursively call matche() with final segment of PATTERN and of TEXT.
*
----------------------------------------------------------------------------*/
int matche_after_star (register char *p, register char *t)
{
register int match = 0;
register nextp;
/* pass over existing ? and * in pattern */
while ( *p == '?' || *p == '*' ) {
/* take one char for each ? and + */
if ( *p == '?' ) {
/* if end of text then no match */
if ( !*t++ ) {
return MATCH_ABORT;
}
}
/* move to next char in pattern */
p++;
}
/* if end of pattern we have matched regardless of text left */
if ( !*p ) {
return MATCH_VALID;
}
/* get the next character to match which must be a literal or '[' */
nextp = *p;
if ( nextp == '\\' ) {
nextp = p[1];
/* if end of text then we have a bad pattern */
if (!nextp)
return MATCH_PATTERN;
}
/* Continue until we run out of text or definite result seen */
do {
/* a precondition for matching is that the next character
in the pattern match the next character in the text or that
the next pattern char is the beginning of a range. Increment
text pointer as we go here */
if ( nextp == *t || nextp == '[' ) {
match = matche(p, t);
}
/* if the end of text is reached then no match */
if ( !*t++ ) match = MATCH_ABORT;
} while ( match != MATCH_VALID &&
match != MATCH_ABORT &&
match != MATCH_PATTERN);
/* return result */
return match;
}
/*----------------------------------------------------------------------------
*
* match() is a shell to matche() to return only BOOLEAN values.
*
----------------------------------------------------------------------------*/
BOOLEAN match( char *p, char *t )
{
int error_type;
error_type = matche(p,t);
return (error_type == MATCH_VALID ) ? TRUE : FALSE;
}
#ifdef TEST
/*
* This test main expects as first arg the pattern and as second arg
* the match string. Output is yaeh or nay on match. If nay on
* match then the error code is parsed and written.
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
int error;
int is_valid_error;
if (argc != 3) {
printf("Usage: MATCH Pattern Text\n");
}
else {
printf("Pattern: %s\n", argv[1]);
printf("Text : %s\n", argv[2]);
if (!is_pattern(argv[1])) {
printf(" First Argument Is Not A Pattern\n");
}
else {
error = matche(argv[1],argv[2]);
is_valid_pattern(argv[1],&is_valid_error);
switch ( error ) {
case MATCH_VALID:
printf(" Match Successful");
if (is_valid_error != PATTERN_VALID)
printf(" -- is_valid_pattern() is complaining\n");
else
printf("\n");
break;
case MATCH_LITERAL:
printf(" Match Failed on Literal\n");
break;
case MATCH_RANGE:
printf(" Match Failed on [..]\n");
break;
case MATCH_ABORT:
printf(" Match Failed on Early Text Termination\n");
break;
case MATCH_END:
printf(" Match Failed on Early Pattern Termination\n");
break;
case MATCH_PATTERN:
switch ( is_valid_error ) {
case PATTERN_VALID:
printf(" Internal Disagreement On Pattern\n");
break;
case PATTERN_ESC:
printf(" Literal Escape at End of Pattern\n");
break;
case PATTERN_RANGE:
printf(" No End of Range in [..] Construct\n");
break;
case PATTERN_CLOSE:
printf(" [..] Construct is Open\n");
break;
case PATTERN_EMPTY:
printf(" [..] Construct is Empty\n");
break;
default:
printf(" Internal Error in is_valid_pattern()\n");
}
break;
default:
printf(" Internal Error in matche()\n");
break;
}
}
}
return(0);
}
#endif
jex-1.3.7/matchchar.c 100644 0 0 3526 6672726720 12511 0 ustar root root #include "jex.h"
#include <Xm/Text.h>
extern XtAppContext app;
void SearchChar(Editor *e,char *str,int pos,int direction,char sch,char ech)
{
int matches=1,len,comment=0,origpos=pos;
SP("SearchChar");
len=db_strlen(str);
while (pos>=0 && pos<len && matches)
{
if (str[pos]==sch && !comment)
matches++;
else if (str[pos]==ech && !comment)
matches--;
else if (str[pos]=='"' && comment!=2)
{
if ((pos && str[pos-1]!='\\') || (pos>1 && str[pos-2]=='\\'))
comment=comment?0:1;
}
else if (str[pos]=='\'' && comment!=1)
{
if ((pos && str[pos-1]!='\\') || (pos>1 && str[pos-2]=='\\'))
comment=comment?0:2;
}
pos+=direction;
}
if (!matches)
{
pos-=direction;
XmTextShowPosition(e->text,pos);
XmTextSetInsertionPosition(e->text,pos);
XmTextSetSelection(e->text,pos,pos,0);
XmTextSetHighlight(e->text,pos,pos+1,XmHIGHLIGHT_SELECTED);
XmTextSetHighlight(e->text,origpos-direction,origpos-direction+1,XmHIGHLIGHT_SELECTED);
e->tid5=XtAppAddTimeOut(app,250,(XtTimerCallbackProc)NoHighlight,e);
}
EP;
}
void FindMatchingChar(Widget w,Editor *e,void *cbs)
{
char sch,ech,*str;
int direction;
XmTextPosition pos,right;
SP("FindMatchingChar");
XmTextGetSelectionPosition(e->text,&pos,&right);
if (pos==right)
pos=XmTextGetCursorPosition(e->text);
str=XmTextGetString(e->text);
if (db_strlen(str)==0)
{
XtFree(str);
EP;
return;
}
sch=str[pos];
switch (str[pos])
{
case '(': direction=1;ech=')';break;
case '{': direction=1;ech='}';break;
case '[': direction=1;ech=']';break;
case ')': direction=-1;ech='(';break;
case '}': direction=-1;ech='{';break;
case ']': direction=-1;ech='[';break;
default: XtFree(str);EP;return;
}
SearchChar(e,str,pos+direction,direction,sch,ech);
XtFree(str);
EP;
}
jex-1.3.7/options.c 100644 0 0 42016 6672726720 12267 0 ustar root root #include <stdio.h>
#include <stdlib.h>
#include <Xm/MessageB.h>
#include <Xm/Form.h>
#include <Xm/TextF.h>
#include <Xm/LabelG.h>
#include <Xm/ToggleB.h>
#include <Xm/PushBG.h>
#include <Xm/List.h>
#include <Xm/RowColumn.h>
#include "jex.h"
extern Widget top;
extern OwnRes ownres;
extern XtAppContext app;
String auto_indent_on="#override \
Ctrl<Key>Y: delete-line() \n\
<Key>Return: newline-and-indent()";
String auto_indent_off="#override \
Ctrl<Key>Y: delete-line() \n\
<Key>Return: newline()";
void AutoSave(Editor *e,XtIntervalId id)
{
SP("AutoSave");
if (e->filename[0])
Save(NULL,e,NULL);
e->tid4=XtAppAddTimeOut(app,e->autosavetimeout*60000,(XtTimerCallbackProc)AutoSave,e);
EP;
}
void ToggleAutoSave(Widget w,Editor *e,XmToggleButtonCallbackStruct *cbs)
{
SP("ToggleAutoSave");
XtVaSetValues(e->asf,XmNsensitive,cbs->set?True:False,NULL);
EP;
}
void ApplySettings(Editor *e)
{
SP("ApplySettings");
if (e->auto_indent)
XtOverrideTranslations(e->text,XtParseTranslationTable(auto_indent_on));
else
XtOverrideTranslations(e->text,XtParseTranslationTable(auto_indent_off));
if (e->autosave)
{
if (e->sd)
XtVaSetValues(e->asf,XmNsensitive,True,NULL);
if (e->tid4)
XtRemoveTimeOut(e->tid4);
e->tid4=XtAppAddTimeOut(app,e->autosavetimeout*60000,(XtTimerCallbackProc)AutoSave,e);
}
else
{
if (e->sd)
XtVaSetValues(e->asf,XmNsensitive,False,NULL);
if (e->tid4)
XtRemoveTimeOut(e->tid4);
}
EP;
}
void SaveSettings(Editor *e)
{
FILE *f;
char filename[255],*home;
int x;
SP("SaveSettings");
if (ownres.setthome)
{
home=getenv("HOME");
if (home)
sprintf(filename,"%s/.jexrc",home);
else
db_strcpy(filename,".jexrc");
}
else
db_strcpy(filename,".jexrc");
if ((f=db_fopen(filename,"w+"))==NULL)
{
EP;
return;
}
fprintf(f,"autoindent: %d\n",(int)e->auto_indent);
fprintf(f,"undolevels: %d\n",e->undolevels);
fprintf(f,"printcommand: %s\n",e->print_command);
fprintf(f,"compilecommand: %s\n",e->compile_command);
fprintf(f,"makecommand: %s\n",e->make_command);
fprintf(f,"runcommand: %s\n",e->run_command);
for (x=0;x<e->ce_count;x++)
fprintf(f,"compilererror: %s\n",e->compiler_error[x]);
fprintf(f,"newwindow: %d\n",(int)e->new_window);
fprintf(f,"blockundo: %d\n",(int)e->blockundo);
fprintf(f,"autosave: %d\n",(int)e->autosave);
fprintf(f,"autosavetimeout: %d\n",(int)e->autosavetimeout);
db_fclose(f);
EP;
}
void LoadSettings(Editor *e)
{
FILE *f;
char filename[255],*home;
int tmp,x;
SP("LoadSettings");
if (e->ce_count)
{
for (x=0;x<e->ce_count;x++)
db_free(e->compiler_error[x]);
db_free(e->compiler_error);
e->compiler_error=NULL;
e->ce_count=0;
}
if (ownres.setthome)
{
home=getenv("HOME");
if (home)
sprintf(filename,"%s/.jexrc",home);
else
db_strcpy(filename,".jexrc");
}
else
db_strcpy(filename,".jexrc");
if ((f=fopen(filename,"r"))==NULL)
{
if (!e->ce_count)
{
e->compiler_error=(char**)db_realloc(e->compiler_error,(e->ce_count+1)*sizeof(char*));
e->compiler_error[e->ce_count++]=db_strdup("%[^:]:%d");
e->compiler_error=(char**)db_realloc(e->compiler_error,(e->ce_count+1)*sizeof(char*));
e->compiler_error[e->ce_count++]=db_strdup("cc: \"%[^\"]\", line %d:");
}
ApplySettings(e);
EP;
return;
}
while (fscanf(f,"%s",filename)==1)
{
if (db_strcmp(filename,"autoindent:")==0)
{
fscanf(f,"%d",&tmp);
e->auto_indent=(Boolean)tmp;
}
else if (db_strcmp(filename,"newwindow:")==0)
{
fscanf(f,"%d",&tmp);
e->new_window=(Boolean)tmp;
}
else if (db_strcmp(filename,"blockundo:")==0)
{
fscanf(f,"%d",&tmp);
e->blockundo=(Boolean)tmp;
}
else if (db_strcmp(filename,"autosave:")==0)
{
fscanf(f,"%d",&tmp);
e->autosave=(Boolean)tmp;
}
else if (db_strcmp(filename,"autosavetimeout:")==0)
fscanf(f,"%d",&e->autosavetimeout);
else if (db_strcmp(filename,"undolevels:")==0)
fscanf(f,"%d",&e->undolevels);
else if (db_strcmp(filename,"printcommand:")==0)
{
fgets(filename,100,f);
filename[db_strlen(filename)-1]='\0';
tmp=0;
while (filename[tmp]==' ')
tmp++;
db_strcpy(e->print_command,&filename[tmp]);
}
else if (db_strcmp(filename,"compilecommand:")==0)
{
fgets(filename,100,f);
filename[db_strlen(filename)-1]='\0';
tmp=0;
while (filename[tmp]==' ')
tmp++;
db_strcpy(e->compile_command,&filename[tmp]);
}
else if (db_strcmp(filename,"makecommand:")==0)
{
fgets(filename,100,f);
filename[db_strlen(filename)-1]='\0';
tmp=0;
while (filename[tmp]==' ')
tmp++;
db_strcpy(e->make_command,&filename[tmp]);
}
else if (db_strcmp(filename,"runcommand:")==0)
{
fgets(filename,100,f);
filename[db_strlen(filename)-1]='\0';
tmp=0;
while (filename[tmp]==' ')
tmp++;
db_strcpy(e->run_command,&filename[tmp]);
}
else if (db_strcmp(filename,"compilererror:")==0)
{
fgets(filename,100,f);
filename[db_strlen(filename)-1]='\0';
tmp=0;
while (filename[tmp]==' ')
tmp++;
e->compiler_error=(char**)db_realloc(e->compiler_error,(e->ce_count+1)*sizeof(char*));
e->compiler_error[e->ce_count++]=db_strdup(&filename[tmp]);
}
}
if (!e->ce_count)
{
e->compiler_error=(char**)db_realloc(e->compiler_error,(e->ce_count+1)*sizeof(char*));
e->compiler_error[e->ce_count++]=db_strdup("%[^:]:%d");
e->compiler_error=(char**)db_realloc(e->compiler_error,(e->ce_count+1)*sizeof(char*));
e->compiler_error[e->ce_count++]=db_strdup("cc: \"%[^\"]\", line %d:");
}
fclose(f);
ApplySettings(e);
EP;
}
void SettingsOK(Widget w,Editor *e,void *cbs)
{
char *tmpstr;
XmStringTable items;
int c,x;
SP("SettingsOK");
XtVaGetValues(e->ai,XmNset,&e->auto_indent,NULL);
XtVaGetValues(e->nw,XmNset,&e->new_window,NULL);
XtVaGetValues(e->bu,XmNset,&e->blockundo,NULL);
XtVaGetValues(e->ast,XmNset,&e->autosave,NULL);
XtVaGetValues(e->ul,XmNvalue,&tmpstr,NULL);
e->undolevels=atoi(tmpstr);
if (e->undolevels<0)
e->undolevels=0;
XtFree(tmpstr);
XtVaGetValues(e->asf,XmNvalue,&tmpstr,NULL);
e->autosavetimeout=atoi(tmpstr);
if (e->autosavetimeout<=0)
e->autosavetimeout=1;
XtFree(tmpstr);
XtVaGetValues(e->pc,XmNvalue,&tmpstr,NULL);
db_strncpy(e->print_command,tmpstr,99);
XtFree(tmpstr);
XtVaGetValues(e->cc,XmNvalue,&tmpstr,NULL);
db_strncpy(e->compile_command,tmpstr,99);
XtFree(tmpstr);
XtVaGetValues(e->mc,XmNvalue,&tmpstr,NULL);
db_strncpy(e->make_command,tmpstr,99);
XtFree(tmpstr);
XtVaGetValues(e->runc,XmNvalue,&tmpstr,NULL);
db_strncpy(e->run_command,tmpstr,99);
XtFree(tmpstr);
/* XtVaGetValues(e->ce,XmNvalue,&tmpstr,NULL);
db_strncpy(e->compiler_error,tmpstr,99);
XtFree(tmpstr);*/
if (e->ce_count)
{
for (x=0;x<e->ce_count;x++)
db_free(e->compiler_error[x]);
db_free(e->compiler_error);
e->compiler_error=NULL;
e->ce_count=0;
}
XtVaGetValues(e->ce,XmNitemCount,&c,XmNitems,&items,NULL);
if (c)
{
e->compiler_error=(char**)db_malloc(sizeof(char*)*c);
e->ce_count=c;
for (x=0;x<c;x++)
{
XmStringGetLtoR(items[x],XmSTRING_DEFAULT_CHARSET,&tmpstr);
e->compiler_error[x]=db_strdup(tmpstr);
XtFree(tmpstr);
}
}
ApplySettings(e);
SaveSettings(e);
SetCurrentWidget(e->text);
EP;
}
void SettingsCancel(Widget w,Editor *e,void *cbs)
{
SetCurrentWidget(e->text);
}
void AddCE(Widget w,Editor *e,void *cbs)
{
char *str="";
XmString xstr;
int *pos,count;
SP("AddCE");
#ifndef LESSTIFF
XtVaGetValues(XtNameToWidget(e->sd,"*CEField"),XmNvalue,&str,NULL);
#endif
if (str[0])
{
xstr=XmStringCreateLocalized(str);
if (XmListGetSelectedPos(e->ce,&pos,&count))
{
XmListAddItem(e->ce,xstr,pos[0]+1);
XmListSelectPos(e->ce,pos[0]+1,True);
XmListSetBottomPos(e->ce,pos[0]+1);
XmStringFree(xstr);
XtFree((char*)pos);
}
else
{
XmListAddItem(e->ce,xstr,0);
XmListSelectPos(e->ce,0,True);
XmListSetBottomPos(e->ce,0);
XmStringFree(xstr);
}
}
XtFree(str);
EP;
}
void ModifyCE(Widget w,Editor *e,void *cbs)
{
char *str="";
XmString xstr;
int *pos,count;
SP("ModifyCE");
#ifndef LESSTIFF
XtVaGetValues(XtNameToWidget(e->sd,"*CEField"),XmNvalue,&str,NULL);
#endif
if (str[0])
{
if (XmListGetSelectedPos(e->ce,&pos,&count))
{
xstr=XmStringCreateLocalized(str);
XmListReplaceItemsPos(e->ce,&xstr,1,pos[0]);
XmListSelectPos(e->ce,pos[0],True);
XmStringFree(xstr);
XtFree((char*)pos);
}
}
XtFree(str);
EP;
}
void RemoveCE(Widget w,Editor *e,void *cbs)
{
int *pos,count;
SP("RemoveCE");
if (XmListGetSelectedPos(e->ce,&pos,&count))
{
XmListDeletePos(e->ce,pos[0]);
XtVaGetValues(e->ce,XmNitemCount,&count,NULL);
if (pos[0]>count)
{
if (!count)
{
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->sd,"*CEField"),XmNvalue,"",NULL);
#endif
}
else
{
XmListSelectPos(e->ce,0,True);
XmListSetBottomPos(e->ce,0);
}
}
else
{
XmListSelectPos(e->ce,pos[0],True);
XmListSetBottomPos(e->ce,pos[0]);
}
XtFree((char*)pos);
}
EP;
}
void SelectCE(Widget w,Editor *e,void *cbs)
{
int count;
XmStringTable items;
char *str;
SP("SelectCE");
XtVaGetValues(e->ce,XmNselectedItemCount,&count,XmNselectedItems,&items,NULL);
if (count)
{
XmStringGetLtoR(items[0],XmSTRING_DEFAULT_CHARSET,&str);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->sd,"*CEField"),XmNvalue,str,NULL);
#endif
XtFree(str);
}
else
{
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->sd,"*CEField"),XmNvalue,"",NULL);
#endif
}
EP;
}
void Settings(Editor *e)
{
char tmpstr[100];
int x;
XmString xstr;
Widget w,rc;
Arg arg[2];
SP("Settings");
if (e->sd==NULL)
{
e->sd=XmCreateMessageDialog(e->shell,"Settings",NULL,0);
XtAddCallback(e->sd,XmNokCallback,(XtCallbackProc)SettingsOK,e);
XtAddCallback(e->sd,XmNcancelCallback,(XtCallbackProc)SettingsCancel,e);
XtAddCallback(e->sd,XmNhelpCallback,(XtCallbackProc)Help,"Settings");
e->sf=XtVaCreateManagedWidget("settingsform",xmFormWidgetClass,e->sd,
XmNfractionBase,2,
NULL);
e->ai=XtVaCreateManagedWidget("AutoIndent",xmToggleButtonWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_FORM,
NULL);
e->nw=XtVaCreateManagedWidget("NewWindow",xmToggleButtonWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->ai,
XmNleftAttachment,XmATTACH_FORM,
NULL);
e->bu=XtVaCreateManagedWidget("BlockUndo",xmToggleButtonWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->nw,
XmNleftAttachment,XmATTACH_FORM,
NULL);
e->ul=XtVaCreateManagedWidget("UndoLevels",xmTextFieldWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->bu,
XmNleftAttachment,XmATTACH_POSITION,
XmNleftPosition,1,
XmNrightAttachment,XmATTACH_FORM,
NULL);
e->ull=XtVaCreateManagedWidget("UndoLevelLabel",xmLabelGadgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->bu,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
XmNbottomAttachment,XmATTACH_OPPOSITE_WIDGET,
XmNbottomWidget,e->ul,
NULL);
e->pc=XtVaCreateManagedWidget("PrintCommand",xmTextFieldWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->ul,
XmNleftAttachment,XmATTACH_POSITION,
XmNleftPosition,1,
XmNrightAttachment,XmATTACH_FORM,
NULL);
e->pcl=XtVaCreateManagedWidget("PrintCommLabel",xmLabelGadgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->ull,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
XmNbottomAttachment,XmATTACH_OPPOSITE_WIDGET,
XmNbottomWidget,e->pc,
NULL);
e->cc=XtVaCreateManagedWidget("CompileCommand",xmTextFieldWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->pc,
XmNleftAttachment,XmATTACH_POSITION,
XmNleftPosition,1,
XmNrightAttachment,XmATTACH_FORM,
NULL);
e->ccl=XtVaCreateManagedWidget("CompileCommLabel",xmLabelGadgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->pcl,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
XmNbottomAttachment,XmATTACH_OPPOSITE_WIDGET,
XmNbottomWidget,e->cc,
NULL);
e->mc=XtVaCreateManagedWidget("MakeCommand",xmTextFieldWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->cc,
XmNleftAttachment,XmATTACH_POSITION,
XmNleftPosition,1,
XmNrightAttachment,XmATTACH_FORM,
NULL);
e->mcl=XtVaCreateManagedWidget("MakeCommLabel",xmLabelGadgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->ccl,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
XmNbottomAttachment,XmATTACH_OPPOSITE_WIDGET,
XmNbottomWidget,e->mc,
NULL);
e->runc=XtVaCreateManagedWidget("RunCommand",xmTextFieldWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->mc,
XmNleftAttachment,XmATTACH_POSITION,
XmNleftPosition,1,
XmNrightAttachment,XmATTACH_FORM,
NULL);
e->runcl=XtVaCreateManagedWidget("RunCommLabel",xmLabelGadgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->mcl,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
XmNbottomAttachment,XmATTACH_OPPOSITE_WIDGET,
XmNbottomWidget,e->runc,
NULL);
e->cel=XtVaCreateManagedWidget("CompileErrorLabel",xmLabelGadgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->runcl,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_NONE,
XmNbottomAttachment,XmATTACH_NONE,
NULL);
rc=XtVaCreateManagedWidget("CERC",xmRowColumnWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->cel,
XmNrightAttachment,XmATTACH_FORM,
XmNbottomAttachment,XmATTACH_NONE,
XmNorientation,XmVERTICAL,
NULL);
w=XtVaCreateManagedWidget("Add",xmPushButtonGadgetClass,rc,NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)AddCE,(void*)e);
w=XtVaCreateManagedWidget("Modify",xmPushButtonGadgetClass,rc,NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)ModifyCE,(void*)e);
w=XtVaCreateManagedWidget("Delete",xmPushButtonGadgetClass,rc,NULL);
XtAddCallback(w,XmNactivateCallback,(XtCallbackProc)RemoveCE,(void*)e);
XtSetArg(arg[0],XmNlistSizePolicy,XmRESIZE_IF_POSSIBLE);
e->ce=XmCreateScrolledList(e->sf,"CompileError",arg,1);
XtManageChild(e->ce);
XtVaSetValues(XtParent(e->ce),
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->cel,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_WIDGET,
XmNrightWidget,rc,
NULL);
XtAddCallback(e->ce,XmNbrowseSelectionCallback,(XtCallbackProc)SelectCE,(void*)e);
w=XtVaCreateManagedWidget("CEField",xmTextFieldWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,XtParent(e->ce),
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_OPPOSITE_WIDGET,
XmNrightWidget,e->ce,
NULL);
e->asf=XtVaCreateManagedWidget("AutoSave",xmTextFieldWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,w,
XmNleftAttachment,XmATTACH_POSITION,
XmNleftPosition,1,
XmNrightAttachment,XmATTACH_FORM,
NULL);
e->ast=XtVaCreateManagedWidget("AutoSaveToggle",xmToggleButtonWidgetClass,e->sf,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,w,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
XmNbottomAttachment,XmATTACH_OPPOSITE_WIDGET,
XmNbottomWidget,e->asf,
NULL);
XtAddCallback(e->ast,XmNvalueChangedCallback,(XtCallbackProc)ToggleAutoSave,e);
}
XtVaSetValues(e->ai,XmNset,e->auto_indent,NULL);
XtVaSetValues(e->nw,XmNset,e->new_window,NULL);
XtVaSetValues(e->bu,XmNset,e->blockundo,NULL);
sprintf(tmpstr,"%d",e->undolevels);
XtVaSetValues(e->ul,XmNvalue,tmpstr,NULL);
XtVaSetValues(e->pc,XmNvalue,e->print_command,NULL);
XtVaSetValues(e->cc,XmNvalue,e->compile_command,NULL);
XtVaSetValues(e->mc,XmNvalue,e->make_command,NULL);
XtVaSetValues(e->runc,XmNvalue,e->run_command,NULL);
/* XtVaSetValues(e->ce,XmNvalue,e->compiler_error,NULL);*/
XmListDeleteAllItems(e->ce);
for (x=0;x<e->ce_count;x++)
{
xstr=XmStringCreateLocalized(e->compiler_error[x]);
XmListAddItem(e->ce,xstr,0);
XmStringFree(xstr);
}
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->sd,"*CEField"),XmNvalue,"",NULL);
#endif
XtVaSetValues(e->ast,XmNset,e->autosave,NULL);
sprintf(tmpstr,"%d",e->autosavetimeout);
XtVaSetValues(e->asf,XmNvalue,tmpstr,XmNsensitive,e->autosave,NULL);
XtManageChild(e->sd);
EP;
}
jex-1.3.7/shift.c 100644 0 0 6575 6672726720 11703 0 ustar root root #include <Xm/TextStrSoP.h>
#include <Xm/Text.h>
#include "jex.h"
extern Widget text;
void RemoveTabs(char **str)
{
int col=0,x;
SP("RemoveTabs");
for (x=0;x<strlen(*str);x++)
{
if ((*str)[x]=='\n')
col=0;
else if ((*str)[x]=='\t')
{
*str=XtRealloc(*str,strlen(*str)+8-col%8+1);
memmove(&(*str)[x+8-col%8],&(*str)[x+1],strlen(&(*str)[x+1])+1);
memset(&(*str)[x],' ',8-col%8);
col++;
}
else
col++;
}
EP;
}
void ShiftRight(Widget w,Editor *e,void *cbs)
{
char *str;
XmTextPosition left,right;
int len,pos=0,selection=1,nl=1;
SP("ShiftRight");
if (e->read_only)
{
EP;
return;
}
WatchCursor(e,1);
XtVaGetValues(e->text,XmNvalue,&str,NULL);
len=db_strlen(str);
if (!XmTextGetSelectionPosition(e->text,&left,&right) || left==right)
{
left=right=XmTextGetInsertionPosition(e->text);
selection=0;
}
while (left>0 && str[left-1]!='\0' && str[left-1]!='\n')
left--;
if ((right && str[right-1]!='\n') || right!=left)
right--;
while (right>=0 && right<len && str[right]!='\0' && str[right]!='\n')
right++;
if (left>=right)
{
XtFree(str);
WatchCursor(e,0);
EP;
return;
}
XtFree(str);
XmTextSetSelection(e->text,left,right,0);
str=XmTextGetSelection(e->text);
RemoveTabs(&str);
while (pos<db_strlen(str))
{
if (!pos || (pos && str[pos-1]=='\n'))
nl=1;
if (nl && str[pos]!=' ' && str[pos]!='\t')
{
str=XtRealloc(str,db_strlen(str)+2);
db_memmove(&str[pos+1],&str[pos],db_strlen(str)-pos+1);
str[pos]=' ';
nl=0;
}
pos++;
}
XmTextReplace(e->text,left,right,str);
if (selection)
XmTextSetSelection(e->text,left,left+db_strlen(str),0);
XtFree(str);
SetCurrentWidget(e->text);
WatchCursor(e,0);
EP;
}
void ShiftLeft(Widget w,Editor *e,void *cbs)
{
char *str;
XmTextPosition left,right;
int len,pos=0,selection=1,nl=0;
SP("ShiftLeft");
if (e->read_only)
{
EP;
return;
}
WatchCursor(e,1);
XtVaGetValues(e->text,XmNvalue,&str,NULL);
len=db_strlen(str);
if (!XmTextGetSelectionPosition(e->text,&left,&right) || left==right)
{
left=right=XmTextGetInsertionPosition(e->text);
selection=0;
}
while (left>0 && str[left-1]!='\0' && str[left-1]!='\n')
left--;
if ((right && str[right-1]!='\n') || right!=left)
right--;
while (right>=0 && right<len && str[right]!='\0' && str[right]!='\n')
right++;
if (left>=right)
{
XtFree(str);
WatchCursor(e,0);
EP;
return;
}
XtFree(str);
XmTextSetSelection(e->text,left,right,0);
str=XmTextGetSelection(e->text);
RemoveTabs(&str);
while (pos<db_strlen(str))
{
if ((!pos || (pos && str[pos-1]=='\n')))
nl=2;
/* if (nl && str[pos]=='\t')
{
str=XtRealloc(str,db_strlen(str)+10);
db_memmove(&str[pos+8],&str[pos+1],db_strlen(str)-pos+1);
str[pos]=' ';
str[pos+1]=' ';
str[pos+2]=' ';
str[pos+3]=' ';
str[pos+4]=' ';
str[pos+5]=' ';
str[pos+6]=' ';
str[pos+7]=' ';
}*/
if (nl==2 && str[pos]==' ')
{
db_memmove(&str[pos],&str[pos+1],db_strlen(str)-pos);
nl=1;
}
if (nl && str[pos]!=' ' && str[pos]!='\t')
nl=0;
pos++;
}
XmTextReplace(e->text,left,right,str);
if (selection)
XmTextSetSelection(e->text,left,left+db_strlen(str),0);
XtFree(str);
SetCurrentWidget(e->text);
WatchCursor(e,0);
EP;
}
jex-1.3.7/smallhelp.c 100644 0 0 11142 6672726720 12551 0 ustar root root #include "jex.h"
#include <Xm/RowColumn.h>
#include <X11/cursorfont.h>
XtIntervalId sh_timer=0,sh_timer2=0;
struct {
Widget w,menu;
int topic,n;
XEvent event;
} sh_topic;
extern XtAppContext app;
void SetLeave(void *n,XtIntervalId tid)
{
SP("SetLeave");
XtAddEventHandler(sh_topic.w,LeaveWindowMask,False,(XtEventHandler)RemoveSmallHelp,NULL);
EP;
}
void ShowSmallHelp(void *n,XtIntervalId tid)
{
XButtonPressedEvent xbe;
XmString xstr;
Position y,y2,h,x,x2,w;
Widget tmp;
static Cursor cursor=0;
SP("ShowSmallHalp");
sh_topic.n=2;
/* XtRemoveEventHandler(sh_topic.w,LeaveWindowMask,False,(XtEventHandler)RemoveSmallHelp,NULL);*/
switch (sh_topic.topic)
{
case 1: xstr=XmStringCreateLocalized("New");break;
case 2: xstr=XmStringCreateLocalized("Open");break;
case 3: xstr=XmStringCreateLocalized("Save");break;
case 4: xstr=XmStringCreateLocalized("New Window");break;
case 5: xstr=XmStringCreateLocalized("Clone");break;
case 6: xstr=XmStringCreateLocalized("Cut");break;
case 7: xstr=XmStringCreateLocalized("Copy");break;
case 8: xstr=XmStringCreateLocalized("Paste");break;
case 9: xstr=XmStringCreateLocalized("Clear");break;
case 10: xstr=XmStringCreateLocalized("Undo");break;
case 11: xstr=XmStringCreateLocalized("Redo");break;
case 12: xstr=XmStringCreateLocalized("Shift left");break;
case 13: xstr=XmStringCreateLocalized("Shift right");break;
case 14: xstr=XmStringCreateLocalized("Compile");break;
case 15: xstr=XmStringCreateLocalized("Make");break;
case 16: xstr=XmStringCreateLocalized("Grep");break;
case 17: xstr=XmStringCreateLocalized("Find downward");break;
case 18: xstr=XmStringCreateLocalized("Find upward");break;
case 19: xstr=XmStringCreateLocalized("Replace downward");break;
case 20: xstr=XmStringCreateLocalized("Replace all");break;
case 21: xstr=XmStringCreateLocalized("Capitals");break;
case 22: xstr=XmStringCreateLocalized("Lowers");break;
case 23: xstr=XmStringCreateLocalized("Set marker");break;
case 24: xstr=XmStringCreateLocalized("Goto marker");break;
case 25: xstr=XmStringCreateLocalized("Goto line number");break;
case 26: xstr=XmStringCreateLocalized("Run");break;
case 27: xstr=XmStringCreateLocalized("Goto line");break;
default: xstr=XmStringCreateLocalized("Unknown");break;
}
sh_topic.menu=XmVaCreateSimplePopupMenu(sh_topic.w,"SmallHelpPopup",NULL,
XmVaTITLE,xstr,NULL,NULL,NULL,
NULL);
if(!cursor)
cursor = XCreateFontCursor(XtDisplay(sh_topic.menu), XC_top_left_arrow);
XmSetMenuCursor(XtDisplay(sh_topic.menu),cursor);
XmStringFree(xstr);
xbe=*(XButtonPressedEvent*)&sh_topic.event;
tmp=XtParent(sh_topic.w);
y2=0;
x2=0;
while (!XtIsShell(tmp))
{
XtVaGetValues(tmp,XmNx,&x,XmNy,&y,NULL);
x2+=x;
y2+=y;
tmp=XtParent(tmp);
}
XtVaGetValues(sh_topic.w,XmNx,&x,XmNy,&y,XmNwidth,&w,XmNheight,&h,NULL);
xbe.y_root=y2+y+h;
xbe.x_root=x2+x+w;
XmMenuPosition(sh_topic.menu,&xbe);
XtVaSetValues(sh_topic.menu,XmNx,xbe.x_root,XmNy,xbe.y_root,NULL);
XtManageChild(sh_topic.menu);
/* XtAppAddTimeOut(app,10,(XtTimerCallbackProc)SetLeave,NULL);*/
sh_timer=0;
EP;
}
void DoNothing(void *n,XtIntervalId tid)
{
SP("DoNothing");
sh_timer2=0;
EP;
}
void SmallHelp(Widget w,int n,XEvent *event)
{
SP("SmallHelp");
sh_topic.w=w;
sh_topic.topic=n;
sh_topic.event=*event;
sh_topic.n=1;
if (sh_timer2)
{
XtRemoveTimeOut(sh_timer2);
sh_timer2=XtAppAddTimeOut(app,200,(XtTimerCallbackProc)DoNothing,NULL);
if (sh_timer)
XtRemoveTimeOut(sh_timer);
sh_timer=XtAppAddTimeOut(app,200,(XtTimerCallbackProc)ShowSmallHelp,NULL);
}
else if (sh_timer)
{
XtRemoveTimeOut(sh_timer);
sh_timer=XtAppAddTimeOut(app,200,(XtTimerCallbackProc)ShowSmallHelp,NULL);
}
else
sh_timer=XtAppAddTimeOut(app,1000,(XtTimerCallbackProc)ShowSmallHelp,NULL);
EP;
}
void RemoveSmallHelp(Widget w,int n,void *cbs)
{
static Cursor cursor=0;
Widget tmp;
int x;
SP("RemoveSmallHelp");
if (sh_timer)
{
XtRemoveTimeOut(sh_timer);
sh_timer=0;
}
sh_topic.n--;
if ((!sh_topic.n || n) && sh_topic.menu)
{
if(!cursor)
cursor = XCreateFontCursor(XtDisplay(sh_topic.menu), XC_arrow);
XmSetMenuCursor(XtDisplay(sh_topic.menu),cursor);
XtUnmanageChild(sh_topic.menu);
XtDestroyWidget(sh_topic.menu);
sh_topic.menu=NULL;
sh_timer2=XtAppAddTimeOut(app,500,(XtTimerCallbackProc)DoNothing,NULL);
}
tmp=w;
while (!XtIsShell(tmp))
tmp=XtParent(tmp);
for (x=0;x<editors;x++)
{
if (editor[x]->shell==tmp)
SetCurrentWidget(editor[x]->text);
}
EP;
}
jex-1.3.7/statist.c 100644 0 0 11024 6672726720 12262 0 ustar root root #include <Xm/Form.h>
#include <Xm/MessageB.h>
#include <Xm/TextF.h>
#include <Xm/LabelG.h>
#include "jex.h"
extern XtAppContext app;
void GetStatistics(Editor *e,XtIntervalId tid)
{
int len,ln,x;
char *str,tmp[30];
SP("GetStatistics");
XtVaGetValues(e->text,XmNvalue,&str,NULL);
len=db_strlen(str);
ln=1;
for (x=0;x<len;x++)
{
if (str[x]=='\n')
ln++;
}
XtFree(str);
sprintf(tmp,"%d",ln);
XtVaSetValues(e->statln,XmNvalue,tmp,NULL);
sprintf(tmp,"%d",len);
XtVaSetValues(e->statch,XmNvalue,tmp,NULL);
sprintf(tmp,"%d",e->changes);
XtVaSetValues(e->statchan,XmNvalue,tmp,NULL);
sprintf(tmp,"%d",e->undosize);
XtVaSetValues(e->statundo,XmNvalue,tmp,NULL);
sprintf(tmp,"%d",e->redosize);
XtVaSetValues(e->statredo,XmNvalue,tmp,NULL);
e->tid3=XtAppAddTimeOut(app,5000,(XtTimerCallbackProc)GetStatistics,(void*)e);
EP;
}
void StatOK(Widget w,Editor *e,void *cbs)
{
SP("StatOK");
if (e->tid3)
XtRemoveTimeOut(e->tid3);
SetCurrentWidget(e->text);
EP;
}
void StatCancel(Widget w,Editor *e,void *cbs)
{
SP("StatCancel");
SetCurrentWidget(e->text);
EP;
}
void ShowStats(Editor *e)
{
Widget f,w1;
SP("ShowStats");
WatchCursor(e,1);
if (e->std==NULL)
{
e->std=XmCreateMessageDialog(e->shell,"StatDialog",NULL,0);
XtUnmanageChild(XmMessageBoxGetChild(e->std,XmDIALOG_CANCEL_BUTTON));
XtUnmanageChild(XmMessageBoxGetChild(e->std,XmDIALOG_HELP_BUTTON));
XtAddCallback(e->std,XmNokCallback,(XtCallbackProc)StatOK,(void*)e);
XtAddCallback(e->std,XmNcancelCallback,(XtCallbackProc)StatCancel,(void*)e);
f=XtVaCreateManagedWidget("StatForm",xmFormWidgetClass,e->std,
XmNfractionBase,2,NULL);
w1=XtVaCreateManagedWidget("StatLinesLabel",xmLabelGadgetClass,f,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_FORM,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
XmNtopOffset,5,
NULL);
e->statln=XtVaCreateManagedWidget("StatLinesField",xmTextFieldWidgetClass,f,
XmNtopAttachment,XmATTACH_FORM,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w1,
XmNrightAttachment,XmATTACH_FORM,
XmNeditable,False,
NULL);
w1=XtVaCreateManagedWidget("StatCharsLabel",xmLabelGadgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->statln,
XmNleftAttachment,XmATTACH_FORM,
XmNtopOffset,5,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
NULL);
e->statch=XtVaCreateManagedWidget("StatCharsField",xmTextFieldWidgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->statln,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w1,
XmNrightAttachment,XmATTACH_FORM,
XmNeditable,False,
NULL);
w1=XtVaCreateManagedWidget("StatChangesLabel",xmLabelGadgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->statch,
XmNleftAttachment,XmATTACH_FORM,
XmNtopOffset,5,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
NULL);
e->statchan=XtVaCreateManagedWidget("StatChangesField",xmTextFieldWidgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->statch,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w1,
XmNrightAttachment,XmATTACH_FORM,
XmNeditable,False,
NULL);
w1=XtVaCreateManagedWidget("StatUndoLabel",xmLabelGadgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->statchan,
XmNleftAttachment,XmATTACH_FORM,
XmNtopOffset,5,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
NULL);
e->statundo=XtVaCreateManagedWidget("StatUndoField",xmTextFieldWidgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->statchan,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w1,
XmNrightAttachment,XmATTACH_FORM,
XmNeditable,False,
NULL);
w1=XtVaCreateManagedWidget("StatRedoLabel",xmLabelGadgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->statundo,
XmNleftAttachment,XmATTACH_FORM,
XmNtopOffset,5,
XmNrightAttachment,XmATTACH_POSITION,
XmNrightPosition,1,
NULL);
e->statredo=XtVaCreateManagedWidget("StatRedoField",xmTextFieldWidgetClass,f,
XmNtopAttachment,XmATTACH_WIDGET,
XmNtopWidget,e->statundo,
XmNleftAttachment,XmATTACH_WIDGET,
XmNleftWidget,w1,
XmNrightAttachment,XmATTACH_FORM,
XmNeditable,False,
NULL);
}
if (!e->tid3)
e->tid3=XtAppAddTimeOut(app,5000,(XtTimerCallbackProc)GetStatistics,(void*)e);
XtManageChild(e->std);
GetStatistics(e,0);
WatchCursor(e,0);
EP;
}
jex-1.3.7/undo.c 100644 0 0 22751 6672726720 11545 0 ustar root root #include <Xm/Text.h>
#include <stdlib.h>
#include "jex.h"
void NoUndo(Editor *e)
{
Undo_T tundo;
SP("NoUndo");
while (GetFirstElement(e->undolist,&tundo))
{
if (tundo.deletesize)
db_free(tundo.undelete);
DeleteFirstElement(e->undolist);
}
while (GetFirstElement(e->redolist,&tundo))
{
if (tundo.deletesize)
db_free(tundo.undelete);
DeleteFirstElement(e->redolist);
}
e->undosize=0;
e->changes=0;
e->redosize=0;
XtVaSetValues(e->undo,XmNsensitive,False,NULL);
XtVaSetValues(e->redo,XmNsensitive,False,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*editmenu.button_0"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->mb,"*editmenu.button_1"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->text,"*Popup.button_4"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->text,"*Popup.button_5"),XmNsensitive,False,NULL);
#endif
EP;
}
void DeleteText(Widget w,Editor *e,XmTextVerifyCallbackStruct *cbs)
{
char *buf;
Undo_T tundo,pu;
int changed=0;
SP("DeleteText");
if (e->lastaction!=1 && e->undosize>e->undolevels)
{
GetFirstElement(e->undolist,&tundo);
if (tundo.deletesize)
db_free(tundo.undelete);
e->undosize--;
DeleteFirstElement(e->undolist);
}
else if (e->lastaction==1 && e->redosize>e->undolevels)
{
GetFirstElement(e->redolist,&tundo);
if (tundo.deletesize)
db_free(tundo.undelete);
e->redosize--;
DeleteFirstElement(e->redolist);
}
tundo.insertsize=cbs->text->length;
tundo.pos=cbs->startPos;
if (cbs->startPos!=cbs->endPos)
{
tundo.deletesize=cbs->endPos-cbs->startPos;
if (e->marker!=-1)
{
if (e->marker>=cbs->endPos)
e->marker-=tundo.deletesize;
else if (e->marker>=cbs->startPos && e->marker<cbs->endPos)
RemoveMarker(e);
}
XtVaGetValues(w,XmNvalue,&buf,NULL);
if ((tundo.undelete=(char*)db_malloc(tundo.deletesize+1))==NULL)
{
XtFree(buf);
EP;
return;
}
db_strncpy(tundo.undelete,&buf[cbs->startPos],tundo.deletesize);
tundo.undelete[tundo.deletesize]='\0';
XtFree(buf);
}
else
{
tundo.deletesize=0;
}
if (e->marker>=cbs->startPos)
e->marker+=tundo.insertsize;
if (e->lastaction==1)
{
AddElement(e->redolist,&tundo);
e->lastaction=0;
if (!e->redosize)
{
XtVaSetValues(e->redo,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*editmenu.button_1"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->text,"*Popup.button_5"),XmNsensitive,True,NULL);
#endif
}
e->redosize++;
}
else
{
if (e->blockundo)
{
if (GetLastElement(e->undolist,&pu))
{
if (/*pu.insertsize && !pu.deletesize &&*/ tundo.insertsize && !tundo.deletesize &&
tundo.pos-pu.insertsize==pu.pos)
{
pu.insertsize+=tundo.insertsize;
ReplaceCurrentElement(e->undolist,&pu);
changed=1;
}
else if (!pu.insertsize && pu.deletesize && !tundo.insertsize && tundo.deletesize &&
tundo.pos==pu.pos)
{
pu.undelete=db_realloc(pu.undelete,pu.deletesize+tundo.deletesize+1);
db_memcpy(&pu.undelete[pu.deletesize],tundo.undelete,tundo.deletesize+1);
pu.deletesize+=tundo.deletesize;
db_free(tundo.undelete);
ReplaceCurrentElement(e->undolist,&pu);
changed=1;
}
else if (!pu.insertsize && pu.deletesize && !tundo.insertsize && tundo.deletesize &&
pu.pos-tundo.deletesize==tundo.pos)
{
tundo.undelete=db_realloc(tundo.undelete,tundo.deletesize+pu.deletesize+1);
db_memcpy(&tundo.undelete[tundo.deletesize],pu.undelete,pu.deletesize+1);
tundo.deletesize+=pu.deletesize;
db_free(pu.undelete);
ReplaceCurrentElement(e->undolist,&tundo);
changed=1;
}
}
}
if (!changed)
{
AddElement(e->undolist,&tundo);
if (!e->undosize)
{
XtVaSetValues(e->undo,XmNsensitive,True,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*editmenu.button_0"),XmNsensitive,True,NULL);
XtVaSetValues(XtNameToWidget(e->text,"*Popup.button_4"),XmNsensitive,True,NULL);
#endif
}
e->undosize++;
e->changes++;
}
if (!e->lastaction)
{
while (GetFirstElement(e->redolist,&tundo))
{
if (tundo.deletesize)
db_free(tundo.undelete);
DeleteFirstElement(e->redolist);
}
e->redosize=0;
XtVaSetValues(e->redo,XmNsensitive,False,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*editmenu.button_1"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->text,"*Popup.button_5"),XmNsensitive,False,NULL);
#endif
}
else
e->lastaction=0;
}
EP;
}
void UndoAction(Widget w,Editor *e,void *cbs)
{
Undo_T tundo;
int is,ds;
SP("UndoAction");
if (e->read_only)
{
SetCurrentWidget(e->text);
EP;
return;
}
if (!GetLastElement(e->undolist,&tundo))
{
SetCurrentWidget(e->text);
EP;
return;
}
WatchCursor(e,1);
do
{
is=tundo.insertsize;
ds=tundo.deletesize;
e->lastaction=1;
e->undosize--;
e->changes--;
if (!e->undosize)
{
XtVaSetValues(e->undo,XmNsensitive,False,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*editmenu.button_0"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->text,"*Popup.button_4"),XmNsensitive,False,NULL);
#endif
}
if (tundo.insertsize && tundo.deletesize)
{
XmTextReplace(e->text,tundo.pos,tundo.insertsize+tundo.pos,tundo.undelete);
db_free(tundo.undelete);
XmTextSetInsertionPosition(e->text,tundo.pos+tundo.deletesize);
}
else if (tundo.insertsize)
{
XmTextReplace(e->text,tundo.pos,tundo.pos+tundo.insertsize,"");
XmTextSetInsertionPosition(e->text,tundo.pos+tundo.insertsize);
}
else if (tundo.deletesize)
{
XmTextInsert(e->text,tundo.pos,tundo.undelete);
db_free(tundo.undelete);
XmTextSetInsertionPosition(e->text,tundo.pos+tundo.deletesize);
}
DeleteLastElement(e->undolist);
if (!GetLastElement(e->undolist,&tundo))
break;
} while (e->blockundo && tundo.insertsize==is && tundo.deletesize==ds);
if (!e->changes)
{
/* XtUnmanageChild(e->save);*/
SetSave(e,False);
e->saved=1;
}
SetCurrentWidget(e->text);
WatchCursor(e,0);
EP;
}
void RedoAction(Widget w,Editor *e,void *cbs)
{
Undo_T undo;
int is,ds;
SP("RedoAction");
if (e->read_only)
{
SetCurrentWidget(e->text);
EP;
return;
}
if (!GetLastElement(e->redolist,&undo))
{
SetCurrentWidget(e->text);
EP;
return;
}
WatchCursor(e,1);
do
{
is=undo.insertsize;
ds=undo.deletesize;
e->redosize--;
if (!e->redosize)
{
XtVaSetValues(e->redo,XmNsensitive,False,NULL);
#ifndef LESSTIFF
XtVaSetValues(XtNameToWidget(e->mb,"*editmenu.button_1"),XmNsensitive,False,NULL);
XtVaSetValues(XtNameToWidget(e->text,"*Popup.button_5"),XmNsensitive,False,NULL);
#endif
}
e->lastaction=2;
if (undo.insertsize && undo.deletesize)
{
XmTextReplace(e->text,undo.pos,undo.insertsize+undo.pos,undo.undelete);
db_free(undo.undelete);
XmTextSetInsertionPosition(e->text,undo.pos+undo.deletesize);
}
else if (undo.insertsize)
{
XmTextReplace(e->text,undo.pos,undo.pos+undo.insertsize,"");
XmTextSetInsertionPosition(e->text,undo.pos+undo.insertsize);
}
else if (undo.deletesize)
{
XmTextInsert(e->text,undo.pos,undo.undelete);
db_free(undo.undelete);
XmTextSetInsertionPosition(e->text,undo.pos+undo.deletesize);
}
DeleteLastElement(e->redolist);
if (!GetLastElement(e->redolist,&undo))
break;
} while (e->blockundo && is==undo.insertsize && ds==undo.deletesize);
SetCurrentWidget(e->text);
WatchCursor(e,0);
EP;
}
void RepeatAction(Widget w,Editor *e,void *cbs)
{
Undo_T tundo;
int is,ds,tmp;
char *str;
XmTextPosition pos,curpos;
SP("RepeatAction");
if (e->read_only)
{
SetCurrentWidget(e->text);
EP;
return;
}
if (!GetLastElement(e->undolist,&tundo))
{
SetCurrentWidget(e->text);
EP;
return;
}
WatchCursor(e,1);
is=tundo.insertsize;
ds=tundo.deletesize;
curpos=XmTextGetInsertionPosition(e->text);
if (tundo.insertsize && tundo.deletesize)
{
XmTextSetSelection(e->text,tundo.pos,tundo.insertsize+tundo.pos,0);
str=XmTextGetSelection(e->text);
if (XmTextFindString(e->text,curpos,tundo.undelete,XmTEXT_FORWARD,&pos))
{
XmTextReplace(e->text,pos,tundo.deletesize+pos,str);
XmTextSetSelection(e->text,0,0,0);
XmTextSetInsertionPosition(e->text,pos+tundo.insertsize);
}
else
{
XmTextSetSelection(e->text,0,0,0);
XmTextSetInsertionPosition(e->text,curpos);
}
XtFree(str);
}
else if (tundo.deletesize)
{
if (XmTextFindString(e->text,curpos,tundo.undelete,XmTEXT_FORWARD,&pos))
{
XmTextReplace(e->text,pos,tundo.deletesize+pos,"");
XmTextSetInsertionPosition(e->text,pos);
}
}
else if (tundo.insertsize)
{
XmTextSetSelection(e->text,tundo.pos,tundo.insertsize+tundo.pos,0);
str=XmTextGetSelection(e->text);
tmp=e->blockundo;
e->blockundo=0;
XmTextInsert(e->text,curpos,str);
e->blockundo=tmp;
XmTextSetSelection(e->text,0,0,0);
XmTextSetInsertionPosition(e->text,curpos+strlen(str));
XtFree(str);
}
SetCurrentWidget(e->text);
WatchCursor(e,0);
EP;
}
jex-1.3.7/version.c 100644 0 0 2402 6672726722 12236 0 ustar root root #include <Xm/MessageB.h>
#include "jex.h"
#include "list.h"
extern Widget top;
extern XtAppContext app;
void ReallyShowVersion(void)
{
Widget w;
XmString xstr;
char str[100];
SP("ReallyShowVersion");
w=XmCreateInformationDialog(top,"VersionDialog",NULL,0);
XtUnmanageChild(XmMessageBoxGetChild(w,XmDIALOG_CANCEL_BUTTON));
XtUnmanageChild(XmMessageBoxGetChild(w,XmDIALOG_HELP_BUTTON));
sprintf(str,"You are now using version %d.%d.%d of jex, please look at the help to see what's new.",MAJOR_VERSION,MINOR_VERSION,SUB_MINOR_VERSION);
xstr=XmStringCreateLocalized(str);
XtVaSetValues(w,XmNmessageString,xstr,NULL);
XmStringFree(xstr);
XtManageChild(w);
EP;
}
void ShowVersion(void)
{
SP("ShowVersion");
XtAppAddTimeOut(app,500,(XtTimerCallbackProc)ReallyShowVersion,NULL);
EP;
}
void CheckVersion(char *version)
{
int major,minor,sub_minor;
SP("ShowVersion");
if (version)
{
if (sscanf(version,"%d.%d.%d",&major,&minor,&sub_minor)==3)
{
if (major<MAJOR_VERSION)
ShowVersion();
else if (major==MAJOR_VERSION && minor<MINOR_VERSION)
ShowVersion();
else if (major==MAJOR_VERSION && minor==MINOR_VERSION && sub_minor<SUB_MINOR_VERSION)
ShowVersion();
}
}
else
ShowVersion();
EP;
}
jex-1.3.7/watchcur.c 100644 0 0 3165 6672726720 12376 0 ustar root root #include <X11/cursorfont.h>
#include "jex.h"
extern Widget top;
void WatchCursor(Editor *e,int turn_on)
{
static Cursor cursor=0;
XSetWindowAttributes attrs;
Display *disp;
SP("WatchCursor");
disp=XtDisplay(top);
/* "locked" keeps track if we've already called the function.
This allows recursion and is necessary for most situations;
*/
turn_on ? e->locked++ : e->locked--;
if (e->locked<0)
e->locked=0;
if(e->locked > 1 || ( e->locked ==1 && turn_on == False ))
{
EP;
return; /* already locked and we're not unlocking */
}
if(!cursor) /* if not initialized do it */
cursor = XCreateFontCursor(disp, XC_watch);
/* if "turn_on" is true, then turn on watch cursor, otherwise, return
the shell's cursor to normal
*/
attrs.cursor = turn_on ? cursor : None;
XChangeWindowAttributes(disp,XtWindow(top),CWCursor,&attrs);
if (e->fd)
XChangeWindowAttributes(disp,XtWindow(e->fd),CWCursor,&attrs);
if (e->iod)
{
if (XtWindowOfObject(e->iod))
XChangeWindowAttributes(disp,XtWindowOfObject(e->iod),CWCursor,&attrs);
else if (XtWindow(e->iod))
XChangeWindowAttributes(disp,XtWindow(e->iod),CWCursor,&attrs);
}
if (e->shell)
XChangeWindowAttributes(disp,XtWindow(e->shell),CWCursor,&attrs);
if (e->sd)
XChangeWindowAttributes(disp,XtWindow(e->sd),CWCursor,&attrs);
if (e->abd)
XChangeWindowAttributes(disp,XtWindow(e->abd),CWCursor,&attrs);
if (e->gd)
XChangeWindowAttributes(disp,XtWindow(e->gd),CWCursor,&attrs);
XFlush(disp);
EP;
}
jex-1.3.7/xpm.c 100644 0 0 3136 6672726720 11360 0 ustar root root #include <Xm/Xm.h>
#include <stdio.h>
#include "xpm.h"
#include "jbdbg.h"
Pixmap CreatePixmapFromXPM(Widget top,char **data)
{
XGCValues gcv;
GC gc;
Pixmap pixmap=0;
XColor xc[256];
int width,height,colors,chars;
char c_char;
char color[20];
int x,y;
Colormap cm;
unsigned long mask[20],pixels[20];
Pixel bg;
Display *display;
Drawable d;
Screen *s;
SP("CreatePixmapFromXPM");
display=XtDisplay(top);
s=XtScreen(top);
d=XRootWindowOfScreen(s);
sscanf(data[0],"%d %d %d %d",&width,&height,&colors,&chars);
if (chars>1)
{
printf("Too many chars/pixel in xpm\n");
EP;
return pixmap;
}
if (colors>255)
{
printf("Too many colors in xpm\n");
EP;
return pixmap;
}
XtVaGetValues(top,XmNbackground,&bg,NULL);
gcv.foreground=WhitePixelOfScreen(s);
gcv.background=bg;
gcv.line_style=LineSolid;
gc=XCreateGC(display,d,GCLineStyle|GCForeground|GCBackground,&gcv);
pixmap=XCreatePixmap(display,d,width,height,DefaultDepthOfScreen(s));
cm=DefaultColormapOfScreen(s);
mask[0]=1;
mask[1]=0;
pixels[0]=1;
pixels[1]=0;
for (x=0;x<colors;x++)
{
sscanf(data[1+x],"%c c %s",&c_char,color);
if (!strcmp(color,"None"))
xc[(int)c_char].pixel=bg;
else
{
XParseColor(display,cm,color,&xc[(int)c_char]);
if ((XAllocColor(display,cm,&xc[(int)c_char]))==0)
printf("Error allocating color\n");
}
}
for (y=0;y<height;y++)
{
for (x=0;x<width;x++)
{
XSetForeground(display,gc,xc[(int)data[1+colors+y][x]].pixel);
XDrawPoint(display,pixmap,gc,x,y);
}
}
EP;
return pixmap;
}
jex-1.3.7/combo.h 100644 0 0 1202 6672726722 11652 0 ustar root root #include <Xm/Xm.h>
typedef struct {
char *item;
Widget button;
} ComboButton;
typedef struct {
Widget text,form,button,popup;
ComboButton *items;
int itemcount,maxitems;
void *client_data;
XtCallbackProc function;
} ComboBox;
Widget CreateComboBox(Widget parent,String name,ArgList arglist,Cardinal argcount,int maxitems);
void UpdateComboBox(Widget w,char *str);
void DestroyAllComboBoxes(void);
int GetComboBox(Widget w,ComboBox *c);
void InitializeComboBox(Widget w,Widget refl);
void CopyComboBoxToFile(Widget w,FILE *f);
void ComboBoxAddCallback(Widget w,XtCallbackProc f,void *d);
jex-1.3.7/fallbacks.h 100644 0 0 30376 6672726720 12531 0 ustar root root #include <Xm/Xm.h>
String fallbacks[]={
"*fontList: 6x13",
"*highlightColor: black",
"*settings_in_home_dir: False",
"*history_in_home_dir: False",
/*"*background: #4682b4",*/
/*"*foreground: White",*/
"*background: #aaaaaa",
"*foreground: Black",
"*text.rows: 25",
"*text.columns: 80",
/*"*text.background: #36648b",*/
"*text.background: #666666",
"*text.foreground: White",
"*Goto.labelString: Goto line",
"*gotofield.columns: 12",
"*menubar.button_0.labelString: File",
"*menubar.button_0.mnemonic: F",
"*menubar.button_1.labelString: Edit",
"*menubar.button_1.mnemonic: E",
"*menubar.button_2.labelString: Options",
"*menubar.button_2.mnemonic: O",
"*menubar.button_3.labelString: Bookmarks",
"*menubar.button_3.mnemonic: B",
"*menubar.button_4.labelString: Tools",
"*menubar.button_4.mnemonic: T",
"*menubar.button_5.labelString: View",
"*menubar.button_5.mnemonic: V",
"*menubar.button_7.labelString: Help",
"*menubar.button_7.mnemonic: H",
"*filemenu.button_0.labelString: New Window",
"*filemenu.button_0.mnemonic: W",
"*filemenu.button_0.accelerator: Alt<Key>W",
"*filemenu.button_0.acceleratorText: Alt-W",
"*filemenu.button_1.labelString: Clone",
"*filemenu.button_1.mnemonic: o",
"*filemenu.button_2.labelString: New",
"*filemenu.button_2.mnemonic: N",
"*filemenu.button_2.accelerator: Alt<Key>N",
"*filemenu.button_2.acceleratorText: Alt-N",
"*filemenu.button_3.labelString: Load ...",
"*filemenu.button_3.mnemonic: L",
"*filemenu.button_3.accelerator: Alt<Key>L",
"*filemenu.button_3.acceleratorText: Alt-L",
"*filemenu.button_4.labelString: Save",
"*filemenu.button_4.mnemonic: S",
"*filemenu.button_4.accelerator: Alt<Key>S",
"*filemenu.button_4.acceleratorText: Alt-S",
"*filemenu.button_5.labelString: Save As ...",
"*filemenu.button_5.mnemonic: A",
"*filemenu.button_5.accelerator: Alt<Key>A",
"*filemenu.button_5.acceleratorText: Alt-A",
"*filemenu.button_6.labelString: Reload",
"*filemenu.button_6.mnemonic: e",
"*filemenu.button_7.labelString: Revert",
"*filemenu.button_7.mnemonic: R",
"*filemenu.button_8.labelString: Insert ...",
"*filemenu.button_8.mnemonic: I",
"*filemenu.button_9.labelString: Print",
"*filemenu.button_9.mnemonic: P",
"*filemenu.button_10.labelString: Close",
"*filemenu.button_10.mnemonic: X",
"*filemenu.button_10.accelerator: Alt<Key>X",
"*filemenu.button_10.acceleratorText: Alt-X",
"*editmenu.button_0.labelString: Undo",
"*editmenu.button_0.mnemonic: U",
"*editmenu.button_0.accelerator: Ctrl<Key>U",
"*editmenu.button_0.acceleratorText: Ctrl-U",
"*editmenu.button_1.labelString: Redo",
"*editmenu.button_1.mnemonic: R",
"*editmenu.button_1.accelerator: Ctrl<Key>R",
"*editmenu.button_1.acceleratorText: Ctrl-R",
"*editmenu.button_2.labelString: Repeat",
"*editmenu.button_2.mnemonic: p",
"*editmenu.button_2.accelerator: Ctrl<Key>P",
"*editmenu.button_2.acceleratorText: Ctrl-P",
"*editmenu.button_3.labelString: Copy",
"*editmenu.button_3.mnemonic: C",
"*editmenu.button_3.accelerator: Ctrl<Key>C",
"*editmenu.button_3.acceleratorText: Ctrl-C",
"*editmenu.button_4.labelString: Cut",
"*editmenu.button_4.mnemonic: t",
"*editmenu.button_4.accelerator: Ctrl<Key>X",
"*editmenu.button_4.acceleratorText: Ctrl-X",
"*editmenu.button_5.labelString: Paste",
"*editmenu.button_5.mnemonic: P",
"*editmenu.button_5.accelerator: Ctrl<Key>V",
"*editmenu.button_5.acceleratorText: Ctrl-V",
"*editmenu.button_6.labelString: Clear",
"*editmenu.button_6.mnemonic: l",
"*editmenu.button_6.accelerator: Ctrl<Key>L",
"*editmenu.button_6.acceleratorText: Ctrl-L",
"*editmenu.button_7.labelString: Capitals",
"*editmenu.button_7.mnemonic: a",
"*editmenu.button_7.accelerator: Ctrl<Key>A",
"*editmenu.button_7.acceleratorText: Ctrl-A",
"*editmenu.button_8.labelString: Lowers",
"*editmenu.button_8.mnemonic: o",
"*editmenu.button_8.accelerator: Ctrl<Key>O",
"*editmenu.button_8.acceleratorText: Ctrl-O",
"*editmenu.button_9.labelString: Shift Left",
"*editmenu.button_9.mnemonic: S",
"*editmenu.button_9.accelerator: Ctrl<Key>osfLeft",
"*editmenu.button_9.acceleratorText: Ctrl-Left",
"*editmenu.button_10.labelString: Shift Right",
"*editmenu.button_10.mnemonic: h",
"*editmenu.button_10.accelerator: Ctrl<Key>osfRight",
"*editmenu.button_10.acceleratorText: Ctrl-Right",
"*editmenu.button_11.labelString: Match char",
"*editmenu.button_11.mnemonic: M",
"*editmenu.button_11.accelerator: Ctrl<Key>M",
"*editmenu.button_11.acceleratorText: Ctrl-M",
"*editmenu.button_12.labelString: Set marker",
"*editmenu.button_12.mnemonic: S",
"*editmenu.button_12.accelerator: Ctrl<Key>S",
"*editmenu.button_12.acceleratorText: Ctrl-S",
"*editmenu.button_13.labelString: Goto marker",
"*editmenu.button_13.mnemonic: G",
"*editmenu.button_13.accelerator: Ctrl<Key>G",
"*editmenu.button_13.acceleratorText: Ctrl-G",
"*optionmenu.button_0.labelString: Settings ...",
"*optionmenu.button_0.mnemonic: S",
"*optionmenu.button_1.labelString: Read only",
"*optionmenu.button_1.mnemonic: R",
"*bookmarkmenu.button_0.labelString: Add Bookmark",
"*bookmarkmenu.button_0.mnemonic: A",
"*bookmarkmenu.button_1.labelString: Bookmarks ...",
"*bookmarkmenu.button_1.mnemonic: B",
"*toolsmenu.button_0.labelString: Compile",
"*toolsmenu.button_0.mnemonic: C",
"*toolsmenu.button_0.accelerator: <Key>F8",
"*toolsmenu.button_0.acceleratorText: F8",
"*toolsmenu.button_1.labelString: Make",
"*toolsmenu.button_1.mnemonic: M",
"*toolsmenu.button_1.accelerator: <Key>F9",
"*toolsmenu.button_1.acceleratorText: F9",
"*toolsmenu.button_2.labelString: Run",
"*toolsmenu.button_2.mnemonic: R",
"*toolsmenu.button_2.accelerator: <Key>F6",
"*toolsmenu.button_2.acceleratorText: F6",
"*toolsmenu.button_3.labelString: Grep ...",
"*toolsmenu.button_3.mnemonic: G",
"*toolsmenu.button_3.accelerator: <Key>F7",
"*toolsmenu.button_3.acceleratorText: F7",
"*viewmenu.button_0.labelString: Editors ...",
"*viewmenu.button_0.mnemonic: E",
"*viewmenu.button_1.labelString: Output window ...",
"*viewmenu.button_1.mnemonic: O",
"*viewmenu.button_2.labelString: Statistics ...",
"*viewmenu.button_2.mnemonic: S",
"*helpmenu.button_0.labelString: General help ...",
"*helpmenu.button_0.mnemonic: G",
"*helpmenu.button_1.labelString: Get the Latest version",
"*helpmenu.button_1.mnemonic: L",
"*helpmenu.button_2.labelString: About ...",
"*helpmenu.button_2.mnemonic: A",
"*Save.labelString: *",
"*AskToSave.messageString: Do you want to save the file?",
"*AskToSave.okLabelString: Yes",
"*AskToSave.cancelLabelString: No",
"*AskToSave.helpLabelString: Cancel",
"*AskToSave.dialogTitle: Save?",
"*AskToOverwrite.messageString: Do you want to overwrite the existing file?",
"*AskToOverwrite.okLabelString: Yes",
"*AskToOverwrite.cancelLabelString: No",
"*AskToOverwrite.helpLabelString: Cancel",
"*AskToOverwrite.dialogTitle: Overwrite?",
"*LoadError.messageString: Can't open file!",
"*LoadError.background: Red",
"*LoadError.foreground: White",
"*LoadError.textFontList: *hel*-b*-r-*-14-*",
"*LoadError.buttonFontList: *hel*-b*-r-*-14-*",
"*LoadError.labelFontList: *hel*-b*-r-*-14-*",
"*LoadError.dialogTitle: Load error",
"*ErrorDialog.textFontList: *hel*-b*-r-*-14-*",
"*ErrorDialog.buttonFontList: *hel*-b*-r-*-14-*",
"*ErrorDialog.labelFontList: *hel*-b*-r-*-14-*",
"*ErrorDialog.dialogTitle: Error",
"*VersionDialog.textFontList: *hel*-b*-r-*-14-*",
"*VersionDialog.buttonFontList: *hel*-b*-r-*-14-*",
"*VersionDialog.labelFontList: *hel*-b*-r-*-14-*",
"*VersionDialog.dialogTitle: Information",
"*SaveError.messageString: Can't save file!",
"*SaveError.background: Red",
"*SaveError.foreground: White",
"*SaveError.textFontList: *hel*-b*-r-*-14-*",
"*SaveError.buttonFontList: *hel*-b*-r-*-14-*",
"*SaveError.labelFontList: *hel*-b*-r-*-14-*",
"*SaveError.dialogTitle: Save error",
"*SaveAs.dialogTitle: Save As",
"*Load.dialogTitle: Load",
"*deleteResponse: XmDO_NOTHING",
"*XmTextField.translations: #override \
<Key>BackSpace: delete-previous-character()",
"*XmText.translations: #override \
<Key>Return: newline-and-indent() \n\
<Key>BackSpace: delete-previous-character()",
"*Popup.button_0.labelString: Copy",
"*Popup.button_1.labelString: Cut",
"*Popup.button_2.labelString: Paste",
"*Popup.button_3.labelString: Clear",
"*Popup.button_4.labelString: Undo",
"*Popup.button_5.labelString: Redo",
"*Popup.button_6.labelString: Goto",
"*FSFilterDirLabel.labelString: Directory",
"*FSFilter.labelString: Filter",
"*FSDirLabel.labelString: Directories",
"*FSFileLabel.labelString: Files",
"*FSSelection.labelString: Selection",
"*FSDirList.visibleItemCount: 10",
"*FSFileList.visibleItemCount: 10",
"*FSForm.horizontalSpacing: 20",
"*FSSize.labelString: 0 bytes",
"*FSFilterField.columns: 5",
"*text.translations: #override \
<Btn3Down>: PopupMenu()",
"*Settings.dialogTitle: Settings",
"*selectColor: Yellow",
"*WordWrap.labelString: Word Wrap",
"*AutoIndent.labelString: Auto Indent",
"*UndoLevelLabel.labelString: Undo Levels: ",
"*UndoLevelLabel.alignment: XmALIGNMENT_BEGINNING",
"*PrintCommLabel.labelString: Print Command: ",
"*PrintCommLabel.alignment: XmALIGNMENT_BEGINNING",
"*CompileCommLabel.labelString: Compile Command: ",
"*CompileCommLabel.alignment: XmALIGNMENT_BEGINNING",
"*MakeCommLabel.labelString: Make Command: ",
"*MakeCommLabel.alignment: XmALIGNMENT_BEGINNING",
"*RunCommLabel.labelString: Run Command: ",
"*RunCommLabel.alignment: XmALIGNMENT_BEGINNING",
"*CompileErrorLabel.labelString: Output window parse strings: ",
"*CompileErrorLabel.alignment: XmALIGNMENT_BEGINNING",
"*CompileError.visibleItemCount: 5",
"*NewWindow.labelString: Open files from file/bookmark menu in a new window",
"*IODialog.title: Output window",
"*IODialog.iconName: Output",
"*IODialog.height: 350",
"*IODialog.width: 500",
"*IODialogText.labelString: Output",
"*IO_OK.labelString: Close",
"*IO_Stop.labelString: Stop",
"*IO_Goto.labelString: Goto",
"*IO_Help.labelString: Help",
"*EditorsDialog.dialogTitle: Editors",
"*EditorsDialog.iconName: Editors",
"*EditorsDialog.width: 400",
"*EditorsDialog.height: 200",
"*EditorsDialog.okLabelString: Close",
"*EditorsDialog.cancelLabelString: Goto",
"*About.dialogTitle: About",
"*About.okLabelString: Close",
"*About.buttonFontList: -*-courier-*-r-*--12-*",
"*text.blinkRate: 0",
"*about1.fontList: -*-courier-bold-o-*--24-*",
"*about1.alignment: ALIGNMENT_CENTER",
"*about2.fontList: -*-courier-*-r-*--14-*",
"*about2.alignment: ALIGNMENT_CENTER",
"*about3.fontList: -*-courier-*-r-*--14-*",
"*about3.alignment: ALIGNMENT_CENTER",
"*about4.fontList: -*-courier-*-r-*--18-*",
"*about4.alignment: ALIGNMENT_CENTER",
"*about5.fontList: -*-courier-*-r-*--12-*",
"*about5.alignment: ALIGNMENT_CENTER",
"*grep.labelString: grep",
"*GrepDialog.dialogTitle: Grep",
"*GrepPatLabel.labelString: Search for:",
"*GrepFileLabel.labelString: Search in:",
"*GrepFiles.value: *.c *.h",
"*GrepSubDirs.labelString: Search subdirectories",
"*GrepSubDirs.set: True",
"*GrepCase.labelString: Case sensitive",
"*GrepCase.set: False",
"*GrepReplace.set: False",
"*GrepReplace.labelString: Do replace",
"*GrepReplaceLabel.labelString: Replace by",
"*GrepReplaceField.sensitive: False",
"*NotFound.dialogTitle: Find",
"*grep.fontList: *hel*-b*-r-*-10-*",
"*compile.fontList: *hel*-b*-r-*-10-*",
"*make.fontList: *hel*-b*-r-*-10-*",
"*BookmarkDialog.dialogTitle: Bookmark",
"*BookmarkDialog.iconName: Bookmark",
"*BookmarkDialog.width: 400",
"*BookmarkDialog.height: 250",
"*BookmarkDialog.okLabelString: Close",
"*BookmarkDialog.cancelLabelString: Goto",
"*BookmarkDialog.helpLabelString: Delete",
"*BlockUndo.labelString: Block undo",
"*StatLinesLabel.labelString: lines:",
"*StatCharsLabel.labelString: characters:",
"*StatChangesLabel.labelString: changes since file was opened:",
"*StatUndoLabel.labelString: possible undo's:",
"*StatRedoLabel.labelString: possible redo's:",
"*StatLinesLabel.alignment: XmALIGNMENT_BEGINNING",
"*StatCharsLabel.alignment: XmALIGNMENT_BEGINNING",
"*StatChangesLabel.alignment: XmALIGNMENT_BEGINNING",
"*StatUndoLabel.alignment: XmALIGNMENT_BEGINNING",
"*StatRedoLabel.alignment: XmALIGNMENT_BEGINNING",
"*StatDialog.dialogTitle: Statistics",
"*StatDialog.okLabelString: Close",
"*AutoSave.value: 5",
"*AutoSaveToggle.labelString: Autosave every x minutes:",
"*AutoSaveToggle.set: False",
"*Help.dialogTitle: Help",
"*Help.okLabelString: Close",
"*Help.cancelLabelString: Back",
"*Help.helpLabelString: Index",
"*help_text.rows: 20",
"*help_text.columns: 80",
"*help_text.wordwrap: False",
"*help_topics.visibleItemCount: 20",
"*HelpError.dialogTitle: Help Error",
"*SmallHelpPopup*background: yellow2",
"*SmallHelpPopup.foreground: Black",
"*IOInputLabel.labelString: Input:",
NULL
};
jex-1.3.7/help.h 100644 0 0 1342 6672726720 11506 0 ustar root root #ifndef _HELP_H_
#define _HELP_H_
#include "list.h"
#include <Xm/Xm.h>
typedef enum { NORMAL_TEXT, LINK_TEXT } TextType;
typedef struct {
TextType type;
int start,end;
char link[40];
} HelpText;
typedef struct {
char topic[40];
char topic_text[80];
List list;
} HelpTopic;
void Help(Widget widget,char *c,void *d);
/* Displays the help dialog of the topic c. */
List CompileHelp(void);
/* Compiles the help file. */
void Index(Widget w,void *data,void *cbs);
/* Displays an index of help topics. */
void DisplayTopic(Widget w,char *topic,char *file,List l);
/* Displays a new topic from the help file in the help dialog.
l contains the hyperlinks list. */
void HelpError(char *msg);
#endif
jex-1.3.7/helpstack.h 100644 0 0 1033 6672726720 12531 0 ustar root root #ifndef _HELPSTACK_H_
#define _HELPSTACK_H_
typedef struct {
char data[40];
} HStackElem;
typedef struct HStackElement {
HStackElem s;
struct HStackElement *prev;
} HStackElement;
typedef struct {
int nelems;
HStackElement *last;
} HStack;
HStack *CreateHStack(void);
void DestroyHStack(HStack *hst);
int Push(HStack *hst,HStackElem data);
int Pop(HStack *hst,HStackElem *data);
int HStackN(HStack *hst,int offset,HStackElem *data);
int StackSize(HStack *hst);
void StackClear(HStack *hst);
#endif
jex-1.3.7/jex.h 100644 0 0 15642 6672726717 11402 0 ustar root root #include "jbdbg.h"
#include <stdio.h>
#include <Xm/Xm.h>
#include "list.h"
#include "help.h"
#include "combo.h"
#define MAXEDITORS 100
#define BUFSIZE 255
#define FILELIST 10
#define MAJOR_VERSION 1
#define MINOR_VERSION 3
#define SUB_MINOR_VERSION 7
#define MAXBOOKMARKBUTTONS 20
typedef struct{
int pid;
int fd[2],fd2[2],fd3[2];/* Pipes, and process id */
XtInputId id,id2; /* File pointer input descriptors */
char name[100]; /* Executed command */
} ExecType;
typedef struct {
char *undelete;
XmTextPosition pos;
int insertsize,deletesize;
} Undo_T;
typedef struct {
Boolean histhome;
Boolean setthome;
} OwnRes;
typedef struct {
char filename[255];
char buf[BUFSIZE];
char choice[255];
int x,marker;
Widget shell,text,undo,redo,rowcol,save,findf,ato;
Widget replf,gotofield,pm,mb,compile,make;
Widget ats,tmpsource,bookm[MAXBOOKMARKBUTTONS];
Widget filelist[FILELIST],bookmarkmenu;
Widget fd,grep,gd,gpat,gfiles,gsubd;
Widget iod,io_win,iodtext;
int saved,oldsource,same_line;
Widget fs,clock,filemenu;
Widget form,dirfilter_field,filter_field,dir_field;
Widget filefield,selection,sel_field,dirlabel;
Widget filelabel,abd,fssize;
int undosize,lastaction,redosize,blockundo,changes,ce_count;
List undolist;
List redolist;
Widget le,se,bu,casesens;
Widget sd,sf,ai,ull,ul,pcl,pc,cc,ccl,mc,mcl,ce,cel,nw;
void *f,*func,*func2;
ExecType t;
char print_command[100],compile_command[100],grepped;
char make_command[100],run_command[100],**compiler_error;
Boolean auto_indent,new_window,autosave;
int undolevels,workcount,autosavetimeout;
XtIntervalId tid,tid2,tid3,tid4,tid5,tid6,tid7,tid8;
int locked,read_only;
Widget std,statln,statch,statchan,statundo,statredo;
Widget nw2,asf,ast,err,run,runcl,runc,owi;
} Editor;
extern int editors;
extern Editor *editor[MAXEDITORS];
void file_cb();
void edit_cb();
void popup_cb(Widget w,int item,XmAnyCallbackStruct *cbs);
void option_cb();
void bookmark_cb();
void tools_cb();
void view_cb();
void help_cb();
void Save(Widget w,Editor *e,void *cbs);
void AskToSave(Editor *e,void *f);
void ValueChanged(Widget w,Editor *e,void *cbs);
void Grep(Widget w,Editor *e,void *cbs);
void New(Editor *e);
void SaveAs(Editor *e);
void Load(Editor *e);
void Revert(Editor *e);
void Insert(Editor *e);
void Print(Editor *e);
void FindRowCol(Widget w,Editor *e,XmTextVerifyCallbackStruct *cbs);
void FindUp(Widget w,Editor *e,void *cbs);
void FindDown(Widget w,Editor *e,void *cbs);
void Replace(Widget w,Editor *e,void *cbs);
void ReplaceAll(Widget w,Editor *e,void *cbs);
void CutText(Widget w,Editor *e,void *cbs);
void CopyText(Widget w,Editor *e,void *cbs);
void PasteText(Widget w,Editor *e,void *cbs);
void ClearSelection(Widget w,Editor *e,void *cbs);
void DeleteText(Widget w,Editor *e,XmTextVerifyCallbackStruct *cbs);
void UndoAction(Widget w,Editor *e,void *cbs);
void RedoAction(Widget w,Editor *e,void *cbs);
void RepeatAction(Widget w,Editor *e,void *cbs);
void GotoLine(Widget w,Editor *e,void *cbs);
void Quit(Widget w,Editor *e,void *cbs);
void PopupMenu(Widget w,XButtonPressedEvent *event,String *args,int *num_args);
void CreateFileSelectionDialog(Editor *e,char *title,void *f,void *f2);
void CapsSelection(Widget w,Editor *e,void *cbs);
void LowsSelection(Widget w,Editor *e,void *cbs);
void ShiftRight(Widget w,Editor *e,void *cbs);
void ShiftLeft(Widget w,Editor *e,void *cbs);
void Compile(Widget w,Editor *e,void *cbs);
void Make(Widget w,Editor *e,void *cbs);
void UnlinkFile(Editor *e);
void StartEditor(void);
void NoUndo(Editor *e);
void Exit(Editor *e);
void InsertFile(Editor *e,char *str);
int loadfile(Editor *e,char *file,int insert,int setname);
int savefile(Editor *e,char *file,char *str);
void CopyFile(char *s,char *t);
int FindTextString(Editor *e,char *str,int start_over,int set_pos);
int FindReverseTextString(Editor *e,char *str,int start_over);
void ReplaceText(Editor *e,char *str);
void printfile(Editor *e,char *file);
void Terminate(int sig);
void GotoError(Widget w,Editor *e,void *cbs);
void LoadSettings(Editor *e);
void SetTitle(Editor *e,char *str);
void CreateNewEditor(void);
void Settings(Editor *e);
void SplitPath(char *path,char *dir,char *file);
void SaveError(Editor *e);
void LoadError(Editor *e);
void Function(void (*f)(),Editor *e);
void CreateEditorDialog(void);
void ShowEditorDialog(void);
void UpdateEditorDialog(void);
void CreateOutputWindow(Editor *e);
void WatchCursor(Editor *e,int turn_on);
void ShowAboutDialog(Editor *e);
void ExecProg(Editor *e,char *_prog);
void CreateOutputWindow(Editor *e);
void SplitUp(char *str,char *list[]);
void wprintf(Widget window,...);
void SetLabel(Editor *e,...);
void DoGrep(char *pat,char *replace);
void SetWorkingLabel(Editor *e,void *t);
void InputCallback1(Editor *e,int f,XtInputId l);
void InputCallback2(Editor *e,int f,XtInputId l);
void ChildSignal(int sig);
void UpdateFileList(char *file);
void UpdateFindList(char *file);
void UpdateReplList(char *file);
void UpdateGrepList(char *file);
void UpdateGrepFileList(char *file);
void OpenOldFile(Widget w,Editor *e,void *cbs);
void RemoveInputs(Editor *e,void *tid);
void ShowFindMenu(Widget w,Editor *e,XmPushButtonCallbackStruct *cbs);
void ShowReplaceMenu(Widget w,Editor *e,XmPushButtonCallbackStruct *cbs);
void ShowGrepMenu(Widget w,Editor *e,XmPushButtonCallbackStruct *cbs);
void ShowGrepFileMenu(Widget w,Editor *e,XmPushButtonCallbackStruct *cbs);
void SelectFindString(Widget w,Editor *e,void *cbs);
void SelectReplString(Widget w,Editor *e,void *cbs);
void SelectGrepString(Widget w,Editor *e,void *cbs);
void SelectGrepFileString(Widget w,Editor *e,void *cbs);
void GetFullFileName(char *file);
void ShowBookmarkDialog(void);
void AddBookmark(char *str);
void CreateBookmarkDialog(void);
void ShowStats(Editor *e);
void DeleteLine(Widget w,XAnyEvent *event,String *args,int *num_args);
void NoHighlight(Editor *e,void *id);
void FindMatchingChar(Widget w,Editor *e,void *cbs);
void Reload(Editor *e);
void DetachEditor(Editor *e,char *file);
void SetMarker(Widget w,Editor *e,void *cbs);
void GotoMarker(Widget w,Editor *e,void *cbs);
void RemoveMarker(Editor *e);
void SetCurrentWidget(Widget w);
void DoNew(Widget *w,Editor *e,void *cbs);
void DoOpen(Widget *w,Editor *e,void *cbs);
void SetSave(Editor *e,Boolean enabled);
void SmallHelp(Widget w,int n,XEvent *event);
void RemoveSmallHelp(Widget w,int n,void *cbs);
void DoNewWindow(Widget *w,void *e,void *cbs);
void DoClone(Widget *w,Editor *e,void *cbs);
void LatestVersion(void);
void HelpError(char *msg);
int FindHelpFile(char *helpfile,char *file);
void Run(Widget w,Editor *e,void *cbs);
void ShowError(Editor *e,char *errstr);
void CheckVersion(char *version);
void ShowVersion(void);
void LoadOldFile(Editor *e);
void UpdateEditorBookmarks(Editor *e);
jex-1.3.7/list.h 100644 0 0 4377 6672726720 11544 0 ustar root root /* LIST.H
Author : Jorgen Bosman.
Last Update: 13-04-1994
*/
#ifndef _LIST_H_
#define _LIST_H_
typedef void *List;
List CreateList(unsigned el_size);
/* Creates new definition list.
Must be called before any other function. */
int AddElement(List list,void *element);
/* Adds an element to back of the list. */
int AddFirstElement(List list,void *element);
/* Adds an element to the front of the list. */
int InsertElement(List list,void *element);
/* Insert the element in the current position. */
int GetFirstElement(List list,void *element);
int GetElement(List list,void *element);
int GetNextElement(List list,void *element);
int GetPreviousElement(List list,void *element);
int GetLastElement(List list,void *element);
int GetNthElement(List list,int n,void *element);
/* Gets the n-th element from the list starting from 0.
If the list is smaller than n, element contains the last element and 0 is
returned, otherwise 0 is returned. */
int FindElement(List list,void *element,int key_size,void *key);
/* Finds element in list using key and the size of the key,
the key must be at the beginning of the element record. */
int DeleteLastElement(List list);
/* Deletes last element from list. */
int DeleteFirstElement(List list);
/* Deletes first element from list. */
int DeleteCurrentElement(List l);
/* Deletes current element from list. */
int DeleteElement(List list,int key_size,void *key);
/* Deletes element in list using key and the size of the key,
the key must be at the beginning of the element record. */
int ListEmpty(List list);
/* Checks if list is empty. */
int DisposeList(List list);
/* Disposes list. */
int ClearList(List list);
/* Clears list. */
void ReplaceCurrentElement(List list,void *element);
/* Replaces current element by element. */
void SortList(List list,int (*sort_proc)(const void *element1,const void *element2));
/* Sorts list using compare function sort_proc(), it must return 1
if element1 > element2, 0 otherwise. */
int NumberElements(List l);
/* Returns number of elements in list. */
void VisualizeList(List l,char *str);
/* Makes list visual on screen, it displays each element as integer.
Str is printed before the list.
Symbols: F: first element, C: current element, L:last element */
#endif
jex-1.3.7/match.h 100644 0 0 7574 6672726720 11667 0 ustar root root /*
EPSHeader
File: match.h
Author: J. Kercheval
Created: Sat, 01/05/1991 22:27:18
*/
/*
EPSRevision History
J. Kercheval Wed, 02/20/1991 22:28:37 Released to Public Domain
J. Kercheval Sun, 03/10/1991 18:02:56 add is_valid_pattern
J. Kercheval Sun, 03/10/1991 18:25:48 add error_type in is_valid_pattern
J. Kercheval Sun, 03/10/1991 18:47:47 error return from matche()
J. Kercheval Tue, 03/12/1991 22:24:49 Released as V1.1 to Public Domain
*/
/*
Wildcard Pattern Matching
*/
#ifndef BOOLEAN
# define BOOLEAN int
# define TRUE 1
# define FALSE 0
#endif
/* match defines */
#define MATCH_PATTERN 6 /*