home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d3xx / d306 / rexxplplot.lha / RexxPlPlot / src / src.zoo / pldeco.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-01-06  |  3.6 KB  |  130 lines

  1. /* Decode a character string, and return an array of integer symbol */
  2. /* numbers. This routine is responsible for interpreting all escape */
  3. /* sequences. At present the following escape sequences are defined */
  4. /* (the letter following the \ may be either upper or lower case): */
  5.  
  6. /* \u       :      up one level (returns -1) */
  7. /* \d       :      down one level (returns -2) */
  8. /* \b       :      backspace (returns -3) */
  9. /* \+       :      toggles overline mode (returns -4) */
  10. /* \-       :      toggles underline mode (returns -5) */
  11. /* \\       :      \, returns the code for backslash */
  12. /* \gx      :      greek letter corresponding to roman letter x */
  13. /* \fn      :      switch to Normal font */
  14. /* \fr      :      switch to Roman font */
  15. /* \fi      :      switch to Italic font */
  16. /* \fs      :      switch to Script font */
  17. /* \(nnn)   :      Hershey symbol number nnn (any number of digits) */
  18.  
  19. #include "plplot.h"
  20. #include <stdio.h>    /* include for definition of NULL */
  21. #ifndef AZTEC_C
  22. #include <string.h>
  23. #endif
  24.  
  25. static char font[] = "nrisnris";
  26. static char greek[] = "ABGDEZYHIKLMNCOPRSTUFXQWabgdezyhiklmncoprstufxqw";
  27.  
  28. extern short int *hersh[];
  29.  
  30. void pldeco(symbol,length,text)
  31. int symbol[],*length;
  32. char text[];
  33. {
  34.       int ch,icol,ifont,ig,j,lentxt;
  35.       char test;
  36.  
  37.       /* Initialize parameters. */
  38.  
  39.       lentxt=strlen(text);
  40.       *length=0;
  41.       j=0;
  42.       gatt(&ifont,&icol);
  43.  
  44.       /* Get next character; treat non-printing characters as spaces. */
  45.  
  46. lab100:
  47.       j=j+1;
  48.       if (j>lentxt) return;
  49.       test=text[j-1];
  50.       ch=test;
  51.       if (ch<0)   ch = 32;
  52.  
  53.       if (ch>175) ch = 32;
  54.  
  55.       /* Test for escape sequence (\) */
  56.  
  57.       if (ch=='\\') {
  58.         if ((lentxt-j)>=1) {
  59.           test=text[j];
  60.           if (test=='\\')
  61.             j = j+1;
  62.           else if (test=='U' || test=='u') {
  63.             *length = *length + 1;
  64.             symbol[*length-1] = -1;
  65.             j = j+1;
  66.             goto lab100;
  67.           }
  68.           else if (test=='D' || test=='d') {
  69.             *length = *length + 1;
  70.             symbol[*length-1] = -2;
  71.             j = j+1;
  72.             goto lab100;
  73.           }
  74.           else if (test=='B' || test=='b') {
  75.             *length = *length + 1;
  76.             symbol[*length-1] = -3;
  77.             j = j+1;
  78.             goto lab100;
  79.           }
  80.           else if (test=='+') {
  81.             *length = *length + 1;
  82.             symbol[*length-1] = -4;
  83.             j = j+1;
  84.             goto lab100;
  85.           }
  86.           else if (test=='-') {
  87.             *length = *length + 1;
  88.             symbol[*length-1] = -5;
  89.             j = j+1;
  90.             goto lab100;
  91.           }
  92.           else if (test=='(') {
  93.             *length = *length + 1;
  94.             symbol[*length-1] = 0;
  95.             j = j+2;
  96. lab10:
  97.             if ('0'<=text[j-1] && text[j-1]<='9') {
  98.               symbol[*length-1] = symbol[*length-1]*10 + text[j-1] - '0';
  99.               j = j+1;
  100.               goto lab10;
  101.             }
  102.             if (text[j-1]!=')') j = j-1;
  103.             goto lab100;
  104.           }
  105.           else if (test=='F' || test=='f') {
  106.             test=text[j+1];
  107.             ifont = strpos(font,test) + 1;
  108.             if (ifont>4) ifont = ifont-4;
  109.             if (ifont==0) ifont = 1;
  110.             j = j+2;
  111.             goto lab100;
  112.           }
  113.           else if (test=='G' || test=='g') {
  114.             test=text[j+1];
  115.             ig = strpos(greek,test) + 1;
  116.             *length = *length + 1;
  117.             symbol[*length-1] = *(hersh[ifont-1] + 127 + ig);
  118.             j = j+2;
  119.             goto lab100;
  120.           }
  121.         }
  122.       }
  123.  
  124.       /* Decode character. */
  125.  
  126.       *length = *length + 1;
  127.       symbol[*length-1] = *(hersh[ifont-1]+ch);
  128.       goto lab100;
  129. }
  130.