/* E Source generated by SRCGEN v0.4 */ OPT OSVERSION=37,REG=5 MODULE 'gadtools', 'libraries/gadtools', 'intuition/intuition', 'intuition/screens', 'intuition/gadgetclass', 'intuition/iobsolete', 'utility/tagitem', 'devices/inputevent', 'graphics/text', 'tools/detatch' ENUM ERROR_NONE, ERROR_CONTEXT, ERROR_GADGET, ERROR_WB, ERROR_VISUAL, ERROR_GT, ERROR_WINDOW, ERROR_MENUS ENUM G_SRC,G_DST,G_STR,G_TXT,G_CB ENUM DECI,HEX,BIN,ASCII,FLOAT,OCTAL DEF infos:PTR TO gadget, wnd:PTR TO window, glist, scr:PTR TO screen, visual=NIL, tattr:PTR TO textattr, id DEF gsrc,gdst,gs,gt,gcb DEF src,dst,str:PTR TO CHAR,txt[36]:STRING,num,error=FALSE PROC setupscreen() IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN RETURN ERROR_GT IF (scr:=LockPubScreen('Workbench'))=NIL THEN RETURN ERROR_WB IF (visual:=GetVisualInfoA(scr,NIL))=NIL THEN RETURN ERROR_VISUAL tattr:=scr.font ENDPROC CHAR '$VER: NumConv v1.5 by MarK (30.3.2000), kuchinka@volny.cz',0 PROC closedownscreen() IF visual THEN FreeVisualInfo(visual) IF scr THEN UnlockPubScreen(NIL,scr) IF gadtoolsbase THEN CloseLibrary(gadtoolsbase) ENDPROC PROC openwindow() DEF g:PTR TO gadget IF (g:=CreateContext({glist}))=NIL THEN RETURN ERROR_CONTEXT IF (gsrc:=CreateGadgetA(CYCLE_KIND,g, [4,4,85,21,NIL,tattr,G_SRC,$0,visual,0]:newgadget, [GTCY_LABELS,['DEC','HEX','BIN','ASCII','FLOAT','OCTAL',0], GTCY_ACTIVE,DECI, TAG_END]))=NIL THEN RETURN ERROR_GADGET IF (gdst:=CreateGadgetA(CYCLE_KIND,gsrc, [4,28,85,21,NIL,tattr,G_DST,$0,visual,0]:newgadget, [GTCY_LABELS,['DEC','HEX','BIN','ASCII','FLOAT','OCTAL',0], GTCY_ACTIVE,HEX, TAG_END]))=NIL THEN RETURN ERROR_GADGET IF (gs:=CreateGadgetA(STRING_KIND,gdst, [92,4,245,21,NIL,tattr,G_STR,$0,visual,0]:newgadget, [GTST_MAXCHARS,34, TAG_END]))=NIL THEN RETURN ERROR_GADGET IF (gt:=CreateGadgetA(TEXT_KIND,gs, [92,28,269,21,NIL,tattr,G_TXT,$0,visual,0]:newgadget, [GTTX_BORDER,TRUE, TAG_END]))=NIL THEN RETURN ERROR_GADGET IF (gcb:=CreateGadgetA(BUTTON_KIND,gt, [340,4,21,21,'CB',tattr,G_CB,$0,visual,0]:newgadget,NIL))=NIL THEN RETURN ERROR_GADGET IF (wnd:=OpenWindowTagList(NIL, [WA_LEFT,0, WA_TOP,scr.barheight+1, WA_INNERWIDTH,364, WA_INNERHEIGHT,52, WA_IDCMP,IDCMP_GADGETUP OR IDCMP_GADGETDOWN OR IDCMP_CLOSEWINDOW OR IDCMP_ACTIVEWINDOW OR IDCMP_CHANGEWINDOW OR IDCMP_MOUSEBUTTONS, WA_FLAGS,WFLG_CLOSEGADGET OR WFLG_DEPTHGADGET OR WFLG_DRAGBAR OR WFLG_GIMMEZEROZERO OR WFLG_ACTIVATE OR WFLG_RMBTRAP, WA_TITLE,'NumConv v1.5 by Martin Kuchinka', WA_SCREENTITLE,'NoTek 2000', WA_CUSTOMSCREEN,scr, WA_AUTOADJUST,TRUE, WA_GADGETS,glist, TAG_END]))=NIL THEN RETURN ERROR_WINDOW Gt_RefreshWindow(wnd,NIL) ENDPROC PROC closewindow() IF wnd THEN CloseWindow(wnd) IF glist THEN FreeGadgets(glist) ENDPROC PROC process(win:PTR TO window) DEF type=0 ActivateGadget(gs,win,NIL) REPEAT type:=wait4message(win) SELECT type CASE IDCMP_CLOSEWINDOW; RETURN CASE IDCMP_MOUSEBUTTONS ActivateGadget(gs,win,NIL) CASE IDCMP_GADGETUP go: Gt_GetGadgetAttrsA(gsrc,win,NIL,[GTCY_ACTIVE,{src},TAG_END]) Gt_GetGadgetAttrsA(gdst,win,NIL,[GTCY_ACTIVE,{dst},TAG_END]) Gt_GetGadgetAttrsA(gs,win,NIL,[GTST_STRING,{str},TAG_END]) IF id=G_CB Gt_SetGadgetAttrsA(gs,win,NIL,[GTST_STRING,txt,TAG_END]) Gt_GetGadgetAttrsA(gs,win,NIL,[GTST_STRING,{str},TAG_END]) ENDIF SELECT dst CASE DECI SELECT src CASE DECI; StringF(txt,'\d',Val(str)) CASE HEX; StringF(txt,'$\s',str); num:=Val(txt); StringF(txt,'\d',num) CASE BIN; StringF(txt,'\d',bin2num(str)) CASE ASCII;StringF(txt,'\d',ascii2num(str)) CASE FLOAT;StringF(txt,'\d',RealVal(str)) CASE OCTAL;StringF(txt,'\d',readoct(str)) ENDSELECT CASE HEX SELECT src CASE DECI; StringF(txt,'\h',Val(str)) CASE HEX; StringF(txt,'$\s',str); num:=Val(txt); StringF(txt,'\h',num) CASE BIN; StringF(txt,'\h',bin2num(str)) CASE ASCII;StringF(txt,'\h',ascii2num(str)) CASE FLOAT;StringF(txt,'\h',RealVal(str)) CASE OCTAL;StringF(txt,'\h',readoct(str)) ENDSELECT CASE BIN SELECT src CASE DECI; num2bin(txt,Val(str)) CASE HEX; StringF(txt,'$\s',str); num2bin(txt,Val(txt)) CASE BIN; num2bin(txt,bin2num(str)) CASE ASCII;num2bin(txt,ascii2num(str)) CASE FLOAT;num2bin(txt,RealVal(str)) CASE OCTAL;num2bin(txt,readoct(str)) ENDSELECT CASE ASCII SELECT src CASE DECI; num2ascii(txt,Val(str)) CASE HEX; StringF(txt,'$\s',str); num2ascii(txt,Val(txt)) CASE BIN; num2ascii(txt,bin2num(str)) CASE ASCII;num2ascii(txt,ascii2num(str)) CASE FLOAT;num2ascii(txt,RealVal(str)) CASE OCTAL;num2ascii(txt,readoct(str)) ENDSELECT CASE FLOAT SELECT src CASE DECI; RealF(txt,Val(str),6) CASE HEX; StringF(txt,'$\s',str); RealF(txt,Val(txt),6) CASE BIN; RealF(txt,bin2num(str),6) CASE ASCII;RealF(txt,ascii2num(str),6) CASE FLOAT;RealF(txt,RealVal(str),6) CASE OCTAL;RealF(txt,readoct(str),6) ENDSELECT CASE OCTAL SELECT src CASE DECI; writeoct(txt,Val(str)) CASE HEX; StringF(txt,'$\s',str); writeoct(txt,Val(txt)) CASE BIN; writeoct(txt,bin2num(str)) CASE ASCII;writeoct(txt,ascii2num(str)) CASE FLOAT;writeoct(txt,RealVal(str)) CASE OCTAL;writeoct(txt,readoct(str)) ENDSELECT ENDSELECT IF error=FALSE THEN Gt_SetGadgetAttrsA(gt,win,NIL,[GTTX_TEXT,txt,TAG_END]) error:=FALSE ActivateGadget(gs,win,NIL) DEFAULT; JUMP go ENDSELECT UNTIL type=IDCMP_CLOSEWINDOW ENDPROC PROC wait4message(win:PTR TO window) DEF mes:PTR TO intuimessage,type REPEAT type:=0 IF mes:=Gt_GetIMsg(win.userport) type:=mes.class IF type=IDCMP_GADGETUP infos:=mes.iaddress id:=infos.gadgetid ENDIF Gt_ReplyIMsg(mes) ELSE WaitPort(win.userport) ENDIF UNTIL type ENDPROC type PROC reporterr(er) DEF erlist:PTR TO LONG IF er erlist:=['get context', 'create gadget', 'lock wb', 'get visual infos', 'open "gadtools.library" v37+', 'open window', 'create menus'] EasyRequestArgs(0,[20,0,0,'Could not \s!','OK'],0,[erlist[er-1]]) ENDIF ENDPROC er PROC main() HANDLE detatch('NumConv') IF reporterr(setupscreen())=0 reporterr(openwindow()) process(wnd) closewindow() IF CtrlC() THEN Raise(ERROR_NONE) ENDIF Raise(ERROR_NONE) EXCEPT closedownscreen() ENDPROC PROC bin2num(str:PTR TO CHAR) DEF num=0,n=0 WHILE str[n]="0" DO n++ WHILE str[n] IF str[n]="0"; num:=Shl(num,1) ELSEIF str[n]="1"; num:=Shl(num,1) OR 1 ELSE Gt_SetGadgetAttrsA(gt,wnd,NIL,[GTTX_TEXT,'Illegal Character',TAG_END]) error:=TRUE ENDIF n++ ENDWHILE ENDPROC num PROC ascii2num(str:PTR TO CHAR) DEF num,s=0 num:=^str IF (num AND $00ff0000)=0 THEN s:=3 ELSE IF (num AND $0000ff00)=0 THEN s:=2 ELSE IF (num AND $000000ff)=0 THEN s:=1 num:=Shr(num,s*8) ENDPROC num PROC num2bin(txt:PTR TO CHAR,num) DEF n=31,i=0 WHILE n+1 txt[i]:=IF num AND Shl(1,n) THEN "1" ELSE "0" n-- i++ ENDWHILE txt[i]:=0 ENDPROC PROC num2ascii(txt:PTR TO CHAR,num) DEF n IF num<=$ff; num:=Shl(num,24) ELSEIF num<=$ffff; num:=Shl(num,16) ELSEIF num<=$ffffff; num:=Shl(num,8) ENDIF ^txt:=num txt[4]:=0 FOR n:=0 TO 3 IF ((txt[n]>="\0") AND (txt[n]<" ")) OR ((txt[n]>=128) AND (txt[n]<160)) THEN txt[n]:="." ENDFOR ENDPROC PROC readoct(txt:PTR TO CHAR) DEF n=0,num=0 WHILE txt[n] IF (txt[n]>="0") AND (txt[n]<="7") num:=Shl(num,3) num:=num OR (txt[n] AND $7) ELSE Gt_SetGadgetAttrsA(gt,wnd,NIL,[GTTX_TEXT,'Illegal Character',TAG_END]) error:=TRUE ENDIF n++ EXIT n=12 ENDWHILE ENDPROC num PROC writeoct(txt:PTR TO CHAR,num) DEF n,m,i=0 FOR n:=0 TO 10 IF num AND Shl(7,n*3) THEN m:=n ENDFOR WHILE m+1 txt[i]:=(Shr(num,m*3) AND 7)+"0" i++ m-- ENDWHILE txt[i]:=0 ENDPROC num