It began when I did read:
https://bttr-software.de/forum/board_entry.php?id=22023

I then did read:
https://sourceforge.net/projects/regina-rexx/files/regina-documentation/3.9.6/

Learn also about:
https://www.oorexx.org/

Also https://en.wikipedia.org/wiki/Rexx obviously.

Rexx is an easy to read and learn programming language... but as it is not 
popular... have almost no GUI libraries...
oorexx have a GTK v.2 binding ... a complete ncurses binding... regina rexx 
have very limited gotoxy and read char at xy.

Anyway, I wrote a small program to convert units ... it is using a bit 
sophisticated stuff... making it sadly probably not usable for DOS as is.

It just beginning to work... but I like to share soon as I am unsure if I will 
continue to work on it...
The style I believe make it very easy to extend... I hope.

I wrote it in unitsv1.rex file... and call it with regina unitsv1.rex

I have installed on Fedora 40:
regina-rexx.x86_64 : Regina Rexx Interpreter
regina-rexx-doc.noarch : Documentation for regina-rexx
regina-rexx-libs.x86_64 : Shared libraries for regina-rexx

So here it is:

/*
Copyright 2024 Paul Dufresne (dufres...@zoho.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of 
this software and 
associated documentation files (the “Software”), to deal in the Software 
without restriction, 
including without limitation the rights to use, copy, modify, merge, publish, 
distribute, sublicense, 
and/or sell copies of the Software, and to permit persons to whom the Software 
is furnished to do so.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT 
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE 
AND NONINFRINGEMENT. IN 
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, 
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 
CONNECTION WITH THE 
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/


-- The following 2 calls are for loading regutil library
-- it is needed only for regStemDoOver
-- to work, program must be called with regina rather than rexx
-- Because of this, it is believe the program cannot run under DOS
call RxFuncAdd 'sysloadfuncs', 'regutil', 'sysloadfuncs'
call sysloadfuncs

menu. = 'not there!'  -- default value

menu.top.name='Conversions'
menu.top.1='distance'
menu.top.1.proc='showMenuDistance'
menu.top.2='weight'
menu.top.2.proc='showMenuWeight'
menu.top.3='temperature'
menu.top.3.proc='showMenuTemperature'
menu.top.4='volume'
menu.top.4.proc='showMenuVolume'
menu.top.5='END'
menu.top.back='bye'

menu.distance.name='Distance convertions'
menu.distance.1='centimeters to inch'
menu.distance.1.proc="doSomeConversions 'centimeters','inches',centis2inches"
menu.distance.2='inches to centimeters'
menu.distance.2.proc="doSomeConversions 'inches','centimeters',inches2centis"
menu.distance.3='END'
menu.distance.back='doMenu top'

menu.weight.name='Weight convertions'
menu.weight.1='pounds to kilograms'
menu.weight.1.proc="doSomeConversions 'pounds','kilos',pounds2kilos"
menu.weight.2='kilograms to pounds'
menu.weight.2.proc="doSomeConversions 'kilos','pounds',kilos2pounds"
menu.weight.3='END'
menu.weight.back='doMenu top'

menu.temp.name='Temperature convertions'
menu.temp.1='farenheits to celsius'
menu.temp.1.proc="doSomeConversions 'farenheits','celsius',farens2celsius"
menu.temp.2='celsius to farenheits'
menu.temp.2.proc="doSomeConversions 'celsius','farenheits',celsius2farens"
menu.temp.3='END'
menu.temp.back='doMenu top'

menu.vol.name='Volume convertions'
menu.vol.1='gallons to cube meters'
menu.vol.1.proc="doSomeConversions 'gallons','cube meters',gallons2cubemeters"
menu.vol.2='cube meters to gallons'
menu.vol.2.proc="doSomeConversions 'cube meters','gallons',cubemeters2gallons"
menu.vol.3='END'
menu.vol.back='doMenu top'

call doMenu 'TOP'
exit 0

doMenu:
drop mymenu.
do while regstemdoover('menu.','i')
  if index(i,arg(1)) then do
    j=substr(i, index(i,'.')+1)
    mymenu.j=menu.i
    end
  end
--call sysdumpvariables
say mymenu.name
i=1
do until mymenu.i == 'END'
  say i'. 'mymenu.i
  i=i+1
  if i==14 then exit -- was added as a debug thing at the beginning... should 
probably be removed
  end
pull choice
--say 'choice.proc='mymenu.choice.proc
--interpret "call "mymenu.choice.proc" "
if choice=='' | choice=='Q' | choice=='QUIT'
  then interpret "call "mymenu.back
  else interpret "call "mymenu.choice.proc
exit 888  -- not expected to happen because mymenu.back call Bye

showMenuDistance:
  call doMenu 'DISTANCE'
  exit

showMenuWeight:
  call doMenu 'WEIGHT'
  exit

showMenuTemperature:
  call doMenu 'TEMP'
  exit

showMenuVolume:
  call doMenu 'VOL'
  exit

centis2inches:
  return arg(1)/2.54

inches2centis:
  return arg(1)*2.54

pounds2kilos:
  return arg(1)/2.18

kilos2pounds:
  return arg(1)*2.18

farens2celsius:
  return (arg(1)-32)*5/9

celsius2farens:
  return (arg(1)*9/5)+32

gallons2cubemeters:
  return arg(1)*0.00378541

cubemeters2gallons:
  return arg(1)/0.00378541

doSomeConversions:
  fini = 0
  do until fini
    Say 'Number of 'arg(1)':'
    pull originUnits
    if originUnits <> '' & originUnits <> 'END' & originUnits <> 'Q' & 
originUnits<>'QUIT' then do
      --say 'call 'arg(3)' 'orginUnits
      interpret 'call 'arg(3)' 'originUnits
      Say 'give 'RESULT' 'arg(2)
      Say
      end
    else fini=1
  end
  --say mymenu.back
  interpret "call "mymenu.back
  exit 999

bye:
  say 'Goodbye!'
  exit 0





_______________________________________________
Freedos-devel mailing list
Freedos-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-devel

Reply via email to