/* * (C) 1984 UniSoft Corp. of Berkeley CA * * UniPlus Source Code. This program is proprietary * with Unisoft Corporation and is not to be reproduced * or used in any manner except as authorized in * writing by Unisoft. */ #undef DEBUG extern short maxrow; extern short maxcol; extern short adm_row, adm_col; extern short row_ofs, col_ofs; extern short winscrl; #include "sys/types.h" #include "sys/param.h" #include "sys/inode.h" #include "saio.h" unsigned long ivec[4]; char getsbuf[50]; char sernum[50]; char *file = "sn(0,0)"; #define MEMADDR ((char *)0x20000) /* This sets a variable `bsadr' to be the address of where in the boot * programs initialized data space the serial number should be placed. */ #include "snaddr" extern char begin; /* start of this program and the boot program */ main() { register i; /* This sets up the terminal emulator to use only the * window created by the boot ROM. */ maxrow = 13; maxcol = 54; row_ofs = 8; col_ofs =25; winscrl = 1; adm_row = adm_col = 0; printf(" UniSoft Corporation\n"); printf(" LISA UniPlus+ Serialization Program\n\n"); start: printf("Do you want to make a boot diskette (serialize)?\n"); printf("('y' or 'n') "); retry: gets(getsbuf); switch (getsbuf[0]) { case 'N': case 'n': printf("Use a different diskette\n"); if (eject(0)) while(1); for (i=0xA0000; i>0; i--) ; rom_mon((long *)0,"RESTART",0); /* no return */ case 'C': case 'c': copyboot(); goto start; case 'Y': case 'y': serial(); rom_mon((long *)0,"RESTART",0); /* no return */ default: printf("'%c' is invalid - please enter 'y' or 'n' ", getsbuf[0]); goto retry; } } copyboot() { register i, bn; int fp; register char *cp; if ((fp = open(file,2)) <= 0) { printf("Failed to open Sony\n"); while(1); } bn = 0; cp = MEMADDR; for (i=0; i<(NBLKS*2)+1; i++) { /* read both programs from disk */ lseek(fp, (off_t)(bn++ *BSIZE), 0); if ((read(fp,cp,BSIZE)) != BSIZE) { printf("READ ERROR\n"); while (1); } cp += BSIZE; } again: iob[fp-3].i_bblk = 0; close(fp); if (eject(0)) while(1); printf("Insert diskette, then type return. "); gets(getsbuf); for (i=0; i<0xC0000; i++) ; if ((fp = open(file,2)) <= 0) { printf("Failed to open Sony\n"); while(1); } iob[fp-3].i_bblk = BOOTDISK; /* flag to write boot header for bn 0 */ bn = 0; cp = MEMADDR; lseek(fp, (off_t)0, 0); /* ignores write without this extra 1 */ if ((write(fp,cp,BSIZE)) != BSIZE) { printf("WRITE ERROR\n"); while (1); } for (i=0; i<(NBLKS*2)+1; i++) { /* write both programs to disk */ lseek(fp, (off_t)(bn++ *BSIZE), 0); if (write(fp,cp,BSIZE) != BSIZE) { printf("WRITE ERROR\n"); while (1); } cp += BSIZE; } printf("Do you want to continue? ('y' or 'n') "); gets(getsbuf); if (getsbuf[0] != 'n') goto again; } serial() { register i, bn; int j, fp; register char *cp; /* get the serial number from low memory * this is the word to pass along. */ mkser(sernum); /* Load sernum with the encrypted serial # */ mkcode(sernum, ivec); /* convert it into the 3 longs to send */ j = 0x40000; do { for (i=0; i j) j = i; printf("\nTHE REGISTRATION NUMBERS ARE:\n\n"); pdate(ivec[0]); pdate(ivec[1]); pdate(ivec[2]); printf("\n\n"); printf("TO CONTINUE, ENTER THE AUTHORIZATION NUMBER: "); gets(getsbuf); ivec[3] = gdate(getsbuf); } while (chkser(sernum,ivec[3])); printf("\nThank You.\n\n"); if ((fp = open(file,2)) <= 0) { printf("Failed to open Sony\n"); while(1); } bn = SBOOT; cp = MEMADDR; for (i=0; i