home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / dev / AmigaE / ArisModules / MeasConv / MeasConv.e < prev    next >
Text File  |  1995-09-07  |  28KB  |  723 lines

  1. OPT OSVERSION=37
  2. ->
  3. -> MeasConv.e (EASYGUI) © Aris Basic 1995
  4. ->
  5. -> COMPILED_NAME:
  6. ->              MeasConv
  7. ->
  8. -> COPYRIGHT (DISTRIBUTION):
  9. ->              GMYware
  10. ->    (see MeasConv.guide "GMYWare")
  11. ->
  12. -> DESCRIPTION:
  13. -> This Program Converts Some Metrics Measurments to English(American)
  14. -> Measurments System.
  15. ->
  16. ->
  17. -> HISTORY:
  18. ->  17.08.1995  01.00  initial release
  19. ->  18.08.1995  01.10  added locale library support
  20. ->  29.08.1995  01.20  program is now commoditie
  21. ->                     added arg and tooltype PUBSCREEN
  22. ->  30.08.1995  01.21  added Kilometers conversion (on Peter 'Stoebi' Schulz`s request)
  23. ->                     added NODEFAULTPUBSCREEN argument and tooltype
  24. ->  31.08.1995  01.22  removed dumb Bug which would cause opening main window
  25. ->                     on hotkey also when an converter window is opened
  26. ->  03.09.1995  01.23  removed some nasty Enforcer Hits which i could find on my
  27. ->                     EC030 machine :))
  28. ->                     added Menu Option and Gadget (on Peter 'Stoebi' Schulz`s request)
  29. ->                     on Child Windows for opening of Main Window
  30. ->                     if these is closed
  31. ->  07.09.1995  01.50  now uses measconv.library
  32. ->
  33. ->
  34. ->
  35. ->
  36. OPT PREPROCESS
  37.  
  38. ->#define DEBUG
  39.  
  40.  
  41. -> Modules
  42.  
  43. MODULE 'icon','commodities','measconv',
  44.        'libraries/commodities',
  45.        'libraries/gadtools',
  46.        'intuition/intuition',
  47.        'exec/nodes',
  48.        'dos/dostags',
  49.        'utility/tagitem',
  50.        'amigalib/argarray',
  51.        'amigalib/cx',
  52.        'tools/easygui',
  53.        'tools/exceptions',
  54.        'tools/blockinput',
  55.        'oomodules/eLocale',
  56.        'oomodules/msgport'
  57.  
  58. ->// Locale ID`s
  59.  
  60. ENUM MSG_MENU_PROJEKT,MSG_ABOUT,MSG_MENU_CONVERTORS,MSG_MENU_LENGTH,MSG_MENU_OTHER,
  61.      MSG_QUIT,MSG_GUI_LENGTH,MSG_GUI_OTHER,MSG_REQ_OK,MSG_GUI_WIN_LEN_TITLE,
  62.      MSG_GUI_WIN_OTH_TITLE,MSG_GUI_WIN_LEN_TXT,MSG_GUI_CENTIMETERS,MSG_GUI_INCHES,
  63.      MSG_GUI_FEETS,MSG_GUI_MILES,MSG_GUI_WIN_OTH_TXT_1,MSG_GUI_WIN_OTH_TXT_2,MSG_GUI_KILOGRAMS,
  64.      MSG_GUI_POUNDS,MSG_GUI_CELSIUS,MSG_GUI_FAHRENHEIT,MSG_GUI_KELVIN,MSG_TRANSLATOR_INFO,
  65.      MSG_ERROR_TITLE,MSG_ERROR_RUNNING,MSG_ERROR_CHECKTT,MSG_HIDE,MSG_MENU_QUIT_MC,MSG_EXIT,
  66.      MSG_GUI_KILOMETERS,MSG_BACKTOMAIN
  67. ->///
  68. ->// Exceptions
  69. ENUM ERR_BRKR,ERR_ARG,ERR_CRCX,ERR_CXERR,ERR_LIB,ERR_PORT,ERR_HOTKEY
  70.  
  71. RAISE ERR_BRKR IF CxBroker()=NIL,
  72.       ERR_CRCX IF CreateCxObj()=NIL,
  73.       ERR_LIB  IF OpenLibrary()=NIL
  74. ->///
  75. ->// CxEvents IDs
  76. ENUM EVT_HOTKEY1,EVT_HOTKEY2,EVT_HOTKEY3
  77. ->///
  78. ->// Global Variables
  79. OBJECT config
  80.     mpopup,lpopup,opopup,nopopup
  81.     ENDOBJECT
  82.  
  83. DEF gadget_cm:PTR TO LONG,gadget_inch:PTR TO LONG,
  84.     gadget_ft:PTR TO LONG,gadget_mile:PTR TO LONG,
  85.     gadget_kg:PTR TO LONG,gadget_pound:PTR TO LONG,
  86.     gadget_c:PTR TO LONG,gadget_f:PTR TO LONG,
  87.     gadget_k:PTR TO LONG,lgh1=NIL:PTR TO guihandle,
  88.     lgh2=NIL:PTR TO guihandle,gui=NIL:PTR TO guihandle,
  89.     myreq:requester,local:PTR TO eLocale,
  90.     conf:PTR TO config,dummy,quit=FALSE,
  91.     hidden,brokerport:PTR TO msgport,broker,
  92.     hotkey1,hotkey2,hotkey3,pubscreen=NIL,pubscreen_name[100]:STRING,
  93.     gadget_km:PTR TO LONG,guidata
  94. ->///
  95. ->// Gadget Functions (Convert)
  96.  
  97. PROC cm_gadget(info,valuestr)
  98.     DEF value=0,s[20]:STRING,inch=0,ft=0
  99.     value:=RealVal(valuestr)
  100.     setstr(lgh1,gadget_inch,RealF(s,(inch:=Cm2inch(value)),6))
  101.     StrCopy(s,NIL)
  102.     setstr(lgh1,gadget_ft,RealF(s,(ft:=Inch2ft(inch)),6))
  103.     StrCopy(s,NIL)
  104.     setstr(lgh1,gadget_mile,RealF(s,Ft2mile(ft),6))
  105.     StrCopy(s,NIL)
  106.     IF info<>10 THEN setstr(lgh1,gadget_km,RealF(s,(value/100000.0),6))
  107.     ENDPROC
  108.  
  109. PROC inch_gadget(info,valuestr)
  110.     DEF value=0,s[20]:STRING,ft=0,cm=0
  111.     value:=RealVal(valuestr)
  112.     setstr(lgh1,gadget_cm,RealF(s,(cm:=Inch2cm(value)),6))
  113.     StrCopy(s,NIL)
  114.     setstr(lgh1,gadget_km,RealF(s,(cm/100000.0),6))
  115.     StrCopy(s,NIL)
  116.     setstr(lgh1,gadget_ft,RealF(s,(ft:=Inch2ft(value)),6))
  117.     StrCopy(s,NIL)
  118.     setstr(lgh1,gadget_mile,RealF(s,Ft2mile(ft),6))
  119.     ENDPROC
  120.  
  121. PROC ft_gadget(info,valuestr)
  122.     DEF value=0:LONG,s[20]:STRING,inch=0,cm=0
  123.     value:=RealVal(valuestr)
  124.     setstr(lgh1,gadget_inch,RealF(s,(inch:=Ft2inch(value)),6))
  125.     StrCopy(s,NIL)
  126.     setstr(lgh1,gadget_cm,RealF(s,(cm:=Inch2cm(inch)),6))
  127.     StrCopy(s,NIL)
  128.     setstr(lgh1,gadget_km,RealF(s,(cm/100000.0),6))
  129.     StrCopy(s,NIL)
  130.     setstr(lgh1,gadget_mile,RealF(s,Ft2mile(value),6))
  131.     ENDPROC
  132.  
  133. PROC mile_gadget(info,valuestr)
  134.     DEF value=0,s[20]:STRING,inch=0,ft=0
  135.     value:=RealVal(valuestr)
  136.     setstr(lgh1,gadget_ft,RealF(s,(ft:=Mile2ft(value)),6))
  137.     StrCopy(s,NIL)
  138.     setstr(lgh1,gadget_inch,RealF(s,(inch:=Ft2inch(ft)),6))
  139.     StrCopy(s,NIL)
  140.     setstr(lgh1,gadget_cm,RealF(s,Inch2cm(inch),6))
  141.     StrCopy(s,NIL)
  142.     setstr(lgh1,gadget_km,RealF(s,Mile2km(value),6))
  143.     ENDPROC
  144.  
  145. PROC kg_gadget(info,valuestr)
  146.     DEF value=0:LONG,s[20]:STRING
  147.     value:=RealVal(valuestr)
  148.     setstr(lgh2,gadget_pound,RealF(s,Kg2pound(value),6))
  149.     ENDPROC
  150.  
  151. PROC pound_gadget(info,valuestr)
  152.     DEF value=0:LONG,s[20]:STRING
  153.     value:=RealVal(valuestr)
  154.     setstr(lgh2,gadget_kg,RealF(s,Pound2kg(value),6))
  155.     ENDPROC
  156.  
  157. PROC c_gadget(info,valuestr)
  158.     DEF value=0:LONG,s[20]:STRING
  159.     value:=RealVal(valuestr)
  160.     setstr(lgh2,gadget_f,RealF(s,Cg2fg(value),6))
  161.     StrCopy(s,NIL)
  162.     setstr(lgh2,gadget_k,RealF(s,Cg2kg(value),6))
  163.     ENDPROC
  164.  
  165. PROC f_gadget(info,valuestr)
  166.     DEF value=0:LONG,s[20]:STRING
  167.     value:=RealVal(valuestr)
  168.     setstr(lgh2,gadget_c,RealF(s,Fg2cg(value),6))
  169.     StrCopy(s,NIL)
  170.     setstr(lgh2,gadget_k,RealF(s,Fg2kg(value),6))
  171.     ENDPROC
  172.  
  173. PROC k_gadget(info,valuestr)
  174.     DEF value=0:LONG,s[20]:STRING
  175.     value:=RealVal(valuestr)
  176.     setstr(lgh2,gadget_c,RealF(s,Kg2cg(value),6))
  177.     StrCopy(s,NIL)
  178.     setstr(lgh2,gadget_f,RealF(s,Kg2fg(value),6))
  179.     ENDPROC
  180.  
  181. PROC km_gadget(info,valuestr)
  182.     DEF value=0:LONG,s[20]:STRING,cm=0
  183.     value:=RealVal(valuestr)
  184.     cm:=value*100000.0
  185.     RealF(s,cm,2)
  186.     setstr(lgh1,gadget_cm,s)
  187.     cm_gadget(10,s)
  188.     ENDPROC
  189. ->///
  190. ->// Function for Length GUI
  191. PROC gui_length(info)
  192.     DEF sig,res,msg,msgid,msgtype,lgh1menu:PTR TO newmenu
  193.     lgh1menu:=[NM_TITLE,NIL,local.getstring(MSG_MENU_PROJEKT),0,0,0,0,
  194.              NM_ITEM,NIL,local.getstring(MSG_BACKTOMAIN),'B',0,0,2,
  195.              NM_ITEM,NIL,local.getstring(MSG_EXIT),'X',0,0,5,
  196.              NM_ITEM,NIL,NM_BARLABEL,0,0,0,0,
  197.              NM_ITEM,NIL,local.getstring(MSG_MENU_QUIT_MC),'Q',0,0,{quit_func},
  198.              NM_END]:newmenu
  199.     IF gui THEN beginWait(gui.wnd,myreq)
  200.     IF ((gui=NIL) AND (pubscreen=NIL)) THEN setscreen()
  201.     lgh1:=guiinit(local.getstring(MSG_GUI_WIN_LEN_TITLE),[EQROWS,
  202.                                              [TEXT,local.getstring(MSG_GUI_WIN_LEN_TXT),NIL,TRUE,5],
  203.                                              [BAR],
  204.                                              gadget_cm:=NEW [STR,{cm_gadget},local.getstring(MSG_GUI_CENTIMETERS),'0',20,5],
  205.                                              gadget_km:=NEW [STR,{km_gadget},local.getstring(MSG_GUI_KILOMETERS),'0',20,5],
  206.                                              gadget_inch:=NEW [STR,{inch_gadget},local.getstring(MSG_GUI_INCHES),'0',20,5],
  207.                                              gadget_ft:=NEW [STR,{ft_gadget},local.getstring(MSG_GUI_FEETS),'0',20,5],
  208.                                              gadget_mile:=NEW [STR,{mile_gadget},local.getstring(MSG_GUI_MILES),'0',20,5],
  209.                                              [BAR],
  210.                                              [EQCOLS,
  211.                                              [SBUTTON,2,local.getstring(MSG_BACKTOMAIN)],
  212.                                              [SBUTTON,5,local.getstring(MSG_EXIT)]]],NIL,pubscreen,NIL,lgh1menu)
  213.     REPEAT
  214.         sig:=Wait((lgh1.sig OR brokerport.sigbitA()))
  215.         IF sig=lgh1.sig
  216.             res:=guimessage(lgh1)
  217.             IF res>=0
  218.                 cleangui(lgh1)
  219.                 lgh1:=NIL
  220.                 IF (gui AND myreq) THEN endWait(gui.wnd,myreq)
  221.                 IF res=2
  222.                     IF gui=NIL THEN doGUI(5)
  223.                     ENDIF
  224.                 ENDIF
  225.         ELSEIF sig=brokerport.sigbitA()
  226.             WHILE msg:=brokerport.getmsg()
  227.                 msgid:=CxMsgID(msg)
  228.                 msgtype:=CxMsgType(msg)
  229.                 brokerport.reply(msg)
  230.                 SELECT msgtype
  231.                     CASE CXM_IEVENT
  232.                         SELECT msgid
  233.                             CASE EVT_HOTKEY1
  234.                                     NOP
  235.                             CASE EVT_HOTKEY2
  236.                                 IF lgh1
  237.                                     NOP
  238.                                 ELSE
  239.                                     gui_length(5)
  240.                                     ENDIF
  241.                             CASE EVT_HOTKEY3
  242.                                 IF lgh2
  243.                                     NOP
  244.                                 ELSE
  245.                                     gui_other(5)
  246.                                     ENDIF
  247.                             DEFAULT
  248.                                 NOP
  249.                             ENDSELECT
  250.                     CASE CXM_COMMAND
  251.                         SELECT msgid
  252.                             CASE CXCMD_DISABLE
  253.                                 NOP
  254.                             CASE CXCMD_ENABLE
  255.                                 NOP
  256.                             CASE CXCMD_KILL
  257.                                 quit:=TRUE
  258.                             CASE CXCMD_APPEAR
  259.                                 IF gui
  260.                                     NOP
  261.                                 ELSE
  262.                                     cleangui(lgh1)
  263.                                     doGUI(5)
  264.                                     ENDIF
  265.                             CASE CXCMD_DISAPPEAR
  266.                                 hidden:=TRUE
  267.                                 IF gui
  268.                                     IF myreq THEN endWait(gui.wnd,myreq)
  269.                                     cleangui(gui)
  270.                                     gui:=NIL
  271.                                     ENDIF
  272.                                 IF lgh1
  273.                                     cleangui(lgh1)
  274.                                     gui:=NIL
  275.                                     ENDIF
  276.                                 IF lgh2
  277.                                     cleangui(lgh2)
  278.                                     gui:=NIL
  279.                                     ENDIF
  280.                                 IF pubscreen THEN unsetscreen()
  281.                                 res:=1
  282.                             DEFAULT
  283.                                 NOP
  284.                             ENDSELECT
  285.                     DEFAULT
  286.                         NOP
  287.                     ENDSELECT
  288.                 ENDWHILE
  289.             ENDIF
  290.        UNTIL ((res>=0) OR (quit=TRUE))
  291.     IF ((gui=NIL) AND (hidden=FALSE)) THEN hidden:=TRUE
  292.     IF ((gui=NIL) AND pubscreen) THEN unsetscreen()
  293.     ENDPROC
  294. ->///
  295. ->// Function for Other GUI
  296. PROC gui_other(info)
  297.     DEF msg,msgid,msgtype,res,sig,lgh2menu:PTR TO newmenu
  298.     lgh2menu:=[NM_TITLE,NIL,local.getstring(MSG_MENU_PROJEKT),0,0,0,0,
  299.              NM_ITEM,NIL,local.getstring(MSG_BACKTOMAIN),'B',0,0,2,
  300.              NM_ITEM,NIL,local.getstring(MSG_EXIT),'X',0,0,5,
  301.              NM_ITEM,NIL,NM_BARLABEL,0,0,0,0,
  302.              NM_ITEM,NIL,local.getstring(MSG_MENU_QUIT_MC),'Q',0,0,{quit_func},
  303.              NM_END]:newmenu
  304.     IF gui THEN beginWait(gui.wnd,myreq)
  305.     IF ((gui=NIL) AND (pubscreen=NIL)) THEN setscreen()
  306.     lgh2:=guiinit(local.getstring(MSG_GUI_WIN_OTH_TITLE),[EQROWS,
  307.                                              [TEXT,local.getstring(MSG_GUI_WIN_OTH_TXT_1),NIL,TRUE,5],
  308.                                              [BAR],
  309.                                              gadget_kg:=NEW [STR,{kg_gadget},local.getstring(MSG_GUI_KILOGRAMS),'0',20,5],
  310.                                              gadget_pound:=NEW [STR,{pound_gadget},local.getstring(MSG_GUI_POUNDS),'0',20,5],
  311.                                              [BAR],
  312.                                              [TEXT,local.getstring(MSG_GUI_WIN_OTH_TXT_2),NIL,TRUE,5],
  313.                                              [BAR],
  314.                                              gadget_c:=NEW [STR,{c_gadget},local.getstring(MSG_GUI_CELSIUS),'0',20,5],
  315.                                              gadget_f:=NEW [STR,{f_gadget},local.getstring(MSG_GUI_FAHRENHEIT),'0',20,5],
  316.                                              gadget_k:=NEW [STR,{k_gadget},local.getstring(MSG_GUI_KELVIN),'0',20,5],
  317.                                              [BAR],
  318.                                              [EQCOLS,
  319.                                              [SBUTTON,2,local.getstring(MSG_BACKTOMAIN)],
  320.                                              [SBUTTON,5,local.getstring(MSG_EXIT)]]],NIL,pubscreen,NIL,lgh2menu)
  321.     REPEAT
  322.         sig:=Wait((lgh2.sig OR brokerport.sigbitA()))
  323.         IF sig=lgh2.sig
  324.             res:=guimessage(lgh2)
  325.             IF res>=0
  326.                 cleangui(lgh2)
  327.                 lgh2:=NIL
  328.                 IF (gui AND myreq) THEN endWait(gui.wnd,myreq)
  329.                 IF res=2
  330.                     IF gui=NIL THEN doGUI(5)
  331.                     ENDIF
  332.                 ENDIF
  333.         ELSEIF sig=brokerport.sigbitA()
  334.             WHILE msg:=brokerport.getmsg()
  335.                 msgid:=CxMsgID(msg)
  336.                 msgtype:=CxMsgType(msg)
  337.                 brokerport.reply(msg)
  338.                 SELECT msgtype
  339.                     CASE CXM_IEVENT
  340.                         SELECT msgid
  341.                             CASE EVT_HOTKEY1
  342.                                     NOP
  343.                             CASE EVT_HOTKEY2
  344.                                 IF lgh1
  345.                                     NOP
  346.                                 ELSE
  347.                                     gui_length(5)
  348.                                     hidden:=FALSE
  349.                                     ENDIF
  350.                             CASE EVT_HOTKEY3
  351.                                 IF lgh2
  352.                                     NOP
  353.                                 ELSE
  354.                                     gui_other(5)
  355.                                     hidden:=FALSE
  356.                                     ENDIF
  357.                             DEFAULT
  358.                                 NOP
  359.                             ENDSELECT
  360.                     CASE CXM_COMMAND
  361.                         SELECT msgid
  362.                             CASE CXCMD_DISABLE
  363.                                 NOP
  364.                             CASE CXCMD_ENABLE
  365.                                 NOP
  366.                             CASE CXCMD_KILL
  367.                                 quit:=TRUE
  368.                             CASE CXCMD_APPEAR
  369.                                 IF (gui OR (hidden=FALSE))
  370.                                     NOP
  371.                                 ELSE
  372.                                     cleangui(lgh2)
  373.                                     doGUI(5)
  374.                                     hidden:=FALSE
  375.                                     ENDIF
  376.                             CASE CXCMD_DISAPPEAR
  377.                                 hidden:=TRUE
  378.                                 IF gui
  379.                                     IF myreq THEN endWait(gui.wnd,myreq)
  380.                                     cleangui(gui)
  381.                                     gui:=NIL
  382.                                     ENDIF
  383.                                 IF lgh1
  384.                                     cleangui(lgh1)
  385.                                     lgh1:=NIL
  386.                                     ENDIF
  387.                                 IF lgh2
  388.                                     cleangui(lgh2)
  389.                                     lgh2:=NIL
  390.                                     ENDIF
  391.                                 IF pubscreen THEN unsetscreen()
  392.                                 res:=1
  393.                             DEFAULT
  394.                                 NOP
  395.                             ENDSELECT
  396.                     DEFAULT
  397.                         NOP
  398.                     ENDSELECT
  399.                 ENDWHILE
  400.             ENDIF
  401.        UNTIL ((res>=0) OR (quit=TRUE))
  402.     IF ((gui=NIL) AND (hidden=FALSE)) THEN hidden:=TRUE
  403.     IF ((gui=NIL) AND pubscreen) THEN unsetscreen()
  404.     ENDPROC
  405. ->///
  406. ->// About Requester
  407. PROC about(info)
  408.     DEF eereq:PTR TO easystruct,result,string[200]:STRING,title[20]:STRING
  409.     StringF(string,'\s\n\s\n\s\n\s','                  MeasConv By Aris Basic','                     GMYware 1995   ',{version},local.getstring(MSG_TRANSLATOR_INFO))
  410.     StringF(title,'\s \s\c',local.getstring(MSG_ABOUT),'MeasConv',$a0)
  411.     NEW eereq
  412.     eereq.structsize:=SIZEOF easystruct
  413.     eereq.flags:=NIL
  414.     eereq.title:=title
  415.     eereq.textformat:=string
  416.     eereq.gadgetformat:=local.getstring(MSG_REQ_OK)
  417.     beginWait(gui.wnd,myreq)
  418.     result:=EasyRequestArgs(NIL,eereq,NIL,NIL)
  419.     endWait(gui.wnd,myreq)
  420.     ENDPROC -1
  421. ->///
  422. ->// Locale Library Initalization
  423. PROC initLocale()
  424.     NEW local
  425.     local.init(['Project','About','Convertors','Length',
  426.                 'Other','Quit','Length Converter','Other Convertors',
  427.                 'Ok','Length Converter Window','Other Converters Window',
  428.                 'Length Converter','Centimeters','Inches','Feets',
  429.                 'Miles','Weigth Converter','Temperature Converter',
  430.                 'Kilograms','Pounds','Celsius','Fahreheit','Kelvin',
  431.                 'Built in English by Aris Basic','Error',
  432.                 'Program Is Started Before','Check ToolTypes(Arguments)!',
  433.                 'Hide','Quit MeasConv','Exit','Kilometers',
  434.                 'BackToMain'],'measconv.catalog')
  435.     ENDPROC
  436. ->//
  437. ->// GUI Start
  438. PROC doGUI(info)
  439.     DEF menues:PTR TO newmenu
  440.     menues:=[NM_TITLE,NIL,local.getstring(MSG_MENU_PROJEKT),0,0,0,0,
  441.              NM_ITEM,NIL,local.getstring(MSG_ABOUT),'?',0,0,{about},
  442.              NM_ITEM,NIL,NM_BARLABEL,0,0,0,0,
  443.              NM_ITEM,NIL,local.getstring(MSG_MENU_CONVERTORS),0,0,0,0,
  444.              NM_SUB,NIL,local.getstring(MSG_MENU_LENGTH),'L',0,0,{gui_length},
  445.              NM_SUB,NIL,local.getstring(MSG_MENU_OTHER),'O',0,0,{gui_other},
  446.              NM_ITEM,NIL,NM_BARLABEL,0,0,0,0,
  447.              NM_ITEM,NIL,local.getstring(MSG_HIDE),'H',0,0,25,
  448.              NM_ITEM,NIL,local.getstring(MSG_QUIT),'Q',0,0,5,
  449.              NM_END]:newmenu
  450.     gui:=guiinit('MeasConv 1.50',guidata:=NEW [EQROWS,
  451.                             NEW [BEVEL,
  452.                             NEW [EQROWS,
  453.                             NEW [TEXT,'            MeasConv 1.50       ',NIL,FALSE,5],
  454.                             NEW [TEXT,'          © Aris Basic 1995',NIL,FALSE,5],
  455.                             NEW [TEXT,'              GMYware    ',NIL,FALSE,5]]],
  456.                             NEW [SBUTTON,{gui_length},local.getstring(MSG_GUI_LENGTH)],
  457.                             NEW [SBUTTON,{gui_other},local.getstring(MSG_GUI_OTHER)],
  458.                             NEW [BAR],
  459.                             NEW [SBUTTON,{about},local.getstring(MSG_ABOUT)],
  460.                             NEW [BAR],
  461.                             NEW [EQCOLS,
  462.                             NEW [SBUTTON,25,local.getstring(MSG_HIDE)],
  463.                             NEW [SBUTTON,5,local.getstring(MSG_QUIT)]]],NIL,pubscreen,NIL,menues)
  464.     ENDPROC
  465. ->///
  466. ->// Error Requester
  467. PROC reqerror(txt)
  468.     DEF eereq:PTR TO easystruct,result,string[150]:STRING,title[20]:STRING
  469.     StringF(string,'\s\n',txt)
  470.     StringF(title,'\s\c',local.getstring(MSG_ERROR_TITLE),$a0)
  471.     NEW eereq
  472.     eereq.structsize:=SIZEOF easystruct
  473.     eereq.flags:=NIL
  474.     eereq.title:=title
  475.     eereq.textformat:=string
  476.     eereq.gadgetformat:=local.getstring(MSG_REQ_OK)
  477.     result:=EasyRequestArgs(NIL,eereq,NIL,NIL)
  478.     ENDPROC
  479. ->///
  480. ->// Function quit_func()
  481. PROC quit_func()
  482.     quit:=TRUE
  483.     ENDPROC
  484. ->///
  485. ->// Function setscreen()
  486. PROC setscreen()
  487.     pubscreen:=LockPubScreen(pubscreen_name)
  488.     ENDPROC
  489. ->///
  490. ->// Function unsetscreen()
  491. PROC unsetscreen()
  492.     IF pubscreen THEN UnlockPubScreen(pubscreen_name,pubscreen)
  493.     pubscreen:=NIL
  494.     ENDPROC
  495. ->///
  496. ->// Function readargCLI()
  497. PROC readargCLI()
  498.     DEF arguments:PTR TO LONG,rdarg
  499.     arguments:=[0,0,0]
  500.     IF rdarg:=ReadArgs('NOPOPUP/S,PUBSCREEN/K,NODEFAULTPUBSCREEN=NODPS/S',arguments,NIL)
  501.         IF arguments[0] THEN conf.nopopup:=TRUE
  502.         IF arguments[1] THEN StrCopy(pubscreen_name,arguments[1])
  503.         IF arguments[2]=FALSE
  504.             IF pubscreen_name=NIL THEN StrCopy(pubscreen_name,NIL)
  505.         ELSE
  506.             StrCopy(pubscreen_name,'Workbench')
  507.             ENDIF
  508.         FreeArgs(rdarg)
  509.         ENDIF
  510.     ENDPROC
  511. ->///
  512. ->// Function readargWB()
  513. PROC readargWB()
  514.     DEF ttypes,check,check2
  515.     iconbase:=OpenLibrary('icon.library',0)
  516.     ttypes:=argArrayInit()
  517.     check:=argInt(ttypes,'NOPOPUP',-5)
  518.  
  519. #ifdef DEBUG
  520. PrintF(' NOPOPUP \d\n',check)
  521. #endif
  522.  
  523.     IF (check>-5) THEN conf.nopopup:=TRUE
  524.     StrCopy(conf.mpopup,argString(ttypes,'MAIN_HOTKEY',conf.mpopup))
  525.  
  526. #ifdef DEBUG
  527. PrintF(' MAIN_HOTKEY \s\n',conf.mpopup)
  528. #endif
  529.  
  530.     StrCopy(conf.lpopup,argString(ttypes,'LENGTH_HOTKEY',conf.lpopup))
  531.  
  532. #ifdef DEBUG
  533. PrintF(' LENGTH_HOTKEY \s\n',conf.lpopup)
  534. #endif
  535.  
  536.     StrCopy(conf.opopup,argString(ttypes,'OTHER_HOTKEY',conf.opopup))
  537.  
  538. #ifdef DEBUG
  539. PrintF(' OTHER_HOTKEY \s\n',conf.opopup)
  540. #endif
  541.  
  542.     StrCopy(pubscreen_name,argString(ttypes,'PUBSCREEN',NIL))
  543.     check2:=argInt(ttypes,'NODEFAULTPUBSCREEN',-5)
  544.  
  545. #ifdef DEBUG
  546. PrintF(' NODPS \d\n',check2)
  547. #endif
  548.  
  549.     IF (check2=-5)
  550.         IF StrCmp(pubscreen_name,NIL) THEN StrCopy(pubscreen_name,NIL)
  551.     ELSE
  552.         StrCopy(pubscreen_name,'Workbench')
  553.         ENDIF
  554.  
  555. #ifdef DEBUG
  556. PrintF(' PUBSCREEN \s\n',pubscreen_name)
  557. #endif
  558.  
  559.     argArrayDone()
  560.     IF iconbase THEN CloseLibrary(iconbase)
  561.     ENDPROC
  562. ->///
  563. ->// Function goNormal()
  564. PROC goNormal() HANDLE
  565.     DEF sig,
  566.         res,msg,msgid,msgtype
  567.     res:=-1
  568.     cxbase:=OpenLibrary('commodities.library',0)
  569.     NEW brokerport.create('MEASCONV.CX')
  570.     broker:=CxBroker([NB_VERSION,0,
  571.                       'MeasConv',
  572.                       'MeasConv 1.50',
  573.                       'A Measurment Converter By Aris Basic',
  574.                       NBU_UNIQUE,
  575.                       COF_SHOW_HIDE,
  576.                       0,0,brokerport.msgport,0]:newbroker,NIL)
  577.     IF NIL=(hotkey1:=hotKey(conf.mpopup,brokerport.msgport,EVT_HOTKEY1)) THEN Raise(ERR_HOTKEY)
  578.     IF NIL=(hotkey2:=hotKey(conf.lpopup,brokerport.msgport,EVT_HOTKEY2)) THEN Raise(ERR_HOTKEY)
  579.     IF NIL=(hotkey3:=hotKey(conf.opopup,brokerport.msgport,EVT_HOTKEY3)) THEN Raise(ERR_HOTKEY)
  580.     AttachCxObj(broker,hotkey1)
  581.     AttachCxObj(broker,hotkey2)
  582.     AttachCxObj(broker,hotkey3)
  583.     IF CxObjError(hotkey1)<> FALSE THEN Raise(ERR_CXERR)
  584.     IF CxObjError(hotkey2)<> FALSE THEN Raise(ERR_CXERR)
  585.     IF CxObjError(hotkey3)<> FALSE THEN Raise(ERR_CXERR)
  586.     ActivateCxObj(broker,TRUE)
  587.     IF conf.nopopup<>TRUE
  588.         setscreen()
  589.         doGUI(5)
  590.         ENDIF
  591.     WHILE (((res<0) OR (res=25) AND (quit=FALSE)))
  592.         sig:=Wait(IF gui THEN (gui.sig OR brokerport.sigbitA()) ELSE brokerport.sigbitA())
  593.         IF sig=gui.sig
  594.             res:=guimessage(gui)
  595.             IF ((res>=0) AND (res<>25))
  596.                 cleangui(gui)
  597.                 gui:=NIL
  598.                 IF hidden=FALSE THEN quit:=TRUE
  599.             ELSEIF res=25
  600.                 cleangui(gui)
  601.                 disposegui(guidata)
  602.                 hidden:=TRUE
  603.                 gui:=NIL
  604.                 ENDIF
  605.         ELSEIF sig=brokerport.sigbitA()
  606.             WHILE msg:=brokerport.getmsg()
  607.                 msgid:=CxMsgID(msg)
  608.                 msgtype:=CxMsgType(msg)
  609.                 brokerport.reply(msg)
  610.                 SELECT msgtype
  611.                     CASE CXM_IEVENT
  612.                         SELECT msgid
  613.                             CASE EVT_HOTKEY1
  614.                                 IF gui
  615.                                     NOP
  616.                                 ELSE
  617.                                     IF pubscreen=NIL THEN setscreen()
  618.                                     doGUI(5)
  619.                                     hidden:=FALSE
  620.                                     ENDIF
  621.                             CASE EVT_HOTKEY2
  622.                                 IF lgh1
  623.                                     NOP
  624.                                 ELSE
  625.                                     gui_length(5)
  626.                                     hidden:=FALSE
  627.                                     ENDIF
  628.                             CASE EVT_HOTKEY3
  629.                                 IF lgh2
  630.                                     NOP
  631.                                 ELSE
  632.                                     gui_other(5)
  633.                                     hidden:=FALSE
  634.                                     ENDIF
  635.                             DEFAULT
  636.                                 NOP
  637.                             ENDSELECT
  638.                     CASE CXM_COMMAND
  639.                         SELECT msgid
  640.                             CASE CXCMD_DISABLE
  641.                                 NOP
  642.                             CASE CXCMD_ENABLE
  643.                                 NOP
  644.                             CASE CXCMD_KILL
  645.                                 quit:=TRUE
  646.                             CASE CXCMD_APPEAR
  647.                                 IF ((hidden=FALSE) OR gui)
  648.                                     NOP
  649.                                 ELSE
  650.                                     setscreen()
  651.                                     doGUI(5)
  652.                                     hidden:=FALSE
  653.                                     ENDIF
  654.                             CASE CXCMD_DISAPPEAR
  655.                                 hidden:=TRUE
  656.                                 IF gui
  657.                                     cleangui(gui)
  658.                                     gui:=NIL
  659.                                     ENDIF
  660.                                 IF lgh1
  661.                                     cleangui(lgh1)
  662.                                     lgh1:=NIL
  663.                                     ENDIF
  664.                                 IF lgh2
  665.                                     cleangui(lgh2)
  666.                                     lgh2:=NIL
  667.                                     ENDIF
  668.                                 unsetscreen()
  669.                                 res:=1
  670.                             DEFAULT
  671.                                 NOP
  672.                             ENDSELECT
  673.                     DEFAULT
  674.                         NOP
  675.                     ENDSELECT
  676.                 ENDWHILE
  677.             ENDIF
  678.        ENDWHILE
  679.        IF broker THEN DeleteCxObjAll(broker)
  680.        IF brokerport THEN END brokerport
  681.        Raise(0)
  682. EXCEPT
  683.     IF broker THEN DeleteCxObjAll(broker)
  684.     IF lgh1 THEN cleangui(lgh1)
  685.     IF lgh2 THEN cleangui(lgh2)
  686.     IF gui THEN cleangui(gui)
  687.     IF brokerport THEN END broker
  688.     ENDPROC
  689. ->///
  690. ->// main() Program
  691. PROC main() HANDLE
  692.     initLocale()
  693.     measconvbase:=OpenLibrary('measconv.library',0)
  694.     conf:=['rawkey lalt m','rawkey lalt l','rawkey lalt o',FALSE]:config
  695.     IF FindPort('MEASCONV.CX') THEN Raise(-15)
  696.     IF FindPort('MEASCONV') THEN Raise(-15)
  697.     IF wbmessage=NIL
  698.         readargCLI()
  699.     ELSE
  700.         readargWB()
  701.     ENDIF
  702.     goNormal()
  703.     Raise(0)
  704. EXCEPT
  705.     IF measconvbase THEN CloseLibrary(measconvbase)
  706.     IF iconbase THEN CloseLibrary(iconbase)
  707.     IF cxbase THEN CloseLibrary(cxbase)
  708.     IF pubscreen THEN unsetscreen()
  709.     SELECT exception
  710.         CASE -15 
  711.             reqerror(local.getstring(MSG_ERROR_RUNNING))
  712.         CASE 0
  713.             VOID dummy:=10
  714.         DEFAULT
  715.             report_exception()
  716.         ENDSELECT
  717.     IF local THEN END local
  718. ENDPROC
  719. ->///
  720. version:
  721.    CHAR '$VER: MeasConv (EASYGUI)  01.50 (07.09.95) © Aris Basic\n',0
  722.  
  723.