--- /dev/null
+/LAB8E ADVANCED AVERAGER MS (HP7475A) - DISPLAY AND PLOT OUTPUT.\r
+/\r
+/DEC-8E-AAA4A-A-LA\r
+/\r
+/VERSION FOR HP7475A PLOTTER\r
+/\r
+/COPYRIGHT 1972\r
+/DIGITAL EQUIPMENT CORPORATION\r
+/MAYNARD, MASSACHUSETTS 01754\r
+/\r
+/UPDATE 7-AUG-1984 HA UNIVERSITY GOETTINGEN\r
+/FIXES BUG IN OVRLAY ROUTINE\r
+/COPYRIGHT 1984 BY HA\r
+/\r
+/UPDATE 29-JAN-1985 KJS UNIVERSITY GOETTINGEN\r
+/PLOTTER CONTROL CHANGED\r
+/COPYRIGHT 1985 BY KJS\r
+\f/FILE AD4.1\r
+/SECTION IV OF THE LAB8/E ADVANCED AVERAGER .\r
+/THIS IS PART 4 OF ADVANCED AVERAGER FOR OS-8.\r
+/OVERLAY FOR PS8.\r
+\r
+*7557\r
+OVRLAY, IOF\r
+ CLA CLL CMA\r
+ CLZE /DISABLE CLOCK\r
+ CLA\r
+ ADCL /AD\r
+ DILC /DISPLAY\r
+ DBDI /I/O\r
+ CDF 0 /CHAIN IN WRITE DATA TO DISK\r
+ DCA I KC7746 /0 PS8 JOB STATUS WORD.\r
+ TAD I XXOV4A /OVERLAY.\r
+ DCA XXOV4\r
+ CIF 10\r
+ JMS I CHAIN\r
+ 6\r
+XXOV4, 0\r
+CHAIN, 7700\r
+XXOV4A, PG0OV+2\r
+ PG0OV=5\r
+\r
+ MONITR=7600\r
+ CLZE=6130\r
+ ADCL=6530\r
+ DILC=6050\r
+ DBEI=6501\r
+\r
+\r
+\f/LAB-8 ADVANCED AVERAGER - SECTION 4 - [U63A.4]\r
+/COPYRIGHT 1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754\r
+\r
+/\r
+ PWAITD=60 /CONTROLS PEN UP/DOWN DELAY TIME\r
+/\r
+/BASIC SUBROUTINES [SU63A]\r
+ BRAN=JMS I 132 /BRANCH ACCORDING TO AC MATCH WITH LIST\r
+ SHFT=JMS I 133 /DOUBLE PRECISION ARITHMETIC SHIFT\r
+ DADD=JMS I 134 /DOUBLE PRECISION ADD\r
+\r
+/PAGE ZERO CONSTANTS\r
+ K0004=112\r
+ K0003=113\r
+ K0002=114\r
+ KM0001=115\r
+\r
+ K0007=116\r
+ KM0027=117\r
+ K0377=120\r
+ KM0004=121\r
+\f\r
+/TEMPORARY STORAGE REGISTERS 146=177\r
+ TEMP01=146\r
+ TEMP02=147\r
+ TEMP03=150\r
+ TEMP04=151\r
+ TEMP05=152\r
+ TEMP06=153\r
+ TEMP07=154\r
+ TEMP10=155\r
+\r
+ TEMP11=156\r
+ TEMP12=157\r
+ TEMP13=160\r
+ TEMP14=161\r
+ TEMP15=162\r
+ TEMP16=163\r
+ TEMP17=164\r
+ TEMP20=165\r
+ TEMP21=166\r
+\r
+/TEMPORARY STORAGE AND MULTIPLE ACCUMULATORS\r
+ ARITH0=167\r
+ TEMP22=167\r
+\r
+ ARITH1=170\r
+ TEMP23=170\r
+\r
+ ARITH2=171\r
+ TEMP24=171\r
+\r
+ ARITH3=172\r
+ TEMP25=172\r
+\r
+ ARITH4=173\r
+ TEMP26=173\r
+\r
+ ARITH5=174\r
+ TEMP27=174\r
+\r
+/TEMPORARY STORAGE AND TTY-KBD BUFFERS\r
+ KBDBUF=175\r
+ TEMP30=175\r
+\r
+ TTYBUF=176\r
+ TEMP31=176\r
+\r
+ TTYFLG=177\r
+ TEMP32=177\r
+\f\r
+/IOT REFERENCES FOR THE LAB/8E\r
+/\r
+/\r
+/AD8-EA 10 BIT A/D CONVERTER\r
+/\r
+\r
+ ADCL=6530 /CLEAR ALL\r
+ ADLM=6531 /LOAD MPLXR\r
+ ADST=6532 /START CONVERSION\r
+ ADRB=6533 /READ AD BUFFER\r
+ ADSK=6534 /SKIP ON AD DONE\r
+ ADSE=6535 /SKIP ON TIMING ERROR\r
+ ADLE=6536 /LOAD ENABLE REGISTER\r
+ ADRS=6537 /READ STATUS REGISTER\r
+/\r
+/VC8-E POINT PLOT DISPLAY\r
+/\r
+ DILC=6050 /CLEAR ALL\r
+ DICD=6051 /CLEAR DONE FLAG\r
+ DISD=6052 /SKIP ON DONE FLAG\r
+ DILX=6053 /CLEAR DONE FLAG LOAD X\r
+ DILY=6054 /CLEAR DONE FLAG LOAD Y\r
+ DIXY=6055 /CLEAR DONE, INTENSIFY, SET DONE\r
+ DILE=6056 /LOAD ENABLE CLEAR AC\r
+ DIRE=6057 /ENABLE TO AC\r
+/\r
+/DK8-EP REAL TIME CLOCK\r
+/\r
+ CLZE=6130 /ZERO TO ENABLE\r
+ CLSK=6131 /SKP ON CLOCK FG\r
+ CLOE=6132 /ONES TO ENABLE\r
+ CLAB=6133 /AC TO CLK BUF AND COUNTER REGISTER\r
+ CLEN=6134 /ENABLE TO AC\r
+ CLSA=6135 /STATUS TO AC AND AC ONE'S CLEAR STATUS REG.\r
+ CLBA=6136 /CLK BUF TO AC\r
+ CLCA=6137 /CLK CNTR TO AC AND TO AC\r
+/\r
+/DB8-EA 12 CHANNEL DIGITAL I/O\r
+/\r
+ DBDI=6500 /DISABLE INTERRUPT\r
+ DBEI=6501 /ENABLE INTERRUPT\r
+ DBSK=6502 /SKIP ON INPUT\r
+ DBCI=6503 /CLEAR INPUT BITS WITH SET AC BIT\r
+ DBRI=6504 /READ INPUT\r
+ DBCO=6505 /CLEAR OUTPUT BITS WITH AC BITS\r
+ DBSO=6506 /SET OUTPUT BITS WITH AC BITS\r
+ DBRO=6507 /READ OUTPUT REGISTER\r
+\r
+/COMBINED OPERATES\r
+MTH=CLA CMA CLL RTL; MTW=CLA CMA CLL RAL\r
+TWO=CLA CLL CML RTL; TWOK=CLA CLL CML RTR\r
+BSW=7002\r
+\r
+/EXTENDED MEMORY\r
+CDF=6201; RDF=6214; RMF=6244\r
+\r
+\f\r
+\r
+/PAGE ZERO\r
+/CONSTANTS\r
+\r
+*112\r
+\r
+K0004, 0004\r
+K0003, 0003\r
+K0002, 0002\r
+KM0001, -1\r
+K0007, 7\r
+KM0027, -27\r
+K0377, 377\r
+KM0004, -4\r
+K0005A, 0005\r
+K0200, 200\r
+KM1000, -1000\r
+KM1777, -1777\r
+K6777, 6777\r
+KC7600, 7600\r
+\r
+/LINKAGES\r
+\r
+*132\r
+\r
+ 6341 /BRAN\r
+ 6302 /SHFT\r
+ 6362 /DADD\r
+KSTART, START\r
+\r
+/SUBROUTINE TO READ VALUE OF A KNOB\r
+\r
+*20\r
+START0, CDF 10\r
+ TAD I KC7600 /RESTORE BLOCK ADD. FOR CHAIN IN LOC 7.\r
+ /SAVED BY SEC 3.\r
+ CDF 0\r
+ DCA 7\r
+ JMP I KSTART\r
+\r
+\r
+KNOBS, 0\r
+ ADLM /LOAD MUX\r
+ ADST /START CONVERSION\r
+ ADSK /WAIT\r
+ JMP .-1\r
+ ADRB /READ RANGE: 777,-1000\r
+ TAD K6777 /RANGE -3777, -1\r
+ JMP I KNOBS\r
+\r
+/SUBROUTINE TO LOAD Y DAC AND DISPLAY\r
+\r
+DOY, 0\r
+ DILY /LOAD Y\r
+ DISD /WAIT FOR SETTLE\r
+ JMP .-1\r
+ DIXY /DISPLAY\r
+ JMP I DOY\r
+\r
+/ LINKS TO PLOTTER SUBROUTINE IN FIELD 3\r
+HPLON, H3PLON\r
+HPLOF, H3PLOF\r
+HPENU, H3PENU\r
+HPEND, H3PEND\r
+HPLOT, H3PLOT\r
+HPLGR, H3PLGR\r
+\f\r
+*6400\r
+/THIS SECTION DISPLAYS, SCALES, AND OUTPUTS M, C, 1000T \r
+\r
+/MAIN DISPLAY AND INITIATION FOR SECTION 5\r
+START, TAD I K0200 /SET JOBLIST POINTER TO FIRST JOB\r
+ IAC\r
+ DCA JPNTR /JOB LIST POINTER\r
+ JPNTR=10\r
+ DCA SFACTR /PRESET SCALE FACTOR\r
+ SFACTR=TEMP32\r
+ TAD KPLOT /AUTO RESET AT 1 MS A TICK\r
+ CLOE\r
+ CMA\r
+ CLZE\r
+\r
+DISJOB, CLA CMA\r
+ DCA PMODE /PMODE .NE. 0 FOR NO PLOT\r
+ PMODE=TEMP31\r
+ JMS I JSETX /SETUP DATA POINTERS, COUNTERS, DISPLAY\r
+ TAD TJTYPE /GET #LOC TO SKIP OVER WHEN DISPLAYING MEAN\r
+ BRAN\r
+ K0003\r
+ IAC /SD. AND TREND, SKIP 3\r
+ TAD K0002 /S.D., SKIP 2\r
+ DCA TSKIP\r
+ TSKIP=TEMP15\r
+ KSF /KBD STRUCK?\r
+ JMP DISAVG /NO, GO DISPLAY\r
+ KRB /YES, GET CHARACTER\r
+ BRAN /CHECK AGAINST RESPONSE LIST\r
+ KBDLST\r
+ MTW /X - EXPAND, SCALE UP\r
+ JMP NEWSF /C - CONTRACT, SCALE DOWN\r
+ JMP I PGRDAX /P - FIRST GRID, THAN DATA\r
+ JMP I PDAX /D - DATA ONLY\r
+ JMP I TDATAX /T - TYPE DATA\r
+ JMP I PGRX /G - GRID\r
+ JMP NXTJOB /CR - DISPLAY NEXT JOB\r
+ JMP I IDATAX /I - INTEGRATE\r
+ JMP I OVRLAX /^W - WRITE DATA.\r
+ JMP I OS8 /^C - RETURN TO OS8.\r
+ JMP START /^Z - FIRST JOB\r
+KECHO, TAD TEMP02 /ECHO\r
+ JMS I TYPEX\r
+\r
+DISAVG, JMS GDATAS /GET M (2 WDS) AND SCALE\r
+ JMS I DISPX /DISPLAY M/2^K\r
+ JMS I BLKCNX /MOVE TO NEXT, CHECK FOR END\r
+ JMP DISAVG /NOT ENDED, DISPLAY NEXT POINT\r
+ CLA CMA /ENDED, IS JOB TYPE=1?\r
+ TAD TJTYPE /(1 FOR MEAN ONLY)\r
+ SNA CLA\r
+ JMP DISEND /YES, DISPLAY OF JOBS IS DONE\r
+ JMS I JSETX /NO, SETUP TO DISPLAY MEAN + CF'S\r
+\f\r
+DISPSD, JMS GDATAS /GET M AND SCALE\r
+ DCA TMEAN /SAVE M/(2^K)\r
+ TMEAN=TEMP02\r
+ JMS GDATAS /GET 2S/SQRT(N) AND SCALE\r
+ TAD TMEAN /[M+2S/SQRT(N)]/2^K\r
+ JMS I DISPX /DISPLAY IT\r
+ MTW /SKIP OVER TREND IF PRESENT\r
+ JMS I BLKCNX /MOVE TO NEXT DATA POINT, CHECK FOR END\r
+ JMP DISPSD /NOT ENDED, DISPLAY NEXT POINT\r
+ JMS I JSETX /ENDED, SETUP FOR DISPLAY OF MEAN - CF\r
+DISMSD, JMS GDATAS /GET NM AND SCALE\r
+ DCA TMEAN /SAVE M/2^K\r
+ JMS GDATAS /GET 2S/SQRT(N) AND SCALE\r
+ CMA IAC\r
+ TAD TMEAN /[M-2S/SQRT(N)]/2^K\r
+ JMS I DISPX /DISPLAY IT\r
+ MTW /SKIP OVER TREND IF PRESENT\r
+ JMS I BLKCNX /ANY MORE POINTS?\r
+ JMP DISMSD /MORE POINTS TO DISPLAY, CONTINUE\r
+ MTW /IS JOB TYPE=3?\r
+ TAD TJTYPE /(3 FOR AVG, CF, AND TREND)\r
+ SNA CLA\r
+ JMP DISEND /NO, DISPLAY OF THIS JOB IS DONE\r
+ JMS I JSETX /YES, SETUP TO DISPLAY 1000T\r
+ DCA TSKIP /SKIP NO POINTS AFTER TREND\r
+DISTRN, TAD K0004 /SKIP MEAN AND CF\r
+ TAD GETPNT\r
+ DCA GETPNT\r
+ JMS I GCDFSX /GET 1000T\r
+ CDF 0 /(*)\r
+ CLL RTR\r
+ RTR\r
+ AND K0377\r
+ TAD KM0775\r
+ JMS I DISPX /DISPLAY RANGES FROM -377+0 TO -377+177\r
+ JMS I BLKCNX /MOVE TO NEXT DATA PNT, CHECK FOR DONE\r
+ JMP DISTRN /NOT DONE. DO NEXT POINT\r
+\r
+DISEND, TAD PMODE /NO MORE POINTS IN THIS JOB\r
+ SZA CLA /ARE WE PLOTTING?\r
+ JMP DISJOB /NO, RESTART JOB\r
+ CIF 30 / PLOT DONE\r
+ JMS I HPLOF\r
+ JMP DISJOB /RESUME DISPLAY MODE\r
+\r
+\f/SUBROUTINE TO GET DBL DATA WORD AND SCALE\r
+/RESULT IN ARITH2 AND AC\r
+GDATAS, 0\r
+ JMS I GCDFSX /GET CDF AND 1ST WORD\r
+ DCA ARITH1 /SAVE IN HI FAC (*)\r
+ TAD I GETPNT /GET LO ORDER PART (*)\r
+ DCA ARITH2 /(*)\r
+ CDF 0 /BACK TO FIELD 0 (*)\r
+ TAD SFACTR /SCALE\r
+ SHFT\r
+ TAD ARITH1\r
+ JMP I GDATAS\r
+\r
+/NEW SCALE FACTOR\r
+NEWSF, CMA /AC=-1 FOR C, +1 FOR X\r
+ TAD SFACTR\r
+ DCA SFACTR\r
+ JMP KECHO\r
+\r
+/LOCAL CONSTANTS\r
+K4077, 4077\r
+KM0775, -775\r
+KPLOT, 5400\r
+\r
+/LOCAL CROSSPAGE\r
+JSETX, JSETS\r
+TYPEX, TYPES\r
+GCDFSX, GCDFS\r
+BLKCNX, BLKCNS\r
+PGRDAX, PGRDA\r
+PDAX, PDA\r
+PGRX, PGR\r
+TDATAX, TDATA\r
+DISPX, DISPS\r
+TMESSX, TMESS\r
+IDATAX, IDATA\r
+OVRLAX, OVRLAY\r
+OS8, 7600\r
+\f*6600\r
+/SAVE SCALE AND GO TO NEXT JOB\r
+NXTJOB, TAD JPNTR /MASK SCALE FACTOR INTO J1 BITS 8-11\r
+ DCA PJPNT /ADDRESS OF J1 FOR CURRENT JOB\r
+ PJPNT=TEMP01\r
+ TAD I PJPNT /J1: A/B(1), SF(5), 1(1), CHORD(5)\r
+ AND K4077 /MASK OUT OLD SF\r
+ DCA I PJPNT /J1: A/B(1), 0(5), 1(1), CHORD(5)\r
+ TAD SFACTR\r
+ SPA /SCALE FACTOR LESS THAN 0 ILLEGAL\r
+ CLA\r
+ BSW\r
+ AND K3700\r
+ TAD I PJPNT /J1: A/B(1),0(5), 1(1), CHORD(5)\r
+ DCA I PJPNT /J1: A/B(1), SF#(5), 1(1), CHORD(5)\r
+ TAD K0006 /MOVE TO NEXT JOB\r
+ TAD JPNTR\r
+ DCA JPNTR\r
+ JMS CRLFS /TYPE <CRLF>\r
+ TAD I JPNTR\r
+ SZA CLA\r
+ JMP I DISJOX /DISPLAY NEXT JOB\r
+ JMP I .+1 /NO MORE JOBS, DISPLAY FIRST AGAIN\r
+ START\r
+\r
+/LOCAL CONSTANT\r
+K0006, 6\r
+K0212, 0212\r
+K3700, 3700\r
+\r
+/LOCAL CROSSPAGE\r
+DISJOX, DISJOB\r
+TMESSY, TMESS\r
+GCDFY, GCDF\r
+DISPY, DISPS\r
+\f/SUBROUTINE TO SET UP DATA POINTERS, COUNTERS, AND DISPLAY\r
+JSETS, 0\r
+ TAD I JPNTR /GET J2 TYPE (4), SORT CODE (8)\r
+ RTL /PUT TYPE IN AC8-11\r
+ RTL\r
+ RAL\r
+ AND K0017 /MASK OUT REST OF J2\r
+ DCA TJTYPE /TYPE CODE\r
+ TJTYPE=TEMP30\r
+ TAD I JPNTR /J3: LINK 1 (- COUNT OF FIRST BLOCK)\r
+ DCA BLCNTR\r
+ BLCNTR=TEMP25\r
+ TAD I JPNTR /J4: LINK 2 (DATA FIELD FOR FIRST BLOCK)\r
+ DCA I GCDFY\r
+ TAD I JPNTR /J5: LINK 3 (START OF FIRST BLOCK-1)\r
+ IAC\r
+ DCA GETPNT\r
+ GETPNT=12\r
+ TAD I JPNTR /J6: DELTAX (8), YSCALE (4)\r
+ DCA ARITH2 /PREPARE TO SHIFT TO SETUP BINARY POINT OF DX\r
+ DCA ARITH1\r
+ TAD K0005A /DELTAX (8): INTEGER PART (5), FRACTION (3)\r
+ SHFT\r
+ TAD ARITH1\r
+ DCA DELTAX\r
+ DELTAX=TEMP21\r
+ TAD ARITH2\r
+ DCA DELTAX+1\r
+ TAD KM0005 /MOVE JOB POINTER BACK TO TOP OF JOB\r
+ TAD JPNTR\r
+ DCA JPNTR\r
+ TAD PMODE /PLOT MODE?\r
+ SZA CLA\r
+ JMP CHAS\r
+ CIF 30\r
+ JMS I HPENU / P E N U P\r
+CHAS, TAD KM1000\r
+ DILX /SET DISPLAY X TO LEFT EDGE\r
+ DCA ARITH4\r
+\f JMS KNOBS /GET CURRENT CURSOR SETTING FROM KNOBS 0 AND 1\r
+ DCA CURSE1\r
+ CURSE1=TEMP20\r
+ CLA IAC\r
+ JMS KNOBS\r
+ DCA CURSE2\r
+ CURSE2=TEMP17\r
+ JMP I JSETS\r
+\r
+/LOCAL CONSTANTS\r
+K0017, +17\r
+GDATAX, GDATAS\r
+K0034, +34\r
+K0062, 62\r
+K0215, 215\r
+KM0005, -05\r
+KM0012, -12\r
+\r
+PGR, CLA / PLOT GRID\r
+ CIF 30\r
+ JMS I HPLON\r
+ CIF 30\r
+ JMS I HPLGR\r
+ CLA\r
+ JMP DISJOB\r
+\r
+PGRDA, CLA / PLOT GRID AND DATA\r
+ CIF 30\r
+ JMS I HPLON\r
+ CIF 30\r
+ JMS I HPLGR\r
+ CLA\r
+ JMP DISJOB+1\r
+\r
+PDA, CLA / PLOT DATA\r
+ CIF 30\r
+ JMS I HPLON\r
+ CLA\r
+ JMP DISJOB+1\r
+\f/SUBROUTINE TO TYPE ASCII IN AC\r
+TYPES, 0\r
+ TLS\r
+ TSF\r
+ JMP .-1\r
+ TCF\r
+ CLA\r
+ JMP I TYPES\r
+\r
+/SUBROUTINE TO TYPE <CRLF>\r
+CRLFS, 0\r
+ TAD K0215\r
+ JMS TYPES\r
+ TAD K0212\r
+ JMS TYPES\r
+ JMP I CRLFS\r
+\r
+\f *7000\r
+/SUBROUTINE TO DISPLAY POINT: SCALE, BIAS, INCREMENT X\r
+DISPS, 0\r
+ DCA YSAVE\r
+ YSAVE=TEMP14\r
+ TAD ARITH4 /X FOR NEXT POINT\r
+ DILX\r
+ CLA\r
+ TAD YSAVE /GET POINT\r
+ JMS DOY /DISPLAY IT\r
+ CLA\r
+ TAD PMODE /RUNNING PLOTTER?\r
+ SZA CLA\r
+ JMP DXINC /NO, INCREMENT X AND CONTINUE\r
+ CIF 30\r
+ JMS I HPLOT / PLOT DATA (ARITH4,YSAVE)\r
+\r
+DXINC, TAD DELTAX /SETUP X FOR NEXT POINT\r
+ DCA ARITH1\r
+ TAD DELTAX+1\r
+ DCA ARITH2\r
+ DADD /INCREMENT BY DISTANCE BETWEEN POINTS\r
+ JMS CURSES /CURSOR REACHED?\r
+ SKP /YES\r
+ JMP I DISPS /NO\r
+ TAD KM0027\r
+ DCA CRCNTR\r
+ CRCNTR=TEMP01 /INTENSIFY CURSOR\r
+ DIXY\r
+ ISZ CRCNTR /POSITION\r
+ JMP .-2\r
+ JMP I DISPS\r
+\f/LOCAL CROSSPAGE\r
+TMESSZ, TMESS\r
+\r
+/LOCAL CONSTANTS\r
+K0777, 777\r
+K1000, 1000\r
+K0022, +022\r
+\r
+/SUBROUTINE TO MOVE TOWARD CURSOR\r
+CURSES, 0\r
+ ISZ CURSE1\r
+ SKP /NOT AT CURSOR1\r
+ JMP I CURSES /EXIT, AT CURSOR1\r
+ ISZ CURSE2\r
+ ISZ CURSES /NOT AT CURSOR, EXIT TO CALL+2\r
+ JMP I CURSES /IF AT CURSOR2, EXIT TO CALL+1\r
+\r
+/SUBROUTINE TO CHECK BLOCK AND LINK TO NEXT IF REQUIRED\r
+/EXIT TO CALL +2 IF END OF FILE REACHED\r
+BLKCNS, 0\r
+ TAD TSKIP /MOVE GETPNT TO NEXT DATA POINT\r
+ TAD GETPNT\r
+ DCA GETPNT\r
+ ISZ BLCNTR /BLOCK COMPLETE?\r
+ JMP I BLKCNS /NO, CONTINUE\r
+ JMS GCDFS /YES, END OF FILE?\r
+ SNA /L1: -COUNT FOR NEXT BLOCK (*)\r
+ ISZ BLKCNS /END OF FILE EXIT TO CALL+2(*)\r
+ DCA BLCNTR /RESET COUNTER(*)\r
+ TAD I GETPNT /L2: CDF N (*)\r
+ DCA GCDF /RESET DATA FIELD (*)\r
+ TAD I GETPNT /L3: START OF NEW BLOCK-1(*)\r
+ DCA GETPNT /RESET DATA POINTER(*)\r
+ CDF 0 /(*)\r
+ JMP I BLKCNS\r
+\r
+/SUBROUTINE TO SET DATA FIELD AND GET 1 WORD\r
+GCDFS, 0\r
+GCDF, CDF /CURRENT DATA FELD\r
+ TAD I GETPNT /GET DATA (*)\r
+ JMP I GCDFS /(*)\r
+\f/KEYBOARD LIST\r
+KBDCHK, +221 /CTRL/Q\r
+ -215 /CR\r
+\r
+*7200\r
+/TYPE DATA IN JOB\r
+TDATA, JMS PRETYP\r
+ DCA TSKIP /SKIP NOTHING\r
+TYPLUP, TAD TJTYPE /JOB TYPE: 1, 2, OR 3\r
+ CMA IAC\r
+ DCA TYPCNT\r
+ TYPCNT=TEMP02\r
+ JMS I CRLFX /NEW LINE\r
+ TAD CHANNL /TYPE DATA POINT #\r
+ JMS NUMTYP\r
+ JMS SHFTYP /TYPE SCALED MEAN IN MV\r
+ ISZ TYPCNT /CF COMPUTED?\r
+ SKP /YES\r
+ JMP TYPEND /NO\r
+ JMS SHFTYP /TYPE SCALED CF IN MV\r
+ ISZ TYPCNT /TREND COMPUTED?\r
+ JMS ABSTYP /TYPE 1000T\r
+TYPEND, JMS I CURSEY /REACHED SECOND CURSOR?\r
+ JMP TYPDUN /YES\r
+ ISZ CHANNL /NO\r
+ JMS I BLKCNY /CHECK FOR END OF JOB\r
+ JMP TYPLUP /NOT ENDED, CONTINUE\r
+TYPDUN, CLA CLL CMA\r
+ TAD SFACTR\r
+ DCA SFACTR\r
+ JMS I CRLFX /NEW LINE\r
+ JMP I DISJOY /DONE. RETURN TO DISPLAY\r
+\r
+/LOCAL CONSTANTS\r
+K0254, 254 /ASCII COMMA\r
+K0257, 257 \r
+KMD1K, -1750 /-1000(10)\r
+KMCTRL, -221\r
+KMD100, -144 /-100(10)\r
+KMD010, -12 /-10(10)\r
+\r
+/LOCAL CROSSPAGE\r
+CRLFX, CRLFS\r
+TYPEY, TYPES\r
+BLKCNY, BLKCNS\r
+DISJOY, DISJOB\r
+GDATAY, GDATAS\r
+GCDFSY, GCDFS\r
+CURSEY, CURSES\r
+SGNTYX, SGNTYP\r
+\f/GET DOUBLEWORD DATA POINT, SCALE BY 4, SIGN EXTEND, TYPE SIGNED\r
+SHFTYP, 0\r
+ JMS I GDATAY /GET DOUBLEWORD AND SCALE BY SF\r
+ JMS I SGNTYX /TYPE SIGNED VALUE IN AC\r
+ JMP I SHFTYP\r
+\r
+/TYPE ABSOLUTE VALUE SINGLE WORD IN DATA BLOCK\r
+ABSTYP, 0\r
+ JMS I GCDFSY /GET DATA WORD (*)\r
+ CDF 0 /(*)\r
+ JMS NUMTYP /TYPE DECIMAL VALUE IN AC\r
+ JMP I ABSTYP\r
+\r
+/TYPE DECIMAL VALUE IN AC\r
+NUMTYP, 0\r
+ DCA ARITH4 /# TO RADIX DEFLATE\r
+ TAD KMD1K /REDUCE BY FACTORS OF 1000(10)\r
+ JMS GDIGIT /TYPE DIGIT FOR 1000'S\r
+ TAD KMD100 /REDUCE BY FACTORS OF 100(10)\r
+ JMS GDIGIT /TYPE DIGIT FOR 100'S\r
+ TAD KMD010 /REDUCE BY FACTORS OF 10'S\r
+ JMS GDIGIT /TYPE DIGIT FOR 10'S\r
+ CLA CMA /REDUCE BY FACTORS OF 1\r
+ JMS GDIGIT /TYPE DIGIT FOR 1'S\r
+ TAD K0254\r
+ JMS I TYPEY /TYPE 1 COMMA\r
+ JMP I NUMTYP\r
+\r
+/SUBROUTINE SETS UP FOR TYPING\r
+PRETYP, 0\r
+ JMS I CRLFX /<CRLF>\r
+ CLA CMA /MOVE POINTER BACK TO SWEEP COUNT\r
+ TAD GETPNT\r
+ DCA GETPNT\r
+ JMS ABSTYP /# OF SWEEPS IN AVERAGE\r
+ TAD SFACTR /SCALE FACTOR\r
+ JMS I SGNTYX\r
+ CLA CLL IAC /TYPEOUT IS IN MV (2MV/COUNT)\r
+ TAD SFACTR\r
+ DCA SFACTR\r
+ DCA CHANNL /DATA POINT # INIT TO 0\r
+ CHANNL=TEMP16\r
+PRESKP, JMS I CURSEY /LOOK FOR FIRST CURSOR\r
+ JMP I PRETYP /FOUND IT, EXIT\r
+ ISZ CHANNL /NO CURSOR YET, INDEX POINT #\r
+ TWO\r
+ JMS I BLKCNY /STEP THRU DATA POINT\r
+ JMP PRESKP /MORE DATA POINTS, CONTINUE\r
+ JMP TYPDUN /END OF DATA POINTS AND NO CURSOR, GO BACK TO DISPLAY.\r
+\r
+\f/SUBROUTINE TO PRINT MESSAGE AND WAIT FOR CR\r
+TMESS, 0\r
+ TAD I TMESS /ADDR OF MESS-1 AT CALL+1\r
+ DCA TYPNTR\r
+ TYPNTR=13\r
+ ISZ TMESS /EXIT TO CALL+2\r
+ TAD I TYPNTR /GET NEXT CHARACTER\r
+ SNA /0 INDICATES END OF MESS.\r
+ JMP TWAIT /END\r
+ JMS I TYPEY /TYPE CHARACTER\r
+ JMP .-4 /CONTINUE\r
+\r
+TWAIT, KSF /END, WAIT FOR CR\r
+ JMP .-1\r
+ KRB\r
+ BRAN\r
+ KBDCHK\r
+ JMP I DISJOY /^Q TYPED, RESTART DISPLAY\r
+ JMS I CRLFX /C.R. TYPED, ECHO IT\r
+ JMP I TMESS /OTHER OR CR, RESUME\r
+\r
+/FINDS DIGIT AND TYPES IT\r
+GDIGIT, 0\r
+ DCA ARITH1 /FACTOR TO DEFLATE BY\r
+ DCA NDIGIT /DIGIT=0\r
+ NDIGIT=TEMP01\r
+ TAD ARITH4\r
+GLOOP, DCA ARITH4 /SAVE NEW REDUCED ARGUMENT\r
+ TAD ARITH4 /AND PREPARE TO REDUCE AGAIN\r
+ CLL\r
+ TAD ARITH1 /TRIAL SUBTRACTION\r
+ ISZ NDIGIT /INDEX DIGIT\r
+ SZL\r
+ JMP GLOOP /SUBTRACT SOME MORE\r
+ CLA /THAT'S ALL FOR THIS DIGIT\r
+ TAD K0257 /DIGIT IS NDIGIT-1\r
+ TAD NDIGIT /TYPE ASCII\r
+ JMS I TYPEY\r
+ KSF /CHECK FOR CTRL Q\r
+ JMP I GDIGIT /NO KEY, EXIT\r
+ KRB /KEY, BUT IS IT CTRL Q?\r
+ TAD KMCTRL\r
+ SZA CLA\r
+ JMP I GDIGIT /NO, EXIT\r
+ JMP TYPDUN /YES RESUME DISPLAY\r
+\r
+\r
+ ZBLOCK 5\r
+\f/INTEGRATE DATA BETWEEN CURSORS\r
+IDATA, JMS PRETYP /INITIALIZE TYPEOUT\r
+ TAD CHANNL /LO LIMIT OF INTEGRATION\r
+ JMS NUMTYP\r
+ DCA AVGSUM /CLEAR PARTIAL SUMS\r
+ AVGSUM=TEMP21\r
+ DCA CFLSUM\r
+ CFLSUM=TEMP22\r
+ DCA AVGFLG /CLEAR OFLO FLAGS\r
+ AVGFLG=TEMP14\r
+ DCA CFLFLG\r
+ CFLFLG=TEMP13\r
+ILOOP, TAD AVGSUM /PREPARE TO UPDATE SUMS\r
+ JMS UPSUM\r
+ ISZ AVGFLG /OVERFLOW RETURN, SET FLAG\r
+ DCA AVGSUM\r
+ CLA CMA /CF'S COMPUTED?\r
+ TAD TJTYPE\r
+ SNA CLA\r
+ JMP IDONE /NO, CONTINUE\r
+ TAD CFLSUM /YES UPDATE THAT SUM\r
+ JMS UPSUM\r
+ ISZ CFLFLG /OVERFLOW RETURN, SET FLAG\r
+ DCA CFLSUM\r
+ MTW /ALREADY PAST CF'S.\r
+IDONE, ISZ CHANNL /UPDATE DATA POINT #\r
+ JMS I BLKCNZ /MOVE TO NEXT DATA POINT\r
+ JMS I CURSEZ /REACHED SECOND CURSOR?\r
+ SKP /AT SECOND CURSOR OR OUT OF DATA\r
+ JMP ILOOP /CONTINUE\r
+ CLA CMA /GET # OF LAST DATA POINT\r
+ TAD CHANNL\r
+ JMS I NUMTYX\r
+ TAD AVGSUM /TYPE SUM\r
+ JMS SGNTYP\r
+ TAD AVGFLG /TYPE OVERFLOW MARK\r
+ JMS OMARK\r
+ CLA CMA /CFLSUM CALCULATED?\r
+ TAD TJTYPE\r
+ SNA CLA\r
+ JMP .+5 /NO, EXIT\r
+ TAD CFLSUM /YES, OUTPUT INTEGRAL OF CFL'S.\r
+ JMS I NUMTYX\r
+ TAD CFLFLG /OVERFLOW MARK IF REQ.\r
+ JMS OMARK\r
+ JMP I .+1 /TYPE SOME CRLF, RESTORE SCALE FACTOR\r
+ TYPDUN /AND RESUME DISPLAY\r
+\f/SUBROUTINE TO TYPE SIGNED # IN AC\r
+SGNTYP, 0\r
+ DCA ARITH4\r
+ TAD ARITH4\r
+ SPA CLA /TYPE CORRECT SIGN: " " OR "-"\r
+ TAD K0015 /MAKE A "-"\r
+ TAD K240\r
+ JMS I TYPEZ\r
+ TAD ARITH4\r
+ SPA\r
+ CMA IAC /GET ABS VALUE\r
+ JMS I NUMTYX /AND TYPE IT\r
+ JMP I SGNTYP\r
+\r
+/LOCAL CROSSPAGE\r
+NUMTYX, NUMTYP\r
+BLKCNZ, BLKCNS\r
+CURSEZ, CURSES\r
+TYPEZ, TYPES\r
+GDATAZ, GDATAS\r
+\r
+/SUBROUTINE TO GET SUM OF AC AND NEXT DATA POINT\r
+UPSUM, 0\r
+ DCA INADD /SAVE ADDEND\r
+ INADD=TEMP02\r
+ JMS I GDATAZ /GET AUGEND\r
+ SPA /SET LINK BIT EQUAL TO SIGN BIT\r
+ CML\r
+ TAD INADD /ADD ADDEND\r
+ DCA INSUM\r
+ INSUM=TEMP03\r
+ TAD INADD /MODIFY LINK BIT IN ACCORD WITH SIGN\r
+ SPA CLA\r
+ CML\r
+ TAD INSUM /WE HAVE FAKED A 13 BIT ADD\r
+ SPA SZL /ARE THE LINK AND SIGN BITS EQUAL?\r
+ CML CMA /1,1 TO 0,0; 0,1 TO 1,0; 1,0 TO 0,1\r
+ SMA SNL CLA /0,1 AND 1,0 ARE OVERFLOW\r
+ ISZ UPSUM /L,S WERE 0,0 OR 1,1; NO OVERFLOW\r
+ TAD INSUM /GET THE RESULT AND EXIT\r
+ JMP I UPSUM /TO CALL+1 (OVRFLO) OR CALL+2 (NORMAL)\r
+\r
+/SUBROUTINE TO TYPE "^" IF OVERFLOW (AC#0)\r
+OMARK, 0\r
+ SNA CLA /AC=0?\r
+ JMP I OMARK /YES, EXIT\r
+ TAD K0336 /NO, TYPE "^"\r
+ JMS I TYPEZ\r
+ JMP I OMARK\r
+\r
+/LOCAL CONSTANTS\r
+K0336, 336 /^\r
+K0015, 015\r
+K240, 240\r
+\f/KBD RESPONSE LIST\r
+KBDLST, +330 /X\r
+ +303 /C\r
+ +320 /P\r
+ +304 /D\r
+ +324 /T\r
+ +307 /G\r
+ +215 /CR\r
+ +311 /I\r
+ 227 /^W\r
+ 203 /^C\r
+ -232 /^Z\r
+KC7746, 7746\r
+\r
+\f/ AAVG4 PLOTTER SUBROUTINES\r
+/\r
+/ REV0.0 25-JAN-85 KJ.S.\r
+/\r
+\r
+ FIELD 3\r
+ *200\r
+\r
+H3PLOT, 0 / MOVE PEN; 'PA' COMMAND IS INITIATED\r
+ CLA / BY H3PENX\r
+ CDF 0\r
+ TAD I (ARITH4 / GET X POSITION\r
+ DCA XPOS\r
+ TAD I (YSAVE / GET Y POSITION\r
+ DCA YPOS\r
+ CDF 30\r
+\r
+ TAD PLPAFL\r
+ SNA CLA / FIRST 'PA'-COMMAND ?\r
+ JMP H3PLT1 / NO:\r
+ TAD (HTPLPA / YES: OUTPUT 'PA'\r
+ JMS TTO\r
+\r
+H3PLT1, TAD XPOS\r
+ TAD (1000 / MAKE STRAIGHT BINARY\r
+ AND (1777\r
+ JMS TDO\r
+ 0\r
+ TAD (",\r
+ JMS TCO\r
+\r
+ TAD YPOS\r
+ TAD (1000\r
+ AND (1777\r
+ JMS TDO\r
+ 0\r
+ TAD (",\r
+ JMS TCO\r
+\r
+ TAD PLPAFL\r
+ SNA CLA / FIRST PA COMMAND ?\r
+ JMP .+3 / NO: EXIT\r
+ TAD (HTPLRD\r
+ JMS TTO\r
+ DCA PLPAFL\r
+ CIF CDF 0\r
+ JMP I H3PLOT\r
+\r
+XPOS, 0\r
+YPOS, 0\r
+\r
+PLPAFL, 1\r
+HTPLPA, TEXT /SP1;PA/;0\r
+HTPLRD, TEXT /;PD;PA/;0\r
+\r
+H3PENU, 0 / PEN UP\r
+ CDF 30\r
+ CLA\r
+ TAD (HTPENU\r
+ JMS TTO\r
+ ISZ PLPAFL / SET FLAG\r
+ TAD H3PENU\r
+ JMP EXIT+1\r
+\r
+ /1. TERMINATES A PROCEEDING 'PA'-COMMAND\r
+ /2. SETS PEN UP\r
+ /3. ERROR STATUS\r
+HTPENU, TEXT /;PU;OE;/;0\r
+\r
+H3PEND, 0\r
+ CDF 30\r
+ TAD (HTPEND\r
+ JMS TTO\r
+ ISZ PLPAFL\r
+ TAD H3PEND\r
+ JMP EXIT+1\r
+\r
+ /1. TERMINATES A PROCEEDING 'PA'-COMMAND\r
+ /2. SETS PEN UP\r
+ /3. ERROR STATUS\r
+HTPEND, TEXT /;PD;OE;/;0\r
+\r
+H3PLOF, 0\r
+ CDF 30\r
+ CLA\r
+ TAD (HTPLOF\r
+ JMS TTO\r
+ TAD H3PLOF\r
+ JMP EXIT+1\r
+\r
+ /1. TERMINATES A PROCEEDING 'PA'-COMMAND\r
+ /2. SETS PEN UP\r
+ /3. POSITIONS PEN TO UPPER LEFT CORNER\r
+ /4. REMOVES PEN\r
+ /5. ERROR STATUS\r
+HTPLOF, TEXT /;PU;PA0,1150;SP0;OE;/;0\r
+\r
+EXIT, 0\r
+ DCA EXIT\r
+ JMS TRI / READ ERROR STATUS\r
+ TAD (-260\r
+ SNA / ERROR NUMBER = 0 ?\r
+ JMP EXITA / YES:\r
+ TAD (260 / NO:\r
+ TLS / TYPE NUMBER\r
+ CLA\r
+ CIF CDF 0\r
+ JMP I (DISJOB / CONTINUE DISPLAY\r
+\r
+EXITA, CIF CDF 0\r
+ JMP I EXIT\r
+\r
+ PAGE\r
+\fH3PLON, 0 / INIT PLOTTER\r
+ CDF 30\r
+ CLA CLL\r
+ TAD (330 / SET INPUT DEV FOR ERROR CODE\r
+ JMS TIDC\r
+ TAD (340 / AND OUTPUT DEV TO 33/34\r
+ JMS TODC\r
+\r
+ CLA\r
+ TAD (HTPLON\r
+ JMS TTO / OUTPUT ASCII STRING\r
+\r
+ TAD H3PLON\r
+ JMP EXIT+1\r
+\r
+ /1. INITIALIZATION FOR DIN A4 SIZE\r
+ /2. PLOT HEADER\r
+HTPLON, TEXT /$[$.N;19:$[$.H32;;17:IN;PS4;RO90;IP975,3800,7300,9800;/\r
+ TEXT /IW;SC0,1023,0,1023;SP0;OE;/;0\r
+\r
+H3PLGR, 0 / PLOT GRID\r
+ CDF 30\r
+ CLA\r
+ TAD (HTPLGR\r
+ JMS TTO\r
+ TAD H3PLGR\r
+ JMP EXIT+1\r
+\r
+ PAGE\r
+\f\r
+ /1. PLOT GRID WITH DIFFERENT PEN SIZES\r
+HTPLGR, TEXT /$$SP1;PA0,0;PD;PA0,256,-15,256,0,256,/\r
+ TEXT /0,512,-15,512,0,512,0,768,-15,768,0,768,0,1023,/\r
+ TEXT /1023,1023,1023,-15,1023,0,819,0,819,-15,819,0,/\r
+ TEXT /614,0,614,-15,614,0,410,0,410,-15,410,0,/\r
+ TEXT /205,0,205,-15,205,0,0,0,0,-15,0,0;PU;/\r
+ TEXT /SR1.5,2.2;PA-8,-55;LB0$C$PA176,-55;LB100$C$/\r
+ TEXT /PA381,-55;LB200$C$PA585,-55;LB300$C$/\r
+ TEXT /PA790,-55;LB400$C$PA994,-55;LB500$C$/\r
+ TEXT /SR1.8,2.6;PA650,-120;LBZEIT [%MS%]$C$/\r
+ TEXT /SR1.5,2.2;PA-68,245;LB-1$C$PA-68,501;LB 0$C$/\r
+ TEXT /PA-68,757;LB 1$C$/\r
+ TEXT /SP2;PA0,96;PD;PA1023,96;/\r
+ TEXT /PU;PA1023,128;PD;PA0,128;PU;PA0,160;PD;PA1023,160;/\r
+ TEXT /PU;PA1023,512;PD;PA0,512;PU;SP0;OE;/\r
+ 0\r
+\r
+ PAGE\r
+\r
+ XLIST\r
+\f/ TRI.PA\r
+/\r
+/ TTY READ INPUT\r
+/\r
+/ READS CHARACTER FROM TTY\r
+/\r
+/ ENTRY: AC = NO CARE\r
+/ EXIT: AC = CHARACTER\r
+/\r
+/ SUBRS: NONE\r
+/\r
+/ 02-MAY-84 REV 0.0 KJ.S.\r
+/ 18-OCT-84 REV 0.1 KJ.S. HARDWARE INDEPENDENT\r
+/\r
+\r
+TRI, 0\r
+ CLA\r
+TIKSF, KSF\r
+ JMP .-1\r
+TIKRB, KRB\r
+ AND (177\r
+ TAD (200\r
+ JMP I TRI\r
+\f/ TIDC.PA\r
+/\r
+/ CHANGE SERIAL INPUT DEVICE CODE\r
+/\r
+/ ENTRY: AC = XNNX NN = DEV.CODE\r
+/ EXIT: AC = 0\r
+/\r
+/ SUBR: LOCATINONS IN TRI ARE CHANGED\r
+/\r
+/ 18-OCT-84 REV 0.0 KJ.S.\r
+/\r
+\r
+TIDC, 0\r
+ AND (770\r
+ DCA TIDCSV\r
+ TAD (6001\r
+ TAD TIDCSV\r
+ DCA TIKSF\r
+ TAD (6006\r
+ TAD TIDCSV\r
+ DCA TIKRB\r
+ JMP I TIDC\r
+\r
+TIDCSV, 0\r
+\r
+ PAGE\r
+\f/ TTI.PA\r
+/\r
+/ TELETYPE TEXT INPUT\r
+/\r
+/ READS INPUT FROM TTY AND STORES 2 CHARACTERS/WORD\r
+/ INTO TEXT BUFFER. ACCEPTS ONLY PRINTABLE CHARACTERS.\r
+/ ALL OTHER INPUT AND CHARACTERS AFTER BUFFER-OVERFLOW\r
+/ IS ECHED AS 'BELL'. THE INPUT TERMINATOR IS NOT\r
+/ ECHOED.\r
+/\r
+/ ENTRY: AC = TERMINATOR, 0 = CR\r
+/ ARG1 POINTER TO TEXT BUFFER\r
+/ ARG2 LENGTH OF TEXT BUFFER (WORDS)\r
+/ EXIT: AC = 0\r
+/\r
+/ SUBR TRI,TCO\r
+/\r
+/ 16-JUL-84 REV 0.0 KJ.S.\r
+/ 22-JUL-84 REV 0.1 KJ.S. SOME BUGS REMOVED\r
+/ 23-JUL-84 REV 0.2 KJ.S. BUG AFTER 'DEL' REM.\r
+/\r
+\r
+TTI, 0\r
+ SNA / AC = TERMINATOR\r
+ TAD (215 / AC = 0 TERMINATOR = CR\r
+ AND (377\r
+ CIA\r
+ DCA TTITM / SAVE\r
+ TAD I TTI / GET ARG1 = BUFFER POINTER\r
+ DCA TTIBPT\r
+ ISZ TTI\r
+ CLA CLL\r
+ TAD I TTI / GET ARG2 = BUFFER LENGTH\r
+ RAL\r
+ CIA\r
+ IAC\r
+ DCA TTIBLN / = - BUFFER LENGTH * 2 + 1\r
+ ISZ TTI\r
+ DCA TTICNT / CLEAR CHARACTER COUNTER\r
+ DCA TTIXF / CLEAR EXIT FLAG\r
+\r
+TTI1, JMS TRI / READ INPUT\r
+ DCA TTICH\r
+\r
+ TAD TTICH\r
+ TAD TTITM\r
+ SZA CLA / TERMINATOR ?\r
+ JMP TTI2 / NO:\r
+ ISZ TTIXF / YES: SET EXIT FLAG\r
+ DCA TTICH / PUT 'ZERO' INTO BUFFER\r
+ JMP TTI3\r
+\r
+TTI2, TAD TTICH / CHECK INPUT\r
+ TAD (-240\r
+ SPA / CHAR.GE.240 ?\r
+ JMP TTI10 / NO: CONTROL CHAR\r
+ TAD (-100\r
+ SMA CLA / CHAR.LT.340 ?\r
+ JMP TTI10 / N0: CONTROL CHAR\r
+\r
+ TAD TTICNT / CHECK FOR BUFFER OVERFLOW\r
+ TAD TTIBLN\r
+ SMA CLA / COUNTER.LT.BUFFER*2 ?\r
+ JMP TTI10 / NO: BUFFER OVERFLOW\r
+\r
+ TAD TTICH / ECHO\r
+ JMS TCO\r
+ TAD TTICH / MAKE 6-BIT-ASCII\r
+ AND (77\r
+ DCA TTICH\r
+\r
+TTI3, CLA CLL\r
+ TAD TTICNT / CALCULATE BUFFER POINTER\r
+ RAR\r
+ TAD TTIBPT\r
+ DCA TTIPNT\r
+\r
+ SZL / LINK=MSB OF TTICNT.EQ.0 ?\r
+ JMP TTI4 / N0: 2. BYTE OF WORD\r
+ TAD TTICH / YES: 1. BYTE\r
+ BSW\r
+ JMP TTI5\r
+TTI4, TAD I TTIPNT / ADD 1.BYTE\r
+ AND (7700\r
+ TAD TTICH\r
+TTI5, DCA I TTIPNT / STORE IN BUFFER\r
+ ISZ TTICNT / INCREMENT COUNTER\r
+\r
+ TAD TTIXF\r
+ SNA CLA / EXIT ?\r
+ JMP TTI1 / NO: GET NEXT CHARACTER\r
+ JMP I TTI / YES:\r
+\r
+TTI10, CLA CLL / INPUT IS A CONTROL CHARACTER\r
+ TAD TTICH\r
+ TAD (-377\r
+ SNA CLA / CHAR.EQ.DEL ?\r
+ JMP TTI12 / YES:\r
+TTI11, TAD (207 / NO: ILLEGAL INPUT\r
+ JMS TCO / ECHO BELL\r
+ JMP TTI1 / CONTINUE\r
+\r
+TTI12, TAD TTICNT\r
+ SNA / BUFFER EMPTY ?\r
+ JMP TTI11 / YES:\r
+ TAD (-1 / NO: DECREMENT\r
+ DCA TTICNT\r
+ TAD (210 / BACKSPACE\r
+ JMS TCO\r
+ TAD (240\r
+ JMS TCO\r
+ TAD (210\r
+ JMS TCO\r
+ JMP TTI1\r
+\r
+\r
+TTITM, 0 / MINUS INPUT TERMINATOR\r
+TTIBPT, 0 / BUFFER START POINTER\r
+TTIBLN, 0 / MINUS LENGTH OF BUFFER\r
+TTIPNT, 0 / CURRENT BUFFER POINTER\r
+TTICNT, 0 / CURRENT LENGTH COUNTER\r
+TTISWD, 0 / INPUT CONTROL FLAG\r
+TTICH, 0 / LAST INPUT CHAR\r
+TTIXF, 0 / EXIT FLAG\r
+\r
+ PAGE\r
+\f/ TDO.PA\r
+/\r
+/ TYPES DECIMAL INTEGERS WITH DIFFERENT FORMATS\r
+/\r
+/ ENTRY: AC = NUMBER TO BE TYPED\r
+/ ARG1 BIT 0 IF SET, TYPE SIGNED OUTPUT\r
+/ BIT 1 IF SET, FILL FORMAT WITH ZEROS\r
+/ UNSIGNED OUTPUT ONLY, BIT 0 IGNORED\r
+/ BIT 6-11 OUTPUT FIELD WIDTH. IF ZERO,\r
+/ NO LEADING ZEROS OR SPACES\r
+/ EXIT: AC = 0\r
+/\r
+/ SUBR: TIO,TCO\r
+/\r
+/\r
+/ 19-OCT-84 REV 0.0 KJ.S.\r
+/\r
+\r
+TDO, 0\r
+ DCA TION0 / SAVE NUMBER\r
+ TAD I TDO\r
+ ISZ TDO\r
+ DCA TIOFL / SAVE FLAG\r
+ TAD TDOTST / POINTER TO HEXADECIMAL TABLE\r
+ JMS TDOHO / PROCEED\r
+ JMP I TDO\r
+\r
+TDOTST, .+1 / TABLE OF DECIMAL VALUES\r
+ 140 / -4000\r
+ 4060 / -2000\r
+ 6030 / -1000\r
+ 6340 / -800\r
+ 7160 / -400\r
+ 7470 / -200\r
+ 7634 / -100\r
+ 7660 / -80\r
+ 7730 / -40\r
+ 7754 / -20\r
+ 7766 / -10\r
+\f/ TOO.PA\r
+/\r
+/ TYPES OCTAL INTEGERS WITH DIFFERENT FORMATS\r
+/\r
+/ ENTRY: AC = NUMBER TO BE TYPED\r
+/ ARG1 BIT 0 IF SET, TYPE SIGNED OUTPUT\r
+/ BIT 1 IF SET, FILL FORMAT WITH ZEROS\r
+/ UNSIGNED OUTPUT ONLY, BIT 0 IGNORED\r
+/ BIT 6-11 OUTPUT FIELD WIDTH. IF ZERO,\r
+/ NO LEADING ZEROS OR SPACES\r
+/ EXIT: AC = 0\r
+/\r
+/ SUBR: TIO,TCO\r
+/\r
+/\r
+/ 18-OCT-84 REV 0.0 KJ.S.\r
+/ 18-OCT-84 REV 0.1 KJ.S. SOME BUGS REMOVED\r
+/ 19-OCT-84 REV 1.0 KJ.S. USING SUBR. TIO\r
+/\r
+\r
+TOO, 0\r
+ DCA TION0 / SAVE NUMBER\r
+ TAD I TOO\r
+ ISZ TOO\r
+ DCA TIOFL / SAVE FLAG\r
+ TAD TOOTST / POINTER TO OCTAL TABLE\r
+ JMS TDOHO / PROCEED\r
+ JMP I TOO\r
+\r
+TOOTST, .+1 / TABLE OF OCTAL VALUES\r
+ 4000\r
+ 6000\r
+ 7000\r
+ 0000\r
+ 7400\r
+ 7600\r
+ 7700\r
+ 0000\r
+ 7740\r
+ 7760\r
+ 7770\r
+\f/ THO.PA\r
+/\r
+/ TYPES HEXADECIMAL INTEGERS WITH DIFFERENT FORMATS\r
+/\r
+/ ENTRY: AC = NUMBER TO BE TYPED\r
+/ ARG1 BIT 0 IF SET, TYPE SIGNED OUTPUT\r
+/ BIT 1 IF SET, FILL FORMAT WITH ZEROS\r
+/ UNSIGNED OUTPUT ONLY, BIT 0 IGNORED\r
+/ BIT 6-11 OUTPUT FIELD WIDTH. IF ZERO,\r
+/ NO LEADING ZEROS OR SPACES\r
+/ EXIT: AC = 0\r
+/\r
+/ SUBR: TIO,TCO\r
+/\r
+/\r
+/ 19-OCT-84 REV 0.0 KJ.S.\r
+/\r
+\r
+THO, 0\r
+ DCA TION0 / SAVE NUMBER\r
+ TAD I THO\r
+ ISZ THO\r
+ DCA TIOFL / SAVE FLAG\r
+ TAD THOTST / POINTER TO DECIMAL TABLE\r
+ JMS TDOHO / PROCEED\r
+ JMP I THO\r
+\r
+THOTST, .+1 / TABLE OF HEXADECIMAL VALUES\r
+ 0000\r
+ 0000\r
+ 0000\r
+ 4000\r
+ 6000\r
+ 7000\r
+ 7400\r
+ 7600\r
+ 7700\r
+ 7740\r
+ 7760\r
+\f/ TCR CARRIAGE RETURN\r
+/\r
+/ MOVES CURSOR TO THE BEGINNING OF THE\r
+/ PRESENT LINE\r
+/\r
+/ ENTRY: AC = NO CARE\r
+/ EXIT: AC = 0\r
+/\r
+/ 10-APR-84 REV 0.0 KJ.S.\r
+/\r
+\r
+TCR, 0\r
+ CLA\r
+ TAD (215\r
+ JMS TCO / OUTPUT\r
+ CLA\r
+ JMP I TCR\r
+\r
+\f/ TNL NEW LINE\r
+/\r
+/ POSITIONS CURSOR TO BEGINNING\r
+/ OF NEXT LINE\r
+/\r
+/ ENTRY: AC = NO CARE\r
+/ EXIT: AC = 0\r
+/\r
+/ 10-APR-84 REV 0.0 KJ.S.\r
+/\r
+\r
+TNL, 0\r
+ JMS TCR\r
+ TAD (212\r
+ JMS TCO / LF\r
+ JMP I TNL\r
+\f\r
+TIOF, 0 / SUBROUTINE TO CHECK OUTPUT\r
+ AND (17 / FORMAT AND TYPE\r
+ DCA TIOPT / STORE\r
+ ISZ TIOCT / INCREMENT DIGIT COUNTER\r
+\r
+ TAD TIOZF\r
+ SZA CLA / ZERO FLAG = 0 ?\r
+ JMP TIOF2 / NO: TYPE DIGIT\r
+ TAD TIOPT / YES:\r
+ SZA CLA / DIGIT = 0 ?\r
+ JMP TIOF1 / NO:\r
+ TAD TIOFL / YES:\r
+ SNA CLA / FIELD WIDTH = 0 ?\r
+ JMP I TIOF / YES: EXIT\r
+ TAD TIOFL\r
+ TAD TIOCT\r
+ SPA CLA / FILL CHAR WITHIN FIELD ?\r
+ JMP I TIOF / NO: EXIT\r
+ TAD TIOFC / YES: TYPE FILL CHARACTER\r
+ JMP TIOF4\r
+\r
+TIOF1, TAD TIOFL\r
+ SNA / FIELD WIDTH = 0 ?\r
+ JMP TIOF2 / YES: NO FIXED FIELD WIDTH\r
+ TAD TIOCT / NO:\r
+ SPA CLA / DIGIT WITHIN FIELD ?\r
+ JMP TIOER / NO: FIELD WIDTH TOO SMALL\r
+TIOF2, ISZ TIOZF / SET ZERO FLAG\r
+ TAD TIOSG\r
+ SNA CLA / SIGN NEEDED ?\r
+ JMP TIOF3 / NO:\r
+ DCA TIOSG / CLEAR SIGN FLAG\r
+ TAD ("- / YES: TYPE IT\r
+ JMS TCO\r
+TIOF3, TAD TIOPT / TYPE DIGIT\r
+ TAD (-12\r
+ SMA / HEX - CHAR. ?\r
+ TAD (7 / YES: MAKE A LETTER\r
+ TAD (272 / NO: MAKE NUMBER\r
+TIOF4, JMS TCO\r
+ JMP I TIOF / EXIT\r
+\r
+ PAGE\r
+\f / SUBROUTINE FOR TDO,TOO,THO\r
+ / TION0 AND TIOFL MUST BE SET\r
+\r
+TDOHO, 0\r
+ DCA TIOPT / AC = TABLE POINTER\r
+ DCA TIOSG / CLEAR SIGN FLAG\r
+ TAD (240\r
+ DCA TIOFC / FILL CHAR = SPACE\r
+ TAD TIOFL\r
+ AND (2000\r
+ SNA CLA / FILL CHAR = ZERO ?\r
+ JMP TIOA / NO:\r
+ TAD (260 / YES:\r
+ DCA TIOFC\r
+ JMP TIOB / NO SIGN OPTION\r
+\r
+TIOA, TAD TIOFL\r
+ SMA CLA / SIGNED OUTPUT ?\r
+ JMP TIOB / NO:\r
+ TAD TION0 / YES: COMPLEMENT NEGATIV NUMBER\r
+ SMA / NEGATIV NUMBER ?\r
+ JMP TIOB / NO:\r
+ CIA / YES: COMPLEMENT\r
+ DCA TION0\r
+ ISZ TIOSG / SET SIGN FLAG\r
+\r
+TIOB, CLA\r
+ TAD TIOFL\r
+ AND (77 / GET FIELD WIDTH\r
+ DCA TIOFL / CLEAR UNUSED BITS\r
+ TAD TIOFL\r
+ SNA / FIELD WIDTH ZERO ?\r
+ JMP TIOD / YES:\r
+ CIA / NO: COMPLEMENT\r
+ TAD TIOSG / TAKE SIGN INTO ACCOUNT\r
+ TAD (4 / MAX 4 DIGIT\r
+ SMA / FILL CHARACTER NEEDED ?\r
+ JMP TIOD / NO:\r
+ DCA TIOCT / YES: -# OF SPACE TO FILL FORMAT\r
+\r
+TIOC, TAD TIOFC / TYPE\r
+ JMS TCO\r
+ ISZ TIOCT\r
+ JMP TIOC\r
+\r
+TIOD, CLA\r
+ TAD (-13 / # OF SUBTRACTIONS\r
+ DCA TIOCT / TO COUNTER\r
+ DCA TION1\r
+\r
+TIOE, CLA CLL / SUCCESSIV SUBTRACTIONS OF\r
+ TAD TION0 / DECIMAL VALUES FROM TABLE\r
+ TAD I TIOPT / SUBTRACTION\r
+ SZL / CARRY ?\r
+ DCA TION0 / YES, NEW VALUE\r
+ CLA\r
+ TAD TION1 / RESULT IN LINK\r
+ RAL\r
+ DCA TION1 / SHIFTED INTO TION1\r
+ ISZ TIOPT / INCREMENT POINTER\r
+ ISZ TIOCT / DONE ?\r
+ JMP TIOE / NO, CONTINUE\r
+\r
+ DCA TIOZF / CLEAR LEADING ZERO FLAG\r
+\r
+ TAD TIOSG\r
+ CIA\r
+ TAD (-5\r
+ DCA TIOCT / SET DIGIT COUNTER, 4 DIGITS + SIGN\r
+\r
+ TAD TION1 / 1. DIGIT\r
+ BSW\r
+ RTR\r
+ JMS TIOF\r
+\r
+ TAD TION1 / 2. DIGIT\r
+ RTR\r
+ RTR\r
+ JMS TIOF\r
+\r
+ TAD TION1 / 3. DIGIT\r
+ JMS TIOF\r
+\r
+ ISZ TIOZF / 4. DIGIT ALWAYS TYPED\r
+ TAD TION0 \r
+ JMS TIOF\r
+\r
+ JMP I TDOHO\r
+\r
+TIOER, TAD TIOFL / ERROR, FILL FORMAT WITH ****\r
+ CIA\r
+ DCA TIOCT\r
+ TAD ("*\r
+ JMS TCO / TYPE CHARACTER\r
+ ISZ TIOCT\r
+ JMP .-4\r
+ CLA\r
+ JMP I TDOHO / EXIT MAIN SUBROUTINE\r
+\r
+TION0, 0 / GETS LSD\r
+TION1, 0 / GETS 3 MSD\r
+TIOPT, 0 / POINTER\r
+TIOCT, 0 / COUNTER\r
+TIOFL, 0 / FLAGS\r
+TIOSG, 0 / SIGN FLAG\r
+TIOZF, 0 / ZERO SUPPRESS FLAG\r
+TIOFC, 0 / FILL CHARACTER\r
+\f/ TSO STRING OUTPUT\r
+/\r
+/ TYPES A STRING OF ASCII - CHARACTERS\r
+/ BUFFER CONTAINS ONE CHARACTER PER\r
+/ WORD AND MUST BE TERMINATED BY 0\r
+/\r
+/ ENTRY: AC = POINTER TO BUFFER\r
+/ EXIT: AC = 0\r
+/\r
+/ 10-APR-84 REV 0.0 KJ.S.\r
+/\r
+\r
+TSO, 0\r
+ DCA TSOPT / BUFFER POINTER\r
+TSOA, TAD I TSOPT / GET CHARACTER\r
+ SNA / CHARACTER.EQ.0 ?\r
+ JMP I TSO / YES: EXIT\r
+ JMS TCO / NO: PRINT\r
+ ISZ TSOPT\r
+ JMP TSOA\r
+ JMP TSOA\r
+\r
+TSOPT, 0\r
+\r
+ PAGE\r
+\f/ TCO CHARACTER OUTPUT\r
+/\r
+/ TYPES ONE ASCII-CHARACTER CALLING\r
+/ CP-ROUTINE, RESPONS TO CTRL/S - CTRL/Q\r
+/\r
+/ ENTRY: AC = CHARACTER\r
+/ EXIT: AC = 0 LINK UNCHANGED\r
+/\r
+/ 10-APR-84 REV 0.0 KJ.S.\r
+/ 18-OCT-84 REV 0.1 KJ.S. HARDWARE INDEPENDENT\r
+/ 18-OCT-84 REV 0.2 KJ.S. LINK PRESERVED\r
+/\r
+\r
+TCO, 0\r
+ DCA TCOSV / SAVE CHAR\r
+ JMS TOKSF / CHECK XON/XOFF\r
+ JMP TCO2\r
+ JMS TOKRB\r
+ AND (177\r
+ TAD (7755\r
+ SZA CLA / CTRL/S ?\r
+ JMP TCO2 / NO:\r
+TCO1, CLA / YES: WAITING FOR CTRL/Q\r
+ JMS TOKSF\r
+ JMP .-1\r
+ JMS TOKRB\r
+ AND (177\r
+ TAD (7757\r
+ SZA CLA / CTRL/Q ?\r
+ JMP TCO1 / NO: WAIT\r
+TCO2, TAD TCOSV / YES: TYPE CHARACTER\r
+ JMS TOTLS\r
+ JMS TOTSF\r
+ JMP .-1\r
+ CLA\r
+ JMP I TCO\r
+\r
+TCOSV, 0\r
+\r
+/ SUBROUTINES WITH I/O INSTRUCTIONS\r
+/ DEVICE-CODE CAN BE SET BY TODC\r
+\r
+TOKSF, 0\r
+ KSF\r
+ SKP\r
+ ISZ TOKSF\r
+ JMP I TOKSF\r
+TOKRB, 0\r
+ KRB\r
+ JMP I TOKRB\r
+TOTSF, 0\r
+ TSF\r
+ SKP\r
+ ISZ TOTSF\r
+ JMP I TOTSF\r
+TOTLS, 0\r
+ TLS\r
+ JMP I TOTLS\r
+\f/ TODC.PA\r
+/\r
+/ CHANGE SERIAL OUTPUT DEVICE AND THE CORRESPONDING\r
+/ INPUT DEVICE FOR XON/XOFF PROTOCOL\r
+/\r
+/ ENTRY: AC = XNNX NN = OUTPUT, NN-1 = INPUT DEVICE\r
+/ EXIT: AC = 0\r
+/\r
+/ 18-OCT-84 REV 0.0 KJ.S.\r
+/\r
+\r
+TODC, 0\r
+ AND (770\r
+ DCA TODCSV\r
+ TAD (6001\r
+ TAD TODCSV\r
+ DCA TOTSF+1\r
+ TAD (6006\r
+ TAD TODCSV\r
+ DCA TOTLS+1\r
+ TAD (-10 / CHANGE INPUT\r
+ TAD TODCSV\r
+ DCA TODCSV\r
+ TAD (6001\r
+ TAD TODCSV\r
+ DCA TOKSF+1\r
+ TAD (6006\r
+ TAD TODCSV\r
+ DCA TOKRB+1\r
+ JMP I TODC\r
+\r
+TODCSV, 0\r
+\f PAGE\r
+/ TTO TEXT OUTPUT\r
+/\r
+/ TYPE TEXT FROM 6-BIT ASCII BUFFER CREATED WITH\r
+/ PAL8 TEXT PSEUDO-OP.\r
+/\r
+/ $ - OPTION:\r
+/ CHARACTERS BETWEEN TWO $-CHARACTERS ARE CONVERTED\r
+/ TO CONTROL CHARACTERS.\r
+/\r
+/ # - OPTION:\r
+/ MULTIPLE OUTPUT OF SAME CHARACTER. THE FIRST CHARACTER\r
+/ AFTER # IS TREATED AS NUMBER ( LOWER 6 BITS ) AND\r
+/ THE SECOND CHARACTER IS PRINTED.\r
+/\r
+/ NOTE:\r
+/ IF THE $- AND %-OPTIONS ARE USED, THE TEXT BUFFER MUST\r
+/ TERMINATED WITH A ZERO WORD. THIS FEATURE COMBINES\r
+/ SEVERAL TEXT BUFFERS TO ONE BUFFER WITH THE /F OPTION.\r
+/\r
+/ % - OPTION\r
+/ CHARACTERS BETWEEN TWO "-CHARACTERS ARE CONVERTED\r
+/ TO LOWER CASE CHARACTER. MAY BE COMBINED WITH\r
+/ OTHER OPTIONS\r
+/\r
+/ ENTRY: AC = POINTER TO TEXT-BUFFER\r
+/ EXIT: AC = 0\r
+/\r
+/ 06-APR-84 REV 0.0 KJ.S.\r
+/ 09-APR-84 REV 0.1 KJ.S. LOCATIONS RENAMED\r
+/ 11-APR-84 REV 0.2 KJ.S. OUTPUT CODE CHANGED\r
+/ 09-FEB-85 REV 0.3 KJ.S. #-OPTION ADDED\r
+/ 13-FEB-85 REV 0.4 KJ.S. %-OPTION ADDED\r
+/\r
+\r
+TTO, 0\r
+ DCA TTOPNT / SAVE POINTER TO TEXT\r
+ DCA TTOCFL / CLEAR CONTROL-FLAG\r
+ DCA TTOEFL / AND END-FLAG\r
+\r
+TTOA, CLA\r
+ TAD I TTOPNT\r
+ SNA / ZERO WORD ?\r
+ JMP TTOR / YES: END OF BUFFER\r
+ BSW\r
+ JMS TTOB\r
+ TAD I TTOPNT\r
+ JMS TTOB\r
+ ISZ TTOPNT\r
+ JMP TTOA\r
+\r
+TTOB, 0\r
+ AND (77 / MAKE 6-BIT ASCII\r
+ SNA / CHAR = 0 ?\r
+ JMP TTOB2 / YES: CHECK IF END OF BUFFER\r
+ TAD (-43\r
+ SNA / CHAR = 43 = # ?\r
+ JMP TTOB3 / YES: REP. OPTION\r
+ TAD (-1\r
+ SNA / CHAR = 44 = $ ?\r
+ JMP TTOB1 / YES: TOGGLE CONTROL FLAG\r
+ TAD (-1\r
+ SNA / CHAR = 45 = % ?\r
+ JMP TTOB5 / YES: TOGGLE CONTROL FLAG\r
+ TAD (5 / NO, PRINT CHARACTER\r
+ SPA / MAKE 8-BIT ASCII:\r
+ TAD (100 / 01-37 TO 301-337\r
+ TAD (240 / 40-77 TO 240-277\r
+ TAD TTOCFL / ADD CTRL SET BY $\r
+ TAD TTOLFL / AND LOWER FLAG SET BY %\r
+ DCA TTOSV\r
+\r
+ ISZ TTONFL\r
+ SKP\r
+ JMP TTOB4 / LAST CHAR WAS #, MAKE NUMBER\r
+TTOB0, TAD TTOSV\r
+ JMS TCO\r
+ ISZ TTONFL\r
+ JMP TTOB0 / LOOP FOR #-OPTION\r
+ CLA CLL CMA RAL / DONE, FLAG = -2\r
+ JMP TTOBX\r
+\r
+TTOB5, CLA / TOGGLE LOWER CASE FLAG\r
+ TAD TTOLFL\r
+ SNA CLA / LOWER CASE FLAG ZERO ?\r
+ TAD (40 / YES: SET TO 40\r
+ DCA TTOLFL / NO: CLEAR FLAG\r
+ JMP TTOB6\r
+\r
+TTOB1, CLA / TOGGLE CONTROL CHAR FLAG\r
+ TAD TTOCFL\r
+ SNA CLA / CONTROL FLAG ZERO ?\r
+ TAD (-100 / YES: SET TO -100\r
+ DCA TTOCFL / NO: CLEAR FLAG\r
+TTOB6, CLA IAC / SET END FLAG\r
+ DCA TTOEFL\r
+ JMP I TTOB\r
+\r
+TTOB2, CLA\r
+ TAD TTOEFL\r
+ SNA CLA / TTOEFL.GT.0 ?\r
+ JMP TTOR / NO: END OF BUFFER, EXIT\r
+ JMP I TTOB / YES: IGNORE ZERO CHAR AFTER USE OF $\r
+\r
+TTOB3, CLA CMA / CHAR = #\r
+ JMP TTOBX / NEXT CHAR IS CONVERT TO NUMBER\r
+\r
+TTOB4, CLA IAC / MAKE NUMBER\r
+ TAD TTOSV\r
+ AND (77\r
+ CIA\r
+\r
+TTOBX, DCA TTONFL / SET FLAG\r
+ JMP I TTOB\r
+\r
+TTOR, CLA / CLEAR ALL FLAGS\r
+ DCA TTOCFL\r
+ DCA TTOEFL\r
+ JMP I TTO / AND EXIT\r
+\r
+TTOPNT, 0\r
+TTOCFL, 0\r
+TTOLFL, 0\r
+TTOEFL, 0\r
+TTONFL, -2\r
+TTOSV, 0\r
+\r
+ PAGE\r
+\f\f\f\f\1a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
\ No newline at end of file