home *** CD-ROM | disk | FTP | other *** search
/ Point Programming 1 / PPROG1.ISO / c / fli106c / examples / save.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1992-01-25  |  7.8 KB  |  232 lines

  1. //
  2. // The Fusion Library Interface for DOS
  3. // Version 1.02
  4. // Copyright (C) 1990, 1991
  5. // Software Dimensions
  6. //
  7. // Dialog Development System
  8. //
  9.  
  10. #include "elements.h"
  11. #include "fliwin.h"
  12. #include "dds.h"
  13.  
  14. #include <io.h>
  15. #include <fcntl.h>
  16. #include <sys\stat.h>
  17. #include <string.h>
  18.  
  19. //-------------------------------------------------------------------------
  20. //
  21. // Save a dialog file
  22. // Version history info in LOAD.CPP
  23. //
  24. //-------------------------------------------------------------------------
  25.  
  26. #define CurrentFileVersion 6
  27.  
  28. void stringwrite(int Save,char *String)
  29. {
  30.   int Length=strlen(String)+1;
  31.   write(Save,&Length,sizeof(int));
  32.   write(Save,String,Length);
  33. }
  34.  
  35. void DialogWindow::SaveFile(char *SavedName)
  36. {
  37.   //-------------------------------------------------------------------------
  38.   //
  39.   // Open file for save (truncate or create, if necessary)
  40.   //
  41.   //-------------------------------------------------------------------------
  42.  
  43.   int Save=open(SavedName,O_RDWR|O_TRUNC|O_CREAT|O_BINARY,S_IREAD|S_IWRITE);
  44.  
  45.   //-------------------------------------------------------------------------
  46.   //
  47.   // Put DDS file signature into file
  48.   //
  49.   //-------------------------------------------------------------------------
  50.  
  51.   char FileSignature[] = "[DDS/SD]";
  52.   write(Save,&FileSignature,sizeof(FileSignature));
  53.  
  54.   //-------------------------------------------------------------------------
  55.   //
  56.   // Save current file version #
  57.   //
  58.   // Save the *file* current version number, for possible usage when the
  59.   // DDS is upgraded or when a new product is introduced.  This will
  60.   // help maintain compatibility across versions.
  61.   //
  62.   //-------------------------------------------------------------------------
  63.  
  64.   int CurVersion=CurrentFileVersion;
  65.  
  66.   write(Save,&CurVersion,sizeof(int));
  67.  
  68.   //-------------------------------------------------------------------------
  69.   //
  70.   // Save global dialog characteristics
  71.   //
  72.   //-------------------------------------------------------------------------
  73.  
  74.   write(Save,&CurrentColor,sizeof(int));
  75.   write(Save,&ZPositioning,sizeof(int));
  76.  
  77.   if (!Title)
  78.   {
  79.     char Title[50]="\0"; // Avoids saving junk to the file
  80.     stringwrite(Save,Title);
  81.   }
  82.   else
  83.     stringwrite(Save,Title);
  84.  
  85.   stringwrite(Save,DerivedClass);
  86.  
  87.   int Width=Blaze.WhatWinWidth()+2;
  88.   int Height=Blaze.WhatWinHeight()+2;
  89.  
  90.   write(Save,&Width,sizeof(int));
  91.   write(Save,&Height,sizeof(int));
  92.   write(Save,&X,sizeof(int));
  93.   write(Save,&Y,sizeof(int));
  94.  
  95.   //-------------------------------------------------------------------------
  96.   //
  97.   // Save the text that appears inside of the window (the typed stuff)
  98.   //
  99.   //-------------------------------------------------------------------------
  100.  
  101.   Width-=2;
  102.   Height-=2;
  103.  
  104.   for (int i=0;i<Height;i++)
  105.     write(Save,Interior[i],Width*2);
  106.  
  107.   //-------------------------------------------------------------------------
  108.   //
  109.   // Save the piece count
  110.   //
  111.   //-------------------------------------------------------------------------
  112.  
  113.   write(Save,&NumberPieces,sizeof(int));
  114.  
  115.   //-------------------------------------------------------------------------
  116.   //
  117.   // Save the elements in the order in which they were in when the
  118.   // dialog was created and last manipulated
  119.   //
  120.   //-------------------------------------------------------------------------
  121.  
  122.   if (NumberPieces)
  123.   {
  124.     for (i=0;i<NumberPieces;i++)
  125.     {
  126.       //----------------------------------------------------------------------
  127.       //
  128.       // This set of variables is saved in the same spot for all elements.
  129.       //
  130.       // The "LAYOUT" member is the signature for this element.
  131.       //
  132.       //----------------------------------------------------------------------
  133.  
  134.       write(Save,&Pieces[i]->LayOut,sizeof(int));
  135.       write(Save,&Pieces[i]->X,sizeof(int));
  136.       write(Save,&Pieces[i]->Y,sizeof(int));
  137.       write(Save,&Pieces[i]->Width,sizeof(int));
  138.       write(Save,&Pieces[i]->Height,sizeof(int));
  139.       write(Save,&Pieces[i]->Color,sizeof(int));
  140.  
  141.       //----------------------------------------------------------------------
  142.       //
  143.       // Save information that is specific to each type of element or
  144.       // object.
  145.       //
  146.       //----------------------------------------------------------------------
  147.  
  148.       switch(Pieces[i]->LayOut)
  149.       {
  150.         case PieceHandler::Character:
  151.         case PieceHandler::Integer:
  152.         case PieceHandler::Long:
  153.         case PieceHandler::Float:
  154.         case PieceHandler::Double:
  155.         case PieceHandler::Bcd:
  156.           stringwrite(Save,Pieces[i]->Mask);
  157.           stringwrite(Save,Pieces[i]->Variable);
  158.           stringwrite(Save,Pieces[i]->Prompter);
  159.           stringwrite(Save,Pieces[i]->HotKey);
  160.           write(Save,&Pieces[i]->GroupCode,sizeof(int));
  161.           write(Save,&Pieces[i]->HelpId,sizeof(int));
  162.           write(Save,&Pieces[i]->ToBeDerived,sizeof(int));
  163.           write(Save,&Pieces[i]->PromptX,sizeof(int));
  164.           write(Save,&Pieces[i]->PromptY,sizeof(int));
  165.           stringwrite(Save,Pieces[i]->DerivedClass);
  166.           stringwrite(Save,Pieces[i]->Help);
  167.           write(Save,&Pieces[i]->Focus_Reset,sizeof(int));
  168.           if (Pieces[i]->LayOut==PieceHandler::Character)
  169.           {
  170.             write(Save,&Pieces[i]->MaskCharacter,sizeof(int));
  171.             write(Save,&Pieces[i]->MaskWidth,sizeof(int));
  172.             write(Save,&Pieces[i]->ScrollWidth,sizeof(int));
  173.           }
  174.           break;
  175.         case PieceHandler::Check:
  176.           stringwrite(Save,Pieces[i]->Text);
  177.           stringwrite(Save,Pieces[i]->Variable);
  178.           stringwrite(Save,Pieces[i]->HotKey);
  179.           write(Save,&Pieces[i]->GroupCode,sizeof(int));
  180.           write(Save,&Pieces[i]->HelpId,sizeof(int));
  181.           write(Save,&Pieces[i]->ToBeDerived,sizeof(int));
  182.           stringwrite(Save,Pieces[i]->DerivedClass);
  183.           stringwrite(Save,Pieces[i]->Help);
  184.           break;
  185.         case PieceHandler::Push:
  186.           stringwrite(Save,Pieces[i]->Text);
  187.           stringwrite(Save,Pieces[i]->Constant);
  188.           stringwrite(Save,Pieces[i]->HotKey);
  189.           write(Save,&Pieces[i]->GroupCode,sizeof(int));
  190.           write(Save,&Pieces[i]->HelpId,sizeof(int));
  191.           write(Save,&Pieces[i]->ToBeDerived,sizeof(int));
  192.           stringwrite(Save,Pieces[i]->DerivedClass);
  193.           stringwrite(Save,Pieces[i]->Help);
  194.           write(Save,&Pieces[i]->Focus_Reset,sizeof(int));
  195.           break;
  196.         case PieceHandler::GroupHeading:
  197.           stringwrite(Save,Pieces[i]->Text);
  198.           stringwrite(Save,Pieces[i]->HotKey);
  199.           write(Save,&Pieces[i]->GroupCode,sizeof(int));
  200.           break;
  201.         case PieceHandler::VRadio:
  202.         case PieceHandler::HRadio:
  203.           stringwrite(Save,Pieces[i]->Variable);
  204.           stringwrite(Save,Pieces[i]->Prompter);
  205.           stringwrite(Save,Pieces[i]->HotKey);
  206.           write(Save,&Pieces[i]->GroupCode,sizeof(int));
  207.           write(Save,&Pieces[i]->HelpId,sizeof(int));
  208.           write(Save,&Pieces[i]->ToBeDerived,sizeof(int));
  209.           write(Save,&Pieces[i]->PromptX,sizeof(int));
  210.           write(Save,&Pieces[i]->PromptY,sizeof(int));
  211.           stringwrite(Save,Pieces[i]->DerivedClass);
  212.           stringwrite(Save,Pieces[i]->Help);
  213.           for (int j=0;j<10;j++)
  214.             stringwrite(Save,Pieces[i]->Elements[j]);
  215.           break;
  216.         case PieceHandler::PickGeneric:
  217.           stringwrite(Save,Pieces[i]->Prompter);
  218.           stringwrite(Save,Pieces[i]->HotKey);
  219.           write(Save,&Pieces[i]->HelpId,sizeof(int));
  220.           write(Save,&Pieces[i]->ToBeDerived,sizeof(int));
  221.           write(Save,&Pieces[i]->PromptX,sizeof(int));
  222.           write(Save,&Pieces[i]->PromptY,sizeof(int));
  223.           stringwrite(Save,Pieces[i]->DerivedClass);
  224.           stringwrite(Save,Pieces[i]->Help);
  225.       }
  226.     }
  227.   }
  228.  
  229.   close(Save);
  230. }
  231.  
  232.