Xref: utzoo alt.sources:2471 sci.electronics:15149 Path: utzoo!utgpu!freedom!elroy.jpl.nasa.gov!usc!wuarchive!zaphod.mps.ohio-state.edu!samsung!munnari.oz.au!csc.anu.oz.au!csis!ken From: ken@csis.dit.csiro.au (Ken Yap) Newsgroups: alt.sources,sci.electronics Subject: cheap pcb autorouter and printer Message-ID: <1990Oct23.074827.12643@csis.dit.csiro.au> Date: 23 Oct 90 07:48:27 GMT Reply-To: ken@csis.dit.csiro.au Organization: CSIRO Division of Information Technology Lines: 174 If you're looking for a free pcb cad package, these diffs may be for you. They are to be applied to Randy Nevin's pcb.arc version 1.00 to compile with gcc under SunOS 4.1. The original sources are at wuarchive.wustl.edu in mirrors/msdos/cad/pcb.arc (or something like that). Besides making pcbroute run, pcbprint was modified to generate pbm files which can be converted to a variety of formats with pbmplus (expo.lcs.mit.edu:contrib/pbmplus.tar.Z). No attempt has been made to Unixify the programs, pcbprint wants flags MSDOS style, e.g. "pcbprint /Z3 foo". DISCLAIMER: I have not tested the package beyond trying the example, printing the generated layers and observing that they look like good traces. I have not tried making PCBs; I don't have the materials at hand. I'm sure there are limitations, but hey what do you want for free? I'll be no good at answering questions about the package. I hear that Randy has a more comprehensive release he's selling. That's all I know, contact Randy yourself. I'm posting these diffs simply because the diffs are so small and somebody might benefit. *** /dev/null Tue Oct 23 17:14:21 1990 --- makefile Tue Oct 23 17:33:39 1990 *************** *** 0 **** --- 1,35 ---- + # printed circuit board autorouter, viewer, and printer + CC=gcc # or another ANSI standard compiler + + .c.o: + $(CC) -Dfar= -DAlloc=malloc -D_fmalloc=malloc -D_ffree=free -c $*.c + + all: pcbroute pcbprint + + pcbroute: pcbroute.o io.o solve.o board.o queue.o work.o \ + dist.o alloc.o + $(CC) -o $@ pcbroute.o io.o solve.o board.o queue.o work.o \ + dist.o alloc.o + + pcbroute.o: pcbroute.c cell.h + + io.o: io.c cell.h + + solve.o: solve.c cell.h + + board.o: board.c cell.h + + queue.o: queue.c cell.h + + work.o: work.c cell.h + + dist.o: dist.c cell.h + + alloc.o: alloc.c + + bitmap.o: bitmap.c cell.h bitmap1.h bitmap2.h bitmap3.h + + pcbprint: pcbprint.o bitmap.o board.o alloc.o + $(CC) -o $@ pcbprint.o bitmap.o board.o alloc.o + + pcbprint.o: pcbprint.c cell.h *** alloc.c.old Mon Oct 22 15:26:50 1990 --- alloc.c Thu Aug 23 17:10:19 1990 *************** *** 1,25 **** #include #include - #include char far *Alloc( long ); void Nomem( void ); - char far *Alloc ( x ) /* allocate x bytes of far memory */ - long x; - { - union REGS regs; - - regs.h.ah = 0x48; /* allocate memory dos call */ - x = (x+15)>>4; /* get number of paragraphs to allocate */ - regs.x.bx = (int)x; - intdos( ®s, ®s ); /* call dos; request memory */ - if (regs.x.cflag) /* memory allocation error */ - Nomem(); - return( (char far *)((long)regs.x.ax<<16) ); /* make a far pointer */ - } - void Nomem () { /* a memory allocation request has failed */ printf( "out of memory\n" ); exit( -1 ); } --- 1,15 ---- #include #include char far *Alloc( long ); void Nomem( void ); void Nomem () { /* a memory allocation request has failed */ printf( "out of memory\n" ); exit( -1 ); } + + strupr(s) + char *s; + { + } *** solve.c.old Mon Oct 22 15:26:57 1990 --- solve.c Thu Aug 23 17:05:52 1990 *************** *** 1,7 **** #include #include #include - #include #include "cell.h" /* --- 1,6 ---- *** pcbprint.c.old Mon Oct 22 15:26:55 1990 --- pcbprint.c Mon Oct 22 14:43:29 1990 *************** *** 241,268 **** static void prolog ( fp ) /* output initial laser printer commands */ register FILE *fp; { ! putc( 0x1B, fp ); /* */ ! putc( 'E', fp ); /* reset */ ! putc( 0x1B, fp ); /* */ ! fprintf( fp, "&l%dO", orient ); /* set image orientation */ ! putc( 0x1B, fp ); /* */ ! fprintf( fp, "&a10R" ); /* cursor to row 10 */ ! putc( 0x1B, fp ); /* */ ! fprintf( fp, "&a10C" ); /* cursor to column 10 */ ! putc( 0x1B, fp ); /* */ ! fprintf( fp, "*t%dR", resol ); /* set resolution in dots per inch */ ! putc( 0x1B, fp ); /* */ ! fprintf( fp, "*r1A" ); /* start graphics at cursor */ } static void epilog ( fp ) /* output final laser printer commands */ register FILE *fp; { - putc( 0x1B, fp ); /* */ - fprintf( fp, "*rB" ); /* end graphics */ - putc( 0x12, fp ); /* formfeed to eject paper */ - putc( 0x1B, fp ); /* */ - putc( 'E', fp ); /* reset */ } static void doimage ( fp ) /* create the board image, row by column */ --- 241,252 ---- static void prolog ( fp ) /* output initial laser printer commands */ register FILE *fp; { ! fprintf(fp, "P4\n%d %d\n", Ncols*size[zoom], Nrows*size[zoom]); } static void epilog ( fp ) /* output final laser printer commands */ register FILE *fp; { } static void doimage ( fp ) /* create the board image, row by column */ *************** *** 274,281 **** for (r = Nrows-1; r >= 0; r--) { /* each row */ for (ir = size[zoom]-1; ir >= 0; ir--) { /* each scan line */ - putc( 0x1B, fp ); /* */ - fprintf( fp, "*b%dW", nbytes ); initbit(); for (c = 0; c < Ncols; c++) { x = GetCell( r, c, TOP ); --- 258,263 ----