home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1456 / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-28  |  1.6 KB  |  88 lines

  1.  
  2. /*
  3.  * Copyright (C) 1990 Jay Konigsberg - see Makefile for details
  4.  * This is Free Software, distrubited under the GNU Software Aggrement.
  5.  */
  6.  
  7. #include "simped.h"
  8.  
  9. /*
  10. Global for interrupt routine: cleanup()
  11. */
  12. struct        termio    ttyset;        /* terminal settings */
  13. unsigned    short    c_lflag_hold;    /* hold original values for reset */
  14. unsigned    char    VEOF_hold;    /* hold original value for reset */
  15.  
  16. void main(argc, argv)
  17. int    argc;
  18. char    **argv;
  19. {
  20. int    fprintf(),
  21.     ioctl();
  22.  
  23. void    commands(),
  24.     exit();
  25.  
  26. extern    int    cleanup();
  27.  
  28. char    *editfile=NULL;        /* The file being edited */
  29.  
  30. int    newfile=FALSE;        /* new or existing file */
  31.  
  32. FILE    *fopen(),
  33.     *fd=stdin;        /* file descriptor for command line */
  34.  
  35. /*
  36. was a filename was entered on the command line?
  37. */
  38. if (argc > 2)
  39.     {
  40.     fprintf(stderr, "%s: one file maximum on command line\n", argv[0]);
  41.     exit(2);
  42.     }
  43. else
  44.     {
  45.     if (argc == 2)
  46.     {
  47.     if ((fd = fopen(argv[1], "r+")) == NULL)
  48.         {
  49.         newfile = TRUE;
  50.         if ((fd = fopen(argv[1], "a")) == NULL)
  51.         {
  52.         fprintf(stderr,"fopen failed: error=%d\n", errno);
  53.         exit(2);
  54.         }
  55.         }
  56.     editfile = argv[1];
  57.     }
  58.     else
  59.     {
  60.     newfile = TRUE;
  61.     editfile = NULL;
  62.     fd = stdin;
  63.     }
  64.     }
  65.  
  66. /*
  67. enter raw mode
  68. */
  69. if ( ioctl(0, TCGETA, &ttyset) == -1 )
  70.     {
  71.     fprintf(stderr, "ioctl: error=%d\n", errno);
  72.     exit(2);
  73.     }
  74. c_lflag_hold=ttyset.c_lflag;
  75. VEOF_hold = ttyset.c_cc[4];
  76. ttyset.c_cc[4] = (unsigned char)1;
  77. ttyset.c_lflag &= ~(ICANON | ECHO);
  78.  
  79. if ( ioctl(0, TCSETAW, &ttyset) == -1 )
  80.     {
  81.     fprintf(stderr, "ioctl: error=%d\n",errno);
  82.     }
  83. signal(SIGINT, cleanup);
  84.  
  85. commands(editfile, &newfile, fd);
  86. /*NOTREACHED*/
  87. }
  88.