home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 20 / win_txl / wmcom.c < prev   
Encoding:
C/C++ Source or Header  |  1991-03-12  |  10.8 KB  |  373 lines

  1. /************************************************************************
  2. *                .......................................                *
  3. *                .                                     .                *
  4. *                .       TOOLBOX - INTERPRETER         .                *
  5. *                .        WM_COMMAMD MESSAGES          .                *
  6. *                .             WMCOM.C                 .                *
  7. *                .    M.Beising & K.Bauer & TOOLBOX    .                *
  8. *                .......................................                *
  9. *************************************************************************/
  10.  
  11. #include <windows.h>
  12. #include "txl.h"
  13.  
  14. extern BOOL FAR PASCAL SetTextBox(HWND, unsigned, WORD, LONG);
  15. extern BOOL FAR PASCAL HelpBox(HWND, unsigned, WORD, LONG);
  16. extern BOOL FAR PASCAL Input(HWND, unsigned, WORD, LONG);
  17.  
  18. void readclipbrd(HWND hWnd,BOOL ausgabe);
  19. void writeclipbrd(HWND hWnd,char *writestr);
  20. void MakeHelpPathName(char *szFileName);
  21.  
  22. extern HANDLE hInst,hEditText;
  23. extern HWND hWndEdit;
  24. extern unsigned char Textstr[ZEILENLAENGE];
  25. extern unsigned char Questr[ZEILENLAENGE];
  26. extern unsigned char PrintBuf[ZEILENLAENGE];
  27. extern char ReadBuffer[ZEILENLAENGE],szHelpFileName[129];
  28. extern LPSTR Ersetzstr;
  29. extern FARPROC lpProcTextBox,lpProcTemp;
  30. extern int Readcnt,charcnt,TXW1,TYW1,TXW2,TYW2,TXW3,TXW4,TYW3;
  31.  
  32. extern unsigned int slen;
  33. extern TOKBEF  TokBefDesc[];
  34. extern BOOL bHelp,RUNBREAK,Edit,LoadFile,Drucker,bText,Mono;
  35.  
  36. void menuecommand(HWND hWnd,WORD wParam)
  37. {
  38.  HANDLE hMenu,hClipData;
  39.  LPSTR lpClipData;
  40.  BYTE *Text;
  41.  int icnt;
  42.  unsigned int Zeilcnt,Zcnt;
  43.  hMenu = GetMenu(hWnd);
  44.  switch(wParam)
  45.  {
  46.   case MW_TEXTBOX:
  47.                      lpProcTemp = MakeProcInstance(SetTextBox,hInst);
  48.                      DialogBox(hInst,"SETTEXTBOX",hWnd,lpProcTemp);
  49.                      FreeProcInstance(lpProcTemp);
  50.             break;
  51.   case MN_LOAD:
  52.           if(Edit)
  53.             {
  54.              wParam=MN_WSEARCH;
  55.              SendMessage(hWnd,WM_COMMAND,wParam,0L);
  56.              break;
  57.             }
  58.            for (icnt = 0; icnt < 4;icnt++)
  59.              SendMessage(hWnd,WM_CHAR,TokBefDesc[17].Befehl[icnt],0L);
  60.   case MN_SAVE:
  61.           if(Edit)
  62.             {
  63.              wParam=MN_WERSETZE;
  64.              SendMessage(hWnd,WM_COMMAND,wParam,0L);
  65.              break;
  66.             }
  67.  
  68.            if (wParam==MN_SAVE)
  69.              for (icnt = 0; icnt < 4;icnt++)
  70.                SendMessage(hWnd,WM_CHAR,TokBefDesc[18].Befehl[icnt],0L);
  71.              SendMessage(hWnd,WM_CHAR,' ',0L);
  72.              SendMessage(hWnd,WM_CHAR,'\"',0L);
  73.            break;
  74.   case MN_CLS:
  75.            for (icnt = 0; icnt < 3;icnt++)
  76.              SendMessage(hWnd,WM_CHAR,TokBefDesc[12].Befehl[icnt],0L);
  77.   case MN_RUN:
  78.            if (wParam==MN_RUN)
  79.             for (icnt = 0; icnt < 3;icnt++)
  80.              SendMessage(hWnd,WM_CHAR,TokBefDesc[13].Befehl[icnt],0L);
  81.   case MN_TYPESET:
  82.            if (wParam==MN_TYPESET)
  83.             for (icnt = 0; icnt < 7;icnt++)
  84.              SendMessage(hWnd,WM_CHAR,TokBefDesc[26].Befehl[icnt],0L);
  85.   case MN_LIST:
  86.            if (wParam==MN_LIST)
  87.             for (icnt = 0; icnt < 4;icnt++)
  88.              SendMessage(hWnd,WM_CHAR,TokBefDesc[23].Befehl[icnt],0L);
  89.              SendMessage(hWnd,WM_CHAR,'\r',0L);
  90.            break;
  91.   case MN_SEARCH:
  92.   case MN_WSEARCH:
  93.    if(bText)
  94.            {
  95.             if(wParam==MN_SEARCH)
  96.               {
  97.                strcpy(Questr,"gesuchter Satz/Wort :");
  98.                lpProcTextBox = MakeProcInstance(Input, hInst);
  99.                DialogBox(hInst,"TextBox",hWnd,lpProcTextBox);
  100.                FreeProcInstance(lpProcTextBox);
  101.                charcnt = 0;
  102.               }
  103.              Text = LocalLock(hEditText);
  104.  
  105.              Zeilcnt=(unsigned int)SendMessage(hWndEdit,EM_GETLINECOUNT,0,0L);
  106.              Zcnt = slen = 0;
  107.  
  108.              while(Textstr[slen++] >= ' ');
  109.              Textstr[slen--]='\0';
  110.  
  111.      do {
  112.            if(Text[charcnt] == '\r')
  113.               {
  114.                Zcnt++;
  115.                charcnt++;
  116.               }
  117.            if(Text[charcnt] == Textstr[0])
  118.              if(!(memicmp(Textstr,&Text[charcnt],slen)))
  119.                 {
  120.                  if(wParam==MN_SEARCH)
  121.                      SendMessage(hWndEdit,EM_SCROLL,SB_THUMBPOSITION,0L);
  122.                  SendMessage(hWndEdit,EM_LINESCROLL,0,MAKELONG(Zcnt,0));
  123.                  SendMessage(hWndEdit,EM_SETSEL,0,MAKELONG(charcnt,charcnt+slen));
  124.                  charcnt+=slen;
  125.                  break;
  126.                 }
  127.           } while(Text[charcnt++] && Zcnt < Zeilcnt);
  128.             if(!Text[charcnt] || charcnt >=
  129.               (int)SendMessage(hWndEdit,WM_GETTEXTLENGTH,0,0L))
  130.                 charcnt = 0;
  131.              LocalUnlock(hEditText);
  132.            }
  133.           break;
  134.   case MN_ERSETZE:
  135.                 strcpy(PrintBuf,Textstr);
  136.                 strcpy(Questr,"ersetzen durch :");
  137.                 lpProcTextBox = MakeProcInstance(Input, hInst);
  138.                 DialogBox(hInst,"TextBox",hWnd,lpProcTextBox);
  139.                 FreeProcInstance(lpProcTextBox);
  140.                 strcpy(Questr,PrintBuf);
  141.                 charcnt -= slen;
  142.                 slen=0;
  143.                 while(Textstr[slen++] >= ' ');
  144.                 Textstr[slen--]='\0';
  145.                 strcpy(PrintBuf,Textstr);
  146.                 Ersetzstr=(LPSTR)PrintBuf;
  147.                 strcpy(Textstr,Questr);
  148.                 charcnt+=slen;
  149.   case MN_WERSETZE: if(Ersetzstr==NULL) break;
  150.                SendMessage(hWndEdit,EM_REPLACESEL,0,(long)Ersetzstr);
  151.            break;
  152.   case MN_EDITOR:
  153.        if(RUNBREAK) break;
  154.        Edit=TRUE;
  155.        ShowWindow(hWndEdit,SHOW_OPENWINDOW);
  156.        SetFocus(hWndEdit);
  157.        WriteProg ();
  158.        ClearProg();
  159.        LiesDaten();
  160.        UpdateWindow(hWndEdit);
  161.            break;
  162.   case MN_INTERPR:
  163.        if(Drucker && !Edit)
  164.            {
  165.             cscreen();
  166.             break;
  167.            }
  168.            else if(!Edit) break;
  169.        SaveDaten();
  170.        Edit=FALSE;
  171.        ShowWindow(hWndEdit,HIDE_WINDOW);
  172.        UpdateWindow(hWnd);
  173.        SetFocus(hWnd);
  174.        ReadProg ();
  175.        ReadBuffer[0]='\0';
  176.        Readcnt=0;
  177.        SendMessage(hWnd,WM_COMMAND,MN_LIST,0L);
  178.        if(bText)
  179.            {
  180.             Text = LocalLock(hEditText);
  181.                      LocalUnlock(hEditText);
  182.                      LocalFree(hEditText);
  183.             bText=FALSE;
  184.            }
  185.            break;
  186.   case MN_ELOAD:
  187.            Waehlbox();
  188.            if(LoadFile) LiesDaten();
  189.            InvalidateRect(hWndEdit,(LPRECT)NULL,TRUE);
  190.            break;
  191.   case MN_ESAVE:
  192.            break;
  193.   case MN_MONO:
  194.           Mono ^=1;
  195.            break;
  196.  
  197.   case MN_SCREEN:
  198.            cscreen();
  199.            break;
  200.   case MN_EXIT:
  201.            icnt=cexit();
  202.  
  203.            break;
  204.             case MN_UNDO:
  205.                  if(Edit)
  206.                     SendMessage(hWndEdit,EM_UNDO,0,0l);
  207.                  break;
  208.             case MN_CUT:
  209.                  if(Edit)
  210.                     SendMessage(hWndEdit,WM_CUT,0,0l);
  211.                  break;
  212.             case MN_COPY:
  213.                  if(Edit)
  214.                     SendMessage(hWndEdit,WM_COPY,0,0l);
  215.                     else
  216.                      writeclipbrd(hWnd,ReadBuffer);
  217.                  break;
  218.             case MN_PASTE:
  219.                  if(Edit)
  220.                     SendMessage(hWndEdit,WM_PASTE,0,0l);
  221.                      else
  222.                        readclipbrd(hWnd,TRUE);
  223.                  break;
  224.             case MN_CLEAR:
  225.                  if(Edit)
  226.                     SendMessage(hWndEdit,WM_CLEAR,0,0l);
  227.                  break;
  228.             case MN_SELECT:
  229.                  if(Edit)
  230.                  {
  231.                     SetFocus(hWndEdit);
  232.                     SendMessage(hWndEdit,EM_SETSEL,0,MAKELONG(0,
  233.                     SendMessage(hWndEdit,WM_GETTEXTLENGTH,0,0l)));
  234.                  }
  235.                  break;
  236.  
  237.   case MN_DURCHG    : TYW3 = (TYW3) ? FALSE : TRUE;
  238.            makefont();
  239.            break;
  240.   case MN_UNTERS    : TXW3 = (TXW3) ? FALSE : TRUE;
  241.            makefont();
  242.            break;
  243.   case MN_KURSIV    : TXW4 = (TXW4) ? FALSE : TRUE;
  244.            makefont();
  245.            break;
  246.   case MW_NORMAL    : TYW2 = 500;
  247.           makefont();
  248.            break;
  249.   case MW_HEAVY     : TYW2 = 600;
  250.           makefont();
  251.            break;
  252.   case MN_SYSFON:
  253.   case MN_TERFON:
  254.   case MN_HELFON:
  255.   case MN_COUFON:
  256.   case MN_TMSFON:
  257.   case MN_ROMFON:
  258.   case MN_SCRFON:
  259.   case MN_MODFON:
  260.           TXW1 =(int)(wParam - 126);
  261.           makefont();
  262.            break;
  263.   case MN_ACHT:
  264.   case MN_ZEHN:
  265.   case MN_ZWLF:
  266.   case MN_DRZN:
  267.   case MN_FFZN:
  268.   case MN_SHZN:
  269.   case MN_ACZN:
  270.   case MN_NNZN:
  271.   case MN_ZWAN:
  272.   case MN_EIZW:
  273.   case MN_ZWZW:
  274.   case MN_VRZW:
  275.   case MN_SXZW:
  276.   case MN_SIZW:
  277.   case MN_ACZW:
  278.   case MN_NNZW:
  279.   case MN_DRSG:
  280.   case MN_ZWSG:
  281.   case MN_FFSG:
  282.   case MN_SXSG:
  283.   case MN_SISG:
  284.   case MN_ACSG:
  285.   case MN_NNSG:
  286.   case MN_VRZG:
  287.   case MN_ZWZG:
  288.   case MN_VVZG:
  289.   case MN_FFZG:
  290.   case MN_ACZG:
  291.   case MN_FFZC:
  292.   case MN_ZWZC:
  293.   case MN_VFZC:
  294.   case MN_SXZC:
  295.             TYW1=TXW2=(int)wParam;
  296.              makefont();
  297.            break;
  298.  }
  299.  
  300. }
  301.  
  302. void writeclipbrd(HWND hWnd,char *writestr)
  303. {
  304.  HANDLE hData;
  305.  LPSTR  lpData;
  306.      if(*writestr < ' ') return;
  307.     hData = GlobalAlloc(GMEM_MOVEABLE,(DWORD) lstrlen(writestr));
  308.        if(hData)
  309.            {
  310.             lpData = GlobalLock(hData);
  311.              lstrcpy(lpData, (LPSTR) writestr);
  312.              GlobalUnlock(hData);
  313.            if (OpenClipboard(hWnd))
  314.               {
  315.                EmptyClipboard();
  316.                SetClipboardData(CF_TEXT,hData);
  317.                CloseClipboard();
  318.               }
  319.            }
  320.  
  321. }
  322.  
  323. void readclipbrd(HWND hWnd,BOOL ausgabe)
  324. {
  325.  HANDLE hClipData;
  326.  LPSTR  lpClipData;
  327.  BYTE   *Clipstr;
  328.    if (OpenClipboard(hWnd))
  329.       {
  330.           hClipData = GetClipboardData(CF_TEXT);
  331.           CloseClipboard();
  332.        if (hClipData)
  333.             {
  334.              lpClipData = GlobalLock(hClipData);
  335.              lstrcpy((LPSTR)Textstr,lpClipData);
  336.              GlobalUnlock(hClipData);
  337.              Clipstr=Textstr;
  338.             if(ausgabe)
  339.              while(*Clipstr)
  340.                SendMessage(hWnd,WM_CHAR,*Clipstr++,0L);
  341.             }
  342.       }
  343. }
  344.  
  345. void MakeHelpPathName(szFileName)
  346. char * szFileName;
  347. {
  348.    char *  pcFileName;
  349.    int     nFileNameLen;
  350.  
  351.    nFileNameLen = GetModuleFileName(hInst,szFileName,129);
  352.    pcFileName = szFileName + nFileNameLen;
  353.  
  354.    while (pcFileName > szFileName) {
  355.        if (*pcFileName == '\\' || *pcFileName == ':') {
  356.              *(++pcFileName) = '\0';
  357.              break;
  358.        }
  359.    nFileNameLen--;
  360.    pcFileName--;
  361.    }
  362.  
  363.    if ((nFileNameLen+13) < 129) {
  364.        lstrcat(szFileName, "txl.hlp");
  365.    }
  366.  
  367.    else {
  368.        lstrcat(szFileName, "?");
  369.    }
  370.  
  371.    return;
  372. }
  373.