Filewatcher File Search
FTP Search
  
Directory 
  
Content Search 
   
pkg://hcalc-1.0-1.src.rpm:8294/hcalc.tar.gz  info  downloads

Makefile100644    124     24         441  6453331606  10264 0ustar  djuserCC = gcc
CFLAGS = -g -O2 -MMD

OBJS = \
	hcalc.o \
	input.o \
	setupx.o \
	images.o \
	draw.o \
	$E

hcalc : $(OBJS)
	gcc -o $@ $^ -lXpm -lX11

clean :
	-rm -f *.o *.d *~ \#* hcalc core

tar :
	tar cvfz distrib.tar.gz *.c *.h Makefile *.xpm

D=$(wildcard *.d)
ifneq ($D,)
include $D
endif
chars.xpm100644    124     24        2177  6453310034  10472 0ustar  djuser/* XPM */
static char *xpm[] = {
"145 7 2 1",
"  c #000000000000", /* 24 */
"- c #6666ffff6666", /* 113 */
"       ---    -    ---   ---  -   - -----  ---  -----  ---   ---        -               -         --                                             ",
"      -   -  --   -   - -   - -   - -     -         - -   - -   -       -               -        -  -                                       -    ",
"      -  --   -       -     - -   - ----  -         - -   - -   -  ---- ----   ---   ----  ---   -          -   -             - --   ---    -    ",
"      - - -   -     --    --  -----     - ----     -   ---   ---- -   - -   - -   - -   - -   - ---   -----  - -               -  - -   - -----  ",
"      --  -   -    -        -     -     - -   -   -   -   -     - -   - -   - -     -   - -----  -            -     -     -    -    -   -   -    ",
"      -   -   -   -     -   -     - -   - -   -   -   -   -     - -   - -   - -   - -   - -      -           - -    -    ---   -    -   -   -    ",
"       ---   ---  -----  ---      -  ---   ---    -    ---   ---   ---- ----   ---   ----  ----  -          -   -  -      -    -     ---         "};
draw.c100644    124     24        4756  6505257416   7766 0ustar  djuser/* Copyright 1998 DJ Delorie <dj@delorie.com>
   Distributed under the terms of the GNU GPL
   http://www.delorie.com/store/hcalc/
*/
#include "hcalc.h"

static char shown_offsets[15];
static int shown_bitmask;
static int show_bits;

#define CHARS_LEFT	6
#define CHARS_TOP	6

#define BITS_LEFT_X	92
#define BITS_TOP_1	6
#define BITS_BOT_1	10
#define BITS_TOP_0	10
#define BITS_BOT_0	12

void
redraw_chars()
{
  int i;
  for (i=0; i<15; i++)
  {
    XCopyArea(display, chars, window, gc,
	      shown_offsets[i], 0, 5, 7,
	      CHARS_LEFT+6*i, CHARS_TOP);
  }
}

void
redraw()
{
  XCopyArea(display, face, window, gc, 0, 0, WIDTH, HEIGHT, 0, 0);

  if (show_bits)
  {
    int i, x;
    XSetForeground(display, gc, bit_off);
    for (i=0; i<32; i++)
    {
      x = BITS_LEFT_X - 2*i - 3*(i/4);
      if (!(shown_bitmask & (1<<i)))
	XDrawLine(display, window, gc, x, BITS_TOP_0, x, BITS_BOT_0);
    }
    XSetForeground(display, gc, bit_on);
    for (i=0; i<32; i++)
    {
      x = BITS_LEFT_X - 2*i - 3*(i/4);
      if (shown_bitmask & (1<<i))
	XDrawLine(display, window, gc, x, BITS_TOP_1, x, BITS_BOT_1);
    }
  }
  else
    redraw_chars();
}

set_bits(int b)
{
  shown_bitmask = b;
  show_bits = 1;
  redraw();
}

set_string(char *s)
{
  char tmp[16];
  int i;
  sprintf(tmp, "%15.15s", s);
  for (i=0; i<15; i++)
    shown_offsets[i] = char_to_x[tmp[i]];
  if (show_bits == 0)
    redraw_chars();
  else
  {
    show_bits = 0;
    redraw();
  }
}

void
send_current_display()
{
  char tmp[40], *tp=tmp;
  int i;
  XEvent e;

  if (show_bits)
  {
    for (i=31; i>0; i--)
      if (shown_bitmask & (1<<i))
	break;
    for (; i>=0; i--)
    {
      if (shown_bitmask & (1<<i))
	*tp++ = '1';
      else
	*tp++ = '0';
    }
  }
  else
  {
    for (i=0; i<15; i++)
    {
      char c = charmap[shown_offsets[i]/6];
      if (c != ' ' && c != ',')
	*tp++ = c;
    }
  }

  *tp = 0;

  e.type = SelectionNotify;
  e.xselection.display = display;
  e.xselection.requestor = event.xselectionrequest.requestor;
  e.xselection.selection = event.xselectionrequest.selection;
  e.xselection.target = event.xselectionrequest.target;
  e.xselection.property = event.xselectionrequest.property;
  e.xselection.time = event.xselectionrequest.time;

  if (event.xselectionrequest.target != XA_STRING)
  {
    e.xselection.property = None;
  }
  else
  {
    XChangeProperty(display, e.xselection.requestor, e.xselection.property,
		    XA_STRING, 8, PropModeReplace, tmp, strlen(tmp));
  }

  XSendEvent(display, e.xselection.requestor, False, 0, &e);
}
face.xpm100644    124     24       45432  6453266564  10333 0ustar  djuser/* XPM */
static char *xpm[] = {
"125 147 7 1",
"  c #000000000000", /* 24 */
"- c #ffff00000000", /* 54 */
"0 c #333333333333", /* 67 */
"1 c #cccc99996666", /* 123 */
"2 c #999999999999", /* 153 */
"3 c #00006666cccc", /* 170 */
"4 c #ffffffffffff", /* 239 */
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22224444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444442222222222222222222222222222",
"22244                                                                                           44222-------------------22222",
"2224                                                                                             422---------------------2222",
"2224                                                                                             422---444--4-----4444---2222",
"2224                                                                                             422--4---4-4-----4---4--2222",
"2224                                                                                             422--4-----4-----4---4--2222",
"2224                                                                                             422--4-----4-----4444---2222",
"2224                                                                                             422--4-----4-----4--4---2222",
"2224                                                                                             422--4---4-4-----4---4--2222",
"2224                                                                                             422---444--44444-4---4--2222",
"2224                                                                                             422---------------------2222",
"22244                                                                                           44222-------------------22222",
"22224444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444442222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222000000000000000000022222000000000000000000022222000000000000000000022222000000000000000000022222000000000000000000022222",
"22230000000000000000000003330000000000000000000003330000000000000000000003330000000000000000000003220000000000000000000002222",
"22330044440044444004440003330040004044444040004003330004440004440044444003330044440004440040004003320044440044444040000002222",
"22330040004040000040004003330040004040000040004003330040004040004000400003330040004000400044004003320040004040000040000002222",
"22330040004040000040000003330040004040000004040003330040004040000000400003330040004000400040404003320040004040000040000002222",
"22330040004044440040000003330044444044440000400003330040004040000000400003330044440000400040044003320040004044440040000002222",
"22330040004040000040000003330040004040000004040003330040004040000000400003330040004000400040004003320040004040000040000002222",
"22330040004040000040004003330040004040000040004003330040004040004000400003330040004000400040004003320040004040000040000002222",
"22330044440044444004440003330040004044444040004003330004440004440000400003330044440004440040004003320044440044444044444002222",
"22230000000000000000000003330000000000000000000003330000000000000000000003330000000000000000000003220000000000000000000002222",
"22222000000000000000000022222000000000000000000022222000000000000000000022222000000000000000000022222000000000000000000022222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222000000000000000000022222000000000000000000022222000000000000000000022222000000000000000000022222000000000000000000022222",
"22220000000000000000000002220000000000000000000002220000000000000000000002220000000000000000000002220000000000000000000002222",
"22220004440044444004440002220044440004440040000002220004440040004040004002220000000004000040000002220000004000040000000002222",
"22220040004000400040004002220040004040004040000002220040004040004044044002220000000040000400000002220000000400004000000002222",
"22220040000000400040004002220040004040000040000002220040000040004040404002220000000400004000000002220000000040000400000002222",
"22220004440000400040004002220044440040000040000002220004440040004040404002220000004000040000000002220000000004000040000002222",
"22220000004000400040004002220040040040000040000002220000004040004040004002220000000400004000000002220000000040000400000002222",
"22220040004000400040004002220040004040004040000002220040004040004040004002220000000040000400000002220000000400004000000002222",
"22220004440000400004440002220040004004440044444002220004440004440040004002220000000004000040000002220000004000040000000002222",
"22220000000000000000000002220000000000000000000002220000000000000000000002220000000000000000000002220000000000000000000002222",
"22222000000000000000000022222000000000000000000022222000000000000000000022222000000000000000000022222000000000000000000022222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222211111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222000000000000000000022111000000000000000000011111000000000000000000011111000000000000000000011122                   22222",
"2222000000000000000000000211000000000000000000000111000000000000000000000111000000000000000000000112                     2222",
"2222000444004000404444400211000000004444000000000111000000004444400000000111000000004444400000000112          4          2222",
"2222004000404000404000000211000000004000400000000111000000004000000000000111000000004000000000000112                     2222",
"2222004000004000404000000211000000004000400000000111000000004000000000000111000000004000000000000112                     2222",
"2222000444004444404444000211000000004000400000000111000000004444000000000111000000004444000000000112        44444        2222",
"2222000000404000404000000211000000004000400000000111000000004000000000000111000000004000000000000112                     2222",
"2222004000404000404000000211000000004000400000000111000000004000000000000111000000004000000000000112                     2222",
"2222000444004000404000000211000000004444000000000111000000004444400000000111000000004000000000000112          4          2222",
"2222000000000000000000000211000000000000000000000111000000000000000000000111000000000000000000000112                     2222",
"22222000000000000000000022111000000000000000000011111000000000000000000011111000000000000000000011122                   22222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222000000000000000000022111000000000000000000011111000000000000000000011111000000000000000000011122                   22222",
"2222000000000000000000000211000000000000000000000111000000000000000000000111000000000000000000000112                     2222",
"2222000444004000404000400211000000000444000000000111000000004444000000000111000000000444000000000112                     2222",
"2222000040004400404000400211000000004000400000000111000000004000400000000111000000004000400000000112        4   4        2222",
"2222000040004040404000400211000000004000400000000111000000004000400000000111000000004000000000000112         4 4         2222",
"2222000040004004400404000211000000004444400000000111000000004444000000000111000000004000000000000112          4          2222",
"2222000040004000400404000211000000004000400000000111000000004000400000000111000000004000000000000112         4 4         2222",
"2222000040004000400040000211000000004000400000000111000000004000400000000111000000004000400000000112        4   4        2222",
"2222000444004000400040000211000000004000400000000111000000004444000000000111000000000444000000000112                     2222",
"2222000000000000000000000211000000000000000000000111000000000000000000000111000000000000000000000112                     2222",
"22222000000000000000000022111000000000000000000011111000000000000000000011111000000000000000000011122                   22222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222000000000000000000022111444444444444444444411111444444444444444444411114444444444444444444441122                   22222",
"2222000000000000000000000211444444444444444444444111444444444444444444444111444444444444444444444112                     2222",
"222200000044400044400000021144444444     44444444111444444444   444444444111444444444   444444444112                     2222",
"2222000004000404000400000211444444444444 4444444411144444444 444 4444444411144444444 444 44444444112                     2222",
"2222000004000404000400000211444444444444 4444444411144444444 444 4444444411144444444 444 44444444112                     2222",
"222200000400040444400000021144444444444 444444444111444444444   444444444111444444444    44444444112        44444        2222",
"22220000040004040040000002114444444444 444444444411144444444 444 44444444111444444444444 44444444112                     2222",
"22220000040004040004000002114444444444 444444444411144444444 444 44444444111444444444444 44444444112                     2222",
"22220000004440040004000002114444444444 4444444444111444444444   444444444111444444444   444444444112                     2222",
"2222000000000000000000000211444444444444444444444111444444444444444444444111444444444444444444444112                     2222",
"22222000000000000000000022111444444444444444444411111444444444444444444411114444444444444444444441122                   22222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222000000000000000000022111444444444444444444411111444444444444444444411114444444444444444444441122                   22222",
"2222000000000000000000000211444444444444444444444111444444444444444444444111444444444444444444444112                     2222",
"222200044400400040444400021144444444 444 4444444411144444444     44444444111444444444   444444444112                     2222",
"222200400040440040400040021144444444 444 4444444411144444444 44444444444411144444444 444444444444112          4          2222",
"222200400040404040400040021144444444 444 4444444411144444444    44444444411144444444 444444444444112          4          2222",
"222200444440400440400040021144444444     44444444111444444444444 4444444411144444444    444444444112        44444        2222",
"2222004000404000404000400211444444444444 44444444111444444444444 4444444411144444444 444 44444444112          4          2222",
"2222004000404000404000400211444444444444 4444444411144444444 444 4444444411144444444 444 44444444112          4          2222",
"2222004000404000404444000211444444444444 44444444111444444444   444444444111444444444   444444444112                     2222",
"2222000000000000000000000211444444444444444444444111444444444444444444444111444444444444444444444112                     2222",
"22222000000000000000000022114444444444444444444411111444444444444444444411114444444444444444444441122                   22222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222",
"22222000000000000000000022111444444444444444444411111444444444444444444411111444444444444444444411122                   22222",
"2222000000000000000000000211444444444444444444444111444444444444444444444111444444444444444444444112                     2222",
"22220040004004440044440002114444444444 4444444444111444444444   444444444111444444444   444444444112                     2222",
"2222004000404000404000400211444444444  444444444411144444444 444 4444444411144444444 444 44444444112                     2222",
"22220004040040004040004002114444444444 4444444444111444444444444 44444444111444444444444 44444444112                     2222",
"22220000400040004044440002114444444444 44444444441114444444444  4444444441114444444444  444444444112                     2222",
"22220004040040004040040002114444444444 4444444444111444444444 44444444444111444444444444 44444444112                     2222",
"22220040004040004040004002114444444444 444444444411144444444 44444444444411144444444 444 44444444112                     2222",
"2222004000400444004000400211444444444   44444444411144444444     44444444111444444444   444444444112                     2222",
"2222000000000000000000000211444444444444444444444111444444444444444444444111444444444444444444444112                     2222",
"2222200000000000000000002211144444444444444444441111144444444444444444441111144444444444444444441112                     2222",
"2222222222222222222222222211111111111111111111111111111111111111111111111111111111111111111111111112        44444        2222",
"2222222222222222222222222211111111111111111111111111111111111111111111111111111111111111111111111122                     2222",
"2222222222222222222222222211111111111111111111111111111111111111111111111111222222222222222222222222                     2222",
"2222222222222222222222222211111111111111111111111111111111111111111111111112222222222222222222222222                     2222",
"2222222222222222222222222211111111111111111111111111111111111111111111111112222222222222222222222222        44444        2222",
"2222200000000000000000002211144444444444444444441111144444444444444444441112244444444444444444442222                     2222",
"2222000000000000000000000211444444444444444444444111444444444444444444444112444444444444444444444222                     2222",
"2222000000444004444400000211444444444   444444444111444444444444444444444112444444 44444444444444222                     2222",
"222200000400040400000000021144444444 444 44444444111444444444444444444444112444444 44444 44444444222                     2222",
"222200000400000400000000021144444444 44  444444441114444444444444444444441124444     44 444444444222                     2222",
"222200000400000444400000021144444444 4 4 44444444111444444444444444444444112444444 444 4444444444222                     2222",
"222200000400000400000000021144444444  44 444444441114444444444 4444444444112444444 44 44     4444222                     2222",
"222200000400040400000000021144444444 444 44444444111444444444   44444444411244444444 444444444444222                     2222",
"2222000000444004444400000211444444444   4444444441114444444444 4444444444112444444444444444444444222                     2222",
"2222000000000000000000000211444444444444444444444111444444444444444444444112444444444444444444444222                     2222",
"22222000000000000000000022111444444444444444444411111444444444444444444411122444444444444444444422222                   22222",
"22222222222222222222222222111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222",
"22222222222222222222222222211111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222",
"22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"};
hcalc.c100644    124     24         417  6505257426  10052 0ustar  djuser/* Copyright 1998 DJ Delorie <dj@delorie.com>
   Distributed under the terms of the GNU GPL
   http://www.delorie.com/store/hcalc/
*/
#include "hcalc.h"

int
main(int argc, char **argv)
{
  setbuf(stdout, 0);
  setup_x(argc, argv);
  load_pixmaps();
  process_input();
}
hcalc.h100644    124     24        1241  6505257451  10071 0ustar  djuser/* Copyright 1998 DJ Delorie <dj@delorie.com>
   Distributed under the terms of the GNU GPL
   http://www.delorie.com/store/hcalc/
*/
#include <stdio.h>

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/Xatom.h>

extern Display *display;
extern int screen;
extern Visual *visual;
extern Colormap cmap;
extern Window window;
extern Window rootwin;
extern GC gc;
extern Atom wm_protocols_atom;
extern Atom delete_atom;
extern Atom paste_atom;
extern XEvent event;

extern Pixmap face;
extern Pixmap chars;

int bit_on;
int bit_off;

extern int char_to_x[256];
extern char charmap[];
#define MAXCHARS 15

#define WIDTH 125
#define HEIGHT 147
images.c100644    124     24        1343  6505257432  10261 0ustar  djuser/* Copyright 1998 DJ Delorie <dj@delorie.com>
   Distributed under the terms of the GNU GPL
   http://www.delorie.com/store/hcalc/
*/
#include "hcalc.h"
#include <X11/xpm.h>

#define xpm face_data
#include "face.xpm"
#undef xpm
#define xpm chars_data
#include "chars.xpm"
#undef xpm

Pixmap face;
Pixmap chars;

char charmap[] = " 0123456789ABCDEF-x,.ro+";
int char_to_x[256];

void
load_pixmaps()
{
  int i, c;

  XpmAttributes attr;
  attr.valuemask = 0;
  XpmCreatePixmapFromData(display, window, face_data, &face, 0, &attr);
  XpmCreatePixmapFromData(display, window, chars_data, &chars, 0, &attr);

  for (i=0; i<256; i++)
  {
    char_to_x[i] = 0;
    for (c=0; charmap[c]; c++)
      if (charmap[c] == i)
	char_to_x[i] = c*6;
  }
}
input.c100644    124     24       15013  6505257436  10176 0ustar  djuser/* Copyright 1998 DJ Delorie <dj@delorie.com>
   Distributed under the terms of the GNU GPL
   http://www.delorie.com/store/hcalc/
*/
#include "hcalc.h"
#include <ctype.h>
#include <string.h>

char pending_op = 0;
int making_number = 0;
int base = 10;

#define MAXIN 40

char input_buf[MAXIN];
int iptr;
double value, saved, stored=0;

void
convert_number()
{
  char *ip = input_buf;
  double scale = 1;
  int sign = +1;

  if (*ip == '-')
    sign = -1;
  value = 0;
  while (*++ip)
  {
    if (*ip == '.')
      break;
    if (*ip >= '0' && *ip <= '9')
    {
      value *= base;
      value += *ip-'0';
    }
    if (*ip >= 'a' && *ip <= 'f')
    {
      value *= base;
      value += *ip-'a'+10;
    }
  }
  if (*ip)
    while (*++ip)
    {
      if (*ip >= '0' && *ip <= '9')
      {
	scale *= base;
	value += (*ip-'0')/scale;
      }
      if (*ip >= 'a' && *ip <= 'f')
      {
	scale *= base;
	value += (*ip-'a'+10)/scale;
      }
    }
  value *= sign;
}

void
show_value()
{
  char tmp[20], *tp;
  char commas[40], *cp, *dp;
  double v = value;

  if (base == 2)
  {
    int q = (long long)v & 0xffffffffL;
    set_bits(q);
    return;
  }

  tmp[0] = ' ';
  if (v < 0)
  {
    tmp[0] = '-';
    v = -v;
  }

  if (base == 10)
  {
    sprintf(tmp+1, "%.14G", v);
    if (strchr(tmp+1, 'E'))
      sprintf(tmp+1, "%.9G", v);
    if (tmp[14] == '.')
      tmp[14] = 0;
  }
  else
  {
    static char tohex[] = "0123456789ABCDEF";
    long long ll = (long long)v;
    char *revptr;
    tp = tmp+1;
    if (base == 16)
    {
      *tp++ = '0';
      *tp++ = 'x';
    }
    else if (base == 8)
      *tp++ = '0';

    revptr = tp;
    do {
      *tp++ = tohex[ll%base];
      ll /= base;
    } while (ll);
    *tp-- = 0;
    while (revptr < tp) {
      char t = *revptr;
      *revptr = *tp;
      *tp = t;
      tp--;
      revptr++;
    }
  }

  cp = commas+40;
  tp = tmp+strlen(tmp);
  dp = strchr(tmp, '.');
  if (dp == 0)
    dp = tp;

  *--cp = 0;
  while (tp>=tmp)
  {
    *--cp = *tp--;
    switch (base)
    {
    case 10:
      if (isdigit(cp[0]) && isdigit(cp[1]) && isdigit(cp[2]) && tp<dp
	  && tp>=tmp && isdigit(*tp))
	*--cp = ',';
      break;
    case 16:
      if (isxdigit(cp[0]) && isxdigit(cp[1])
	  && isxdigit(cp[2]) && isxdigit(cp[3])
	  && tp>=tmp && isxdigit(*tp))
	*--cp = ',';
      break;
    }
  }

  if (strlen(cp) > 15)
    set_string(tmp);
  else
    set_string(cp);
}

void
end_number()
{
  if (!making_number)
    return;
  making_number = 0;
  iptr = 0;

  switch (pending_op)
  {
  case '+':
    value = saved + value;
    break;
  case '-':
    value = saved - value;
    break;
  case '*':
    value = saved * value;
    break;
  case '/':
    value = saved / value;
    break;
  case '&':
    value = (long long)saved & (long long)value;
    break;
  case '|':
    value = (long long)saved | (long long)value;
    break;
  case '^':
    value = (long long)saved ^ (long long)value;
    break;
  case 'S':
    if (value < 0)
      value = (long long)saved >> (long long)(-value);
    else
      value = (long long)saved << (long long)value;
    break;
  }
  saved = value;
  pending_op = 0;
  show_value();
}

void
start_number()
{
  if (making_number)
    return;

  iptr = 1;
  input_buf[0] = ' ';
  input_buf[1] = 0;
  making_number = 1;
}

void
key(char c)
{
  int v = c;
  /* printf("key %c\n", c); */

  switch (c)
  {
  case 27:
    making_number = 0;
    iptr = 0;
    pending_op = 0;
    value = saved = 0;
    set_string("");
    break;
  case 'u':
    if (making_number)
    {
      making_number = 0;
      set_string("");
    }
    break;

  case 'a':
  case 'b':
  case 'c':
  case 'd':
  case 'e':
  case 'f':
    v = c - 'a' - '9' - 1;
  case '0':
  case '1':
  case '2':
  case '3':
  case '4':
  case '5':
  case '6':
  case '7':
  case '8':
  case '9':
    v -= '0';
    if (v >= base || iptr == MAXIN-1)
      XBell(display, 0);
    else
    {
      start_number();
      input_buf[iptr++] = c;
      input_buf[iptr] = 0;
      convert_number();
      show_value();
    }
    break;
  case '.':
    if (strchr(input_buf, '.'))
    {
      XBell(display, 0);
      break;
    }
  case ',':
    if (iptr == 1 || iptr == MAXIN-1)
      XBell(display, 0);
    else
    {
      start_number();
      input_buf[iptr++] = c;
      input_buf[iptr] = 0;
      convert_number();
      show_value();
    }
    break;

  case 8:
    if (iptr == 1)
      XBell(display, 0);
    else
    {
      input_buf[--iptr] = 0;
      convert_number();
      show_value();
    }
    break;

  case '_': /* +/- */
    if (making_number)
    {
      if (input_buf[0] == '-')
	input_buf[0] = ' ';
      else
	input_buf[0] = '-';
      convert_number();
      show_value();
    }
    else
    {
      value *= -1.0;
      saved *= -1.0;
      show_value();
    }
    break;

  case 'D':
    end_number();
    base = 10;
    show_value();
    break;
  case 'H':
    end_number();
    base = 16;
    show_value();
    break;
  case 'O':
    end_number();
    base = 8;
    show_value();
    break;
  case 'B':
    end_number();
    base = 2;
    show_value();
    break;

  case 'x':
    c = '*';
  case '+':
  case '-':
  case '*':
  case '/':
  case '^':
  case '&':
  case '|':
  case 'S':
  case '=':
    end_number();
    pending_op = c;
    break;

  case 13:
  case 10:
    end_number();
    break;

  case '~':
    end_number();
    value = ~ (long long)value;
    show_value();
    break;

  case '<':
    end_number();
    value = (long long)value << 1;
    show_value();
    break;

  case '>':
    end_number();
    value = (long long)value >> 1;
    show_value();
    break;

  case '[': /* STO */
    stored = value;
    break;
  case ']': /* RCL */
    value = stored;
    show_value();
    making_number = 1;
    iptr = 1;
    input_buf[0] = ' ';
    break;
  case '}': /* SUM */
    stored += value;
    break;

  case 'P': /* click on the display itself */
    break;
  }
}

static char *bmap[] = {
  "PPPP\033",
  "DHOB\010",
  "[]}<>",
  "Sdef/",
  "~abc*",
  "|789-",
  "&456+",
  "^123=",
  "u0._="
};

void
copy()
{
  XSetSelectionOwner(display, XA_PRIMARY, window, event.xbutton.time);
}

void
paste()
{
  XConvertSelection(display, XA_PRIMARY, XA_STRING, paste_atom, window,
		    event.xbutton.time);
}

void
complete_paste(char *s, int n)
{
  int i;
  for (i=0; i<n; i++)
    key(s[i]);
  
}

void
button(int b, int x, int y)
{
  x = (x-2)/24;
  if (x < 0) x = 0;
  if (x > 4) x = 4;
  y = (y-1)/16;
  if (y < 0) y = 0;
  if (y > 8) y = 8;

  if (bmap[y][x] == 27 && b == 3)
    exit(0);

  if (bmap[y][x] == 'P' && b == 1)
    copy();
  if (bmap[y][x] == 'P' && b != 1)
    paste();

  key(bmap[y][x]);
}
setupx.c100644    124     24        5764  6505257442  10360 0ustar  djuser/* Copyright 1998 DJ Delorie <dj@delorie.com>
   Distributed under the terms of the GNU GPL
   http://www.delorie.com/store/hcalc/
*/
#include "hcalc.h"

Display *display=0;
int screen=0;
Visual *visual=0;
Colormap cmap=0;
Window window=0;
Window rootwin=0;
GC gc=0;
Atom wm_protocols_atom=0;
Atom delete_atom=0;
Atom paste_atom=0;
XEvent event;

int bit_on, bit_off;

void
setup_x(int argc, char **argv)
{
  char *name = "hcalc";
  XSizeHints size_hints;
  XTextProperty xtp;
  XSetWindowAttributes attributes;
  XColor color;

  display = XOpenDisplay(0);
  screen = XDefaultScreen(display);
  cmap = XDefaultColormap(display, screen);
  visual = XDefaultVisual(display, screen);
  rootwin = XDefaultRootWindow(display);
  gc = XCreateGC(display, rootwin, 0, 0);

  wm_protocols_atom = XInternAtom(display, "WM_PROTOCOLS", 0);
  delete_atom = XInternAtom(display, "WM_DELETE_WINDOW", 0);
  paste_atom = XInternAtom(display, "PASTE_DATA", 0);

  size_hints.flags = PSize;
  size_hints.width = WIDTH;
  size_hints.height = HEIGHT;
  size_hints.x = 0;
  size_hints.y = 0;

  window = XCreateWindow(display,
			 rootwin,
			 size_hints.x, size_hints.y,
			 size_hints.width, size_hints.height,
			 0,
			 CopyFromParent, /* depth */
			 InputOutput,
			 CopyFromParent, /* visual */
			 0, 0);

  XSetWMNormalHints(display, window, &size_hints);

  XStringListToTextProperty(&name, 1, &xtp);
  XSetWMName(display, window, &xtp);
  XFree(xtp.value);

  XSetWMProtocols(display, window, &delete_atom, 1);

  attributes.event_mask = ExposureMask | ButtonPressMask | KeyPressMask;
  XChangeWindowAttributes(display, window, CWEventMask, &attributes);

  XMapWindow(display, window);
  XFlush(display);

  color.red   = 0x6666;
  color.green = 0xffff;
  color.blue  = 0x6666;
  color.flags = DoRed | DoGreen | DoBlue;
  XAllocColor(display, cmap, &color);
  bit_on = color.pixel;

  color.red   = 0x3333;
  color.green = 0xcccc;
  color.blue  = 0x3333;
  color.flags = DoRed | DoGreen | DoBlue;
  XAllocColor(display, cmap, &color);
  bit_off = color.pixel;
}

void
process_input()
{
  char c;
  KeySym keysym;
  char tmp[16], *tp;
  XTextProperty tprop;

  while (1)
  {
    XNextEvent(display, &event);
    if (event.xany.window == window)
    {
      switch (event.type)
      {
      case Expose:
	if (event.xexpose.count == 0)
	  redraw();
	break;
      case KeyPress:
	if (XLookupString(&event.xkey, &c, 1, &keysym, 0) == 1)
	{
	  if (c == 3)
	    exit(0);
	  key(c);
	}
	else
	{
	  switch (keysym)
	  {
	  case XK_F1:
	    key('D');
	    break;
	  case XK_F2:
	    key('H');
	    break;
	  case XK_F3:
	    key('O');
	    break;
	  case XK_F4:
	    key('B');
	    break;
	  }
	}
	break;
      case ButtonPress:
	button(event.xbutton.button, event.xbutton.x, event.xbutton.y);
	break;

      case SelectionRequest:
	send_current_display();
	break;

      case SelectionNotify:
	if (event.xselection.property == paste_atom)
	{
	  XGetTextProperty(display, window, &tprop, paste_atom);
	  complete_paste(tprop.value, tprop.nitems);
	}
	break;
      }
    }
  }
}
Results 1 - 1
Help - FTP Sites List - Software Dir.
Searching half a billion files worldwide
© 1997-2009 MARUHN Internet Solutions