home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / table120.zip / source.zip / Table.rxx < prev   
Text File  |  2001-08-07  |  30KB  |  1,136 lines

  1. /*-----------------------------------------------------------------------------+
  2. |                                                                              |
  3. |  REXX source code listing for DrRexx application:                            |
  4. |    G:\Goran\Table120\English\Table.res                                       |
  5. |                                                                              |
  6. |  File last modified on: 08/07/01 at: 05:05pm                                 |
  7. |  Listing produced on:   08/07/01 at: 05:05pm                                 |
  8. |                                                                              |
  9. +-----------------------------------------------------------------------------*/
  10.  
  11. SIGNAL ON SYNTAX
  12. SIGNAL ON HALT
  13. SIGNAL INIT
  14.  
  15. RETURN:
  16.   SIGNAL VALUE DrRexxEvent()
  17.  
  18. L1:
  19.   EXIT -1
  20.  
  21. L2:
  22.   INTERPRET DrRexxInterpret()
  23.   SIGNAL RETURN
  24.  
  25. /*-----------------------------------------------------------------------------+
  26. |                                                                              |
  27. |  Event handlers for dialog: Table                                            |
  28. |                                                                              |
  29. +-----------------------------------------------------------------------------*/
  30.  
  31. /* Event handlers for: Table (DIALOG) */
  32.  
  33. Table_Key:
  34.   CALL EventData
  35.   preskey = EventData.1
  36.   preskey = TRANSLATE(preskey)
  37.   SELECT
  38.       WHEN preskey = 'F1' THEN '@START /F View.exe Table.inf'
  39.       WHEN preskey = 'F3' THEN CALL TheEnd
  40.       WHEN preskey = 'F5' THEN DO
  41.       IF C102.Select() > 0 & C115.Select() = 1 THEN DO
  42.           oldText = C116.Text()
  43.           sel1 = C102.Item(C102.Select())
  44.           seld = WORD(sel1,2)
  45.           CALL C116.Text oldText||X2C(D2X(seld))
  46.       END
  47.       END
  48.       OTHERWISE NOP
  49.   END
  50.   SIGNAL RETURN
  51.  
  52. Table_Exit:
  53.   CALL TheEnd
  54.   SIGNAL RETURN
  55.  
  56. Table_Move:
  57.   PARSE VALUE Table.Position() WITH tabx taby tabxs tabys
  58.   SIGNAL RETURN
  59.  
  60. Table_Init:
  61.   PARSE ARG isclip
  62.   PARSE VALUE ScreenSize() WITH cx cy
  63.   PARSE VALUE Table.Frame() WITH fl fb fr ft
  64.   progname = 'Table 1.2.0'
  65.   
  66.   IF RxFuncQuery('SysLoadFuncs') THEN DO
  67.       CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  68.       CALL SysLoadFuncs
  69.   END
  70.   CALL LoadCfg
  71.   CALL Language
  72.   CALL LoadCP
  73.   CALL ShowTable
  74.   
  75.   CALL C199.IsDefault('C')
  76.   CALL C102.Hint h.102
  77.   DO i = 111 TO 119
  78.       INTERPRET 'CALL C'||i||'.Text b.i'
  79.       INTERPRET 'CALL C'||i||'.Hint h.i'
  80.   END
  81.   DO i = 122 TO 123
  82.       INTERPRET 'CALL C'||i||'.Text b.i'
  83.       INTERPRET 'CALL C'||i||'.Hint h.i'
  84.   END
  85.   DO i = 131 TO 133
  86.       INTERPRET 'CALL C'||i||'.Text b.i'
  87.       INTERPRET 'CALL C'||i||'.Hint h.i'
  88.   END
  89.   CALL C139.Hint h.139
  90.   CALL C102.Select 1
  91.   CALL C115.Select 1
  92.   CALL ShowChars showchars
  93.   
  94.   CALL Table.Show
  95.   IF isclip = 1 THEN DO
  96.       CALL C116.Text Clipboard()
  97.   END
  98.   CALL C116.Focus
  99.   SIGNAL RETURN
  100.  
  101. /* Event handlers for: C123 (PUSHBUTTON) */
  102.  
  103. Table_C123_Click:
  104.   CALL TheEnd
  105.   SIGNAL RETURN
  106.  
  107. Table_C123_:
  108.   SIGNAL RETURN
  109.  
  110. /* Event handlers for: C119 (PUSHBUTTON) */
  111.  
  112. Table_C119_Click:
  113.   myerr = 0
  114.   c2bin = ''
  115.   c2dec = ''
  116.   c2oct = ''
  117.   c2hex = ''
  118.   c2asc = ''
  119.   SELECT
  120.       WHEN LENGTH(C116.Text()) = 0 THEN DO
  121.           IF RxMessageBox(msg.1182,msg.1181,,'ERROR') = 1 THEN DO
  122.       END
  123.       END
  124.       OTHERWISE DO
  125.       SELECT
  126.           WHEN C111.Select() = 1 THEN CALL ConvertBIN
  127.           WHEN C112.Select() = 1 THEN CALL ConvertDEC
  128.           WHEN C113.Select() = 1 THEN CALL ConvertOCT
  129.           WHEN C114.Select() = 1 THEN CALL ConvertHEX
  130.           WHEN C115.Select() = 1 THEN CALL ConvertASC
  131.           OTHERWISE NOP
  132.       END
  133.       IF myerr = 0 THEN DO
  134.           CALL Result.Open
  135.       END
  136.       END
  137.   END
  138.   SIGNAL RETURN
  139.  
  140. Table_C119_:
  141.   SIGNAL RETURN
  142.  
  143. /* Event handlers for: C122 (PUSHBUTTON) */
  144.  
  145. Table_C122_Click:
  146.   '@START /F View.exe Table.inf'
  147.   SIGNAL RETURN
  148.  
  149. /* Event handlers for: C118 (PUSHBUTTON) */
  150.  
  151. Table_C118_Click:
  152.   CALL C116.Text ''
  153.   SIGNAL RETURN
  154.  
  155. /* Event handlers for: C121 (PUSHBUTTON) */
  156.  
  157. Table_C121_Click:
  158.   isclip = 0
  159.   IF LENGTH(C116.Text()) > 0 THEN DO
  160.       isclip = 1
  161.       CALL Clipboard C116.Text()
  162.   END
  163.   
  164.   CALL Table.Hide
  165.   '@START /B /C /MIN TableCP.cmd '||Table.C121.Text()||' '||isclip
  166.   Exit
  167.   SIGNAL RETURN
  168.  
  169. /* Event handlers for: C117 (PUSHBUTTON) */
  170.  
  171. Table_C117_Click:
  172.   oldText = C116.Text()
  173.   CALL C116.Text oldText||Clipboard()
  174.   SIGNAL RETURN
  175.  
  176. /* Event handlers for: C133 (PUSHBUTTON) */
  177.  
  178. Table_C133_Click:
  179.   selchars = STRIP(C139.Text())
  180.   CALL SysIni inifile, 'Settings', 'SelectedChars', selchars
  181.   IF selchars <> '' THEN DO
  182.       CALL ShowCharsSel
  183.   END
  184.   SIGNAL RETURN
  185.  
  186. /* Event handlers for: C132 (RADIOBUTTON) */
  187.  
  188. Table_C132_Click:
  189.   CALL ShowChars 2
  190.   SIGNAL RETURN
  191.  
  192. /* Event handlers for: C131 (RADIOBUTTON) */
  193.  
  194. Table_C131_Click:
  195.   CALL ShowChars 1
  196.   SIGNAL RETURN
  197.  
  198. /* Event handlers for: C102 (LISTBOX) */
  199.  
  200. Table_C102_Enter:
  201.   sel1 = C102.Item(C102.Select())
  202.   seld = WORD(sel1,2)
  203.   CALL Clipboard X2C(D2X(seld))
  204.   CALL BeepMe
  205.   SIGNAL RETURN
  206.  
  207. /*-----------------------------------------------------------------------------+
  208. |                                                                              |
  209. |  Event handlers for dialog: Result                                           |
  210. |                                                                              |
  211. +-----------------------------------------------------------------------------*/
  212.  
  213. /* Event handlers for: Result (DIALOG) */
  214.  
  215. Result_Key:
  216.   CALL EventData
  217.   presskey = EventData.1
  218.   presskey = TRANSLATE(presskey)
  219.   IF presskey = 'ESC' THEN DO
  220.       CALL ResultClose
  221.   END
  222.   SIGNAL RETURN
  223.  
  224. Result_Init:
  225.   CALL Result.Text progname||' - '||b.200
  226.   DO i = 201 TO 205
  227.       INTERPRET 'CALL C'||i||'.Font monoFont'
  228.       INTERPRET 'CALL C'||i||'.Hint h.i'
  229.       j = i+10
  230.       INTERPRET 'CALL C'||j||'.Text b.j'
  231.       INTERPRET 'CALL C'||j||'.Hint h.j'
  232.   END
  233.   DO i = 208 TO 209
  234.       INTERPRET 'CALL C'||i||'.Text b.i'
  235.       INTERPRET 'CALL C'||i||'.Hint h.i'
  236.   END
  237.   
  238.   rxp = xp
  239.   ryp = yp+ft+fb
  240.   rxs = xs
  241.   rys = ys-ft-fb
  242.   strw = rxs*4%5
  243.   CALL Result.Position rxp, ryp, rxs, rys
  244.   CALL C208.Position fl, fb, rxs%3, ft+fb
  245.   CALL C209.Position rxs*2%3-fr, fb, rxs%3, ft+fb
  246.   
  247.   xp205 = fl
  248.   yp205 = fb*3+ft
  249.   xs205 = strw
  250.   ys205 = ft*2
  251.   CALL C205.Position xp205, yp205, xs205, ys205
  252.   CALL C215.Position fl*2+strw, yp205, rxs-strw-fl*3, ys205
  253.   
  254.   xp204 = xp205
  255.   yp204 = yp205+ys205+fb
  256.   xs204 = strw
  257.   ys204 = ft*2
  258.   CALL C204.Position xp204, yp204, xs204, ys204
  259.   CALL C214.Position fl*2+strw, yp204, rxs-strw-fl*3, ys204
  260.   
  261.   xp203 = xp204
  262.   yp203 = yp204+ys204+fb
  263.   xs203 = strw
  264.   ys203 = ft*2
  265.   CALL C203.Position xp203, yp203, xs203, ys203
  266.   CALL C213.Position fl*2+strw, yp203, rxs-strw-fl*3, ys203
  267.   
  268.   xp202 = xp204
  269.   yp202 = yp203+ys203+fb
  270.   xs202 = strw
  271.   ys202 = ft*2
  272.   CALL C202.Position xp202, yp202, xs202, ys202
  273.   CALL C212.Position fl*2+strw, yp202, rxs-strw-fl*3, ys202
  274.   
  275.   xp201 = xp204
  276.   yp201 = yp202+ys202+fb
  277.   xs201 = strw
  278.   ys201 = ft*2
  279.   CALL C201.Position xp201, yp201, xs201, ys201
  280.   CALL C211.Position fl*2+strw, yp201, rxs-strw-fl*3, ys201
  281.   
  282.   CALL C201.Text STRIP(c2bin)
  283.   CALL C202.Text STRIP(c2dec)
  284.   CALL C203.Text STRIP(c2oct)
  285.   CALL C204.Text STRIP(c2hex)
  286.   c2asc = TRANSLATE(c2asc,' ','00'x)
  287.   CALL C205.Text c2asc
  288.   
  289.   CALL Table.Disable
  290.   CALL Result.Show
  291.   SIGNAL RETURN
  292.  
  293. /* Event handlers for: C209 (PUSHBUTTON) */
  294.  
  295. Result_C209_Click:
  296.   CALL ResultClose
  297.   SIGNAL RETURN
  298.  
  299. /* Event handlers for: C208 (PUSHBUTTON) */
  300.  
  301. Result_C208_Click:
  302.   CALL WriteMe.Open
  303.   SIGNAL RETURN
  304.  
  305. /* Event handlers for: C215 (PUSHBUTTON) */
  306.  
  307. Result_C215_Click:
  308.   CALL Clipboard c2asc
  309.   CALL BeepMe
  310.   SIGNAL RETURN
  311.  
  312. /* Event handlers for: C214 (PUSHBUTTON) */
  313.  
  314. Result_C214_Click:
  315.   CALL Clipboard STRIP(c2hex)
  316.   CALL BeepMe
  317.   SIGNAL RETURN
  318.  
  319. /* Event handlers for: C213 (PUSHBUTTON) */
  320.  
  321. Result_C213_Click:
  322.   CALL Clipboard STRIP(c2oct)
  323.   CALL BeepMe
  324.   SIGNAL RETURN
  325.  
  326. /* Event handlers for: C212 (PUSHBUTTON) */
  327.  
  328. Result_C212_Click:
  329.   CALL Clipboard STRIP(c2dec)
  330.   CALL BeepMe
  331.   SIGNAL RETURN
  332.  
  333. /* Event handlers for: C211 (PUSHBUTTON) */
  334.  
  335. Result_C211_Click:
  336.   CALL Clipboard STRIP(c2bin)
  337.   CALL BeepMe
  338.   SIGNAL RETURN
  339.  
  340. /*-----------------------------------------------------------------------------+
  341. |                                                                              |
  342. |  Event handlers for dialog: WriteMe                                          |
  343. |                                                                              |
  344. +-----------------------------------------------------------------------------*/
  345.  
  346. /* Event handlers for: WriteMe (DIALOG) */
  347.  
  348. WriteMe_Key:
  349.   CALL EventData
  350.   presskey = EventData.1
  351.   presskey = TRANSLATE(presskey)
  352.   IF presskey = 'ESC' THEN DO
  353.       CALL WriteMe.Close
  354.   END
  355.   SIGNAL RETURN
  356.  
  357. WriteMe_Init:
  358.   wxs = rxs*2%3
  359.   wxp = rxp+rxs%6
  360.   CALL WriteMe.Position wxp, ryp, wxs, ft*10+fb*6
  361.   CALL WriteMe.Text progname||' - '||b.400
  362.   
  363.   CALL C408.Position fl, fb, wxs%3, ft+fb
  364.   CALL C409.Position wxs*2%3-fr, fb, wxs%3, ft+fb
  365.   DO i = 408 TO 409
  366.       btnid = i-200
  367.       INTERPRET 'CALL C'||i||'.Text b.btnid'
  368.       INTERPRET 'CALL C'||i||'.Hint h.btnid'
  369.   END
  370.   
  371.   xp420 = fl
  372.   yp420 = fb*3+ft
  373.   xs420 = wxs-fl-fr
  374.   ys420 = ft*2
  375.   CALL C420.Position xp420, yp420, xs420, ys420
  376.   DO i = 421 TO 425
  377.       INTERPRET 'CALL C'||i||'.Position xp420+fl+xs420%5*(i-421), yp420+fb, xs420%5-fl*2, ft'
  378.       btnid = i-310
  379.       INTERPRET 'CALL C'||i||'.Text b.btnid'
  380.       INTERPRET 'CALL C'||i||'.Hint h.i'
  381.       INTERPRET 'CALL C'||i||'.Select 1'
  382.   END
  383.   CALL C420.Text b.420
  384.   
  385.   xp410 = xp420
  386.   yp410 = yp420+ys420
  387.   xs410 = xs420
  388.   ys410 = ft*6+fb*3
  389.   CALL C410.Position xp410, yp410, xs410, ys410
  390.   CALL C411.Position xp410+fl, yp410+fb*4+ft*4, xs420-fl*2, ft
  391.   CALL C412.Position xp410+fl, yp410+fb*3+ft*3, xs420-fl*2, ft
  392.   CALL C414.Position xp410+fl, yp410+fb*2+ft*2, ft*2, ft
  393.   CALL C415.Position xp410+fl*2+ft*2, yp410+fb*2+ft*2, xs420-fl*3-ft*2, ft
  394.   CALL C416.Position xp410+fl, yp410+fb+ft, xs420-fl*2, ft
  395.   CALL C417.Position xp410+fl, yp410+fb, xs420-fl*2, ft
  396.   CALL C414.Range 1,99
  397.   CALL C410.Text b.410
  398.   CALL C411.Text b.411
  399.   CALL C412.Hint h.412
  400.   CALL C414.Hint h.414
  401.   DO i = 415 TO 417
  402.       INTERPRET 'CALL C'||i||'.Text b.i'
  403.       INTERPRET 'CALL C'||i||'.Hint h.i'
  404.   END
  405.   CALL C412.Text Directory()||'\table.txt'
  406.   
  407.   CALL WriteMe.Show
  408.   CALL C414.Select 4
  409.   CALL C416.Select 1
  410.   CALL C417.Select 1
  411.   CALL CalcLineLen
  412.   SIGNAL RETURN
  413.  
  414. /* Event handlers for: C409 (PUSHBUTTON) */
  415.  
  416. WriteMe_C409_Click:
  417.   CALL WriteMe.Close
  418.   SIGNAL RETURN
  419.  
  420. /* Event handlers for: C408 (PUSHBUTTON) */
  421.  
  422. WriteMe_C408_Click:
  423.   CALL CalcLineLen
  424.   myFile = C412.Text()
  425.   
  426.   writeLine = 0
  427.   cols = 0
  428.   binLine = ''
  429.   decLine = ''
  430.   octLine = ''
  431.   hexLine = ''
  432.   ascLine = ''
  433.   
  434.   binText = Result.C201.Text()
  435.   decText = Result.C202.Text()
  436.   octText = Result.C203.Text()
  437.   hexText = Result.C204.Text()
  438.   IF myspace = 0 THEN DO
  439.       binText = SPACE(Result.C201.Text(),0)
  440.       decText = SPACE(Result.C202.Text(),0)
  441.       octText = SPACE(Result.C203.Text(),0)
  442.       hexText = SPACE(Result.C204.Text(),0)
  443.   END
  444.   ascText = TRANSLATE(Result.C205.Text(),'  ','0D0A'x)
  445.   
  446.   'type nul >'||myfile
  447.   rc = STREAM(myfile,"c","OPEN")
  448.   myTxt = msg.4080||' '||progname||' - '||DATE()||' - '||TIME()
  449.   CALL LINEOUT myFile,myTxt
  450.   CALL LINEOUT myFile,' '
  451.   
  452.   myTxt = ''
  453.   IF bin2col = 1 THEN DO
  454.       myTxt = myTxt||LEFT('BIN',binlen)
  455.   END
  456.   IF dec2col = 1 THEN DO
  457.       myTxt = myTxt||LEFT('DEC',declen)
  458.   END
  459.   IF oct2col = 1 THEN DO
  460.       myTxt = myTxt||LEFT('OCT',octlen)
  461.   END
  462.   IF hex2col = 1 THEN DO
  463.       myTxt = myTxt||LEFT('HEX',hexlen)
  464.   END
  465.   IF asc2col = 1 THEN DO
  466.        myTxt = myTxt||LEFT('ASC',asclen)
  467.   END
  468.   IF num2col = 1 THEN DO
  469.        myTxt = '  Chars   '||myTxt
  470.   END
  471.   CALL LINEOUT myFile,myTxt
  472.   
  473.   mylen = LENGTH(ascText)
  474.   mystep = mylen%chr2col
  475.   IF mylen//chr2col > 0 THEN DO
  476.       mystep = mystep+1
  477.   END
  478.   DO i = 1 TO mystep
  479.       binPart = i*(binlen-1)-binlen+2
  480.       octPart = i*(octlen-1)-octlen+2
  481.       decPart = i*(declen-1)-declen+2
  482.       hexPart = i*(hexlen-1)-hexlen+2
  483.       ascPart = i*asclen-asclen+1
  484.       statLine = RIGHT(i*chr2col-chr2col+1,4,'0')||'-'||RIGHT(MIN(mylen,(i*chr2col)),4,'0')||' '
  485.       IF bin2col= 1 THEN DO
  486.       binLine = SUBSTR(binText,binPart,binlen-1)||' '
  487.       END
  488.       IF dec2col = 1 THEN DO
  489.       decLine = SUBSTR(decText,decPart,declen-1)||' '
  490.       END
  491.       IF oct2col = 1 THEN DO
  492.       octLine = SUBSTR(octText,octPart,octlen-1)||' '
  493.       END
  494.       IF hex2col = 1 THEN DO
  495.       hexLine = SUBSTR(hexText,hexPart,hexlen-1)||' '
  496.       END
  497.       IF asc2col = 1 THEN DO
  498.       ascLine = SUBSTR(ascText,ascPart,asclen)
  499.       END
  500.       myText = binLine||decLine||octLine||hexLine||ascLine
  501.       IF num2col = 1 THEN DO
  502.       myText = statLine||myText
  503.       END
  504.       CALL LINEOUT myFile,myText
  505.       writeLine = writeLine + 1
  506.       IF RIGHT(writeLine,1) = '0' THEN DO
  507.       CALL Table.C199.Text 'Writing line: '||writeLine
  508.       END
  509.   END
  510.   CALL LINEOUT myFile,' '
  511.   rc = STREAM(myfile,"c","CLOSE")
  512.   CALL BeepMe
  513.   IF RxMessageBox(myFile||'0D0A'x||msg.4082,msg.4081,'OKCANCEL','INFORMATION') = 1 THEN DO
  514.       'START /F E.exe '||myFile
  515.   END
  516.   
  517.   CALL WriteMe.Close
  518.   SIGNAL RETURN
  519.  
  520. /* Event handlers for: C425 (CHECKBOX) */
  521.  
  522. WriteMe_C425_Click:
  523.   CALL CalcLineLen
  524.   SIGNAL RETURN
  525.  
  526. /* Event handlers for: C424 (CHECKBOX) */
  527.  
  528. WriteMe_C424_Click:
  529.   CALL CalcLineLen
  530.   SIGNAL RETURN
  531.  
  532. /* Event handlers for: C423 (CHECKBOX) */
  533.  
  534. WriteMe_C423_Click:
  535.   CALL CalcLineLen
  536.   SIGNAL RETURN
  537.  
  538. /* Event handlers for: C422 (CHECKBOX) */
  539.  
  540. WriteMe_C422_Click:
  541.   CALL CalcLineLen
  542.   SIGNAL RETURN
  543.  
  544. /* Event handlers for: C421 (CHECKBOX) */
  545.  
  546. WriteMe_C421_Click:
  547.   CALL CalcLineLen
  548.   SIGNAL RETURN
  549.  
  550. /* Event handlers for: C417 (CHECKBOX) */
  551.  
  552. WriteMe_C417_Click:
  553.   CALL CalcLineLen
  554.   SIGNAL RETURN
  555.  
  556. /* Event handlers for: C416 (CHECKBOX) */
  557.  
  558. WriteMe_C416_Click:
  559.   CALL CalcLineLen
  560.   SIGNAL RETURN
  561.  
  562. /* Event handlers for: C414 (SPINBUTTON) */
  563.  
  564. WriteMe_C414_Done:
  565.   CALL CalcLineLen
  566.   SIGNAL RETURN
  567.  
  568. /*-----------------------------------------------------------------------------+
  569. |                                                                              |
  570. |  Global procedures:                                                          |
  571. |                                                                              |
  572. +-----------------------------------------------------------------------------*/
  573.  
  574. ShowChars:
  575.   PARSE ARG showchars
  576.   SELECT 
  577.       WHEN showchars = 1 THEN DO
  578.       CALL Table.C131.Select 1
  579.       CALL Table.C133.Disable
  580.       CALL Table.C139.Disable
  581.       CALL ShowCharsAll
  582.       END
  583.       WHEN showchars = 2 THEN DO
  584.       CALL Table.C132.Select 1
  585.       CALL Table.C133.Enable
  586.       CALL Table.C139.Enable
  587.       selchars = STRIP(Table.C139.Text())
  588.       IF selchars <> '' THEN DO
  589.           CALL ShowCharsSel
  590.       END
  591.       END
  592.       OTHERWISE NOP
  593.   END
  594.   RETURN
  595.  
  596. ResultClose:
  597.   c2bin = ''
  598.   c2dec = ''
  599.   c2hex = ''
  600.   c2asc = ''
  601.   CALL C201.Text ''
  602.   CALL C202.Text ''
  603.   CALL C203.Text ''
  604.   CALL C204.Text ''
  605.   CALL Result.Close
  606.   CALL Table.Enable
  607.   RETURN
  608.  
  609. TheEnd:
  610.   PARSE VALUE Table.Position() WITH xp yp xs ys
  611.   CALL Table.Hide
  612.   
  613.   CALL SysIni inifile, 'Settings', 'Position', xp||' '||yp
  614.   CALL SysIni inifile, 'Settings', 'FixedFont', STRIP(TRANSLATE(C102.Font(),' ','00'x))
  615.   SELECT
  616.       WHEN C131.Select() = 1 THEN CALL SysIni inifile, 'Settings', 'ShowChars', '1'
  617.       OTHERWISE CALL SysIni inifile, 'Settings', 'ShowChars', '2'
  618.   END
  619.   
  620.   Exit
  621.   RETURN
  622.  
  623. CheckDEC:
  624.   PARSE ARG dec2chk
  625.   SELECT
  626.       WHEN DATATYPE(dec2chk) <> 'NUM' THEN decerr = 1
  627.       WHEN dec2chk//1 <> 0 THEN decerr = 1
  628.       WHEN dec2chk < 0 THEN decerr = 1
  629.       WHEN dec2chk > 255 THEN decerr = 1
  630.       OTHERWISE decerr = 0
  631.   END
  632.   RETURN decerr
  633.  
  634. ShowCharsSel:
  635.   scnum = 0
  636.   selchar.0 = 0
  637.   DO c = 1 TO WORDS(selchars)
  638.       i = WORD(selchars,c)
  639.       IF CheckDEC(i) = 0 THEN DO
  640.       scnum = scnum+1
  641.       selchar.scnum = RIGHT(X2B(D2X(i)),8,'0')||'  '||RIGHT(i,3,'0')||'  '||RIGHT(B2O(X2B(D2X(i))),3,'0')||'  '||D2X(i,2)||'  '||X2C(D2X(i))
  642.       END
  643.   END
  644.   selchar.0 = scnum
  645.   IF selchar.0 > 0 THEN DO
  646.       CALL Table.C102.Delete
  647.       DO i = 1 TO selchar.0
  648.       CALL Table.C102.Add selchar.i
  649.       END
  650.   END
  651.   RETURN
  652.  
  653. ShowCharsAll:
  654.   CALL Table.C102.Delete
  655.   CALL Table.C102.Add '00000000'||'  '||'000'||'  '||'000'||'  '||'00'||'  '||'NULL'
  656.   DO i = 1 TO 254
  657.       CALL Table.C102.Add RIGHT(X2B(D2X(i)),8,'0')||'  '||RIGHT(i,3,'0')||'  '||RIGHT(B2O(X2B(D2X(i))),3,'0')||'  '||D2X(i,2)||'  '||X2C(D2X(i))
  658.   END
  659.   CALL Table.C102.Add '11111111'||'  '||'255'||'  '||'377'||'  '||'FF'||'  '||'BLANK'
  660.   RETURN
  661.  
  662. ConvertOCT:
  663.   /* Convert OCTAL */
  664.   
  665.   errtype = 'OCT'
  666.   oct2conv = Table.C116.Text()
  667.   chars2conv = WORDS(oct2conv)
  668.   DO i = 1 TO chars2conv
  669.       ochar = WORD(oct2conv,i)
  670.       IF LENGTH(ochar) > 3 THEN DO
  671.       CALL IsErr errtype ochar
  672.       LEAVE
  673.       END
  674.       ochar = RIGHT(ochar,3,'0')
  675.       myerr = VERIFY(ochar,valoct)
  676.       SELECT
  677.       WHEN myerr = 0 THEN DO
  678.           bchar = RIGHT(O2B(ochar),8,'0')
  679.           hchar = RIGHT(B2X(bchar),2,'0')
  680.           dchar = RIGHT(X2D(hchar),3,'0')
  681.           achar = X2C(hchar)
  682.           CALL Strings
  683.       END
  684.       OTHERWISE DO
  685.           CALL IsErr errtype dchar
  686.           LEAVE
  687.       END
  688.       END
  689.       IF  ochar > 377 THEN DO
  690.       CALL IsErr errtype ochar
  691.       LEAVE
  692.       END
  693.   END
  694.   oct2conv = ''
  695.   RETURN
  696.  
  697. O2B:
  698.   /* OCTAL to BINARY */
  699.   
  700.   PARSE ARG oct2bin
  701.   myb = ''
  702.   DO o = 1 TO LENGTH(oct2bin)
  703.       myb = myb||RIGHT(X2B(SUBSTR(oct2bin,o,1)),3,'0')
  704.   END
  705.   myb = RIGHT(myb,8,'0')
  706.   RETURN myb
  707.  
  708. B2O:
  709.   /* BINARY to OCTAL */
  710.   
  711.   PARSE ARG bin2oct
  712.   myo = ''
  713.   DO WHILE LENGTH(bin2oct) > 3
  714.       myo = X2D(B2X(RIGHT(bin2oct,3)))||myo
  715.       bin2oct = LEFT(bin2oct,LENGTH(bin2oct)-3)
  716.   END
  717.   IF LENGTH(bin2oct) > 0 THEN DO
  718.       myo = X2D(B2X(bin2oct))||myo
  719.   END
  720.   RETURN myo
  721.  
  722. Language400:
  723.   /* Print options */
  724.   
  725.   b.400 = 'Write result to file'
  726.   b.410 = 'Output options'
  727.   b.411 = 'File name:'
  728.   b.415 = 'characters in line; line length ='
  729.   b.416 = '~Character numbers in output'
  730.   b.417 = '~Spaces in BIN DEC OCT HEX'
  731.   b.420 = 'Include following formats in output'
  732.   
  733.   h.412 = 'Write output to this file'
  734.   h.414 = 'Number of characters in line'
  735.   h.415 = 'Number of characters in line and line length'
  736.   h.416 = 'Display character numbers in output'
  737.   h.417 = 'Display spaces in BIN DEC OCT HEX format'
  738.   h.421 = 'Include BINARY format in output'
  739.   h.422 = 'Include DECIMAL format in output'
  740.   h.423 = 'Include OCTAL format in output'
  741.   h.424 = 'Include HEXADECIMAL format in output'
  742.   h.425 = 'Include ASCII format in output'
  743.   RETURN
  744.  
  745. Language200:
  746.   /* Conversion result */
  747.   
  748.   b.200 = 'Conversion result'
  749.   b.208 = '~Write'
  750.   b.209 = '~Cancel'
  751.   b.211 = '~BIN  Clip'
  752.   b.212 = '~DEC  Clip'
  753.   b.213 = '~OCT  Clip'
  754.   b.214 = '~HEX  Clip'
  755.   b.215 = '~ASC  Clip'
  756.   
  757.   h.208 = 'Write result to file table.txt'
  758.   h.209 = 'Return to program     (Esc)'
  759.   h.201 = 'Conversion result in BINARY format'
  760.   h.202 = 'Conversion result in DECIMAL format'
  761.   h.203 = 'Conversion result in OCTAL format'
  762.   h.204 = 'Conversion result in HEXADECIMAL format'
  763.   h.205 = 'Conversion result in ASCII format'
  764.   h.211 = 'Copy result in BINARY format to Clipboard'
  765.   h.212 = 'Copy result in DECIMAL format to Clipboard'
  766.   h.213 = 'Copy result in OCTAL format to Clipboard'
  767.   h.214 = 'Copy result in HEXADECIMAL format to Clipboard'
  768.   h.215 = 'Copy result in ASCII format to Clipboard'
  769.   RETURN
  770.  
  771. Language:
  772.   CALL Language100
  773.   CALL Language200
  774.   CALL Language400
  775.   
  776.   msg.1181 = 'Error!'
  777.   msg.1182 = 'Nothing to convert. Enter string to convert and try again!'
  778.   
  779.   msg.4080 = 'Conversion result, generated with'
  780.   msg.4081 = 'Result is saved to:'
  781.   msg.4082 = 'To view file with OS/2 System editor press OK. To return to program press Cancel.'
  782.   RETURN
  783.  
  784. Language100:
  785.   /* Main window */
  786.   
  787.   b.111 = 'BIN'
  788.   b.112 = 'DEC'
  789.   b.113 = 'OCT'
  790.   b.114 = 'HEX'
  791.   b.115 = 'ASC'
  792.   b.116 = ''
  793.   b.117 = '~Paste'
  794.   b.118 = '~Delete'
  795.   b.119 = '~Convert'
  796.   b.122 = '~Help'
  797.   b.123 = 'E~xit'
  798.   b.131 = '~All'
  799.   b.132 = '~Selected'
  800.   b.133 = '~Refresh'
  801.   
  802.   h.100 = 'Active code page:'
  803.   h.102 = 'DblClick = copy selected ASCII char to Clipboard; F5 = append selected ASCII char to string'
  804.   h.111 = 'Select BINARY format as source'
  805.   h.112 = 'Select DECIMAL format as source'
  806.   h.113 = 'Select OCTAL format as source'
  807.   h.114 = 'Select HEXADECIMAL format as source'
  808.   h.115 = 'Select ASCII format as source'
  809.   h.116 = 'Enter string to convert here'
  810.   h.117 = 'Paste string from Clipboard (append to existing string)'
  811.   h.118 = 'Delete this string'
  812.   h.119 = 'Convert this string to other formats'
  813.   h.121 = 'Select alternate code page'
  814.   h.122 = 'Show help for '||progname||'   (F1)'
  815.   h.123 = 'Leave program '||progname||'   (F3)'
  816.   h.131 = 'Show all 256 characters in the list'
  817.   h.132 = 'Show only selected characters (in entry field) in the list'
  818.   h.133 = 'Refresh characters list (after you changed characters in entry field)'
  819.   h.139 = 'DECIMAL representation of selected characters to show in the list'
  820.   RETURN
  821.  
  822. LoadCP:
  823.   /* Check system code pages */
  824.   
  825.   '@del codepage.txt'
  826.   '@CHCP > codepage.txt'
  827.   dummy = STREAM('codepage.txt', 'c', 'open')
  828.   selpage = LINEIN('codepage.txt',1,1)
  829.   prepage = LINEIN('codepage.txt')
  830.   dummy = STREAM('codepage.txt', 'c', 'close')
  831.   '@del codepage.txt'
  832.   
  833.   selpage = STRIP(SPACE(selpage,1))
  834.   prepage = STRIP(SPACE(prepage,1))
  835.   thispage = WORD(selpage,WORDS(selpage))
  836.   altpages = SUBSTR(prepage,POS(':',prepage)+1)
  837.   altpages = TRANSLATE(altpages, ,',')
  838.   IF WORDS(altpages) > 1 THEN DO
  839.       selpage1 = WORD(altpages,1)
  840.       selpage2 = WORD(altpages,2)
  841.       CALL Table.C121.Show
  842.       SELECT
  843.       WHEN selpage1 = thispage THEN DO
  844.           CALL Table.C121.Text '~'||selpage2
  845.           CALL Table.C121.Hint h.121||' '||selpage2
  846.       END
  847.       WHEN selpage2 = thispage THEN DO
  848.           CALL Table.C121.Text '~'||selpage1
  849.           CALL Table.C121.Hint h.121||' '||selpage1
  850.       END
  851.       OTHERWISE NOP
  852.       END
  853.   END
  854.   CALL Table.Text progname||',  '||h.100||' '||thispage||' (Prepared: '||altpages||')'
  855.   RETURN
  856.  
  857. CalcLineLen:
  858.   /* Calculate line length in output */
  859.   
  860.   chr2col = WriteMe.C414.Select()
  861.   num2col = WriteMe.C416.Select()
  862.   myspace = WriteMe.C417.Select()
  863.   bin2col = WriteMe.C421.Select()
  864.   dec2col = WriteMe.C422.Select()
  865.   oct2col = WriteMe.C423.Select()
  866.   hex2col = WriteMe.C424.Select()
  867.   asc2col = WriteMe.C425.Select()
  868.   
  869.   numlen = num2col*9+num2col
  870.   SELECT
  871.       WHEN myspace = 1 THEN DO
  872.       binlen = chr2col*bin2col*9+bin2col
  873.       declen = chr2col*dec2col*4+dec2col
  874.       octlen = chr2col*oct2col*4+oct2col
  875.       hexlen = chr2col*hex2col*3+hex2col
  876.       END
  877.       OTHERWISE DO
  878.       binlen = chr2col*bin2col*8+bin2col
  879.       declen = chr2col*dec2col*3+dec2col
  880.       octlen = chr2col*oct2col*3+oct2col
  881.       hexlen = chr2col*hex2col*2+hex2col
  882.       END
  883.   END
  884.   asclen = chr2col*asc2col
  885.   linelen = numlen+binlen+declen+octlen+hexlen+asclen
  886.   CALL WriteMe.C415.Text b.415||' '||linelen
  887.   RETURN
  888.  
  889. BeepMe:
  890.   dummy = BEEP(450,150)
  891.   RETURN
  892.  
  893. Strings:
  894.   /* Update conversion */
  895.   
  896.   c2bin = c2bin||' '||bchar
  897.   c2dec = c2dec||' '||dchar
  898.   c2hex = c2hex||' '||hchar
  899.   c2oct = c2oct||' '||ochar
  900.   c2asc = c2asc||achar
  901.   IF RIGHT(i,1) = 0 THEN DO
  902.       CALL Table.C199.Text i||'/ '||chars2conv
  903.   END
  904.   RETURN
  905.  
  906. IsErr:
  907.   PARSE ARG errtype errchar
  908.   myerr = 1
  909.   IF RxMessageBox(errchar||' is not valid '||errtype||' character.'||'0D'x||'Please enter correct values.','Error in character '||i,,'WARNING') = 1 THEN DO
  910.       CALL Table.C116.Text ''
  911.   END
  912.   RETURN
  913.  
  914. ShowTable:
  915.   /* Size and position of main window */
  916.   
  917.   CALL Table.Position xp, yp, xs, ys
  918.   CALL Table.C199.Position fl, fb, xs-fl-fr, ft
  919.   
  920.   xp104 = fl
  921.   yp104 = fb+ft
  922.   xs104 = 260
  923.   ys104 = ys-fb-ft*2-2
  924.   CALL Table.C104.Position xp104, yp104, xs104, ys104
  925.   CALL Table.C102.Position xp104+fl, yp104+fb*4+ft*2, xs104-fl-fr, ys104-fb*5-ft*3
  926.   CALL Table.C131.Position xp104+fl, yp104+fb*2+ft, xs104%3, ft
  927.   CALL Table.C132.Position xp104+fl*2+xs104%3, yp104+fb*2+ft, xs104%3, ft
  928.   CALL Table.C133.Position xp104+fl*3+xs104*2%3, yp104+fb*2+ft, xs104%3-fl*4, ft+fb
  929.   CALL Table.C139.Position xp104+fl, yp104+fb, xs104-fl-fr, ft
  930.   
  931.   xp103 = fl+xs104
  932.   yp103 = yp104
  933.   xs103 = xs-xs104-fl-fr
  934.   ys103 = ys104
  935.   xs111 = (xs103-fl*2)%5
  936.   xs121 = (xs103-fl)%3 
  937.   CALL Table.C103.Position xp103, yp103, xs103, ys103
  938.   CALL Table.C110.Position xp103+fl-2, yp103+ys103-ft-3, xs103-fl , ft+2
  939.   DO i = 1 TO 5
  940.       INTERPRET 'CALL Table.C11'||i||'.Position xp103+fl+xs111*(i-1), yp103+ys103-ft-2, xs111, ft'
  941.   END
  942.   CALL Table.C116.Position xp103+fl, yp103+fb*4+ft*2, xs103-fl-fr, ys103-fb*5-ft*3
  943.   DO i = 7 TO 9
  944.       INTERPRET 'CALL Table.C11'||i||'.Position xp103+fl+xs121*(i-7), yp103+fb*2+ft+2, xs121-fr, ft+fb'
  945.   END
  946.   DO i = 1 TO 3
  947.       INTERPRET 'CALL Table.C12'||i||'.Position xp103+fl+xs121*(i-1), yp103+fb, xs121-fr, ft+fb'
  948.   END
  949.   CALL Table.C199.Position fl, fb, xs-fl-fr, ft
  950.   RETURN
  951.  
  952. LoadCfg:
  953.   /* Configuration */
  954.   
  955.   ishelp = 0
  956.   xs = 500
  957.   ys = ft*13+fb*9
  958.   ys1 = ft
  959.   
  960.   valbin = '01'
  961.   valoct = '01234567'
  962.   valdec = '0123456789'
  963.   valhex = '0123456789ABCDEFabcdef'
  964.   
  965.   propFont = "9.WarpSans"
  966.   CALL Table.Font propFont
  967.   
  968.   inifile = 'TABLE.INI'
  969.   
  970.   monoFont = SysIni(inifile,'Settings','FixedFont')
  971.   IF monoFont = 'ERROR:' THEN DO
  972.       monoFont = "10.System VIO"
  973.   END
  974.   
  975.   mypos = SysIni(inifile,'Settings','Position')
  976.   IF WORDS(mypos) <> 2 THEN DO
  977.       mypos = (cx-xs)%2||' '||(cy-ys)%2
  978.   END
  979.   PARSE VALUE mypos WITH xp yp
  980.   
  981.   showchars = LEFT(SysIni(inifile,'Settings','ShowChars'),1)
  982.   IF POS(showchars,'12') = 0 THEN DO
  983.       showchars = 1
  984.   END
  985.   
  986.   selchars = SysIni(inifile,'Settings','SelectedChars')
  987.   IF selchars = 'ERROR:' THEN DO
  988.       selchars = ''
  989.   END
  990.   CALL Table.C139.Text selchars
  991.   
  992.   CALL Table.C102.Font monoFont
  993.   CALL Table.C104.Font monoFont
  994.   CALL Table.C116.Font monoFont
  995.   RETURN
  996.  
  997. ConvertASC:
  998.   /* Convert ASCII */
  999.   
  1000.   asc2conv = Table.C116.Text()
  1001.   chars2conv = LENGTH(asc2conv)
  1002.   DO i = 1 TO chars2conv
  1003.       achar = SUBSTR(asc2conv,i,1)
  1004.       hchar = RIGHT(C2X(achar),2,'0')
  1005.       bchar = RIGHT(X2B(hchar),8,'0')
  1006.       dchar = RIGHT(X2D(hchar),3,'0')
  1007.       ochar = RIGHT(B2O(bchar),3,'0')
  1008.       CALL Strings
  1009.   END
  1010.   asc2conv = ''
  1011.   RETURN
  1012.  
  1013. ConvertHEX:
  1014.   /* Convert HEXADECIMAL */
  1015.   
  1016.   errtype = 'HEX'
  1017.   hex2conv = Table.C116.Text()
  1018.   chars2conv = WORDS(hex2conv)
  1019.   DO i = 1 TO chars2conv
  1020.       hchar = WORD(hex2conv,i)
  1021.       IF LENGTH(hchar) > 2 THEN DO
  1022.       CALL IsErr errtype hchar
  1023.       LEAVE
  1024.       END
  1025.       hchar = RIGHT(hchar,2,'0')
  1026.       myerr = VERIFY(hchar,valhex)
  1027.       SELECT
  1028.       WHEN myerr = 0 THEN DO
  1029.           bchar = RIGHT(X2B(hchar),8,'0')
  1030.           dchar = RIGHT(X2D(hchar),3,'0')
  1031.           ochar = RIGHT(B2O(bchar),3,'0')
  1032.           achar = X2C(hchar)
  1033.           CALL Strings
  1034.       END
  1035.       OTHERWISE DO
  1036.           CALL IsErr errtype hchar
  1037.           LEAVE
  1038.       END
  1039.       END
  1040.   END
  1041.   hex2conv = ''
  1042.   RETURN
  1043.  
  1044. ConvertDEC:
  1045.   /* Convert DECIMAL */
  1046.   
  1047.   errtype = 'DEC'
  1048.   dec2conv = Table.C116.Text()
  1049.   chars2conv = WORDS(dec2conv)
  1050.   DO i = 1 TO chars2conv
  1051.       dchar = WORD(dec2conv,i)
  1052.       IF LENGTH(dchar) > 3 THEN DO
  1053.       CALL IsErr errtype dchar
  1054.       LEAVE
  1055.       END
  1056.       dchar = RIGHT(dchar,3,'0')
  1057.       myerr = VERIFY(dchar,valdec)
  1058.       SELECT
  1059.       WHEN myerr = 0 THEN DO
  1060.           hchar = D2X(dchar,2)
  1061.           bchar = RIGHT(X2B(hchar),8,'0')
  1062.           ochar = RIGHT(B2O(bchar),3,'0')
  1063.           achar = X2C(hchar)
  1064.           CALL Strings
  1065.       END
  1066.       OTHERWISE DO
  1067.           CALL IsErr errtype dchar
  1068.           LEAVE
  1069.       END
  1070.       END
  1071.       IF  dchar > 255 THEN DO
  1072.       CALL IsErr errtype dchar
  1073.       LEAVE
  1074.       END
  1075.   END
  1076.   dec2conv = ''
  1077.   RETURN
  1078.  
  1079. ConvertBIN:
  1080.   /* Convert BINARY */
  1081.   
  1082.   errtype = 'BIN'
  1083.   bin2conv = Table.C116.Text()
  1084.   chars2conv = WORDS(bin2conv)
  1085.   DO i = 1 TO chars2conv
  1086.       bchar = WORD(bin2conv,i)
  1087.       IF LENGTH(bchar) > 8 THEN DO
  1088.       CALL IsErr errtype bchar
  1089.       LEAVE
  1090.       END
  1091.       bchar = RIGHT(bchar,8,'0')
  1092.       myerr = VERIFY(bchar,valbin)
  1093.       SELECT
  1094.       WHEN myerr = 0 THEN DO
  1095.           hchar = RIGHT(B2X(bchar),2,'0')
  1096.           dchar = RIGHT(X2D(hchar),3,'0')
  1097.           ochar = RIGHT(B2X(bchar),3,'0')
  1098.           achar = X2C(hchar)
  1099.           CALL Strings
  1100.       END
  1101.       OTHERWISE DO
  1102.           CALL IsErr errtype bchar
  1103.           LEAVE
  1104.       END
  1105.       END
  1106.   END
  1107.   bin2conv = ''
  1108.   RETURN
  1109.  
  1110. /*-----------------------------------------------------------------------------+
  1111. |                                                                              |
  1112. |  Default initialization:                                                     |
  1113. |                                                                              |
  1114. +-----------------------------------------------------------------------------*/
  1115.  
  1116. INIT:
  1117.   SIGNAL RETURN
  1118.  
  1119. /*-----------------------------------------------------------------------------+
  1120. |                                                                              |
  1121. |  Default error handlers:                                                     |
  1122. |                                                                              |
  1123. +-----------------------------------------------------------------------------*/
  1124.  
  1125. SYNTAX:
  1126.   SAY 'SYNTAX ERROR:' errortext( rc ) 'in:'
  1127.   SAY sourceline( sigl )
  1128.   SIGNAL ON SYNTAX
  1129.   SIGNAL RETURN
  1130.  
  1131. HALT:
  1132.   SAY 'HALT occurred in:'
  1133.   SAY sourceline( sigl )
  1134.   SIGNAL ON HALT
  1135.   SIGNAL RETURN
  1136.