/* * CALC Provides a calculator that opens on the active screen when * you press a specific key sequence. Otherwise, the program * waits quitely in the background. * * Copyright 1989 by Davide P. Cervone. * You may use this code, provided this copyright notice is kept intact. */ #define INTUITION_PREFERENCES_H /* don't need 'em */ #include #include "cHandler.h" #include "cKeys.h" #define UPWIDTH 24 #define UPHEIGHT 10 #define UPDEPTH 2 #define UPWORDS 2 #define DOWNWIDTH 24 #define DOWNHEIGHT 10 #define DOWNDEPTH 2 #define DOWNWORDS 2 #define CLOSEWIDTH 21 #define CLOSEHEIGHT 10 #define CLOSEDEPTH 2 #define CLOSEWORDS 2 #ifndef NL_DAEMON extern USHORT UpFrontData[UPDEPTH][UPHEIGHT*UPWORDS]; extern USHORT DownBackData[DOWNDEPTH][DOWNHEIGHT*DOWNWORDS]; extern USHORT CloseData[CLOSEDEPTH][CLOSEHEIGHT*CLOSEWORDS]; struct Image UpFrontImage = {0,0, UPWIDTH,UPHEIGHT,UPDEPTH, &UpFrontData[0][0], 0x03,0x00, NULL}; struct Image DownBackImage = {0,0, DOWNWIDTH,DOWNHEIGHT,DOWNDEPTH, &DownBackData[0][0], 0x03,0x00, NULL}; struct Image CloseImage = {0,0, CLOSEWIDTH,CLOSEHEIGHT,CLOSEDEPTH, &CloseData[0][0], 0x03,0x00, NULL}; #endif #define TOPBOX(w,h) {0,0, 0,h-1, 1,h-2, 1,0, w-2,0} #define BOTBOX(w,h) {w-1,h-1, w-1,0, w-2,1, w-2,h-1, 1,h-1} #define BUTTONBOX(w,h) {TOPBOX(w,h),BOTBOX(w,h)} static SHORT KeyBox[2][10] = BUTTONBOX(KEYW,KEYH); static SHORT LongBox[2][10] = BUTTONBOX(LONGKEYW,LONGKEYH); static SHORT TallBox[2][10] = BUTTONBOX(TALLKEYW,TALLKEYH); static SHORT TextBox[2][10] = BUTTONBOX(DISPLAYW,DISPLAYH); static SHORT KPadBox[2][10] = BUTTONBOX(KPADW,KPADH); static SHORT FKeyBox[2][10] = BUTTONBOX(FKPDW,FKPDH); static SHORT MainBox[2][10] = /* can't use BUTTON: too long for preprocessor */ {TOPBOX(IMAGEW,IMAGEH), BOTBOX(IMAGEW,IMAGEH)}; static SHORT RootBox[] = {10,0, 4,6, 1,3, 0,3, 3,6, 9,0, 17,0}; static SHORT DragBox[] = {CLOSEWIDTH+9,0, WINDW-UPWIDTH-DOWNWIDTH-9,0}; #define NEXTBORDER(id) NULL #define OUTBUTTON(id,x,y,box)\ {x,y, LIGHTPEN,0, JAM1, 5, &box[0][0], NEXTBORDER(id)},\ {x,y, DARKPEN,0, JAM1, 5, &box[1][0], &CalcBorder[id-1]} #define INBUTTON(id,x,y,box)\ {x,y, DARKPEN,0, JAM1, 5, &box[0][0], NEXTBORDER(id)},\ {x,y, LIGHTPEN,0, JAM1, 5, &box[1][0], &CalcBorder[id-1]} #define ROOTBRDR(id,x,y)\ {x,y, TEXTPEN,0, JAM1, 7, &RootBox[0], &CalcBorder[BRDR_KEY]} #define DRAGBRDR(id,box)\ {0,4, LIGHTPEN,0,JAM1, 2, &box[0], NULL},\ {0,8, LIGHTPEN,0,JAM1, 2, &box[0], &CalcBorder[id-1]} struct Border CalcBorder[] = { OUTBUTTON (BRDR_KEY, 0,0, KeyBox), OUTBUTTON (BRDR_LONG, 0,0, LongBox), OUTBUTTON (BRDR_TALL, 0,0, TallBox), ROOTBRDR (BRDR_ROOT, 4,2), #undef NEXTBORDER #define NEXTBORDER(id) &CalcBorder[id-2] DRAGBRDR (BRDR_DRAG, DragBox), INBUTTON (BRDR_TEXT, DISPX,DISPY, TextBox), INBUTTON (BRDR_KPAD, KPXPOS,KPYPOS, KPadBox), INBUTTON (BRDR_FKEY, FKXPOS,FKYPOS, FKeyBox), INBUTTON (BRDR_DISP, DISPXPOS,DISPYPOS, FKeyBox), OUTBUTTON (BRDR_MAIN, 0,TOPH, MainBox) }; static struct Image BgImage = {0,TOPH, IMAGEW,IMAGEH,0, NULL, 0,BACKPEN, NULL}; static struct Image TextImage = {LINEW,LINEH, DISPLAYIW,DISPLAYIH,0, NULL, 0,DISPLAYPEN, NULL}; static struct TextAttr KeyFont = {"topaz.font",8,0,NULL}; char DisplayBuffer[20] = "-0."; #define KEY_TEXT(s,n,x,y)\ {TEXTPEN,0,JAM1, (x-n*8)/2,(y-8)/2+1, &KeyFont, s, NULL} #define DISPNAME(s,n,x,y)\ {DISPTEXTPEN,0,JAM1, x-n*8-2*LINEW,(y-8)/2+1, &KeyFont, s, NULL} #define KEYNAME(s,n) KEY_TEXT(s,n,KEYW,KEYH) #define LONGNAME(s,n) KEY_TEXT(s,n,LONGKEYW,LONGKEYH) #define TALLNAME(s,n) KEY_TEXT(s,n,TALLKEYW,TALLKEYH) struct IntuiText KeyText[] = { LONGNAME("0",1), KEYNAME("1",1), KEYNAME("2",1), KEYNAME("3",1), KEYNAME("4",1), KEYNAME("5",1), KEYNAME("6",1), KEYNAME("7",1), KEYNAME("8",1), KEYNAME("9",1), KEYNAME(".",1), KEYNAME("+",1), KEYNAME("-",1), KEYNAME("*",1), KEYNAME("/",1), KEYNAME("(",1), KEYNAME(")",1), TALLNAME("=",1), KEYNAME("+-",2), KEYNAME("",0), KEYNAME("%",1), KEYNAME("C",1), DISPNAME(&DisplayBuffer[1],2,DISPLAYW,DISPLAYH), }; #define NEXTGADGET(id) &CalcGadget[id+1] #define KEY(id,x,y,w,h,c,brdr)\ {NEXTGADGET(id), x,y, w,h, GADGHCOMP, RELVERIFY,\ BOOLGADGET, (APTR)&CalcBorder[brdr], NULL, &KeyText[id],\ NULL, NULL, id, (APTR)c} #define DISPLAY(id,c)\ {NEXTGADGET(id), DISPX,DISPY, DISPLAYW,DISPLAYH, GADGHCOMP|GADGIMAGE,\ RELVERIFY, BOOLGADGET, (APTR)&TextImage, NULL, &KeyText[id],\ NULL, NULL, id, (APTR)c} #define BRDRGADGET(id)\ {NEXTGADGET(id), 0,0, 0,0, GADGHNONE, 0, BOOLGADGET,\ (APTR)&CalcBorder[BRDR_MAIN], NULL, NULL, NULL, NULL, id, NULL} #define BGGADGET(id)\ {NULL, 0,0, 0,0, GADGHNONE| GADGIMAGE, 0, BOOLGADGET, (APTR)&BgImage,\ NULL, NULL, NULL, NULL, id, NULL} #define KPKEY(id,r,c,ch) KEY(id,KPX(c),KPY(r),KEYW,KEYH,ch,BRDR_KEY) #define LONGKEY(id,r,c,ch) KEY(id,KPX(c),KPY(r),LONGKEYW,LONGKEYH,ch,BRDR_LONG) #define TALLKEY(id,r,c,ch) KEY(id,KPX(c),KPY(r),TALLKEYW,TALLKEYH,ch,BRDR_TALL) #define FKEY(id,r,c,ch) KEY(id,FKX(c),FKY(r),KEYW,KEYH,ch,BRDR_KEY) #define RKEY(id,r,c,ch) KEY(id,FKX(c),FKY(r),KEYW,KEYH,ch,BRDR_ROOT) struct Gadget CalcGadget[] = { LONGKEY (KEY_0, 4,0, '0'), KPKEY (KEY_1, 3,0, '1'), KPKEY (KEY_2, 3,1, '2'), KPKEY (KEY_3, 3,2, '3'), KPKEY (KEY_4, 2,0, '4'), KPKEY (KEY_5, 2,1, '5'), KPKEY (KEY_6, 2,2, '6'), KPKEY (KEY_7, 1,0, '7'), KPKEY (KEY_8, 1,1, '8'), KPKEY (KEY_9, 1,2, '9'), KPKEY (KEY_DOT, 4,2, '.'), KPKEY (KEY_PLUS, 2,3, '+'), KPKEY (KEY_MINUS, 1,3, '-'), KPKEY (KEY_TIMES, 0,3, '*'), KPKEY (KEY_DIVIDE, 0,2, '/'), KPKEY (KEY_LPAREN, 0,0, '('), KPKEY (KEY_RPAREN, 0,1, ')'), TALLKEY (KEY_EQUAL, 3,3, '='), FKEY (KEY_SIGN, 0,0, '\\'), RKEY (KEY_SQRT, 0,1, '`'), FKEY (KEY_PERCENT,0,2, '%'), FKEY (KEY_CLEAR, 0,3, '\x7F'), DISPLAY (KEY_DISP, '\x08'), BRDRGADGET (GADG_BRDR), BGGADGET (GADG_BCKGRND) };