home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_26_1988_Transactor_Publishing.d64 / screen.c < prev    next >
Text File  |  2023-02-26  |  4KB  |  253 lines

  1. /* screen.c - screen routines */
  2. /* W Mat Waites - Sept 1988 */
  3.  
  4. #include <stdio.h>
  5.  
  6. #define PLOT 0xfff0
  7.  
  8. /* initscr() - initialize cursor, etc */
  9. initscr()
  10. {SHIFT-+}
  11.   int i;
  12.   char *tmp;
  13.   char *sprite0 = 0x07f8;
  14.   char *spcol0 =  0xd027;
  15.  
  16.   /* cursor sprite is defined in
  17.      basic input buffer */
  18.  
  19.   /* put sprite 0 at $0200 */
  20.   *sprite0 = 8;
  21.  
  22.   /* set color to white */
  23.   *spcol0 = 1;
  24.  
  25.   /* first, set sprite to all bgd */
  26.   for(i=0; i<64; i++)
  27.     {SHIFT-+}
  28.     tmp = 0x0200 + i;
  29.     *tmp = 0;
  30.     {SHIFT--}
  31.  
  32.   /* fill in fgd of sprite */
  33.   for(i=7; i<8; i++)
  34.     {SHIFT-+}
  35.     tmp = 0x0200 + 3*i;
  36.     *tmp = 0xff;
  37.     {SHIFT--}
  38. {SHIFT--}
  39.  
  40. /* cursoron() - turn on cursor */
  41. cursoron()
  42. {SHIFT-+}
  43.   char *enab = 0xd015;
  44.  
  45.   *enab = 0x01; /* turn on sprite 0 */
  46. {SHIFT--}
  47.  
  48. /* cursoroff() - turn off cursor */
  49. cursoroff()
  50. {SHIFT-+}
  51.   char *enab = 0xd015;
  52.  
  53.   *enab = 0x00; /* turn off sprite 0 */
  54. {SHIFT--}
  55.  
  56. /* updatecursor() - correct sprite loc */
  57. updatecursor()
  58. {SHIFT-+}
  59.   char *cury, *curx;
  60.   char *ypos, *xpos;
  61.   char *highx;
  62.   int sy, sx;
  63.  
  64.   cury = 0x00d6;
  65.   curx = 0x00d3;
  66.   xpos = 0xd000;
  67.   ypos = 0xd001;
  68.   highx = 0xd010;
  69.  
  70.   /* compute cursor screen location */
  71.   sy = (int)*cury;
  72.   sx = (int)*curx;
  73.   if(sx > 39) /* check for wrap */
  74.     {SHIFT-+}
  75.     sx -= 40;
  76.     {SHIFT--}
  77.   sy = sy << 3;
  78.   sx = sx << 3;
  79.   sy += 50;
  80.   sx += 24;
  81.  
  82.   *ypos = (char)sy;
  83.   *xpos = (char)sx;
  84.   if(sx > 255)
  85.     {SHIFT-+}
  86.     *highx = 0x01;
  87.     {SHIFT--}
  88.   else
  89.     {SHIFT-+}
  90.     *highx = 0x00;
  91.     {SHIFT--}
  92. {SHIFT--}
  93.  
  94. /* erase() - clear screen */
  95. erase()
  96. {SHIFT-+}
  97.   putchar((char)147);
  98. {SHIFT--}
  99.  
  100. /* standout() - reverse video */
  101. standout()
  102. {SHIFT-+}
  103.   putchar((char)18);
  104. {SHIFT--}
  105.  
  106. /* standend() - standard video */
  107. standend()
  108. {SHIFT-+}
  109.   putchar((char)146);
  110. {SHIFT--}
  111.  
  112. /* center() - center string on line */
  113. center(y, str)
  114. int y;
  115. char *str;
  116. {SHIFT-+}
  117.   int x;
  118.  
  119.   x = 20 - strlen(str)/2;
  120.   move(y, x);
  121.   printf(str);
  122. {SHIFT--}
  123.  
  124. /* move() - cursor positioning */
  125. move(y, x)
  126. int y, x;
  127. {SHIFT-+}
  128.   char ac, xc, yc;
  129.  
  130.   /* check for bozo parameters */
  131.   if(y > 24) y = 24;
  132.   if(y < 0) y = 0;
  133.   if(x > 79) x = 79;
  134.   if(x < 0) x = 0;
  135.  
  136.   xc = (char)y;
  137.   yc = (char)x;
  138.  
  139.   sys(PLOT, &ac, &xc, &yc);
  140. {SHIFT--}
  141.  
  142. /* setborder() - set border color */
  143. setborder(color)
  144. int color;
  145. {SHIFT-+}
  146.   char *border = 0xd020;
  147.  
  148.   *border = (char)color;
  149. {SHIFT--}
  150.  
  151. /* setbg() - set background color */
  152. setbg(color)
  153. int color;
  154. {SHIFT-+}
  155.   char *bg = 0xd021;
  156.  
  157.   *bg = (char)color;
  158. {SHIFT--}
  159.  
  160. /* setfg() - set foreground color */
  161. setfg(color)
  162. int color;
  163. {SHIFT-+}
  164.   static char colchars[16] =
  165.     {SHIFT-+}
  166.     144,  /* black */
  167.     5,    /* white */
  168.     28,   /* red */
  169.     159,  /* cyan */
  170.     156,  /* purple */
  171.     32,   /* green */
  172.     31,   /* blue */
  173.     158,  /* yellow */
  174.     129,  /* orange */
  175.     149,  /* brown */
  176.     150,  /* lt. red */
  177.     151,  /* grey 1 */
  178.     152,  /* grey 2 */
  179.     153,  /* lt. green */
  180.     154,  /* lt. blue */
  181.     155   /* grey 3 */
  182.     {SHIFT--};
  183.  
  184.   if(color < 0) color = 0;
  185.   if(color > 15) color = 15;
  186.  
  187.   putchar(colchars[color]);
  188. {SHIFT--}
  189.  
  190. /* getstring() - get string with echo */
  191. getstring(s, len)
  192. char *s;
  193. int len;
  194. {SHIFT-+}
  195.   int done, kbchar, ll;
  196.   char *ls;
  197.  
  198.   done = 0;
  199.   ll = 0;
  200.   ls = s;
  201.   *ls = '\0';
  202.   updatecursor();
  203.   cursoron();
  204.  
  205.   while(!done)
  206.     {SHIFT-+}
  207.     /* check for <C=> key */
  208.     if(chkstop())
  209.       {SHIFT-+}
  210.       cursoroff();
  211.       return(0);
  212.       {SHIFT--}
  213.     if(charsinq() > 0)
  214.       {SHIFT-+}
  215.       kbchar = getkb();
  216.       /* only printable characters */
  217.       if(isprint(kbchar))
  218.         {SHIFT-+}
  219.         *ls = (char)kbchar;
  220.         ls++;
  221.         ll++;
  222.         *ls = '\0';
  223.         putchar((char)kbchar);
  224.         updatecursor();
  225.         if(ll >= len)
  226.           {SHIFT-+}
  227.           done = 1;
  228.           {SHIFT--}
  229.         {SHIFT--}
  230.       else if(kbchar == 13)
  231.         {SHIFT-+}
  232.         done = 1;
  233.         {SHIFT--}
  234.       else if(kbchar == 20)
  235.         {SHIFT-+}
  236.         /* backspace */
  237.         if(ll > 0)
  238.           {SHIFT-+}
  239.           ll--;
  240.           ls--;
  241.           *ls = '\0';
  242.           putchar((char)20);
  243.           updatecursor();
  244.           {SHIFT--}
  245.         {SHIFT--}
  246.       {SHIFT--}
  247.     {SHIFT--}
  248.   cursoroff();
  249.   return(strlen(s));
  250. {SHIFT--}
  251.  
  252. /* end of file */
  253.