From: hot@integow.uucp (Roland van Hout) Newsgroups: alt.sources Subject: PD plot(4) librarys (and hercules driver for interactive 386) part 7 of 9 Message-ID: <1395@integow.uucp> Date: 28 Oct 90 03:57:48 GMT #!/bin/sh # This is part 07 of a multipart archive if touch 2>&1 | fgrep '[-amc]' > /dev/null then TOUCH=touch else TOUCH=true fi # ============= libplot/cgi/libCGI.c ============== echo "x - extracting libplot/cgi/libCGI.c (Text)" sed 's/^X//' << 'SHAR_EOF' > libplot/cgi/libCGI.c && X X/* plot(4) graphics library for the SCO CGI library under xenix*/ X X X#include /* for fprintf on stderr */ X#include /* we are using tolower() */ X#define MAIN 1 /* causes declarations in the .h files to occur here */ X#include "cgistuff.h" /* includes cgitypes.h and cgifctns.h */ X#include "ctest.h" X#include X X/*VOID close_gin_device( VOID ); /* in gintests.c */ X Xstatic char cgidisplay[]="CGIDISP "; Xstatic char cgiprinter[]="CGIPRNT "; Xchar * cgidevice = cgidisplay; Xstatic void usage_message(); Xint vsl_type_returns; X X X X Xfloat gxscrunch,gyscrunch; Xfloat pitograd; Xint CGIoffx,CGIoffy; X X# include X# include X# include "CGI.h" X# include X X herc_args CGIhv,CGIcurpos; X X/* #define DEBUG /* turn on if no driver calls should be made!*/ X Xopenpl() X{ X X int strlen( char * ); X#ifndef NO_DEBUGGING X#ifndef MSDOS X#ifdef CGIVER X extern int scodebug; /* declared in the bindings in v_opnwk.c */ X#else X extern int cgidebug; /* declared in the bindings in v_opnwk.c */ X#endif X#endif X#endif X /* setting to TRUE will cause the bindings */ X /* to print out the execl command rather */ X /* than executing it when they are forking */ X /* the agents. */ X /* local variables */ X SINT16 coord_xform_mode; X char *char_pointer; X register SINT16 i; X char * char_ptr; X int defer_mode; X int use_defaults; X X X X use_defaults = TRUE; X X manual_operation = FALSE; /* m flag */ X do_timings = FALSE; /* t flag */ X defer_mode = ASAP; /* b flag sets to (BNI), or a sets to (ASTI) */ X coord_xform_mode = 0; /* selected with 0, 1, 2, or 3 */ X X X#ifndef NO_DEBUGGING X#ifndef MSDOS X#ifdef CGIVER X if ( scodebug ) X { X printf( "\nExecute the desired agent with these 4 arguments on a console screen:\n" ); X } X else X#else X if ( cgidebug ) X { X printf( "\nExecute the desired agent with these 4 arguments on a console screen:\n" ); X } X else X#endif X#endif X#endif X X ok_to_use_graphtext = FALSE; X X if ( cgistart( coord_xform_mode, defer_mode ) ) X { X fprintf( stderr, "plotcgi: message: open failed, ctest will exit.\n" ); X fprintf( stderr, "plotcgi: requires environment variables:\n" ); X fprintf( stderr, "CGIPATH= <- specify pathname for location of CGI agents.\n" ); X fprintf( stderr, "CGIDISP= <- specify agent name for display\n" ); X/* fprintf( stderr, "or CGIPRNT= <- alternate agent name when running plotcgi with -p option.\n" );*/ X fprintf( stderr, "(instead of CGIPATH, you may need VDIPATH for CGI ver. 1.0 bindings.)\n" ); X exit (-1); X } X X /* set up the color palettes */ X original_palette(); X normal_graphtext(); /* adjusts graphtext size */ X X X /* CGI starts up in graphics mode */ X ok_to_use_graphtext = TRUE; X X /* The workstation should already be clear at this time. */ X X CGIcurpos=CGIhv; X linemod("solid"); X} X Xclosepl() X{ X#ifndef DEBUG X if (isatty(0)) getchar(); /* stdin is a tty then leave the X screen until a character is pressed */ X /* close the workstation*/ X if ( v_clswk(dev_handle) < 0 ) X report_cgi_error( "v_clswk" ); X#endif X} X Xspace(x0,y0,x1,y1) Xint x0,y0,x1,y1; X{ Xint x,y; Xpitograd=(180.0/M_PI); X Xif (x1>0 && y1>0 && y0 0) { X r1=(y-y0)/(x-x0); X a1=atan(r1); X c1=(a1*pitograd*10); X } X else { X c1=1800; X } X if ((x-x1) > 0) { X r2=(y-y1)/(x-x1); X a2=atan(r2); X c2=(a2*pitograd*10); X } X else { X c2=1800; X } X X xo=(x0*gxscrunch);yo=(y0*gyscrunch); X yo = CGIoffy + yo; X xo = CGIoffx + xo; X v_arc(dev_handle, xo,yo, ,c1,c2); X#endif X} X Xdot(xi,yi,dx,n,pat) Xint xi,yi,dx,n,pat[256]; X{ X} X Xpoint(x,y) Xint x,y; X{ Xint xo,yo; X xo = x*gxscrunch; X yo = y*gyscrunch; X yo += CGIoffy ; X xo += CGIoffx ; X CGIcurpos.x1 = xo; CGIcurpos.y1 = yo; X#ifndef DEBUG X move(x,y); X cont(x,y); X#else X printf("point %d,%d\n",x,y); X#endif X} X Xlinemod(s) Xchar *s; X{ XSINT16 line_type; X if (strcmp(s,"dotted")==0) { X line_type = 3; X } X else if (strcmp(s,"solid")==0) { X line_type = 1; X } X else if (strcmp(s,"longdashed")==0) { X line_type = 2; X } X else if (strcmp(s,"shortdashed")==0) { X line_type = 7; X } X else if (strcmp(s,"dotdashed")==0) { X line_type = 4; X } Xif ( (vsl_type_returns = vsl_type( dev_handle, line_type )) < 0) X report_cgi_error( "vsl_type" ); X} X X Xbox(x0, y0, x1, y1) X{ X move(x0, y0); X cont(x0, y1); X cont(x1, y1); X cont(x1, y0); X cont(x0, y0); X move(x1, y1); X} SHAR_EOF $TOUCH -am 1014213390 libplot/cgi/libCGI.c && chmod 0666 libplot/cgi/libCGI.c || echo "restore of libplot/cgi/libCGI.c failed" set `wc -c libplot/cgi/libCGI.c`;Wc_c=$1 if test "$Wc_c" != "6196"; then echo original size 6196, current size $Wc_c fi # ============= libplot/cgi/README ============== echo "x - extracting libplot/cgi/README (Text)" sed 's/^X//' << 'SHAR_EOF' > libplot/cgi/README && XThe following files are not included because of SCO copyrights: Xcgifctns.h cgistart.c cgistuff.c cgistuff.h cgitypes.h ctest.h gtexttests.c XIf you get Xenix with CGI you will get these files anyway. SHAR_EOF $TOUCH -am 1014213590 libplot/cgi/README && chmod 0644 libplot/cgi/README || echo "restore of libplot/cgi/README failed" set `wc -c libplot/cgi/README`;Wc_c=$1 if test "$Wc_c" != "199"; then echo original size 199, current size $Wc_c fi # ============= libplot/cgi/h.c ============== echo "x - extracting libplot/cgi/h.c (Text)" sed 's/^X//' << 'SHAR_EOF' > libplot/cgi/h.c && X# include X# include X# include X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X int i,j; X char strbuff[90]; X X openpl();space(0,0,720,350); X for (j=1;j<=100;j++) { X erase(); X move(280,280); X /* Do some random dots */ X label("Some random dots."); X for (i = 0; i < 100; i ++) X { X point( abs(lrand48() % 719),abs(lrand48() % 347)); X }; X/* sleep(10); X /* Do some random lines */ X erase(); X move(280,280); X /* Do some random dots */ X label("Some random lines."); X for (i = 0; i < 50; i ++) X { X line( abs(lrand48() % 719),abs(lrand48() % 347),abs(lrand48() % 719),abs(lrand48() % 347)); X }; X } X closepl(); X} SHAR_EOF $TOUCH -am 0511152090 libplot/cgi/h.c && chmod 0666 libplot/cgi/h.c || echo "restore of libplot/cgi/h.c failed" set `wc -c libplot/cgi/h.c`;Wc_c=$1 if test "$Wc_c" != "627"; then echo original size 627, current size $Wc_c fi # ============= lp.c ============== echo "x - extracting lp.c (Text)" sed 's/^X//' << 'SHAR_EOF' > lp.c && X/* @(#)driver.c 5.1 */ X#include X#include X#include X#include "plotlpus.h" X Xfloat deltx = 4095.0; Xfloat delty = 4095.0; X Xmain(argc,argv) char **argv; { X int std=1; X FILE *fin; X X while(argc-- > 1) { X if(*argv[1] == '-') X switch(argv[1][1]) { X case 'l': X deltx = atoi(&argv[1][2]) - 1; X break; X case 'w': X delty = atoi(&argv[1][2]) - 1; X break; X case 's': X printer=LASERLOW; X break; X case 'm': X printer=LASERMED; X break; X case 'h': X printer=LASERHIGH; X break; X case 'i': X printer=IBM_PRO; X break; X case 'e': X printer=EPSON; X break; X } X X else { X std = 0; X if ((fin = fopen(argv[1], "r")) == NULL) { X fprintf(stderr, "can't open %s\n", argv[1]); X exit(1); X } X fplt(fin); X } X argv++; X } X if (std) X fplt( stdin ); X exit(0); X } X X Xfplt(fin) FILE *fin; { X int c; X char s[256]; X int xi,yi,x0,y0,x1,y1,r,dx,n,i; X int pat[256]; X X openpl(); X while((c=getc(fin)) != EOF){ X switch(c){ X case 'm': X xi = getsi(fin); X yi = getsi(fin); X move(xi,yi); X break; X case 'l': X x0 = getsi(fin); X y0 = getsi(fin); X x1 = getsi(fin); X y1 = getsi(fin); X line(x0,y0,x1,y1); X break; X case 't': X getsd(s,fin); X label(s); X break; X case 'e': X erase(); X break; X case 'p': X xi = getsi(fin); X yi = getsi(fin); X point(xi,yi); X break; X case 'n': X xi = getsi(fin); X yi = getsi(fin); X cont(xi,yi); X break; X case 's': X x0 = getsi(fin); X y0 = getsi(fin); X x1 = getsi(fin); X y1 = getsi(fin); X space(x0,y0,x1,y1); X break; X case 'a': X xi = getsi(fin); X yi = getsi(fin); X x0 = getsi(fin); X y0 = getsi(fin); X x1 = getsi(fin); X y1 = getsi(fin); X arc(xi,yi,x0,y0,x1,y1); X break; X case 'c': X xi = getsi(fin); X yi = getsi(fin); X r = getsi(fin); X circle(xi,yi,r); X break; X case 'f': X getsd(s,fin); X linemod(s); X break; X case 'd': X xi = getsi(fin); X yi = getsi(fin); X dx = getsi(fin); X n = getsi(fin); X for(i=0; itype==DOMAIN) X {errno=EDOM; X if(!strcmp("log",x->name))x->retval = (-HUGE); X else x->retval = 0; X return(1); X } Xelse if ((x->type)==SING) X {errno=EDOM; X x->retval = (-HUGE); X return(1); X } Xelse return(0); X} X X SHAR_EOF $TOUCH -am 1014215790 lp.c && chmod 0644 lp.c || echo "restore of lp.c failed" set `wc -c lp.c`;Wc_c=$1 if test "$Wc_c" != "2654"; then echo original size 2654, current size $Wc_c fi # ============= herc/Makefile ============== if test ! -d 'herc'; then echo "x - creating directory herc" mkdir 'herc' fi echo "x - extracting herc/Makefile (Text)" sed 's/^X//' << 'SHAR_EOF' > herc/Makefile && X# define IX386 for Interactive 386 XDEFINES=-DIX386 XCFLAGS=$(DEFINES) X Xherc.o: herc.c herc.h X cc -c $(DEFINES) -DINKERNEL herc.c X X# must be root to make install Xinstall: herc.o X cp herc.o herc.c herc.h config Makefile /etc/atconf/modules/herc X mkunix X mv /etc/atconf/kernels/unix.std.* /unix.test X X# must be root to make filesys X# also edit /etc/atconf/systems/system.std to enter herc as device with X# major device number 15 Xfilesys: X mknod /dev/herc c 15 0 X chmod ugo+rwx /dev/herc X mkdir /etc/atconf/modules/herc X Xtest: test.o herc.h X cc -o test $(DEFINES) test.o X Xprint: X srcpub herc.h test.c herc.c config Makefile >PRINT X trj PRINT X offjet tr.PRINT SHAR_EOF $TOUCH -am 1014125090 herc/Makefile && chmod 0644 herc/Makefile || echo "restore of herc/Makefile failed" set `wc -c herc/Makefile`;Wc_c=$1 if test "$Wc_c" != "658"; then echo original size 658, current size $Wc_c fi # ============= herc/bitset.h ============== echo "x - extracting herc/bitset.h (Text)" sed 's/^X//' << 'SHAR_EOF' > herc/bitset.h && Xstatic char SCCS_x[] = "%W% %G% %U%"; X/*+++ X bitset.h X X PURPOSE : bit manipulation macros X X DATE : 2/15/90 X X AUTHOR : W. Hatch X X PROJECT : WEH Software X X COMPANY : Computational Engineering X 14504 Greenview Drive Suite 500 X Laurel, Maryland 20708 X Phone (301)470-3839 X FAX (301)776-5461 X X CREDITS : Harbison And Steele, A C Reference Manual X Prentice Hall, 1984, Pages 172-180 X X---*/ X/* X------------------------------------------------------------------------ X MODIFICATIONS XDATE-PROGRAMMER DESCRIPTION X------------------------------------------------------------------------ X*/ X X#define SET unsigned long X#define SET_BITS (sizeof(SET) * 8) /* number of bits in SET */ X X#define VALIDBIT(i) ((i) < SET_BITS && (i) >= 0) X X#define EMPTYSET ((SET) 0) X#define SINGLESET(i) (((SET) 1) << (i)) X#define DOSET(set,i) ((set | (SINGLESET(i)))) X#define AND(set1,set2) ((set1) & (set2)) X#define OR(set1, set2) ((set1) | (set2)) X#define XOR(set1, set2) ((set1) ^ (set2)) X#define ISSET(i,set) (SINGLESET((i)) & (set)) X#define MASKSET(set,mask) ((set) & (mask) == (mask)) SHAR_EOF $TOUCH -am 1013182190 herc/bitset.h && chmod 0644 herc/bitset.h || echo "restore of herc/bitset.h failed" set `wc -c herc/bitset.h`;Wc_c=$1 if test "$Wc_c" != "1086"; then echo original size 1086, current size $Wc_c fi # ============= herc/config ============== echo "x - extracting herc/config (Text)" sed 's/^X//' << 'SHAR_EOF' > herc/config && X* 1 "herc/config.c X X*ident "@(#)config X Xcharacter(9) X Xprefix = herc X Xfunctions = init, open, close, read, write, ioctl X SHAR_EOF $TOUCH -am 1013182190 herc/config && chmod 0644 herc/config || echo "restore of herc/config failed" set `wc -c herc/config`;Wc_c=$1 if test "$Wc_c" != "121"; then echo original size 121, current size $Wc_c fi # ============= herc/herc.c ============== echo "x - extracting herc/herc.c (Text)" sed 's/^X//' << 'SHAR_EOF' > herc/herc.c && Xstatic char SCCS_hercdent[] = "%W% %G% %U%"; X/*======================================================================*/ X/* herc.c - hercules graphics card driver for Microport V386/3.0e */ X/* */ X/* 2/5/90 */ X/* Bill Hatch */ X/* uunet!bts!bill */ X/* Computational Engineering */ X/* 14504 Greenview Drive Suite 500 */ X/* Laurel, Maryland 20708 */ X/* Phone (301)470-3839 */ X/* */ X/* see herc.h for credits to other programmers and authors */ X/*======================================================================*/ X#include "herc.h" Xextern char *sptalloc(); Xextern int sptfree(); Xextern unsigned char inb(); X X/*----------------------------------------------------------------------*/ X/* settings for 6845 chips data registers for graphics and text modes */ X/*----------------------------------------------------------------------*/ Xstatic int gdata[12] = {0x35, 0x2d, 0x2e, 0x7, 0x5b, 0x2, 0x57, 0x57, 0x2, X 0x3, 0x0, 0x0}; Xstatic int tdata[12] = {0x61, 0x50, 0x52, 0xf, 0x19, 0x6, 0x19, 0x19, 0x2, X 0xd, 0xb, 0xc}; X Xstatic char *myvaddr; Xstatic char *vaddr0; Xstatic char *vaddr1; Xstatic int g_mode(); Xstatic int t_mode(); X Xstatic int clearscreen(); Xstatic int wait_for_retrace(); X X/*======================================================================*/ X/* hercinit - nothing done */ X/*======================================================================*/ Xhercinit(dev) Xint dev; X{ X u.u_error = 0; X return; X} X/*======================================================================*/ X/* hercopen - enable graphics and clear screen */ X/*======================================================================*/ Xhercopen(dev,flag) Xint dev; Xint flag; X{ X int i; X X /*--------------------------------------------------------------*/ X /* map herc graphics pages to virtual memory and set myvaddr */ X /* to page 0 */ X /*--------------------------------------------------------------*/ X if((vaddr0=sptalloc(HERC_SIZE,PG_P, HERC_PAGE_0,0)) == (char *)0 || X (vaddr1=sptalloc(HERC_SIZE,PG_P, HERC_PAGE_1,0)) == (char *)0) X { X KERROR("hercopen: sptalloc() failed"); X u.u_error = 1; X return; X } X myvaddr = vaddr0; X /*--------------------------------------------------------------*/ X /* clear both pages of graphics memory */ X /*--------------------------------------------------------------*/ X#ifdef DBUG X printf("hercopen: vaddr0: %d, vaddr1: %d, \n", vaddr0, vaddr1); X#endif X /*--------------------------------------------------------------*/ X /* switch to graphics mode */ X /*--------------------------------------------------------------*/ X if(g_mode() < 0) X { X KERROR("hercopen: g_mode() failed"); X u.u_error = 1; X return; X } X clearscreen(vaddr0); X clearscreen(vaddr1); X u.u_error = 0; X return; X} X/*======================================================================*/ X/* hercclose - close the herc device */ X/*======================================================================*/ Xhercclose(dev) Xint dev; X{ X clearscreen(vaddr0); X clearscreen(vaddr1); X /*--------------------------------------------------------------*/ X /* switch to text mode */ X /*--------------------------------------------------------------*/ X t_mode(); X /*--------------------------------------------------------------*/ X /* free mapped virtual memory */ X /*--------------------------------------------------------------*/ X sptfree(vaddr0, HERC_SIZE,0); X sptfree(vaddr1, HERC_SIZE,0); X X#ifdef DBUG X printf("hercclose:\n"); X#endif X u.u_error = 0; X return; X} X/*======================================================================*/ X/* hercioctl - does nothing */ X/*======================================================================*/ Xhercioctl(dev, cmd, arg) Xint dev; Xint cmd; XHERC *arg; X{ X X u.u_error = 0; X return; X} Xhercread(dev) Xint dev; X{ X} X/*======================================================================*/ X/* hercwrite - perform all herc graphics operations */ X/*======================================================================*/ Xhercwrite(dev) Xint dev; X{ X HERC *arg; X HERC herc; X unsigned char *pc; X int x; X int y; X int cmd; X int i; X X unsigned char byte; X int byteloc; X int myint; X X pc = (unsigned char *)(&herc); X arg = (&herc); X for(i=0; i < sizeof(HERC); i++) X { X if( (myint = cpass()) < 0) X { X printf("i= %d\n", i); X KERROR("hercwrite: cpass failed"); X u.u_error = 1; X return; X } X pc[i] = myint; X } X /************ an alternate, untested way of accomplishing the above X if(copyin(&u.u_base, arg, sizeof(HERC)) != SUCCESS) X { X printf("u.u_count: %d, u.u_base: %d, u.u_offset: %d\n", X u.u_count, u.u_base, u.u_offset); X printf("sizeof(HERC): %d\n", sizeof(HERC)); X KERROR("hercwrite: copyin() failed"); X u.u_error = 1; X return; X } X **********/ X#ifdef DBUG X printf("hercwrite: x: %d, y: %d, cmd: %d\n", X arg->phys_x, arg->phys_y, arg->cmd); X#endif X /*--------------------------------------------------------------*/ X /* extract and validate HERC contents */ X /*--------------------------------------------------------------*/ X if((x=arg->phys_x) > PHYS_X_MAX || x < PHYS_X_MIN X || (y=arg->phys_y) > PHYS_Y_MAX || y < PHYS_Y_MIN) X { X KERROR("hercwrite: illegal arg"); X printf("arg: %d, cmd: %d, x: %d, y: %d\n", X arg, arg->cmd, x, y); X u.u_error = 1; X return; X } X cmd = arg->cmd; X /*--------------------------------------------------------------*/ X /* compute offset of byte to be acted on */ X /*--------------------------------------------------------------*/ X if(cmd == SET_PIXEL || cmd == CLEAR_PIXEL || cmd == REVERSE_PIXEL) X { X byteloc = BYTE_OFFSET(x,y); X } X X /*--------------------------------------------------------------*/ X /* perform action */ X /*--------------------------------------------------------------*/ X switch(cmd) X { X case SET_PIXEL: X SET_BIT(myvaddr[byteloc], x); X break; X X case CLEAR_PIXEL: X CLEAR_BIT(myvaddr[byteloc], x); X break; X X case REVERSE_PIXEL: X REVERSE_BIT(myvaddr[byteloc], x); X break; X X case CLEAR_SCREEN_0: X clearscreen(vaddr0); X break; X X case CLEAR_SCREEN_1: X clearscreen(vaddr1); X break; X X /* this switch screen does not work, any comments or */ X /* suggestions are welcome WEH 2/17/90 */ X case SWITCH_SCREEN_0: X myvaddr = vaddr0; X wait_for_retrace(); X if(outb(DMC_PORT, DMC_PAGE_0) == FAILURE) X { X KERROR("hercwrite: outb() failed "); X return(FAILURE); X } X break; X X case SWITCH_SCREEN_1: X myvaddr = vaddr1; X wait_for_retrace(); X if(outb(DMC_PORT, DMC_PAGE_1) == FAILURE) X { X KERROR("hercwrite: outb() failed "); X return(FAILURE); X } X break; X } X u.u_error = 0; X return; X} X/*======================================================================*/ X/* clearscreen - turn all pixels off */ X/*======================================================================*/ Xstatic int clearscreen(vaddr) Xchar *vaddr; X{ X unsigned int i; X for(i = 0; i < HERC_PAGE_BYTES; i++) X { X vaddr[i] = 0; X } X return(SUCCESS); X} X/*======================================================================*/ X/* g_mode - switch to graphics mode */ X/*======================================================================*/ Xstatic int g_mode() X{ X int i; X unsigned char dmcbyte = (DMC_GRAPHICS|DMC_ON_SCREEN|DMC_PAGE_0); X /*--------------------------------------------------------------*/ X /* enable both graphics pages and turn display off */ X /*--------------------------------------------------------------*/ X wait_for_retrace(); X if(outb(CONFIG_SWITCH, CF_PAGE_0) == FAILURE || X outb(DMC_PORT, DMC_OFF_SCREEN) == FAILURE) X { X KERROR("g_mode: outb() to DMC_PORT or CONFIG_SWITCH failed"); X return(FAILURE); X } X /*--------------------------------------------------------------*/ X /* set hardware parameters for graphics mode, failure to do this*/ X /* may damage the video tube */ X /*--------------------------------------------------------------*/ X for(i = 0; i < 12; i++) X { X if(outb(INDEX_REG_6845, i) == FAILURE || X outb(DATA_REG_6845, gdata[i]) == FAILURE) X { X KERROR("g_mode: outb() to DATA or INDEX REG failed"); X return(FAILURE); X } X } X /*--------------------------------------------------------------*/ X /* on retrace, enable graphics and turn display on */ X /*--------------------------------------------------------------*/ X wait_for_retrace(); X if(outb(DMC_PORT, dmcbyte) == FAILURE) X { X KERROR("g_mode: outb(DMC_PORT, DMC_GRAPHICS) failed "); X return(FAILURE); X } X return(SUCCESS); X} X/*======================================================================*/ X/* t_mode - switch to text mode */ X/*======================================================================*/ Xstatic int t_mode() X{ X int i; X unsigned char dmcbyte = (DMC_ON_SCREEN|DMC_TEXT); X /*--------------------------------------------------------------*/ X /* turn display off */ X /*--------------------------------------------------------------*/ X if(outb(DMC_PORT, DMC_OFF_SCREEN) == FAILURE) X { X KERROR("t_mode: outb to DMC_PORTT) failed "); X return(FAILURE); X X } X /*--------------------------------------------------------------*/ X /* set hardware parameters for text mode */ X /*--------------------------------------------------------------*/ X for(i = 0; i < 12; i++) /* set hw sweep rate etc. */ X { X if(outb(INDEX_REG_6845, i) == FAILURE || X outb(DATA_REG_6845, tdata[i]) == FAILURE) X { X KERROR("t_mode: outb() to 6845 failed"); X return(FAILURE); X } X } X delay(0); X /*--------------------------------------------------------------*/ X /* set text mode, turn display on */ X /*--------------------------------------------------------------*/ X if(outb(DMC_PORT, dmcbyte) == FAILURE) X { X KERROR("t_mode: outb(DMC_PORT, dmcbyte) failed"); X return(FAILURE); X } X /*--------------------------------------------------------------*/ X /* enable text mode */ X /*--------------------------------------------------------------*/ X if(outb(CONFIG_SWITCH, CF_TEXT_ONLY) == FAILURE) X { X KERROR("t_mode: outb(CONFIG_SWITCH, CF_TEXT_ONLY) failed"); X return(FAILURE); X } X return(SUCCESS); X} X/*======================================================================*/ X/* wait_for_retrace - loop until vertical retrace */ X/*======================================================================*/ Xstatic int wait_for_retrace() X{ X unsigned char byte; X byte = inb(DS_PORT); X while(byte & DS_RETRACE) X { X delay(0); X byte = inb(DS_PORT); X } X} SHAR_EOF $TOUCH -am 1013182190 herc/herc.c && chmod 0644 herc/herc.c || echo "restore of herc/herc.c failed" set `wc -c herc/herc.c`;Wc_c=$1 if test "$Wc_c" != "10419"; then echo original size 10419, current size $Wc_c fi echo "End of part 7, continue with part 8" exit 0 -- UUCP: ..!uunet!mcsun!hp4nl!integow!hot or hot@integow.UUCP or hot@hot.mug Roland van Hout, Sr. software engineer, Integrity software consultants, Pelmolenlaan 16, 3447 GW Woerden, Netherlands, tel +31 3480-30131, fax +31 3480-30182