home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / UTILITYS / XWP11SRC.ARC / XWPTERM.C < prev    next >
Text File  |  1990-07-21  |  5KB  |  255 lines

  1. /*    XWPTERM.C
  2. **
  3. **    Simple terminal routine for XWP 
  4. */
  5.  
  6. #include "a:stdio.h"
  7. #include "b:oxege.h"
  8.  
  9. int FLecho, FLtret, GLpnums;
  10. int CUmaxright, CUmaxdown, CUline, CUcolumn;
  11. char FLdial, *GLphone;
  12. char GLdialpr[6];
  13. extern char FLbclock, FLerror, scratch[];
  14.  
  15. /*    TERM - XWP SIMPLE TERMINAL SETUP
  16. */
  17. term()
  18.     {
  19.     char csave;
  20.     csave = FLbclock;
  21.     FLbclock = NULL;
  22.     FLecho = 0;
  23.     savewindow( 0, 0, 23, 79, 0, 1 );
  24.     fill( 0, 0, 0, 79, ' ' | ATTINV, ATTDIM | ATTUND );
  25.     spoke( 0, 2, "XWP TERMINAL ", ATTDIM | ATTUND );
  26.     spoke( 0, 40, " ECHO ", ATTDIM | ATTUND );
  27.     spoke( 0, 50, " EXIT ", ATTDIM | ATTUND );
  28.     spoke( 0, 60, " RETURN ", ATTDIM | ATTUND );
  29.     message( 2, 0, "ESC FOR MENU " );
  30.     defwindow( 1, 1, 0, 22, 79 );
  31.     defcursor(3);
  32.     co( 26 );
  33.     tloop();    
  34.     defcursor(0);
  35.     savewindow( 0, 0, 23, 79, 1, 1 );
  36.     FLbclock = csave;
  37.     }
  38.  
  39. /*    TLOOP - TERMINAL LOOP
  40. */
  41. tloop()
  42.     {
  43.     char c;
  44.     CUmaxdown = 22;
  45.     CUmaxright = 80;
  46.     CUinit();
  47.     while ( 1 ) 
  48.         {
  49.         FLtret = NULL;
  50.         if( rxstat() != NULL )    
  51.             {        
  52.             CUout( rx() & 127 ); 
  53.             }        
  54.         if( cis() == CREADY )    
  55.             {        
  56.             c = ci();    
  57.             if ( c == ESC )
  58.                 {
  59.                 tmenu();
  60.                 if ( FLtret == 1)
  61.                     {
  62.                     return;
  63.                     }
  64.                 }
  65.             else
  66.                 {
  67.                 tx( c ); 
  68.                 if ( FLecho == 1 )
  69.                     { CUout( c ); }
  70.                 } 
  71.             }        
  72.         tasks();
  73.         }
  74.     }
  75.  
  76. tmenu()
  77.     {
  78.     int choice;
  79.     defcursor( 0 );
  80.     setmenu( 1, 10, " ECHO " );
  81.     setmenu( 2, 10, " EXIT " );
  82.     setmenu( 3, 10, " RETURN " );
  83.     choice = menu( 0, 40, 3, 1, 10, 0 );
  84.     setwindow( 1 );
  85.  
  86.     switch( choice )
  87.         {
  88.         case 1:
  89.             FLecho = !FLecho;
  90.             if( FLecho )
  91.                 {
  92.                 spoke( 0, 70, " ECHO ON ", ATTDIM | ATTUND );
  93.                 }
  94.             else
  95.                 {
  96.                 spoke( 0, 70, "         ", ATTDIM | ATTUND );
  97.                 }
  98.             break;
  99.         case 2:
  100.             FLtret = 1;
  101.             break;
  102.         case 3:
  103.             break;
  104.         }
  105.     CUrestore();
  106.     defcursor( 3 );
  107.     }
  108.  
  109.  
  110. CUinit()
  111.     {
  112.     adr( 0, 0 );
  113.     CUline = 0;
  114.     CUcolumn = 0;
  115.     }
  116.  
  117. CUout( character )
  118.     int character;
  119.     {
  120.     if( iscntrl( character ))
  121.         {
  122.         switch( character )
  123.             {
  124.             case LF:
  125.                 CUline++;
  126.                 CUcolumn--;
  127.                 break;
  128.             case CR:
  129.                 CUcolumn = NULL;
  130.                 CUcolumn--;
  131.                 break;
  132.             default:
  133.                 return;
  134.             }
  135.         }
  136.     co( character );
  137.     CUcolumn++;
  138.     if( CUcolumn > CUmaxright )
  139.         {
  140.         CUcolumn = 0;
  141.         CUline++;
  142.         }
  143.     if( CUline > CUmaxdown )
  144.         {
  145.         CUline = CUmaxdown;
  146.         }
  147.     }
  148.  
  149. CUrestore()
  150.     {
  151.     adr( CUline, CUcolumn );
  152.     }
  153.  
  154. /*    DIAL -- Dial a telephone number
  155. **    
  156. **    FLdial = status of dial initialization:
  157. **        0   = not initialized
  158. **        1   = initialized and ok
  159. **        127 = attempt to initialize failed
  160. **
  161. **    GLphone data structure:
  162. **        10 possible fields of:
  163. **            10 bytes    identifier string
  164. **            15 bytes    phone number
  165. **    GLpnums = number of phone numbers found by dailinit()
  166. */
  167. dial()
  168.     {
  169.     int counter, choice;
  170.     char *pointer;
  171.     /* First check FLdial status and initialize if necessary */
  172.     if( FLdial == NULL )
  173.         {
  174.         dialinit();
  175.         }
  176.     if( FLdial == 127 )
  177.         {
  178.         error( "XWP.PHN NOT FOUND" );
  179.         FLerror = 0;
  180.         return;
  181.         }
  182.     /* Now set up menu areas */
  183.     pointer = GLphone;
  184.     counter = 0;
  185.     while( counter < GLpnums )
  186.         {
  187.         strcpy( scratch, " " );
  188.         strcat( scratch, pointer );
  189.         setmenu( counter+1, 13, scratch );
  190.         pointer += 25;
  191.         ++counter;
  192.         }
  193.     setmenu( counter+1, 13, " RETURN " );
  194.     /* Save the environment */
  195.     savewindow( 2, 63, 5+GLpnums, 77, 0, 1 );    
  196.     /* Draw menu area */
  197.     outline( 2, 63, 5+GLpnums, 77, OUTBLK, ATTDIM | ATTALT );
  198.     fill( 3, 64, 3, 76, ' ' | ATTINV, ATTDIM | ATTUND );
  199.     spoke( 3, 64, " AUTODIALER: ", ATTDIM | ATTUND );
  200.     /* accept choice from menu */
  201.     choice = menu( 4, 64, 1, GLpnums+1, 13, 1 );
  202.     setwindow( 0 );
  203.     /* restore environment  */
  204.     savewindow( 2, 63, 5+GLpnums, 77, 1, 1);
  205.     /* execute the choice */
  206.     if( choice <= GLpnums )
  207.         {
  208.         pointer = GLphone-15;
  209.         txstring( GLdialpr );
  210.         txstring( pointer + ( choice * 25 ) );
  211.         tx( CR );
  212.         }
  213.     }
  214.  
  215. dialinit()
  216.     {
  217.     int pdatfile, counter;
  218.     char *pointer;
  219.     if( ( pdatfile = fopen( "XWP.PHN", "r" ) ) == NULL )
  220.         {
  221.         FLdial = 127;
  222.         return;
  223.         }
  224.     FLdial = 1;
  225.     pointer = GLphone = malloc( 500 );
  226.     counter = 0;
  227.     /* read dial prefix */
  228.     fscanf( pdatfile, "%s", GLdialpr );
  229.     while( !feof( pdatfile ) )
  230.         {
  231.         fscanf( pdatfile, "%s %s", pointer, pointer+10 );
  232.         pointer += 25;
  233.         ++counter;
  234.         }
  235.     GLpnums = counter-1;    /* subtract the last (null) line */
  236.     }
  237.  
  238. txstring( string )
  239.     char *string;
  240.     {
  241.     char *pointer;
  242.     pointer = string;
  243.     while( *pointer != NULL )
  244.         {
  245.         tx( *pointer );
  246.         ++pointer;
  247.         }
  248.     }
  249.  *string;
  250.     {
  251.     char *pointer;
  252.     pointer = string;
  253.     while( *pointer != NULL )
  254.         {
  255.