home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdarg.h>
- #include <time.h>
- #include "akbd.h"
- #include "bbc.h"
- #include "wimpt.h"
- #include "res.h"
- #include "colourmenu.h"
- #include "resspr.h"
- #include "template.h"
- #include "dbox.h"
- #include "event.h"
- #include "flex.h"
- #include "heap.h"
- #include "baricon.h"
- #include "menu.h"
- #include "saveas.h"
- #include "werr.h"
- #include "wimp.h"
- #include "win.h"
- #include "alarm.h"
- #include "global.h"
- #include "config.h"
- #include "cmdparse.h"
- #include "misc.h"
- #include "netuser.h"
- #include "timer.h"
- #include "telnet.h"
- #include "ftp.h"
- #include "tcp.h"
- #include "ip.h"
- #include "finger.h"
- #include "icmp.h"
- #include "session.h"
- #include "smtp.h"
- #include "domain.h"
- #include "window.h"
-
- #define XtoWork(x) ((x) << 1)
- #define YtoWork(y) ((y) << 2)
-
- #define Icon_Menu_Info 1
- #define Icon_Menu_Ping 2
- #define Icon_Menu_SMTP 3
- #define Icon_Menu_NNTP 4
- #define Icon_Menu_FINGER 5
- #define Icon_Menu_FTP 6
- #define Icon_Menu_TELNET 7
- #define Icon_Menu_Parms 8
- #define Icon_Menu_Quit 9
-
- #define Parms_Menu_Domain 1
- #define Parms_Menu_IP 2
- #define Parms_Menu_TCP 3
-
- #define SMTP_Menu_Kick 1
-
- #define NNTP_Menu_Kick 1
-
- #define Window_Menu_Info 1
- #define Window_Menu_Colours 2
- #define Window_Menu_Kick 3
- #define Window_Menu_Reset 4
- #define Window_Menu_Close 5
-
- #define Window_Colours_NormalF 1
- #define Window_Colours_NormalB 2
- #define Window_Colours_ReverseF 3
- #define Window_Colours_ReverseB 4
- #define Window_Colours_BoldF 5
- #define Window_Colours_BoldB 6
- #define Window_Colours_UnderF 7
- #define Window_Colours_UnderB 8
- #define Window_Colours_BlinkF 9
- #define Window_Colours_BlinkB 10
-
- static menu Icon_Menu;
- static menu SMTP_Menu;
- static menu NNTP_Menu;
- static menu Parms_Menu;
- static menu Window_Menu;
-
- static int defaultf[NATTR] = {0, 7, 9, 10, 11};
- static int defaultb[NATTR] = {8, 0, 8, 8, 8};
-
- static void Initialise(void);
- static void Icon_ClickProc(wimp_i);
- static void Icon_MenuProc(void *, char *);
- static void Alarm_Handler(int, void *);
- static void Window_Proc(wimp_eventstr *, void *);
- static void Window_MenuProc(void *, char *);
- static int keyboard(struct Window_Struct *, int);
- static void Open_Window(struct Window_Struct *, wimp_openstr *);
- static void Redraw_Window(struct Window_Struct *, wimp_w);
- static void Redo_Window(struct Window_Struct *, wimp_redrawstr, BOOL);
-
- int docolour(int argc, char **argv)
- {
- if (argc < 3) return(0);
-
- if (strncmp("normalfore", argv[1], strlen(argv[1])) == 0)
- defaultf[ATTR_NORMAL] = atoi(argv[2]);
- if (strncmp("normalback", argv[1], strlen(argv[1])) == 0)
- defaultb[ATTR_NORMAL] = atoi(argv[2]);
- if (strncmp("reversefore", argv[1], strlen(argv[1])) == 0)
- defaultf[ATTR_REVERSE] = atoi(argv[2]);
- if (strncmp("reverseback", argv[1], strlen(argv[1])) == 0)
- defaultb[ATTR_REVERSE] = atoi(argv[2]);
- if (strncmp("boldfore", argv[1], strlen(argv[1])) == 0)
- defaultf[ATTR_BOLD] = atoi(argv[2]);
- if (strncmp("boldback", argv[1], strlen(argv[1])) == 0)
- defaultb[ATTR_BOLD] = atoi(argv[2]);
- if (strncmp("underfore", argv[1], strlen(argv[1])) == 0)
- defaultf[ATTR_UNDER] = atoi(argv[2]);
- if (strncmp("underback", argv[1], strlen(argv[1])) == 0)
- defaultb[ATTR_UNDER] = atoi(argv[2]);
- if (strncmp("blinkfore", argv[1], strlen(argv[1])) == 0)
- defaultf[ATTR_BLINK] = atoi(argv[2]);
- if (strncmp("blinkback", argv[1], strlen(argv[1])) == 0)
- defaultb[ATTR_BLINK] = atoi(argv[2]);
-
- return(0);
- }
-
- int main(int argc, char **argv)
- {
- argc = argc;
- argv = argv;
-
- Initialise();
-
- event_setmask(wimp_EMPTRENTER | wimp_EMPTRLEAVE);
-
- alarm_set(alarm_timenow() + 1, Alarm_Handler, 0);
-
- while (TRUE)
- event_process();
-
- return(0);
- }
-
- static void Initialise(void)
- {
- menu menu1;
- menu menu2;
-
- wimpt_init("NETLITE");
- res_init("NETLITE");
- resspr_init();
- template_init();
- dbox_init();
- alarm_init();
- flex_init();
- heap_init(FALSE);
-
- baricon("!netlite", (int)resspr_area(), Icon_ClickProc);
-
- Icon_Menu = menu_new("NETLITE", ">Info,>Ping,SMTP,NNTP,>Finger,>FTP,>TELNET,Parms,Quit");
- SMTP_Menu = menu_new("SMTP", "Kick");
- NNTP_Menu = menu_new("NNTP", "Kick");
- Parms_Menu = menu_new("Parms", ">Domain,>IP,>TCP");
- Window_Menu = menu_new("Session", ">Info,Colours,Kick,Reset,Close");
- menu1 = menu_new("Colours", "Normal fg,Normal bg,Reverse fg,Reverse bg,Bold fg,Bold bg,Under fg,Under bg,Blink fg, Blink bg");
- menu2 = colourmenu_make("Colour", FALSE);
-
- menu_submenu(Icon_Menu, Icon_Menu_SMTP, SMTP_Menu);
- menu_submenu(Icon_Menu, Icon_Menu_NNTP, NNTP_Menu);
- menu_submenu(Icon_Menu, Icon_Menu_Parms, Parms_Menu);
- menu_submenu(menu1, Window_Colours_NormalF, menu2);
- menu_submenu(menu1, Window_Colours_NormalB, menu2);
- menu_submenu(menu1, Window_Colours_ReverseF, menu2);
- menu_submenu(menu1, Window_Colours_ReverseB, menu2);
- menu_submenu(menu1, Window_Colours_BoldF, menu2);
- menu_submenu(menu1, Window_Colours_BoldB, menu2);
- menu_submenu(menu1, Window_Colours_UnderF, menu2);
- menu_submenu(menu1, Window_Colours_UnderB, menu2);
- menu_submenu(menu1, Window_Colours_BlinkF, menu2);
- menu_submenu(menu1, Window_Colours_BlinkB, menu2);
- menu_submenu(Window_Menu, Window_Menu_Colours, menu1);
-
- event_attachmenu(win_ICONBAR, Icon_Menu, Icon_MenuProc, 0);
-
- net_init();
- }
-
- static void Icon_ClickProc(wimp_i Icon)
- {
- Icon = Icon;
- }
-
- static void Icon_MenuProc(void *Handle, char *Hit)
- {
- dbox d;
-
- Handle = Handle;
-
- switch (Hit[0])
- {
- case Icon_Menu_Info:
- if ((d = dbox_new("progInfo")) == NULL)
- return;
- dbox_show(d);
- dbox_fillin(d);
- dbox_dispose(&d);
- break;
- case Icon_Menu_Ping:
- start_ping();
- break;
- case Icon_Menu_SMTP:
- switch (Hit[1])
- {
- case SMTP_Menu_Kick:
- smtptick();
- break;
- default:
- break;
- }
- break;
- case Icon_Menu_FTP:
- start_ftp();
- break;
- case Icon_Menu_TELNET:
- start_telnet();
- break;
- case Icon_Menu_FINGER:
- start_finger();
- break;
- case Icon_Menu_Parms:
- switch (Hit[1])
- {
- case Parms_Menu_Domain:
- domain_parms();
- break;
- case Parms_Menu_IP:
- ip_parms();
- break;
- case Parms_Menu_TCP:
- tcp_parms();
- break;
- default:
- break;
- }
- break;
- case Icon_Menu_Quit:
- iostop();
- exit(0);
- default:
- break;
- }
- }
-
- static void Alarm_Handler(int Time, void *Handle)
- {
- Handle = Handle;
- Time = Time;
-
- net_poll();
-
- alarm_set(alarm_timenow() + 1, Alarm_Handler, 0);
- }
-
- void *Window_Open(void *Sess, char *Description)
- {
- struct Window_Struct *Window;
- int Save_Area_Size;
- sprite_ptr Pointer;
- sprite_state sprite_state;
- wimp_wstate window_state;
- wimp_redrawstr r;
- template *t;
- int i;
-
- if ((Window = (struct Window_Struct *)heap_alloc(sizeof(struct Window_Struct))) == NULL)
- return(NULL);
-
- memset(Window, 0, sizeof(struct Window_Struct));
-
- if ((Window->Sprite.Area = (sprite_area *)heap_alloc(SPRITE_SIZE)) == NULL)
- {
- heap_free(Window);
- return(NULL);
- }
-
- sprite_area_initialise(Window->Sprite.Area, SPRITE_SIZE);
-
- sprite_create(Window->Sprite.Area, "screendump", sprite_nopalette, SPRITE_WIDTH, SPRITE_HEIGHT, SPRITE_MODE);
-
- Window->Sprite.id.tag = sprite_id_name;
- Window->Sprite.id.s.name = "screendump";
-
- sprite_select_rp(Window->Sprite.Area, &Window->Sprite.id, &Pointer);
-
- Window->Sprite.id.tag = sprite_id_addr;
- Window->Sprite.id.s.addr = Pointer;
-
- sprite_sizeof_spritecontext(Window->Sprite.Area, &Window->Sprite.id, &Save_Area_Size);
-
- if ((Window->Save_Area = (int *)heap_alloc(Save_Area_Size)) == NULL)
- {
- heap_free(Window->Sprite.Area);
- heap_free(Window);
- return(NULL);
- }
-
- t = template_copy(template_find("Window"));
- wimp_create_wind(&t->window, &Window->Window_Handle);
-
- win_settitle(Window->Window_Handle, Description);
-
- win_register_event_handler(Window->Window_Handle, Window_Proc, (void *)Window);
-
- event_attachmenu(Window->Window_Handle, Window_Menu, Window_MenuProc, (void *)Window);
-
- Window->Save_Area[0] = 0;
-
- for (i = 0; i < NATTR; i++)
- {
- Window->Foreground[i] = defaultf[i];
- Window->Background[i] = defaultb[i];
- }
-
- sprite_outputtosprite(Window->Sprite.Area, &Window->Sprite.id, Window->Save_Area, &sprite_state);
-
- Window_Reset(Window);
-
- sprite_restorestate(sprite_state);
-
- Window->Session = (struct session *)Sess;
- Window->Session->keypad = 0;
-
- wimp_get_wind_state(Window->Window_Handle, &window_state);
- window_state.o.behind = -1;
- Open_Window(Window, &window_state.o);
-
- r.w = Window->Window_Handle;
- r.box.x0 = 0;
- r.box.x1 = XtoWork(SPRITE_WIDTH);
- r.box.y0 = -YtoWork(SPRITE_HEIGHT);
- r.box.y1 = 0;
- wimp_force_redraw(&r);
-
- return((void *)Window);
- }
-
- void Window_Close(void *w)
- {
- struct Window_Struct *Window = (struct Window_Struct *)w;
-
- wimp_close_wind(Window->Window_Handle);
-
- if (Window->Record != NULL) fclose(Window->Record);
-
- heap_free(Window->Sprite.Area);
- heap_free(Window->Save_Area);
- heap_free(Window);
- }
-
- static void Window_MenuProc(void *Handle, char *Hit)
- {
- struct Window_Struct *Window = (struct Window_Struct *)Handle;
-
- switch (Hit[0])
- {
- case Window_Menu_Info:
- session_info(Window->Session);
- break;
- case Window_Menu_Colours:
- switch (Hit[1])
- {
- case Window_Colours_NormalF:
- Window->Foreground[ATTR_NORMAL] = Hit[2] - 1;
- break;
- case Window_Colours_NormalB:
- Window->Background[ATTR_NORMAL] = Hit[2] - 1;
- break;
- case Window_Colours_ReverseF:
- Window->Foreground[ATTR_REVERSE] = Hit[2] - 1;
- break;
- case Window_Colours_ReverseB:
- Window->Background[ATTR_REVERSE] = Hit[2] - 1;
- break;
- case Window_Colours_BoldF:
- Window->Foreground[ATTR_BOLD] = Hit[2] - 1;
- break;
- case Window_Colours_BoldB:
- Window->Background[ATTR_BOLD] = Hit[2] - 1;
- break;
- case Window_Colours_UnderF:
- Window->Foreground[ATTR_UNDER] = Hit[2] - 1;
- break;
- case Window_Colours_UnderB:
- Window->Background[ATTR_UNDER] = Hit[2] - 1;
- break;
- case Window_Colours_BlinkF:
- Window->Foreground[ATTR_BLINK] = Hit[2] - 1;
- break;
- case Window_Colours_BlinkB:
- Window->Background[ATTR_BLINK] = Hit[2] - 1;
- break;
- default:
- break;
- }
- break;
- case Window_Menu_Kick:
- session_kick(Window->Session);
- break;
- case Window_Menu_Reset:
- session_reset(Window->Session);
- break;
- case Window_Menu_Close:
- session_close(Window->Session);
- break;
- default:
- break;
- }
- }
-
- static void Window_Proc(wimp_eventstr *Event, void *Handle)
- {
- int c;
- wimp_caretstr wc;
- struct Window_Struct *Window = (struct Window_Struct *)Handle;
-
- switch (Event->e)
- {
- case wimp_EREDRAW:
- Redraw_Window(Window, Event->data.o.w);
- break;
- case wimp_EOPEN:
- Open_Window(Window, &Event->data.o);
- break;
- case wimp_ECLOSE:
- freesession(Window->Session);
- Window_Close(Window);
- break;
- case wimp_EBUT:
- wc.w = Window->Window_Handle;
- wc.i = -1;
- wc.height = -1;
- wc.x = 0;
- wc.y = 0;
- wc.index = 0;
- wimp_set_caret_pos(&wc);
- break;
- case wimp_EKEY:
- c = Event->data.key.chcode;
- if (!keyboard(Window, c))
- wimp_processkey(c);
- break;
- default:
- break;
- }
- }
-
- static int keyboard(struct Window_Struct *Window, int c)
- {
- char Key_Buffer[10];
- int Key_Length;
-
- if (Window->Session->parse == NULLVFP) return(0);
-
- if ((Key_Length = keymap(Window->Session->raw, Window->Session->keypad, Key_Buffer, c)) == 0)
- return(0);
-
- if (Window->Session->echo)
- Window_Write(Window, Key_Buffer, Key_Length);
-
- if (Window->Session->raw)
- {
- (*Window->Session->parse)(Window->Session, Key_Buffer, Key_Length);
- }
- else
- {
- switch (c)
- {
- case '\b':
- if (Window->Session->bufptr > Window->Session->buffer)
- Window->Session->bufptr--;
- break;
- case '\r':
- case '\n':
- if (!Window->Session->echo) Window_Write(Window, "\n", 1);
- *Window->Session->bufptr++ = '\r';
- *Window->Session->bufptr++ = '\n';
- (*Window->Session->parse)(Window->Session, Window->Session->buffer, Window->Session->bufptr - Window->Session->buffer);
- Window->Session->bufptr = Window->Session->buffer;
- break;
- default:
- *Window->Session->bufptr++ = c;
- break;
- }
- }
-
- return(1);
- }
-
- static void Open_Window(struct Window_Struct *Window, wimp_openstr *o)
- {
- o->x = 0;
- o->y = 0;
-
- wimp_open_wind(o);
-
- if (Window->Old_X != (o->box.x1 - o->box.x0) ||
- Window->Old_Y != (o->box.y1 - o->box.y0))
- {
- Redraw_Window(Window, o->w);
- Window->Old_X = o->box.x1 - o->box.x0;
- Window->Old_Y = o->box.y1 - o->box.y0;
- }
- }
-
- static void Redraw_Window(struct Window_Struct *Window, wimp_w handle)
- {
- BOOL more;
- wimp_redrawstr r;
- wimp_winfo winfo;
-
- winfo.w = handle;
- wimp_get_wind_info(&winfo);
-
- Window->X_Div_Mult = winfo.info.ex.x1 - winfo.info.ex.x0;
- Window->Y_Div_Mult = winfo.info.ex.y1 - winfo.info.ex.y0;
- Window->X_Mag_Mult = winfo.info.box.x1 - winfo.info.box.x0;
- Window->Y_Mag_Mult = winfo.info.box.y1 - winfo.info.box.y0;
-
- r.w = handle;
- wimp_redraw_wind(&r, &more);
-
- if (more) Redo_Window(Window, r, more);
- }
-
- static void Redo_Window(struct Window_Struct *Window, wimp_redrawstr r, BOOL more)
- {
- BOOL more_to_do = more;
- wimp_redrawstr new_r = r;
- sprite_factors factors;
- sprite_pixtrans pixtrans[256];
-
- wimp_readpixtrans(Window->Sprite.Area, &Window->Sprite.id, &factors, pixtrans);
-
- factors.xdiv *= Window->X_Div_Mult;
- factors.ydiv *= Window->Y_Div_Mult;
- factors.xmag *= Window->X_Mag_Mult;
- factors.ymag *= Window->Y_Mag_Mult;
-
- while (more_to_do)
- {
- sprite_put_scaled(Window->Sprite.Area, &Window->Sprite.id, 0, r.box.x0, r.box.y0, &factors, pixtrans);
-
- wimp_get_rectangle(&new_r, &more_to_do);
- }
- }
-
- void Update_Window(struct Window_Struct *Window, wimp_redrawstr r)
- {
- wimp_redrawstr new_r = r;
- BOOL more;
-
- wimp_update_wind(&new_r, &more);
-
- if (more) Redo_Window(Window, new_r, more);
- }
-