home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
workbench
/
stickit2
/
source.lha
/
source
/
files.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-01-09
|
6KB
|
282 lines
/**********************************************
************** files.c ******************
**********************************************/
#define INTUI_V36_NAMES_ONLY
#include <exec/exec.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "consts.h"
#include "structs.h"
#include "proto.h"
extern prj_p prj;
/*
Function : void file_readnotes()
Purpose : Reads in the notes from the filename given in prj->prefs.notefile.
If the file can't be opened an error is given and the program doesn't
quit.
*/
void file_readnotes()
{
struct note temp_note;
note_p new_note;
FILE *infp;
char error_msg[STRLEN_ERRMSG],fontstyles[STRLEN_FONTSTYLES];
int note_position;
int temp_ints[4];
/* Block input to windows */
note_blockall();
commod_block();
/* Open the file */
infp = fopen(prj->prefs.notefile,"r");
if (!infp) {
sprintf(error_msg,"Can't open file \"%s\"",prj->prefs.notefile);
error(error_msg,ERR_NOTEFILEOPEN,__LINE__,__FILE__);
/* Unblock input to windows */
commod_blockclear();
note_blockclearall();
return;
}
/* Read in each note */
while(TRUE) {
note_position = next_free_note();
/* The the info, if at any time an incomplete record is */
/* found then stop the loop and don't create a note. */
/* Xpos,Ypos,Width,Height */
if (4 != fscanf(infp,"%d,%d,%d,%d\n",&temp_ints[0],
&temp_ints[1],&temp_ints[2],&temp_ints[3]))
break;
temp_note.leftedge = (WORD)temp_ints[0];
temp_note.topedge = (WORD)temp_ints[1];
temp_note.width = (WORD)temp_ints[2];
temp_note.height = (WORD)temp_ints[3];
/* backcolour,textcolour,caratcolour */
if (3 != fscanf(infp,"%d,%d,%d\n",&temp_ints[0],
&temp_ints[1],&temp_ints[2]))
break;
temp_note.backcolour = (UBYTE)temp_ints[0];
temp_note.textcolour = (UBYTE)temp_ints[1];
temp_note.caratcolour = (UBYTE)temp_ints[2];
/* Public screen name */
fgets(temp_note.pubscreen,STRLEN_PUBSCREEN,infp);
replace_chrs(temp_note.pubscreen,'\n','\0'); /* Strip \n */
/* Fontname (could be empty if default font) */
fgets(temp_note.fontname,STRLEN_FONTNAME,infp);
replace_chrs(temp_note.fontname,'\n','\0'); /* Strip \n */
/* Font size */
if (1 != fscanf(infp,"%du\n",&temp_ints[0]))
break;
temp_note.textattr.ta_YSize = (UWORD)temp_ints[0];
/* Text styles */
temp_note.textattr.ta_Style = NULL;
fgets(temp_note.title,STRLEN_NOTETITLE,infp); /* Rogue \n */
fgets(fontstyles,STRLEN_FONTSTYLES,infp);
if (strchr(fontstyles,'B'))
temp_note.textattr.ta_Style |= FSF_BOLD;
if (strchr(fontstyles,'I'))
temp_note.textattr.ta_Style |= FSF_ITALIC;
if (strchr(fontstyles,'U'))
temp_note.textattr.ta_Style |= FSF_UNDERLINED;
/* Title bar text */
fgets(temp_note.title,STRLEN_NOTETITLE,infp);
replace_chrs(temp_note.title,'\n','\0');
if (!strlen(temp_note.title))
break;
/* Main note text */
fgets(temp_note.text,STRLEN_NOTETEXT,infp);
replace_chrs(temp_note.text,'\n','\0');
if (!strlen(temp_note.text))
break;
/* Now we have all the note info, could we add it ? */
if (note_position == NO_FREE_NOTES) {
sprintf(error_msg,"Too many notes in notefile.\n"
"Max. allowed = %d",NO_NOTES);
error(error_msg,ERR_WARNING,__LINE__,__FILE__);
return;
}
/* We now have enough for a note - yippee! */
new_note = note_create(note_position);
/* copy info into new note */
new_note->leftedge = temp_note.leftedge;
new_note->topedge = temp_note.topedge;
new_note->width = temp_note.width;
new_note->height = temp_note.height;
new_note->backcolour = temp_note.backcolour;
new_note->textcolour = temp_note.textcolour;
new_note->caratcolour = temp_note.caratcolour;
strncpy(new_note->fontname,&temp_note.fontname[1],STRLEN_FONTNAME);
new_note->textattr.ta_YSize = temp_note.textattr.ta_YSize;
new_note->textattr.ta_Style = temp_note.textattr.ta_Style;
build_fontstring(new_note);
strncpy(new_note->title,&temp_note.title[1],STRLEN_NOTETITLE);
strncpy(new_note->text,&temp_note.text[1],STRLEN_NOTETEXT);
strncpy(new_note->pubscreen,&temp_note.pubscreen[1],STRLEN_PUBSCREEN);
}
/* Close file */
if (infp)
fclose(infp);
/* Unblock input to windows */
commod_blockclear();
note_blockclearall();
}
/*
Function : void file_writenotes()
Purpose : Writes the notes to the filename given in prj->prefs.notefile.
If the file can't be opened an error is given and the program doesn't
quit.
*/
void file_writenotes()
{
note_p curr_note;
FILE *outfp;
char error_msg[STRLEN_ERRMSG];
int l;
/* Block input to windows */
note_blockall();
commod_block();
/* Open the file */
outfp = fopen(prj->prefs.notefile,"w");
if (!outfp) {
sprintf(error_msg,"Can't save notes to file \"%s\"",
prj->prefs.notefile);
error(error_msg,ERR_NOTEFILEOPEN,__LINE__,__FILE__);
/* Unblock input to windows */
commod_blockclear();
note_blockclearall();
return;
}
/* Write each note */
for (l = 0; ((l < NO_NOTES) && (prj->notes[l])); l++) {
curr_note = prj->notes[l];
/* Xpos,Ypos,Width,Height */
fprintf(outfp,"%d,%d,%d,%d\n",curr_note->leftedge,
curr_note->topedge,curr_note->width,curr_note->height);
/* backcolour,textcolour,caratcolour */
fprintf(outfp,"%d,%d,%d\n",curr_note->backcolour,
curr_note->textcolour,curr_note->caratcolour);
/* Public screen name */
fprintf(outfp,"-%s\n",curr_note->pubscreen);
/* Fontname (could be empty if default font) */
fprintf(outfp,"-%s\n",curr_note->fontname);
/* Font size */
fprintf(outfp,"%d\n",curr_note->textattr.ta_YSize);
/* Text styles */
fprintf(outfp,"P%s%s%s\n",
(curr_note->textattr.ta_Style & FSF_BOLD) ? "B" : "",
(curr_note->textattr.ta_Style & FSF_ITALIC) ? "I" : "",
(curr_note->textattr.ta_Style & FSF_UNDERLINED) ? "U" : "");
/* Title bar text */
fprintf(outfp,"-%s\n",curr_note->title);
/* Main note text */
fprintf(outfp,"-%s\n",curr_note->text);
}
/* Close file */
if (outfp)
fclose(outfp);
/* Mark the project as being unchanged */
prj->projectchanged = FALSE;
/* Clear input to all open windows */
note_blockclearall();
commod_blockclear();
}