ASCII-circuits

Symbolic circuits viewer for phorum

by Ruslan Alikberov

HTML

<body>
<canvas id=Circuit width=800 height=600></canvas>
<pre id=logo></pre>
<textarea id=circuit row=3 cols=80 style=display:none>
     =        +--------------------*---*-----
     !/       !     =   =   !      !   !
     #  \!/   \     !/  !/  !      \   #
     !   !    \     #   #   #      \  -!- 
     >        !     !   !   !      !  
<-#-->   +-\\-*-+   <   >   ! +-\\-*-#-*-+
     >   !    ! !   <-#->   ! !    !   ! > +-
     >-#-*---/> +-#-<   >-#-*-*---/>   # >#!
     >        !     <   >     !    !   ! >#<
     !        !     <   >     #    !   ! >#<
     !        !     !   !     !    !   ! > <
     +--------*-----*---*-----*----*---*-*-*-
C1:2,2 C2:4…15 C3:82 C4:82 C5:4…15 C6:5,1 C7:4…15 C9:10 C8:3,9 C10:15 C11:22 C13:82 C12:0,068
T1:GT329A T2:GT329B
L1 L2 L3 L4 L5
R1:15K R2:2,2K R3:75K R4:2,2K
</textarea>
<!--
@--###################################
@--#     !           ###
@--#-----+----vvv--*-^^^-+ !
   !     !         !     ! <
   *--//-+        #<     >#<-
   !              #<--#-->#<
   #              #<     >#<
  -!-              !     ! !
                   +-vvv-*-*-
                     ###
c@C1:1nf
l@L1:99,L2:88,L3:56,L4:91
r@R1:5k
w#Clk,res,input,rdy,Vcc,irq
</textarea>
<!--
########################################
#    !   !     !   !       !   !       #
#----*---*-----*---*-------*---*----+  #
#    !   !     !   !       !   !    !  #
     \   /     \   /       /   !   -+--#
     \   /     \   /       /   #    !  #
     !   !     !   !  +v   !   !
--\\-*-#-*-- --*-#-*--///--* --+
     !      X      !        X
     <\----- -----/>       - -
     !             !
@----*-------------*----------------+
r@R4:10 @R5:33K @R1:390@ @RU1:CN-2 @R9*:47K@ @R13:20K @R2:470 @R7*:100K@ @R8:18K @R10:47K @R17:300 @R11:300 @R12:1K
c@C1:1mf...

JavaScript

var	Ascirc =
function(pattern) {
	var	cnv	= null
	,	c2d	= null
	,	patterns	= ""
	,	Page	= [], max = 0
	,	pat, part, mask, regexa = ""
	,	part_x	= 0
	,	part_y	= 0
	,	part_dx	= 0
	,	part_dy = 0
	,	images	= []
	,	tmp, i, id;
	var	log = document.getElementsByTagName("span")[0];
	var	palette = {
			"."	:0x00FFFFFF
		,	":"	:0xFFEEEEEE
		,	"O"	:0xFFAAAAAA
		,	"X"	:0xFF000000
		};
	var	flags = {
			circle	:true	// Encircled	("O" or ".")
		,	flush	:true	// Flushed	(":" or ".")
		,	rounded	:false	// Rounded/Sharp("NS" or "X")
		};
	function draw_part(bmp, x, y, page, mask) {
		var	ascii, color, lines
		,	str, ptr, dot = "."
		,	cx, cy, tmp
		,	tx = -1, ty = -1, tag = "?"
		,	vx = -1, vy = -1
		,	dx, dy, dz
		,	ex, ey;
		lines = page;
		dy = lines.length;
		dz = (mask >> 10) & 7;
		for(cy = 0; cy < dy; ++ cy) {
			str = lines[cy];
			dx = str.length;
			for(cx = 0; cx < dx; ++ cx) {
				ascii = str.charAt(cx);
				ex = dz & 4 ? (dz & 1 ? dy - cy - 1 : dx - cx - 1) : (dz & 1 ? cy : cx);
				ey = dz & 2 ? (dz & 1 ? dx - cx - 1 : dy - cy - 1) : (dz & 1 ? cx : cy);
				ptr = ((y + ey + 0) * cnv.width + (x + ex + 0)) * 4;
				if(ascii.match(/[NS]/))
					ascii = flags.rounded == (ascii == "S") ? "X" : dot;
				else
				if(ascii.match(/[cdlrstuvw]/)) {
						tx = dz & 4 ? (dz & 1 ? dy - cy - 1 : dx - cx - 1) : (dz & 1 ? cy : cx)
					,	ty = dz & 2 ? (dz & 1 ? dx - cx - 1 : dy - cy - 1) : (dz & 1 ? cx : cy)
					,	tag = ascii
					,	ascii = dot;
					if(vx < 0 || vy < 0)
						vx = dz & 4 ? (dz & 1 ? dy - cy + 7 : dx - cx - 1) : (dz & 1 ? cy + 7 : cx)
					,	vy = dz & 2 ? (dz & 1 ? dx - cx - 1 : dy - cy + 7) : (dz & 1 ? cx : cy + 7);
				} else
				if(ascii == '=')
					vx = dz & 4 ? (dz & 1 ? dy - cy - 1 : dx - cx - 1) : (dz & 1 ? cy : cx)
				,	vy = dz & 2 ? (dz & 1 ? dx - cx - 1 : dy - cy - 1) : (dz & 1 ? cx : cy)
				,	ascii = dot;
				else
				if(ascii.match(/[0-9]/))
					ascii = (mask >> ascii) & 1 ? "X" : dot;
				else
				if(ascii.match(/[:.]/))
					dot =...