home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 04 / txl / 1_preis / wmcom.c < prev    next >
Text File  |  1991-03-06  |  10KB  |  348 lines

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