
/*
 * DEFS.H
 *
 *	(C)Copyright 1987 by Matthew Dillon, All Rights Reserved
 *
 *	ARexx support added 03/19/88  -  Kim DeVaughn
 *
 */

#define AREXX 1

#include <exec/types.h>
#include <exec/memory.h>
#include <exec/ports.h>
#include <intuition/intuition.h>

/*
 *  Need the prototypes for inline library call pragmas so we don't
 *  need to reference amiga.lib which has absolute references to
 *  various variables (can't have absolutes for a residentable program)
 */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef LATTICE
typedef long size_t;
#endif

#define MAXTOGGLE   256
#define QMOVE	    (0x6B|0x80)

#define COLT(n)  (XTbase + (n) * Xsize)
#define ROWT(n)  (YTbase + (n) * Ysize)
#define COL(n)   (Xbase  + (n) * Xsize)
#define ROW(n)   (Ybase  + (n) * Ysize)

/*
 *  code compatibility... try to phase these usages out.
 */

#define ARGS(args)  args

typedef unsigned char	    ubyte;
typedef unsigned short	    uword;
typedef unsigned long	    ulong;

typedef struct MinNode	    MNODE;
typedef struct Node	    NODE;
typedef struct MinList	    MLIST;
typedef struct List	    LIST;
typedef struct MsgPort	    PORT;
typedef struct Window	    WIN;
typedef struct Message	    MSG;
typedef struct TextAttr     TA;
typedef struct TextFont     FONT;
typedef struct RastPort     RP;
typedef struct IntuiMessage	IMESS;
typedef struct IntuitionBase	IBASE;
typedef struct Menu	    MENU;
typedef struct MenuItem     ITEM;
typedef struct IntuiText    ITEXT;

extern short Xsize, Ysize;
extern short XTbase, YTbase;
extern short Rows, Columns;
extern short Xbase, Ybase;
extern short Xpixs, Ypixs;
extern ubyte *av[];
extern char Wdisable;

typedef struct _ED {
    MNODE Node;
    WIN *Win;
    FONT *Font; 	    /*	da font, da font!		    */
    long Topline, Topcolumn;
    long Line, Column;
    long Lines, Maxlines;
    ubyte **List;
    ubyte Name[64];
    ubyte Wtitle[130];
    char Modified;
    long  dirlock;	    /* directory lock			    */
    char iconmode;	    /*	window in icon mode		    */

    /*
     *	CONFIG INFORMATION
     */

    char  BeginConfig;
    ubyte Tabstop;
    ubyte Margin;
    char Insertmode;
    char IgnoreCase;
    char Wordwrap;
    short WWCol;	    /*	word wrap column		    */
    short Winx; 	    /*	save state of non-icon window	    */
    short Winy;
    short Winwidth;
    short Winheight;
    short IWinx, IWiny;     /*	save state of icon window	    */
    int   FGPen;
    int   BGPen;
    int   HGPen;
    char  EndConfig;
} ED;

extern long  BSline, BEline;
extern short BSchar, BEchar;
extern ED    *BEp;


#ifndef NULL
#define NULL 0
#endif
#ifdef E
#undef E
#endif

extern MLIST DBase;
extern MLIST PBase;
extern ED    *Ep;

extern char	Overide;
extern char	Savetabs;
extern char	memoryfail, Nsu, Msgchk;
extern ubyte	CtlC;
extern ubyte	Current[256];
extern ubyte	Deline[256];
extern ubyte	Space[32];
extern short	Clen;
extern char	Abortcommand, MShowTitle;
extern char	Comlinemode;
extern char	*Partial;
extern char	*String;

extern long	Dirlock;

extern PORT	*IPCPort;
extern long	DResBase;

/*
 *  PROTOTYPES
 */

/* external protos  */

extern void	*xfopen (char *, char *, long);

/* Prototypes for functions defined in cmd1.c */

void escapecomlinemode (void);
void setpen (int);
void text_cursor (int);
int text_init (ED *, WIN *, struct NewWindow *);
int text_switch (struct Window *);
int text_sync (void);
int text_load (void);
int text_colno (void);
int text_lineno (void);
int text_lines (void);
int text_cols (void);
int text_imode (void);
int text_tabsize (void);
unsigned char *text_name (void);
void text_uninit (void);
void inversemode (int);
void text_position (int, int);
void displayblock (int);
void text_redrawblock (int);
void text_redisplaycurrline (void);
void text_redisplay (void);
void text_write (unsigned char *);
void text_displayseg (int, int);
void movetocursor (void);
void do_up (void);
void do_scrolldown (void);
void do_scrollup (void);
void do_down (void);
void do_page (void);
void do_downadd (void);
void do_left (void);
void do_right (void);
void do_col (void);
void do_tab (void);
void do_backtab (void);
void do_return (void);
void do_bs (void);
void do_recall (void);
void do_esc (void);
void do_del (void);
void do_top (void);
void do_bottom (void);
void do_firstcolumn (void);
void do_firstnb (void);
void do_lastcolumn (void);
void do_goto (void);
void do_screentop (void);
void do_screenbottom (void);
void do_findstr (void);
void do_findr (void);
void do_find (void);
void search_operation (void);
void do_saveconfig(void);
void do_fgpen(void);
void do_bgpen(void);
void do_hgpen(void);
void do_justify(void);
void do_title(void);
void do_undeline(void);
void do_unjustify(void);
void do_modified(void);
int case_strncmp (char *, char *, int);

/* Prototypes for functions defined in cmd2.c */

struct _ED *uninit_init (struct _ED *);
void do_remeol (void);
void do_wleft (void);
void do_wright (void);
void do_split (void);
int do_join (void);
void do_margin (void);
void do_wordwrap (void);
void do_setparcol (void);
void do_reformat (int);
void do_tabstop (void);
void do_insertmode (void);
void do_insline (void);
void do_deline (void);
void do_chfilename (void);
void do_edit (void);
void do_bsave (void);
void do_save (void);
void do_saveas (void);
void do_savetabs (void);
void do_block (void);
int blockok (void);
void do_bdelete (void);
void do_bcopy (void);
void do_bmove (void);
void do_if (void);
int do_toggle (int);
void do_tlate (void);
void do_bsource (void);
void do_scanf (void);
int extend (struct _ED *, int);
int makeroom (int);
void freelist (char **, int);

/* Prototypes for functions defined in cmd3.c */

void do_setfont (void);
void do_ignorecase (void);
void do_cd (void);
void do_set (void);
void do_setenv (void);
void do_unset (void);
void do_unsetenv (void);
char *getvar (char *);

/* Prototypes for functions defined in command.c */
void init_command (void);
int do_command (char *);
void do_lrow();
void do_urow();
void do_null (void);
void do_source (void);
void do_quit (void);
void do_execute (void);
void do_repeat (void);
char *breakout (char **, char *, char **);

/* Prototypes for functions defined in filereq.c */

void do_arpinsfile (void);
void do_arpload (void);
void do_arpsave (void);
void fixfile (char *, char *);
void splitpath (char *, char *, char *);

/* Prototypes for functions defined in globals.c */

/* Prototypes for functions defined in keyboard.c */
void keyctl (struct IntuiMessage *, int, unsigned short);
void dealloc_hash (void);
void resethash (void);
int returnoveride (int);
void addhash (ubyte, ubyte, ubyte, ubyte, ubyte *);
int remhash (ubyte, ubyte, ubyte);
char *keyspectomacro (char *);
void do_map (void);
void do_unmap (void);
void do_clearmap (void);
void do_savemap (void);
void keyboard_init (void);
unsigned char *cqtoa (int, int);
int get_codequal (ubyte *, ubyte *, ubyte *);

/* Prototypes for functions defined in main.c */

void ipchandler (void);
void initipc (void);
void do_ipc (void);
void do_iconify (void);
void do_tomouse (void);
void iconify (void);
void uniconify (void);
void do_newwindow ();
void do_openwindow();
struct Window *TOpenWindow (struct NewWindow *);
struct Window *opensharedwindow (struct NewWindow *);
void closesharedwindow (struct Window *);
int getyn (char *);
void title (char *);
void window_title (void);
void set_window_params (void);
void exiterr (char *);
int breakcheck (void);
void breakreset (void);
void do_resize (void);
int ops (char **, int);

/* Prototypes for functions defined in menu.c */

void menu_strip (struct Window *);
void menu_off (void);
void menu_on (void);
void do_menuoff (void);
void do_menuon (void);
char *menutomacro (char *);
char *menu_cmd (struct IntuiMessage *);
void fixmenu (void);
void do_menuclear (void);
void do_menuadd (void);
void do_menudelhdr (void);
int do_menudel (void);

/* Prototypes for functions defined in mods.c */
void PMAdd (void);
void PMRem (void);
void PMKill (struct _ED *);
int do_pushmark (void);
void do_popmark (void);
void do_swapmark (void);
void do_purgemark (void);
void do_ping (void);
void do_pong (void);
void do_undo (void);

/* Prototypes for functions defined in refs.c */
void do_addpath (void);
void do_rempath (void);
void do_ctags (void);
void do_refs (void);
int searchref (char *, char *, char **, char **, int *, char **);
int dirpart (char *);

/* Prototypes for functions defined in rexx.c */
void openrexx (void);
void closerexx (void);
void do_rx (void);
void do_rx1 (void);
void do_rx2 (void);
void do_rxImplied (char *, char *);
int do_rexx (char *);

/* Prototypes for functions defined in subs.c */
void makemygadget (struct Gadget *);
int firstns (char *);
int lastns (char *);
int wordlen (char *);
int getpathto (char *, char *);
void *allocb (int);
void *allocl (int);
void bmovl (void *, void *, long);
int detab (char *, char *, int);
int xefgets (FILE *, char *, int);
int ncstrcmp (unsigned char *, unsigned char *);
struct _ED *finded (char *, int);

extern int arpreq (char *, char *, char *, WIN *);

extern void *clrmem(void *, size_t);
