home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume8 / unidraw / part01 / main.c < prev    next >
C/C++ Source or Header  |  1989-12-19  |  3KB  |  159 lines

  1. #ifndef LINT
  2. static char COPYRIGHT[]="\
  3.   COPYRIGHT --- COPYRIGHT --- COPYRIGHT --- COPYRIGHT \n\
  4.   This program is copyright 1989 Nils McCarthy. This \
  5.   program may be distributed if it is impossible for \
  6.   the distributor to get a more up-to-date-version of \
  7.   it. \n\
  8.   COPYRIGHT --- COPYRIGHT --- COPYRIGHT --- COPYRIGHT \n\
  9.   ";
  10. static char AUTHOR[]="Copyright 1989 Nils McCarthy";
  11. #endif /* LINT */
  12.  
  13. #include "unidraw.h"
  14. main(argc,argv)
  15.  int argc;
  16.  char *argv[];
  17. {
  18.    char ch;
  19.    BOOL redra;
  20.    char *readfile=NULL;
  21.    
  22.    vi=FALSE;
  23.    init();
  24.    if(argv[0][0]!='-') { /* so if people want to use unidraw as a shell,
  25.                 they can...*/
  26.       if(argc>3 || (argc==3 && strcmp(argv[1],"-v"))) {
  27.      fprintf(stderr,"Usage: unidraw [-v] [file]\n");
  28.      exit(-5547);
  29.       }
  30.       if(argc>1) {
  31.      if(argc==3) {
  32.         vi=TRUE;
  33.         readfile=argv[2];
  34.      } else if(argv[1][0]=='-') {
  35.         vi=TRUE;
  36.         printf("BIBIBI");
  37.      } else {
  38.         readfile=argv[1];
  39.      }
  40.      if(readfile) {
  41.         int c;
  42.         char *ttt;
  43.         ttt=malloc(sizeof(char)*(strlen(readfile)+8));
  44.         strcpy(ttt,"read ");
  45.         strcat(ttt,readfile);
  46.         command(ttt);
  47.      }
  48.       }
  49.    }
  50.    keymaps();
  51.    move(WINTOP+padx-padposx,WINLEFT+pady-padposy);
  52.    refresh();
  53.    
  54.    
  55.    while((ch=getchar()) != EOF) {
  56.       if(ch==up) {
  57.      pady--;
  58.      posref();
  59.       } else
  60.       if(ch==down) {
  61.      pady++;
  62.      posref();
  63.       } else
  64.       if(ch==right) {
  65.      padx++;
  66.      posref();
  67.       } else
  68.       if(ch==left) {
  69.      padx--;
  70.      posref();
  71.       } else
  72.       if(ch==up_left) {
  73.      padx--;
  74.      pady--;
  75.      posref();
  76.       } else
  77.       if(ch==up_right) {
  78.      padx++;
  79.      pady--;
  80.      posref();
  81.       } else
  82.       if(ch==down_left) {
  83.      padx--;
  84.      pady++;
  85.      posref();
  86.       } else
  87.       if(ch==down_right) {
  88.      padx++;
  89.      pady++;
  90.      posref();
  91.       } else
  92.       if(ch==pentoggle) {
  93.      pen=!pen;
  94.      move(1,5);
  95.      printw("%s",pen?"yes":"no ");
  96.       } else
  97.       if(ch==redr) {
  98.      clear();
  99.      redraw();
  100.       } else
  101.       if(ch==penkey) {
  102.      pench=getchar();
  103.      move(1,30);
  104.      printw("%c",ch);
  105.       } else
  106.       if(ch==special) {
  107.      char comm[80];
  108.      move(3,0);
  109.      printw(">"); /* command prompt */
  110.      clrtoeol(); /* Clear to end of line */
  111.      refresh();
  112.      WinGet(comm,80,"abcdefghijklmnopqrstuvwxyz ");
  113.      command(comm);
  114.       } else
  115.       if(ch==brk) {
  116.      clear();
  117.      refresh();
  118.      endwin();
  119.      exit(0);
  120.       } else
  121.       if(ch==suspend) {
  122.      kill(getpid(),18);
  123.       } else
  124.       if(ch=='?') {
  125.      help();
  126.      redraw();
  127.       } else {
  128.      pench=ch;
  129.      move(1,30);
  130.      printw("%c",ch);
  131.       }
  132.       move(WINTOP+pady-padposy,WINLEFT+padx-padposx);
  133.       redra=!0;
  134.       if(padx<0) padx++;
  135.       if(padx>PADCOLS) padx--;
  136.       if(pady<0) pady++;
  137.       if(pady>PADLINES) pady--;
  138.       if(padx<padposx+3 && padposx>0) padposx-=1;
  139.       if(pady<padposy+3 && padposy>0) padposy-=1;
  140.       if(padx>padposx+WINCOLS-3 && padposx<PADCOLS-WINCOLS) padposx+=1;
  141.       if(pady>padposy+WINLINES-3 && padposy<PADLINES-WINLINES) padposy+=1;
  142.       redraw();
  143.       if(pen) {
  144.      posref();
  145.      printw("%c",pench);
  146.      pad(pady,padx)=pench;
  147.       }
  148.       posref();
  149.       refresh();
  150.    }
  151. }
  152.  
  153. posref()
  154. {
  155.    move(1,12);
  156.    printw("%3d y: %3d",padx,pady);
  157.    move(WINTOP+pady-padposy,WINLEFT+padx-padposx);
  158. }
  159.