home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_BAS / PRO98SRC.ZIP / PROZO_IO.BAS < prev    next >
BASIC Source File  |  1994-02-01  |  4KB  |  163 lines

  1. SUB PROZOCLS PUBLIC
  2. IF TTY THEN
  3.         PROZOPRINT CHR$(27)+"+"
  4. ELSE
  5.         CALL PROZOPRINT(CHR$(27) + "[2J" + CHR$(27) + "[;f")
  6. END IF
  7. END SUB
  8.  
  9. SUB PROZOLOCATE (byval row%, byval col%) PUBLIC
  10. IF TTY THEN
  11.         PROZOPRINT CrLf$
  12. ELSE
  13.         CALL PROZOPRINT(CHR$(27) + "[" + MID$(STR$(row%), 2) + ";" + MID$(STR$(col%), 2) + "f")
  14. END IF
  15. END SUB
  16.  
  17. SUB PROZOCOLOR (byval fg%, byval bg%) PUBLIC
  18. IF TTY THEN
  19. ELSE
  20. CALL PROZOPRINT(CHR$(27) + "[" + MID$(STR$(fg%+30), 2) + ";" + MID$(STR$(bg%+40), 2) + "m")
  21. END IF
  22. END SUB
  23.  
  24. SUB PROZOPrint(byval Oput$) PUBLIC
  25. IF Echo% THEN EXIT SUB
  26. IF LEN(Oput$)=1 THEN
  27.         ANSIPRINT Oput$
  28.         $IF %MONOWATCH
  29.         GOSUB MONOCOPY
  30.         $ENDIF
  31.         IF Comline THEN COMPRINT Oput$
  32. ELSE
  33. IF INSTR(Oput$,"^") THEN SYMBOLS OPUT$
  34. IF INSTR(Oput$,"<") AND INSTR(Oput$,">") THEN TRANSLATE Oput$ ' find merged variables
  35. IF INSTR(Oput$, "@") THEN FUNCTIONS OPUT$
  36. ANSIPRINT Oput$
  37. IF Comline THEN COMPrint Oput$
  38.         $IF %MONOWATCH
  39.         GOSUB MONOCOPY
  40.         $ENDIF
  41. END IF
  42. END SUB
  43.  
  44. FUNCTION PROZOINPUT$ STATIC PUBLIC
  45. IF OLM% THEN GETOLM
  46. V$=""
  47. DO
  48.   CALL DVPAUSE
  49.   LET dropout# = TIMER + 300
  50.   LET Ten# = TIMER + 10
  51.   LET Prick# = TIMER + 50
  52. DO
  53.  
  54.   A$=PROZOINKEY$
  55. $IF NOT %NOTASKS
  56.   CALL TASKMAN
  57.   CALL DVPAUSE
  58. $ENDIF
  59.   IF Timer > Ten# THEN LET Ten# = TIMER + 10:_
  60.     IF OLM% AND V$="" THEN CALL GETOLM:_
  61.       LET Prick# = TIMER + 50:LET DropOut#=Timer+300
  62.  
  63. IF Comline and Direct$="" THEN
  64.   IF Timer > Prick# THEN LET Prick#=Timer + 50:PROZOPRINT CHR$(7)
  65.   IF TIMER > dropout# OR TIMER > UserTime# THEN _
  66.     PROZOPRINT CHR$(7): CALL TIMEOUT
  67. END IF
  68. LOOP WHILE A$=""
  69.  
  70. IF A$=" " AND LEN(V$) > 65 THEN LET A$=CHR$(13)
  71.  
  72. SELECT CASE ASCII(A$)
  73.     CASE 12
  74.                 CALL PROZOL("PROMPT '^P@chr(12)^p'")
  75.     CASE 9
  76.                 IF LEN(V$) < LEN(OldV$) THEN A$ = MID$(OldV$, LEN(V$) + 1, 1): V$ = V$ + A$: PROZOPRINT A$
  77.     CASE 13
  78.                 IF ps = 0 THEN PROZOPRINT CrLf$: EXIT DO ELSE ps = 0
  79.     CASE 16
  80.                 PROZOPRINT CHR$(27) + "P": ps = 1
  81.     CASE 8
  82.                 IF LEN(V$) THEN V$ = LEFT$(V$, LEN(V$) - 1): PROZOPRINT CHR$(8) + CHR$(32) + CHR$(8)
  83.     CASE 3
  84.                 FOR backs = 1 TO LEN(V$): PROZOPRINT CHR$(8) + "!" + CHR$(8): NEXT backs: V$ = ""
  85.         EXIT DO
  86.     CASE 27, 21
  87.                 FOR backs = 1 TO LEN(V$): PROZOPRINT CHR$(8) + CHR$(32) + CHR$(8): NEXT backs: V$ = ""
  88.  
  89.     CASE 7
  90.                 'PROZOPRINT "*Page!*" + STRING$(7,8):EFFECT "PAGE"
  91.                 GoFlag%=-1
  92.                 CALL GETGO
  93.  
  94.         CASE 4
  95.             IF TTY THEN TTY=0 ELSE TTY=-1
  96.     CASE ELSE
  97.                 IF ASCII(A$) > 31 THEN V$ = V$ + A$: PROZOPRINT A$
  98.     END SELECT
  99. IF GoFlag% THEN GoFlag%=0:ExitFlag%=%True:EXIT LOOP
  100. IF INSTR(V$, "++") THEN ERROR 1
  101. IF INSTR(V$, "NO CARRIER") THEN ERROR 1
  102. LOOP
  103. IF A$=CHR$(3) THEN IF COMLINE THEN ERROR 1 ELSE ERROR 199
  104. IF LEN(V$) > 3 THEN OldV$ = V$
  105. IF LEFT$(V$, 1) = "/" AND GOD THEN Prog$ = V$: V$ = "": CALL PROZOL(MID$(Prog$, 2))
  106. IF LEFT$(UCASE$(V$), 3) = "GO " THEN V$=MID$(V$,4): CALL PROZOL(GETVAR$("$$"+V$+"$$")):V$=""
  107. PROZOINPUT$=V$
  108. END FUNCTION
  109.  
  110.  
  111. FUNCTION PROZOINKEY$ PUBLIC
  112. $IF NOT %NOTASKS
  113.         CALL TASKMAN
  114. $ENDIF
  115.         IF COMChars% THEN B$=COMINKEY$ ELSE B$=DOSINKEY$
  116.     CALL DVPAUSE
  117.     ' Correct for odd parity
  118.     IF ASCII(B$)>128 THEN B$=CHR$(ASCII(B$)-128)
  119.         IF B$=CHR$(3) THEN ERROR 1
  120.         PROZOINKEY$=B$
  121. END FUNCTION
  122.  
  123. SUB DM(byval Oput$) PUBLIC
  124. ANSIPRINT Oput$
  125. END SUB
  126.  
  127. FUNCTION PROZOCSRLIN PUBLIC
  128.     REG 1,&H0300
  129.         REG 2, 0
  130.         CALL INTERRUPT &H10
  131.         PROZOCSRLIN=(REG(4)\&H100)+1
  132. END FUNCTION
  133.  
  134. FUNCTION PROZOPOS   PUBLIC
  135.     REG 1, &H0300
  136.         REG 2, 0
  137.         CALL INTERRUPT &H10
  138.         PROZOPOS=(REG(4) AND &HFF)+1
  139. END FUNCTION
  140.  
  141.  
  142.  
  143. ' DOSINKEY$ returns a character just like INKEY$, or "" if no characters
  144. ' are waiting.  The difference between DOSINKEY$ and INKEY$ is that DOSINKEY$
  145. ' is redirectable.  So what, you say?  Why not just open KYBD: for input?
  146. ' Well, You can't POLL KYBD.  You can only use INPUT$, which will wait
  147. ' forever until a character is there.  EOF and LOF do not work, so INPUT$
  148. ' us useless for DOS redirection of input.
  149.  
  150.  
  151.  
  152. FUNCTION DOSINKEY$  PUBLIC
  153.     i?=0
  154.         !MOV AX,&H600
  155.         !MOV DL,&HFF
  156.         !INT &H21
  157.         !JZ  NOCHAR
  158.         !MOV i?,AL
  159. NOCHAR:
  160. IF i?=0 THEN DOSINKEY$="" ELSE DOSINKEY$=CHR$(i?)
  161. END FUNCTION
  162.  
  163.