home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 199_01 / ged1.c < prev    next >
Text File  |  1987-12-17  |  8KB  |  340 lines

  1. /*
  2. Header:          CUG199;
  3. Title:           Module 1 of ged editor;
  4. Last Updated:    12/02/87;
  5.  
  6. Description:    "PURPOSE:  environment; change files";
  7.  
  8. Keywords:        e, editor, qed, ged, DeSmet, MSDOS;
  9. Filename:        ged1.c;
  10. Warnings:       "O file must be present for link of ged";
  11.  
  12. Authors:         G. Nigel Gilbert, James W. Haefner, and Mel Tearle;
  13. Compilers:       DeSmet 3.0;
  14.  
  15. References:
  16. Endref;
  17. */
  18.  
  19. /*
  20. e/qed/ged  screen editor
  21.  
  22. (C) G. Nigel Gilbert, MICROLOGY, 1981 -  August-December 1981
  23.  
  24. Modified:   Aug-Dec   1984:  BDS-C 'e'(vers 4.6a) to 'qe' (J.W. Haefner)
  25.             March     1985:  BDS-C 'qe' to DeSmet-C 'qed' (J.W. Haefner)
  26.  
  27.             May       1986:  qed converted to ged         (Mel Tearle)
  28.             August    1987:  ged converted to MSC 4.0     (Mel Tearle)
  29.  
  30. File:       qed1.c
  31.  
  32. Functions:  system, dirmsk, getcurdir, files, putonoff
  33.             getnumb, getlow
  34. */
  35.  
  36.  
  37. #ifndef  TC
  38. #include "ged.h"
  39. #else
  40. #include "ged.t"
  41. #endif
  42.  
  43.  
  44. /* execute a program from within ged and do clean-up for screen
  45.  */
  46. void run(display,program,flag)
  47. char *display;
  48. char *program;
  49. int   flag;
  50. {
  51. int  i = 1;
  52. char *s[6];  /* six options */
  53.  
  54. scr_delete( 0, 0 );  putstr( display );
  55.  
  56. if ( dirmsk() == YES )  {
  57.      scr_delete( 0, 0 );
  58.      goto  quit;
  59. }
  60.  
  61. scr_delete( 0, 24 );  scr_cls(1);
  62.  
  63. #ifndef DS
  64.   s[i] = strtok( patt, " " );
  65.   while ( s[i++] != NULL )  {
  66.           s[i] = strtok( NULL, " " );
  67.   }
  68.   spawnv( P_WAIT, program, s );
  69. #else
  70.   exec( program, patt );
  71. #endif
  72.  
  73. getkey();
  74. scr_delete( 0, 24 );  scr_clr();
  75.  
  76. quit:
  77.   topline = 1;
  78.   if ( screen )  show_table( screen );
  79.   if ( flag  )  {
  80.        blankedmess = YES;
  81.        putpage();
  82.        putstatusline( cline );
  83.        show_fkeys();
  84.   }
  85. }
  86.  
  87.  
  88. /* display function key definitions at bottom of screen
  89.  */
  90. void show_fkeys()
  91. {
  92. scr_putstr( 0, 24,
  93. "F1Help █F2Time █F3Left █F4Rght █F5Save █F6Ls █F7More █F8Grep █F9Graph █F10Reset ",
  94. REVS );
  95. }
  96.  
  97.  
  98. /* returns dir mask using patt for directory search
  99.  */
  100. char dirmsk()
  101. {
  102. char *pattp;
  103.  
  104. pattp = patt;
  105. if ( scans( patt, FILELEN ) == ESCKEY )  return  YES;
  106. if ( !*pattp )  pattp = "*.*";
  107. return NO;
  108. }
  109.  
  110.  
  111. /* display or re-set ged's startup globals
  112.  */
  113. void envir()
  114. {
  115. putonoff( autoin );
  116.  
  117. puttext();
  118. scr_clr();
  119. blankedmess = YES;
  120.  
  121. putstatusline( cline );
  122. scr_delete( 0, 24);
  123. show_envir();
  124.  
  125. do {
  126.   switch( getlow() )  {
  127.       case 'a':
  128.         autoin = ( char ) !autoin;
  129.         show_envir();
  130.         break;
  131.       case 'b':
  132.         backup = ( char ) !backup;
  133.         show_envir();
  134.         break;
  135.       case 'h':
  136.         blockscroll = ( char ) !blockscroll;
  137.         show_envir();
  138.         break;
  139.       case 'r':
  140.         scr_xy( 0, 18 ); putstr( "|Enter new |R|ight Margin: " );
  141.         if ( !( rtmarg = getnumb() ) )   rtmarg = REFORM;
  142.         show_envir();
  143.         break;
  144.       case 't':
  145.         scr_xy( 0, 18 ); putstr( "|Enter new |tab width|: " );
  146.         if ( !( tabwidth = getnumb() ) )  tabwidth = 0;
  147.         show_envir();
  148.         break;
  149.       case 's':
  150.         trail = ( char ) !trail;
  151.         show_envir();
  152.         break;
  153.       case 'f':
  154.         if ( files() )  goto escape;
  155.         break;
  156.       case 'q':
  157.       case ESCKEY:
  158.       case F10KEY:
  159.         goto escape;
  160.       }
  161. }
  162. while (YES);
  163.  
  164. escape:
  165.   scr_clr();
  166.   topline = 1;
  167.   if ( screen )  show_table( screen );
  168.   putpage();
  169.   blankedmess = YES;
  170.   putstatusline( cline );
  171. }
  172.  
  173.  
  174. void show_envir()
  175. {
  176. struct addr anaddr;
  177.  
  178.   scr_xy(0,4);
  179.   putstr("Edit context:\n\n");
  180.   putstr("  |enter |F| for file context\n\n");
  181.   putstr("A|uto indent:                    ");
  182.   putonoff(autoin);
  183.   putstr("|make |B|ackup of original file:   ");
  184.   putonoff(backup);
  185.   putstr("T|ab stops every                  ");
  186.   uspr(tabwidth,0L);
  187.   putstr("\nS|trip trailing blanks,tabs      ");
  188.   putonoff(!trail);
  189.   putstr("H|orizontal scroll whole page    ");
  190.   putonoff(blockscroll);
  191.   putstr("R|ight Margin                    ");
  192.   uspr(rtmarg,0L);
  193.   putstr("\n|Memory allows for no more than ");
  194.   uspr( ((slotsinmem-2)*(PAGESIZE/(sizeof(anaddr)))) ,0L);
  195.   putstr("| lines of text");
  196.  
  197.   scr_xy( 0, 16 ); putstr("To change, enter capital letter, or enter |Q| to return: ");
  198.   scr_delete( 0, 18 );
  199. }
  200.  
  201.  
  202. int files()
  203. {
  204. char oldname[15], newname[15], dc, c;
  205. char curdir[64], *curdirp, *tp;
  206. int  dir;
  207.  
  208. do  {
  209.    scr_clr();  putstatusline( cline );   scr_delete( 0,24 );
  210. newcomm: 
  211.   dir = curdsk;
  212.   errmess = NULL;
  213.   scr_xy( 0, 1 );
  214.   putstr( "Q| to return to Edit context  |D| to delete a file\n" );
  215.   putstr( "R| to rename a file           |P| to change/show path \n" );
  216.   putstr( "C| to change the name of the edited file " );
  217.   putstr( filename );
  218.   c = getlow();
  219.   switch (c)  {
  220.     case ESCKEY:
  221.       return  YES;
  222.     case 'q':
  223.       return  NO;
  224.     case 'p':
  225.       tp = curdirp = curdir;
  226.       *curdirp = 0;
  227.       scr_delete( 6, 4 );
  228.       putstr( "Drive: " );
  229.  
  230. /*  if ( ( c = getscankey() ) == CR || c == ESCKEY )
  231.                  dir++;
  232.  */
  233.       if ( ( c = getkey() ) == CR )
  234.              dir++;
  235.       else dir = ( toupper(c)-'@' );        /*A=1,B=2...*/
  236.  
  237.       #ifdef  DS
  238.         if ( getdir( dir, curdirp ) == FAIL )  goto newcomm;
  239.       #else
  240.         if ( getcwd( curdirp, FILELEN ) == NULL )  goto newcomm;
  241.       #endif
  242.  
  243.       scr_delete( 6, 4 );
  244.       putstr( "|Current directory: |" );
  245.  
  246.       #ifndef  DS
  247.         putstr( curdirp );
  248.       #else
  249.         scr_co( ( dir + '@' ) );
  250.         putstr( ":\\" );
  251.         putstr( curdirp );
  252.       #endif
  253.  
  254.       putstr( "|  Enter new directory: |" );
  255.       scans( curdir, FILELEN );
  256.  
  257.       if ( !( *curdirp ) )  goto  newcomm;      /* drive specified? */
  258.  
  259. /*    while( ( dc = *(tp++) ) && dc != ':' );
  260.  *     && dc != ':' )  tp++;
  261.  */
  262.       while( *(tp) )  {
  263.         if ( *tp == ':' ) break;
  264.         dc = *tp;
  265.         tp++;
  266.       }
  267.  
  268.       if ( dc )  {
  269.            if ( ( dir = toupper( *(tp-2))-'A') < 0  ||  dir > 16 )  {
  270.             /*if (seldisk(dir)) continue;
  271.               curdsk = dir; */
  272.               *curdirp = ( char ) curdsk + 'A';
  273.            }
  274.       }
  275.       chdir( curdirp );
  276.       scr_delete( 6, 4 );
  277.       goto  newcomm;
  278.     default:
  279.             if ( c == 'r' || c == 'd' || c == 'c' )  {
  280.                  scr_delete( 6, 4 );
  281.                  putstr( "Name of file: " );
  282.                  scans( oldname, FILELEN );
  283.                  if ( !oldname[0] )  goto  newcomm;
  284.                  format( oldname );
  285.              }
  286.             switch (c)  {
  287.               case 'd':
  288.                 if ( funlink( oldname ) == FAIL )  {
  289.                      error( "Can't delete" );
  290.                      goto  newcomm;
  291.                 }
  292.                 break;
  293.               case 'r' :
  294.                 scr_delete( 6, 5 );
  295.                 putstr( "New name:     " );
  296.                 scans( newname, 15 );
  297.                 format( newname );
  298.                 if ( !newname[0] || frename( oldname, newname ) == FAIL )  {
  299.                      error( "Can't rename" );
  300.                      goto newcomm;
  301.                 }
  302.                 break;
  303.               case 'c'  :
  304.                 strcpy( filename, oldname );
  305.                 setstatusname();
  306.                 putstatusline( cline );
  307.               default:
  308.                 goto  newcomm;
  309.               }
  310.            }
  311.  
  312.         } 
  313. while (YES);
  314. }
  315.  
  316.  
  317. void putonoff(flag)
  318. int  flag;
  319. {
  320. putstr( (flag) ? "ON\n" : "OFF\n" );
  321. }
  322.  
  323.  
  324. int getnumb()
  325. {
  326. int i, n;
  327. char c, numb[5];
  328.  
  329. scans( numb, 5 );
  330. n = 0;
  331. for ( i = 0; i < 5; i++ )  {
  332.       c = numb[i];
  333.      if ( c >= '0' && c <= '9' )  n = n*10 + c - '0';
  334. }
  335. return n;
  336. }
  337.  
  338.  
  339. /* that's all */
  340.