home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 545a.lha / PowerVisor_v1.0 / Source.LZH / Source / CheckBrackets.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-08-31  |  1.0 KB  |  54 lines

  1. #include <exec/types.h>
  2. #include <pragmas/exec.h>
  3. #include <intuition/intuition.h>
  4. #include <string.h>
  5.  
  6. int __saveds __asm Bracket (register __a0 char *cmdline, register __a2 APTR table[])
  7. {
  8.     char __regargs * (*GetLine)();
  9.     void __regargs (*RefreshStringGadget)();
  10.     struct StringInfo __regargs * (*GetStringInfo)();
  11.     char *p,t,o;
  12.     struct StringInfo *si;
  13.     int i,d,l,found;
  14.  
  15.     GetLine = table[12];
  16.     GetStringInfo = table[20];
  17.     RefreshStringGadget = table[5];
  18.  
  19.     p = GetLine ();
  20.     si = GetStringInfo ();
  21.  
  22.     i = si->BufferPos;
  23.  
  24.     switch (t = p[i])
  25.         {
  26.             case '(' : o = ')'; d= 1; break;
  27.             case ')' : o = '('; d=-1; break;
  28.             case '{' : o = '}'; d= 1; break;
  29.             case '}' : o = '{'; d=-1; break;
  30.             case '[' : o = ']'; d= 1; break;
  31.             case ']' : o = '['; d=-1; break;
  32.             default  : return;
  33.         }
  34.  
  35.     i += d;
  36.     l = 1;
  37.     found = -1;
  38.     while (i >= 0 && i <= si->NumChars)
  39.         {
  40.             if (p[i] == t) l++;
  41.             else if (p[i] == o) l--;
  42.             if (!l)
  43.                 {
  44.                     found = i;
  45.                     i = -2;
  46.                 }
  47.             else i += d;
  48.         }
  49.  
  50.     if (found >= 0) si->BufferPos = found;
  51.  
  52.     RefreshStringGadget ();
  53. }
  54.