home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / tybc4 / clsxprt1 / clsxpr1a.cpp < prev    next >
C/C++ Source or Header  |  1993-12-05  |  8KB  |  329 lines

  1. /*  Project clsxprt1
  2.     
  3.     Copyright ⌐ 1993. All Rights Reserved.
  4.  
  5.     SUBSYSTEM:    clsxprt1.exe Application
  6.     FILE:         clsxpr1a.cpp
  7.     AUTHOR:
  8.  
  9.  
  10.     OVERVIEW
  11.     ========
  12.     Source file for implementation of clsxprt1App (TApplication).      
  13. */
  14.  
  15.  
  16. #include <owl\owlpch.h>
  17. #pragma hdrstop
  18.  
  19.  
  20. #include "clsxpr1a.h"
  21. #include "clsxp1ad.h"                        // Definition of about dialog.
  22.  
  23. #include <stdio.h>
  24. #include <string.h>
  25. #include <dos.h>
  26.  
  27. //{{clsxprt1App Implementation}}
  28.  
  29.  
  30. //
  31. // Build a response table for all messages/commands handled
  32. // by the application.
  33. //
  34. DEFINE_RESPONSE_TABLE1(clsxprt1App, TApplication)
  35. //{{clsxprt1AppRSP_TBL_BEGIN}}
  36.     EV_COMMAND(CM_FILENEW, CmFileNew),
  37.     EV_COMMAND(CM_FILEOPEN, CmFileOpen),
  38.     EV_COMMAND(CM_FILECLOSE, CmFileClose),
  39.     EV_COMMAND(CM_HELPABOUT, CmHelpAbout),
  40.     EV_COMMAND(CM_UPPERCASE, CmUppercase),
  41.     EV_COMMAND(CM_LOWERCASE, CmLowercase),
  42.     EV_COMMAND(CM_INSDATE, CmInsertDate),
  43.     EV_COMMAND(CM_INSTIME, CmInsertTime),
  44.     EV_COMMAND(CM_INSDATETIME, CmInsertDateTime),
  45.     EV_COMMAND(CM_REVERSE, CmReverse),
  46. //{{clsxprt1AppRSP_TBL_END}}
  47. END_RESPONSE_TABLE;
  48.  
  49.  
  50. //
  51. // FrameWindow must be derived to override Paint for Preview and Print.
  52. //
  53. class SDIDecFrame : public TDecoratedFrame {
  54. public:
  55.     SDIDecFrame (TWindow *parent, const char far *title, TWindow *clientWnd, BOOL trackMenuSelection = FALSE, TModule *module = 0) :
  56.             TDecoratedFrame(parent, title, clientWnd, trackMenuSelection, module)
  57.       {  }
  58.     ~SDIDecFrame ()
  59.       {  }
  60. };
  61.  
  62.  
  63. //////////////////////////////////////////////////////////
  64. // clsxprt1App
  65. // =====
  66. //
  67. clsxprt1App::clsxprt1App () : TApplication("clsxprt1")
  68. {
  69.  
  70.     // Common file file flags and filters for Open/Save As dialogs.  Filename and directory are
  71.     // computed in the member functions CmFileOpen, and CmFileSaveAs.
  72.     FileData.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
  73.     FileData.SetFilter("All Files (*.*)|*.*|");
  74.  
  75.     // INSERT>> Your constructor code here.
  76.  
  77. }
  78.  
  79.  
  80. clsxprt1App::~clsxprt1App ()
  81. {
  82.     // INSERT>> Your destructor code here.
  83.  
  84. }
  85.  
  86.  
  87. //////////////////////////////////////////////////////////
  88. // clsxprt1App
  89. // =====
  90. // Application intialization.
  91. //
  92. void clsxprt1App::InitMainWindow ()
  93. {
  94.     Client = new TEditFile(0, 0, 0);
  95.     SDIDecFrame *frame = new SDIDecFrame(0, GetName(), Client, FALSE);
  96.  
  97.     nCmdShow = nCmdShow != SW_SHOWMINIMIZED ? SW_SHOWNORMAL : nCmdShow;
  98.  
  99.     //
  100.     // Assign ICON w/ this application.
  101.     //
  102.     frame->SetIcon(this, IDI_SDIAPPLICATION);
  103.  
  104.     //
  105.     // Menu associated with window and accelerator table associated with table.
  106.     //
  107.     frame->AssignMenu(SDI_MENU);
  108.     
  109.     //
  110.     // Associate with the accelerator table.
  111.     //
  112.     frame->Attr.AccelTable = SDI_MENU;
  113.  
  114.   
  115.     MainWindow = frame;
  116.  
  117. }
  118.  
  119.  
  120. //////////////////////////////////////////////////////////
  121. // clsxprt1App
  122. // ===========
  123. // Menu File New command
  124. void clsxprt1App::CmFileNew ()
  125. {
  126.     Client->NewFile();
  127. }
  128.  
  129.  
  130. //////////////////////////////////////////////////////////
  131. // clsxprt1App
  132. // ===========
  133. // Menu File Open command
  134. void clsxprt1App::CmFileOpen ()
  135. {
  136.     //
  137.     // Display standard Open dialog box to select a file name.
  138.     //
  139.     *FileData.FileName = 0;
  140.     if (Client->CanClose())
  141.         if (TFileOpenDialog(MainWindow, FileData).Execute() == IDOK)
  142.             OpenFile();
  143. }
  144.  
  145.  
  146. void clsxprt1App::OpenFile (const char *fileName)
  147. {
  148.     if (fileName)
  149.         lstrcpy(FileData.FileName, fileName);
  150.  
  151.     Client->ReplaceWith(FileData.FileName);
  152. }
  153.  
  154.  
  155. //////////////////////////////////////////////////////////
  156. // clsxprt1App
  157. // =====
  158. // Menu File Close command
  159. void clsxprt1App::CmFileClose ()
  160. {
  161.      if (Client->CanClose())
  162.              Client->DeleteSubText(0, UINT(-1));
  163. }
  164.  
  165.  
  166. //////////////////////////////////////////////////////////
  167. // clsxprt1App
  168. // ===========
  169. // Menu Help About clsxprt1.exe command
  170. void clsxprt1App::CmHelpAbout ()
  171. {
  172.     //
  173.     // Show the modal dialog.
  174.     //
  175.     clsxprt1AboutDlg(MainWindow).Execute();
  176. }
  177.  
  178.  
  179. int OwlMain (int , char* [])
  180. {
  181.     clsxprt1App     App;
  182.     int             result;
  183.  
  184.     result = App.Run();
  185.  
  186.     return result;
  187. }
  188.  
  189. void clsxprt1App::CmUppercase ()
  190. {
  191.   UINT startPos, endPos;
  192.   int numChars;
  193.   char* pszStr;
  194.  
  195.   Client->GetSelection(startPos, endPos);
  196.   // is there selected text
  197.   if (startPos < endPos) {
  198.     numChars = endPos - startPos + 1;
  199.     pszStr = new char[numChars+1];
  200.     Client->GetSubText(pszStr, startPos, endPos);
  201.     strupr(pszStr);
  202.     Client->Insert(pszStr);
  203.     Client->SetSelection(startPos, endPos);
  204.     delete [] pszStr;
  205.   }
  206.   else {
  207.     numChars = Client->GetWindowTextLength();
  208.     pszStr = new char[numChars+1];
  209.     Client->GetSubText(pszStr, 0, (UINT)numChars);
  210.     strupr(pszStr);
  211.     Client->DeleteSubText(0, (UINT)numChars);
  212.     Client->SetSelection(0, 0);
  213.     Client->Insert(pszStr);
  214.     delete [] pszStr;
  215.   }
  216. }
  217.  
  218.  
  219. void clsxprt1App::CmLowercase ()
  220. {
  221.   UINT startPos, endPos;
  222.   int numChars;
  223.   char* pszStr;
  224.  
  225.   Client->GetSelection(startPos, endPos);
  226.   // is there selected text
  227.   if (startPos < endPos) {
  228.     numChars = endPos - startPos + 1;
  229.     pszStr = new char[numChars+1];
  230.     Client->GetSubText(pszStr, startPos, endPos);
  231.     strlwr(pszStr);
  232.      Client->Insert(pszStr);
  233.     Client->SetSelection(startPos, endPos);
  234.     delete [] pszStr;
  235.   }
  236.   else {
  237.     numChars = Client->GetWindowTextLength();
  238.     pszStr = new char[numChars+1];
  239.     Client->GetSubText(pszStr, 0, (UINT)numChars);
  240.     strlwr(pszStr);
  241.     Client->DeleteSubText(0, (UINT)numChars);
  242.     Client->SetSelection(0, 0);
  243.     Client->Insert(pszStr);
  244.     delete [] pszStr;
  245.   }
  246. }
  247.  
  248.  
  249. void clsxprt1App::CmInsertDate ()
  250. {
  251.   struct date dt;
  252.   char szStr[41];
  253.  
  254.   getdate(&dt);
  255.   sprintf(szStr, "%02d/%02d/%4d",
  256.           dt.da_mon, dt.da_day, dt.da_year);
  257.   Client->Insert(szStr);
  258. }
  259.  
  260.  
  261. void clsxprt1App::CmInsertTime ()
  262. {
  263.   struct time tm;
  264.   char szStr[41];
  265.  
  266.   gettime(&tm);
  267.   sprintf(szStr, "%02d:%02d:%02d",
  268.              tm.ti_hour, tm.ti_min, tm.ti_sec);
  269.   Client->Insert(szStr);
  270. }
  271.  
  272.  
  273. void clsxprt1App::CmInsertDateTime ()
  274. {
  275.   struct date dt;
  276.   struct time tm;
  277.   char szStr[41];
  278.  
  279.   getdate(&dt);
  280.   sprintf(szStr, "%02d/%02d/%4d ",
  281.           dt.da_mon, dt.da_day, dt.da_year);
  282.   Client->Insert(szStr);
  283.  
  284.   gettime(&tm);
  285.   sprintf(szStr, "%02d:%02d:%02d",
  286.              tm.ti_hour, tm.ti_min, tm.ti_sec);
  287.   Client->Insert(szStr);
  288. }
  289.  
  290.  
  291. void clsxprt1App::CmReverse ()
  292. {
  293.   UINT startPos, endPos;
  294.   int numChars;
  295.   char* pszStr;
  296.   char swapChar;
  297.  
  298.   Client->GetSelection(startPos, endPos);
  299.   // is there selected text
  300.   if (startPos < endPos) {
  301.     numChars = endPos - startPos + 1;
  302.     pszStr = new char[numChars+1];
  303.     Client->GetSubText(pszStr, startPos, endPos);
  304.     for (int i = 0, j = strlen(pszStr)-1; i < j ; i++, j--) {
  305.       swapChar = pszStr[i];
  306.       pszStr[i] = pszStr[j];
  307.       pszStr[j] = swapChar;
  308.     }
  309.      Client->Insert(pszStr);
  310.     Client->SetSelection(startPos, endPos);
  311.     delete [] pszStr;
  312.   }
  313.   else {
  314.     numChars = Client->GetWindowTextLength();
  315.     pszStr = new char[numChars+1];
  316.     Client->GetSubText(pszStr, 0, (UINT)numChars);
  317.     for (int i = 0, j = strlen(pszStr)-1; i < j ; i++, j--) {
  318.       swapChar = pszStr[i];
  319.       pszStr[i] = pszStr[j];
  320.       pszStr[j] = swapChar;
  321.     }
  322.     Client->DeleteSubText(0, (UINT)numChars);
  323.     Client->SetSelection(0, 0);
  324.     Client->Insert(pszStr);
  325.     delete [] pszStr;
  326.   }
  327. }
  328.  
  329.