home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / pcmag / vol9n04.zip / HELLO2.PAS < prev    next >
Pascal/Delphi Source File  |  1990-01-22  |  3KB  |  133 lines

  1. HELLO2.PAS
  2.  
  3. UNIT Hello2;
  4.  
  5. {$IFDEF ver55}
  6.   {$DEFINE TP}
  7. {$ELSE}
  8.   {$IFDEF ver10}
  9.     {$DEFINE QP}
  10.   {$ELSE}
  11.     CRASH HERE -- neither Turbo nor Quick
  12.   {$ENDIF}
  13. {$ENDIF}
  14. (**********************)
  15. (**)    INTERFACE   (**)
  16. (**********************)
  17.  
  18. USES Crt;
  19. TYPE
  20.   message = OBJECT
  21.     words : String;
  22.     {$IFDEF TP}CONSTRUCTOR {$ELSE} PROCEDURE {$ENDIF}
  23.     Init(iS : String);
  24.     PROCEDURE Say; {$IFDEF TP}virtual;{$ENDIF}
  25.   END;
  26.  
  27.   placeMessage = OBJECT(message)
  28.     X,Y : Byte;
  29.     {$IFDEF TP}CONSTRUCTOR {$ELSE} PROCEDURE {$ENDIF}
  30.     InitPM(iS : String; iX,iY : Byte);
  31.     PROCEDURE Say; {$IFDEF TP}virtual;{$ELSE}override;{$ENDIF}
  32.   END;
  33.  
  34.   colorMessage = OBJECT(placemessage)
  35.     color, SaveColor : Byte;
  36.     {$IFDEF TP}CONSTRUCTOR {$ELSE} PROCEDURE {$ENDIF}
  37.     InitCM(iS : String; iX, iY, iColor : Byte);
  38.     PROCEDURE Say; {$IFDEF TP}virtual;{$ELSE}override;{$ENDIF}
  39.   END;
  40.  
  41.   MsPt = ^Message;
  42.   PMpt = ^PlaceMessage;
  43.   CMpt = ^ColorMessage;
  44.   MsgList = ^MsgNode;
  45.   MsgNode = RECORD
  46.     data : MsPt;
  47.     next : msgList;
  48.   END;
  49.  
  50.   List = OBJECT
  51.     Nodes : MsgList;
  52.     {$IFDEF TP}CONSTRUCTOR {$ELSE} PROCEDURE {$ENDIF}
  53.     Init;
  54.     PROCEDURE Add(MP : MsPt);
  55.     PROCEDURE Show;
  56.   END;
  57.  
  58. (**********************)
  59. (**) IMPLEMENTATION (**)
  60. (**********************)
  61.  
  62.   {$IFDEF TP}CONSTRUCTOR {$ELSE} PROCEDURE {$ENDIF}
  63.   Message.Init(iS : String);
  64.   BEGIN  self.words := iS;  END;
  65.  
  66.   PROCEDURE Message.Say;
  67.   BEGIN  Write(self.words);  END;
  68.  
  69.   {$IFDEF TP}CONSTRUCTOR {$ELSE} PROCEDURE {$ENDIF}
  70.   PlaceMessage.InitPM(iS : String; iX, iY : Byte);
  71.   BEGIN
  72.     {$IFDEF TP} Message.Init(iS);
  73.     {$ELSE}     self.Init(iS);
  74.     {$ENDIF}
  75.     self.X := iX;
  76.     self.Y := iY;
  77.   END;
  78.  
  79.   PROCEDURE PlaceMessage.Say;
  80.   BEGIN
  81.     GotoXY(self.X,self.Y);
  82.     {$IFDEF TP} Message.say;
  83.     {$ELSE}    Inherited self.say;
  84.     {$ENDIF}
  85.   END;
  86.  
  87.   {$IFDEF TP}CONSTRUCTOR {$ELSE} PROCEDURE {$ENDIF}
  88.   ColorMessage.InitCM(iS : String; iX, iY, iColor : Byte);
  89.   BEGIN
  90.     {$IFDEF TP} PlaceMessage.InitPM(iS,iX,iY);
  91.     {$ELSE}    self.InitPM(iS,iX,iY);
  92.     {$ENDIF}
  93.     self.color := iColor;
  94.   END;
  95.  
  96.   PROCEDURE ColorMessage.Say;
  97.   BEGIN
  98.     self.SaveColor := TextAttr;
  99.     TextAttr := self.color;
  100.     {$IFDEF TP} PlaceMessage.Say;
  101.     {$ELSE}    Inherited self.say;
  102.     {$ENDIF}
  103.     TextAttr := self.SaveColor;
  104.   END;
  105.  
  106.   {$IFDEF TP}CONSTRUCTOR {$ELSE} PROCEDURE {$ENDIF}
  107.   List.Init;
  108.   BEGIN  self.Nodes := NIL; END;
  109.  
  110.   PROCEDURE List.Add(MP : MsPt);
  111.   VAR P : msgList;
  112.   BEGIN
  113.     New(P);
  114.     P^.data := MP;
  115.     P^.next := self.nodes;
  116.     self.nodes := P;
  117.   END;
  118.  
  119.   PROCEDURE List.Show;
  120.   VAR P : MsgList;
  121.   BEGIN
  122.     P := self.nodes;
  123.     WHILE P <> NIL DO
  124.       BEGIN
  125.     P^.data^.say;
  126.     P := P^.next;
  127.       END;
  128.   END;
  129.  
  130. END.
  131.  
  132.  
  133.