IMD 1.18: 6/12/2012 18:53:44 sys 29/10a version 1.0 comm utilities pn 4120024-001  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  AFT COMAMDHST C  AMDHST C <AMDHST FOR !"#$%&'()*+,te$ w&*7+#~>Ÿ&T] –&#*7zt name of file? $bad file name$t enter delay in hex: $ delay set to $bad value$*:2{ ,ʙ$;ʙ$ʙ$ "7$y$ G û$ ȸ³$ $͝ ,I$I$:$9y,I$IxĪZ{ " %'AMDHST FOR-./0123456789:;<AMDHST FORz=>?@ABCDEFGHIJKLFILEXF96COMMNOPFILEXF6 COMQRSTʘG!~#>͞!"!M "">22*"! """>l2>`2:;!͢>2>@2;!tO G %x S8TTYPTRPPRAMD ASCII file transfer program V1.1 11/24/82 $buffer size $using port $qQrRwHEX2AMD COMUUVWXYZ[\]^_CHKSUM DAT`͢>2>2;!͢)>h2;!͢;>d2:<2:<2__*|/W}/_*e Y Y_:ogeWsSpPcCf F dDbuffer pointer at $collection terminated$collection started$buffer flushed$unknown functiox$o&  Y Y;O:)!ÍAN" ""K""&_*|/W}/_*e Y Y":29͸">n$buffer overflow$can't open file$file loaded$can't create file$warning: buffer full$file write error$write complete$send comple^#V*M86 s#r2a8*U8##$:j7C$:a8C$*O8 2a8Z{ "\$'$G *7++|$ ʃ$o$͝ o$  2O͸"*"b͸"q͸2;>7>2;ANʅO*q#"*{^! ":ʅ*q#"*z…{…͸..................................... SOH xx xx xxxxxxxx xx ETX CR where type canƐ'@'_Y~ʜʜ###Í#^#V®#â>'_{ !6#>  w# w# !~#O #~+: ~] A<##G d at any time. This program is written specifically to run under UNIX. It needs modifications in order to run under2**{ʌ*Fʌx*#"*{Œ! "ÌY Y Y_ Y Yͱ>2F͸*"*|/******************************************************************************* PROGRAM NAME : AMDHST.c DATE : Apri be 1: download file, 2: upsave file, 3: upsave print file, 4: close print file, 5: reopen print file, 6: de~# ,?T *T .( ] x T  G x~# ,?T *T .T ]  . 8͸=a{ any other operating system supporting "C" language. It also serves as an example if one wants to write his own softw } #ͥ ##*w#"f **|@}@͸F͸2ͱ2Fo͸**|†}†l 23, 1982 AUTHOR : Tsu-Phong Wu This software supports the file transfer between RTE16 and a host. This prlete file filename is of length up to 8 characters, checksum is the sum of all characters from length field to filen*F&Dw:F<̟ 2Fxo G:F o&x ~!F4G2FG_{ !~#6 O~#0are to communicate with RTE16. The message format is described ad follows : header record ------------- start͸**zš{ší̀ Š͸õ>̀ o f ͸2**|}GN>.Y*|+͸2ogram constantly listens to RTE16 and tries to satisfy the request regardless of any invalid conditions. Therefore RTE16 mame field, CR is converted to LF by UNIX data record ----------- start data block data  :$ A G" a g" n͸ ))))o "^_*e Y YG2FG_{ !~#6 O~#0 filename end carriage of header length type filename checksum of text return ...........................:2<2>2@2D2H2L2O2<:2W2C:22:22>>@>N>7Nx |~|~}~}~ust monitor the communication and cancel the request under those circumstances. A request to cancel is always accepte end carriage of text length number block checksum of text return .................................................* tab */ #define NEWTAB 0x1f /* new tab */ #define ENDSIZE 8 /* end record size */ #define FILENAMELEN 12 /* file nax1 /* start of header */ #define STX 0x2 /* start of text */ #define ETX '.' /* end of text */ #define NEWDOT 0x1c ************************ m a i n LOCAL - TRANSACTION: transaction type, REOPEN: print save interrupted flag, F0 ETX CR where CR is converted to LF by UNIX ************************************************************SOH received, cancel flag also set, DEBUG: TRUE to enable debugging message, PBLOCKNO: print save block number ******.......... STX xx xx xxxxx xx ETX CR where data block is of length up to 128 characme length */ #define DATALEN 64 /* data block length */ #define BLOCKSIZE 25 /* block buffer length */ /**************/* change period to 1c hex */ #define ENQ 0x5 /* enquiry */ #define ACK 0x6 /* acknowledge */ #define LF 0x0a /* line feedD: file ptr, I, ITEMP, CTEMP & C: miscellaneous; It waits for and processes the following request from RTE16 : do*******************/ #include #define TRUE 1 #define FALSE 0 /* RTE16 request */ #define DOWNLOAD 1 /* Ho************************************************************/ char filename[FILENAMELEN+1],printname[FILENAME+1]; char buffeters (corresponding to 64 bytes after packed), checksum is the sum of all characters from length field to data block**************************************************** G L O B A L ENDRECORD: record to end transmission, BLOCK,  */ #define NEWLF 0x1e /* the mapped line feed */ #define NAK 0x16 /* negative acknowledge */ #define CAN 0x18wnload upsave print save close reopen delete The communication always starts at RTE16 sending a header record tst to RTE */ #define UPSAVE 2 /* RTE to Host */ #define PRINTSAVE 3 /* RTE to Host PRINT file */ #define CLOSE 4 /* Close Pr[DATALEN+8],block[BLOCKSIZE],checksum,ck12,etx; int blockindex,blockcount,cancel,length,index,soh,debug,pblockno; char endrec field, CR is converted to LF by UNIX end record ---------- start block end carriage of text lenBLOCKCOUNT & BLOCKINDEX: block buffer, count and index, BUFFER, LENGTH & INDEX: message buffer, length and index, CHEC /* cancel */ #define CR 0x0d /* Carriage Return */ #define NEWCR 0x1D /* New CR */ #define TAB 0x09 /o the host. Host will determine the request and talk back to RTE16. *****************************************************RINT file */ #define REOPEN 5 /* Reopen PRINT file */ #define DELETE 6 /* Delete file */ /* sync chars */ #define SOH 0ord[ENDSIZE] = {STX,'0','0','0','0','C','0',ETX}; char getrte(); /***************************************************gth number checksum of text return .................................................... STX 00 00 CKSUM, CK12 & ETX: checksum and etx, FILENAME & PRINTNAME: file names, CANCEL: RTE16 request to cancel flag, SOH:  **********************/ main () { int i,itemp,transaction,reopen; FILE *fd; char *ctemp,c; soh = reopen = debug =  /* process UPSAVE */ itemp = upsave(fd); /* flush buffer and save file even if cancelled */ putblock(fd); ame," download\n"); if (fd = fopen(filename,"r")) { /* acknowledge */ putrte(ACK); /* process DOWNLOAD */  /* process PRINTSAVE - don't initialize pblockno */ itemp = printsave(fd); /* flush buffer and save file evenprintsi("got",SOH); /* clear soh and cancel again */ cancel = soh = FALSE; /* get one message */ transaction = recei putblock(fd); fclose(fd); /* SOH ? */ if (itemp == SOH) reopen = TRUE; } else putrte(NAK); /* canFALSE; /* sign on */ printf("AMD AMDHSTCX V1.0 1/25/83\n"); printf("---------------------------------------\n\n fclose(fd); } else putrte(NAK); /* can't create file */ break; case PRINTSAVE: /* save f download(fd); /* close file */ fclose(fd); } else putrte(NAK); /* can't open file */ break if cancelled */ putblock(fd); fclose(fd); /* SOH ? */ reopen = FALSE; if (itemp == SOH) reopen = TRUE; ve(); /* check for obvious error */ if ((length <= FILENAMELEN) && (DOWNLOAD <= transaction) && (transaction <= DELE't create file */ break; case CLOSE: printss("close","\n"); /* acknowledge */ putrte(ACK);"); /* enable debugging ? */ printf("Want DEBUG option (Y/N) ? "); gets(buffer); for (ctemp=buffer; (c=(*cile name */ for (i=0; i '9') ctemp1 = ctemp1 - '7'; else ctemp1 = ctemp1 - '0'; return (((ctemp << 4) + ctemp1) & 0xff); }  case ACK: printf(" ACK"); break; case CAN: printf(" CAN"); break; case ENQ: printf(" ENQ"); break; caseKSUM. RETN - two bytes from RTE16 packed into one ***********************************************************/ getrt s ENTRY - str1,str2: ptrs to string It prints out debugging message. *************************************/ p "cancel" flag */ if (cancel == TRUE) return (CAN); /* compute "checksum" */ ctemp = getchar(); checksum =ncel" flag is to avoid hanging up when AMDHST has received unexpected cancel request or start of another header record from/******************************* p u t r t e ENTRY - BYTE: the byte It sends one byte to RTE16. ************ NAK: printf(" NAK"); break; case SOH: printf(" SOH"); break; case STX: printf(" STX"); break; } } } /e2 () { char ctemp,ctemp1; ctemp = getrte(); ctemp1 = getrte(); /* convert to upper case if necessary */ rintss(str1,str2) char *str1,*str2; { if (debug) printf("%s%s",str1,str2); } /************************************  checksum + ctemp; /* set up "cancel" and "soh" flag*/ if (ctemp == CAN) cancel = TRUE; if (ctemp == SOH) cance RTE16. It works by forcing control to flow to certain points where "cancel" is checked for. "cancel" flag wi*******************/ putrte (byte) char byte; { putchar(byte); } /******************************************************************************************************************************* g e t r t e GLOBAL - CANCEL: cancel fla if (('a' <= ctemp) && (ctemp <= 'f')) ctemp = ctemp - 'a' + 'A'; if (('a' <= ctemp1) && (ctemp1 <= 'f')) ctemp1 = ctemp1 p r i n t s i ENTRY - str1: ptr to string, sync: sync char It prints out debugging message. ************l = soh = TRUE; if (debug) printf(".%x",ctemp); return (ctemp); } /*******************************************ll be cleared after flow of control returns to the top level where SOH is expected. RETN - next byte from RTE16 ******************** p u t b u f ENTRY - BYTE: the byte GLOBAL - BUFFER[] & INDEX: message buffer and index, Cg, CHECKSUM: checksum LOCAL - CTEMP: char It reads one byte from RTE16 and accumulates CHECKSUM. Whenever - 'a' + 'A'; /* convert hex to binary */ if (ctemp > '9') ctemp = ctemp - '7'; else ctemp = ctemp - '0'; ************************/ printsi(str1,sync) char *str1,sync; { if (debug) { printf("%s",str1); switch (sync) { **************** g e t r t e 2 LOCAL - CTEMP & CTEMP1: chars It packs two bytes from RTE16 and accumulates CHEC HECKSUM: checksum It writes one byte into "buffer[index]" and computes CHECKSUM. "index" is incremented by 1. ***'; return ((temp << 4) + temp1); } /******************************************************************************* - TEMP & TEMP1: chars It packs two bytes at "buffer[index]" and "buffer[index+1]" into one. "index" is incrementedndex It reads one byte from block buffer. Make sure both "blockcount" and "blockindex" are 0 before the first call*****************************************************/ putbuf2 (byte) char byte; { char temp; /* masking */ te: block[blockcount++] = NEWCR; break; case LF : block[blockcount++] = NEWLF; break; case TAB : block[bloc***************************************************************/ putbuf (byte) char byte; { /* computes "checksum" */  g e t b l o c k ENTRY - FD: ptr to a file GLOBAL - BLOCK[], BLOCKCOUNT & BLOCKINDEX: block buffer, count and inde by 2. RETN - packed byte *************************************************************************/ char pack2 ()  to "getch". Or else do a "getblock" before the first call to "getch". RETN - either next byte or EOF *****mp = (byte >> 4) & 0xf; byte = byte & 0xf; /* convert binary to hex */ if (temp > 9) putbuf(temp + '7'); ekcount++] = NEWTAB; break; case '.' : block[blockcount++] = NEWDOT; break; default : block[bl buffer[index++] = byte; checksum = checksum + byte; } /***********************************************************x LOCAL - C: char It transfer one block from file. "blockindex" is set to 0 and "blockcount" is set to number{ char temp,temp1; temp = buffer[index++]; temp1 = buffer[index++]; /* convert hex to binary */ if (tem**************************************************************************/ char getch (fd) FILE *fd; { /* check EOF *lse putbuf(temp + '0'); if (byte > 9) putbuf(byte + '7'); else putbuf(byte + '0'); } /****************************ockcount++] = c; } blockindex = 0; } /********************************************************************************* p u t b u f 2 ENTRY - BYTE: the byte LOCAL - TEMP: char It unpacks the byte into two, stores t of bytes transfered. *******************************************************************************/ getblock (fd) Fp > '9') temp = temp - '7'; else temp = temp - '0'; if (temp1 > '9') temp1 = temp1 - '7'; else temp1 = temp1 - '0/ if ((blockcount == 0) && (blockindex == 0)) return (EOF); if (blockcount-- == 0) { /* get new block when block b********************************************* p a c k 2 GLOBAL - BUFFER[] & INDEX: message buffer and index LOCAL ******* g e t c h ENTRY - FD: ptr to a file GLOBAL - BLOCK[], BLOCKCOUNT & BLOCKINDEX: block buffer, count and ihem at "buffer[index]" and "buffer[index+1]", and computes "checksum". "index" is incremented by 2. ***************ILE *fd; { char c; for (blockcount=0; ((blockcount UNTIL (CONDITION) C WHILE (CONDITION) ENDWHILE C SWITC, C 2: UPSAVE FILE, C 3: UPSAVE PRINT FILE, C 4: CLOSE PRIN C TO COMPLETE A TRANSFER REQUEST REGARDLESS OF INVALID CONDITIONS. C THE RTE16/AMDSYS29 PROGRAMS MONITOR THE COMMUNICATIOME METHOD OF HANDLING C CHARACTER VARIABLES. C C THE MESSAGE FORMAT IS DESCRIBED AS FOLLOWS : C HEADER REE IN STRLN AND C DOWNLOAD. FOR SYSTEM 29 COMMUNICATION C D 1/13/83 ADDED COMMENTED CODE FOR VAXES RUNNING EAT" C "SWITCH" REFER TO THE RATFOR CONTROL STATEMENTS. C RATFOR GENERATES ALL LABELS GREATER THAN 23000 C LH (VARIABLE) THIS IS EQUIVALENT TO A PASCAL CASE STATEMENT C FOR (CONDITION INCREMENT VARIABLE) ENDFOR C T FILE, C 5: REOPEN PRINT FILE, C 6: DELETE FILE C FILENAME IS OF LENGTN LINES AND C WILL ISSUE A CANCEL TO ANY INVALID REQUEST. C THIS PROGRAM WILL ALSO MONITOR THE COMMUNICATION LINES AND WICORD C ------------- C START FILENAME END CARRIAGE C OF HEADER LENGT C VMS. THE CODE IS UNTESTED PEOPLE USING C A VAX SHOULD REPLACE THE 2 READS WITH C A SYSTEM CALL AND THE 'WTQIO' WITABEL 0 -99 ARE FOR ERROR CONDITIONS C LABELS 200 - 900 ARE BRANCHS C LABELS 1000 -2000 ARE FORMAT STATEMENTS C RATFOR TRANSLATES STATEMENTS LIKE C IF (CONDITION) THEN BEGIN C STATEMENTS C END ELSE BEGIN C STATEMENTH UP TO 8 BYTE, C CKSUM IS THE SUM OF ALL BYTE FROM LENGTH FIELD TO FILENAME C FIELD, C C DATALL ALWAYS C EXCEPT A REQUEST TO CANCEL ( A CONTROL X) AT ANY TIME. C C THIS PROGRAM WAS WRITTEN IN RATFOR (RATIONAL FORTH TYPE FILENAME CKSUM OF TEXT RETURN C ................................................................ C C H C A 'SYS$ASSIGN' C SEARCH FOR THE KEYWORD 'VAX' C C THIS PROGRAM SUPPORTS FILE TRANSFERS BETWEEN BOTH RTE16 AND A THIS PROGRAM WAS WRITTEN TO RUN UNDER THE RSX11 OR RT11 OPERATING C SYSTEM RUNNING DEC FORTRAN IV. IT SHOULD WORK WITH   RECORD C ----------- C C START DATA BLOCK DATA END CARRIAGE C OF TEXT LENGTH NXT C DEFINE ETX 0X3 END OF TEXT A PERIOD C DEFINE ENQ 0X5 ENQUIRY C DEFINE ************************ C RTE16 REQUEST C DEFINE DOWNLD 1 HOST TO RTE C DEFINE UPSAV 2 GRAM AMDHST C****************************************************** C M A I N C LOCAL - TRANSACTION: TRANSX TYPE, CC OF TEXT LENGTH NUMBER CKSUM OF TEXT RETURN C .................................................... C C CK BUFFER, COUNT AND INDEX, C BUFFER, LENGTH & INDEX: MESSAGE BUFFER, LENGTH AND INDEX, C SINBUF STANDARD INPUT BUFFEUMBER BLOCK CKSUM OF TEXT RETURN C ........................................................... C C STX  ACK 0X6 ACKNOWLEDGE C DEFINE LF 0X0A LINE FEED C DEFINE NAK  RTE TO HOST C DEFINE PRSAV 3 RTE TO HOST PRINT FILE C DEFINE CLOSE1 4 CLOSE PRIN REOPN: PRINT SAVE INTERRUPTED FLAG, C FD: FILE PTR, C I, ITEMP, CTEMP & C:  STX 00 00 C0 ETX CR C C N.B. ALL FILES WHICH ARE TO BE DOWNLOADED MUST BE IN THE FOLLOWING R C CHKSUM, CK12 & ETX, IETX: C CKSUM AND CETX AND THE INTEGER REPRESENTATIVE OF CETX C FILENAME & PRINTNAME XX XX XXXXX XX ETX CR C C WHERE C DATA BLOCK IS OF LENGTH UP TO 128 BYTE (CORRESPON 0X16 NEGATIVE ACKNOWLEDGE C DEFINE CAN 0X18 CANCEL C DEFINE FILLEN 8 FILE NAME T FILE C DEFINE REOPN 5 REOPEN PRINT NAME C DEFINE DELET 6 DELETE FILE C SMISCELLANEOUS; C C IT WAITS FOR AND PROCESSES THE FOLLOWING REQUEST FROM RTE16 : C C DOWNLOAD C UPSA C FORMAT: 1 .. 79 ASCII CHARACTERS FOLLOWED BY A C NEWLINE CHARACTER(S) . HEXBINFX PRODUCES CORRECTLY C : FILE NAMES, C CANCEL: RTE16 REQUEST TO CANCEL FLAG, C SOH: SOH RECEIVD, CANCEL FLAG ALSO SET, C DEBUG: .TRUE. TO ENABDING TO 64 C BYTES AFTER PACKED), C CKSUM IS THE SUM OF ALL BYTE FROM LENGTH FIELD TO DATA C LENGTH C DEFINE DATLEN 64 DATA BLOCK LENGTH C DEFINE BLKSIZ 25 BLOCK BUFFER LENGTH C *YNC CHARACTERS C DEFINE SOH 0X1 START OF HEADER C DEFINE STX 0X2 START OF TEVE C PRINT SAVE C CLOSE C REOPEN C DELETE C CTHE COMMUNICATION ALWAYS STARTS AT RTE16 SENDING A HE FORMATTED DATA. C C PRINT FILES WILL HAVE A MAXIMUM OF 32 CHARACTERS / LINE. C******************************LE DEBUGGING MESSAGE, C PBLOCKNO: PRINT SAVE BLOCK NUMBER C****************************************************** PRO BLOCK FIELD, C C END RECORD C ---------- C C START BLOCK END CARRIAGE ********************* C G L O B A L C ENDRECORD: RECORD TO END TRANSMISSION, C BLOCK, BLOCKCOUNT & BLOCKINDEX: BLO  ADER RECORD TO THE C HOST. HOST WILL DETERMINE THE REQUEST AND TALK BACK TO RTE16. IMPLICIT INTEGER(A-Z) C GLOBAL SOH/1/,STX/2/,ETX/46/,ENQ/5/,ACK/6/,LF/10/,NAK/22/,CAN/24/, &CR/13/ DATA ENDSIZ/8/,FILLEN/10/,DATLEN/64/,BLKSIZ/25/HW,STXW,ETXW,ACKW,LFW,NAKW,CANW C COMMON /LOG/ ITBILN, IMASK(16) C LOCAL VARIABLES C GETRTE IS AN CHARACTER OR BYTE FUNER DETAILS C*************************************************************** C C SIGN ON TYPE 1000 TYPE 1010 10TX,DUM1,CKSUM, & CK12, BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO,VSOH,EOF,CANCEL,IETX COMMON /BUG/ DEBUG LOGICAL DE68/ DATA FOREVE/.TRUE./ VSOH = .FALSE. REOPEN = .FALSE. DEBUG = .FALSE. C CALL FOR RSX SYSTEMS VARIABLES C GLOBAL VARIABLES ARE REPRESENTED BY THE USE OF COMMON STATEMENTS C DUE TO THE ANSI PROHIBITION OF MIXING CHARACT DATA SOHW/"0401/,STXW/"1002/,ETXW/"1403/,ENQW/"2403/,ACKW/ &"3006/,LFW/"5012/,NAKW/"21042/CANW/"14030/,CRW/"6415/ CTION BYTE DNAME(10) , GETRTE,SIG BYTE FNAM1(10),PRNAM(10),DNAM1(10) BYTE PRNTMP(40) INTEGER I,IT00 FORMAT(' AMD AMDHSTFX V1.0 1/25/83') 1010 FORMAT(' ---------------------------------------') C ENABLEBUG C CONSTANT VARIABLES COMMON /CONS/ENDREC,ENDSIZ,FILLEN,DATLEN,BLKSIZ,DOWNLD,UPSAV, &PRSAV,REOPN,DELET,SOH,STX,TO ENABLE TERMINAL I/O DELETE FOR A VAX CALL WTQIO(768,5,1) C***********************************************************ER AND INTEGER TYPES C MOST VARIABLES ARE TREATED AS INTEGER IN THE MAIN PROGRAM AND C CHARACTER TYPES IN THE SUBROUTINES  C DATA IBITLN /15/ C DATA IMASK( 1) /1/,IMASK( 2) /2/ C DATA IMASK( 3) /4/,IMASK( 4) /8/ C DATA IMASK( 5EMP,TRANSX,ITEMP1 LOGICAL FOREVE,IOERR,REOPEN EQUIVALENCE (FNAME,FNAM1), (PRNAME,PRNAM1),(DNAME,DNAM1) CONSTANT D DEBUGGING ? TYPE 1020 1020 FORMAT(' WANT DEBUG OPTION (Y/N) ? ') READ (5,990) (BUFFER(II) , II=1,80) 990 FOETX,ENQ,ACK,LF,NAK,CAN,CR,SOHW,STXW, & ETXW,ENQW,ACKW,LFW,NAKW,CANW,CRW BYTE ENDREC(6) INTEGER ENDSIZ,FILLEN***** C VAX C THE FOLLOWING CODE IS SUPPOSED TO WORK FOR VAXES RUNNING C VMS. IT HAS NEVER BEEN TESTED C C CALL SY BYTE FNAME(10),PRNAME(10) BYTEBUFFER(72),SINBUF(80) INTEGER CKSUM,CK12,BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO ) /16/,IMASK( 6) / 32/ C DATA IMASK( 7) /64/,IMASK( 8) / 128/ C DATA IMASK( 9) /256/,IMASK(10) / 512/ C DATA IATA DATA ENDREC/'0','0','0','0','C','0'/ DATA DOWNLD/1/,UPSAV/2/,PRSAV/3/,CLOSE1/4/,REOPN/5/,DELET/6/ DATA RMAT(80A1) DEBUG = (BUFFER(1) .EQ. 'Y') .OR. (BUFFER(1) .EQ. 'Y') C WHILE 23000 IF(.NOT.(FOREVE))GOTO 23001 C ,DATLEN,BLKSIZ INTEGER DOWNLD,UPSAV,PRSAV,REOPN,DELET INTEGER*2 SOH,STX,ETX,ENQ,ACK,LF,NAK,CAN INTEGER*2 SOS$ASSIGN('TT:',CHAN,) C CHAN SHOULD BE INTEGER*4 DECLARED IN A COMMON BLOCK C LOOK IN THE VAX I/O USERSGUIDE VOL 1 FOR FURTH INTEGER*2 IETX INTEGER*2 CETX LOGICAL EOF,VSOH,CANCEL COMMON /GLOB/ FNAME,PRNAME, BUFFER,BLOCK,SINBUF,CEMASK(11) /1024/,IMASK(12) / 2048/ C DATA IMASK(13) /4096/,IMASK(14) / 8192/ C DATA IMASK(15) /16384/,IMASK(16) / 327  WAIT FOR SOH IF(.NOT.(.NOT.VSOH))GOTO 23002 C REPEAT 23004 CONTINUE CALL PRTS CALL PUTRTE(ACKW) C PROCESS DOWNLD CALL DWNLD(FD) C C C ENDFOR 23013 CONTINUE CALL PRTSS(FNAME,'CALL DWNLD') OPEN(UNIT=1,ERR=1 UPSAVE(FD) CLOSE(UNIT=2) 23020 CONTINUE GOTO 23009 23016 CONTINUE LD .LE. TRANSX) .AND.( &TRANSX .LE. DELET) .AND. (CK12 .EQ. CKSUM) .AND. (IETX .EQ. & ETX)))GOTO 23007 C AME,' UPSAVE ') OPEN(UNIT=2,ERR=20,NAME=FNAM1,TYPE ='UNKNOWN', & FORM='FORMATTED',RECORDSIZE=1)I('WAIT1 ',SOH) SIG = GETRTE(DUM) ITEMP1 = SIG CANCEL = .FALSE. 23005 LOSE FILE CLOSE(UNIT=1) 23014 CONTINUE GOTO 23009 23010 CONTINUE 0,NAME=FNAM1 ,TYPE='OLD',FORM= & 'FORMATTED', RECORDSIZE=1) GOTO 210 10 CALL PUTRTE IF(.NOT.(I23009.EQ.( PRSAV)))GOTO 23022 CALL CLRBUF(PRNAME,10) C SAVE FILE NAME C  PROCESSING C SWITCH I23009 = (TRANSX) IF(.NOT.(I23009.EQ.( DOWNLD)))GOTO 23010 C  FD =2 GOTO 220 CALL PRTSS('UPSAVE NACK',FNAM1) 20 CALL PUTRTE(NACK IF(.NOT.(ITEMP1 .EQ. SOH))GOTO 23004 C CLEAR VSOH AND CANCEL AGAIN 23002 CONTINUE CALL PRTSI('GOT  IF(.NOT.(I23009.EQ.( UPSAV)))GOTO 23016 C SAVE FILE NAME CALL CLRBUF(FNAME,10) C (NAKW) C CAN'T OPEN FILE IOERR=.TRUE. 210 CONTINUE IF(.NOT.(.NOT FOR I=1 23023 IF(.NOT.(I.LE.LENGTH))GOTO 23025 PRNAME(I) = BUFFER(I)  SAVE FILE NAME CALL CLRBUF(FNAME,10) C FOR I=1 23011 IW) IOERR = .TRUE. 220 CONTINUE IF(.NOT.(.NOT.IOERR))GOTO 23020 C  ',SOH) VSOH = .FALSE. CANCEL = .FALSE. IOERR = .FALSE. EOF = .FALSE. C GET ONE FOR I=1 23017 IF(.NOT.(I.LE.LENGTH))GOTO 23019 FNAME(I) = BUFFER(I) .IOERR))GOTO 23014 FD=1 REWIND 1 C ACKNOWLEDGE  I=I+1 GOTO 23023 C ENDFOR 23025 CONTINUE CALL PRTSSF(.NOT.(I.LE.LENGTH))GOTO 23013 FNAME(I) = BUFFER(I) I=I+1 GOTO 23011  ACKNOWLEDGE CALL PUTRTE(ACKW) C PROCESS UPSAV ITEMP = MESSAGE TRANSX = RECEIV(DUM) C CHECK FOR OBVIOUS ERROR IF(.NOT.((LENGTH .LE. FILLEN) .AND. (DOWN I=I+1 GOTO 23017 C ENDFOR 23019 CONTINUE CALL PRTSS(FN (PRNAME,' PRTSAV ') OPEN (UNIT=3,ERR=30,FORM='FORMATTED',TYPE='NEW',NAME= & PRNAM1 ,RECORDSIZEC SUCCESFULLY FILE COPY CLOSE (UNIT=3) GOTO 240 40 CALL PUTRTE(NACKW) Q.( REOPN)))GOTO 23031 CALL PRTSS(PRNAME,' REOPEN ') OPEN(UNIT=3,ERR=40,NAME=PRNAM1,FORM='FONUE GOTO 23009 23031 CONTINUE IF(.NOT.(I23009.EQ.( DELET)))GOTO 23038 CALITEMP .EQ. SOH))GOTO 23028 REOPEN = .TRUE. 23028 CONTINUE 23026 CONTINUE  CONTINUE READ(7,45,END=50)PRNTMP WRITE(3,45) PRNTMP =1) FD =3 GOTO 230 30 CONTINUE CALL PUTRTE(NACKW) I IOERR=.TRUE. 240 CONTINUE IF(.NOT.(REOPEN .AND. (.NOT.IOERR)))GOTO 23032 C RMATTED',TYPE= & 'OLD',DISPOSE='DELETE',RECORDSIZE=1) OPEN(UNIT=7,ERR=40,NAME='PRN.TMP',FORM='FOL PRTSS(' DELETE ',DNAM1) C ACKNOWLEDGE CALL PUTRTE(ACKW) CALL CLRBUF(DNA GOTO 23009 23022 CONTINUE IF(.NOT.(I23009.EQ.( CLOSE1)))GOTO 23030 CALL PRTSS(' C GOTO 49 50 CONTINUE CLOSE(UNIT=7) CLOSE(UNIOERR=.TRUE. 230 CONTINUE C ACKNOWLEDGE IF(.NOT.(.NOT.IOERR))GOTO 23026  ACKNOWLEDGE CALL PUTRTE(ACKW) C PROCESS PRSAV - DON'T INITIALIZE PBLKNO RMATTED',TYPE= & 'NEW',DISPOSE='DELETE',RECORDSIZE=1) 42 CONTINUE READ(3,45,END=47ME,10) C FOR I=1 23039 IF(.NOT.(I.LE.LENGTH))GOTO 23041 DNAME(I) =BUFLOSE ',PRMAN1) C ACKNOWLEDGE CALL PUTRTE(ACKW) C CLOSE PRINT FILE AND T=3) C SOH ? REOPEN = .FALSE. IF(.NOT.(ITEMP .EQ. SOH))GOTO CALL PUTRTE(ACKW) C PROCESS PRSAV - INITIALIZE PBLKNO PBLKNO = 0  ITEMP =PRTSAV(3) IF(.NOT.(ITEMP .NE.ACK))GOTO 23034 C REWIND 7 ) PRNTMP 45 FORMAT(40A1) WRITE (7,45) PRNTMP GOTO 42 47 CONTINUE FER(I) I=I+1 GOTO 23039 C ENDFOR 23041 CONTINUE OIGNORE ERRORS CLOSE(UNIT=FD) GOTO 23009 23030 CONTINUE IF(.NOT.(I23009.E 23036 REOPEN = .TRUE. 23036 CONTINUE 23034 CONTINUE 23032 CONTI ITEMP = PRTSAV(FD) CLOSE(UNIT=3) C SOH ? IF(.NOT.( OPEN(UNIT=3,ERR=40,NAME=PRNAM1,FORM='FORMATTED', & TYPE='NEW',RECORDSIZE=1) 49  PEN(UNIT=4,NAME=DNAM1 ,TYPE='UNKNOWN') CLOSE(UNIT=4,DISPOSE='DELETE') C DELETE FILE AND IGNO FNAME,PRNAME, BUFFER,BLOCK,SINBUF,CETX,DUM1,CKSUM, &CK12, BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO,VSOH,EOF,CANCEL,IETX C P R I N T S I C C ENTRY - STR1: STRINGS, C SYNC: SYNC CHARACTER C C IT PRINTS OUT DEBUGGING MESSAGE. C**K)))GOTO 23050 TYPE 1040 GOTO 23046 23050 CONTINUE IF(.NOT.(I23046.EQ.( SOH)))GOTO 23***** C P R I N T S S C C ENTRY - STR1,STR2: STRINGS C C IT PRINTS OUT DEBUGGING MESSAGE. C********************* IF(.NOT.(DEBUG))GOTO 23044 TYPE 1000,STR1 1000 FORMAT(1H$,10A1) C SWITCH I23046 = (SYNC) RE ERRORS 23038 CONTINUE 23009 CONTINUE GOTO 23008 C ELSE 23007 CONTINUE OMMON /BUG/ DEBUG LOGICAL DEBUG C CONSTANT VARIABLES COMMON /CONS/ENDREC,ENDSIZ,FILLEN,DATLEN,BLKSIZ,DOWNLD,UPSAV**************************************************** SUBROUTINE PRTSI(STR1,SYNC) C LOCAL VARIABLES IMPLICIT INTEG051 TYPE 1050 GOTO 23046 23051 CONTINUE IF(.NOT.(I23046.EQ.( STX)))GOTO 23052 ********************************* SUBROUTINE PRTSS(STR1,STR2) IMPLICIT INTEGER (A-Z) BYTESTR1(10) ,STR2(10) IF(.NOT.(I23046.EQ.( ACK)))GOTO 23047 TYPE 1010 GOTO 23046 23047 CONTINUE I CALL PUTRTE(NAKW) IF (DEBUG) TYPE 2000,LENGTH,FILLEN,TRANSX,CK12,CKSUM,IETX,ETX 2000 FORMAT(' LEN=',I4,'FIL, &PRSAV,REOPN,DELET,SOH,STX,ETX,ENQ,ACK,LF,NAK,CAN,CR,SOHW,STXW, &ETXW,ENQW,ACKW,LFW,NAKW,CANW,CRW BYTE ENDRER(A-Z) C GLOBAL VARIABLES BYTE FNAME(10),PRNAME(10) BYTEBUFFER(72),SINBUF(80) INTEGER CKSUM,CK12,BLKIND, TYPE 1060 23052 CONTINUE 23046 CONTINUE 1010 FORMAT(' ACK') 1020 FORMAT(' CAN') 1030 FORMAT(' EN COMMON /BUG/ DEBUG LOGICAL DEBUG IF(.NOT.(DEBUG))GOTO 23042 TYPE 1000,STR1,STR2 23042 CONTINUE F(.NOT.(I23046.EQ.( CAN)))GOTO 23048 TYPE 1020 GOTO 23046 23048 CONTINUE IF(.NOT.(I23LEN=',I4,' TRANSX=',I4,'CK12=',I4, & 'CKSUM=',I4,'IETX=',I4,' ETX=',I4) C MESSAGE ERROR 23008 CONTINUEEC(6) INTEGER ENDSIZ,FILLEN,DATLEN,BLKSIZ INTEGER DOWNLD,UPSAV,PRSAV,REOPN,DELET INTEGER*2 SOH,STX,ETX,ENQ,BLKCNT,LENGTH,INDEX,PBLKNO INTEGER*2 IETX INTEGER*2 CETX LOGICAL EOF,ERROR,VSOH,CANCEL COMMON /GLOB/Q') 1040 FORMAT(' NAK') 1050 FORMAT(' SOH') 1060 FORMAT(' STX') 23044 CONTINUE RETURN END C****** 1000 FORMAT(' ', 'PRTSS=',2(10A1)) RETURN END C****************************************************** C 046.EQ.( ENQ)))GOTO 23049 TYPE 1030 GOTO 23046 23049 CONTINUE IF(.NOT.(I23046.EQ.( NA GOTO 23000 C ENDWHILE 23001 CONTINUE STOP END C*************************************************ACK,LF,NAK,CAN INTEGER*2 SOHW,STXW,ETXW,ACKW,LFW,NAKW,CANW CLOCAL VARIABLES BYTE STR1(10) INTEGER*2 SYNC  ************************************************ C CLRBUF C CLEAR A BUFFER OF SIZE C**********************ND,BLKCNT,LENGTH,INDEX,PBLKNO,VSOH,EOF,CANCEL,IETX COMMON /BUG/ DEBUG LOGICAL DEBUG C CONSTANT VARIABLES CEL WHERE SOH IS EXPECTED. C C RETN - NEXT CHARACTER FROM RTE16 C****************************************************** HE NEXT CHARACTER FORM THE STANDARD INPUT C BUFFER . IF THEIR IS NO DATA WAITING TO BE READ C NEXTCH WAITS FOR DATA TO BE CTER FROM RTE16 AND ACCUMULATES CHKSUM. C C WHENEVER CAN OR SOH IS RECEIVED, IT SETS C UP 'CANCEL' FLAG TO FORCE 'GETRCAN) RETURN C COMPUTE 'CHECKSUM' 23056 CONTINUE CTEMP = NEXTCH(SINBUF,CANCEL) ITEMP = CTEMP ******************************** SUBROUTINE CLRBUF(STRING,ISIZE) BYTE STRING(ISIZE) INTEGER I,ISIZE C OMMON /CONS/ENDREC,ENDSIZ,FILLEN,DATLEN,BLKSIZ,DOWNLD,UPSAV, & PRSAV,REOPN,DELET,SOH,STX,ETX,ENQ,ACK,LF,NAK,CAN,CR,SOHW,S LOGICAL FUNCTION GETRTE*1(DUM) IMPLICIT INTEGER(A-Z) C GLOBAL VARIABLES BYTE FNAME(10),PRNAME(10) BYENTERED. IF THE RTE SYSTEM APPEARS C TO BE DEAD, IT IS PROBABLY NEXTCH WAITING FOR DATA. C***********************************TE(DUM)' C TO RETURN CAN ON FUTURE CALL. C C THE PURPOSE OF 'CANCEL' FLAG IS TO AVOID C UNEXPECTED CANCEL REQUEST  CKSUM = CKSUM + ITEMP C SET UP 'CANCEL' AND 'VSOH' FLAG IF(.NOT.(CTEMP .EQ. CAN))GOTO 23058 CANCEL = .TRFOR I=1 23053 IF(.NOT.(I.LE.ISIZE))GOTO 23055 STRING(I) = ' ' I = I +1 GOTO 23053 C ETXW, & ETXW,ENQW,ACKW,LFW,NAKW,CANW,CRW BYTE ENDREC(6) INTEGER ENDSIZ,FILLEN,DATLEN,BLKSIZ INTEGER DTEBUFFER(72),SINBUF(80) INTEGER CKSUM,CK12,BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO INTEGER*2 IETX INTEGER*2 CETX ******************* LOGICAL FUNCTION NEXTCH*1(SINBUF) C IMPLICIT INTEGER (A-Z) COMMON /BUG/ DEBUG OR START OF C ANOTHER HEADER RECORD FROM RTE16. C C IT WORKS BY FORCING CONTROL TO FLOW TO C CERTAIN POINTS WHEREUE. 23058 CONTINUE IF(.NOT.(CTEMP .EQ. SOH))GOTO 23060 CANCEL = .TRUE. VSOH = .TRUE. 23060 CONTINUENDFOR 23055 CONTINUE RETURN END C****************************************************** C G E T R T E C C OWNLD,UPSAV,PRSAV,REOPN,DELET INTEGER*2 SOH,STX,ETX,ENQ,ACK,LF,NAK,CAN INTEGER*2 SOHW,STXW,ETXW,ACKW,LFW,NAKW,CANW LOGICAL EOF,ERROR,VSOH,CANCEL COMMON /GLOB/ FNAME,PRNAME, BUFFER,BLOCK,SINBUF,CETX,DUM1,CKSUM, & CK12, BLKI LOGICAL DEBUG BYTE SINBUF(80) INTEGER CHCNT,SINLEN,STRLN LOGICAL DATAIS,CANCEL DATA CHCNT/0/  'CANCEL' IS C CHECKED FOR. C C 'CANCEL' FLAG WILL BE CLEARED AFTER C FLOW OF CONTROL RETURNS TO THE TOP C LEV GETRTE = (CTEMP) RETURN END C****************************************************** C NEXTCH RETURNS T GLOBAL - CANCEL: CANCEL FLAG, C CHKSUM: CKSUM C C LOCAL - CTEMP: BYTE C C IT READS ONE CHARA C LOCAL VARIABLES BYTECTEMP,NEXTCH C CHECK 'CANCEL' FLAG IF(.NOT.(CANCEL))GOTO 23056 GETRTE = (  IF(.NOT.((CHCNT .EQ.0) .OR. (CHCNT.EQ.80) .OR. (CHCNT .GE. SINLEN & .OR. (CANCEL))))GOTO 23062 CHCNT=0 D ACCUMULATES CHKSUM. C C RETN - TWO CHARACTERS FROM RTE16 PACKED INTO ONE C*********************************************ORMAT(Q,80A1) GOTO 210 10 CONTINUE IF(.NOT.(I .EQ.1))GOTO 23067 DATAIS = .FAPUTES CHKSUM. C C 'INDEX' IS INCREMENTED BY 1. C****************************************************** SUBROUTINE P C %VAL(), C NOTE 1 TERM IS AN INTEGER*4 ARRAY C TERM(1) =0 C TERM(2) = "2EDFE080" IN HEX C NOTE 2S ONE CHARACTER TO RTE16. C****************************************************** SUBROUTINE PUTRTE (SIGNAL) IMPLC CONTINUE TRYING TO READ STANDARD INPUT UNTIL SOME DATA IS SEEN C THEN STORE THE DATA IN THE STANDARD INPUT BUFFER (SINBUF) C********* INTEGER FUNCTION GET2B(DUM) IMPLICIT INTEGER (A-Z) INTEGER CTEMP,CTEMP1 INTEGER ITEMP,BANDLSE. 23067 CONTINUE 23065 IF(.NOT.(DATAIS))GOTO 23064 23062 CONTINUE 210 CONTINUE CHCNT= CHCNT+1 UTBUF (CHAR) IMPLICIT INTEGER(A-Z) C GLOBAL VARIABLES BYTE FNAME(10),PRNAME(10) BYTEBUFFER(72),SINBUF(80) IO$_RDDBK CAN BE REPLACED WITH IO$M_NOECHO C NOTE 3 MORE INFORMATION ON THE SYS$QIOW CAN BE FOUND C ON PAGEICIT INTEGER (A-Z) BYTE SIGNAL TYPE 1040,SIGNAL 1040 FORMAT(1X,A1) RETURN END C****************** REPEAT 23064 CONTINUE DATAIS = .TRUE. DO 15 I=1,80 SINBUF(I) = 0 15  BYTE CH, CH1, GETRTE CH = GETRTE(DUM) CH1 = GETRTE(DUM) C CONVERT HEX TO BINARY CALL ASC2H(CH NEXTCH = (SINBUF(CHCNT)) RETURN END C****************************************************** C G E T R T E 2  INTEGER CKSUM,CK12,BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO INTEGER*2 IETX INTEGER*2 CETX LOGICAL EOF,ERRO 171 OF THE SYSTEM SERVICE MANUAL C NOTE 4 CHAN HAS TO BE DECLARED IN COMMON OR PASSED AS A PARAMETER C****************************************************** C P U T B U F C C ENTRY - CHAR : THE CHARACTER C C GLOBAL - BUFFER()  CONTINUE C************************************************************** C CHANGE FOR VAX RUNNING VMS C REPLACE READ,CTEMP) CALL ASC2H(CH1,CTEMP1) ITEMP = SHIFTL(CTEMP,4) + CTEMP1 GET2B = (ITEMP) RETURN END C C C LOCAL - CTEMP & CTEMP1: BYTES C ITEMP : INTEGER C C IT PACKS TWO CHARACTERS FROM RTE16 ANR,VSOH,CANCEL COMMON /GLOB/ FNAME,PRNAME, BUFFER,BLOCK,SINBUF,CETX,DUM1,CKSUM, & CK12, BLKIND,BLKCNT,LENGTH,INDEX,**** END OF VAX CHANGE ************************ READ(5,1000,END=10) SINLEN,(SINBUF(I), I=1,SINLEN) 1000 F& INDEX: MESSAGE BUFFER AND INDEX, C CHKSUM: CKSUM C C IT WRITES ONE CHARACTER INTO 'BUFFER(INDEX)' AND COM WITH THE FOLLOWING C C C SYS$QIOW(,%VAL(CHAN),%VAL(IO$_RDDBK),,,,SINBUF,%VAL(80) C 1 ,,TERM,)****************************************************** C P U T R T E C C ENTRY - SIGNAL: THE CHARACTER C C IT SEND PBLKNO,VSOH,EOF,CANCEL,IETX COMMON /BUG/ DEBUG LOGICAL DEBUG C CONSTANT VARIABLES COMMON /CONS/ENDREC,ENDSBBLE) C IMPLICIT INTEGER (A-Z) INTEGER NIBBLE BYTE CH,HEX2A(16) DATA HEX2A/'0','1','2','3','4',' INTEGER BYTE1,ITEMPL,ITEMPH BYTE CH ITEMPH = MOD(RSHFT(BYTE1,4),16) ITEMPL = MOD(BYTE1,16) CALL HON /CONS/ENDREC,ENDSIZ,FILLEN,DATLEN,BLKSIZ,DOWNLD,UPSAV, & PRSAV,REOPN,DELET,SOH,STX,ETX,ENQ,ACK,LF,NAK,CAN,CR,SOHW,STXWUM + ITEMP RETURN END C****************************************************** C P U T B U F 2 C C ENTRY - INTEGER FUNCTION PACK2(DUM) IMPLICIT INTEGER(A-Z) C GLOBAL VARIABLES BYTE FNAME(10),PRNAME(10) BYTEBIZ,FILLEN,DATLEN,BLKSIZ,DOWNLD,UPSAV, & PRSAV,REOPN,DELET,SOH,STX,ETX,ENQ,ACK,LF,NAK,CAN,CR,SOHW,STXW, & ETXW,ENQW5','6','7','8','9','A','B','C', & 'D','E','F'/ CH = HEX2A(NIBBLE +1) RETURN END C***************2ASCI(CH,ITEMPH) CALL PUTBUF(CH) CALL H2ASCI(CH,ITEMPL) CALL PUTBUF(CH) RETURN END C********, & ETXW,ENQW,ACKW,LFW,NAKW,CANW,CRW BYTE ENDREC(6) INTEGER ENDSIZ,FILLEN,DATLEN,BLKSIZ INTEGER DOWN BYTE: THE CHARACTER C C ITEMPL & ITEMPH : THE LOW AND HIGH NIBBLE OF THE CHARACTER C C IT UNPACKS THE CHARACTER IUFFER(72),SINBUF(80) INTEGER CKSUM,CK12,BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO INTEGER*2 IETX INTEGER*2 CETX ,ACKW,LFW,NAKW,CANW,CRW BYTE ENDREC(6) INTEGER ENDSIZ,FILLEN,DATLEN,BLKSIZ INTEGER DOWNLD,UPSAV,PRSAV,REOPN*************************************** C P A C K 2 C C GLOBAL - BUFFER() & INDEX: MESSAGE BUFFER AND INDEX C ********************************************** C H2ASCI (HEX TO ASCII CONVERSION) C CONVERTS THE VALUE IN LD,UPSAV,PRSAV,REOPN,DELET INTEGER*2 SOH,STX,ETX,ENQ,ACK,LF,NAK,CAN INTEGER*2 SOHW,STXW,ETXW,ACKW,LFW,NAKW,CANW CNTO TWO, STORES THEM AT 'BUFFER(INDEX)' AND C 'BUFFER(INDEX+1)', AND COMPUTES 'CHECKSUM'. C C 'INDEX' IS INCREMENTED BY LOGICAL EOF,ERROR,VSOH,CANCEL COMMON /GLOB/ FNAME,PRNAME, BUFFER,BLOCK,SINBUF,CETX,DUM1,CKSUM, & CK12, BLKIND,,DELET INTEGER*2 SOH,STX,ETX,ENQ,ACK,LF,NAK,CAN INTEGER*2 SOHW,STXW,ETXW,ACKW,LFW,NAKW,CANW CLOCAL VARIABLE  C LOCAL - TEMP & TEMP1: BYTES C C IT PACKS TWO CHARACTERS AT 'BUFFER(INDEX)' AND 'BUFFER(INDEX+1)' INTO ONE. C NIBBLE INTO A CHARACTER RETURNED IN CH C****************************************************** SUBROUTINE H2ASCI(CH,NILOCAL VARIABLES INTEGER SHIFTL INDEX = INDEX +1 CALL ASC2H(BUFFER(INDEX),TEMP) INDEX = INDEX +1  2. C****************************************************** SUBROUTINE PUTBF2 (BYTE1) IMPLICIT INTEGER (A-Z) BLKCNT,LENGTH,INDEX,PBLKNO,VSOH,EOF,CANCEL,IETX COMMON /BUG/ DEBUG LOGICAL DEBUG C CONSTANT VARIABLES COMM BYTECHAR C COMPUTES 'CHECKSUM' INDEX = INDEX +1 BUFFER(INDEX) =CHAR ITEMP = CHAR CKSUM = CKS C 'INDEX' IS INCREMENTED BY 2. C C RETN - PACKED CHARACTER C******************************************************   CALL ASC2H(BUFFER(INDEX),TEMP1) IITEMP = SHIFTL(TEMP,4) + TEMP1 PACK2 = (IITEMP) RETURN END C****************************************************** INTEGER FUNCTION RECEIV(DUM) IMPLICIT INTEGER(A-Z) C GLOBAL C BEFORE THE CKSUM FIELD. C C FIRST TWO CHARACTERS ARE PACKED INTO 'LENGTH'. C NEXT TWO CHARACTERS ARE PACKED INTO I=1 23071 IF(.NOT.(I.LE.LENGTH))GOTO 23073 BUFFER(I) = GETRTE(DUM) I=I+1 GOTO 23071 C  CONTINUE HEX = IASCII - H0 23070 CONTINUE RETURN END C********************************************REOPN,DELET,SOH,STX,ETX,ENQ,ACK,LF,NAK,CAN,CR,SOHW,STXW, & ETXW,ENQW,ACKW,LFW,NAKW,CANW,CRW BYTE ENDREC(6) *************************************************** C ASC2H C CONVERTS THE FIRST ARGUEMENT WHICH IS IN ASCII C AND PLACEVARIABLES BYTE FNAME(10),PRNAME(10) BYTEBUFFER(72),SINBUF(80) INTEGER CKSUM,CK12,BLKIND,BLKCNT,LENGTH,INDEX C 'BN' FOR EITHER TRANSX OR BLOCK NUMBER. C C THE MESSAGE OF LENGTH 'LENGTH' IS SAVED IN THE 'BUFFER()'. C C TWO ENDFOR 23073 CONTINUE C GET CKSUM CK12 = MOD(CKSUM,256) C COMPUTED CKSUM CK = GET2B(DUM) C RECEIVD********** C R E C E I V E C C GLOBAL - BUFFER() & LENGTH: MESSAGE BUFFER AND LENGTH, C CHKSUM INTEGER ENDSIZ,FILLEN,DATLEN,BLKSIZ INTEGER DOWNLD,UPSAV,PRSAV,REOPN,DELET INTEGER*2 SOH,STX,ETX,ENQ,ACK,LF,NAK,CA THE HEX RESULT IN THE SECOND ARGUEMENT C****************************************************** SUBROUTINE ASC2H(ASCII,,PBLKNO INTEGER*2 IETX INTEGER*2 CETX LOGICAL EOF,ERROR,VSOH,CANCEL COMMON /GLOB/ FNAME,PRNAME, BUFFCHARACTERS ARE THEN PACKED INTO C 'CHECKSUM' AND THE LAST CHARACTER IS SAVED IN C 'CETX'. C C C CHECKSUM COMPUTAT CKSUM C GET ETX CETX = GETRTE(DUM) IETX = CETX C RESTORE DUE TO THAT 'GETRTE(DUM)' CHANGES 'CHECKSUM' & CK12: CKSUM, C ETX: CETX C C LOCAL - BN: BLOCK NUMBER OR TRANSX TYPE, C CK: RECEN INTEGER*2 SOHW,STXW,ETXW,ACKW,LFW,NAKW,CANW CLOCAL VARIABLES BYTE GETRTE INTEGER CK,I,BN CKSUM = HEX) CLOCAL VARIABLES BYTE ASCII INTEGER IASCII,HEX INTEGER H0,H7,H9 DATA H0/48/,H7/55/,H9/57/ ER,BLOCK,SINBUF,CETX,DUM1,CKSUM, & CK12, BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO,VSOH,EOF,CANCEL,IETX COMMON /BUG/ DEBUGION IS INCLUDED IN 'GETRTE(DUM)' C AND THE RESULT IS SAVED IN C 'CK12'. C RETN - BLOCK NUMBER OR TRANSX TYPE C*** CKSUM = CK RECEIV = (BN) RETURN END C****************************************************** C IVD CKSUM, C I: MISCELLANEOUS C C IT ACCEPTS ONE MESSAGE FROM RTE16 AND COMPUTES CKSUM ON THOSE CHARACTERS 0 C GET LENGTH AND BLOCK/TRANSX NUMBER LENGTH = GET2B(DUM) BN = GET2B(DUM) C GET MESSAGE C FOR  IASCII = ASCII IF(.NOT.(IASCII .GT. H9))GOTO 23069 HEX = IASCII - H7 GOTO 23070 C ELSE 23069 LOGICAL DEBUG C CONSTANT VARIABLES COMMON /CONS/ENDREC,ENDSIZ,FILLEN,DATLEN,BLKSIZ,DOWNLD,UPSAV, & PRSAV,  D O W N L O A D C C ENTRY - FD: PTR TO AN OPEN FILE C C GLOBAL - BUFFER() & INDEX: MESSAGE BUFFER AND INDEX, XW,ETXW,ACKW,LFW,NAKW,CANW C LOCAL VARIABLES INTEGER DATALN,K,I,BLKNUM BYTE CTEMP,DWNBUF(80),GETRTE BLKNUMCKSUM, & CK12, BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO,VSOH,EOF,CANCEL,IETX COMMON /BUG/ DEBUG LOGICAL DEBUG C C 23085 C ENDFOR 23087 CONTINUE 23081 CONTINUE C REPEAT 23088 CONTINUE CALL PRTCK: FILE TRANSMISSION COMPLETED, C CAN: RTE16 REQUEST TO CANCEL OR START OF NEW HEADER RECEIVD C********************* FOR K =1 23082 IF(.NOT.(K.LE.DATALN))GOTO 23084 CALL PUTBUF(DWNBUF(K))  C CHKSUM: CKSUM C C LOCAL - BLOCKNO: BLOCK NUMBER, C LEAVE: LOOP CONTROL FLAG, C =0 CKSUM = 0 C REPEAT 23074 CONTINUE INDEX = 0 C CLEAR BUFFER SO STRLN WILL WORK C ONSTANT VARIABLES COMMON /CONS/ENDREC,ENDSIZ,FILLEN,DATLEN,BLKSIZ,DOWNLD,UPSAV, & PRSAV,REOPN,DELET,SOH,STX,ETX,ENSI('WAITDWNLD ',ENQ) CTEMP = GETRTE(DUM) IF (DEBUG) TYPE 1210,CTEMP 1210 FORMAT(' IN DOWNLOAD ********************************* SUBROUTINE DWNLD(FD) IMPLICIT INTEGER(A-Z) C GLOBAL VARIABLES BYTE FNAMK=K+1 GOTO 23082 C ENDFOR 23084 CONTINUE CALL PUTBF2(CKSUM) GOTO 230 ITEMP, I & CTEMP: MISCELLANEOUS C C IT SENDS FILE (ALREADY OPEN) INCLUDING AN END RECORD TO RTE16. C C FOR J=1 23077 IF(.NOT.(J.LE.80))GOTO 23079 DWNBUF(J) = ' ' J=J+1 GOTO 2307Q,ACK,LF,NAK,CAN,CR,SOHW,STXW, & ETXW,ENQW,ACKW,LFW,NAKW,CANW,CRW BYTE ENDREC(6) INTEGER ENDSIZ,FILLEN,DATLCTEMP=',I4) CALL PRTSI('FOUND2 ',CTEMP) 23089 IF(.NOT.((CTEMP .EQ. CAN) .OR. (CTEMP .EQ. ENQ) D E(10),PRNAME(10) BYTEBUFFER(72),SINBUF(80) INTEGER CKSUM,CK12,BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO INTEGER*2 I81 C ELSE 23080 CONTINUE C FOUND THE END OF RECORD DATALN = 0 C FOR AFTER THE MESSAGE IS CONSTRUCTED, IT WAITS FOR ENQ TO START TRANSMISSION. C C IT RETRANSMITS UPON RECEIVING A NAK RESPONSE.7 C ENDFOR 23079 CONTINUE CALL FGETS(DWNBUF,64,EOF,DATALN) DWNBUF(DATALN +1) = 0 DATALN = STREN,BLKSIZ INTEGER DOWNLD,UPSAV,PRSAV,REOPN,DELET INTEGER*2 SOH,STX,ETX,ENQ,ACK,LF,NAK,CAN INTEGER*2 SOHW,ST .OR. (CTEMP .EQ. NAK))) GOTO 23088 C TRANSMIT THE MESSAGE C REPEAT 23091 CONTINUE IF(.NOETX INTEGER*2 CETX LOGICAL EOF,ERROR,VSOH,CANCEL COMMON /GLOB/ FNAME,PRNAME, BUFFER,BLOCK,SINBUF,CETX,DUM1, K=1 23085 IF(.NOT.(K.LE.6))GOTO 23087 BUFFER(K) = ENDREC(K) K=K+1 GOTO C C TRANSMISSION CONTINUES UNTIL EITHER END OF FILE IS REACHED, CAN OR SOH IS C# RECEIVD FROM RTE16. C C RETN - ALN(DWNBUF,1) IF(.NOT.(.NOT.EOF))GOTO 23080 CALL PUTBF2(DATALN) CALL PUTBF2(BLKNUM) C  T.(CTEMP .EQ. CAN))GOTO 23094 RETURN 23094 CONTINUE TYPE 1200,STX, (BUFFER(I), I =1,DATALN+6(10) BYTEBUFFER(72),SINBUF(80) INTEGER CKSUM,CK12,BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO INTEGER*2 IETX I ENQ TO RTE16 AND WAITS FOR THE MESSAGE. C C REPLY WITH ACK TO ACCEPT THE MESSAGE OR NAK TO REJECT IT AND REQUEST C RETGOTO 23102 UPSAVE = (CAN) RETURN 23102 CONTINUE 23100 IF(.NOT.(CTEMP .EQ. STX))GOT END C****************************************************** C U P S A V E C C ENTRY - FD: PTR TO AN OPEN FILE C  INTEGER DOWNLD,UPSAV,PRSAV,REOPN,DELET INTEGER*2 SOH,STX,ENQ,ACK,LF,NAK,CAN INTEGER*2 SOHW,STXW,ETXW,ACKW,LFW), ETX 1200 FORMAT(' ',A1,70A1,A1) CALL PRTSI('WAITDWNLD2',ACK) 2000 CONTINUE CTEMNTEGER*2 CETX LOGICAL EOF,ERROR,VSOH,CANCEL COMMON /GLOB/ FNAME,PRNAME, BUFFER,BLOCK,SINBUF,CETX,DUM1,CKSUM, RANSMISSION. C C RECEIVING PROCESS CONTINUES UNTIL END RECORD, CAN OR SOH IS RECEIVD. C C RETN - ACK: FILE RECEIVD SUO 23099 CALL PRTSI('GOTUPSAVE ',CTEMP) C GET ONE MESSAGE BN12 = RECEIV(DUM) C CHECK FOR OBV C GLOBAL - BUFFER() & LENGTH: MESSAGE BUFFER AND LENGTH, C BLOCKCOUNT & BLOCKINDEX: BLOCK BUFFE,NAKW,CANW,ETX CLOCAL VARIABLES INTEGER BN12,I,BLKNO BYTECTEMP,GETRTE BLKNO = 0 CKSUM = 0 C REP = GETRTE(DUM) IF (CTEMP .EQ. CAN) RETURN IF (.NOT.((CTEMP .EQ. ACK).OR.(CTEMP .EQ. ENQ) .OR. (CT & CK12, BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO,VSOH,EOF,CANCEL,IETX COMMON /BUG/ DEBUG LOGICAL DEBUG C CONSTANT VARICCESSFULLY, C CAN: RTE16 REQUEST TO CANCEL OR START OF NEW HEADER RECEIVD C*****************************************IOUS ERRORS IF ((LENGTH .LE. DATLEN) .AND. (IETX .EQ. ETX) .AND. D (CK12 .EQ. CKSUM)) GOTO 2000 C MR COUNT AND INDEX, C CHKSUM & CK12: CKSUM, C ETX: CETX C C LOCAL - BLOCKNO & PEAT 23096 CONTINUE C REQUEST MESSAGE CALL PUTRTE(ENQW) C REPEAT 23099 CONTINUE C EMP D .EQ. NAK) .OR. (CTEMP .EQ. CAN))) GOTO 2000 23092 IF(.NOT.(CTEMP .NE. NAK))GOTO 23094 CKSABLES COMMON /CONS/ENDREC,ENDSIZ,FILLEN,DATLEN,BLKSIZ,DOWNLD,UPSAV, & PRSAV,REOPN,DELET,SOH,STX,ETX,ENQ,ACK,LF,NAK************* INTEGER FUNCTION UPSAVE (FD) IMPLICIT INTEGER(A-Z) C GLOBAL VARIABLES BYTE FNAME(10),PRNAMEESSAGE ERROR CALL PUTRTE(NAKW) LENGTH = 1 GOTO 2010 2000 CONTINUE BN12: BLOCK NUMBER, C I & CTEMP: MISCELLANEOUS C C IT RECEIVS A FILE FROM RTE16. C C IT SENDS OUTWAIT FOR STX OR CAN CALL PRTSI('WAIT',STX) CTEMP = GETRTE(DUM) IF(.NOT.(CTEMP .EQ. CAN))UM = 0 BLKNUM= BLKNUM+1 IF (BLKNUM .GE. 256) BLKNUM = 0 23075 IF(.NOT.(EOF))GOTO 23074 RETURN ,CAN,CR,SOHW,STXW, & ETXW,ENQW,ACKW,LFW,NAKW,CANW,CRW BYTE ENDREC(6) INTEGER ENDSIZ,FILLEN,DATLEN,BLKSIZ   IF (.NOT. ((BN12 .EQ. BLKNO) .OR. ((LENGTH .EQ.0) D .AND. (BN12 .EQ.0)))) GOTO 2020 C VD C UNEXPECTEDLY, C SOH: START OF NEW HEADER RECEIVD AT PROPER TIME C****************************** PBLOCKNO: BLOCK NUMBER C C LOCAL - BN12: BLOCK NUMBER, C CTEMP: MISCELLANEOUS C C# IT RECEIVS AN BLKCNT = 0 BLKIND = 0 CKSUM = 0 C REPEAT 23106 CONTINUE C REQUEST MESSAGE CAL = 1 GOTO 23097 2010 CONTINUE CALL PUTRTE(ACKW) 23097 IF(.NOT.(((LENGTH.EQ.0) .AND. ( BN12.EQ.0)NSTANT VARIABLES COMMON /CONS/ENDREC,ENDSIZ,FILLEN,DATLEN,BLKSIZ,DOWNLD,UPSAV, & PRSAV,REOPN,DELET,SOH,STX,ETX,ENQ ACKNOWLEDGE CALL PUTRTE(ACKW) CKSUM = 0 BLKNO = BLKNO + 1 IF (BLKNO .GE************************ INTEGER FUNCTION PRTSAV (FD) IMPLICIT INTEGER(A-Z) C GLOBAL VARIABLES BYTE FNAME PRINT FILE FROM RTE16. C C IT SENDS OUT ENQ TO RTE16 AND WAITS FOR THE MESSAGE. C C REPLY WITH ACK TO ACCEPT THE MESSL PUTRTE(ENQW) C WAIT FOR SOH, STX OR CAN C REPEAT 23109 CONTINUE CALL PRTSI('WAITPRTSAV',S)))GOTO 23096 UPSAVE = (ACK) RETURN END C****************************************************** C P R ,ACK,LF,NAK,CAN,CR,SOHW,STXW, & ETXW,ENQW,ACKW,LFW,NAKW,CANW,CRW BYTE ENDREC(6) INTEGER ENDSIZ,FILLEN,DATLE. 256) BLKNO = 0 C WRITE BUFFER WRITE(2,1000) (BUFFER(K), K=1,LENGTH) 1000 FORMAT(80A1) (10),PRNAME(10) BYTEBUFFER(72),SINBUF(80) INTEGER CKSUM,CK12,BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO INTEGER*2 IEAGE OR NAK TO REJECT IT AND REQUEST C RETRANSMISSION. C C RECEIVING PROCESS CONTINUES UNTIL END RECORD, CAN OR SOH IS RTX) CTEMP = GETRTE(DUM) CALL PRTSI('GOTPRTSAV ',CTEMP) IF(.NOT.((CTEMP .EQ. CAN) .OR. (CTI N T S A V E C C GLOBAL - INDEX & LENGTH: MESSAGE BUFFER INDEX AND LENGTH, C BLOCKCOUNT & BLON,BLKSIZ INTEGER DOWNLD,UPSAV,PRSAV,REOPN,DELET INTEGER*2 SOH,STX,ENQ,ACK,LF,NAK,CAN INTEGER*2 SOHW,STXW,ET GOTO 2010 C ELSE 2020 CONTINUE C IF THE BLOCK IS THE SAME AS THE PREVIOUS BLOCK THEN PUT AN ACK TX INTEGER*2 CETX LOGICAL EOF,ERROR,VSOH,CANCEL COMMON /GLOB/ FNAME,PRNAME, BUFFER,BLOCK,SINBUF,CETX,DUM1,CECEIVD. C# C RETN - ACK: FILE RECEIVD SUCCESSFULLY, C# CAN: RTE16 REQUEST TO CANCEL OR START OF NEW HEADER RECEIEMP .EQ. SOH)))GOTO 23112 PRTSAV = (CTEMP) RETURN 23112 CONTINUE 23110 IF(.NOT.(CTCKINDEX: BLOCK BUFFER COUNT AND INDEX, C CHKSUM & CK12: CKSUM, C ETX: CETX, C XW,ACKW,LFW,NAKW,CANW,ETX CLOCAL VARIABLES INTEGERBN12 BYTE CTEMP,GETRTE INTEGER*2 OUTBUF(40),OUTIND,OUTLE IF (BN12 .EQ. (BLKNO -1)) GOTO 2010 C ELSE MESSAGE ERROR CALL PUTRTE(NAKW) LENGTHKSUM, & CK12, BLKIND,BLKCNT,LENGTH,INDEX,PBLKNO,VSOH,EOF,CANCEL,IETX COMMON /BUG/ DEBUG LOGICAL DEBUG C CO EMP .EQ. STX))GOTO 23109 C GET ONE MESSAGE BN12 = RECEIV(DUM) C CHECK FOR OBVIOUS ERRORS IAT(40A1) RETURN END C************************ INTEGER FUNCTION RSHFT(VAR,ICOUNT) C SHIFTS THE VAR PUTRTE(NAKW) LENGTH = 1 GOTO 23107 2010 CONTINUE CALL PUTRTE(ACKW) 23107 IF(.NOT.(LEN(I) = NEWDOT IF (ITEMP .EQ. CRI) STRING(I) = NEWCR IF (ITEMP .EQ. LFI) STRING(I) = NEWLF IF (ITEMP  IF(.NOT.(INDEX .LT. LENGTH))GOTO 23117 OUTBUF(OUTIND) = PACK2(DUM) OUTIND = OUTIND +1 RACTER C IN THE STRING AFTER INDEX (WHICH IS NORMALLY THE LOCATION C OF THE ':' BYTE STRING(80) INTEGEF ((LENGTH .LE. DATLEN) .AND. ( & CK12 .EQ. CKSUM) .AND.(IETX .EQ. ETX) )GOTO 2000 C MESSAGE ERROR IABLE VAR ICOUNT PLACE TO THE RIGHT INTEGER VAR,ICOUNT,TEMP TEMP = VAR/(2**ICOUNT) 20 CONTINUE GTH .EQ.0))GOTO 23106 PRTSAV = (ACK) RETURN END C****************************************************** C.EQ. 0) GOTO 40 10 CONTINUE 40 CONTINUE STRLN = TEMP RETURN END C **************** GOTO 23116 C ENDWHILE 23117 CONTINUE OUTLEN = LENGTH/2 CALL PRIOUT(OUTBR*2 CRI,LFI,BLANK INTEGER INDEX,TEMP,ITEMP INTEGER*2 TAB,NEWTAB,NEWDOT,DOT,NEWCR,NEWLF DATA CRI/13/,LFI/10 CALL PUTRTE(NAKW) LENGTH =1 GOTO 2010 2000 CONTINUE IF ( .NOT. (PBLKNO .EQ. RSHFT = TEMP RETURN END C *********************** INTEGER FUNCTION SHIFTL(VAR,SCOUNT) C SHIFTS THE  PRIOUT PRINTS OUT OUTBUF TO THE PRINT FILE C****************************************************** SUBROUTINE PRI******* SUBROUTINE FGETS(BUFFER,BUFSIZ,ERROR,DATALN) BYTE BUFFER(80) INTEGER BUFSIZ,DATALN LOGICAL EUF,OUTLEN) CALL PUTRTE(ACKW) GOTO 2010 2020 CONTINUE IF ((PBLKNO -1) .EQ. BN12) GOTO 20/,BLANK/32/,TAB/09/,NEWTAB/31/ DATA DOT/46/,NEWDOT/28/,NEWCR/29/,NEWLF/30/ DO 10 I = INDEX,80 TEMP = IBN12)) GOTO 2020 C ACKNOWLEDGE CKSUM = 0 PBLKNO = PBLKNO +1 IF (PBLKNO .GE. VARIABLE VAR SCOUNT PLACES TO THE LEFT SHIFTL = VAR *2**IFIX(SCOUNT) RETURN END C*************************OUT(OUTBUF,OUTLEN) INTEGER*2 OUTBUF(40) INTEGER*2 OUTLEN,M WRITE(3,1000) (OUTBUF(M),M=1,OUTLEN) 1000 FORMRROR CD LOGICAL FIRST ,DEBUG COMMON /BUG/ DEBUG C GETS A LINE OF INPUT WITH AT MOST BUFSIZE CHARACTERS IN IT10 C ELSE 23114 CONTINUE C MESSAGE ERROR CALL PRTSI('PRTSAVELSE',NAK) CALL - INDEX ITEMP = STRING(I) IF (ITEMP .EQ. TAB) STRING(I) = NEWTAB IF (ITEMP .EQ. DOT) STRING256) PBLKNO = 0 C CONVERT AND WRITE BUFFER INDEX = 0 OUTIND = 1 C WHILE 23116***************************** INTEGER FUNCTION STRLN(STRING,INDEX) C RETURN THE NUMBERS OF CONSECUTIVE NON BLANK CHA  ERROR = .FALSE. READ (1,20,END=100,ERR=999) DATALN,(BUFFER(I) , I=1,DATALN) 20 FORMAT(Q,80A1) IF (DEBUCE MANUAL C NOTE 4 CHAN HAS TO BE DECLARED IN COMMON OR PASSED AS A PARAMETER C********************** END OF VAX CHANGE *STEM MODE =! y~ +2 T?L?SA!" x|͝  ʒŒ >. `!M~********************************************************* C CHANGE FOR VAX RUNNING VMS C REPLACE READ WITH THE FOLLOWING C >s>p>s>sr2 2 2 >2 >2 >2 !2 ! yI~Y12 !l`!7 "] "_ *_ *] mvlw#}v!7 aʐ}G) TYPE 10025, BUFFER 10025 FORMAT (' PAST READ ECHO=',80A1) RETURN 100 ERROR = .TRUE. TYPE 30 30 FORMAT(*********************** READ (5,10 , END=999) BUFFER 10 FORMAT(80A1) RETURN 999 TYPE 20 20 FORMA# ~!c  ! w#> w# ¨,· ½:a @w#, .a w#! ! 4w#  C C SYS$QIOW(,%VAL(CHAN),%VAL(IO$_RDDBK),,,,BUFFER,%VAL(80) C 1 ,,TERM,) C %VAL(), C N~`#{7 "] "_ a\`G O! +## > H\myl #y## a' END OF FILE REACHED') RETURN 999 ERROR =.TRUE. TYPE 40 40 FORMAT(' WARNING I/0 ERROR HAS OCCURED') T(' NO DATA WAS READ') RETURN END !" {!" |͝  ’ͨE!t>. ,HOST FILENAME ERROR DOWNLOAD ERROR UPSAVE ERROROTE 1 TERM IS AN INTEGER*4 ARRAY C TERM(1) =0 C TERM(2) = "2EDFE080" IN HEX C NOTE 2 IO$_RDDBK CAN BE REPLA`G  y~# ɯjI fG8#*!(I>>"> <>(ů9600756004800 STOP END C****************************************************** SUBROUTINE GETS(BUFFER) C GETS A LI AMD FILEXFER V1.0 1/25/83 $OPTIONS (Y, C/R=N)? TO DOWNLOAD ASCII FROM HOST--COMMAND IS:T=HOSTFILENAME,AMDFILE.XXX TO DOCED WITH IO$M_NOECHO C NOTE 3 MORE INFORMATION ON THE SYS$QIOW CAN BE FOUND C ON PAGE 171 OF THE SYSTEM SERVI3002400 180001501200@110ECHO (Y, CR=N)?OPTIONS (Y, CR=N)?BAUD RATE =COMM CONTROL CODE =MONITOR MODE =SYNE OF INPUT FROM STANDARD INPUT I.E TERMINAL C THIS ROUTINE HAS TO BE MODIFIED FOR VAXEN BYTE BUFFER(80) C***** WNLOAD FILE FROM HOST---COMMAND IS:L=HOSTFILENAME,B:AMDFILE.XXX TO UPSAVE FILE TO HOST-------COMMAND IS:S=HOSTFILENAME,AMDFILE.0000000000000000000000000000000000000000000000000000000000000000000000000000 t ʫ : W& _& & O { a >2c mʎ ~l # Ž t m y« :c = 2c ë l  è a < >f > Ç  ####w! w#q! #~ ʪ=ʪ ʮ,ʮw# p ѧ>>2 * " >2 2g 2 2h {* " >2 O>w# : : O* XXX (DEFAULT A:) TO UPSAVE ASCII TO HOST------COMMAND IS:A=HOSTFILENAME,AMDFILE.XXX y!!G ~G#~ghZ]i!!t!!! `i"F & & w# & ͋ « t Y t Y GтWx ͢!o ~Z #.P*.  NEXT PC͐ =«]m l  y !i P>2c mD y* :c =ʥ 2c * l * w#>2c mt yZ :c =ʥ 2c Z l wʥ :g x*e G: T9~>.4~> 4~> 4~> 4~#>I w# Qx x"e x2g !l > ~ #~ > " y2 @H!Lx!!!  !AA5 1>ERROR: FUNCTION IS NOT IMPLEMENTED. $a]`ai{`: =*  f  . ~ Ͷ ʻ .͓ =« f |« }w#Ä >2L͐ ! =« f }ʫ +"MD Å .  #.Q !i #~G~.Š ++_xGI ʼ >´ >f >>f  !j I 2g I O:h <2h >f y :g <>f >:  a>s>p>s>sr2 2 2 >2 >2 >2 !2 ! yI~Y12 !h`!7 "] "_ *_ *] ivhw#}v!7 aʐ}>f  •!n "e 2 =¦: րʦ<>2 * " !n : O* G~#G5 x@" y2 !g >@w :h <2h : ³Z{!}C5 " ! ~<2 ! ! " 2 : <2 r{p>s>sr{  a~$`# ë . Ͷ ͐ =« f .0000C0.}ҫ gA>S Ag}S S i |« }!w s#r:[ʔ  `~# ~ !7 a `w> 5 #  > !7 y > + > >  00000000000000000000000000000000000000000~`#{7 "] "_ a\`G O! +## > H\iyh #y## aɯ" N#V##A5 B5 #yGW#" G5 >.wZ͂ x> xƐ'@'w#~:Q O#~:a #Gmg xl mt > lG] & & +  yɯ  +> > a>!ɯ!g w#w! w#q!  #~ ʮw# eî!g w_!~ʦ ![4ç \͢¦ 2[ 7 >?  ͢!g"c> _͢a_!f~> 5*c~#"c 0  `G  y~# ɯjI fG8#*!(I>>"> <>(ů9600756004800>f  •!n "e 2 =¦: րʦ<>2 * " !n : O* G~#G5 x@" y2 !g >@w :h <2h : ³Z{!}C5 " ! ~<2 ! ! " 2 : <2 r{p>s>sr{  a~$`# ë . Ͷ ͐ =« f .0000C0.}ҫ gA>S Ag}S S i |« }!w s#r:[ʔ  AMD FILEXFER V1.0 1/25/83 $OPTIONS (Y, C/R=N)? TO DOWNLOAD ASCII FROM HOST--COMMAND IS:T=HOSTFILENAME,AMDFILE.XXX TO DO `~# ~ !7 a `w> 5 #  > !7 y > + > >  000000000000000000000000000000000000000003002400 180001501200@110ECHO (Y, CR=N)?OPTIONS (Y, CR=N)?BAUD RATE =COMM CONTROL CODE =MONITOR MODE =SYɯ" N#V##A5 B5 #yGW#" G5 >.wZ͂ x> xƐ'@'w#~:Q O#~:a #Gig xh it > hG] & & +  yɯ  +> > a>!ɯ!g w#w! w#q!  #~ ʮw# eî!g w_!~ʦ ![4ç \͢¦ 2[ 7 >?  ͢!g"c> _͢a_!f~> 5*c~#"c 0 WNLOAD FILE FROM HOST---COMMAND IS:L=HOSTFILENAME,B:AMDFILE.XXX TO UPSAVE FILE TO HOST-------COMMAND IS:S=HOSTFILENAME,AMDFILE.0000000000000000000000000000000000000000000000000000000000000000000000000000 t ʫ : W& _& & O {STEM MODE =! y~ +2 T?L?SA!" x|͝  ʒŒ >. `!M~ a >2c iʎ ~h # Ž t i y« :c = 2c ë h  è a < >f > Ç  ####w! w#q! #~ ʪ=ʪ ʮ,ʮw# p ѧ>>2 * " >2 2g 2 2h {* " >2 O>w# : : O* XXX (DEFAULT A:) TO UPSAVE ASCII TO HOST------COMMAND IS:A=HOSTFILENAME,AMDFILE.XXX y!!G ~G#~ghZ]i!!t!!! `i"F & & w# & ͋ « t Y t Y GтWx ͢!o ~Z #.P*.  NEXT PC͐ =«# ~!c  ! w#> w# ¨,· ½:a @w#, .a w#! ! 4w# ]i h  y !i P>2c iD y* :c =ʥ 2c * h * w#>2c it yZ :c =ʥ 2c Z h wʥ :g x*e G: T9~>.4~> 4~> 4~> 4~#>I w# Qx x"e x2g !l > ~ #~ > " y2 @H!Lx!!!  !AA5 1>ERROR: FUNCTION IS NOT IMPLEMENTED. $a]`ai{`: =*  f  . ~ Ͷ ʻ .͓ =« f |« }w#Ä >2L͐ ! =« f }ʫ +"MD Å .  #!" {!" |͝  ’ͨE!t>. ,HOST FILENAME ERROR DOWNLOAD ERROR UPSAVE ERROR.Q !i #~G~.Š ++_xGI ʼ >´ >f >>f  !j I 2g I O:h <2h >f y :g <>f >:  a *:":l.3::2:":|!}Ž!.3ʤ!‘!/3>G>)͢3é!#ͫ'͜))̓(Ͱ0!͐&+ͽ1#͜%! /"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2re Y*w\*w`is#r͐n! s{S ! n} G ! n} S `i^#Vr+s! **wb*s#rz¯ *wn^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z!ͳ*Ͷ*Ͱ\!,K Finished converted %d Lines ͹höÈw('ß!9DM*s#r*3,(r&͐&͜))̓(G(~m7#^#V#"Ͱ0)))R~+̽1G~`2:2:#~2:~?>S"=2:#^#V#^#V#"+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_! é Can not open '%s' filname error Y\#| ! enter the microword size in bits e.g. 32 Y*! %d7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyOs#r*s#r* w#w*s#r*s#r*s#r*##s#r*s#r! mtech2amd, Microtech to AMDASM.OBJ:^#V":::}"*:!::@ʎ"":*:#w":*:~ʪ"µ"*ͽ19+":*:+":!=":6!=":*:~!~7z?` :>ª@w#.¶66*>?w#> w#.7:77e! w#w\' \P ! 6#6!6 K illegal wordsize Y͐|¹ !9n WÈ!9DM! * )v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/o conversion program *&V!. K HEX2AMD Version 1.0 9/20/82 Y!V o enter source file name Y*c\*:*:s#r#*:s#r#*:s#r#*:s#r#*:s#r#::w#":*:*:s#r#*:s#r#*:s#r#*:s#r#*:s#r#::w#":*:+~2!a{   `OE!y6$ -7rBo&))T])))!ye #| ! ! ÷ premature EOF reached - '%s' h * 6#6!! w#w͐! n&k ?͐#! n&#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!* *c_*s#rz *c! can't open '%s' file errorY\#|P !  enter destination file nam*K͞+z+z+)4'+FÎr7 :2!q: ʊ *M8 ^#V#*~#fo^#*~#fo^#V#*n^#*:+V+^+":V+^+":V+^+":VüSb !mmÿÈͤͧ͡* w#w\ |ͪ\ |ͭ* Ͱ* k ! s#r͐?\*s#r! ~#fo##s#r͐͐*s#r͐* s#r`iw#w~#fos#r͐#)*͐)!^ ~#fos#r! ~#fo##s#rO\ | ͐)*w#w͐#)*͐)!^ i~#fo##s#r)͐^) ! s#r͐++! s͐͐͐\!length error on line %d rlength=%d,length= %+s)`i! ~#fo̓)~#fo |g}o|3!6!s#r! ^#Vr+s)`i! ~#fo̓)~#fo|g}o|w!z!s#r!͉*s#r`iw#w͐<*͐*&n&*`i^#Vr+sÛ*\**M** =! n} =! n} =! ~#fo`i^#Vr+s! ns! n}d0mw ʁ ʁ ʁð!͐͐ \))))! ^#Vr+s! n&k *s#r`i^#Vr+s \*s#r*##^#Vr+s! * e ! s#r~#fos#r^͐)*͐)!^ ~#fos#r͐#)*͐)!^ ~#fos#r!d!9vÈ!9DM!ds!d͐ .* 6#6!d`iw#w͐! nѯgp! n͐)!^ ~#fos`i^#Vr+s4! ng|g ^#Vr+s)`i! ~#fo̓)~#fo|g}o|ʻ!þ!s#r! ^#Vr+s)`i! ~#fo̓)~#fo|g}o|!!M**\|g}o**\**\*!W_WORKING-!9|WÈD!R! ~#fo͐#6 ! ~#fo͐##6͐! switch error ]!!leaving getnextln ]!9!9z ! s#r*s#r͐! n&k ?͐#! n&k ! s#r! ~#fo##s#r͐|q !`iw#w͐Æ*p`iw#w͐*͐)*~#fos`i^#Vr+sÑ`iw#w͐\?*\s`i^#Vr}o! s͐++)!^ ~#fo! s! n! n}! n&! n&! checksum error real cksum = %x, expected %xss#r! ^#Vr+s)`i! ~#fo̓)~#fo|g}o|C!F!s#r! ^#Vr+s)`i! ~#fo̓)~#fo|g}o|ʇ9DM! * p! s#r͐>®>ʽ>º>! EOF unexpected s!d!d*^#Vr+s!DM! n&9ͩ#! n&.! n&`is#r͐;!9!9DM! w#w! 6#6̓̓ҝ! ^#Vr+s)`i \))))! ^#Vr+s! n&k *s#r`i^#Vr+sw \\ \*s#r*##^#Vr+s !  no end r+s`iw#w͐\?N*͐)*~#fos`i^#Vr+s !9`È!9DM`is#r! s#r͐ Z!d\'! n&!^ y͐b*s#r͐`*s#r! w#w͐͐++͐)*͐)!^ !Ê!s#r! ^#Vr+s]! w#w̓\! ^#Vr+s)`i̓)`i~#fos#r! ^#Vr+så\! s#r! 6#6 s#r! s! s\?! s#r`iw#w͐͐Ґ͐)!^ ͐! n&v?͐#! n&vs#r`! ~#fo̓)~#fo|g}o|ʫ!î!s#r! ^#Vr+s)`i! ~#fo̓)~#fo@|g}o|!!s#r! ^#Vrecord found h !!]90ÿÈ!9DM* $* *c'*s#r\|g}o*s#r\! s{! n}:! n! ^#Vr+s!P! no colon found ]!w͐ Z! s! n}=! n}=! n} ̓Ҷ! ~#fo̓)! ^#Vr+s)`i~#fos#r! w#w̓Ҩ! ~#fo̓)! ~#fo̓)~#fo)!! s#r! ^#Vr+sn`is{.! ! s#r! 4! ^#Vr+sn`is`in&}DU0 X9 OB Cʈ Sʹ !͐~#fo|0! ~#fo##6#6! ~#fo~#foèw(>"!y9DM`i͢! `iͥ!9Þ*(*!9DM͐|ý͐+++| !s{,$͐ ! nѯg?! nѯg! s#r#! ^#Vr+s%! D"͐ ~#fo! s#r! ^#Vr+sn! s{ʫ$! n͐n}‹$! ~#fo~#fo ͐ʤ!͐+?`is#r! ~#fo##~#fo|L!! ~#fo! ~#fo͐ ! ~#fo##~#6!9"ç(!9DM͐n}<"! ^#Vr+sn&""P"&'Ø&I'I+!9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+s)`i~#fos#r! ^#Vr+sF! ^#Vr+s!9ä(!9DM! ~#fo~#foç(((!9DM͐+| ! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 H ! 6H ! 6! ~#fo! n&! ^#Vr+s~#fo! ѯgý! ~#fo##^#Vr+sz<! ~#fo^#Vr+sn&ý!! ~#fo! ~#fo~#fo`is#r!u!ý! ~#fo##6 ^#Vr+së$`in}¨$! ^#Vr+s! nsS$`in}$! 4͐6! ^#Vr+sÅ"`in}$͐n&! ^#Vr+s~#foM"! 4! ^fo͐s#r! ~#fo~#fo͐s#r!!! ~#fo~#fo! ~#fo##6#6! ~#fo! ~#fos#r! 6! ^#Vr+sn! s{I%͐n}²"! n&S%! n&A"|"Å"! n}%#! n! D""! n&S%#! ^#Vr+! n&͐++|,! n&!͐+++|K! n&!! ~#fo##^#Vr+szʄ! ~#fo^#Vr+s! nss#r1!! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+s1!! n} ! 6#6! ^#Vr+s~#fo! s#r͐n}1!͐|1!! ^##6! ~#fo! ~#fos#r! ~#fo^#Vr+sn&ý!9\%&5&Ø&!i9DM! ^#Vr+s~#fo! s#r͐!#Vr+sÅ"! n&S%`in}F%! ^#Vr+s~#fo͐ ͐?s#r! 4Å"! n&S%!9b%\%!9DM͐͐ Ҳ%͐^#!9Ñ "!y9DM! `i͋`i͎!9ü!9DM! ͐͹*!9DM! ~#fo!͐s#rzsF%! 6#6! 6 `i6! ^#Vr+sn! s{*H#`i4! ^#Vr+sn! s! n&G"}Xv#O#Dʈ#Uʮ#S:$C$ %! 6î#!&!! ~#fo! ~#fo~#foʶ!! ~#fo##6#6! ~#fo! ~#fos#r! ~#fo^#Vr+s! nsVr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+s ͐6! ! s#r! n}t!! ^#Vr+s!t!! ^#Vr+s6 M!͐! ^#V s#r! ^#Vr+sn`is{!`in}%!! ! s#r! 6#6! s! s͐n}-`! ^#Vr+s! 4͐n&}}! À!Vr+s͐ ҟ%͐0ç%͐7s!&%͐ ͐͐ ͉͐_%`is͐ ͐͐ )͐_%`in&#&%! !! ~#fo##w#w! ~#fo~#fo0X*m*!9DM͐*! ~#fo͐-s#rzb!! ~#fo! ~#fos#r 6î#! D"-®#! 6#6! ^#Vr+s! w#w! n&! D"J"#|#! n&S%! n&! ^#Vr+sn&J"! &(X)é)!9DM͐.!! ~#fo##~#foK!! ~#fo##~#fo`is#r͐! ~#fo!r+sns{ʝ!! ^#Vr+st!! n}!! ^#Vr+s!!! ^#Vr+s6 ç!!! ^#Vr+s`ins!! ^#Vr+s`ins͐ 9!9DM! n&0ͯ1&! n&9ͯ;&&!9DM`iw#w͐~#fon&8&}ʈ&͐ ?͐^#Vr+snѯg*\!*s*:woʭ*2w&!o * . &7:)~:,"s!"u*|)+* #F#xʟ(~#Ò(#  (  (_ (7:O*o`7:)~`is#rI&͐Ï&!9Þ&'!9DM! n&͛&|&! n&&! n&!9DM! n} ͝&! n} ͝&! n} ͝C:AFT .COM = C9D1 C:AMDHST .C = 2E87 C:AMDHST .FOR = 962A C:FILEXF6 .COM = D164 C:FILEXF96.COM = 0180 C:HEX2AM*s.+! ~)+6*u*+"*"*u#"u*7*:w , FNxg>Goyx+$:,"s!"u*|*uV)*~#-)"*s*uV)#"u*+")7*|DM**ͣ)ڇ)><{)~#  '&!9DM͐~#fon`is'|8'͐^#Vr+s'`in&@'!9U'(Ø&&!9DM! n&O'! sL'|ʍ'! D .COM = 2B1C x{) ><)~+ x—)|}ï)T+7:,*ͬ):*)}|2q *):qwn&sõ'! n&R'}ʰ'! n&sõ'!! n! n&+'!'! n&!9DM! n&aͯ (! n&ZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyO)! {w7,2q*&:q):P*=P*=r:qo& !\&!v*X**7*pzͯ(H('!9DM! n&(|ͣD(! n&(|ͣ!9DM! n&Aͯs(! n&Zͯ 6   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L