home *** CD-ROM | disk | FTP | other *** search
/ Shareware Supreme Volume 6 #1 / swsii.zip / swsii / 220 / MMPI.ZIP / QDUMP.C < prev    next >
Text File  |  1992-03-21  |  3KB  |  153 lines

  1. #include <ctype.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4.  
  5. // A few definitions to make life nicer.
  6.  
  7. #define MAX_QUESTIONS    1000
  8. #define Q_       rslt[0]  // ?    Unanswered question
  9. #define F_       rslt[1]  // F     Validity
  10. #define K_       rslt[2]  // K     Correction
  11. #define Hs_       rslt[3]  // Hs    Hypochondriasis
  12. #define D_       rslt[4]  // D     Depression
  13. #define Hy_       rslt[5]  // Hy    Hysteria
  14. #define Pd_       rslt[6]  // Pd    Psychopathic deviant
  15. #define Mf_M   rslt[7]  // Mf    Masculinity-femininity    Male
  16. #define Mf_F   rslt[8]  // Mf    Masculinity-femininity    Female
  17. #define Pa_       rslt[9]  // Pa    Paranoia
  18. #define Pt_       rslt[10] // Pt    Psychasthenia
  19. #define Sc_       rslt[11] // Sc    Schizophrenia
  20. #define Ma_       rslt[12] // Ma    Hypomania
  21. #define Si_       rslt[13] // Si    Social introversion
  22. #define L_       rslt[14] // L     Lie
  23.  
  24. char *testLabel[] = {
  25.     "Q",
  26.     "F",
  27.     "K",
  28.     "Hs",
  29.     "D",
  30.     "Hy",
  31.     "Pd",
  32.     "MfM",
  33.     "MfF",
  34.     "Pa",
  35.     "Pt",
  36.     "Sc",
  37.    "Ma",
  38.     "Si",
  39.     "L"
  40. };
  41.  
  42.  
  43. char key[MAX_QUESTIONS][15]; // Set aside answer key table
  44. int last_q=399;
  45. int noqfile;
  46.  
  47. void main(void);
  48. void dmp_test(void);
  49. void edgePrint(char *);
  50.  
  51. void main(void)
  52. {
  53. FILE *fd;
  54. char ks[255],c,poln[16];
  55. int qn,pol;
  56.  
  57. // Clear out answer keys
  58.  
  59.     for(qn=0;qn<MAX_QUESTIONS;++qn) {
  60.         for(pol=0;pol<=15;++pol)
  61.             key[qn][pol]=' ';
  62.         }
  63.  
  64. // Read in keys
  65.  
  66.     for(pol=1;pol<=14;++pol) {
  67.         sprintf(poln, "KEY.%s", testLabel[pol]);
  68.         fd=fopen(poln,"r");
  69.         while(feof(fd)==0) {
  70.             fgets(ks,255,fd);
  71.             if(isdigit(ks[0])!=0)
  72.                 {
  73.                 sscanf(ks,"%d. %c",&qn,&c);
  74.                 if(qn<MAX_QUESTIONS)
  75.                     key[qn][pol]=c;
  76.                 }
  77.             }
  78.         fclose(fd);
  79.         }
  80.     dmp_test();
  81. }
  82.  
  83. void dmp_test(void)
  84. {
  85. int pol,qn,c;
  86. FILE *fd1;
  87. char str[256];
  88. char *pos;
  89.  
  90. // Add up all of the raw scores and questions
  91.     fd1=fopen("TEST.TXT","r");
  92.  
  93.     printf("#MMPI FORM R and answer keys.\n");
  94.  
  95.     for(qn=1;qn<=last_q;++qn) {
  96.         do
  97.             if (fgets(str,255,fd1) != str) {
  98.                 fclose (fd1);
  99.                 return;
  100.             }
  101.         while(isdigit(str[0])==0);
  102.  
  103.     // Get rid of newline and spurious formatting
  104.         for (c = strlen(str) - 1; c && isspace(str[c]); --c)
  105.             str[c]='\0';
  106.         pos = str;
  107.       //for (pos = str; *pos != '.'; ++ pos);
  108.         //while (isspace(*++pos));
  109.  
  110.         printf("\n");
  111.         edgePrint(pos);
  112.         for(pol=1;pol<=14;++pol)
  113.             if (key[qn][pol] != ' ')
  114.                 printf("%s\t%c\n", testLabel[pol], key[qn][pol]);
  115.         }
  116.         printf("\n");
  117.     fclose(fd1);
  118. }
  119.  
  120. void edgePrint(char *str)
  121. {
  122.     char lineBuf[80];
  123.     char *curPos;
  124.     char *linePos;
  125.     int c;
  126.  
  127.     if (strlen(str) < 79) {
  128.         printf("%s\n",str);
  129.         return;
  130.     }
  131.  
  132.     curPos = str;
  133.  
  134.     while(*curPos) {
  135.  
  136.         linePos = lineBuf;
  137.  
  138.         for (c = 0; (c < 79) && *curPos; ++ c) {
  139.             *linePos++ = *curPos++;
  140.         }
  141.         *linePos = '\0';
  142.         while(c && *curPos && !isspace(*linePos)) {
  143.             *linePos-- = '\0';
  144.             c--;
  145.             curPos--;
  146.         }
  147.         *++linePos = '\0';
  148.         printf("%s\n",lineBuf);
  149.         if (*curPos)
  150.             ++curPos;
  151.     }
  152. }
  153.