home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / workbench / stickit2 / source.lha / source / files.c < prev    next >
C/C++ Source or Header  |  1995-01-09  |  6KB  |  282 lines

  1. /**********************************************
  2.  **************    files.c   ******************
  3.  **********************************************/
  4.  
  5. #define INTUI_V36_NAMES_ONLY
  6.  
  7. #include <exec/exec.h>
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. #include "consts.h"
  14. #include "structs.h"
  15. #include "proto.h"
  16.  
  17. extern prj_p prj;
  18.  
  19. /*
  20. Function : void file_readnotes()
  21. Purpose : Reads in the notes from the filename given in prj->prefs.notefile.
  22.     If the file can't be opened an error is given and the program doesn't
  23.     quit.
  24. */
  25.  
  26. void file_readnotes()
  27. {
  28.     struct note temp_note;
  29.     note_p new_note;
  30.  
  31.     FILE *infp;
  32.  
  33.     char error_msg[STRLEN_ERRMSG],fontstyles[STRLEN_FONTSTYLES];
  34.     int note_position;
  35.     int temp_ints[4];
  36.  
  37.     /* Block input to windows */
  38.  
  39.     note_blockall();
  40.     commod_block();
  41.  
  42.     /* Open the file */
  43.  
  44.     infp = fopen(prj->prefs.notefile,"r");
  45.  
  46.     if (!infp) {
  47.         sprintf(error_msg,"Can't open file \"%s\"",prj->prefs.notefile);
  48.         error(error_msg,ERR_NOTEFILEOPEN,__LINE__,__FILE__);
  49.  
  50.         /* Unblock input to windows */
  51.  
  52.         commod_blockclear();
  53.         note_blockclearall();
  54.  
  55.         return;
  56.     }
  57.  
  58.     /* Read in each note */
  59.  
  60.     while(TRUE) {
  61.         note_position = next_free_note();
  62.  
  63.         /* The the info, if at any time an incomplete record is */
  64.         /* found then stop the loop and don't create a note.    */
  65.  
  66.         /* Xpos,Ypos,Width,Height */
  67.  
  68.         if (4 != fscanf(infp,"%d,%d,%d,%d\n",&temp_ints[0],
  69. &temp_ints[1],&temp_ints[2],&temp_ints[3]))
  70.             break;
  71.  
  72.         temp_note.leftedge = (WORD)temp_ints[0];
  73.         temp_note.topedge = (WORD)temp_ints[1];
  74.         temp_note.width = (WORD)temp_ints[2];
  75.         temp_note.height = (WORD)temp_ints[3];
  76.  
  77.         /* backcolour,textcolour,caratcolour */
  78.  
  79.         if (3 != fscanf(infp,"%d,%d,%d\n",&temp_ints[0],
  80. &temp_ints[1],&temp_ints[2]))
  81.             break;
  82.  
  83.         temp_note.backcolour = (UBYTE)temp_ints[0];
  84.         temp_note.textcolour = (UBYTE)temp_ints[1];
  85.         temp_note.caratcolour = (UBYTE)temp_ints[2];
  86.  
  87.         /* Public screen name */
  88.  
  89.         fgets(temp_note.pubscreen,STRLEN_PUBSCREEN,infp);
  90.         replace_chrs(temp_note.pubscreen,'\n','\0'); /* Strip \n */
  91.  
  92.         /* Fontname (could be empty if default font) */
  93.  
  94.         fgets(temp_note.fontname,STRLEN_FONTNAME,infp);
  95.         replace_chrs(temp_note.fontname,'\n','\0'); /* Strip \n */
  96.  
  97.         /* Font size */
  98.  
  99.         if (1 != fscanf(infp,"%du\n",&temp_ints[0]))
  100.             break;
  101.  
  102.         temp_note.textattr.ta_YSize = (UWORD)temp_ints[0];
  103.  
  104.         /* Text styles */
  105.  
  106.         temp_note.textattr.ta_Style = NULL;
  107.  
  108.         fgets(temp_note.title,STRLEN_NOTETITLE,infp); /* Rogue \n */
  109.  
  110.         fgets(fontstyles,STRLEN_FONTSTYLES,infp);
  111.  
  112.         if (strchr(fontstyles,'B'))
  113.             temp_note.textattr.ta_Style |= FSF_BOLD;
  114.  
  115.         if (strchr(fontstyles,'I'))
  116.             temp_note.textattr.ta_Style |= FSF_ITALIC;
  117.  
  118.         if (strchr(fontstyles,'U'))
  119.             temp_note.textattr.ta_Style |= FSF_UNDERLINED;
  120.  
  121.         /* Title bar text */
  122.  
  123.         fgets(temp_note.title,STRLEN_NOTETITLE,infp);
  124.         replace_chrs(temp_note.title,'\n','\0');
  125.  
  126.         if (!strlen(temp_note.title))
  127.             break;
  128.  
  129.         /* Main note text */
  130.  
  131.         fgets(temp_note.text,STRLEN_NOTETEXT,infp);
  132.         replace_chrs(temp_note.text,'\n','\0');
  133.  
  134.         if (!strlen(temp_note.text))
  135.             break;
  136.  
  137.         /* Now we have all the note info, could we add it ? */
  138.  
  139.         if (note_position == NO_FREE_NOTES) {
  140.             sprintf(error_msg,"Too many notes in notefile.\n"
  141. "Max. allowed = %d",NO_NOTES);
  142.             error(error_msg,ERR_WARNING,__LINE__,__FILE__);
  143.  
  144.             return;
  145.         }
  146.  
  147.         /* We now have enough for a note - yippee! */
  148.  
  149.         new_note = note_create(note_position);
  150.  
  151.         /* copy info into new note */
  152.  
  153.         new_note->leftedge = temp_note.leftedge;
  154.         new_note->topedge = temp_note.topedge;
  155.         new_note->width = temp_note.width;
  156.         new_note->height = temp_note.height;
  157.  
  158.         new_note->backcolour = temp_note.backcolour;
  159.         new_note->textcolour = temp_note.textcolour;
  160.         new_note->caratcolour = temp_note.caratcolour;
  161.  
  162.         strncpy(new_note->fontname,&temp_note.fontname[1],STRLEN_FONTNAME);
  163.  
  164.         new_note->textattr.ta_YSize = temp_note.textattr.ta_YSize;
  165.         new_note->textattr.ta_Style = temp_note.textattr.ta_Style;
  166.  
  167.         build_fontstring(new_note);
  168.  
  169.         strncpy(new_note->title,&temp_note.title[1],STRLEN_NOTETITLE);
  170.         strncpy(new_note->text,&temp_note.text[1],STRLEN_NOTETEXT);
  171.         strncpy(new_note->pubscreen,&temp_note.pubscreen[1],STRLEN_PUBSCREEN);
  172.     }
  173.  
  174.     /* Close file */
  175.  
  176.     if (infp)
  177.         fclose(infp);
  178.  
  179.     /* Unblock input to windows */
  180.  
  181.     commod_blockclear();
  182.     note_blockclearall();
  183.  
  184. }
  185.  
  186. /*
  187. Function : void file_writenotes()
  188. Purpose : Writes the notes to the filename given in prj->prefs.notefile.
  189.     If the file can't be opened an error is given and the program doesn't
  190.     quit.
  191. */
  192.  
  193. void file_writenotes()
  194. {
  195.     note_p curr_note;
  196.  
  197.     FILE *outfp;
  198.  
  199.     char error_msg[STRLEN_ERRMSG];
  200.  
  201.     int l;
  202.  
  203.     /* Block input to windows */
  204.  
  205.     note_blockall();
  206.     commod_block();
  207.  
  208.     /* Open the file */
  209.  
  210.     outfp = fopen(prj->prefs.notefile,"w");
  211.  
  212.     if (!outfp) {
  213.         sprintf(error_msg,"Can't save notes to file \"%s\"",
  214. prj->prefs.notefile);
  215.         error(error_msg,ERR_NOTEFILEOPEN,__LINE__,__FILE__);
  216.  
  217.         /* Unblock input to windows */
  218.  
  219.         commod_blockclear();
  220.         note_blockclearall();
  221.  
  222.         return;
  223.     }
  224.  
  225.     /* Write each note */
  226.  
  227.     for (l = 0; ((l < NO_NOTES) && (prj->notes[l])); l++) {
  228.         curr_note = prj->notes[l];
  229.  
  230.         /* Xpos,Ypos,Width,Height */
  231.  
  232.         fprintf(outfp,"%d,%d,%d,%d\n",curr_note->leftedge,
  233. curr_note->topedge,curr_note->width,curr_note->height);
  234.  
  235.         /* backcolour,textcolour,caratcolour */
  236.  
  237.         fprintf(outfp,"%d,%d,%d\n",curr_note->backcolour,
  238. curr_note->textcolour,curr_note->caratcolour);
  239.  
  240.         /* Public screen name */
  241.  
  242.         fprintf(outfp,"-%s\n",curr_note->pubscreen);
  243.  
  244.         /* Fontname (could be empty if default font) */
  245.  
  246.         fprintf(outfp,"-%s\n",curr_note->fontname);
  247.  
  248.         /* Font size */
  249.  
  250.         fprintf(outfp,"%d\n",curr_note->textattr.ta_YSize);
  251.  
  252.         /* Text styles */
  253.  
  254.         fprintf(outfp,"P%s%s%s\n",
  255. (curr_note->textattr.ta_Style & FSF_BOLD) ? "B" : "",
  256. (curr_note->textattr.ta_Style & FSF_ITALIC) ? "I" : "",
  257. (curr_note->textattr.ta_Style & FSF_UNDERLINED) ? "U" : "");
  258.  
  259.         /* Title bar text */
  260.  
  261.         fprintf(outfp,"-%s\n",curr_note->title);
  262.  
  263.         /* Main note text */
  264.  
  265.         fprintf(outfp,"-%s\n",curr_note->text);
  266.     }
  267.  
  268.     /* Close file */
  269.  
  270.     if (outfp)
  271.         fclose(outfp);
  272.  
  273.     /* Mark the project as being unchanged */
  274.  
  275.     prj->projectchanged = FALSE;
  276.  
  277.     /* Clear input to all open windows */
  278.         
  279.     note_blockclearall();
  280.     commod_blockclear();
  281. }
  282.