home *** CD-ROM | disk | FTP | other *** search
- /*************************************
- * *
- * Editor v1.0 *
- * by Torsten Jürgeleit in 08/91 *
- * *
- * Save part *
- * *
- *************************************/
-
- /* Includes */
-
- #include "includes.h"
- #include "defines.h"
- #include "imports.h"
- #include "protos.h"
-
- /* Save project */
-
- SHORT
- save_project(VOID)
- {
- struct TemplateList *tl = &template_list;
- struct Template *tp;
- struct FileRequester *freq = project_file_requester;
- BPTR fh;
- BYTE path[LONG_DSIZE + LONG_FSIZE + 1];
- USHORT len;
- SHORT status = EDITOR_STATUS_NORMAL;
-
- /* Display ARP file requester and check if user selected cancel */
- freq->fr_FuncFlags |= FRF_DoColor;
- freq->fr_Hail = PROJECT_SAVE_HAIL_TEXT;
- if (FileRequest(freq)) {
-
- /* Prepare file name and project name */
- len = strlen(freq->fr_File) - 4;
- if (Strcmp(freq->fr_File + len, ".tpl")) {
- strcpy(&tl->tl_ProjectName[0], freq->fr_File);
- strcat(freq->fr_File, ".tpl");
- } else {
- strncpy(&tl->tl_ProjectName[0], freq->fr_File, (size_t)len);
- tl->tl_ProjectName[len] = '\0';
- }
-
- /* Build full path for project file */
- strcpy(&path[0], freq->fr_Dir);
- TackOn(&path[0], freq->fr_File);
-
- /* Check if file already exists and inform user */
- if (fh = Open(&path[0], (LONG)MODE_OLDFILE)) {
- Close(fh);
- }
- if (!fh || ok_cancel_requester(" Save ", "File already exists."
- " Do you really want to overwrite?") == TRUE) {
-
- /* Open file and write project header */
- if (!(fh = Open(&path[0], (LONG)MODE_NEWFILE))) {
- status = EDITOR_ERROR_OPEN_FAILED;
- } else {
- if ((status = write_project_header(fh)) == EDITOR_STATUS_NORMAL) {
-
- /* Save all templates */
- for (tp = get_head(&tl->tl_List); tp && status ==
- EDITOR_STATUS_NORMAL; tp = get_succ(&tp->tp_Node)) {
- status = write_template(fh, tp);
- }
-
- /* If any error then delete incomplete project file */
- if (status != EDITOR_STATUS_NORMAL) {
- DeleteFile(&path[0]);
- } else {
- tl->tl_Flags &= ~TEMPLATE_LIST_FLAG_CHANGED;
- }
- }
- Close(fh);
- }
- }
- }
- if (status != EDITOR_STATUS_NORMAL) {
- show_error(status);
- }
- return(status);
- }
- /* Write project header to save file */
-
- STATIC SHORT
- write_project_header(BPTR fh)
- {
- SHORT status;
-
- if (FPrintf(fh,
- "BEGIN PROJECTHEADER\n"
- " LEFTEDGE=%d\n"
- " TOPEDGE=%d\n"
- " WIDTH=%d\n"
- " HEIGHT=%d\n"
- " FLAGS=%d\n"
- "END PROJECTHEADER\n", pwin->LeftEdge, pwin->TopEdge,
- pwin->Width, pwin->Height, template_list.tl_Flags) == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- } else {
- status = EDITOR_STATUS_NORMAL;
- }
- return(status);
- }
- /* Write template data to save file */
-
- STATIC SHORT
- write_template(BPTR fh, struct Template *tp)
- {
- struct Box *box = &tp->tp_Box;
- struct TextAttr *ta = &tp->tp_TextAttr;
- struct BorderData *bd;
- struct TextData *td;
- struct GadgetData *gd;
- struct Node *node;
- BYTE *fmt;
- UBYTE type = tp->tp_Type;
- SHORT status = EDITOR_STATUS_NORMAL;
-
- /* Write standard data */
- if (FPrintf(fh,
- "BEGIN TEMPLATE\n"
- " NAME=\"%s\"\n"
- " TYPE=%d\n"
- " FLAGS=%d\n"
- " BEGIN BOX\n"
- " X1=%d\n"
- " Y1=%d\n"
- " X2=%d\n"
- " Y2=%d\n"
- " END BOX\n", &tp->tp_TemplateName[0], type,
- tp->tp_Flags, box->bo_X1, box->bo_Y1, box->bo_X2,
- box->bo_Y2) == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- } else {
-
- /* Write text list if any */
- if (type == TEMPLATE_TYPE_MX || type == TEMPLATE_TYPE_CYCLE ||
- type == TEMPLATE_TYPE_LISTVIEW) {
- if (FPrintf(fh, " BEGIN TEXTLIST\n") == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- } else {
- for (node = get_head(&tp->tp_TextList); node &&
- status == EDITOR_STATUS_NORMAL; node = get_succ(node)) {
- if (FPrintf(fh, " TEXT=\"%s\"\n", node->ln_Name) == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- }
- if (status == EDITOR_STATUS_NORMAL) {
- if (FPrintf(fh, " END TEXTLIST\n") == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- }
- }
- }
-
- /* Write template data */
- if (status == EDITOR_STATUS_NORMAL) {
- switch (TEMPLATE_GROUP(tp)) {
- case TEMPLATE_GROUP_BORDER :
-
- /* Write border data */
- bd = &tp->tp_Data.tp_BorderData;
- if (FPrintf(fh,
- " BEGIN BORDERDATA\n"
- " TYPE=%ld\n"
- " END BORDERDATA\n", bd->bd_Type) == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- break;
- case TEMPLATE_GROUP_TEXT :
-
- /* Write text data */
- td = &tp->tp_Data.tp_TextData;
- if (td->td_Type == TEXT_DATA_TYPE_TEXT) {
- fmt = " BEGIN TEXTATTR\n"
- " NAME=\"%s\"\n"
- " YSIZE=%d\n"
- " STYLE=%d\n"
- " FLAGS=%d\n"
- " END TEXTATTR\n"
- " BEGIN TEXTDATA\n"
- " TYPE=%d\n"
- " FLAGS=%d\n"
- " TEXT=\"%s\"\n"
- " END TEXTDATA\n";
- } else {
- fmt = " BEGIN TEXTATTR\n"
- " NAME=\"%s\"\n"
- " YSIZE=%d\n"
- " STYLE=%d\n"
- " FLAGS=%d\n"
- " END TEXTATTR\n"
- " BEGIN TEXTDATA\n"
- " TYPE=%d\n"
- " FLAGS=%d\n"
- " TEXT=%ld\n"
- " END TEXTDATA\n";
- }
- if (FPrintf(fh, fmt, ta->ta_Name, ta->ta_YSize, ta->ta_Style,
- ta->ta_Flags, td->td_Type, td->td_Flags,
- td->td_Text) == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- break;
- case TEMPLATE_GROUP_GADGET :
-
- /* Write gadget data */
- gd = &tp->tp_Data.tp_GadgetData;
- if (FPrintf(fh,
- " BEGIN TEXTATTR\n"
- " NAME=\"%s\"\n"
- " YSIZE=%d\n"
- " STYLE=%d\n"
- " FLAGS=%d\n"
- " END TEXTATTR\n"
- " BEGIN GADGETDATA\n"
- " TYPE=%ld\n"
- " FLAGS=%ld\n", ta->ta_Name, ta->ta_YSize,
- ta->ta_Style, ta->ta_Flags, gd->gd_Type,
- gd->gd_Flags) == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- } else {
- if (!gd->gd_Text) {
- fmt = " TEXT=%ld\n";
- } else {
- fmt = " TEXT=\"%s\"\n";
- }
- if (FPrintf(fh, fmt, gd->gd_Text) == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- } else {
- if (gd->gd_Type == GADGET_DATA_TYPE_STRING) {
- fmt = " SPECIAL1=%ld\n"
- " SPECIAL2=%ld\n"
- " SPECIAL3=\"%s\"\n";
- } else {
- fmt = " SPECIAL1=%ld\n"
- " SPECIAL2=%ld\n"
- " SPECIAL3=%ld\n";
- }
- if (FPrintf(fh, fmt, gd->gd_SpecialData.gd_Data.gd_Data1,
- gd->gd_SpecialData.gd_Data.gd_Data2,
- gd->gd_SpecialData.gd_Data.gd_Data3) == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- } else {
- if (FPrintf(fh, " END GADGETDATA\n") == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- }
- }
- }
- break;
- }
- }
- if (status == EDITOR_STATUS_NORMAL) {
- if (FPrintf(fh, "END TEMPLATE\n") == -1L) {
- status = EDITOR_ERROR_WRITE_FAILED;
- }
- }
- }
- return(status);
- }
-