File: DECODE.LS of Disk: V50/Source/Source-Listing-PAL-1
(Source file text)
/ OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 1 / OS/8 DECODING PROGRAM / LAST EDIT: 08-JUL-1992 22:00:00 CJL / PROGRAM TO DECODE OS/8 FILES FROM "PRINTABLE" ASCII FORMAT TO BINARY-IMAGE / FORMAT. INTERMEDIATE "ASCII" CONVERSION SHOULD BE HARMLESS AS LONG AS ALL / PRINTING DATA CHARACTERS ARE NOT MODIFIED. / DISTRIBUTED BY CUCCA AS "K12DEC.PAL" AS PART OF THE CUCCA KERMIT-12 PACKAGE. / WRITTEN BY: / CHARLES LASNER (CJL) / CLA SYSTEMS / 72-55 METROPOLITAN AVENUE / MIDDLE VILLAGE, NEW YORK 11379-2107 / (718) 894-6499 / USAGE: / THIS PROGRAM OPERATES ON "PRINTABLE" ASCII FILES WHICH HAVE BEEN CREATED BY / ENCODING THE CONTENTS OF ARBITRARY (BINARY) FILES. THE ENCODING FORMAT ALLOWS / FOR SOME INNOCUOUS CONTENT MODIFICATION SUCH AS EXTRANEOUS WHITE SPACE AND / EXTRA <CR>/<LF> PAIRS, BUT RIGOROUSLY VALIDATES CERTAIN ASPECTS OF THE FORMAT, / SUCH AS A TRAILING CHECKSUM. / CERTAIN IMBEDDED COMMANDS ARE USED SUCH AS (REMARK .........) WHICH ALLOWS FOR / COMMENTARY LINES WITHIN THE FILE FOR IDENTIFICATION PURPOSES. THE (FILE ) AND / (END ) COMMANDS CONTAIN THE SUGGESTED FILENAME FOR THE DESCENDANT DECODED / FILE. / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 2 / WHEN CREATING THE DESCENDANT DECODED FILE, THE USER MAY SPECIFY EITHER THE / IMBEDDED FILENAME OR AN ALTERNATE FILENAME ON EITHER THE DEFAULT (DSK:) DEVICE / OR A SPECIFIED DEVICE: / .RUN DEV DECODE INVOKE PROGRAM. / *INPUT INPUT IS DECODED INTO IMBEDDED NAME ON DSK: (DEFAULT). / *DEV:OUTPUT.EX<INPUT INPUT IS DECODED INTO OUTPUT.EX ON DEVICE DEV:. / *DEV:<INPUT INPUT IS DECODED INTO IMBEDDED NAME ON DEVICE DEV:. / *DEV:<INPUT=NNNN/I **** SPECIAL IMAGE TRANSFER MODE **** INPUT IS DECODED / INTO RECORD 0000-[NNNN-1] ON DEVICE DEV:. THE =NNNN / VALUE SHOULD BE CAREFULLY CHOSEN LARGE ENOUGH TO WRITE / ALL DATA RECORDS, BUT NEED NOT BE STATED EXACTLY. / (THE ENCODE PROGRAM REQUIRES PRECISE STATEMENT OF THE / LENGTH IN IMAGE TRANSFER ENCODING MODE. **** NOTE / **** THIS METHOD VIOLATES ALL OS/8 DEVICE STRUCTURE / AND IS MEANT FOR TRANSFER OF COMPLETE DEVICE IMAGES / ONLY; USE WITH CARE! / *DEV:<INPUT=NNNN/I/1 **** SPECIAL IMAGE TRANSFER MODE **** SAME AS REGULAR / IMAGE MODE EXCEPT ONLY THE FIRST HALF OF THE DATA IS / USED. NOTE THAT THE =NNNN VALUE MUST BE GIVEN EXACTLY / BECAUSE IT IS USED TO CALCULATE THE APPROX. 1/2 VALUE / ACTUALLY USED IN THIS HALF OF THE OVERALL TRANSFER. / THIS MODE SHOULD BE USED WITH FILES CREATED FOR THE / EXPRESS PURPOSE OF TRANSMISSION BY HALVES ONLY; USE / WITH CARE! / *DEV:<INPUT=NNNN/I/2 **** SPECIAL IMAGE TRANSFER MODE **** SAME AS REGULAR / IMAGE MODE EXCEPT ONLY THE SECOND HALF OF THE DATA IS / USED. NOTE THAT THE =NNNN VALUE MUST BE GIVEN EXACTLY / BECAUSE IT IS USED TO CALCULATE THE STARTING RECORD OF / THE APPROX. 1/2 VALUE ACTUALLY USED IN THIS HALF OF / THE OVERALL TRANSFER. THIS MODE SHOULD BE USED WITH / FILES CREATED FOR THE EXPRESS PURPOSE OF TRANSMISSION / BY HALVES ONLY; USE WITH CARE! NOTE THAT THERE MUST / BE TWO FILES CREATED, ONE USING /I/1 AND THE OTHER / USING /I/2 TO COMPLETELY TRANSFER A DEVICE IMAGE / UNLESS /I IS USED ALONE! / *OUTPUT.EX<INPUT$ INPUT IS DECODED INTO OUTPUT.EX ON DSK: (DEFAULT). / THE <ESC> CHARACTER WAS USED TO TERMINATE THE LINE / (THIS IS SIGNIFIED BY $). THIS CAUSES PROGRAM EXIT. / . PROGRAM EXITS NORMALLY. / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 3 / INPUT FILE ASSUMES .EN EXTENSION; THERE IS NO ASSUMED OUTPUT EXTENSION. / IMAGE TRANSFER MODE DOESN'T USE OUTPUT FILENAMES, AS THE TRANSFER DESTROYS THE / OS/8 FILE STRUCTURE (POSSIBLY PRESENT) ON THE DEVICE. / PROGRAM EXIT IS THE NORMAL OS/8 METHOD OF EITHER PRESSING <^C> ON THE CONSOLE / KEYBOARD DURING THE COMMAND, OR ENDING THE COMMAND INPUT LINE WITH AN <ESC> / CHARACTER. / THIS PROGRAM SUPPORTS A PROPER SUBSET OF THE ASCII ENCODING SCHEME DISCUSSED / BY CHARLES LASNER AND FRANK DA CRUZ. THE SCHEME USED IS FIVE-BIT ENCODING / WITH COMPRESSION, (AS OPPOSED TO SIX-BIT WITHOUT COMPRESSION AS USED IN PRIOR / VERSIONS). / RESTRICTIONS: / A) SUPPORTS ONLY ONE DECODABLE FILE PER ENCODED FILE. / B) IGNORES ALL (END ) COMMANDS. / C) <CR> <LF> < ALWAYS INDICATES ENCODED DATA LINES; NO CHECK IS MADE FOR / WHETHER THE > IS ON THE SAME LINE AS THE <. / D) PDP-8 GENERATED CHECKSUM DATA MUST BE THE FINAL DATA IN THE FILE IN / THE PROPER FORMAT: ZCCCCCCCCCCCC WHERE CCCCCCCCCCCC IS THE / TWELVE-CHARACTER PDP-8 CHECKSUM DATA. / IF THE ENCODED FILE IS PASSED THROUGH ANY INTERMEDIARY PROCESS THAT MODIFIES / THE CONTENTS IN A WAY THAT INTERFERES WITH ANY OF THE ABOVE, THIS DECODING / PROGRAM WILL FAIL. IT IS THE USER'S RESPONSIBILITY TO EDIT OUT UNWANTED / CHANGES TO THE ENCODED FILE. ALL OTHER ASPECTS OF THE PROTOCOL ARE OBEYED, / SUCH AS IMBEDDED <FF>, EXTRA <CR> <LF>, OR TRAILING SPACES HAVE NO EFFECT ON / THE RELIABILITY OF THE DECODING PROCESS, ETC. / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 4 / ERROR MESSAGES. / ANY MESSAGE PRINTED IS A FATAL ERROR MESSAGE. ALL MESSAGES ARE THE STANDARD / OS/8 "USER" ERROR MESSAGES OF THE FORM: USER ERROR X AT AAAAA WHERE X IS THE / ERROR NUMBER AND AAAAA IS THE PROGRAM ADDRESS WHERE THE ERROR WAS DETECTED. / THE FOLLOWING USER ERRORS ARE DEFINED: / ERROR NUMBER PROBABLE CAUSE / 0 TOO MANY OUTPUT FILES. / 1 NO INPUT FILE OR TOO MANY INPUT FILES. / 2 IMBEDDED OUTPUT FILENAME FORMAT ERROR. / 3 I/O ERROR WHILE LOCATING IMBEDDED OUTPUT FILENAME. / 4 ERROR WHILE FETCHING FILE HANDLER. / 5 ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE. / 6 OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE. / 7 ERROR WHILE CLOSING THE OUTPUT FILE. / 8 I/O ERROR WHILE DECODING FILE DATA OR BAD DATA. / ASSEMBLY INSTRUCTIONS. / IT IS ASSUMED THE SOURCE FILE K12DEC.PAL HAS BEEN MOVED AND RENAMED TO / DSK:DECODE.PA. / .PAL DECODE<DECODE ASSEMBLE SOURCE PROGRAM / .LOAD DECODE LOAD THE BINARY FILE / .SAVE DEV DECODE=0 SAVE THE CORE-IMAGE FILE / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 5 / DEFINITIONS. 0004 CLOSE= 4 /CLOSE OUTPUT FILE 0005 DECODE= 5 /CALL COMMAND DECODER 0003 ENTER= 3 /ENTER TENTATIVE FILE 7646 EQUWRD= 7646 /EQUALS PARAMETER HERE IN TABLE FIELD 0001 FETCH= 1 /FETCH HANDLER 7200 IHNDBUF=7200 /INPUT HANDLER BUFFER 6200 INBUFFE=6200 /INPUT BUFFER 7617 INFILE= 7617 /INPUT FILE INFORMATION HERE 0012 INQUIRE=12 /INQUIRE ABOUT HANDLER 7201 NL0001= CLA IAC /LOAD AC WITH 0001 7326 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 7330 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 7344 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 7240 NL7777= CLA CMA /LOAD AC WITH 7777 6600 OHNDBUF=6600 /OUTPUT HANDLER BUFFER 5600 OUTBUFF=5600 /OUTPUT BUFFER 7600 OUTFILE=7600 /OUTPUT FILE INFORMATION HERE 0000 PRGFLD= 00 /PROGRAM FIELD 0013 RESET= 13 /RESET SYSTEM TABLES 7600 SBOOT= 7600 /MONITOR EXIT 7643 SWAL= 7643 /A-/L SWITCHES HERE IN TABLE FIELD 7645 SWY9= 7645 /Y-/9 SWITCHES HERE IN TABLE FIELD 0010 TBLFLD= 10 /COMMAND DECODER TABLE FIELD 7642 TERMWRD=7642 /TERMINATOR WORD 0007 USERROR=7 /USER SIGNALLED ERROR 7700 USR= 7700 /USR ENTRY POINT 0010 USRFLD= 10 /USR FIELD 0105 WIDTH= 107-2 /69 DATA CHARACTERS PER LINE (TOTAL 71) 4000 WRITE= 4000 /I/O WRITE BIT / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 6 0000 *0 /START AT THE BEGINNING 0010 *10 /DEFINE AUTO-INDEX AREA 000010 0000 XR1, .-. /AUTO-INDEX NUMBER 1 000011 0000 XR2, .-. /AUTO-INDEX NUMBER 2 0020 *20 /GET PAST AUTO-INDEX AREA 000020 0000 BUFPTR, .-. /OUTPUT BUFFER POINTER 000021 0000 CCNT, .-. /CHECKSUM COUNTER 000022 0000 CHKSUM, ZBLOCK 5 /CHECKSUM TEMPORARY 000027 0000 CHRCNT, .-. /CHARACTER COUNTER 000030 0000 CSUMTMP,.-. /CHECKSUM TEMPORARY 000031 0000 DANGCNT,.-. /DANGER COUNT 000032 0000 DATCNT, .-. /DATA COUNTER 000033 0000 DSTATE, .-. /DATA STATE VARIABLE 000034 0000 IDNUMBE,.-. /INPUT DEVICE NUMBER 000035 0000 IMSW, .-. /IMAGE-MODE SWITCH 000036 0000 INITFLA,.-. /INITIALIZE INPUT FLAG 000037 0000 INPUT, .-. /INPUT HANDLER POINTER 000040 0000 INRECOR,.-. /INPUT RECORD 000041 0000 FCHKSUM,ZBLOCK 5 /FILE CHECKSUM 000046 0000 FNAME, ZBLOCK 4 /OUTPUT FILENAME 000052 0000 GWTMP1, .-. /GETWORD TEMPORARY 000053 0000 GWTMP2, .-. /GETWORD TEMPORARY 000054 0000 GWVALUE,.-. /LATEST WORD VALUE 000055 0000 ODNUMBE,.-. /OUTPUT DEVICE NUMBER 000056 0000 OUTPUT, .-. /OUTPUT HANDLER POINTER 000057 0000 OUTRECO,.-. /OUTPUT RECORD 000060 0000 PUTEMP, .-. /OUTPUT TEMPORARY 000061 0000 PUTPTR, .-. /OUTPUT POINTER 000062 0000 THIRD, .-. /THIRD BYTE TEMPORARY / STATE TABLE. 000063 1215 P, SCANIT /0000 LOOKING FOR "(" OR "<" 000064 1225 FNDCOMMAND /0001 FOUND "(" AND NOW LOOKING FOR ")" 000065 1232 FNDCEND /0002 FOUND ")" AND NOW LOOKING FOR <CR> 000066 1237 FNDCR /0003 FOUND <CR> AND NOW LOOKING FOR <LF> TO RESET 000067 1251 STORDATA /4000 FOUND "<" AND PROCESSING 69 DATA BYTES 000070 1300 ENDATA /4001 FOUND 69 DATA BYTES AND NOW LOOKING FOR ">" 000071 1305 ENDCR /4002 FOUND ">" AND NOW LOOKING FOR <CR> 000072 1237 FNDCR/ENDLF /4003 FOUND <CR> AND NOW LOOKING FOR <LF> TO RESET / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 7 0200 PAGE /START AT THE USUAL PLACE 000200 7000 BEGIN, NOP /HERE IN CASE WE'RE CHAINED TO 000201 7200 CLA /CLEAN UP 000202 6212 START, CIF USRFLD /GOTO USR FIELD 000203 4577 JMS I [USR] /CALL USR ROUTINE 000204 0005 DECODE /WANT COMMAND DECODER 000205 0516 "E^100+"N-300 /.EN IS DEFAULT EXTENSION 000206 6211 CDF TBLFLD /GOTO TABLE FIELD 000207 1777 TAD I (TERMWRD) /GET TERMINATOR WORD 000210 7710 SPA CLA /SKIP IF <CR> TERMINATED THE LINE 000211 3324 DCA EXITZAP /ELSE CAUSE EXIT LATER 000212 3035 DCA IMSW /CLEAR IMAGE-MODE; MIGHT GET SET LATER THOUGH 000213 1776 TAD I (OUTFILE) /GET FIRST OUTPUT FILE DEVICE WORD 000214 7450 SNA /SKIP IF FIRST OUTPUT FILE PRESENT 000215 5326 JMP TSTMORE /JUMP IF NOT THERE 000216 0176 AND [17] /JUST DEVICE BITS 000217 3055 ODNULL, DCA ODNUMBER /SAVE OUTPUT DEVICE NUMBER 000220 1775 TAD I (OUTFILE+5) /GET SECOND OUTPUT FILE DEVICE WORD 000221 7450 SNA /SKIP IF THERE 000222 1774 TAD I (OUTFILE+12) /ELSE GET THIRD OUTPUT FILE DEVICE WORD 000223 7640 SZA CLA /SKIP IF BOTH NOT PRESENT 000224 5773 JMP I (OUTERR) /ELSE COMPLAIN 000225 1772 TAD I (INFILE) /GET FIRST INPUT FILE DEVICE WORD 000226 7450 SNA /SKIP IF PRESENT 000227 5771 JMP I (INERR) /JUMP IF NOT 000230 0176 AND [17] /JUST DEVICE BITS 000231 3034 DCA IDNUMBER /SAVE INPUT DEVICE NUMBER 000232 1770 TAD I (INFILE+2) /GET SECOND INPUT FILE DEVICE WORD 000233 7640 SZA CLA /SKIP IF ONLY ONE INPUT FILE 000234 5771 JMP I (INERR) /ELSE COMPLAIN 000235 1767 TAD I (INFILE+1) /GET FIRST INPUT FILE STARTING RECORD 000236 3040 DCA INRECORD /SET IT UP 000237 6201 CDF PRGFLD /BACK TO OUR FIELD 000240 6212 CIF USRFLD /GOTO USR FIELD 000241 4577 JMS I [USR] /CALL USR ROUTINE 000242 0013 RESET /RESET SYSTEM TABLES / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 8 000243 1366 TAD (IHNDBUFFER+1) /GET INPUT BUFFER POINTER+TWO-PAGE BIT 000244 3251 DCA IHPTR /STORE IN-LINE 000245 1034 TAD IDNUMBER /GET INPUT DEVICE NUMBER 000246 6212 CIF USRFLD /GOTO USR FIELD 000247 4577 JMS I [USR] /CALL USR ROUTINE 000250 0001 FETCH /FETCH HANDLER 000251 0000 IHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT 000252 5765 JMP I (FERROR) /FETCH ERROR 000253 1251 TAD IHPTR /GET RETURNED ADDRESS 000254 3037 DCA INPUT /STORE AS INPUT HANDLER ADDRESS 000255 4764 JMS I (GEOFILE) /GET OUTPUT FILE INFORMATION 000256 1363 TAD (OHNDBUFFER+1) /GET BUFFER POINTER+TWO-PAGE BIT 000257 3264 DCA OHPTR /STORE IN-LINE 000260 1055 TAD ODNUMBER /GET OUTPUT DEVICE NUMBER 000261 6212 CIF USRFLD /GOTO USR FIELD 000262 4577 JMS I [USR] /CALL USR ROUTINE 000263 0001 FETCH /FETCH HANDLER 000264 0000 OHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT 000265 5765 JMP I (FERROR) /FETCH ERROR 000266 1264 TAD OHPTR /GET RETURNED ADDRESS 000267 3056 DCA OUTPUT /STORE AS OUTPUT HANDLER ADDRESS 000270 1035 TAD IMSW /GET IMAGE-MODE SWITCH 000271 7650 SNA CLA /SKIP IF SET 000272 5305 JMP NOIMAGE /JUMP IF NOT / IF /2 IS SET, THE DATA STARTS HALF-WAY INTO THE IMAGE. OTHER IMAGE MODES / START AT RECORD 0000. 000273 6211 CDF TBLFLD /GOTO TABLE FIELD 000274 1575 TAD I [SWY9] /GET /Y-/9 SWITCHES 000275 0362 AND (200) /JUST /2 SWITCH 000276 7650 SNA CLA /SKIP IF SET 000277 5302 JMP IMAGE1 /JUMP IF /1 OR NEITHER /1, /2 SET 000300 1574 TAD I [EQUWRD] /GET EQUALS PARAMETER 000301 7110 CLL RAR /%2 000302 3057 IMAGE1, DCA OUTRECORD /STORE STARTING OUTPUT RECORD 000303 6201 CDF PRGFLD /BACK TO OUR FIELD 000304 7410 SKP /DON'T ENTER FILE NAME 000305 4761 NOIMAGE,JMS I (FENTER) /ENTER THE TENTATIVE FILE NAME 000306 3033 DCA DSTATE /SET INITIAL DATA STATE 000307 4760 JMS I (CLRCHKSUM) /CLEAR OUT CHECKSUM 000310 4757 JMS I (DECODIT) /GO DO THE ACTUAL DECODING 000311 5756 JMP I (PROCERR) /ERROR WHILE DECODING 000312 1035 TAD IMSW /GET IMAGE-MODE SWITCH 000313 7640 SZA CLA /SKIP IF CLEAR 000314 5324 JMP EXITZAP /JUMP IF SET 000315 1055 TAD ODNUMBER /GET OUTPUT DEVICE NUMBER 000316 6212 CIF USRFLD /GOTO USR FIELD 000317 4577 JMS I [USR] /CALL USR ROUTINE 000320 0004 CLOSE /CLOSE OUTPUT FILE 000321 0046 FNAME /POINTER TO FILENAME 000322 0000 OUTCNT, .-. /WILL BE ACTUAL COUNT 000323 5755 JMP I (CLSERR) /CLOSE ERROR 000324 5202 EXITZAP,JMP START /**** <ESC> TERMINATION **** 0000 000325 5776 JMP I (SBOOT) /EXIT TO MONITOR / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 9 / COMES HERE TO TEST FOR NULL LINE. 000326 1775 TSTMORE,TAD I (OUTFILE+5) /GET SECOND OUTPUT FILE DEVICE WORD 000327 7450 SNA /SKIP IF PRESENT 000330 1774 TAD I (OUTFILE+12) /ELSE GET THIRD OUTPUT FILE DEVICE WORD 000331 7640 SZA CLA /SKIP IF NO OUTPUT FILES 000332 5773 JMP I (OUTERR) /ELSE COMPLAIN OF SECOND/THIRD (WITHOUT FIRST) OUTPUT 000333 1772 TAD I (INFILE) /GET FIRST OUTPUT FILE DEVICE WORD 000334 7640 SZA CLA /SKIP IF NO INPUT FILES 000335 5217 JMP ODNULL /JUMP IF INPUT WITHOUT OUTPUT 000336 6201 CDF PRGFLD /BACK TO OUR FIELD 000337 5324 JMP EXITZAP /MIGHT BE LAST TIME, SO GO THERE FIRST 000355 0402 000356 0400 000357 0423 000360 1312 000361 1721 000362 0200 000363 6601 000364 1400 000365 0411 000366 7201 000367 7620 000370 7621 000371 0414 000372 7617 000373 0415 000374 7612 000375 7605 000376 7600 000377 7642 0400 PAGE / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 10 / ERROR WHILE PROCESSING INPUT FILE. 000400 7326 PROCERR,NL0002 /SET INCREMENT 000401 7410 SKP /DON'T USE NEXT / ERROR WHILE CLOSING THE OUTPUT FILE. 000402 7201 CLSERR, NL0001 /SET INCREMENT 000403 7410 SKP /DON'T CLEAR IT / OUTPUT FILE TOO LARGE ERROR. 000404 7200 SIZERR, CLA /CLEAN UP 000405 1173 TAD [3] /SET INCREMENT 000406 7410 SKP /DON'T USE NEXT / ENTER ERROR. 000407 7326 ENTERR, NL0002 /SET INCREMENT 000410 7410 SKP /DON'T USE NEXT / HANDLER FETCH ERROR. 000411 7201 FERROR, NL0001 /SET INCREMENT / I/O ERROR WHILE PROCESSING (FILE ) COMMAND. 000412 7001 NIOERR, IAC /SET INCREMENT / FORMAT ERROR WHILE PROCESSING (FILE ) COMMAND. 000413 7001 CHARERR,IAC /SET INCREMENT / INPUT FILESPEC ERROR. 000414 7001 INERR, IAC /SET INCREMENT / OUTPUT FILESPEC ERROR. 000415 3222 OUTERR, DCA ERRNUMBER /STORE ERROR NUMBER 000416 6201 CDF PRGFLD /ENSURE OUR FIELD 000417 6212 CIF USRFLD /GOTO USR FIELD 000420 4577 JMS I [USR] /CALL USR ROUTINE 000421 0007 USERROR /USER ERROR 000422 0000 ERRNUMB,.-. /WILL BE PASSED ERROR NUMBER / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 11 000423 0000 DECODIT,.-. /DECODING ROUTINE 000424 1057 TAD OUTRECORD /GET STARTING RECORD OF TENTATIVE FILE 000425 3252 DCA PUTRECORD /STORE IN-LINE 000426 3777 DCA I (OUTCNT) /CLEAR ACTUAL FILE LENGTH 000427 7240 NL7777 /SETUP THE 000430 3036 DCA INITFLAG /INITIALIZE FLAG 000431 1376 TAD (GWLOOP) /INITIALIZE THE 000432 3775 DCA I (GWNEXT) /DECODE PACK ROUTINE 000433 1251 PUTNEWR,TAD POUTBUFFER/(OUTBUFFER) /SETUP THE 000434 3061 DCA PUTPTR /OUTPUT BUFFER POINTER 000435 4774 PUTLOOP,JMS I (GETWORD) /GET A WORD 000436 3461 DCA I PUTPTR /STORE IT 000437 2061 ISZ PUTPTR /BUMP TO NEXT 000440 1061 TAD PUTPTR /GET THE POINTER 000441 1373 TAD (-2^200-OUTBUFFER) /COMPARE TO LIMIT 000442 7640 SZA CLA /SKIP IF AT END 000443 5235 JMP PUTLOOP /KEEP GOING 000444 2031 ISZ DANGCNT /TOO MANY RECORDS? 000445 7410 SKP /SKIP IF NOT 000446 5772 JMP I (SIZERROR) /NOT ENOUGH SPACE AVAILABLE 000447 4456 JMS I OUTPUT /CALL OUTPUT HANDLER 000450 4200 2^100+WRITE /WRITE LATEST RECORD 000451 5600 POUTBUF,OUTBUFFER /OUTPUT BUFFER ADDRESS 000452 0000 PUTRECO,.-. /WILL BE LATEST RECORD NUMBER 000453 5623 DECERR, JMP I DECODIT /I/O ERROR 000454 2252 ISZ PUTRECORD /BUMP TO NEXT RECORD 000455 7000 NOP /JUST IN CASE 000456 2777 ISZ I (OUTCNT) /BUMP ACTUAL LENGTH 000457 5233 JMP PUTNEWRECORD /GO DO ANOTHER ONE / GOOD RETURN HERE. 000460 2223 DECBMP, ISZ DECODIT /BUMP TO GOOD RETURN 000461 5623 JMP I DECODIT /RETURN / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 12 / OS/8 FILE UNPACK ROUTINE. 000462 0000 GETBYTE,.-. /GET A BYTE ROUTINE 000463 7650 SNA CLA /INITIALIZING? 000464 5725 JMP I PUTC /NO, GO GET NEXT BYTE 000465 1040 TAD INRECORD /GET STARTING RECORD OF INPUT FILE 000466 3272 DCA GETRECORD /STORE IN-LINE 000467 4437 GETNEWR,JMS I INPUT /CALL I/O HANDLER 000470 0200 2^100 /READ TWO PAGES INTO BUFFER 000471 6200 INBUFFER /BUFFER ADDRESS 000472 0000 GETRECO,.-. /WILL BE LATEST RECORD NUMBER 000473 5662 JMP I GETBYTE /INPUT ERROR! 000474 1371 TAD (INBUFFER) /SETUP THE 000475 3020 DCA BUFPTR /BUFFER POINTER 000476 3062 GETLOOP,DCA THIRD /CLEAR THIRD BYTE NOW 000477 4311 JMS PUTONE /OBTAIN AND SEND BACK FIRST BYTE 000500 4311 JMS PUTONE /OBTAIN AND SEND BACK SECOND BYTE 000501 1062 TAD THIRD /GET THIRD BYTE 000502 4325 JMS PUTC /SEND IT BACK 000503 1020 TAD BUFPTR /GET THE POINTER 000504 1370 TAD (-2^200-INBUFFER) /COMPARE TO LIMIT 000505 7640 SZA CLA /SKIP IF AT END 000506 5276 JMP GETLOOP /KEEP GOING 000507 2272 ISZ GETRECORD /BUMP TO NEXT RECORD 000510 5267 JMP GETNEWRECORD /GO DO ANOTHER ONE 000511 0000 PUTONE, .-. /SEND BACK A BYTE ROUTINE 000512 1420 TAD I BUFPTR /GET LATEST WORD 000513 0367 AND (7400) /JUST THIRD-BYTE NYBBLE 000514 7104 CLL RAL /MOVE UP 000515 1062 TAD THIRD /GET OLD NYBBLE (IF ANY) 000516 7006 RTL;RTL /MOVE UP NYBBLE BITS 000517 7006 000520 3062 DCA THIRD /SAVE FOR NEXT TIME 000521 1420 TAD I BUFPTR /GET LATEST WORD AGAIN 000522 4325 JMS PUTC /SEND BACK CURRENT BYTE 000523 2020 ISZ BUFPTR /BUMP TO NEXT WORD 000524 5711 JMP I PUTONE /RETURN 000525 0000 PUTC, .-. /SEND BACK LATEST BYTE ROUTINE 000526 0366 AND (177) /KEEP ONLY GOOD BITS 000527 1365 TAD (-"Z!300) /COMPARE TO <^Z> 000530 7450 SNA /SKIP IF NOT ASCII <EOF> 000531 5334 JMP GETEOF /JUMP IF ASCII MODE <EOF> 000532 1364 TAD ("Z&37) /RESTORE THE CHARACTER 000533 2262 ISZ GETBYTE /BUMP PAST <EOF> RETURN 000534 2262 GETEOF, ISZ GETBYTE /BUMP PAST I/O ERROR RETURN 000535 5662 JMP I GETBYTE /RETURN TO MAIN CALLER / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 13 000564 0032 000565 7746 000566 0177 000567 7400 000570 1200 000571 6200 000572 0404 000573 1600 000574 0600 000575 0602 000576 0637 000577 0322 0600 PAGE / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 14 / GET A DECODED WORD ROUTINE. 000600 0000 GETWORD,.-. /GET A WORD ROUTINE 000601 5602 JMP I GWNEXT /GO WHERE YOU SHOULD GO 000602 0000 GWNEXT, .-. /EXIT ROUTINE 000603 7420 SNL /SKIP IF CHECKSUM PREVENTED 000604 4777 JMS I (DOCHECK) /ELSE DO CHECKSUM 000605 5600 JMP I GETWORD /RETURN TO MAIN CALLER / COMES HERE TO PROCESSED COMPRESSED DATA. 000606 4776 GWX, JMS I (GETCHR) /GET NEXT CHARACTER 000607 4775 JMS I (GWORD0) /GET 12-BIT WORD 000610 4777 JMS I (DOCHECK) /INCLUDE IN CHECKSUM 000611 3054 DCA GWVALUE /SAVE AS COMPRESSED VALUE 000612 1053 TAD GWTMP2 /GET LATEST CHARACTER 000613 0172 AND [7] /ISOLATE BITS[9-11] 000614 7112 CLL RTR;RTR /BITS[9-11] => AC[0-2] 000615 7012 000616 3052 DCA GWTMP1 /SAVE FOR NOW 000617 4322 JMS GBIHEXBINARY /GET A CHARACTER 000620 7106 CLL RTL;RTL /BITS[7-11] => AC[3-7] 000621 7006 000622 1052 TAD GWTMP1 /ADD ON BITS[0-2] 000623 4777 JMS I (DOCHECK) /INCLUDE IN CHECKSUM 000624 7112 CLL RTR;RTR /BITS[0-7] => AC[4-11] 000625 7012 000626 7450 SNA /SKIP IF NOT 256 000627 1171 TAD [400] /000 => 256 000630 7041 CIA /INVERT FOR COUNTING 000631 3052 DCA GWTMP1 /SAVE AS REPEAT COUNTER 000632 1054 GWXLUP, TAD GWVALUE /GET THE VALUE 000633 7120 STL /PREVENT CHECKSUMMING IT 000634 4202 JMS GWNEXT /RETURN IT TO THEM 000635 2052 ISZ GWTMP1 /DONE ENOUGH? 000636 5232 JMP GWXLUP /NO, KEEP GOING / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 15 / COMES HERE TO INITIATE ANOTHER DATA GROUP. 000637 4776 GWLOOP, JMS I (GETCHR) /GET LATEST FILE CHARACTER 000640 1374 TAD (-"Z!200) /COMPARE TO EOF INDICATOR 000641 7450 SNA /SKIP IF OTHER 000642 5262 JMP GWZ /JUMP IF IT MATCHES 000643 1373 TAD (-"X+"Z) /COMPARE TO COMPRESSION INDICATOR 000644 7650 SNA CLA /SKIP IF OTHER 000645 5206 JMP GWX /JUMP IF IT MATCHES 000646 1060 TAD PUTEMP /GET THE CHARACTER BACK 000647 4775 JMS I (GWORD0) /GET A 12-BIT WORD 000650 4202 JMS GWNEXT /RETURN IT 000651 4772 JMS I (GWORD1) /GET NEXT 12-BIT WORD 000652 4202 JMS GWNEXT /RETURN IT 000653 4771 JMS I (GWORD2) /GET NEXT 12-BIT WORD 000654 4202 JMS GWNEXT /RETURN IT 000655 4770 JMS I (GWORD3) /GET NEXT 12-BIT WORD 000656 4202 JMS GWNEXT /RETURN IT 000657 4767 JMS I (GWORD4) /GET NEXT 12-BIT WORD 000660 4202 JMS GWNEXT /RETURN IT 000661 5237 JMP GWLOOP /KEEP GOING / COMES HERE WHEN EOF INDICATOR FOUND. 000662 1366 GWZ, TAD (FCHKSUM-1) /SETUP THE 000663 3010 DCA XR1 /CHECKSUM POINTER 000664 4776 JMS I (GETCHR) /GET NEXT CHARACTER 000665 4775 JMS I (GWORD0) /GET A 12-BIT WORD 000666 3410 DCA I XR1 /STORE IT 000667 4772 JMS I (GWORD1) /GET NEXT WORD 000670 3410 DCA I XR1 /STORE IT 000671 4771 JMS I (GWORD2) /GET NEXT WORD 000672 3410 DCA I XR1 /STORE IT 000673 4770 JMS I (GWORD3) /GET NEXT WORD 000674 3410 DCA I XR1 /STORE IT 000675 4767 JMS I (GWORD4) /GET NEXT WORD 000676 3410 DCA I XR1 /STORE IT 000677 1365 TAD (CHKSUM-1) /POINT TO 000700 3010 DCA XR1 /CALCULATED CHECKSUM 000701 1366 TAD (FCHKSUM-1) /POINT TO 000702 3011 DCA XR2 /FILE CHECKSUM 000703 1170 TAD [-5] /SETUP THE 000704 3021 DCA CCNT /COMPARE COUNT 000705 7100 CLL /CLEAR LINK FOR TEST 000706 7004 GWCMPLP,RAL /GET CARRY 000707 1410 TAD I XR1 /GET A CALCULATED WORD 000710 1411 TAD I XR2 /COMPARE TO FILE WORD 000711 7640 SZA CLA /SKIP IF OK 000712 5764 JMP I (DECERR) /ELSE COMPLAIN 000713 2021 ISZ CCNT /DONE ALL? 000714 5306 JMP GWCMPLP /NO, KEEP GOING / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 16 / THE CHECKSUM IS OK, CHECK IF FILE ENDED IN A PLAUSIBLE PLACE. 000715 1061 TAD PUTPTR /GET OUTPUT POINTER 000716 1363 TAD (-OUTBUFFER-4) /COMPARE TO LIMIT 000717 7740 SMA SZA CLA /SKIP IF GOOD VALUE 000720 5764 JMP I (DECERROR) /JUMP IF NOT / THE FILE ENDED OK, THERE WERE POSSIBLY A FEW CHARACTERS LEFTOVER BECAUSE OF / ALIGNMENT CONSIDERATIONS. THEY SHOULD BE IGNORED SINCE OS/8 FILES ARE / MULTIPLES OF WHOLE RECORDS. 000721 5762 JMP I (DECBMP) /RETURN WITH ALL OK 000722 0000 GBIHEXB,.-. /GET BINARY VALUE OF BIHEXADECIMAL CHARACTER 000723 7200 CLA /CLEAN UP 000724 1322 TAD GBIHEXBINARY /GET OUR CALLER 000725 3330 DCA BIHEXBINARY /MAKE IT THEIRS 000726 4776 JMS I (GETCHR) /GET A CHARACTER 000727 7410 SKP /DON'T EXECUTE HEADER! 000730 0000 BIHEXBI,.-. /CONVERT BIHEXADECIMAL TO BINARY 000731 1361 TAD (-"A!200) /COMPARE TO ALPHABETIC LIMIT 000732 7500 SMA /SKIP IF LESS 000733 1360 TAD ("9+1-"A) /ELSE ADD ON ALPHABETIC OFFSET 000734 1365 TAD (-"0+"A) /MAKE IT BINARY, NOT ASCII 000735 3053 DCA GWTMP2 /SAVE IT 000736 1053 TAD GWTMP2 /GET IT BACK 000737 5730 JMP I BIHEXBINARY /RETURN 000760 7771 000761 7677 000762 0460 000763 2174 000764 0453 000765 0021 000766 0040 000767 1110 000770 1067 000771 1041 000772 1021 000773 0002 000774 7646 000775 1000 000776 1200 000777 1130 1000 PAGE / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 17 / GET WORD[0] ROUTINE. AC MUST ALREADY CONTAIN THE FIRST BI-HEXADECIMAL / CHARACTER. 001000 0000 GWORD0, .-. /GET 12-BIT WORD[0] 001001 4777 JMS I (BIHEXBINARY) /CONVERT PASSED VALUE TO BINARY 001002 7112 CLL RTR;RTR;RTR /BITS[7-11] => AC[0-4] 001003 7012 001004 7012 001005 3052 DCA GWTMP1 /SAVE FOR NOW 001006 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001007 7106 CLL RTL /BITS[7-11] => AC[5-9] 001010 1052 TAD GWTMP1 /ADD ON BITS[0-4] 001011 3052 DCA GWTMP1 /SAVE FOR NOW 001012 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001013 7012 RTR;RAR /BITS[7-8] => AC[10-11] 001014 7010 001015 0173 AND [3] /ISOLATE BITS[10-11] 001016 1052 TAD GWTMP1 /ADD ON BITS[0-9] 001017 7100 CLL /CLEAR LINK 001020 5600 JMP I GWORD0 /RETURN / GET WORD[1] ROUTINE. GWORD0 MUST HAVE BEEN CALLED LAST, SO GWTMP2 CONTAINS / THE PREVIOUS CHARACTER. 001021 0000 GWORD1, .-. /GET 12-BIT WORD[1] 001022 1053 TAD GWTMP2 /GET PREVIOUS CHARACTER 001023 0172 AND [7] /ISOLATE BITS[9-11] 001024 7112 CLL RTR;RTR /BITS[9-11] => AC[0-2] 001025 7012 001026 3052 DCA GWTMP1 /SAVE FOR NOW 001027 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001030 7106 CLL RTL;RTL /BITS[7-11] => AC[3-7] 001031 7006 001032 1052 TAD GWTMP1 /ADD ON BITS[0-2] 001033 3052 DCA GWTMP1 /SAVE FOR NOW 001034 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001035 7110 CLL RAR /BITS[7-10] => AC[8-11] 001036 1052 TAD GWTMP1 /ADD ON BITS[0-7] 001037 7100 CLL /CLEAR LINK 001040 5621 JMP I GWORD1 /RETURN / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 18 / GET WORD[2] ROUTINE. GWORD1 MUST HAVE BEEN CALLED LAST, SO GWTMP2 CONTAINS / THE PREVIOUS CHARACTER. 001041 0000 GWORD2, .-. /GET 12-BIT WORD[2] 001042 1053 TAD GWTMP2 /GET PREVIOUS CHARACTER 001043 7010 RAR;CLA RAR /BIT[11] => AC[0] 001044 7210 001045 3052 DCA GWTMP1 /SAVE FOR NOW 001046 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001047 7106 CLL RTL;RTL;RTL /BITS[7-11] => AC[1-5] 001050 7006 001051 7006 001052 1052 TAD GWTMP1 /ADD ON BIT[0] 001053 3052 DCA GWTMP1 /SAVE FOR NOW 001054 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001055 7104 CLL RAL /BITS[7-11] => AC[6-10] 001056 1052 TAD GWTMP1 /ADD ON BITS[0-5] 001057 3052 DCA GWTMP1 /SAVE FOR NOW 001060 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001061 0375 AND (20) /ISOLATE BIT[7] 001062 7112 CLL RTR;RTR /BIT[7] => AC[11] 001063 7012 001064 1052 TAD GWTMP1 /ADD ON BITS[0-10] 001065 7100 CLL /CLEAR LINK 001066 5641 JMP I GWORD2 /RETURN / GET WORD[3] ROUTINE. GWORD2 MUST HAVE BEEN CALLED LAST, SO GWTMP2 CONTAINS / THE PREVIOUS CHARACTER. 001067 0000 GWORD3, .-. /GET 12-BIT WORD[3] 001070 1053 TAD GWTMP2 /GET PREVIOUS CHARACTER 001071 7112 CLL RTR;RTR;RAR /BITS[8-11] => AC[0-3] 001072 7012 001073 7010 001074 3052 DCA GWTMP1 /SAVE FOR NOW 001075 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001076 7106 CLL RTL;RAL /BITS[7-11] => AC[4-8] 001077 7004 001100 1052 TAD GWTMP1 /ADD ON BITS[0-3] 001101 3052 DCA GWTMP1 /SAVE FOR NOW 001102 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001103 7012 RTR /BITS[7-9] => AC[9-11] 001104 0172 AND [7] /ISOLATE BITS[9-11] 001105 1052 TAD GWTMP1 /ADD ON BITS[0-8] 001106 7100 CLL /CLEAR LINK 001107 5667 JMP I GWORD3 /RETURN / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 19 / GET WORD[4] ROUTINE. GWORD3 MUST HAVE BEEN CALLED LAST, SO GWTMP2 CONTAINS / THE PREVIOUS CHARACTER. 001110 0000 GWORD4, .-. /GET 12-BIT WORD[4] 001111 1053 TAD GWTMP2 /GET PREVIOUS CHARACTER 001112 0173 AND [3] /ISOLATE BITS[10-11] 001113 7112 CLL RTR;RAR /BITS[10-11] => AC[0-1] 001114 7010 001115 3052 DCA GWTMP1 /SAVE FOR NOW 001116 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001117 7106 CLL RTL;RTL;RAL /BITS[7-11] => AC[2-6] 001120 7006 001121 7004 001122 1052 TAD GWTMP1 /ADD ON BITS[0-1] 001123 3052 DCA GWTMP1 /SAVE FOR NOW 001124 4776 JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY 001125 1052 TAD GWTMP1 /ADD ON BITS[0-6] TO BITS[7-11] 001126 7100 CLL /CLEAR LINK 001127 5710 JMP I GWORD4 /RETURN 001130 0000 DOCHECK,.-. /CHECKSUM ROUTINE 001131 3030 DCA CSUMTMP /SAVE PASSED VALUE 001132 1374 TAD (CHKSUM-1) /SETUP THE 001133 3010 DCA XR1 /INPUT POINTER 001134 1374 TAD (CHKSUM-1) /SETUP THE 001135 3011 DCA XR2 /OUTPUT POINTER 001136 1170 TAD [-5] /SETUP THE 001137 3021 DCA CCNT /SUM COUNT 001140 1030 TAD CSUMTMP /GET THE VALUE 001141 7110 CLL RAR /ADJUST FOR OPENING ITERATION 001142 7004 CSUMLUP,RAL /GET CARRY 001143 1410 TAD I XR1 /ADD ON A WORD 001144 3411 DCA I XR2 /STORE BACK 001145 2021 ISZ CCNT /DONE ALL YET? 001146 5342 JMP CSUMLUP /NO, KEEP GOING 001147 1030 TAD CSUMTMP /GET LATEST VALUE 001150 5730 JMP I DOCHECK /RETURN 001174 0021 001175 0020 001176 0722 001177 0730 1200 PAGE / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 20 001200 0000 GETCHR, .-. /GET A VALID CHARACTER ROUTINE 001201 1036 GETMORE,TAD INITFLAG /GET INITIALIZE FLAG 001202 4567 JMS I [GETBYTE] /GET A CHARACTER 001203 5777 JMP I (DECERR) /I/O ERROR 001204 5777 JMP I (DECERR) /<EOF> 001205 3060 DCA PUTEMP /SAVE THE CHARACTER 001206 3036 DCA INITFLAG /CLEAR INITIALIZE FLAG 001207 1033 TAD DSTATE /GET DATA STATE 001210 7510 SPA /SKIP IF NOT ONE OF THE DATA-ORIENTED STATES 001211 1376 TAD (4004) /ADD ON DATA-ORIENTED STATES OFFSET 001212 1375 TAD (JMP I P) /SETUP JUMP INSTRUCTION 001213 3214 DCA .+1 /STORE IN-LINE 001214 0000 .-. /AND EXECUTE IT / LOOKING FOR OPENING CHARACTER. 001215 1060 SCANIT, TAD PUTEMP /GET THE CHARACTER 001216 1374 TAD (-"<!200) /COMPARE TO OPENING DATA CHARACTER 001217 7450 SNA /SKIP IF NO MATCH 001220 5244 JMP FNDATA /JUMP IF IT MATCHES 001221 1373 TAD (-"(+"<) /COMPARE TO OPENING COMMAND CHARACTER 001222 7650 SNA CLA /SKIP IF NO MATCH 001223 2033 ISZ DSTATE /INDICATE LOOKING FOR END OF COMMAND 001224 5201 JMP GETMORE /KEEP GOING / FOUND OPENING COMMAND CHARACTER. 001225 1060 FNDCOMM,TAD PUTEMP /GET THE CHARACTER 001226 1372 TAD (-")!200) /COMPARE TO CLOSING COMMAND CHARACTER 001227 7650 SNA CLA /SKIP IF NO MATCH 001230 2033 ISZ DSTATE /INDICATE LOOKING FOR <CR> 001231 5201 JMP GETMORE /KEEP GOING / FOUND CLOSING COMMAND CHARACTER. 001232 1060 FNDCEND,TAD PUTEMP /GET THE CHARACTER 001233 1371 TAD (-"M!300) /COMPARE TO <CR> 001234 7650 SNA CLA /SKIP IF NO MATCH 001235 2033 ISZ DSTATE /INDICATE LOOKING FOR <LF> 001236 5201 JMP GETMORE /KEEP GOING / FOUND <CR> AFTER COMMAND. 001237 1060 FNDCR, TAD PUTEMP /GET THE CHARACTER 001240 1370 TAD (-"J!300) /COMPARE TO <LF> 001241 7650 SNA CLA /SKIP IF NO MATCH 001242 3033 DCA DSTATE /RESET TO SCANNING STATE 001243 5201 JMP GETMORE /KEEP GOING / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 21 / FOUND OPENING DATA CHARACTER. 001244 1367 FNDATA, TAD (-WIDTH) /SETUP THE 001245 3032 DCA DATCNT /DATA COUNTER 001246 7330 NL4000 /SETUP THE 001247 3033 DCA DSTATE /NEW STATE 001250 5201 JMP GETMORE /KEEP GOING / PROCESSING ONE OF 69 DATA CHARACTERS. 001251 1060 STORDAT,TAD PUTEMP /GET THE CHARACTER 001252 1166 TAD [-140] /SUBTRACT UPPER-CASE LIMIT 001253 7510 SPA /SKIP IF LOWER-CASE 001254 1165 TAD [40] /RESTORE UPPER-CASE 001255 1366 TAD (100) /RESTORE THE CHARACTER 001256 3060 DCA PUTEMP /SAVE IT BACK 001257 1060 TAD PUTEMP /GET IT AGAIN 001260 1365 TAD (-"Z!200-1) /SUBTRACT UPPER LIMIT 001261 7100 CLL /CLEAR LINK FOR TEST 001262 1364 TAD ("Z-"A+1) /ADD ON RANGE 001263 7630 SZL CLA /SKIP IF NOT ALPHABETIC 001264 5273 JMP ALPHAOK /JUMP IF ALPHABETIC 001265 1060 TAD PUTEMP /GET THE CHARACTER 001266 1363 TAD (-"9!200-1) /ADD ON UPPER LIMIT 001267 7100 CLL /CLEAR LINK FOR TEST 001270 1362 TAD ("9-"0+1) /ADD ON RANGE 001271 7620 SNL CLA /SKIP IF OK 001272 5201 JMP GETMORE /IGNORE IF NOT 001273 1060 ALPHAOK,TAD PUTEMP /GET THE CHARACTER 001274 2032 ISZ DATCNT /DONE 69 CHARACTERS? 001275 7410 SKP /SKIP IF NOT 001276 2033 ISZ DSTATE /ADVANCE TO NEXT STATE 001277 5600 JMP I GETCHR /RETURN / PROCESSED 69 DATA CHARACTERS; NOW LOOKING FOR ENDING DATA CHARACTER. 001300 1060 ENDATA, TAD PUTEMP /GET THE CHARACTER 001301 1361 TAD (-">!200) /COMPARE TO ENDING DATA VALUE 001302 7650 SNA CLA /SKIP IF NO MATCH 001303 2033 ISZ DSTATE /ELSE ADVANCE TO NEXT STATE 001304 5201 JMP GETMORE /KEEP GOING / FOUND ENDING DATA CHARACTER; NOW LOOKING FOR <CR>. 001305 1060 ENDCR, TAD PUTEMP /GET THE CHARACTER 001306 1371 TAD (-"M!300) /COMPARE TO <CR> 001307 7650 SNA CLA /SKIP IF NO MATCH 001310 2033 ISZ DSTATE /ELSE ADVANCE TO NEXT STATE 001311 5201 JMP GETMORE /KEEP GOING / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 22 / FOUND ENDING DATA CHARACTER AND <CR>; NOW LOOKING FOR <LF>. /ENDLF, TAD PUTEMP /GET THE CHARACTER / TAD (-"J!300) /COMPARE TO <LF> / SNA CLA /SKIP IF NO MATCH / DCA DSTATE /RESET TO SCANNING STATE / JMP GETMORE /KEEP GOING 001312 0000 CLRCHKS,.-. /CLEAR CALCULATED CHECKSUM ROUTINE 001313 3022 DCA CHKSUM+0 /CLEAR LOW-ORDER 001314 3023 DCA CHKSUM+1 /CLEAR NEXT 001315 3024 DCA CHKSUM+2 /CLEAR NEXT 001316 3025 DCA CHKSUM+3 /CLEAR NEXT 001317 3026 DCA CHKSUM+4 /CLEAR HIGH-ORDER 001320 5712 JMP I CLRCHKSUM /RETURN 001361 7702 001362 0012 001363 7706 001364 0032 001365 7645 001366 0100 001367 7673 001370 7766 001371 7763 001372 7727 001373 0024 001374 7704 001375 5463 001376 4004 001377 0453 1400 PAGE / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 23 001400 0000 GEOFILE,.-. /GET OUTPUT FILE ROUTINE 001401 1055 TAD ODNUMBER /GET OUTPUT DEVICE NUMBER 001402 7640 SZA CLA /SKIP IF NOT ESTABLISHED YET 001403 5224 JMP GOTOD /JUMP IF DETERMINED ALREADY 001404 1377 TAD ("D^100+"S-300) /GET BEGINNING OF "DSK" 001405 3215 DCA DEVNAME /STORE IN-LINE 001406 1376 TAD ("K^100) /GET REST OF "DSK" 001407 3216 DCA DEVNAME+1 /STORE IN-LINE 001410 3217 DCA RETVAL /CLEAR HANDLER ENTRY WORD 001411 6201 CDF PRGFLD /INDICATE OUR FIELD 001412 6212 CIF USRFLD /GOTO USR FIELD 001413 4577 JMS I [USR] /CALL USR ROUTINE 001414 0012 INQUIRE /INQUIRE ABOUT HANDLER 001415 0000 DEVNAME,ZBLOCK 2 /WILL BE DEVICE DSK 001417 0000 RETVAL, .-. /BECOMES HANDLER ENTRY POINT WORD 001420 7402 HLT /DSK: NOT IN SYSTEM IS IMPOSSIBLE! 001421 1216 TAD DEVNAME+1 /GET DEVICE NUMBER FOR DSK: 001422 0176 AND [17] /JUST DEVICE BITS 001423 3055 DCA ODNUMBER /STORE OUTPUT DEVICE 001424 6211 GOTOD, CDF TBLFLD /BACK TO TABLE FIELD 001425 1775 TAD I (OUTFILE+1) /GET OUTPUT FILE FIRST NAME WORD 001426 7450 SNA /SKIP IF PRESENT 001427 5241 JMP GFLNAME /JUMP IF NOT 001430 3046 DCA FNAME /MOVE TO OUR AREA 001431 1774 TAD I (OUTFILE+2) /GET SECOND NAME WORD 001432 3047 DCA FNAME+1 /MOVE IT 001433 1773 TAD I (OUTFILE+3) /GET THIRD NAME WORD 001434 3050 DCA FNAME+2 /MOVE IT 001435 1772 TAD I (OUTFILE+4) /GET EXTENSION WORD 001436 3051 DCA FNAME+3 /MOVE IT 001437 6201 GEOFXIT,CDF PRGFLD /BACK TO OUR FIELD 001440 5600 JMP I GEOFILE /RETURN / WE MUST TAKE THE FILENAME FROM THE IMBEDDED (FILE ) COMMAND. THE ONLY / EXCEPTION IS IF WE ARE DOING AN IMAGE TRANSFER. 001441 1771 GFLNAME,TAD I (SWAL) /GET /A-/L SWITCHES 001442 0370 AND (10) /JUST /I BIT 001443 7640 SZA CLA /SKIP IF NOT SET 001444 1574 TAD I [EQUWRD] /GET EQUALS PARAMETER 001445 7450 SNA /SKIP IF SET TO SOMETHING 001446 5273 JMP DOFLNAME /JUMP IF PARAMETERS NOT SET 001447 7040 CMA /INVERT IT 001450 3031 DCA DANGCNT /STORE AS DANGER COUNT 001451 2035 ISZ IMSW /SET IMAGE-MODE SWITCH 001452 1575 TAD I [SWY9] /GET /Y-/9 SWITCHES 001453 0367 AND (600) /JUST /1, /2 SWITCHES 001454 7450 SNA /SKIP IF EITHER SET 001455 5237 JMP GEOFXIT /JUMP IF NEITHER SET 001456 0171 AND [400] /JUST /1 SWITCH 001457 7650 SNA CLA /SKIP IF /1 SET 001460 5264 JMP IM2 /JUMP IF /2 SET 001461 1574 TAD I [EQUWRD] /GET EQUALS PARAMETER 001462 7110 CLL RAR /%2 001463 5270 JMP IMCOMMON /CONTINUE THERE / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 24 001464 1574 IM2, TAD I [EQUWRD] /GET EQUALS PARAMETER 001465 7110 CLL RAR /%2 001466 7041 CIA /SUBTRACT PART 1 VALUE 001467 1574 TAD I [EQUWRD] /FROM EQUALS PARAMETER 001470 7040 IMCOMMO,CMA /INVERT IT 001471 3031 DCA DANGCNT /STORE AS DANGER COUNT 001472 5237 JMP GEOFXIT /EXIT THERE 001473 6201 DOFLNAM,CDF PRGFLD /BACK TO OUR FIELD 001474 7240 NL7777 /SETUP THE 001475 3036 DCA INITFLAG /INPUT FILE INITIALIZATION 001476 4766 JMS I (SCNFILE) /SCAN OFF "(FILE" / HAVING FOUND THE (FILE ) COMMAND, WE MUST FIND THE FILENAME. / ZERO OUT THE FILENAME AREA. 001477 1365 TAD (-10) /SETUP THE 001500 3027 DCA CHRCNT /CLEAR COUNTER 001501 1364 TAD (ONAME-1) /SETUP THE 001502 3010 DCA XR1 /POINTER 001503 4763 JMS I (CLRNAME) /CLEAR THE NAME BUFFER / SETUP FOR SCANNING THE NAME PORTION. 001504 1362 TAD (-6) /SETUP THE 001505 3027 DCA CHRCNT /SCAN COUNT 001506 1364 TAD (ONAME-1) /SETUP THE 001507 3010 DCA XR1 /POINTER 001510 4761 FNCAGN, JMS I (GETAN) /GET A CHARACTER 001511 5320 JMP GOTSEPARATOR /GOT "."; GOTO NEXT FIELD 001512 3410 DCA I XR1 /STASH THE CHARACTER 001513 2027 ISZ CHRCNT /DONE ALL YET? 001514 5310 JMP FNCAGN /NO, KEEP GOING / THROW AWAY EXTRA NAME CHARACTERS. 001515 4761 TOSSNAM,JMS I (GETAN) /GET A CHARACTER 001516 5320 JMP GOTSEPARATOR /GOT "."; GOTO NEXT FIELD 001517 5315 JMP TOSSNAME /KEEP GOING / COMES HERE AFTER "." FOUND. 001520 4763 GOTSEPA,JMS I (CLRNAME) /CLEAR OUT THE REMAINING NAME FIELD 001521 7344 NL7776 /SETUP THE 001522 3027 DCA CHRCNT /SCAN COUNT 001523 4761 EXCAGN, JMS I (GETAN) /GET A CHARACTER 001524 5564 JMP I [CHARERROR] /GOT "."; COMPLAIN 001525 3410 DCA I XR1 /STASH THE CHARACTER 001526 2027 ISZ CHRCNT /DONE ENOUGH YET? 001527 5323 JMP EXCAGN /NO, KEEP GOING / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 25 / TOSS ANY EXTRA EXTENSION CHARACTERS. 001530 4761 TOSSEXT,JMS I (GETAN) /GET A CHARACTER 001531 5564 JMP I [CHARERROR] /GOT "."; COMPLAIN 001532 5330 JMP TOSSEXTENSION /KEEP GOING / COMES HERE WHEN TRAILING ")" IS FOUND. 001533 4763 GOTRPAR,JMS I (CLRNAME) /CLEAR ANY REMAINING EXTENSION CHARACTERS 001534 1760 TAD I (ONAME) /GET THE FIRST CHARACTER 001535 7650 SNA CLA /SKIP IF SOMETHING THERE 001536 5564 JMP I [CHARERROR] /COMPLAIN IF NONE THERE 001537 1364 TAD (ONAME-1) /SETUP POINTER 001540 3010 DCA XR1 /TO NAME CHARACTERS 001541 1357 TAD (FNAME-1) /SETUP POINTER 001542 3011 DCA XR2 /TO PACKED NAME AREA 001543 1356 TAD (-4) /SETUP THE 001544 3027 DCA CHRCNT /MOVE COUNT 001545 1410 CHRLOOP,TAD I XR1 /GET FIRST CHARACTER 001546 7106 CLL RTL;RTL;RTL /MOVE UP 001547 7006 001550 7006 001551 1410 TAD I XR1 /ADD ON SECOND CHARACTER 001552 3411 DCA I XR2 /STORE THE PAIR 001553 2027 ISZ CHRCNT /DONE YET? 001554 5345 JMP CHRLOOP /NO, KEEP GOING 001555 5600 JMP I GEOFILE /YES, RETURN 001556 7774 001557 0045 001560 1711 001561 1663 001562 7772 001563 1626 001564 1710 001565 7770 001566 1600 001567 0600 001570 0010 001571 7643 001572 7604 001573 7603 001574 7602 001575 7601 001576 1300 001577 0423 1600 PAGE / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 26 001600 0000 SCNFILE,.-. /SCAN "(FILE" ROUTINE 001601 4236 MATAGN, JMS GETNSPC /GET A CHARACTER 001602 1377 TAD (-"(!200) /COMPARE TO "(" 001603 7640 SZA CLA /SKIP IF IT MATCHES 001604 5201 JMP MATAGN /JUMP IF NOT 001605 4236 JMS GETNSPC /GET NEXT CHARACTER 001606 1376 TAD (-"F!300) /COMPARE TO "F" 001607 7640 SZA CLA /SKIP IF IT MATCHES 001610 5201 JMP MATAGN /JUMP IF NOT 001611 4236 JMS GETNSPC /GET NEXT CHARACTER 001612 1375 TAD (-"I!300) /COMPARE TO "I" 001613 7640 SZA CLA /SKIP IF IT MATCHES 001614 5201 JMP MATAGN /JUMP IF NOT 001615 4236 JMS GETNSPC /GET NEXT CHARACTER 001616 1374 TAD (-"L!300) /COMPARE TO "L" 001617 7640 SZA CLA /SKIP IF IT MATCHES 001620 5201 JMP MATAGN /JUMP IF NOT 001621 4236 JMS GETNSPC /GET NEXT CHARACTER 001622 1373 TAD (-"E!300) /COMPARE TO "E" 001623 7640 SZA CLA /SKIP IF IT MATCHES 001624 5201 JMP MATAGN /JUMP IF NOT 001625 5600 JMP I SCNFILE /RETURN 001626 0000 CLRNAME,.-. /NAME FIELD CLEARING ROUTINE 001627 1027 TAD CHRCNT /GET CHARACTER COUNTER 001630 7650 SNA CLA /SKIP IF ANY TO CLEAR 001631 5626 JMP I CLRNAME /ELSE JUST RETURN 001632 3410 DCA I XR1 /CLEAR A NAME WORD 001633 2027 ISZ CHRCNT /COUNT IT 001634 5232 JMP .-2 /KEEP GOING 001635 5626 JMP I CLRNAME /RETURN 001636 0000 GETNSPC,.-. /GET NON-<SPACE> CHARACTER 001637 4245 GETNAGN,JMS GETCHAR /GET A CHARACTER 001640 1372 TAD (-" !200) /COMPARE TO <SPACE> 001641 7650 SNA CLA /SKIP IF OTHER 001642 5237 JMP GETNAGN /JUMP IF IT MATCHES 001643 1060 TAD PUTEMP /GET THE CHARACTER BACK 001644 5636 JMP I GETNSPC /RETURN 001645 0000 GETCHAR,.-. /GET A CHARACTER ROUTINE 001646 7200 CLA /CLEAN UP 001647 1036 TAD INITFLAG /GET INITIALIZE FLAG 001650 4567 JMS I [GETBYTE] /GET A CHARACTER 001651 5771 JMP I (NIOERROR) /COMPLAIN IF AN ERROR 001652 5564 JMP I [CHARERROR] /COMPLAIN IF <EOF> REACHED 001653 1166 TAD [-140] /COMPARE TO LOWER-CASE LIMIT 001654 7510 SPA /SKIP IF LOWER-CASE 001655 1165 TAD [40] /RESTORE ORIGINAL IF UPPER-CASE 001656 0370 AND (77) /JUST SIX-BIT 001657 3060 DCA PUTEMP /SAVE IN CASE WE NEED IT 001660 3036 DCA INITFLAG /CLEAR INITIALIZE FLAG 001661 1060 TAD PUTEMP /GET IT BACK 001662 5645 JMP I GETCHAR /RETURN / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 27 001663 0000 GETAN, .-. /GET ALPHANUMERIC ROUTINE 001664 4236 JMS GETNSPC /GET A NON-<SPACE> CHARACTER 001665 1367 TAD (-".!200) /COMPARE TO "." 001666 7450 SNA /SKIP IF OTHER 001667 5663 JMP I GETAN /TAKE FIRST RETURN IF IT MATCHES 001670 1366 TAD (-")+".) /COMPARE TO ")" 001671 7450 SNA /SKIP IF OTHER 001672 5765 JMP I (GOTRPAREN) /TAKE DEDICATED RETURN IF IT MATCHES 001673 1364 TAD (-":+")) /SUBTRACT UPPER LIMIT 001674 7100 CLL /CLEAR LINK FOR TEST 001675 1363 TAD (":-"0) /ADD ON RANGE 001676 7630 SZL CLA /SKIP IF NOT NUMERIC 001677 5306 JMP GETANOK /JUMP IF NUMERIC 001700 1060 TAD PUTEMP /GET THE CHARACTER BACK 001701 1362 TAD (-"[!300) /SUBTRACT UPPER LIMIT 001702 7100 CLL /CLEAR LINK FOR TEST 001703 1361 TAD ("[-"A) /ADD ON RANGE 001704 7620 SNL CLA /SKIP IF ALPHABETIC 001705 5564 JMP I [CHARERROR] /ELSE COMPLAIN 001706 1060 GETANOK,TAD PUTEMP /GET GOOD ALPHANUMERIC CHARACTER 001707 2263 ISZ GETAN /BUMP TO SKIP RETURN 001710 5663 JMP I GETAN /RETURN 001711 0000 ONAME, ZBLOCK 10 /OUTPUT NAME FIELD 001721 0000 FENTER, .-. /FILE ENTER ROUTINE 001722 1360 TAD (FNAME) /POINT TO 001723 3331 DCA ENTAR1 /STORED FILENAME 001724 3332 DCA ENTAR2 /CLEAR SECOND ARGUMENT 001725 1055 TAD ODNUMBER /GET OUTPUT DEVICE NUMBER 001726 6212 CIF USRFLD /GOTO USR FIELD 001727 4577 JMS I [USR] /CALL USR ROUTINE 001730 0003 ENTER /ENTER TENTATIVE FILENAME 001731 0000 ENTAR1, .-. /WILL POINT TO FILENAME 001732 0000 ENTAR2, .-. /WILL BE ZERO 001733 5757 JMP I (ENTERR) /ENTER ERROR 001734 1332 TAD ENTAR2 /GET RETURNED EMPTY LENGTH 001735 7001 IAC /ADD 2-1 FOR OS/278 CRAZINESS 001736 3031 DCA DANGCNT /STORE AS DANGER COUNT 001737 1331 TAD ENTAR1 /GET RETURNED FIRST RECORD 001740 3057 DCA OUTRECORD /SETUP OUTPUT RECORD 001741 5721 JMP I FENTER /RETURN / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 28 001757 0407 001760 0046 001761 0032 001762 7745 001763 0012 001764 7757 001765 1533 001766 0005 001767 7722 001770 0077 001771 0412 001772 7740 001773 7773 001774 7764 001775 7767 001776 7772 001777 7730 2000 PAGE $ /THAT'S ALL FOLK! 000164 0413 000165 0040 000166 7640 000167 0462 000170 7773 000171 0400 000172 0007 000173 0003 000174 7646 000175 7645 000176 0017 000177 7700 / OS/8 DECODING PROGRAM PAL8-V50X 13-JUL-87 PAGE 29 ALPHAO 1273 GETMOR 1201 OUTPUT 0056 BEGIN 0200 GETNAG 1637 OUTREC 0057 BIHEXB 0730 GETNEW 0467 P 0063 BUFPTR 0020 GETNSP 1636 POUTBU 0451 CCNT 0021 GETREC 0472 PRGFLD 0000 CHARER 0413 GETWOR 0600 PROCER 0400 CHKSUM 0022 GFLNAM 1441 PUTC 0525 CHRCNT 0027 GOTOD 1424 PUTEMP 0060 CHRLOO 1545 GOTRPA 1533 PUTLOO 0435 CLOSE 0004 GOTSEP 1520 PUTNEW 0433 CLRCHK 1312 GWCMPL 0706 PUTONE 0511 CLRNAM 1626 GWLOOP 0637 PUTPTR 0061 CLSERR 0402 GWNEXT 0602 PUTREC 0452 CSUMLU 1142 GWORD0 1000 RESET 0013 CSUMTM 0030 GWORD1 1021 RETVAL 1417 DANGCN 0031 GWORD2 1041 SBOOT 7600 DATCNT 0032 GWORD3 1067 SCANIT 1215 DECBMP 0460 GWORD4 1110 SCNFIL 1600 DECERR 0453 GWTMP1 0052 SIZERR 0404 DECODE 0005 GWTMP2 0053 START 0202 DECODI 0423 GWVALU 0054 STORDA 1251 DEVNAM 1415 GWX 0606 SWAL 7643 DOCHEC 1130 GWXLUP 0632 SWY9 7645 DOFLNA 1473 GWZ 0662 TBLFLD 0010 DSTATE 0033 IDNUMB 0034 TERMWR 7642 ENDATA 1300 IHNDBU 7200 THIRD 0062 ENDCR 1305 IHPTR 0251 TOSSEX 1530 ENTAR1 1731 IMAGE1 0302 TOSSNA 1515 ENTAR2 1732 IMCOMM 1470 TSTMOR 0326 ENTER 0003 IMSW 0035 USERRO 0007 ENTERR 0407 IM2 1464 USR 7700 EQUWRD 7646 INBUFF 6200 USRFLD 0010 ERRNUM 0422 INERR 0414 WIDTH 0105 EXCAGN 1523 INFILE 7617 WRITE 4000 EXITZA 0324 INITFL 0036 XR1 0010 FCHKSU 0041 INPUT 0037 XR2 0011 FENTER 1721 INQUIR 0012 FERROR 0411 INRECO 0040 FETCH 0001 MATAGN 1601 FNAME 0046 NIOERR 0412 FNCAGN 1510 NL0001 7201 FNDATA 1244 NL0002 7326 FNDCEN 1232 NL4000 7330 FNDCOM 1225 NL7776 7344 FNDCR 1237 NL7777 7240 GBIHEX 0722 NOIMAG 0305 GEOFIL 1400 ODNULL 0217 GEOFXI 1437 ODNUMB 0055 GETAN 1663 OHNDBU 6600 GETANO 1706 OHPTR 0264 GETBYT 0462 ONAME 1711 GETCHA 1645 OUTBUF 5600 GETCHR 1200 OUTCNT 0322 GETEOF 0534 OUTERR 0415 GETLOO 0476 OUTFIL 7600 ERRORS DETECTED: 0 LINKS GENERATED: 0