home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 Mobile / Chip_Mobile_2001.iso / palm / spiele / crypto / crypto.exe / crypto.pc next >
Text File  |  2000-11-18  |  6KB  |  306 lines

  1. // Crypto Demo
  2. include "Ccontrols.c"
  3. include "textwrap.h"
  4.  
  5. char alphabet[26] = {'a','b','c','d','e','f','g','h','i','j','k','l',
  6.     'm','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  7. char capitals[26] = {'A','B','C','D','E','F','G','H','I','J','K','L',
  8.     'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
  9. string puzzle;
  10. pointer getPuzzlePtr();
  11. replacePuzzle(int oldindex, int newindex);
  12. drawPuzzle();
  13. handleClick(int i);
  14. Chandle buttons[26];
  15. Chandle back, next;
  16. int replaceIndex;
  17. Chandle puzzleLabel, replaceLabel;
  18. int state = 0;
  19. int numRecords;
  20. int currentRecord;
  21. useRecord(int recordNum);
  22. setCaptions();
  23.  
  24. int upper[26];
  25. int left[26];
  26. int lower[26];
  27. int right[26];
  28.  
  29. initcontrols(){
  30.  
  31.     // dynamically create array of controls
  32.     int i;
  33.     int startX = 5;
  34.     int startY = 115;
  35.     int yPos;
  36.     int xPos;
  37.     string s;
  38.     for(i=0; i<26; i++) {
  39.         yPos = startY + i/10 * 15;
  40.         xPos = startX + (i%10)*15;
  41.         s = alphabet[i];
  42.         buttons[i] = Cbutton(xPos,yPos,8,8,1,4);
  43.         Csetcontent(buttons[i],s);
  44.         
  45.         left[i] = xPos;
  46.         upper[i] = yPos;
  47.         right[i] = xPos+8;
  48.         lower[i] = yPos+8;
  49.     }
  50.     back = Cbutton(95, 18, 25, 8, 1, 4);
  51.     next = Cbutton(125, 18, 25, 8, 1, 4);
  52.     
  53.     // label
  54.     replaceLabel = Clabel(startX, 100, 50, 1, 1, 0);
  55.     puzzleLabel = Clabel(startX, 20, 50, 1, 1, 0);
  56.     Csetcontent(replaceLabel, "Replace?");
  57.     Csetcontent(puzzleLabel, "Puzzle:");
  58.     Csetcontent(back, "Prev");
  59.     Csetcontent(next, "Next");
  60. }
  61.  
  62. initscreen(){
  63.     int index;
  64.     clearg();
  65.     title("Crypto .5");
  66.     
  67.     // draw controls
  68.     for(index=0; index<26; index++) {
  69.         Cdraw(buttons[index]);
  70.     }
  71.     Cdraw(replaceLabel);
  72.     Cdraw(puzzleLabel);
  73.     Cdraw(back);
  74.     Cdraw(next);
  75. }
  76.  
  77. int getNextIndex(string str, int index) {
  78.     // return ending index of current line
  79.     int length;
  80.     length = strlen(str);
  81.     if(index > length) return -1;
  82.     if(index + 20 > length) return length;
  83.     return index + 20;
  84. }
  85.  
  86. drawPuzzle() {
  87.     // hide the buttons for letters not used
  88.     int i;
  89.     string s;
  90.     rect(0, 5, 33, 155, 100, 0);
  91.     textwrap(5, 33, 155, 100, puzzle);
  92. }
  93.  
  94. clickBack() {
  95.     useRecord(currentRecord-1);
  96. }
  97.  
  98. clickNext() {
  99.     useRecord(currentRecord+1);
  100. }
  101.  
  102.  
  103. useRecord(int recordNum) {
  104.     
  105.     // load the puzzle
  106.     currentRecord = recordNum;
  107.     dbopen("CRYPTO-JSIC");
  108.     dbrec(recordNum);
  109.     puzzle = dbread('s');
  110.     dbclose();
  111.     
  112.     // set state to replace
  113.     state = 0;
  114.     
  115.     // set the buttons and captions
  116.     drawPuzzle();
  117.     setCaptions();
  118.     
  119.     // activate/deactivate back and next buttons
  120.     if(recordNum == 0) Cdeactivate(back);
  121.     else Cactivate(back);
  122.     if(recordNum == numRecords-1) Cdeactivate(next);
  123.     else Cactivate(next);
  124. }
  125.  
  126. main() {
  127.     int i, e;
  128.     int x,y;
  129.     
  130.     graph_on();
  131.     initcontrols();
  132.     initscreen();
  133.     
  134.     // open the db
  135.     dbopen("CRYPTO-JSIC");
  136.     numRecords = dbnrecs();
  137.     currentRecord = 0;
  138.     useRecord(0);
  139.     dbclose();
  140.  
  141.     // message loop
  142.     while(1){
  143.         e=event(1);
  144.         
  145.         x=penx();
  146.         y=peny();
  147.         if(e==2) {
  148.             for(i=0; i<26; i++) {
  149.                 if((x>=left[i])&&(x<=right[i])) {
  150.                     if((y>=upper[i])&&(y<=lower[i])) {
  151.                         beep(7);
  152.                         handleClick(i);
  153.                         break;
  154.                     }
  155.                 }
  156.             }
  157.         }
  158.         
  159.         if(Cevent(back, e)) {
  160.             beep(7);
  161.             clickBack();
  162.         }
  163.         if(Cevent(next, e)) {
  164.             beep(7);
  165.             clickNext();
  166.         }
  167.         
  168.         /*
  169.         for(i=0; i<26; i++) {
  170.             if(Cevent(buttons[i], e)) {
  171.                 beep(7);
  172.                 handleClick(i);
  173.             }
  174.             if(Cevent(back, e)) {
  175.                 beep(7);
  176.                 clickBack();
  177.             }
  178.             if(Cevent(next, e)) {
  179.                 beep(7);
  180.                 clickNext();
  181.             }
  182.         }
  183.         */
  184.       }
  185. }
  186.  
  187. replacePuzzle(int old, int new) {
  188.     int length;
  189.     pointer ptr;
  190.     int i;
  191.     string str;
  192.     char oldlower, oldupper, newlower, newupper;
  193.     char current;
  194.     
  195.     ptr = getPuzzlePtr();
  196.     length = strlen(puzzle);
  197.     
  198.     oldlower = alphabet[old];
  199.     oldupper = capitals[old];
  200.     newlower = alphabet[new];
  201.     newupper = capitals[new];
  202.     
  203.     // alert(oldlower + " " + oldupper + " " + " " + newlower + " " + newupper + " " + puzzle);
  204.     for(i=0; i<length; i++) {
  205.         current = ptr[i];
  206.         if(current == oldlower) {
  207.             ptr[i]=newlower;
  208.             continue;
  209.         }
  210.         if(current == oldupper) {
  211.             ptr[i]=newupper;
  212.             continue;
  213.         }
  214.         if(current == newlower) {
  215.             ptr[i]=oldlower;
  216.             continue;
  217.         }
  218.         if(current == newupper) {
  219.             ptr[i]=oldupper;
  220.             continue;
  221.         }
  222.     }
  223.     puzzle = ctostr(ptr);
  224.     free(ptr);
  225. }
  226.  
  227. handleClick(int click) 
  228. {    
  229.     pointer ptr, i, dbptr;
  230.     int length;
  231.     int found;
  232.     char current;
  233.     char upper, lower;
  234.     string strdummy;
  235.     
  236.     // they clicked button i
  237.     if(state == 0) {
  238.         ptr = getPuzzlePtr();
  239.         length = strlen(puzzle);
  240.         found = 0;
  241.         lower = alphabet[click];
  242.         upper = capitals[click];
  243.         
  244.         for(i=0; i<length; i++) {
  245.             current = ptr[i];
  246.             if((current==lower)||(current==upper)) {
  247.                 found = 1;
  248.                 break;
  249.             }
  250.         }
  251.         free(ptr);
  252.         
  253.         if(found == 0) {
  254.             alert(lower + " is not in the crypto phrase.");
  255.             return;
  256.         }        
  257.         
  258.         // begin replacement
  259.         replaceIndex = click;
  260.         state = 1;
  261.         setCaptions();
  262.     }
  263.     else {    
  264.         // replace the characters
  265.          replacePuzzle(replaceIndex, click);
  266.         state = 0;
  267.         drawPuzzle();
  268.         setCaptions();
  269.         
  270.         // write puzzle back to database
  271.         dbptr = &strdummy;
  272.         dbptr[0] = puzzle;
  273.         dbopen("CRYPTO-JSIC");
  274.         dbrec(currentRecord);
  275.         dbwritex(dbptr, "sz");
  276.         dbclose();
  277.         return;
  278.     }
  279. }
  280.  
  281. pointer getPuzzlePtr() {
  282.     int length;
  283.     pointer result;
  284.     
  285.     length = strlen(puzzle);
  286.     result = malloc(length+1);
  287.     settype(result, length+1, 'c');
  288.     strtoc(puzzle, result);    
  289.     return result;
  290. }
  291.  
  292. setCaptions() {
  293.     if(state == 0) {
  294.         // in replace state
  295.         Cerase(replaceLabel);
  296.         Csetcontent(replaceLabel, "Replace?");
  297.         Cdraw(replaceLabel);
  298.     }
  299.     else {
  300.         // in with state
  301.         Cerase(replaceLabel);
  302.         Csetcontent(replaceLabel, "With?  (" + alphabet[replaceIndex] + ")" );
  303.         Cdraw(replaceLabel);        
  304.     }
  305. }
  306.