PAGE * * * * * << PTDOS PARAMETER SCANNER >> * * * * VERSION 1.4 MAY 10, 1977 S. DOMPIER * * ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~ * * COMMON VALUES: ( from PTDEF:LB ) * * VALUE +40H = MY BUFFER FROM REG HL * * PSN EQU 5 READ NAME TO REG DE * PSV EQU 85H CONVERT VALUE INTO REG DE * PSFC EQU 6 FORCE CREATE FILE * PSFCO EQU 2 FORCE CREATE AND OPEN FILE * PSC EQU 4 CREATE FILE IF NONE EXIST * PSCO EQU 0 CREATE IF NONE EXIST AND OPEN * PSOP EQU 1 OPEN FILE * PSONE EQU 0A5H READ SINGLE BYTE * PSOPT EQU 8 READ ALL CHRS TO , ; cr 0 * * NOTE: ABOVE VALUES + 40H = USER INPUT BUFFER IN REG HL * * * PSCN EQU 95H CONVERT MY VALUE TO DE, BASE IN REG B * * * PSCAN STA OPT save options SHLD UIBUF save user input buffer address XCHG . (if any) SHLD UOBUF save output (work) buffer address LXI H,0 DAD SP SHLD RSTK save return address LHLD AERR AERR save error switch value SHLD ERSWC LXI H,-1 return to me, my nus one! SHLD AERR AERR set new error switch CALL ERRET set-up normal return address * * normal return * PNRET LDA CC get chr count MOV C,A clear carry, PNR1 ORA A set/reset zero (for chr count). * PNR2 LDA LC get last chacter scanned to reg A LHLD ERSWC reset DOS error switch SHLD AERR LHLD RSTK get return address SPHL . reset caller's stack pointer RET . go home * * * THE REST OF THIS ROUTINE IS USED BY NAMTST IN THE * SYSTEM PROPER...USE CARE!!! * DLMTST CPI '*' RZ . CPI '!' RZ . DLTST CPI '<' special chrs, RETURN IMMEDIATLY RZ . NO CHR COUNT FOR THESE! CPI '>' CHR IS RETURNED IN REG A. RZ CPI '=' RZ * THESE CHRS ARE ILEGAL FOR NMTST...ALREADY TESTED ZERO DLTEST CPI ';' check for normal terminators RZ CPI 0DH RZ CPI ',' RZ ORA A BINARY ZERO RET * PAGE * *************************** * * * * SIMPLE VDM DRIVER * * * * * CHARACTER OUTPUT ROUTINE, CHARACTER PASSED IN B * NULLS, RUBOUT1 * CIVDM MOV A,B GET CHARACTER ORA A NULL? RZ CPI 127 OR RUBOUT? RZ PUSH H NONE OF THOSE, SAVE REGS PUSH D PUSH B SAVE CALLING "B" ANI 7FH STRIP HIGH BIT MOV B,A CPI LF LINE FEEDS MUST GO FROM HERE JZ AGDLY OR CONCH WILL BE CHANGED BY CONIN CALL NCHK SEE IF NEW SPEED ON EACH CHR LDA SPEED GET DELAY MOV H,A COUNT IN HL MVI L,1 * AGAIN DCX H MOV A,H HIGH BYTE OF DELAY ORA A CHECK IT JNZ AGAIN * * END OF DELAY LOOP * AGDLY LHLD VDMAD CURRENT CURSOR ADDRESS MOV A,M ANI 7FH MOV M,A MOV A,B CPI CR HOW ABOUT CR (END OF LINE) JZ PCR1 YES, GO PROCESS IT CPI LARO BACK SPACE? JZ VBKSP IF SO YOU SEE CPI LF NOW TRY LINE FEED LDA KNTT CHAR COUNT IN THIS LINE JZ LFPCR GO TO LINEFEED WITH KNTT INR A + 1 STA KNTT STORE IT BACK CPI 65 CHECK FOR END OF LINE CNC PCR NOT END OF LINE YET MOV M,B OVERWRITE IT WITH CHARACTER INX H POINT TO NEXT LOCATION * GOBK MVI M,' '+80H PUT CURSOR ON SCREEN GOBK1 SHLD VDMAD STORE IT POP B RESTORE REGS POP D POP H MOV A,B RETURN CALLING OUTPUT CHARACTER RET * * * BACKSPACE AND ERASE LAST CHR * VBKSP DCX H LDA KNTT GET CHARACTER COUNT DCR A STA KNTT JMP GOBK * * * CHECK FOR SPEED CONTROL * NCHK CALL CONST RZ . IF NO CHR NCHKA CALL CONIN FOR NEW SPEED CALL CK CHECK FOR NEW SPEED JNC PCR4 IF WASN'T SPEED * NCHK1 ANI 0FH ASCII BIAS MOV C,A SAVE DELAY NUMBER XRA A STC . INIT DELAY BIT IN CARRY * TRY DCR C DEC DELAY NUMBER STA SPEED RZ . STOP NOW RAL . SHIFT DELAY JMP TRY DO IT AGAIN * * * CHECK NEW CHARACTER FOR A NUMBER * CK ANI 7FH JUST IN CASE CPI '9'+1 UPPER LIMIT RNC . NOT NUMBER CPI '1' LOWER LIMIT CMC RET * PCR4 INR A IN CASE OF NULL STA STFLG SAY CHR IS WAITING DCR A RET * * * PROCESS THE CARRIAGE RETURN * PCR1 CALL NCHK SEE IF CHR WAS INPUT JZ PCR3 IF NOT OR IF NEW SPEED * WAIT CPI ' ' CHECK FOR A BLANK JNZ PCR3 NO - CONTINUE WAIT1 XRA A STA STFLG CLEAR FLAG...WE ARE USING THE SPACE * CALL NCHKA JZ PCR3 A NUMBER, CONTINUE CPI ' ' SPACE WILL CONTINUE ALSO JNZ WAIT1 IF IT WASN'T XRA A STA STFLG CLEAR THE FLAG AGAIN * * MOVE CURSOR TO LEFT MOST POSITION (CARRIAGE RET) * PCR3 CALL VDAD1 GET CORNER POSITION MOV A,M GET CHR ORI 80H MOV M,A JMP GOBK1 * * * END OF LINE PROCESSING * LFPCR CALL PCR JMP GOBK * * * LINE FEED OR END OF LINE SCROLL COME HERE * PCR LDA BOT SCROLL CONTROL INR A NEXT ONE PCRCK ANI 0FH KEEP ONLY LOW ORDER 4 BITS STA BOT SAVE IT OUT VPORT OUTPUT TO VDM OUT 0FEH CALL VDAD1 GET ADDRESS PUSH H SAVE ADDRESS MVI C,64 CHARACTER COUNT * MOVE MVI M,' ' BLANK CHAR ON BOTTOM LINE INX H BUMP POINTER DCR C DECREMENT COUNT JNZ MOVE DO AGAIN POP H GET ADDRESS BACK AGAIN RET * * * CALCULATE SCREEN ADDRESS * VDAD1 XRA A ZERO THE CHR POSITION STA KNTT LDA BOT * VDADD ADI 15 LINE 15 RRC RRC MOV L,A ANI 3 ADI 0CCH MOV H,A MOV A,L ANI 0C0H MOV L,A GOT NEW ADDRESS RET . * * * A FEW VDM EQUATES * VSCREN EQU 0CC00H VDM SCREEN ADDR VPORT EQU 0C8H STANDARD OUTPUT PORT VEND EQU 0D0H HIGH BYTE OF SCREEN END * ************