home *** CD-ROM | disk | FTP | other *** search
/ Mega Top 1 / os2_top1.zip / os2_top1 / APPS / PROG / PASCAL / SPEED2 / SRC / RCOMP / RCDIALOG.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-09-29  |  20.2 KB  |  653 lines

  1. UNIT RcDialog;
  2.  
  3. INTERFACE
  4.  
  5. USES RcTypes;
  6.  
  7. VAR
  8.     TempDialog:PDialog;
  9.  
  10. CONST
  11.     DialogCount:Word=0;
  12.  
  13.     MaxDialogStyles=53;
  14.     DialogStyles:ARRAY[1..MaxDialogStyles] OF TStyle=(
  15.     (Name:'NO_STYLE';Style:0),
  16.     (Name:'WS_VISIBLE';Style:$80000000),
  17.     (Name:'WS_DISABLED';Style:$40000000),
  18.     (name:'WS_CLIPCHILDREN';Style:$20000000),
  19.     (name:'WS_CLIPSIBLINGS';Style:$10000000),
  20.     (name:'WS_PARENTCLIP';Style:$08000000),
  21.     (name:'WS_SAVEBITS';Style:$04000000),
  22.     (name:'WS_SYNCPAINT';Style:$02000000),
  23.     (name:'WS_MINIMIZED';Style:$01000000),
  24.     (name:'WS_MAXIMIZED';Style:$00800000),
  25.     (name:'WS_ANIMATE';Style:$00400000),
  26.     (name:'WS_GROUP';Style:$00010000),
  27.     (name:'WS_TABSTOP';Style:$00020000),
  28.     (name:'WS_MULTISELECT';Style:$00040000),
  29.     (Name:'FS_ICON';Style:$00000001),
  30.     (Name:'FS_ACCELTABLE';Style:$00000002),
  31.     (Name:'FS_SHELLPOSITION';Style:$00000004),
  32.     (Name:'FS_TASKLIST';Style:$00000008),
  33.     (Name:'FS_NOBYTEALIGN';Style:$00000010),
  34.     (Name:'FS_NOMOVEWITHOWNER';Style:$00000020),
  35.     (Name:'FS_SYSMODAL';Style:$00000040),
  36.     (Name:'FS_DLGBORDER';Style:$00000080),
  37.     (Name:'FS_BORDER';Style:$00000100),
  38.     (Name:'FS_SCREENALIGN';Style:$00000200),
  39.     (Name:'FS_MOUSEALIGN';Style:$00000400),
  40.     (Name:'FS_SIZEBORDER';Style:$00000800),
  41.     (Name:'FS_AUTOICON';Style:$00001000),
  42.     (Name:'FS_DBE_APPSTAT';Style:$00008000),
  43.     (Name:'FS_STANDARD';Style:$0000000F),
  44.     (Name:'BS_BITMAP';Style:$40),
  45.     (Name:'BS_ICON';Style:$80),
  46.     (Name:'WS_NOTHING';Style:0),
  47.     (Name:'WS_NORMAL';Style:$80010000),    {WS_GROUP|WS_VISIBLE}
  48.     (Name:'CBS_SIMPLE';Style:$0001),
  49.     (Name:'CBS_DROPDOWN';Style:$0002),
  50.     (Name:'CBS_DROPDOWNLIST';Style:$0004),
  51.     (Name:'ES_LEFT';Style:$00000000),
  52.     (Name:'ES_CENTER';Style:$00000001),
  53.     (Name:'ES_RIGHT';Style:$00000002),
  54.     (Name:'ES_AUTOSCROLL';Style:$00000004),
  55.     (Name:'ES_MARGIN';Style:$00000008),
  56.     (Name:'ES_AUTOTAB';Style:$00000010),
  57.     (Name:'ES_READONLY';Style:$00000020),
  58.     (Name:'ES_COMMAND';Style:$00000040),
  59.     (Name:'ES_UNREADABLE';Style:$00000080),
  60.     (Name:'ES_AUTOSIZE';Style:$00000200),
  61.     (Name:'MLS_WORDWRAP';Style:$00000001),
  62.     (Name:'MLS_BORDER';Style:$00000002),
  63.     (Name:'MLS_VSCROLL';Style:$00000004),
  64.     (Name:'MLS_HSCROLL';Style:$00000008),
  65.     (Name:'MLS_READONLY';Style:$00000010),
  66.     (Name:'MLS_IGNORETAB';Style:$00000020),
  67.     (Name:'MLS_DISABLEUNDO';Style:$00000040)
  68.     );
  69.  
  70.  
  71.     MaxDialogFlags=87;
  72.     DialogFlags:ARRAY[1..MaxDialogFlags] OF TStyle=(
  73.     (Name:'NO_FLAGS';Style:0),
  74.     (Name:'FCF_TITLEBAR';Style:$00000001),
  75.     (Name:'FCF_SYSMENU';Style:$00000002),
  76.     (Name:'FCF_MENU';Style:$00000004),
  77.     (Name:'FCF_SIZEBORDER';Style:$00000008),
  78.     (Name:'FCF_MINBUTTON';Style:$00000010),
  79.     (Name:'FCF_MAXBUTTON';STyle:$00000020),
  80.     (Name:'FCF_MINMAX';Style:$00000030),
  81.     (Name:'FCF_VERTSCROLL';Style:$00000040),
  82.     (Name:'FCF_HORZSCROLL';Style:$00000080),
  83.     (Name:'FCF_DLGBORDER';Style:$00000100),
  84.     (Name:'FCF_BORDER';Style:$00000200),
  85.     (Name:'FCF_SHELLPOSITION';Style:$00000400),
  86.     (Name:'FCF_TASKLIST';Style:$00000800),
  87.     (Name:'FCF_NOBYTEALIGN';Style:$00001000),
  88.     (Name:'FCF_NOMOVEWITHOWNER';Style:$00002000),
  89.     (Name:'FCF_ICON';Style:$00004000),
  90.     (Name:'FCF_ACCELTABLE';Style:$00008000),
  91.     (Name:'FCF_SYSMODAL';Style:$00010000),
  92.     (Name:'FCF_SCREENALIGN';Style:$00020000),
  93.     (Name:'FCF_MOUSEALIGN';Style:$00040000),
  94.     (Name:'FCF_HIDEBUTTON';Style:$01000000),
  95.     (Name:'FCF_HIDEMAX';Style:$01000020),
  96.     (Name:'FCF_DBE_APPSTAT';Style:$80000000),
  97.     (Name:'FCF_AUTOICON';Style:$40000000),
  98.     (Name:'FCF_STANDARD';Style:$0000CC3F),
  99.     (Name:'FCF_NOTHING';Style:0),
  100.     (Name:'SPBS_ALLCHARACTERS';Style:$00000000),
  101.     (Name:'SPBS_NUMERICONLY';Style:$00000001),
  102.     (Name:'SPBS_READONLY';Style:$00000002),
  103.     (Name:'SPBS_MASTER';Style:$00000010),
  104.     (Name:'SPBS_SERVANT';Style:$00000000),
  105.     (Name:'SPBS_JUSTDEFAULT';Style:$00000000),
  106.     (Name:'SPBS_JUSTLEFT';Style:$00000008),
  107.     (Name:'SPBS_JUSTRIGHT';Style:$00000004),
  108.     (Name:'SPBS_JUSTCENTER';Style:$0000000C),
  109.     (Name:'SPBS_NOBORDER';Style:$00000020),
  110.     (Name:'SPBS_FASTSPIN';Style:$00000100),
  111.     (Name:'SPBS_PADWITHZEROS';Style:$00000080),
  112.     (Name:'SLS_HORIZONTAL';Style:$00000000),
  113.     (Name:'SLS_VERTICAL';Style:$00000001),
  114.     (Name:'SLS_CENTER';Style:$00000000),
  115.     (Name:'SLS_BOTTOM';Style:$00000002),
  116.     (Name:'SLS_TOP';Style:$00000004),
  117.     (Name:'SLS_LEFT';Style:$00000002),
  118.     (Name:'SLS_RIGHT';Style:$00000004),
  119.     (Name:'SLS_SNAPTOINCREMENT';Style:$00000008),
  120.     (Name:'SLS_BUTTONSBOTTOM';Style:$00000010),
  121.     (Name:'SLS_BUTTONSTOP';Style:$00000020),
  122.     (Name:'SLS_BUTTONSLEFT';Style:$00000010),
  123.     (Name:'SLS_BUTTONSRIGHT';Style:$00000020),
  124.     (Name:'SLS_OWNERDRAW';Style:$00000040),
  125.     (Name:'SLS_READONLY';Style:$00000080),
  126.     (Name:'SLS_RIBBONSTRIP';Style:$00000100),
  127.     (Name:'SLS_HOMEBOTTOM';Style:$00000000),
  128.     (Name:'SLS_HOMETOP';Style:$00000200),
  129.     (Name:'SLS_HOMELEFT';Style:$00000000),
  130.     (Name:'SLS_HOMERIGHT';Style:$00000200),
  131.     (Name:'SLS_PRIMARYSCALE1';Style:$00000000),
  132.     (Name:'SLS_PRIMARYSCALE2';Style:$00000400),
  133.     (Name:'VS_BITMAP';Style:$0001),
  134.     (Name:'VS_ICON';Style:$0002),
  135.     (Name:'VS_TEXT';Style:$0004),
  136.     (Name:'VS_RGB';Style:$0008),
  137.     (Name:'VS_COLORINDEX';Style:$0010),
  138.     (Name:'VS_BORDER';Style:$0020),
  139.     (Name:'VS_ITEMBORDER';Style:$0040),
  140.     (Name:'VS_SCALEBITMAPS';Style:$0080),
  141.     (Name:'VS_RIGHTTOLEFT';Style:$0100),
  142.     (Name:'VS_OWNERDRAW';Style:$0200),
  143.     (Name:'SS_TEXT';Style:$0001),
  144.     (Name:'SS_GROUPBOX';Style:$0002),
  145.     (Name:'SS_ICON';Style:$0003),
  146.     (Name:'SS_BITMAP';Style:$0004),
  147.     (name:'SS_FGNDRECT';Style:$0005),
  148.     (Name:'SS_HALFTONERECT';Style:$0006),
  149.     (Name:'SS_BKGNDRECT';Style:$0007),
  150.     (Name:'SS_FGNDFRAME';Style:$0008),
  151.     (Name:'SS_HALFTONEFRAME';Style:$0009),
  152.     (Name:'SS_BKGNDFRAME';Style:$000a),
  153.     (Name:'SS_SYSICON';Style:$000b),
  154.     (Name:'SS_AUTOSIZE';Style:$0040),
  155.     (Name:'LS_MULTIPLESEL';Style:$00000001),
  156.     (Name:'LS_OWNERDRAW';Style:$00000002),
  157.     (Name:'LS_NOADJUSTPOS';Style:$00000004),
  158.     (Name:'LS_HORZSCROLL';Style:$00000008),
  159.     (Name:'LS_EXTENDEDSEL';Style:$00000010)
  160.     );
  161.  
  162.     MaxDialogTypes=23;
  163.     DialogTypes:Array[1..MaxDialogtypes] OF TStyle=(
  164.      (Name:'WC_FRAME';Style:$0001),
  165.      (Name:'WC_COMBOBOX';Style:$0002),
  166.      (Name:'WC_BUTTON';Style:$0003),
  167.      (Name:'WC_MENU';Style:$0004),
  168.      (Name:'WC_STATIC';Style:$0005),
  169.      (Name:'WC_ENTRYFIELD';Style:$0006),
  170.      (Name:'WC_LISTBOX';Style:$0007),
  171.      (Name:'WC_SCROLLBAR';Style:$0008),
  172.      (Name:'WC_TITLEBAR';Style:$0009),
  173.      (Name:'WC_MLE';Style:$000A),
  174.      (Name:'WC_APPSTAT';Style:$0010),
  175.      (Name:'WC_KBDSTAT';Style:$0011),
  176.      (name:'WC_PECIC';Style:$0012),
  177.      (Name:'WC_DBE_KKPOPUP';Style:$0013),
  178.      (Name:'WC_SPINBUTTON';Style:$0020),
  179.      (Name:'WC_CONTAINER';Style:$0025),
  180.      (Name:'WC_SLIDER';Style:$0026),
  181.      (Name:'WC_VALUESET';Style:$0027),
  182.      (Name:'WC_NOTEBOOK';Style:$0028),
  183.      (Name:'WC_PENFIRST';Style:$0029),
  184.      (Name:'WC_PENLAST';Style:$002C),
  185.      (Name:'WC_MMPMFIRST';Style:$0040),
  186.      (Name:'WC_MMPMLAST';Style:$004f)
  187.      );
  188.  
  189.  
  190.  
  191.  
  192. PROCEDURE ParseDialog;
  193. PROCEDURE Write_res_Dialogs;
  194. PROCEDURE Write_Dialogs;
  195.  
  196.  
  197. IMPLEMENTATION
  198.  
  199. PROCEDURE NewDialog(VAR dial,d:PDialog);
  200. BEGIN
  201.      IF Dial=NIL THEN
  202.      BEGIN
  203.           New(Dial);
  204.           d:=Dial;
  205.      END
  206.      ELSE
  207.      BEGIN
  208.           d:=Dial;
  209.           while d^.next<>NIL do d:=d^.next;
  210.           new(d^.next);
  211.           d:=d^.next;
  212.      END;
  213.      d^.SubSize:=0;
  214.      d^.Interior:=NIL;
  215.      d^.next:=NIL;
  216.      d^.Flags:=0;
  217.      d^.Style:=0;
  218.      d^.Art:=0;
  219.      d^.InteriorCount:=0;
  220.      d^.DataCount:=0;
  221.      d^.PresParambytes:=0;
  222. END;
  223.  
  224. PROCEDURE Write_res_Dialogs;
  225. var d,d1:PDialog;
  226.     b:byte;
  227.     textofs:WORD;
  228. BEGIN
  229.      d:=Dialogs;
  230.      WHILE d<>NIL DO
  231.      BEGIN
  232.           WriteWord(d^.SubSize AND 65535);
  233.           WriteWord(d^.Subsize SHR 16);
  234.           WriteWord($0352);
  235.           WriteWord($0e);
  236.           WriteWord(1);
  237.           WriteWord($ffff);
  238.           WriteWord(0);
  239.           WriteWord(0);
  240.           WriteWord(d^.InteriorCount);
  241.           WriteWord(0);
  242.           WriteWord(0{1???????????});
  243.           WriteWord(length(d^.Title));       {Length of dialog title}
  244.           textofs:=44+d^.InteriorCount*30;   {Offset of the text from start}
  245.           WriteWord(textofs); {Offset of dialog title}
  246.           WriteWord(d^.Style AND 65535);
  247.           WriteWord(d^.Style SHR 16);
  248.           WriteWord(d^.x);
  249.           WriteWord(d^.y);
  250.           WriteWord(d^.x1);
  251.           WriteWord(d^.y1);
  252.           WriteWord(d^.ident);
  253.           inc(textofs,length(d^.title)+1);
  254.           IF d^.PresParambytes=0 THEN WriteWord($ffff)
  255.           ELSE
  256.           BEGIN
  257.                WriteWord(textofs+4);
  258.           END;
  259.           WriteWord(textofs); {length of dialog including title}
  260.           inc(textofs,d^.presparambytes+4);
  261.           d1:=d^.Interior;
  262.           WHILE d1<>NIL DO
  263.           BEGIN
  264.                WriteWord(0);
  265.                WriteWord(0);
  266.                WriteWord(0);
  267.                WriteWord(d1^.Art);
  268.                WriteWord(length(d1^.title));
  269.                WriteWord(textofs);
  270.                inc(textofs,length(d1^.title)+1);
  271.                WriteWord(d1^.flags and 65535);
  272.                WriteWord(d1^.flags shr 16);
  273.                WriteWord(d1^.x);
  274.                WriteWord(d1^.y);
  275.                WriteWord(d1^.x1);
  276.                WriteWord(d1^.y1);
  277.                WriteWord(d1^.ident);
  278.                IF d1^.PresParambytes=0 THEN WriteWord($ffff)
  279.                ELSE
  280.                BEGIN
  281.                     WriteWord(textofs);
  282.                     inc(textofs,d1^.presparambytes);
  283.                END;
  284.                IF d1^.datacount=0 THEN WriteWord($ffff)
  285.                ELSE
  286.                BEGIN
  287.                     WriteWord(textofs);
  288.                     inc(textofs,d1^.datacount SHL 1);
  289.                END;
  290.                d1:=d1^.next;
  291.           END;
  292.           WriteStr(d^.Title);
  293.           WriteWord(d^.Flags AND 65535);
  294.           WriteWord(d^.Flags SHR 16);
  295.           IF d^.PresParambytes>0 THEN
  296.           BEGIN
  297.                Blockwrite(Zielf,d^.Presparams[0],d^.PresParamBytes);
  298.                if ioresult<>0 then error('File write error');
  299.           END;
  300.  
  301.           d1:=d^.Interior;
  302.           IF d1=NIL THEN
  303.           BEGIN
  304.                b:=0;
  305.                Blockwrite(Zielf,b,1);
  306.                if ioresult<>0 then error('File write error');
  307.           END
  308.           ELSE
  309.           BEGIN
  310.                WHILE d1<>NIL DO
  311.                BEGIN
  312.                     WriteStr(d1^.title);
  313.                     IF d1^.PresParambytes>0 THEN
  314.                     BEGIN
  315.                          Blockwrite(Zielf,d1^.Presparams[0],d1^.PresParamBytes);
  316.                          if ioresult<>0 then error('File write error');
  317.                     END;
  318.                     IF d1^.datacount>0 THEN
  319.                       FOR b:=1 TO d1^.datacount DO WriteWord(d1^.Data[b-1]);
  320.                     d1:=d1^.next;
  321.                END;
  322.           END;
  323.           d:=d^.next;
  324.      END;
  325. END;
  326.  
  327.  
  328. PROCEDURE Write_Dialogs;
  329. VAR w:Word;
  330.     d:PDialog;
  331. BEGIN
  332.      DialogOffset:=MenuOffset;
  333.      d:=Dialogs;
  334.      WHILE d<>NIL DO
  335.      BEGIN
  336.           WriteWord(4);                     {Typ:Dialog}
  337.           writeword(d^.ident);              {Bezeichner des Menus}
  338.           writeword(d^.subsize AND 65535);  {Länge der Einträge für dieses Menu}
  339.           writeword(d^.subsize SHR 16);
  340.           writeWord(3);                     {Object number}
  341.           writeWord(DialogOffset AND 65535);  {Relativer Resourcenoffset}
  342.           writeWord(DialogOffset SHR 16);
  343.           inc(DialogOffset,d^.SubSize);
  344.           d:=d^.next;
  345.      END;
  346. END;
  347.  
  348. PROCEDURE Calc_DialogSize(VAR d:PDialog);
  349. VAR d1:PDialog;
  350. BEGIN
  351.      d^.Subsize:=48;
  352.      inc(d^.subsize,length(d^.title)+1);
  353.      inc(d^.subsize,d^.presparambytes);
  354.      d1:=d^.Interior;
  355.      WHILE d1<>NIL DO
  356.      BEGIN
  357.           inc(d^.Subsize,30);
  358.           inc(d^.subsize,length(d1^.title)+1);
  359.           inc(d^.subsize,d1^.datacount SHL 1);
  360.           inc(d^.subsize,d1^.presparambytes);
  361.           d1:=d1^.next;
  362.      END;
  363. END;
  364.  
  365.  
  366. PROCEDURE Get_Caption(VAR Params:String;VAR Name:STRING;
  367.                       VAR ident,x,y,x1,y1:WORD);
  368. VAR s:String;
  369.     c:Integer;
  370.     i1:LONGINT;
  371. BEGIN
  372.      SplitLine(Params,s,',');
  373.      IF s='' THEN Error('Syntax error');
  374.      IF s[1]<>'"' THEN Error('String expected');
  375.      IF s[length(s)]<>'"' THEN Error('String constant exceeds line');
  376.      dec(s[0]);
  377.      delete(s,1,1);
  378.      Name:=s;
  379.      SplitLine(Params,s,',');
  380.      val(s,i1,c);
  381.      if c<>0 then
  382.      BEGIN
  383.           IF not SearchConstant(s,i1) THEN
  384.             error('Illegal numeric format');
  385.      END;
  386.      ident:=i1;
  387.      SplitLine(Params,s,',');
  388.      val(s,i1,c);
  389.      if c<>0 then
  390.      BEGIN
  391.           IF not SearchConstant(s,i1) THEN
  392.             error('Illegal numeric format');
  393.      END;
  394.      x:=i1;
  395.      SplitLine(Params,s,',');
  396.      val(s,i1,c);
  397.      if c<>0 then
  398.      BEGIN
  399.           IF not SearchConstant(s,i1) THEN
  400.             error('Illegal numeric format');
  401.      END;
  402.      y:=i1;
  403.      SplitLine(Params,s,',');
  404.      val(s,i1,c);
  405.      if c<>0 then
  406.      BEGIN
  407.           IF not SearchConstant(s,i1) THEN
  408.             error('Illegal numeric format');
  409.      END;
  410.      x1:=i1;
  411.      val(Params,i1,c);
  412.      if c<>0 then
  413.      BEGIN
  414.           IF not SearchConstant(s,i1) THEN
  415.             error('Illegal numeric format');
  416.      END;
  417.      y1:=i1;
  418. END;
  419.  
  420.  
  421. PROCEDURE Get_Style(VAR Style:LONGINT);
  422. VAR s,Temp:STRING;
  423.     t:BYTE;
  424. Label l;
  425. BEGIN
  426.      IF commanditem<>__STYLE THEN Error('STYLE expected');
  427.      s:=params;
  428.      SplitLine(s,params,',');
  429. l:
  430.      SplitLine(Params,Temp,'|');
  431.      FOR t:=1 TO length(Temp) DO Temp[t]:=upcase(temp[t]);
  432.      FOR t:=1 TO MaxDialogStyles DO
  433.      BEGIN
  434.           IF DialogStyles[t].Name=temp THEN
  435.           BEGIN
  436.                Style:=Style or DialogStyles[t].Style;
  437.                IF params<>'' THEN goto l;
  438.                exit;
  439.           END;
  440.      END;
  441.      Error('Illegal dialog style:'+temp);
  442. END;
  443.  
  444. PROCEDURE Get_Typ(VAR Typ:WORD);
  445. VAR s,Temp:STRING;
  446.     t:BYTE;
  447. Label l;
  448. BEGIN
  449.      IF commanditem<>__TYPE THEN Error('TYPE expected');
  450.      s:=params;
  451.      SplitLine(s,params,',');
  452. l:
  453.      SplitLine(Params,Temp,'|');
  454.      FOR t:=1 TO length(Temp) DO Temp[t]:=upcase(temp[t]);
  455.      FOR t:=1 TO MaxDialogTypes DO
  456.      BEGIN
  457.           IF DialogTypes[t].Name=temp THEN
  458.           BEGIN
  459.                Typ:=Typ or DialogTypes[t].Style;
  460.                IF params<>'' THEN goto l;
  461.                exit;
  462.           END;
  463.      END;
  464.      Error('Illegal dialog type:'+temp);
  465. END;
  466.  
  467. PROCEDURE Get_Flags(VAR Flags:LONGINT);
  468. VAR s,Temp:STRING;
  469.     t:BYTE;
  470. Label l;
  471. BEGIN
  472.      IF commanditem<>__FLAGS THEN Error('FLAGS expected');
  473.      s:=Params;
  474.      SplitLine(s,params,',');
  475. l:
  476.      SplitLine(Params,Temp,'|');
  477.      FOR t:=1 TO length(Temp) DO Temp[t]:=upcase(temp[t]);
  478.      FOR t:=1 TO MaxDialogFlags DO
  479.      BEGIN
  480.           IF DialogFlags[t].Name=temp THEN
  481.           BEGIN
  482.                Flags:=Flags or DialogFlags[t].Style;
  483.                IF params<>'' THEN goto l;
  484.                exit;
  485.           END;
  486.      END;
  487.      Error('Illegal dialog flag:'+temp);
  488. END;
  489.  
  490.  
  491. PROCEDURE Get_Data(d:PDialog);
  492. VAR s:string;
  493.     i1:LONGINT;
  494.     c:Integer;
  495. Label l;
  496. BEGIN
  497.      IF commanditem<>__CTLDATA THEN Error('CTLDATA expected');
  498.      SplitLine(Params,s,',');
  499.      IF s='' THEN Error('Syntax error');
  500. l:
  501.      val(s,i1,c);
  502.      if c<>0 then
  503.      BEGIN
  504.           IF not SearchConstant(s,i1) THEN
  505.             error('Illegal numeric format');
  506.      END;
  507.      IF ((i1<0)OR(i1>65535)) THEN Error('Range check');
  508.      d^.Data[d^.DataCount]:=i1;
  509.      inc(d^.DataCount);
  510.      SplitLine(Params,s,',');
  511.      IF s<>'' THEN goto l;
  512. END;
  513.  
  514. PROCEDURE ReadDialog(d:PDialog);
  515. VAR d1:PDialog;
  516. Label l;
  517. BEGIN
  518.      Read_Line;
  519.      IF commanditem<>__DIALOG THEN Error('DIALOG expected');
  520.      Get_Caption(Params,d^.Title,d^.ident,d^.x,d^.y,d^.x1,d^.y1);
  521.      Read_Line;
  522.      Get_Style(d^.Style);
  523.      Read_Line;
  524.      Get_Flags(d^.Flags);
  525.      Read_Line;
  526.      IF commanditem=__PRESPARAMS THEN GetPresParams(d);
  527.      IF commanditem<>__BEGIN THEN Error('BEGIN expected');
  528.      Read_Line;
  529.      WHILE commanditem<>__END DO
  530.      BEGIN
  531.           IF commanditem<>__END THEN
  532.           BEGIN
  533.                NewDialog(d^.Interior,d1);
  534.                INC(d^.InteriorCount);
  535.           END;
  536.           CASE commanditem OF
  537.              __END:exit;
  538.              __ICON:
  539.              BEGIN
  540.                   d1^.Art:=5; {WC_Static}
  541.                   d1^.Flags:=3; {SS_ICON}
  542.              END;
  543.              __BITMAP:
  544.              BEGIN
  545.                   d1^.Art:=5; {WC_Static}
  546.                   d1^.Flags:=4; {SS_BITMAP}
  547.              END;
  548.              __LTEXT,__RTEXT,__CTEXT:
  549.              BEGIN
  550.                   d1^.Art:=5; {WC_STATIC}
  551.                   CASE commanditem OF
  552.                     __LTEXT:d1^.Flags:=1;      {SS_TEXT|DT_LEFT}
  553.                     __CTEXT:d1^.Flags:=$0101;  {SS_TEXT|DT_CENTER}
  554.                     __RTEXT:d1^.Flags:=$0201;  {SS_TEXT|DT_RIGHT}
  555.                   END; {case}
  556.              END;
  557.              __GROUPBOX:
  558.              BEGIN
  559.                   d1^.Art:=5; {WC_STATIC}
  560.                   d1^.Flags:=2; {SS_GROUPBOX}
  561.              END;
  562.              __AUTORADIOBUTTON:
  563.              BEGIN
  564.                   d1^.Art:=3; {WC_BUTTON}
  565.                   d1^.Flags:=4; {BS_AUTORADIOBUTTON}
  566.              END;
  567.              __MLE:
  568.              BEGIN
  569.                   d1^.Art:=$0a; {WC_MLE}
  570.              END;
  571.              __AUTOCHECKBOX:
  572.              BEGIN
  573.                   d1^.Art:=3; {WC_BUTTON}
  574.                   d1^.Flags:=2; {BS_AUTOCHECKBOX}
  575.              END;
  576.              __RADIOBUTTON:
  577.              BEGIN
  578.                   d1^.Art:=3; {WC_BUTTON}
  579.                   d1^.Flags:=3; {BS_RADIOBUTTON}
  580.              END;
  581.              __CONTROL:
  582.              BEGIN
  583.                   Get_Caption(Params,d1^.Title,d1^.ident,d1^.x,d1^.y,d1^.x1,d1^.y1);
  584.                   Read_Line;
  585.                   Get_Typ(d1^.Art);
  586.                   Read_Line;
  587.                   Get_Style(d1^.Flags);
  588.                   Read_Line;
  589.                   Get_Flags(d1^.Flags);
  590.                   Read_Line;
  591.                   IF commanditem=__CTLDATA THEN
  592.                   BEGIN
  593.                        Get_Data(d1);
  594.                        Read_Line;
  595.                   END;
  596.                   goto l;
  597.              END;
  598.              __CHECKBOX:
  599.              BEGIN
  600.                   d1^.Art:=3; {WC_BUTTON}
  601.                   d1^.Flags:=1; {BS_CHECKBOX}
  602.              END;
  603.              __COMBOBOX:d1^.Art:=2; {WC_COMBOBOX}
  604.              __LISTBOX:d1^.Art:=7; {WC_LISTBOX}
  605.              __ENTRYFIELD:d1^.Art:=6; {WC_ENTRYFILED}
  606.              __SCROLLBAR:d1^.Art:=8; {WC_SCROLLBAR}
  607.              __SLIDER:d1^.Art:=$26; {WC_SLIDER}
  608.              __VALUESET:d1^.Art:=$27; {WC_VALUESET}
  609.              __CONTAINER:d1^.Art:=$25; {WC_CONTAINER}
  610.              __SPINBUTTON:d1^.Art:=$20; {WC_SPINBUTTON}
  611.              __FRAME:d1^.Art:=1; {WC_FRAME}
  612.              __PUSHBUTTON,__DEFPUSHBUTTON:
  613.              BEGIN
  614.                   d1^.Art:=3; {WC_BUTTON}
  615.                   IF commanditem=__DEFPUSHBUTTON THEN d1^.Flags:=$0400; {BS_DEFAULT}
  616.              END;
  617.              ELSE Error('Illegal dialog control');
  618.           END;
  619.           Get_Caption(Params,d1^.Title,d1^.ident,d1^.x,d1^.y,d1^.x1,d1^.y1);
  620.           Read_Line;
  621.           Get_Style(d1^.Flags);
  622.           Read_Line;
  623. l:
  624.           IF commanditem=__PRESPARAMS THEN GetPresParams(d1);
  625.      END;
  626. END;
  627.  
  628.  
  629. PROCEDURE ParseDialog;
  630. VAR i:WORD;
  631.     c:Integer;
  632.     i1:LONGINT;
  633.     d:PDialog;
  634. BEGIN
  635.      INC(DialogCount);
  636.      val(params,i,c);
  637.      if c<>0 then
  638.      BEGIN
  639.           IF not SearchConstant(params,i1) THEN
  640.             error('Illegal numeric format');
  641.           i:=i1;
  642.      END;
  643.      params:='';
  644.      NewDialog(Dialogs,d);
  645.      d^.ident:=i;
  646.      Read_Line;
  647.      IF commanditem<>__BEGIN THEN Error('BEGIN expected');
  648.      ReadDialog(d);
  649.      Calc_DialogSize(d);
  650. END;
  651.  
  652. BEGIN
  653. END.