home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / clipper / fastdemo / fastterm.prg next >
Text File  |  1994-06-07  |  19KB  |  686 lines

  1.  
  2. /*
  3.         Compie with : clipper term /A/M/N/L/W
  4.         link with   : rtlink fi term lib fast, apistd
  5. */
  6.  
  7.  
  8. #include "setcurs.ch"
  9. #include "inkey.ch"
  10. #include "Error.ch"
  11.  
  12.  
  13. #xtranslate ROJO                => if( iscolor(), "W+/R+", "W+/N+" )
  14. #xtranslate VERDE               => if( iscolor(), "W+/G+", "W+/N+" )
  15. #xtranslate AZUL                => if( iscolor(), "W+/B+", "W+/N+" )
  16. #xtranslate DEFAULT <var> TO <to> ;
  17.                                 => <var> := if( <var> == nil, <to> , <var> )
  18.  
  19. #define     COM1                1
  20. #define     COM2                2
  21. #define     COM3                3
  22. #define     COM4                4
  23. #define     PUERTO              aSetUp[1]
  24. #define     BAUDIOS             aSetUp[2]
  25. #define     DIALSTRING          aSetUp[3]
  26. #define     INICIALIZACION      aSetUp[4]
  27.  
  28. #define     V_NORMAL            3
  29. #define     CRLF                chr( 13 ) + chr( 10 )
  30. #define     ISDEBUG             aGeneralSetUp[1]
  31. #define     ISACAPTURE          aGeneralSetUp[2]
  32. #define     ISDCAPTURE          aGeneralSetUp[3]
  33. #define     NACAP               aGeneralSetUp[4]
  34. #define     NDCAP               aGeneralSetUp[5]
  35.  
  36. #define     MACRO_F1            aMacro[1]
  37. #define     MACRO_F2            aMacro[2]
  38. #define     MACRO_F3            aMacro[3]
  39. #define     MACRO_F4            aMacro[4]
  40. #define     MACRO_F5            aMacro[5]
  41.  
  42.  
  43. static aSetUp, aPhone, aMacro
  44. static aGeneralSetUp := { .f., .f., .f., -1, -1 }
  45.  
  46.  
  47. FUNCTION Terminal()
  48. local cTemp
  49. local nError
  50. local lContinue := .t.
  51. local nTecla := 0
  52. local nLastCursor
  53. local cLastColor
  54.     set scoreboard off
  55.     if .not. file( "SetUp.def" )
  56.         BoxWarning( "Setup file not found, creating..." )
  57.     MakeSetUp()
  58.     EndIf
  59.     if .not. file( "PhoneBk.def" )
  60.         BoxWarning( "Bookphone not founf, creating..." )
  61.     MakePhoneBook()
  62.     EndIf
  63.     if .not. file( "Macro.def" )
  64.         BoxWarning( "Macro file not found, creating..." )
  65.     MakeMacro()
  66.     EndIf
  67.     aSetUp := RestArray( "SetUp.def", @nError )
  68.     aPhone := RestArray( "PhoneBk.def", @nError )
  69.     aMacro := RestArray( "Macro.def", @nError )
  70.     nLastCursor := setcursor( SC_SPECIAL1 )
  71.     cLastColor := setcolor( AZUL )
  72.     ReDrawScreen()
  73.     setpos( 2,0 )
  74.     cTemp := "CA-Clipper (tm) Terminal|Terminal Created with:||" + ;
  75.              "Fast Library 3.15 (c) 93 Manu Roibal|"
  76.     WriteScreen( cTemp )
  77.     Delay( 2 )
  78.     ReInstala()
  79.     Inicializacion()
  80.     while( lContinue )
  81.       setcursor( SC_SPECIAL1 )
  82.       nTecla := inkey()
  83.       if nTecla == K_F1
  84.         _eValMacro( MACRO_F1 )
  85.       Elseif nTecla == K_F2
  86.         _eValMacro( MACRO_F2 )
  87.       ElseIf nTecla == K_F3
  88.         _eValMacro( MACRO_F3 )
  89.       Elseif nTecla == K_F4
  90.         _eValMacro( MACRO_F4 )
  91.       Elseif nTecla == K_F5
  92.         _eValMacro( MACRO_F5 )
  93.       EndIf
  94.       if IsAlt()
  95.         setcursor( 0 )
  96.         SetMenu()
  97.       EndIf
  98.       if .not. ComInEmpt()
  99.         cTemp := ""
  100.         while .not. ComInEmpt()
  101.           cTemp += chr( ComInput() )
  102.         Enddo
  103.         if ISDEBUG
  104.           _WriteDebug( cTemp )
  105.         EndIf
  106.         WriteScreen( cTemp )
  107.       EndIf
  108.       if( nTecla != 0 )
  109.         do case
  110.           case nTecla > 31 .and. nTecla < 257
  111.             while .not. ComReady()
  112.             Enddo
  113.             ComOutput( nTecla )
  114.           case nTecla == 13
  115.             ComOutput( 13 )
  116.           case nTecla == K_BS
  117.             WriteScreen( chr( K_BS ) )
  118.         end case
  119.         nTecla := 0
  120.       EndIf
  121.     Enddo
  122.     inkey(0)
  123.     exit( 0 )
  124. RETURN ( Nil )
  125.  
  126.  
  127. FUNCTION exit( nError )
  128.     if( nError != 0 )
  129.       do case
  130.     case nError == 1
  131.           WriteScreen( "I/O buffer errors.|" )
  132.     case nError == 2
  133.           WriteScreen( "COM port not specified.|" )
  134.     case nError == 3
  135.           WriteScreen( "The specified port have not UART.|" )
  136.     case nError == 4
  137.           WriteScreen( "Interrupt manager is installed.|" )
  138.       endcase
  139.     EndIf
  140.     WriteScreen( "|Push any key to return to DOS..." )
  141.     inkey( 0 )
  142.     ComUnInst()
  143.     VideoMode( V_NORMAL )
  144.     Quit
  145. RETURN Nil
  146.  
  147.  
  148. FUNCTION WriteScreen( cTexto )
  149. static nRow, nCol
  150. local cLine
  151. local lLineFeed  := .f.
  152. local cAux := ""
  153. local cChar := ""
  154.     if ISACAPTURE
  155.       fwrite( NACAP, cTexto, len( cTexto ) )
  156.     EndIf
  157.     while( len( cTexto ) != 0 )
  158.       cChar := Cut( @cTexto )
  159.       do case
  160.     case asc( cChar ) == 13
  161.           cAux += "|"
  162.     case asc( cChar ) == 10
  163.         otherwise
  164.           cAux += cChar
  165.     endcase
  166.     Enddo
  167.     cTexto := cAux
  168.     DEFAULT nRow TO 2
  169.     DEFAULT nCol TO 0
  170.     while( len( cTexto ) != 0 )
  171.       cLine := CutTo( "|", @cTexto, @lLineFeed )
  172.       @ nRow,nCol say cLine color AZUL
  173.       nCol := col()
  174.       if lLineFeed
  175.         nRow++
  176.         if nRow == 23
  177.           if ISDEBUG
  178.             dispbegin()
  179.             _DebugSave( .f. )
  180.           EndIf
  181.           scroll( 2,0,22,79,1 )
  182.           nRow--
  183.           if ISDEBUG
  184.             _DebugSave( .t. )
  185.             _DebugSave( nil )
  186.             dispend()
  187.           EndIf
  188.         EndIf
  189.         setpos( nRow,nCol := 0 )
  190.         lLineFeed := .f.
  191.       EndIf
  192.     Enddo
  193. RETURN ( Nil )
  194.  
  195.  
  196. FUNCTION _WriteDebug( cTexto, lCols )
  197. static nDRow, nDCol
  198. static nCounter
  199. local cColor
  200. local cChar
  201.     if lCols != nil .and. cTexto == ""
  202.       nDrow := 4
  203.       nDCol := 0
  204.       RETURN ( Nil )
  205.     EndIf
  206.     DEFAULT nDRow TO 4
  207.     DEFAULT nDCol TO 0
  208.     DEFAULT nCounter TO 0
  209.     while( len( cTexto ) != 0 )
  210.       @ nDRow, nDCol say " " + Byte2Hex( cChar := Cut( @cTexto ) ) color VERDE
  211.       if ISDCAPTURE
  212.         fwrite( NDCAP, " " + Byte2Hex( cChar ), 3 )
  213.       EndIf
  214.       nDCol += 3
  215.       if( ++nCounter%26 ) == 0
  216.         if( ++nDRow==7 )
  217.           cColor := setcolor( VERDE )
  218.           scroll( 5,0,6,79,1 )
  219.           setcolor( cColor )
  220.           --nDRow
  221.           nDCol := 0
  222.         EndIf
  223.         if ISDCAPTURE
  224.           fwrite( NDCAP, CRLF, 2 )
  225.         EndIf
  226.       EndIf
  227.     Enddo
  228. RETURN ( Nil )
  229.  
  230.  
  231. FUNCTION _SetDOn()
  232.     _DrawDebug()
  233.     ISDEBUG := .t.
  234. RETURN ( Nil )
  235.  
  236.  
  237. FUNCTION _SetDOff()
  238.     ISDEBUG := .f.
  239.     _DebugSave( .f. )
  240. RETURN ( Nil )
  241.  
  242.  
  243. FUNCTION _DebugSave( lMode )
  244. static cPantalla, cPantalla2
  245.     if lMode == nil
  246.       restscreen( 3,0,7,79, cPantalla2 )
  247.     ElseIf lMode
  248.       cPantalla := savescreen( 3,0,7,79 )
  249.     Else
  250.       cPantalla2 := savescreen( 3,0,7,79 )
  251.       restscreen( 3,0,7,79, cPantalla )
  252.     EndIf
  253. RETURN ( Nil )
  254.  
  255.  
  256. FUNCTION _DrawDebug()
  257. local nCounter
  258.     _DebugSave( .t. )
  259.     @ 3,0 say replicate( chr( 196 ), 80 ) color VERDE
  260.     @ 3,2 say chr( 180 ) + " Debug " + chr( 195 ) color VERDE
  261.     for nCounter := 4 to 6
  262.     @ nCounter, 0 say replicate( chr( 32 ), 80 ) color VERDE
  263.     next nCounter
  264.     @ 7,0 say replicate( chr( 196 ), 80 ) color VERDE
  265. RETURN ( Nil )
  266.  
  267.  
  268. FUNCTION CutTo( cChar, cChain, lLineFeed )
  269. local nAt    := at( cChar,cChain )
  270. local cTexto 
  271.     if( nAt!=0 )
  272.       cTexto    := substr( cChain, 1, nAt - 1 )
  273.       cChain    := substr( cChain, nAt + 1 )
  274.       lLineFeed := .t.
  275.     else
  276.       cTexto := cChain
  277.       cChain := ""
  278.     EndIf
  279. RETURN cTexto
  280.  
  281.  
  282. FUNCTION Cut( cChain )
  283. local cChar := substr( cChain, 1, 1 )
  284.     cChain := substr( cChain, 2 )
  285. RETURN cChar
  286.  
  287.  
  288. FUNCTION SetMenu()
  289. local aMiMenu := {}
  290. local nOpcion
  291. local nItem
  292. local nRow := row()
  293. local nCol := col()
  294. local nError
  295. local cMenu := { " C^redits "," De^bug ", " M^isc ", " ^Modem "," M^acros " }
  296.     aMiMenu := NewMenu( cMenu,;
  297.                         { "R/W",   "RG+/W",  "W+/R", "RG+/R+",;
  298.                           "W+/R+", "RG+/N+", "G+/R+"         } )
  299.     
  300.     AddItem( aMiMenu, 1, "Exit" )
  301.     
  302.     AddItem( aMiMenu, 2, "Debug On" )
  303.     AddItem( aMiMenu, 2, "Debug Off" )
  304.  
  305.     AddItem( aMiMenu, 3, "Book Phone" )
  306.     AddLine( aMiMenu, 3 )
  307.     AddItem( aMiMenu, 3, "Open ASCII capture" )
  308.     AddItem( aMiMenu, 3, "Open DEBUG capture" )
  309.     AddItem( aMiMenu, 3, "Close ASCII capture" )
  310.     AddItem( aMiMenu, 3, "Close DEBUG capture" )
  311.     
  312.     AddItem( aMiMenu, 4, "Call string" )
  313.     AddLine( aMiMenu, 4 )
  314.     AddItem( aMiMenu, 4, "Inicialization string" )
  315.     AddItem( aMiMenu, 4, "COM port number" )
  316.     AddItem( aMiMenu, 4, "COM port Speed" )
  317.     AddLine( aMiMenu, 4 )
  318.     AddItem( aMiMenu, 4, "Inicialize Modem" )
  319.     AddLine( aMiMenu, 4 )
  320.     AddItem( aMiMenu, 4, "Save Configuration" )
  321.     
  322.     AddItem( aMiMenu, 5, "Edit Macros" )
  323.     OffItem( aMiMenu, 5, 1 )
  324.     AddLine( aMiMenu, 5 )
  325.     AddItem( aMiMenu, 5, "F1: " + MACRO_F1 )
  326.     AddItem( aMiMenu, 5, "F2: " + MACRO_F2 )
  327.     AddItem( aMiMenu, 5, "F3: " + MACRO_F3 )
  328.     AddItem( aMiMenu, 5, "F4: " + MACRO_F4 )
  329.     AddItem( aMiMenu, 5, "F5: " + MACRO_F5 )
  330.     AddLine( aMiMenu, 5 )
  331.     AddItem( aMiMenu, 5, "Save Macros" )
  332.     nOpcion := DispMenu( aMiMenu )
  333.     nItem   := nOpcion - 10000 * Int( nOpcion / 10000 )
  334.     if nOpcion == 0
  335.       @ 00,00 say replicate( chr( 177 ), 80 )
  336.       RETURN ( Nil )
  337.     Elseif( int( nOpcion / 10000 ) == 5 )
  338.       do case
  339.         case( nItem/100 ) == 2
  340.           MACRO_F1 := _AskFor2( "Macro F1: ", MACRO_F1, len( MACRO_F1 ) )
  341.         case( nItem/100 ) == 3
  342.           MACRO_F2 := _AskFor2( "Macro F2: ", MACRO_F2, len( MACRO_F2 ) )
  343.         case( nItem/100 ) == 4
  344.           MACRO_F3 := _AskFor2( "Macro F3: ", MACRO_F3, len( MACRO_F3 ) )
  345.         case( nItem/100 ) == 5
  346.           MACRO_F4 := _AskFor2( "Macro F4: ", MACRO_F4, len( MACRO_F4 ) )
  347.         case( nItem/100 ) == 6
  348.           MACRO_F5 := _AskFor2( "Macro F5: ", MACRO_F5, len( MACRO_F5 ) )
  349.         case( nItem/100 ) == 7
  350.           SaveArray( aMacro, "Macro.def", @nError )
  351.       end case
  352.     ElseIf( int( nOpcion / 10000 ) == 4 )
  353.       do case
  354.         case( nItem/100 ) == 1
  355.           DIALSTRING := _AskFor2( "Call String: ", DIALSTRING, len( DIALSTRING ) )
  356.         case( nItem/100 ) == 2
  357.           INICIALIZACION := _AskFor2( "Inicialization String: ", INICIALIZACION, len( INICIALIZACION ) )
  358.         case( nItem/100 ) == 3
  359.           RePuerto()
  360.         case( nItem/100 ) == 4
  361.           ReBaudios()
  362.         case( nItem/100 ) == 5
  363.           Inicializa()
  364.         case( nItem/100 ) == 6
  365.           nError := 0
  366.           SaveArray( aSetUp, "SetUp.def", @nError )
  367.           if( nError!=0 )
  368.             BoxWarning( "I can not create Setup file" )
  369.           EndIf
  370.       end case
  371.     ElseIf( int( nOpcion / 10000 ) == 1 )
  372.       do case
  373.         case( nItem/100 ) == 1
  374.           exit( 0 )
  375.       end case
  376.     ElseIf( int( nOpcion / 10000 ) == 2 )
  377.       do case
  378.         case( nItem/100 ) == 1
  379.           if ISDEBUG
  380.             BoxWarning( "Debug is actived." )
  381.           else
  382.             _SetDOn()
  383.             _WriteDebug( "",.t. )
  384.             ISDEBUG := .t.
  385.           EndIf
  386.         case( nItem/100 ) == 2
  387.           if .not. ISDEBUG
  388.             BoxWarning( "Debug is not actived." )
  389.           else
  390.             _SetDOff()
  391.             ISDEBUG := .f.
  392.             if ISDCAPTURE
  393.               ISDCAPTURE := .f.
  394.               fclose( NDCAP )
  395.               NDCAP := -1
  396.               BoxWarning( "Debug capture closed." )
  397.             EndIf
  398.           EndIf
  399.       end case
  400.     ElseIf( int( nOpcion /10000 ) == 3 )
  401.       do case
  402.         case( nItem/100 ) == 1
  403.           Agenda()
  404.         case( nItem/100 ) == 2
  405.           if ISACAPTURE
  406.             BoxWarning( "ASCII capture is opened." )
  407.           else
  408.             NACAP := fcreate( _AskFor2( "ASCII capture file name: ", space( 13 ), 13 ) )
  409.             ISACAPTURE := .t.
  410.           EndIf
  411.         case( nItem/100 ) == 3
  412.           if ISDEBUG
  413.             if ISDCAPTURE
  414.               BoxWarning( "DEBUG capture is opended." )
  415.             else
  416.               NDCAP := fcreate( _AskFor2( "DEBUG capture file name", space( 13 ), 13 ) )
  417.               ISDCAPTURE := .t.
  418.             EndIf
  419.           else
  420.             BoxWarning( "Sorry, active DEBUG before active DEBUG capture" )
  421.           EndIf
  422.         case( nItem/100 ) == 4
  423.           if ISACAPTURE
  424.             ISACAPTURE := .f.
  425.             fclose( NACAP )
  426.             NACAP := -1
  427.           else
  428.             BoxWarning( "ASCII capture closed." )
  429.           EndIf
  430.         case( nItem/100 ) == 5
  431.           if ISDCAPTURE
  432.             ISDCAPTURE := .f.
  433.             fclose( NDCAP )
  434.             NDCAP := -1
  435.           else
  436.             BoxWarning( "DEBUG capture closed." )
  437.           EndIf
  438.       end case
  439.     EndIf
  440.     @ 00,00 say replicate( chr( 177 ), 80 )
  441.     setpos( nRow,nCol )
  442. RETURN ( Nil )
  443.  
  444.  
  445. FUNCTION ReInstala()
  446. local nError
  447.     ComUnInst()
  448.     nError := ComInst( PUERTO )
  449.     ComSpeed( BAUDIOS )
  450.     if( nError!=0 )
  451.       if( nError == 2 )
  452.         WriteScreen( "COM port not selected.|" )
  453.       EndIf
  454.     EndIf
  455.     ComInFlh()
  456.     ComOutFlh()
  457.     if .not. ComInEmpt()
  458.       WriteScreen( "There's problems with I/O buffers.|" )
  459.     endif
  460.     if .not. ComOutEmpty()
  461.       WriteScreen( "There's problems with I/O buffers.|" )
  462.     endif
  463.     Inicializacion()
  464.     if ComCarrier()
  465.       WriteScreen( "Carrier Detected.|" )
  466.     EndIf
  467.     ComHighDTR()
  468. RETURN ( Nil )
  469.  
  470.  
  471. FUNCTION Inicializa()
  472.     while .not. ComReady()
  473.     Enddo
  474.     ComOutputs( alltrim( INICIALIZACION ) + CRLF )
  475. RETURN ( Nil )
  476.  
  477.  
  478. FUNCTION MakeSetUp()
  479. local aSetUp := { 4,2400,"ATDP      ", "atm1l1&c1&v                   " }
  480. local nError := 0
  481.     SaveArray( aSetUp, "SetUp.def", @nError )
  482.     if( nError!=0 )
  483.       BoxWarning( "Configuration file not created." )
  484.     EndIf
  485. RETURN ( Nil )
  486.  
  487.  
  488. FUNCTION MakeMacro()
  489. local aMacro := { space(30), space(30), space(30), space(30), space(30) }
  490. local nError := 0
  491.     SaveArray( aMacro, "Macro.def", @nError )
  492.     if( nError!=0 )
  493.       BoxWarning( "Macro file not created." )
  494.     EndIf
  495. RETURN ( Nil )
  496.  
  497.  
  498. FUNCTION MakePhoneBook()
  499. local aPhoneBook := {}
  500. local nCounter
  501. local nError := 0
  502.     for nCounter := 1 to 10
  503.       aadd( aPhoneBook, { space( 20 ), space( 15 ) } )
  504.     next nCounter
  505.     SaveArray( aPhoneBook, "PhoneBk.def", @nError )
  506.     if( nError!=0 )
  507.       BoxWarning( "Bookphone file not created." )
  508.     EndIf
  509. RETURN ( Nil )
  510.  
  511.  
  512. FUNCTION ReDrawScreen()
  513. Local GetList := {}
  514. Local nInd
  515.     clear
  516.     @ 00,00 say replicate( chr( 177 ), 80 )
  517.     @ 01,00 say replicate( chr( 196 ), 80 )
  518.     @ 23,00 say replicate( chr( 196 ), 80 )
  519.     @ 24,00 say replicate( chr( 177 ), 80 )
  520.     for nInd := 2 to 22
  521.        @ nInd, 0 say Space( 80 )
  522.     next
  523. RETURN ( Nil )
  524.  
  525.  
  526. FUNCTION Agenda()
  527. Local GetList := {}
  528. #define         NAME( x )       aPhone[ x ][1]
  529. #define        PHONE( x )    aPhone[ x ][2]
  530. #define        Tr2( x )    str( x,2 )
  531. local aPhoneBook := {}
  532. local nCounter := 0
  533. local nOpcion
  534. local nColor := setcolor( ROJO )
  535. local lMore := .t.
  536. local nRow  := 2
  537. local nTecla
  538. local nToEdit := 1
  539. local lUpdated := .f.
  540. local nError := 0
  541. local sPantalla := savescreen( 0,0,24,79 )
  542.     while lMore
  543.       aPhoneBook := {}
  544.       nCounter   := 0
  545.       while( ++nCounter!=len( aPhone ) + 1 )
  546.         aadd( aPhoneBook, Tr2( nCounter ) + ") " + ;
  547.                           Capital( NAME( nCounter ) ) + ;
  548.                           " - " + PHONE( nCounter ) )
  549.       Enddo
  550.       scroll( 2,2,15,51 )
  551.       dispbox( 2,2,16,51,1 )
  552.       dispbox( 2,2,13,51,1 )
  553.       @ 13,2 say chr( 195 ) ; @ 13,51 say chr( 180 )
  554.       @ 14,3 say " E)dit, D)ial, eX)it "
  555.       aeval( aPhoneBook, {|x| xDisp( nRow := if( ++nRow > 12,3,nRow ), 3, x ) } )
  556.       nTecla := upper( chr( inkey(0) ) )
  557.       do case
  558.         case nTecla == "X"
  559.           lMore := .f.
  560.         case nTecla == "E"
  561.           nToEdit := AskFor( "Number to Edit: ", nToEdit, "99" )
  562.           @ 2 + nToEdit, 7 get NAME( nToEdit ) color ROJO
  563.           @ 2 + nToEdit, 30 get PHONE( nToEdit ) color ROJO
  564.           setcursor( SC_SPECIAL1 )
  565.           read
  566.           setcursor( 0 )
  567.           lUpdated := .t.
  568.         case nTecla == "D"
  569.           nToEdit := AskFor( "Number to call: ", nToEdit, "99" )
  570.           if( .not. empty( PHONE( nToEdit ) ) )
  571.             ComOutputs( alltrim( DIALSTRING ) + PHONE( nToEdit ) + CRLF )
  572.             lMore := .f.
  573.           else
  574.             BoxWarning( "There isn't no phone to call." )
  575.          EndIf
  576.       end case
  577.     Enddo
  578.     if lUpdated
  579.       SaveArray( aPhone, "PhoneBk.def", @nError )
  580.     EndIf
  581.     restscreen( 0,0,24,79,sPantalla )
  582. RETURN setcolor( nColor )
  583.  
  584.  
  585. FUNCTION xDisp( nRow, nCol, cText )
  586.     setpos( nRow, nCol )
  587.     QQout( cText )
  588. RETURN Nil
  589.  
  590.  
  591. FUNCTION AskFor( cText, xWhat, cPict )
  592. Local GetList := {}
  593.     @ 15,4 say cText get xWhat color ROJO pict cPict
  594.     setcursor( SC_SPECIAL1 )
  595.     read
  596.     setcursor( 0 )
  597.     @ 15,3 say space( 40 )
  598. RETURN xWhat
  599.  
  600.  
  601. FUNCTION _AskFor2( cText, xWhat, nLen )
  602. Local GetList := {}
  603. local nCursor := setcursor( SC_SPECIAL1 )
  604. local cColor  := setcolor( ROJO )
  605. local sPantalla := savescreen( 10,10,12,10 + len( cText ) + nLen + 4 )
  606.     scroll( 10,10,12,10 + len( cText ) + nLen + 4 )
  607.     dispbox( 10,10,12,10 + len( cText ) + nLen + 4 )
  608.     @ 11,12 say cText color ROJO get xWhat color ROJO
  609.     read
  610.     restscreen( 10,10,12,10 + len( cText ) + nLen + 4, sPantalla )
  611.     setcursor( nCursor )
  612.     setcolor( cColor )
  613. RETURN xWhat
  614.  
  615.  
  616. FUNCTION _eValMacro( cMacro )
  617. local nCounter := 0
  618. local cChar
  619. cMacro := rtrim( cMacro )
  620.     while( len( cMacro ) != 0 )
  621.       ++nCounter
  622.       cChar := Cut( @cMacro )
  623.       do case
  624.         case cChar == "|"
  625.           while .not. ComReady()
  626.           Enddo
  627.           ComOutput( 13 )
  628.           ComOutput( 10 )
  629.         case cChar == "^"
  630.           Delay( 0.5 )
  631.     otherwise
  632.           while .not. ComReady()
  633.           Enddo
  634.           ComOutput( asc( cChar ) )
  635.     end case
  636.     Enddo
  637. Return( Nil )
  638.  
  639.  
  640. FUNCTION ReBaudios()
  641. local cIniColor := setcolor( VERDE )
  642. local nOpcion, sPantalla := savescreen( 6,50,10,60 )
  643.     scroll( 6,50,10,60 )
  644.     dispbox( 6,50,10,60 )
  645.     @ 7,52 prompt " 1.200 "
  646.     @ 8,52 prompt " 2.400 "
  647.     @ 9,52 prompt " 9.600 "
  648.     menu to nOpcion
  649.     do case
  650.       case nOpcion == 1
  651.     BAUDIOS := 1200
  652.       case nOpcion == 2
  653.     BAUDIOS := 2400
  654.       case nOpcion == 3
  655.     BAUDIOS := 9600
  656.       otherwise
  657.     BAUDIOS := 2400
  658.     end case
  659.     restscreen( 6,50,10,60, sPantalla )
  660. RETURN setcolor( cIniColor )
  661.  
  662.  
  663. FUNCTION RePuerto()
  664. local cIniColor := setcolor( VERDE )
  665. local nOpcion, sPantalla := savescreen( 6,50,11,60 )
  666.     scroll( 6,50,11,60 )
  667.     dispbox( 6,50,11,60 )
  668.     @ 7,52 prompt " COM 1 "
  669.     @ 8,52 prompt " COM 2 "
  670.     @ 9,52 prompt " COM 3 "
  671.     @10,52 prompt " COM 4 "
  672.     menu to nOpcion
  673.     do case
  674.       case nOpcion == 1
  675.     PUERTO := 1
  676.       case nOpcion == 2
  677.     PUERTO := 2
  678.       case nOpcion == 3
  679.     PUERTO := 3
  680.       otherwise
  681.     PUERTO := 4
  682.     end case
  683.     restscreen( 6,50,11,60, sPantalla )
  684. RETURN setcolor( cIniColor )
  685.  
  686.