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 =...