/*----------------------------------------------------------------------*/
/* prototypes.h:							*/
/*     Master list of function prototypes				*/
/*----------------------------------------------------------------------*/

/* from undo.c */

/* Note variable argument list for register_for_undo() */
extern void register_for_undo(u_int, u_char, objinstptr, ...);
extern void undo_finish_series(void);
extern void undo_action(void);
extern void redo_action(void);
extern void flush_undo_stack(void);
extern void flush_redo_stack(void);
extern void truncate_undo_stack(void);
extern void free_undo_record(Undoptr);
extern void free_redo_record(Undoptr);
extern stringpart *get_original_string(labelptr);
extern short *recover_selectlist(Undoptr);
extern void free_selection(uselection *);
extern uselection *remember_selection(objinstptr, short *, int);
extern short *regen_selection(objinstptr, uselection *);
#ifndef TCL_WRAPPER
extern void undo_call(xcWidget, caddr_t, caddr_t);
extern void redo_call(xcWidget, caddr_t, caddr_t);
#endif


/* from tclxcircuit.c */

#ifdef TCL_WRAPPER
extern void xctk_drag(ClientData, XEvent *);
extern void xctk_draglscroll(ClientData, XEvent *);
extern void xctk_dragfilebox(ClientData, XEvent *);
extern void tcl_stdflush(FILE *);
extern void tcl_printf(FILE *, const char *, ...);
extern int XcTagCallback(Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
extern Tcl_Obj *evaluate_raw(objectptr, oparamptr, objinstptr, int *);
extern char *TCL_to_PS(char *);
extern XCWindowData *GUI_init(int, Tcl_Obj *CONST objv[]);
extern void build_app_database(Tk_Window);
extern int XcInternalTagCall(Tcl_Interp *, int, ...);
extern char *translateparamtype(int);
extern char *translatestyle(int);
extern char *translateencoding(int);

#endif

extern char *evaluate_expr(objectptr, oparamptr, objinstptr);

/* from elements.c: */

/* element constructor functions */
extern labelptr new_label(objinstptr, stringpart *, int, int, int, u_char);
extern labelptr new_simple_label(objinstptr, char *, int, int, int);
extern labelptr new_temporary_label(objectptr, char *, int, int);
extern polyptr new_polygon(objinstptr, pointlist *, int);
extern splineptr new_spline(objinstptr, pointlist);
extern arcptr new_arc(objinstptr, int, int, int);
extern objinstptr new_objinst(objinstptr, objinstptr, int, int);

/* element destructor function */
extern void remove_element(objinstptr, genericptr);

/* functions to set default values for element types */
extern void polydefaults(polyptr, int, int, int);
extern void splinedefaults(splineptr, int, int);
extern void arcdefaults(arcptr, int, int);
extern void pathdefaults(pathptr, int, int);
extern void instancedefaults(objinstptr, objectptr, int, int);
extern void labeldefaults(labelptr, u_char, int, int);

extern void converttocurve();
extern void poly_add_point(polyptr, XPoint *);
extern void drawdot(int, int);
extern void copyalleparams(genericptr, genericptr);
extern void copyparams(objinstptr, objinstptr);

extern void textbutton(u_char, int, int);
extern void charreport(labelptr);
extern Boolean labeltext(int, char *);
extern void textreturn(void);
extern void reanchor(short);
extern void findconstrained(polyptr);
extern void reversepoints(XPoint *, short);
extern void reversefpoints(XfPoint *, short);
extern void freeparts(short *, short);
extern void removep(short *, short);
extern void unjoin(void);
extern labelptr findlabelcopy(labelptr, stringpart *);
extern Boolean neartest(XPoint *, XPoint *);
extern void join(void);
extern genericptr getsubpart(pathptr, int *);

/* interactive manipulation of elements */
extern void splinebutton(int, int);
extern void updatepath(pathptr);
#ifdef TCL_WRAPPER
extern void trackelement(ClientData, XEvent *);
extern void trackarc(ClientData, XEvent *);
extern void trackbox(ClientData, XEvent *);
extern void trackwire(ClientData, XEvent *);
#else
extern void trackelement(xcWidget, caddr_t, caddr_t);
extern void trackarc(xcWidget, caddr_t, caddr_t);
extern void trackbox(xcWidget, caddr_t, caddr_t);
extern void trackwire(xcWidget, caddr_t, caddr_t);
#endif
extern void arcbutton(int, int);
extern void boxbutton(int, int);
extern void startwire(XPoint *);
extern void setendpoint(short *, short, XPoint **, XPoint *);
extern void wire_op(int, int ,int);

void arc_mode_draw(xcDrawType type, arc *newarc);
void spline_mode_draw(xcDrawType type, spline *newspline);
void poly_mode_draw(xcDrawType type, polygon *newpoly);
void path_mode_draw(xcDrawType type, path *newpoly);
void text_mode_draw(xcDrawType type, label *newlabel);
void selarea_mode_draw(xcDrawType type, void *unused);
void rescale_mode_draw(xcDrawType type, void *unused);
void move_mode_draw(xcDrawType type, void *unused);
void normal_mode_draw(xcDrawType type, void *unused);

/* from events.c: */

extern Boolean recursefind(objectptr, objectptr);
extern void transferselects(void);
extern void select_invalidate_netlist(void);
extern void newmatrix(void);
extern void setpage(Boolean);
extern int changepage(short);
extern void newpage(short);
extern void pushobject(objinstptr);
extern void push_stack(pushlistptr *, objinstptr, char *);
extern void pop_stack(pushlistptr *);
extern void free_stack(pushlistptr *);
extern void popobject(xcWidget, pointertype, caddr_t);
extern void resetbutton(xcWidget, pointertype, caddr_t);
extern void drawhbar(xcWidget, caddr_t, caddr_t);
extern void drawvbar(xcWidget, caddr_t, caddr_t);
extern void panhbar(xcWidget, caddr_t, XButtonEvent *);
extern void endhbar(xcWidget, caddr_t, XButtonEvent *);
extern void panvbar(xcWidget, caddr_t, XButtonEvent *);
extern void endvbar(xcWidget, caddr_t, XButtonEvent *);
extern void zoombox(xcWidget, caddr_t, caddr_t);
extern void zoomin(int, int);
extern void zoomout(int, int);
extern void warppointer(int, int);
extern void panbutton(u_int, int, int, float);
extern void zoominrefresh(int, int);
extern void zoomoutrefresh(int, int);
extern void panrefresh(u_int, int, int, float);
extern void checkwarp(XPoint *);
extern void warparccycle(arcptr, short);
extern int checkcycle(genericptr, short);
extern pointselect *getrefpoint(genericptr, XPoint **);
extern void copyvirtual(void);
extern void nextpathcycle(pathptr, short);
extern void nextpolycycle(polyptr *, short);
extern void nextsplinecycle(splineptr *, short);
extern void nextarccycle(arcptr *, short);
extern void buttonhandler(xcWidget, caddr_t, XButtonEvent *);
extern void keyhandler(xcWidget, caddr_t, XKeyEvent *);
extern Boolean compatible_function(int);
extern int eventdispatch(int, int, int);
extern int functiondispatch(int, short, int, int);
extern void releasehandler(xcWidget, caddr_t, XKeyEvent *);
extern void setsnap(short);
extern void snapelement(void);
extern int ipow10(int);
extern int calcgcf(int, int);
extern void fraccalc(float, char *);
extern void printpos(short, short);
extern void findwirex(XPoint *, XPoint *, XPoint *, XPoint *, float *);
extern void findattach(XPoint *, float *, XPoint *);
extern XPoint *pathclosepoint(pathptr, XPoint *);
extern void placeselects(short, short, XPoint *);
extern void drag(int, int);
extern void xlib_drag(xcWidget, caddr_t, XEvent *);
extern void elemrotate(genericptr *, float, XPoint *);
extern void elementrotate(float, XPoint *);
extern void edit(int, int);
extern void pathedit(genericptr);
extern void xc_lower();
extern void xc_raise();
extern void xc_top(short *, short *);
extern void xc_bottom(short *, short *);
extern void exchange(void);
extern void elhflip(genericptr *, short);
extern void elvflip(genericptr *, short);
extern void elementflip(XPoint *);
extern void elementvflip(XPoint *);
extern short getkeynum(void);
#ifdef TCL_WRAPPER
extern void makepress(ClientData);
#else
extern void makepress(XtPointer, xcIntervalId *);
#endif
extern void reviseselect(short *, int, short *);
extern void deletebutton(int, int);
extern void delete_one_element(objinstptr, genericptr);
extern short *xc_undelete(objinstptr, objectptr, short, short *);
extern objectptr delete_element(objinstptr, short *, int, short);
extern void printname(objectptr);
extern Boolean checkname(objectptr);
extern char *checkvalidname(char *, objectptr);
extern objectptr finddot(void);
extern void movepoints(genericptr *, short, short);
extern void editpoints(genericptr *, short, short);
#ifndef TCL_WRAPPER
extern void xlib_makeobject(xcWidget, caddr_t);
#endif
extern objinstptr domakeobject(int, char *, Boolean);
extern void selectsave(xcWidget, caddr_t, caddr_t);
extern void arceditpush(arcptr);
extern void splineeditpush(splineptr);
extern void polyeditpush(polyptr);
extern void patheditpush(pathptr);
extern pointlist copypoints(pointlist, int);
extern void labelcopy(labelptr, labelptr);
extern void arccopy(arcptr, arcptr);
extern void polycopy(polyptr, polyptr);
extern void splinecopy(splineptr, splineptr);
extern void pathcopy(pathptr, pathptr);
extern void instcopy(objinstptr, objinstptr);
extern void delete_tagged(objinstptr);
extern void createcopies(void);
extern void copydrag(void);
extern void copy_op(int, int, int);
extern Boolean checkmultiple(XButtonEvent *);
extern void continue_op(int, int, int);
extern void finish_op(int, int, int);
extern void path_op(genericptr, int, int, int);
extern void inst_op(genericptr, int, int, int);
extern void resizearea(xcWidget, caddr_t, caddr_t);
void draw_grids(void);
void draw_fixed(void);
extern void drawarea(xcWidget, caddr_t, caddr_t);
extern void standard_element_delete(short);
extern void delete_for_xfer(short, short *, int);
extern void delete_noundo(short);

/* from filelist.c: */

extern int fcompare(const void *, const void *);
extern void dragfilebox(xcWidget, caddr_t, XMotionEvent *);
extern void startfiletrack(xcWidget, caddr_t, XCrossingEvent *);
extern void endfiletrack(xcWidget, caddr_t, XCrossingEvent *);
extern char *getcrashfilename(void);
extern void crashrecover(void);
extern void findcrashfiles(void);
extern void listfiles(xcWidget, popupstruct *, caddr_t);
extern void newfilelist(xcWidget, popupstruct *);
extern void fileselect(xcWidget, popupstruct *, XButtonEvent *);
extern void showlscroll(xcWidget, caddr_t, caddr_t);
extern void draglscroll(xcWidget, popupstruct *, XButtonEvent *);
extern void genfilelist(xcWidget, popupstruct *, Dimension);
extern int lookdirectory(char *, int);

/* from files.c: */

#ifdef ASG
extern void importspice(void);
#endif

extern char *ridnewline(char *);
extern void free_single(genericptr);
extern void reset(objectptr, short);
extern void pagereset(short);
extern void initmem(objectptr);
extern void freelabel(stringpart *);
extern Boolean compare_single(genericptr *, genericptr *);
extern Boolean elemcompare(genericptr *, genericptr *);
extern short objcompare(objectptr, objectptr);
extern float getpsscale(float, short);
extern void dostcount(FILE *, short *, short);
extern short printparams(FILE *, objinstptr, short);
extern void printobjectparams(FILE *, objectptr);
extern void varcheck(FILE *, short, objectptr, short *, genericptr, u_char);
extern void varfcheck(FILE *, float, objectptr, short *, genericptr, u_char);
extern Boolean varpcheck(FILE *, short, objectptr, int, short *, genericptr, u_char);
extern Boolean varpathcheck(FILE *, short, objectptr, int, short *,
		genericptr *, pathptr, u_char);
extern void getfile(xcWidget, pointertype, caddr_t);
extern int filecmp(char *, char *);
extern Boolean nextfilename(void);
extern FILE *libopen(char *, short, char *, int);
extern void loadfontlib(void);
extern void loadglib(Boolean, short, short);
extern void loadulib(void);
extern void loadblib(void);
extern void getlib(xcWidget, caddr_t, caddr_t);
extern void getuserlib(xcWidget, caddr_t, caddr_t);
extern Boolean loadlibrary(short);
extern void startloadfile(int);
extern void normalloadfile(void);
extern void importfile(void);
extern void importgraphic(void);
extern Boolean loadfile(short, int);
extern void readlabel(objectptr, char *, stringpart **);
extern void readparams(objectptr, objinstptr, objectptr, char *);
extern u_char *find_match(u_char *);
extern char *advancetoken(char *);
extern char *varpscan(objectptr, char *, short *, genericptr, int, int, u_char);
extern char *varscan(objectptr, char *, short *, genericptr, u_char);
extern char *varfscan(objectptr, char *, float *, genericptr, u_char);
extern objinstptr addtoinstlist(int, objectptr, Boolean);
extern Boolean objectread(FILE *, objectptr, short, short, short, char *, int, TechPtr);
void importfromlibrary(short, char *, char *);
objectptr *new_library_object(short, char *, objlistptr *, TechPtr);
Boolean library_object_unique(short, objectptr, objlistptr);
void add_object_to_library(short, objectptr);
u_char *find_delimiter(u_char *);
char standard_delimiter_end(char);
void output_graphic_data(FILE *, short *);

extern Boolean CompareTechnology(objectptr, char *);
extern TechPtr LookupTechnology(char *);
extern TechPtr GetObjectTechnology(objectptr);
extern TechPtr AddNewTechnology(char *, char *);
extern void AddObjectTechnology(objectptr);
extern void TechReplaceSave();
extern void TechReplaceRestore();
extern void TechReplaceAll();
extern void TechReplaceNone();

#ifdef TCL_WRAPPER
extern void setfile(char *, int);
extern void savetemp(ClientData);
#else
extern void setfile(xcWidget, xcWidget, caddr_t);
extern void savetemp(XtPointer, xcIntervalId *);
#endif
extern void incr_changes(objectptr);
extern void savelibpopup(xcWidget, char *, caddr_t);
#ifndef TCL_WRAPPER
extern void savelibrary(xcWidget, char *);
#endif
extern void savetechnology(char *, char *);
extern void findfonts(objectptr, short *);
extern void savefile(short);
extern int printRGBvalues(char *, int, const char *);
extern char *nosprint(char *, int *, int *);
extern FILE *fileopen(char *, char *, char *, int);
extern Boolean xc_tilde_expand(char *, int);
extern Boolean xc_variable_expand(char *, int);
extern short writelabel(FILE *, stringpart *, short *);
extern char *writesegment(stringpart *, float *, int *, int *, int *);
extern int writelabelsegs(FILE *, short *, stringpart *);
extern void printobjects(FILE *, objectptr, objectptr **, short *, int);
extern void printrefobjects(FILE *, objectptr, objectptr **, short *);
extern void printpageobject(FILE *, objectptr, short, short);


/* from fontfile.c: */

extern FILE *findfontfile(char *);
extern int loadfontfile(char *);

/* from formats.c: */

extern void loadlgf(int);
extern void loadmat4(caddr_t);

/* from functions.c: */

extern long sqwirelen(XPoint *, XPoint *);
extern float fsqwirelen(XfPoint *, XfPoint *);
extern int wirelength(XPoint *, XPoint *);
extern long finddist(XPoint *,XPoint *, XPoint *);
extern void calcarc(arcptr);
extern void decomposearc(pathptr, XPoint *);
extern void initsplines(void);
extern void computecoeffs(splineptr, float *, float *, float *, float *,
                          float *, float *);
extern void calcspline(splineptr);
extern void findsplinepos(splineptr, float, XPoint *, float *);
extern void ffindsplinepos(splineptr, float, XfPoint *);
extern float findsplinemin(splineptr, XPoint *);
extern short closepoint(polyptr, XPoint *);
extern short closedistance(polyptr, XPoint *);
extern void updateinstparam(objectptr);
extern short checkbounds(void);
extern void window_to_user(short, short, XPoint *);
extern void user_to_window(XPoint, XPoint *);

extern float UTopScale(void);
extern float UTopTransScale(float);
extern float UTopDrawingScale(void);
extern float UTopRotation(void);
extern void UTopOffset(int *, int *);
extern void UTopDrawingOffset(int *, int *);

extern XPoint UGetCursor(void);
extern XPoint UGetCursorPos(void);
extern void u2u_snap(XPoint *);
extern void snap(short, short, XPoint *);
extern void UResetCTM(Matrix *);
extern void InvertCTM(Matrix *);
extern void UCopyCTM(Matrix *, Matrix *);
extern void UMakeWCTM(Matrix *);
extern void UMultCTM(Matrix *, XPoint, float, float);
extern void USlantCTM(Matrix *, float);
extern void UPreScaleCTM(Matrix *);
extern short flipadjust(short);
extern void UPreMultCTM(Matrix *, XPoint, float, float);
extern void UPreMultCTMbyMat(Matrix *, Matrix *);
extern void UTransformbyCTM(Matrix *, XPoint *, XPoint *, short);
extern void UfTransformbyCTM(Matrix *, XfPoint *, XPoint *, short);
extern void UPopCTM(void);
extern void UPushCTM(void);
extern void UTransformPoints(XPoint *, XPoint *, short, XPoint, float,
                             float);
extern void InvTransformPoints(XPoint *, XPoint *, short, XPoint, float,
                             float);
extern void manhattanize(XPoint *, polyptr, short, Boolean);
extern void bboxcalc(short, short *, short *);
extern void calcextents(genericptr *, short *, short *, short *, short *);
extern void objinstbbox(objinstptr, XPoint *, int);
extern void labelbbox(labelptr, XPoint *, objinstptr);
extern void graphicbbox(graphicptr, XPoint *);
extern void calcinstbbox(genericptr *, short *, short *, short *, short *);
extern void calcbboxsingle(genericptr *, objinstptr, short *, short *, short *, short *);
extern Boolean object_in_library(short, objectptr);
extern void calcbboxinst(objinstptr);
extern short find_object(objectptr, objectptr);
extern void updatepagebounds(objectptr);
extern void calcbbox(objinstptr);
extern void calcbboxparam(objectptr, int);
extern void singlebbox(genericptr *);
extern void calcbboxselect(void);
extern void calcbboxvalues(objinstptr, genericptr *);
extern void centerview(objinstptr);
extern void refresh(xcWidget, caddr_t, caddr_t);
extern void zoomview(xcWidget, caddr_t, caddr_t);
extern void UDrawSimpleLine(XPoint *, XPoint *);
extern void UDrawLine(XPoint *, XPoint *);
extern void UDrawCircle(XPoint *, u_char);
extern void UDrawX(labelptr);
extern void UDrawXAt(XPoint *);
extern void UDrawXDown(labelptr);
extern int  toplevelwidth(objinstptr, short *);
extern int  toplevelheight(objinstptr, short *);
extern void extendschembbox(objinstptr, XPoint *, XPoint *);
extern void pinadjust(short, short *, short *, short);
extern void UDrawTextLine(labelptr, short);
extern void UDrawTLine(labelptr);
extern void UDrawXLine(XPoint, XPoint);
extern void UDrawBox(XPoint, XPoint);
extern float UGetRescaleBox(XPoint *corner, XPoint *newpoints);
extern void UDrawRescaleBox(XPoint *);
extern void UDrawBBox(void);
extern void strokepath(XPoint *, short, short, float);
extern void makesplinepath(splineptr, XPoint *);
extern void UDrawSpline(splineptr, float);
extern void UDrawPolygon(polyptr, float);
extern void UDrawArc(arcptr, float);
extern void UDrawPath(pathptr, float);
extern void UDrawObject(objinstptr, short, int, float, pushlistptr *);
extern void TopDoLatex(void);

/* from help.c: */

extern void showhsb(xcWidget, caddr_t, caddr_t);
extern void printhelppix(void);
extern void starthelp(xcWidget, caddr_t, caddr_t);
extern void simplescroll(xcWidget, xcWidget, XPointerMovedEvent *);
extern void exposehelp(xcWidget, caddr_t, caddr_t);
extern void printhelp(xcWidget);

/* from keybindings.c */

extern int firstbinding(xcWidget, int);
extern Boolean ismacro(xcWidget, int);
extern int boundfunction(xcWidget, int, short *);
extern int string_to_func(const char *, short *);
extern int string_to_key(const char *);
extern char *function_binding_to_string(xcWidget, int);
extern char *key_binding_to_string(xcWidget, int);
extern char *compat_key_to_string(xcWidget, int);
extern char *func_to_string(int);
extern char *key_to_string(int);
extern void printeditbindings(void);
extern int add_vbinding(xcWidget, int, int, short);
extern int add_binding(xcWidget, int, int);
extern int add_keybinding(xcWidget, const char *, const char *);
extern void default_keybindings(void);
extern int remove_binding(xcWidget, int, int);
extern void remove_keybinding(xcWidget, const char *, const char *);

#ifndef TCL_WRAPPER
extern void mode_rebinding(int, int);
extern void mode_tempbinding(int, int);
#endif

/* from libraries.c: */

extern short findhelvetica(void);
extern void catreturn(void);
extern int pageposition(short, int, int, int);
extern short pagelinks(int);
extern short *pagetotals(int, short);
extern Boolean is_virtual(objinstptr);
extern int is_page(objectptr);
extern int is_library(objectptr);
extern int NameToLibrary(char *);
extern void tech_set_changes(TechPtr);
extern void tech_mark_changed(TechPtr);
extern int libfindobject(objectptr, int *);
extern int libmoveobject(objectptr, int);
extern void pagecat_op(int, int, int);
extern void pageinstpos(short, short, objinstptr, int, int, int, int);
extern objinstptr newpageinst(objectptr);
extern void computespacing(short, int *, int *, int *, int *);
extern void composepagelib(short);
extern void updatepagelib(short, short);
extern void pagecatmove(int, int);
extern void composelib(short);
extern short finddepend(objinstptr, objectptr **);
extern void cathide(void);
extern void catvirtualcopy(void);
extern void catdelete(void);
extern void catmove(int, int);
extern void copycat(void);
extern void catalog_op(int, int, int);
extern void changecat(void);
extern void startcatalog(xcWidget, pointertype, caddr_t);

/* from menucalls.c: */

extern void setgrid(xcWidget, float *);
extern void measurestr(float, char *);
extern void setwidth(xcWidget, float *);
extern void changetextscale(float);
extern void autoscale(int);
extern float parseunits(char *);
extern Boolean setoutputpagesize(XPoint *);
extern void setkern(xcWidget, stringpart *);
extern void setdscale(xcWidget, XPoint *);
extern void setosize(xcWidget, objinstptr);
extern void setwwidth(xcWidget, void *);
#ifdef TCL_WRAPPER
extern void renamepage(short);
extern void renamelib(short);
extern void setcolormark(int);
extern void setallstylemarks(u_short);
#endif
extern labelptr gettextsize(float **);
extern void stringparam(xcWidget, caddr_t, caddr_t);
extern int setelementstyle(xcWidget, u_short, u_short);
extern void togglegrid(u_short);
extern void togglefontmark(int);
extern void setcolorscheme(Boolean);
extern void getgridtype(xcWidget, pointertype, caddr_t);
extern void newlibrary(xcWidget, caddr_t, caddr_t);
extern int createlibrary(Boolean);
extern void makepagebutton(void);
extern int findemptylib(void);
extern polyptr checkforbbox(objectptr);
#ifdef TCL_WRAPPER
extern void setcolor(xcWidget, int);
extern void setfontmarks(short, short);
#endif
extern void startparam(xcWidget, pointertype, caddr_t);
extern void startunparam(xcWidget, pointertype, caddr_t);
extern void setdefaultfontmarks(void);
extern void setanchorbit(xcWidget, pointertype, caddr_t);
extern void setpinanchorbit(xcWidget, pointertype, caddr_t);
extern void setanchor(xcWidget, pointertype, labelptr, short);
extern void setvanchor(xcWidget, pointertype, caddr_t);
extern void sethanchor(xcWidget, pointertype, caddr_t);
extern void boxedit(xcWidget, pointertype, caddr_t);
extern void locloadfont(xcWidget, char *);
extern short findbestfont(short, short, short, short);
extern void setfontval(xcWidget, pointertype, labelptr);
extern void setfont(xcWidget, pointertype, caddr_t);
extern void setfontstyle(xcWidget, pointertype, labelptr);
extern void fontstyle(xcWidget, pointertype, caddr_t);
extern void setfontencoding(xcWidget, pointertype, labelptr);
extern void fontencoding(xcWidget, pointertype, caddr_t);
extern void addtotext(xcWidget, pointertype, caddr_t);
extern Boolean dospecial(void);

/* from xtfuncs.c: */

extern void makenewfontbutton(void);  /* either here or menucalls.c */
#ifndef TCL_WRAPPER
extern void setfloat(xcWidget, float *);
extern void autoset(xcWidget, xcWidgetList, caddr_t);
extern void autostop(xcWidget, caddr_t, caddr_t);
extern void togglegridstyles(xcWidget);
extern void toggleanchors(xcWidget);
extern void togglefontstyles(xcWidget);
extern void toggleencodings(xcWidget);
extern void getkern(xcWidget, caddr_t, caddr_t);
extern void setcolor(xcWidget, pointertype, caddr_t);
extern void setfill(xcWidget, pointertype, caddr_t);
extern void makebbox(xcWidget, pointertype, caddr_t);
extern void setclosure(xcWidget, pointertype, caddr_t);
extern void setopaque(xcWidget, pointertype, caddr_t);
extern void setline(xcWidget, pointertype, caddr_t);
extern void changetool(xcWidget, pointertype, caddr_t);
extern void exec_or_changetool(xcWidget, pointertype, caddr_t);
extern void rotatetool(xcWidget, pointertype, caddr_t);
extern void pantool(xcWidget, pointertype, caddr_t);
extern void toggleexcl(xcWidget, menuptr, int);
extern void highlightexcl(xcWidget, int, int);
extern void toolcursor(int);
extern void promptparam(xcWidget, caddr_t, caddr_t);
extern void gettsize(xcWidget, caddr_t, caddr_t);
extern void settsize(xcWidget, labelptr);
extern void dotoolbar(xcWidget, caddr_t, caddr_t);
extern void overdrawpixmap(xcWidget);
extern buttonsave *getgeneric(xcWidget, void (*getfunction)(), void *);
extern void getsnapspace(xcWidget, caddr_t, caddr_t);
extern void getgridspace(xcWidget, caddr_t, caddr_t);
extern void setscaley(xcWidget, float *);
extern void setscalex(xcWidget, float *);
extern void setorient(xcWidget, short *);
extern void setpmode(xcWidget, short *);
extern void setpagesize(xcWidget, XPoint *);
extern void getdscale(xcWidget, caddr_t, caddr_t);
extern void getosize(xcWidget, caddr_t, caddr_t);
extern void getwirewidth(xcWidget, caddr_t, caddr_t);
extern void getwwidth(xcWidget, caddr_t, caddr_t);
extern void getfloat(xcWidget, float *, caddr_t);
extern void setfilename(xcWidget, char **);
extern void setpagelabel(xcWidget, char *);
extern void makenewfontbutton(void);
extern void newpagemenu(xcWidget, pointertype, caddr_t);
extern void makenewencodingbutton(char *, char);
extern void toggle(xcWidget, pointertype, Boolean *);
extern void inversecolor(xcWidget, pointertype, caddr_t);
extern void setgridtype(char *);
extern void renamepage(short);
extern void renamelib(short);
extern void setcolormark(int);
extern void setallstylemarks(u_short);
extern void setnewcolor(xcWidget, caddr_t);
extern void addnewcolor(xcWidget, caddr_t, caddr_t);
extern void setfontmarks(short, short);
extern void position_popup(xcWidget, xcWidget);
extern void border_popup(xcWidget, caddr_t, caddr_t);
extern void color_popup(xcWidget, caddr_t, caddr_t);
extern void fill_popup(xcWidget, caddr_t, caddr_t);
extern void param_popup(xcWidget, caddr_t, caddr_t);
extern void addnewfont(xcWidget, caddr_t, caddr_t);
#endif

/* from netlist.c: */

#ifdef TCL_WRAPPER
extern Tcl_Obj *tclglobals(objinstptr);
extern Tcl_Obj *tcltoplevel(objinstptr);
void ratsnest(objinstptr);
#endif

extern void ReferencePosition(objinstptr, XPoint *, XPoint *);
extern int NameToPinLocation(objinstptr, char *, int *, int *);
extern Boolean RemoveFromNetlist(objectptr, genericptr);
extern labelptr NetToLabel(int, objectptr);
extern void NameToPosition(objinstptr, labelptr, XPoint *);
extern XPoint *NetToPosition(int, objectptr);
extern int getsubnet(int, objectptr);
extern void invalidate_netlist(objectptr);
extern void remove_netlist_element(objectptr, genericptr);
extern int updatenets(objinstptr, Boolean);
extern void createnets(objinstptr, Boolean);
extern Boolean nonnetwork(polyptr);
extern int globalmax(void);
extern LabellistPtr geninfolist(objectptr, objinstptr, char *);
extern void gennetlist(objinstptr);
extern void gencalls(objectptr);
extern void search_on_siblings(objinstptr, objinstptr, pushlistptr,
		short, short, short, short);
extern char *GetHierarchy(pushlistptr *, Boolean);
extern Boolean HierNameToObject(objinstptr, char *, pushlistptr *);
extern void resolve_devindex(objectptr, Boolean);
extern void copy_bus(Genericlist *, Genericlist *);
extern Genericlist *is_resolved(genericptr *, pushlistptr, objectptr *);
extern Boolean highlightnet(objectptr, objinstptr, int, u_char);
extern void highlightnetlist(objectptr, objinstptr, u_char);
extern int pushnetwork(pushlistptr, objectptr);
extern Boolean match_buses(Genericlist *, Genericlist *, int);
extern int onsegment(XPoint *, XPoint *, XPoint *);
extern Boolean neardist(long);
extern Boolean nearpoint(XPoint *, XPoint *);
extern int searchconnect(XPoint *, int, objinstptr, int);
extern Genericlist *translateup(Genericlist *, objectptr, objectptr, objinstptr);
extern Genericlist *addpoly(objectptr, polyptr, Genericlist *);
extern long zsign(long, long);
extern Boolean mergenets(objectptr, Genericlist *, Genericlist *);
extern void removecall(objectptr, CalllistPtr);
extern Genericlist *addpin(objectptr, objinstptr, labelptr, Genericlist *);
extern Genericlist *addglobalpin(objectptr, objinstptr, labelptr, Genericlist *);
extern void addcall(objectptr, objectptr, objinstptr);
extern void addport(objectptr, Genericlist *);
extern Boolean addportcall(objectptr, Genericlist *, Genericlist *);
extern void makelocalpins(objectptr, CalllistPtr, char *);
extern int porttonet(objectptr, int);
extern stringpart *nettopin(int, objectptr, char *);
extern Genericlist *pointtonet(objectptr, objinstptr, XPoint *);
extern Genericlist *pintonet(objectptr, objinstptr, labelptr);
extern Genericlist *nametonet(objectptr, objinstptr, char *);
extern Genericlist *new_tmp_pin(objectptr, XPoint *, char *, char *, Genericlist *);
extern Genericlist *make_tmp_pin(objectptr, objinstptr, XPoint *, Genericlist *);
extern void resolve_devnames(objectptr);
extern void resolve_indices(objectptr, Boolean);
extern void clear_indices(objectptr);
extern void unnumber(objectptr);
extern char *parsepininfo(objinstptr, char *, int);
extern char *defaultpininfo(objinstptr, int);
extern char *parseinfo(objectptr, objectptr, CalllistPtr, char *, char *, Boolean,
		Boolean);
extern int writedevice(FILE *, char *, objectptr, CalllistPtr, char *);
extern void writeflat(objectptr, CalllistPtr, char *, FILE *, char *);
extern void writeglobals(objectptr, FILE *);
extern void writehierarchy(objectptr, objinstptr, CalllistPtr, FILE *, char *);
extern void writenet(objectptr, char *, char *);
extern Boolean writepcb(struct Ptab **, objectptr, CalllistPtr, char *, char *);
extern void outputpcb(struct Ptab *, FILE *);
extern void freepcb(struct Ptab *);
extern void freegenlist(Genericlist *);
extern void freepolylist(PolylistPtr *);
extern void freenetlist(objectptr);
extern void freelabellist(LabellistPtr *);
extern void freecalls(CalllistPtr);
extern void freenets(objectptr);
extern void freetemplabels(objectptr);
extern void freeglobals(void);
extern void destroynets(objectptr);
extern int  cleartraversed(objectptr);
extern int  checkvalid(objectptr);
extern void clearlocalpins(objectptr);
extern void append_included(char *);
extern Boolean check_included(char *);
extern void free_included(void);
extern void genprefixlist(objectptr, slistptr *);


/* from ngspice.c: */
extern int exit_spice(void);

/* from parameter.c: */ 

extern char *find_indirect_param(objinstptr, char *);
extern oparamptr match_param(objectptr, char *);
extern oparamptr match_instance_param(objinstptr, char *);
extern oparamptr find_param(objinstptr, char *);
extern int get_num_params(objectptr);
extern void free_all_eparams(genericptr);
extern void free_object_param(objectptr, oparamptr);
extern oparamptr free_instance_param(objinstptr, oparamptr);
extern void free_element_param(genericptr, eparamptr);

extern oparamptr make_new_parameter(char *);
extern eparamptr make_new_eparam(char *);

extern char *getnumericalpkey(u_int);
extern char *makeexprparam(objectptr, char *, char *, int);
extern Boolean makefloatparam(objectptr, char *, float);
extern Boolean makestringparam(objectptr, char *, stringpart *);
extern void std_eparam(genericptr, char *);
extern void indicateparams(genericptr);
extern void setparammarks(genericptr);
extern void makenumericalp(genericptr *, u_int, char *, short);
extern void noparmstrcpy(u_char *, u_char *);
extern void insertparam(void);
extern void makeparam(labelptr, char *);
extern void searchinst(objectptr, objectptr, char *);
extern stringpart *searchparam(stringpart *);
extern void unmakeparam(labelptr, objinstptr, stringpart *);
extern void removenumericalp(genericptr *, u_int);         
extern void unparameterize(int);
extern void parameterize(int, char *, short);
extern genericptr findparam(objectptr, void *, u_char);
extern Boolean paramcross(objectptr, labelptr);
extern oparamptr parampos(objectptr, labelptr, char *, short *, short *);
extern int opsubstitute(objectptr, objinstptr);
extern void exprsub(genericptr);
extern int epsubstitute(genericptr, objectptr, objinstptr, Boolean *);
extern int psubstitute(objinstptr);
extern Boolean has_param(genericptr);
extern oparamptr copyparameter(oparamptr);
extern eparamptr copyeparam(eparamptr, genericptr);

extern void pwriteback(objinstptr);
extern short paramlen(u_char *);
extern int natstrlen(u_char *);
extern int natstrcmp(u_char *, u_char *);
extern void curtail(u_char *);
extern int checklibtop(void);
extern void removeinst(objinstptr);
extern void removeparams(objectptr);
extern void resolveparams(objinstptr);

/* from python.c: */

#ifdef HAVE_PYTHON
extern int python_key_command(int);
extern void init_interpreter(void);
extern void exit_interpreter(void);
#endif

#ifdef HAVE_XPM
extern xcWidget *pytoolbuttons(int *);
#endif

/* from rcfile.c: */

extern short execcommand(short, char *);
#ifdef TCL_WRAPPER
extern int defaultscript(void);
extern int loadrcfile(void);
#else
extern void defaultscript(void);
extern void loadrcfile(void);
#endif
extern void execscript(void);
#ifndef HAVE_PYTHON
extern short readcommand(short, FILE *);
#endif

/* from graphic.c */

extern void count_graphics(objectptr, short *);
extern void UDrawGraphic(graphicptr);
extern Imagedata *addnewimage(char *, int, int);
extern graphicptr new_graphic(objinstptr, char *, int, int);
extern graphicptr gradient_field(objinstptr, int, int, int, int);
extern void invalidate_graphics(objectptr);
extern void freegraphic(graphicptr);
extern short *collect_graphics(short *);
xcImage *xcImageCreate(int width, int height);
void xcImageDestroy(xcImage *img);
int xcImageGetWidth(xcImage *img);
int xcImageGetHeight(xcImage *img);
void xcImagePutPixel(xcImage *img, int x, int y, u_char r, u_char g, u_char b);
void xcImageGetPixel(xcImage *img, int x, int y, u_char *r, u_char *g,
      u_char *b);

/* from flate.c */

#ifdef HAVE_LIBZ
extern u_long large_deflate(u_char *, u_long, u_char *, u_long);
extern u_long large_inflate(u_char *, u_long, u_char **, u_long);
extern unsigned long ps_deflate (unsigned char *, unsigned long,
	unsigned char *, unsigned long);
extern unsigned long ps_inflate (unsigned char *, unsigned long,
	unsigned char **, unsigned long);
#endif

/* from render.c: */

extern void ghostinit(void);
extern void send_client(Atom);
extern void ask_for_next(void);
extern void start_gs(void);
extern void parse_bg(FILE *, FILE *);
extern void bg_get_bbox(void);
extern void backgroundbbox(int);
extern void readbackground(FILE *);
extern void savebackground(FILE *, char *);
extern void register_bg(char *);
extern void loadbackground(void);
extern void send_to_gs(char *);
extern int renderbackground(void);
extern int copybackground(void);
extern int exit_gs(void);
extern int reset_gs(void);
void write_scale_position_and_run_gs(float norm, float xpos, float ypos,
      const char *bgfile);

#ifndef TCL_WRAPPER
extern Boolean render_client(XEvent *);
#endif

/* from schema.c: */

extern objectptr NameToPageObject(char *, objinstptr *, int *);
extern objectptr NameToObject(char *, objinstptr *, Boolean);
extern int checkpagename(objectptr);
extern void callwritenet(xcWidget, pointertype, caddr_t);
extern void startconnect(xcWidget, caddr_t, caddr_t);
extern void connectivity(xcWidget, caddr_t, caddr_t);
extern Boolean setobjecttype(objectptr);
extern void pinconvert(labelptr, pointertype);
extern void dopintype(xcWidget, pointertype, caddr_t);
extern void setsymschem(void);
extern int findpageobj(objectptr);
extern void collectsubschems(int);
extern int findsubschems(int, objectptr, int, short *, Boolean);
extern void copypinlabel(labelptr);
extern int checkschem(objectptr, char *);
extern int checksym(objectptr, char *);
extern int changeotherpins(labelptr, stringpart *);
extern void swapschem(int, int, char *);
extern void dobeforeswap(xcWidget, caddr_t, caddr_t);
extern void schemdisassoc(void);
extern void startschemassoc(xcWidget, pointertype, caddr_t);
extern Boolean schemassoc(objectptr, objectptr);
#ifndef TCL_WRAPPER
extern void xlib_swapschem(xcWidget, pointertype, caddr_t);
#endif

/* from selection.c: */

extern void enable_selects(objectptr, short *, int);
extern void disable_selects(objectptr, short *, int);
extern void selectfilter(xcWidget, pointertype, caddr_t);
extern Boolean checkselect(short);
extern Boolean checkselect_draw(short, Boolean);
extern void geneasydraw(short, int, objectptr, objinstptr);
extern void gendrawselected(short *, objectptr, objinstptr);
extern selection *genselectelement(short, u_char, objectptr, objinstptr);
extern short *allocselect(void);
extern void setoptionmenu(void);
extern int test_insideness(int, int, XPoint *);
extern Boolean pathselect(genericptr *, short, float);
extern Boolean areaelement(genericptr *, XPoint *, Boolean, short);
extern Boolean selectarea(objectptr, XPoint *, short);
extern void startdesel(xcWidget, caddr_t, caddr_t);
extern void deselect(xcWidget, caddr_t, caddr_t);
extern void draw_normal_selected(objectptr, objinstptr);
extern void freeselects(void);
extern void draw_all_selected(void);
extern void clearselects_noundo(void);
extern void clearselects(void);
extern void unselect_all(void);
extern void select_connected_pins();
extern void reset_cycles();
extern selection *recurselect(short, u_char, pushlistptr *);
extern short *recurse_select_element(short, u_char);
extern void startselect(void);
extern void trackselarea(void);
extern void trackrescale(void);
extern Boolean compareselection(selection *, selection *);
extern pointselect *addcycle(genericptr *, short, u_char);
extern void addanticycle(pathptr, splineptr, short);
extern void copycycles(pointselect **, pointselect **);
extern void advancecycle(genericptr *, short);
extern void removecycle(genericptr *);
extern void removeothercycles(pathptr, genericptr);
extern Boolean checkforcycles(short *, int);
extern void makerefcycle(pointselect *, short);

/* from text.c: */

extern Boolean hasparameter(labelptr);
extern void joinlabels(void);
extern void drawparamlabels(labelptr, short);
extern stringpart *nextstringpart(stringpart *, objinstptr);
extern stringpart *nextstringpartrecompute(stringpart *, objinstptr);
extern stringpart *makesegment(stringpart **, stringpart *);
extern stringpart *splitstring(int, stringpart **, objinstptr);
extern stringpart *mergestring(stringpart *);
extern stringpart *linkstring(objinstptr, stringpart *, Boolean);
extern int findcurfont(int, stringpart *, objinstptr);
extern stringpart *findtextinstring(char *, int *, stringpart *, objinstptr);
extern stringpart *findstringpart(int, int *, stringpart *, objinstptr);
extern void charprint(char *, stringpart *, int);
extern void charprinttex(char *, stringpart *, int);
extern char *stringprint(stringpart *, objinstptr);
extern char *textprint(stringpart *, objinstptr);
extern char *textprinttex(stringpart *, objinstptr);
extern char *textprintsubnet(stringpart *, objinstptr, int);
extern char *textprintnet(char *, char *, Genericlist *);
extern int textcomp(stringpart *, char *, objinstptr);
extern int textncomp(stringpart *, char *, objinstptr);
extern int stringcomp(stringpart *, stringpart *);
extern Boolean issymbolfont(int);
extern Boolean issansfont(int);
extern Boolean isisolatin1(int);
extern int stringcomprelaxed(stringpart *, stringpart *, objinstptr);
extern int stringparts(stringpart *);
extern int stringlength(stringpart *, Boolean, objinstptr);
extern stringpart *stringcopy(stringpart *);
extern stringpart *stringcopyall(stringpart *, objinstptr);
extern stringpart *stringcopyback(stringpart *, objinstptr);
extern stringpart *deletestring(stringpart *, stringpart **, objinstptr);
extern Genericlist *break_up_bus(labelptr, objinstptr, Genericlist *);
extern int sub_bus_idx(labelptr, objinstptr);
extern Boolean pin_is_bus(labelptr, objinstptr);
extern int find_cardinal(int, labelptr, objinstptr);
extern int find_ordinal(int, labelptr, objinstptr);

void UDrawCharString(u_char *text, int start, int end, XfPoint *offset,
     short styles, short ffont, int groupheight, int passcolor, float tmpscale);
extern void UDrawString(labelptr, int, objinstptr);
extern void UDrawStringNoX(labelptr, int, objinstptr);
extern void CheckMarginStop(labelptr, objinstptr, Boolean);
extern TextExtents ULength(labelptr, objinstptr, TextLinesInfo *);
extern void undrawtext(labelptr);
extern void redrawtext(labelptr);
extern void composefontlib(short);
extern void fontcat_op(int, int, int);

/* from xcircuit.c: */

extern void Wprintf(char *, ...);
extern void W1printf(char *, ...);
extern void W2printf(char *, ...);
extern void W3printf(char *, ...);

extern XCWindowData *create_new_window(void);
extern void pre_initialize(void);
extern void post_initialize(void);
extern void delete_window(XCWindowDataPtr);
extern void printeventmode(void);
extern void popupprompt(xcWidget, char *, char *, void (*function)(),
                        buttonsave *, const char *);
extern void getproptext(xcWidget, propstruct *, caddr_t);
extern int rgb_alloccolor(int, int, int);
extern void addtocolorlist(xcWidget, int);
extern int addnewcolorentry(int);
extern int xc_getlayoutcolor(int);
void xc_get_color_rgb(unsigned long cidx, unsigned short *red, 
      unsigned short *green, unsigned short *blue);
extern int query_named_color(char *);
extern caddr_t CvtStringToPixel(XrmValuePtr, int *, XrmValuePtr, XrmValuePtr);
extern void outputpopup(xcWidget, caddr_t, caddr_t);
extern void docommand(void);
extern int getscreenDPI(void);
extern int  installowncmap(void);  /* sometimes from xtgui.c */
extern void destroypopup(xcWidget, popupstruct *, caddr_t);
extern int xc_alloccolor(char *);
extern void dointr(int);
extern void DoNothing(xcWidget, caddr_t, caddr_t);
extern u_short countchanges(char **);
extern u_short getchanges(objectptr);
extern int quitcheck(xcWidget, caddr_t, caddr_t);
extern void quit(xcWidget, caddr_t);
extern void resizetoolbar(void);
extern void writescalevalues(char *, char *, char *);
#ifdef TCL_WRAPPER
extern Tcl_Obj *Tcl_NewHandleObj(void *);
extern int Tcl_GetHandleFromObj(Tcl_Interp *, Tcl_Obj *, void **);
#else
extern void updatetext(xcWidget, xcWidgetList, caddr_t);
extern void delwin(xcWidget, popupstruct *, XClientMessageEvent *);
#endif


extern void makecursors(void);

/* from cairo.c */

void xc_cairo_set_matrix(const Matrix *xcm);
void xc_cairo_set_color(int coloridx);
void xc_cairo_set_fontinfo(size_t fontidx);
