home *** CD-ROM | disk | FTP | other *** search
/ Antic Magazine 1988 August / Antic_Magazine_1988_08_Antic.atr / numprint.m65 < prev    next >
Text File  |  2023-02-26  |  6KB  |  1 lines

  1. 0100 ;PRINT-USR (NUMPRINT.M65)¢0140 ;     BY MARC ESCOLA¢0150 ;(c)1988, ANTIC PUBLISHING¢0170 ;¢0180 VVTP =  $86¢0190 STMCUR = $8A¢0200 FR0 =   $D4¢0210 FILL1 = $D4¢0220 FILL2 = $D5¢0230 VADR =  $CB¢0240 SADR =  $CD¢0250 LEN =   $CF¢0260 LBUFF = $057F¢0270 ASROT = $D8E6¢0280 FPROT = $D9AA¢0290 ;¢0300 ; BASIC CALL:¢0310 ;¢0320 ; X=USR(1536,ADR(STR$),LEN(STR$))¢0330 ;¢0340     *=  1536¢0350 ;¢0360 ; GET STRING ADDRESS FROM STACK¢0370 ;¢0380     PLA         ;PULL ARGS COUNT¢0390     PLA         ;HIGH BYTE STR¢0400     STA SADR+1¢0410     PLA         ;LOW BYTE STR¢0420     STA SADR¢0430     PLA         ;IGNORE LEN HIGH¢0440     PLA         ;LOW BYTE LEN¢0450     STA LEN     ;SAVE IN LEN¢0460     DEC LEN     ;RELATIVE TO ZERO¢0470 ;¢0480 ; FIND TOKEN IN BASIC LINE¢0490 ;¢0500     LDY #2¢0510 SEARCH¢0520     LDA (STMCUR),Y¢0530 EQUAL¢0540     CMP #$2D    ;EQUAL SIGN¢0550     BEQ USER    ;CHECK FOR USR¢0560     INY ¢0570     BPL SEARCH  ;TRY NEXT¢0571 ;¢0580 USER¢0590     INY ¢0600     LDA (STMCUR),Y¢0610     CMP #$3F    ;USR TOKEN¢0620     BNE EQUAL   ;START OVER¢0621 ;¢0630 TOKEN¢0640     DEY         ;POINT TO¢0650     DEY         ;TOKEN¢0660     LDA (STMCUR),Y¢0670     AND #$7F    ;MASK HIGH BIT¢0680     LDY #0      ;CLEAR HIGH ADR¢0690     STY VADR+1¢0700     ASL A¢0710     ASL A       ;MULT BY 8¢0720     ROL VADR+1¢0730     ASL A¢0740     ROL VADR+1¢0750     CLC         ;THEN¢0760     ADC VVTP    ;ADD VVTP VALUE¢0770     STA VADR    ;TO FORM¢0780     LDA VVTP+1  ;ENTRY¢0790     ADC VADR+1  ;ADDRESS¢0800     STA VADR+1¢0810 ;¢0820 ; MOVE TOKEN VALUE TO FR0¢0830 ;¢0840     LDX #7      ;MOVE 8 BYTES¢0850     LDY #9      ;POINT PAST TYPE¢0860 VALUE¢0870     LDA (VADR),Y¢0880     STA FR0,X¢0890     DEY ¢0900     DEX ¢0910     BPL VALUE   ;NEXT BYTE¢0911 ;¢0920     LDA #'0     ;SET LBUFF ZERO¢0930     STA LBUFF¢0940     JSR ASROT   ;CONVERT TO ASCII¢0950 ZCHECK¢0960     LDA LBUFF   ;CHECK FOR¢0970     CMP #'0     ;LEADING ZERO¢0980     BNE CHECK   ;NO, CHECK FILL¢0990 ;¢1000 ; SHIFT NUMBER LEFT ONE BYTE¢1010 ;¢1020     LDX #0¢1030     LDY #1¢1040 SHIFT¢1050     LDA LBUFF,Y¢1060     STA LBUFF,X¢1070     INY ¢1080     INX ¢1090     CMP #127    ;REACHED END?¢1100     BMI SHIFT   ;NO.¢1101 ;¢1110     BPL ZCHECK¢1120 ;¢1130 ; CHECK FOR FILL CHARACTER¢1140 ;¢1150 CHECK¢1160     LDA #$20    ;USE BLANK¢1170     STA FILL1   ;AS DEFAULT¢1180     STA FILL2   ;FILL CHAR¢1190     LDY #1¢1200     LDA (SADR),Y¢1210     CMP #'$     ;FLOAT DOLLAR¢1220     BEQ FLOAT¢1221 ;¢1230     CMP #'*     ;FLOAT ASTRIK¢1240     BEQ FLOAT¢1241 ;¢1250     BNE NOFLOAT ;USE DEFAULT¢1251 ;¢1260 FLOAT¢1270     STA FILL1¢1280     LDA #'X¢1290     STA (SADR),Y ;REPLACE IT¢1300 NOFLOAT¢1310     DEY ¢1320     LDA (SADR),Y¢1330     CMP #'X     ;FIRST AN X?¢1340     BEQ NOTFIL  ;USE DEFAULT¢1341 ;¢1350     STA FILL2¢1360     LDA #'X¢1370     STA (SADR),Y ;REPLACE IT¢1380 NOTFIL¢1390 ;¢1400 ; CHECK STRING FOR ENDING¢1410 ; INTEGER POSITION¢1420 ;¢1430     LDY LEN     ;LAST BYTE¢1440 STRDEC¢1450     LDA (SADR),Y¢1460     CMP #'.¢1470     BEQ SFINISH ;FOUND IT¢1471 ;¢1480     DEY ¢1490     BPL STRDEC¢1491 ;¢1500     LDY LEN     ;NO DEC POS¢1510     BPL SDONE¢1511 ;¢1520 SFINISH¢1530     DEY         ;WAS POS ZERO?¢1540     BPL SDONE   ;NO¢1541 ;¢1550     INY         ;YES¢1560 SDONE¢1570 ;¢1580 ; CHECK NUMBER FOR ENDING¢1590 ; INTEGER POSITION¢1600 ;¢1610     LDX #0¢1620 NUMDEC¢1630     LDA LBUFF,X¢1640     BMI NDONE¢1641 ;¢1650     CMP #'.¢1660     BEQ NFINISH¢1661 ;¢1670     INX ¢1680     BPL NUMDEC¢1681 ;¢1690 NFINISH¢1700     DEX         ;WAS POS ZERO?¢1710     BMI INTFILL ;YES, FILL IT¢1711 ;¢1720 NDONE¢1730 ;¢1740 ; THIS ROUTINE MOVES THE¢1750 ; INTEGERS TO THE STRING¢1760 ;¢1770 MOVELEFT¢1780     LDA LBUFF,X ;CHECK FOR NEG¢1790     CMP #'-¢1800     BNE NOTNEG¢1801 ;¢1810     LDX #0      ;FORCE END¢1820     BEQ PLUS    ;GO PUT NEQ¢1821 ;¢1830 NOTNEG¢1840     LDA (SADR),Y ;CHECK POS¢1850     CMP #'X     ;PUT HERE?¢1860     BEQ PUTINT  ;YES¢1861 ;¢1870     DEY         ;TRY NEXT¢1880     BMI INTEND  ;STRING FULL¢1881 ;¢1890     BPL MOVELEFT¢1891 ;¢1900 PUTINT¢1910     LDA LBUFF,X¢1920     BPL PLUS¢1921 ;¢1930     AND #$7F    ;MASK HIGH BIT¢1940 PLUS¢1950     STA (SADR),Y ;STORE IT¢1960     DEY ¢1970     BMI INTEND¢1971 ;¢1980     DEX ¢1990     BPL MOVELEFT¢1991 ;¢2000 INTFILL¢2010     LDA FILL1   ;USE FLOAT¢2020     STA (SADR),Y¢2030     LDA FILL2   ;USE FILL¢2040     STA FILL1¢2050     DEY ¢2060     BPL INTFILL ;FILL IT UP¢2061 ;¢2070 INTEND¢2080 ;¢2090 ; CHECK STRING FOR FRACTIONS¢2100 ;¢2110     LDY LEN¢2120 STRFRAC¢2130     LDA (SADR),Y¢2140     CMP #'.     ;IS THIS IT?¢2150     BEQ SFOUND  ;YES¢2151 ;¢2160     DEY ¢2170     BPL STRFRAC ;CHECK NEXT BYTE¢2171 ;¢2180     BMI EOJ     ;NO FRACS EXIT¢2181 ;¢2190 SFOUND¢2200     INY         ;POINT ONE BEYOND¢2210 ;¢2220 ; CHECK NUMBER FOR FRACTIONS¢2230 ;¢2240     LDX #0¢2250 NUMFRAC¢2260     LDA LBUFF,X¢2270     BMI ZFILL   ;ZERO FILL REST¢2271 ;¢2280     CMP #'.¢2290     BEQ MOVERITE¢2291 ;¢2300     INX ¢2310     BPL NUMFRAC ;CHECK NEXT BYTE¢2311 ;¢2320 MOVERITE¢2330     INX ¢2340     LDA LBUFF,X¢2350     BMI DLAST   ;LAST DECIMAL¢2351 ;¢2360     STA (SADR),Y¢2370     INY ¢2380     CPY LEN     ;CHECK FOR END¢2390     BEQ MOVERITE ;ZERO CONTINUE¢2391 ;¢2400     BMI MOVERITE ;LESS THAN CONT¢2401 ;¢2410     BPL EOJ     ;ALL DONE EXIT¢2411 ;¢2420 DLAST¢2430     AND #$7F    ;MASK HIGH BIT¢2440     STA (SADR),Y¢2450     INY ¢2460 ZFILL¢2470     CPY LEN¢2480     BEQ ZNEXT   ;ZERO CONTINUE¢2481 ;¢2490     BMI ZNEXT   ;LESS THAN CONT¢2491 ;¢2500     BPL EOJ     ;ALL DONE¢2501 ;¢2510 ZNEXT¢2520     LDA #'0¢2530     STA (SADR),Y¢2540     INY ¢2550     BPL ZFILL¢2551 ;¢2560 EOJ¢2570     RTS ¢əəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəə