@=~ ~p typesetter = texinfo ~p maximum_input_line_length = infinity ~O~~{ #include "streets.drawings.h" ~} ~O~~{ #ifndef STREETS_DRAWINGS_H #define STREETS_DRAWINGS_H #include "VisAutoPatternCode.h" DECL_VECTORDRAWING(ProgramDefinitionDrawing) DECL_VECTORDRAWING(ComponentDefinitionDrawing) DECL_VECTORDRAWING(SubtaskDrawing) DECL_VECTORDRAWING(SubtaskTopDrawing) DECL_TILEDRAWING(ProcedureCodeDrawing) DECL_TILEDRAWING(TaskCodeDrawing) DECL_TILEDRAWING(StmtListRootDrawing) DECL_TILEDRAWING(StmtListRecDrawing) DECL_TILEDRAWING(LoopDrawing) DECL_TILEDRAWING(IfRootDrawing) DECL_TILEDRAWING(IfRecDrawing) DECL_TILEDRAWING(IfTermDrawing) DECL_TILEDRAWING(IfBranchDrawing) DECL_VECTORDRAWING(TypeDefinitionDrawing) DECL_VECTORDRAWING(ArrayDrawing) DECL_VECTORDRAWING(PortTypeDrawing) DECL_VECTORDRAWING(ProcedureCallDrawing) DECL_VECTORDRAWING(HeadlineBodyDrawing) class PortDrawing: public VisVectorDrawing { public: PortDrawing(int dirEast, int textEast, int dimensions, int topology,char *color="black"); }; class IconDrawing: public VisVectorDrawing { public: IconDrawing(char *name); }; #endif ~} ~O~~{ #include "streets.drawings.h" IMPL_VECTORDRAWING(ProgramDefinitionDrawing) { container("Components",0,0,100,10,VisAlignLeft, VisAlignTop); container("Types",0,20,100,30,VisAlignLeft, VisAlignTop); container("ComputerMappings",0,40,100,50,VisAlignLeft, VisAlignTop); stretchX(0,100); stretchY(0,10); stretchY(20,30); stretchY(40,50); } /* ComponentDefinition ------------------- */ IMPL_VECTORDRAWING(ComponentDefinitionDrawing) { figure(2,"rect","-outline {} -fill yellow"); point(0,30); point(20,126); // Rahmen um Interface figure(2,"rect","-width 2"); point(0,30); point(120,126); container("Name",0,0,120,10,VisAlignCenter, VisAlignTop); container("Topology",0,30,20,62,VisAlignLeft, VisAlignTop); container("Interface",-1,62,15,126,visAlignBuoy(0), VisAlignTop); container("Linespace1",20,31,21,125,VisAlignCenter, VisAlignCenter); container("Subtasks",21,31,69,125,VisAlignCenter, VisAlignCenter); container("Linespace2",69,31,70,125,VisAlignCenter, VisAlignCenter); container("Code",75,30,110,126,VisAlignLeft, VisAlignScale); stretchX(-1,0); stretchX(2,15); stretchX(20,21); stretchX(21,69); stretchX(69,70); stretchX(75,110); stretchY(0,10); stretchY(30,62,0,32); stretchY(62,126,1,32); } /* Subtask ------- */ IMPL_VECTORDRAWING(SubtaskDrawing) { figure(2,"rect","-fill #b7e7ed"); point(0,0); point(40,10); container("Name",0,15,40,16,VisAlignCenter, VisAlignCenter); container("EastPorts",5,4,41,5,visAlignBuoy(40), VisAlignCenter); container("WestPorts",-1,5,35,6,visAlignBuoy(0), VisAlignCenter); stretchX(-1,0); stretchX(20,21); stretchX(40,41); stretchY(4,5,1); stretchY(5,6,1); stretchY(15,16); } IMPL_VECTORDRAWING(SubtaskTopDrawing) { figure(2,"rect","-fill #b7e7ed"); point(6,6); point(46,16); figure(2,"rect","-fill #b7e7ed"); point(3,3); point(43,13); figure(2,"rect","-fill #b7e7ed"); point(0,0); point(40,10); container("Name",0,20,46,21,VisAlignCenter, VisAlignCenter); container("EastPorts",5,6,47,7,visAlignBuoy(43), VisAlignCenter); container("WestPorts",-1,7,35,8,visAlignBuoy(0), VisAlignCenter); stretchX(-1,0); stretchX(20,21); stretchX(46,47); stretchY(6,7,1); stretchY(7,8,1); stretchY(20,21); } /* Procedure --------- */ const char *ProcedureCodeDrawingMatrix[] = { NULL, "street", NULL, NULL, "street", NULL, NULL, "street", NULL, NULL, "street", NULL, NULL, "street", NULL, NULL, "street", NULL }; IMPL_TILEDRAWING(ProcedureCodeDrawing) { tileName=ProcedureCodeDrawingMatrix; tileCountX=3; tileCountY=6; addContainer("FormalParameter",1,1,3,2,VisAlignLeft,VisAlignTop); addContainer("Constructor",1,2,3,3,VisAlignLeft,VisAlignTop); addContainer("Body",0,3,3,4,visAlignBuoy(1),VisAlignTop); addDragLineX(0); addDragLineX(2); addDragLineY(1); addDragLineY(2); addDragLineY(3,1); } /* Task ---- */ const char *TaskCodeDrawingMatrix[] = { NULL, "startparpp", NULL, NULL, "street", NULL, NULL, "street", NULL, NULL, "street", NULL, NULL, "endparpp", NULL }; IMPL_TILEDRAWING(TaskCodeDrawing) { tileName=TaskCodeDrawingMatrix; tileCountX=3; tileCountY=5; addContainer("Constructor",1,1,3,2,VisAlignLeft,VisAlignTop); addContainer("Body",0,2,3,3,visAlignBuoy(1),VisAlignTop); addDragLineX(0); addDragLineX(2); addDragLineY(1); addDragLineY(2,1); } /* StmtList -------- */ const char *StmtListRootDrawingMatrix[] = { NULL, "street", NULL }; IMPL_TILEDRAWING(StmtListRootDrawing) { tileName=StmtListRootDrawingMatrix; tileCountX=3; tileCountY=1; alignmentPosition.x=1; addContainer("sublist",0,0,3,1,visAlignBuoy(1),VisAlignTop); addDragLineX(0); addDragLineX(2); addDragLineY(0); addInsertionLine(1,0,2,0,NULL); } const char *StmtListRecDrawingMatrix[] = { NULL, "street", NULL, NULL, NULL, NULL }; IMPL_TILEDRAWING(StmtListRecDrawing) { tileName=StmtListRecDrawingMatrix; tileCountX=3; tileCountY=2; alignmentPosition.x=1; addContainer("listelement",0,0,3,1,visAlignBuoy(1),VisAlignCenter); addContainer("sublist",0,1,3,2,visAlignBuoy(1),VisAlignTop); addDragLineX(0); addDragLineX(2); addDragLineY(0); addDragLineY(1); addInsertionLine(1,1,2,1,"listelement"); } /* Loop ---- */ const char *LoopDrawingMatrix[] = { NULL, "loopstart1left", "loopstart1mid", "loopstart1right", NULL, "street", NULL, "loopbody", NULL, "loopend1left", "loopend1mid", "loopend1right" }; IMPL_TILEDRAWING(LoopDrawing) { tileName=LoopDrawingMatrix; tileCountX=4; tileCountY=3; alignmentPosition.x=1; addContainer("body",0,1,3,2,visAlignBuoy(1),VisAlignLeft); addDragLineX(0); addDragLineX(2); addDragLineY(1); } /* If-Kaskade ---------- */ const char *IfRootDrawingMatrix[] = { NULL, "ifhead", "ifleg", NULL, NULL, NULL, NULL, NULL, NULL, "ifendhead", "ifendleg", NULL }; IMPL_TILEDRAWING(IfRootDrawing) { tileName=IfRootDrawingMatrix; tileCountX=4; tileCountY=3; alignmentPosition.x=1; addContainer("listelement",0,1,3,2,visAlignBuoy(1),VisAlignScale); addContainer("sublist",3,0,4,3,VisAlignLeft,VisAlignScale); addInsertionLine(3,0,3,3,"listelement"); addInsertionLine(0,0,0,3,NULL); addDragLineX(0); addDragLineX(2); addDragLineX(3); addDragLineY(1); } const char *IfRecDrawingMatrix[] = { "ifleg", "ifcase", "ifleg", NULL, NULL, NULL, NULL, NULL, "ifendleg", "ifendcase", "ifendleg", NULL }; IMPL_TILEDRAWING(IfRecDrawing) { tileName=IfRecDrawingMatrix; tileCountX=4; tileCountY=3; alignmentPosition.x=1; addContainer("listelement",0,1,3,2,visAlignBuoy(1),VisAlignScale); addContainer("sublist",3,0,4,3,VisAlignLeft,VisAlignScale); addInsertionLine(3,0,3,3,"listelement"); addDragLineX(0); addDragLineX(2,0,1); addDragLineX(3); addDragLineY(1); } const char *IfTermDrawingMatrix[] = { "ifleg", "ifelse", NULL, NULL, NULL, NULL, "ifendleg", "ifendelse", NULL }; IMPL_TILEDRAWING(IfTermDrawing) { tileName=IfTermDrawingMatrix; tileCountX=3; tileCountY=3; alignmentPosition.x=1; addContainer("Else",0,1,3,2,visAlignBuoy(1),VisAlignScale); addDragLineX(0); addDragLineX(2); addDragLineY(1); } const char *IfBranchDrawingMatrix[] = { NULL, "street", NULL, NULL, NULL, NULL }; IMPL_TILEDRAWING(IfBranchDrawing) { tileName=IfBranchDrawingMatrix; tileCountX=3; tileCountY=2; alignmentPosition.x=1; addContainer("Expr",1,0,3,1,VisAlignLeft,VisAlignTop); addContainer("Body",0,1,3,2,visAlignBuoy(1),VisAlignScale); addDragLineX(0); addDragLineX(2); addDragLineY(0); addDragLineY(1,1); } /* PortDrawing ----------- */ PortDrawing::PortDrawing(int dirEast, int textEast, int dimensions, int topology, char *color) { char *fill=GETVLSTRING( sprintf(VLStringBuffer,"-fill %s -stipple %s", color, topology ? "gray50" : "{}")); // char *fill= topology ? "-fill black -stipple gray50" : "-fill black -stipple {}"; int s= dirEast ? 1 : -1; figure(3,"polygon","-fill white"); point(-6*s,-12); point(18*s,0); point(-6*s,12); figure(3,"polygon",fill); point(-6*s,-12); point(18*s,0); point(-6*s,12); int pos=-6*s; for(int i=0; i