|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1986 MICOM-Interlan, Inc., Boxborough Mass. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: * ! 6: */ ! 7: #ifndef lint ! 8: char copyright[] = ! 9: "@(#) Copyright (c) 1986 MICOM-Interlan, Inc., Boxborough Mass.\n\ ! 10: All rights reserved.\n"; ! 11: #endif not lint ! 12: ! 13: #ifndef lint ! 14: static char sccsid[] = "@(#)npload.c 6.2 (Berkeley) 2/20/86"; ! 15: #endif not lint ! 16: ! 17: #include <stdio.h> ! 18: #include <fcntl.h> ! 19: #include "npcmd.h" ! 20: #include <sys/ioctl.h> ! 21: ! 22: extern int errno; ! 23: ! 24: main(argc,argv) ! 25: int argc; ! 26: char **argv; ! 27: { ! 28: ! 29: int ret; ! 30: int ed; ! 31: int fd; ! 32: int nbyte; ! 33: char *fname; ! 34: char ibuf[1024]; ! 35: char obuf[1024]; ! 36: long stadd = 0x400; ! 37: char *devname = "/dev/np00"; ! 38: ! 39: switch (argc) { ! 40: case 3: ! 41: /* Pathname for device to be loaded */ ! 42: devname = argv[2]; ! 43: case 2: ! 44: /* Name of the image file to be loaded */ ! 45: fname = argv[1]; ! 46: break; ! 47: default: ! 48: printf("usage: npload imagefile [device]\n"); ! 49: exit(1); ! 50: } ! 51: /* Open the device to be loaded */ ! 52: ! 53: if((ed = open(devname,O_RDWR)) == -1) { ! 54: char fullpath[50]; ! 55: (void) sprintf(fullpath, "/dev/%s", devname); ! 56: if((ed = open(devname,O_RDWR)) == -1) { ! 57: fprintf(stderr, ! 58: "%s unable to open device %s errno = %d\n", ! 59: argv[0], devname, errno); ! 60: exit(2); ! 61: } ! 62: } ! 63: ! 64: /* Open the image file */ ! 65: ! 66: if((fd = open(fname,O_RDONLY)) == -1) { ! 67: fprintf(stderr,"%s: unable to open file %s errno = %d\n", ! 68: argv[0],fname,errno); ! 69: exit(3); ! 70: } ! 71: ! 72: /* Reset the specified device */ ! 73: ! 74: if(ioctl(ed,NPRESET | IOC_VOID,&stadd) == -1) { ! 75: fprintf(stderr,"unable to reset %s errno = %d\n",devname,errno); ! 76: exit(4); ! 77: } ! 78: ! 79: /* Seek to address 400 on the device */ ! 80: ! 81: if(lseek(ed,(long)0x400,0) == -1) { ! 82: fprintf(stderr,"seek failed on %s errno = %d.\n",devname,errno); ! 83: exit(5); ! 84: } ! 85: ! 86: /* Seek to address 400 on the image file */ ! 87: ! 88: if(lseek(fd,(long)0x400,0) == -1) { ! 89: fprintf(stderr,"seek failed on %s errno = %d.\n",fname,errno); ! 90: exit(6); ! 91: } ! 92: ! 93: /* Read from the image file and write to the device */ ! 94: ! 95: while((nbyte = read(fd,ibuf,1024)) > 0) { ! 96: ! 97: if((ret = write(ed,ibuf,nbyte)) == -1) { ! 98: fprintf(stderr,"Bad write to %s errno = %d\n", ! 99: argv[0],errno); ! 100: exit(7); ! 101: } ! 102: } ! 103: ! 104: /* Issue a begin execution command to the device */ ! 105: ! 106: if(ioctl(ed,NPSTART | IOC_VOID,&stadd) == -1) { ! 107: fprintf(stderr,"Start error on %s errno = %d.\n",devname,errno); ! 108: exit(8); ! 109: } ! 110: ! 111: close(fd); ! 112: close(ed); ! 113: ! 114: exit(0); ! 115: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.