home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / LATTIC_3.LZH / WTEST / WTEST.PAS < prev    next >
Pascal/Delphi Source File  |  1988-08-31  |  5KB  |  259 lines

  1.  
  2. { a WERCS test program for Personal Pascal from OSS }
  3. {      (also known as Atari Pascal Plus in Germany) }
  4.  
  5. PROGRAM WERCTEST;
  6.  
  7.     {$I GEMSUBS.PAS }
  8.  
  9.     {$I WRSC.INC }
  10.  
  11. CONST
  12.     WF_NEWDESK = 14;
  13.     FMD_FINISH = 3;
  14.     WF_WorkXYWH=4;
  15.  
  16.  
  17. TYPE
  18.     Object_Type = RECORD
  19.         ob_next: Short_Integer;
  20.         ob_head: Short_Integer;
  21.         ob_tail: Short_Integer;
  22.         ob_type: Short_Integer;
  23.         ob_flags:Short_Integer;
  24.         ob_state: Short_Integer;
  25.         ob_spec: LONG_INTEGER;
  26.         ob_x: Short_Integer;
  27.         ob_y: Short_Integer;
  28.         ob_width: Short_Integer;
  29.         ob_height: Short_Integer;
  30.         END;
  31.  
  32.     Object_Ptr = ^Object_Type;
  33.  
  34.     ObjectArr=ARRAY [0..500] OF Object_Type;
  35.     ObjectArrPtr=^ObjectArr;
  36.  
  37. VAR    menu:Menu_Ptr;
  38.     junk:integer;
  39.     screenx,screeny,screenw,screenh:integer;
  40.     radio:integer;
  41.     checkflag,deskflag:boolean;
  42.     edittext:Str255;
  43.  
  44.  
  45. { this is a C-type AES call not built-in to the standard library }
  46. PROCEDURE Form_Dial(fo_diflag,fo_dilittlx,fo_dilittly,fo_dilittlw,
  47.     fo_dilittlh,fo_dibigx,fo_dibigy,fo_dibigw,fo_dibigh:Short_Integer);
  48. VAR    int_in: Int_In_Parms;
  49.     int_out: Int_Out_Parms;
  50.     addr_in: Addr_In_Parms;
  51.     addr_out: Addr_Out_Parms;
  52. BEGIN
  53.     int_in[0]:=fo_diflag; int_in[1]:=fo_dilittlx;
  54.     int_in[2]:=fo_dilittly; int_in[3]:=fo_dilittlw;
  55.     int_in[4]:=fo_dilittlh; int_in[5]:=fo_dibigx;
  56.     int_in[6]:=fo_dibigy; int_in[7]:=fo_dibigw;
  57.     int_in[8]:=fo_dibigh;
  58.     AES_Call(51,int_in,int_out,addr_in,addr_out);
  59. END;
  60.  
  61.  
  62. PROCEDURE SETDESK(desk:Dialog_Ptr);
  63.  
  64.     FUNCTION Addr(VAR what:Dialog_Ptr): Long_Integer;
  65.         EXTERNAL;
  66.     FUNCTION WPeek(what:Long_Integer): Short_Integer;
  67.         EXTERNAL;
  68.  
  69. BEGIN
  70. {$P-}
  71. Wind_Set(0,WF_NEWDESK,Wpeek(Addr(desk)),
  72.     Wpeek(Addr(desk)+2),0,0);
  73. {$P+}
  74. { now cause the AES to re-draw the whole screen }
  75. Form_Dial(FMD_FINISH,0,0,0,0,screenx,screeny,screenw,screenh);
  76. END;
  77.  
  78.  
  79. PROCEDURE Initialise;
  80.  
  81. BEGIN
  82. IF NOT Load_Resource('WRSC.RSC') THEN
  83.     BEGIN
  84.     junk:=Do_Alert('[3][Resource error][ Quit ]',1);
  85.     Exit_Gem;
  86.     Halt;
  87.     END;
  88. Init_Mouse;
  89. Find_Menu(MENU1,menu);
  90. Draw_Menu(menu);
  91.  
  92. Wind_Get(0,WF_WorkXYWH,screenx,screeny,screenw,screenh);
  93.  
  94. edittext:='';
  95. deskflag:=FALSE;
  96. radio:=DRadio1;
  97. END;
  98.  
  99. PROCEDURE DeInitialise;
  100.  
  101. BEGIN
  102. IF deskflag THEN SETDESK(NIL);
  103. Free_Resource;
  104. END;
  105.  
  106. {$P-}
  107. PROCEDURE SetButton(DialogPtr:Dialog_Ptr; parent,button:Short_integer);
  108. VAR Cur:Short_integer;
  109.     fudge: RECORD
  110.         CASE BOOLEAN OF
  111.         TRUE:    ( D1: Dialog_Ptr );
  112.         FALSE:    ( D2: ObjectArrPtr )
  113.         END;
  114.     Dialog:ObjectArrPtr;
  115. BEGIN
  116.     WITH fudge DO
  117.     BEGIN
  118.         D1:=DialogPtr;
  119.         Dialog:=D2;
  120.     END;
  121.     Cur:=Dialog^[parent].ob_head;
  122.     WHILE Cur<>parent DO
  123.         WITH Dialog^[Cur] DO
  124.             BEGIN
  125.             IF Cur=button THEN
  126.                 ob_state:=ob_state | SELECTED
  127.                 ELSE
  128.                    ob_state:=ob_state & (-SELECTED-1);
  129.             Cur:=ob_next;
  130.             END;
  131. END;
  132.  
  133. FUNCTION GetButton(DialogPtr:Dialog_Ptr; parent:Short_integer):Short_integer;
  134. VAR Cur:INTEGER;
  135.     fudge: RECORD
  136.         CASE BOOLEAN OF
  137.         TRUE:    ( D1: Dialog_Ptr );
  138.         FALSE:    ( D2: ObjectArrPtr )
  139.         END;
  140.     Dialog:ObjectArrPtr;
  141. BEGIN
  142.     WITH fudge DO
  143.     BEGIN
  144.         D1:=DialogPtr;
  145.         Dialog:=D2;
  146.     END;
  147.     Cur:=Dialog^[parent].ob_head;
  148.     WHILE    (Cur<>parent)  AND ( (Dialog^[Cur].ob_state & SELECTED)=0) DO
  149.             Cur:=Dialog^[Cur].ob_next;
  150. GetButton:=Cur;
  151. END;
  152. {$P+}
  153.  
  154. PROCEDURE test_dialog;
  155. VAR    result:integer;
  156.     dlog:Dialog_Ptr;
  157. BEGIN
  158. Find_Dialog(TestDialog,dlog);
  159. Center_Dialog(dlog);
  160. Set_DText(dlog,DEditable,edittext,System_Font,TE_Left);
  161. SetButton(dlog,DParent,radio);
  162. result:=Do_Dialog(dlog,DEditable);
  163. IF result=DOK THEN
  164.     BEGIN
  165.     Get_DEdit(dlog,DEditable,edittext);
  166.     radio:=GetButton(dlog,DParent);
  167.     END;
  168. Obj_Setstate(dlog,result,Obj_State(dlog,result)&$FFFE,FALSE);
  169. End_Dialog(dlog);
  170. END;
  171.  
  172.  
  173. PROCEDURE Update_Desk;
  174. VAR
  175.  
  176. { this type is needed to allow direct ob_ access while keeping
  177.  compatiblity for Dialog routines }
  178.  
  179.     Desk_Ptr:RECORD CASE BOOLEAN OF
  180.         TRUE:(D: Dialog_Ptr );
  181.         FALSE:(O:Object_Ptr )
  182.         END;
  183.  
  184. BEGIN
  185. IF deskflag THEN
  186.     BEGIN
  187.     deskflag:=FALSE;
  188.     SETDESK(NIL);
  189.     END
  190. ELSE
  191.     BEGIN
  192.     deskflag:=TRUE;
  193.     Find_Dialog(NewDesktop,Desk_Ptr.D);
  194.     {$P-}
  195.     WITH Desk_Ptr.O^ DO
  196.         BEGIN
  197.         ob_x:=screenx; ob_y:=screeny;
  198.         ob_width:=screenw;
  199.         ob_height:=screenh;
  200.         END;
  201.     SETDESK(Desk_Ptr.D);
  202.     {$P=}
  203.     END;
  204. END;
  205.  
  206.  
  207. FUNCTION handle_menu(title:integer;item:integer):boolean;
  208. VAR alertstr:Str255;
  209.  
  210. BEGIN
  211. handle_menu:=FALSE;
  212. CASE item OF
  213.     MAbout:    BEGIN
  214.         Find_Alert(AAlert,alertstr);
  215.         junk:=Do_Alert(alertstr,1);
  216.         END;
  217.     MQuit:    handle_menu:=TRUE;
  218.     MCheckme:BEGIN
  219.         checkflag:=NOT checkflag;
  220.         Menu_Check(menu,MCheckme,checkflag);
  221.         END;
  222.     MDialog:test_dialog;
  223.     MInstall:update_desk;
  224. END;
  225. Menu_Normal(menu,title);
  226. END;
  227.  
  228. PROCEDURE Main;
  229. VAR    mess:Message_Buffer;
  230.     finished:boolean;
  231.     result:integer;
  232.  
  233. BEGIN
  234. finished:=FALSE; checkflag:=FALSE;
  235. WHILE NOT finished DO
  236. BEGIN
  237.     result:=Get_Event(E_Message,0,0,0,
  238.             0,
  239.             FALSE,0,0,0,0,FALSE,0,0,0,0,
  240.             mess,
  241.             junk,junk,junk,junk,junk,junk);
  242.     IF result=E_Message THEN
  243.         IF mess[0]=MN_Selected THEN
  244.             finished:=handle_menu(mess[3],mess[4]);
  245. END; {while}
  246. END;
  247.  
  248. { main program }    
  249. BEGIN
  250. IF Init_Gem >= 0 THEN
  251.     BEGIN
  252.     Initialise;
  253.     Main;
  254.     DeInitialise;
  255.     Exit_Gem;
  256.     END;
  257. END.
  258.  
  259.