home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0620.ZIP / CCE_0620.PD / RAM__1_4 / SOURCE / RAMDEDIT.C < prev    next >
C/C++ Source or Header  |  1993-09-21  |  3KB  |  117 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <ext.h>
  5. #include <ctype.h>
  6.  
  7. char string[256];
  8.  
  9. FILE *file;
  10. struct {    int rdsize,rdnum,rdreset,paramflag;
  11.             char inffile[16];
  12.             long magic2,protect;
  13.             int reset,printflag;
  14.         } info;
  15.  
  16. void error (char *str)
  17. {    puts(str);
  18.     if (file>0) fclose(file); getch(); exit(1);
  19. }
  20.  
  21. void editword (int *val, char *str)
  22. {    printf("\n%s %d",str,*val);
  23.     printf("\nNeuer Wert : ");
  24.     gets(string);
  25.     sscanf(string,"%d",val);
  26. }
  27.  
  28. void editlong (long *val, char *str)
  29. {    printf("\n%s %ld",str,*val);
  30.     printf("\nNeuer Wert : ");
  31.     gets(string);
  32.     sscanf(string,"%ld",val);
  33. }
  34.  
  35. void editstring (char *s, char *str)
  36. {    printf("\n%s %s",str,s);
  37.     printf("\nNeuer Name : ");
  38.     do
  39.     {    gets(string);
  40.         if (!string[0]) return;
  41.         if (strlen(string)>15) printf("\nZu lang : ");
  42.         else break;
  43.     }    while (1);
  44.     strcpy(s,string);
  45. }
  46.  
  47. void editchar (char *val, char *str)
  48. {    printf("\n%s %c",str,*val);
  49.     printf("\nNeuer Wert : ");
  50.     gets(string);
  51.     if (string[0]) *val=string[0];
  52. }
  53.  
  54. void editflag (int *val, char *str)
  55. {    char c;
  56.     c=*val?'j':'n';
  57.     editchar(&c,str);
  58.     c=toupper(c); *val=((c=='J')||(c=='Y'));
  59. }
  60.  
  61. void edit (void)
  62. {    char c;
  63.     do
  64.         editword(&info.rdsize,
  65.             "Größe der Ramdisk in Kilobyte (8<x<4000): ");
  66.     while ((info.rdsize<8)||(info.rdsize>4000));
  67.     do
  68.     {    c=info.rdnum+'A';
  69.         editchar(&c,
  70.             "Laufwerksbuchstabe (a-p): ");
  71.         info.rdnum=toupper(c)-'A';
  72.     } while ((info.rdnum<0)||(info.rdnum>15));
  73.     editflag(&info.rdreset,"Resetfest (j/n): ");
  74.     editflag(&info.paramflag,
  75.         "Sollen immer die Ramdiskparamter abgefragt werden (j/n)"
  76.         "\n(sont nur beim Drücken der rechten Shifttaste): ");
  77.     editflag(&info.reset,
  78.         "Soll die Ramdisk sofort hinter Phystop gesichert werden (j/n)"
  79.         "\n(d.h. es wird sofort ein Reset ausgelöst): ");
  80.     editflag(&info.printflag,
  81.         "Wünschen Sie ein Protokoll am Bildschirm (j/n): ");
  82.     editlong(&info.magic2,
  83.         "Magicwert für diese Ramdisk: ");
  84.     editlong(&info.protect,
  85.         "Anzahl der Kilobytes, die vor der Ramdisk freigelassen"
  86.         "\nwerden sollen, um die Ramdisk zu schützen: ");
  87.     info.protect=((info.protect/8)*8)*1024l;
  88.     editstring(info.inffile,
  89.         "Name der Infodatei für diese Ramdisk : ");
  90. }
  91.  
  92. int main (void)
  93. {    char fname[80];
  94.     /* Lies Pfadnamen und öffne File */
  95.     printf("\nZugriffspfad für Ramdisk : \n");
  96.     gets(fname);
  97.     file=fopen(fname,"r+");
  98.     if (file<=0) error("\nKonnte Ramdisk nicht finden!");
  99.     
  100.     /* Teste auf Ramdisk */
  101.     fseek(file,32,SEEK_SET);
  102.     fscanf(file,"%8s",string);
  103.     if (strcmp(string,"xbrarram")!=0)
  104.         error("\nDies ist keine Ramdisk!");
  105.     
  106.     /* Bearbeite */
  107.     fseek(file,40,SEEK_SET);
  108.     fread(&info,sizeof(info),(size_t)1,file);
  109.     edit();
  110.     fseek(file,40,SEEK_SET);
  111.     fwrite(&info,sizeof(info),(size_t)1,file);
  112.         
  113.     /* Ende und File shließen */
  114.     fclose(file);
  115.     return 0;
  116. }
  117.