home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / oberon / term.mod < prev    next >
Text File  |  1991-02-24  |  3KB  |  95 lines

  1. MODULE Term;    (* ERV, 1989/91 *)
  2.   IMPORT SYS:=SYSTEM;
  3.  
  4. CONST
  5.     (* some extended function key values when first RdKey is 00X *)
  6.        ardown * = 80;   arup   * = 72;
  7.        arleft * = 75;   arrt   * = 77;
  8.        home   * = 71;   end    * = 79;
  9.        pgup   * = 73;   pgdn   * = 81;
  10.        ins    * = 82;   del    * = 83;
  11.        F1     * = 59;   F11    * = 84; (*F11-F20 is F+shift*)
  12.        F21    * = 94;                  (*F21-F30 is F+CTRL*)
  13.        F31    * =104;                  (*F31-F40 is F+ALT*)
  14.        Carleft* =115;   Carrt  * = 116;(*CTRL+arleft/right*)
  15.        Chome  * =119;   Cend   * = 117;(*CTRL+home/end*)
  16.        Cpgup  * =132;   Cpgdn  * = 118;(*CTRL+pageup/down*)
  17.  
  18.  
  19. PROCEDURE RdKey * (VAR ch:CHAR);
  20. BEGIN SYS.CODE(
  21.   0B4H, 08H,         (* mov  ah,08h  *)
  22.   0CDH, 21H,         (* int  21h     *)
  23.   0C4H, 5EH, 06H,    (* les  bx,dword ptr [bp+6] *)
  24.   26H, 88H, 07H)     (* mov  es:[bx],al       ;return byte *)
  25. END RdKey;
  26.  
  27. PROCEDURE Put(VAR s:ARRAY OF CHAR);
  28. BEGIN
  29.  SYS.CODE(
  30.  0B4H, 09H,     (*mov ah,09H  *)
  31.  1EH,           (*push ds     *)
  32.  0C5H, 56H, 04H,(*lds dx,dword ptr [bp+4] ;fetch ptr to buffer *)
  33.  0CDH, 21H,     (*int 21h  *)
  34.  1FH            (*pop ds   *)
  35.  )
  36. END Put;
  37.  
  38. PROCEDURE Wch * (ch:CHAR);
  39. VAR s:ARRAY 3 OF CHAR;
  40. BEGIN s[0] := ch;  s[1] := "$"; Put(s)
  41. END Wch;
  42.  
  43. PROCEDURE WL * ;
  44. CONST lf = 0AX; cr = 0DX;
  45. VAR s1:ARRAY 6 OF CHAR;
  46. BEGIN
  47.   s1[0] := cr;  s1[1] := lf;  s1[2] := "$";  Put(s1)
  48. END WL;
  49.  
  50. PROCEDURE WSv * (VAR s:ARRAY OF CHAR);
  51. VAR i:INTEGER;
  52. BEGIN
  53.  i := ORD(s[0]);  i := i * 3 ;  i := i ;
  54.   i := 0;
  55.   WHILE s[i] # 00X DO INC(i) END;
  56.   s[i] := "$" ;  Put(s);  s[i] := 00X
  57. END WSv;
  58.  
  59. PROCEDURE WS * (s:ARRAY OF CHAR);
  60. BEGIN WSv(s)
  61. END WS;
  62.  
  63. PROCEDURE RS * (VAR s:ARRAY OF CHAR);
  64. CONST maxbuf = 80;
  65. TYPE ibuf = ARRAY maxbuf OF CHAR;
  66. VAR ib:ibuf;  i,j,k:INTEGER;
  67.   PROCEDURE RB(VAR s:ibuf);
  68.   BEGIN SYS.CODE(
  69.     0B4H, 0AH,      (*mov ah,0Ah *)
  70.     1EH,            (*push ds    *)
  71.     0C5H, 56H, 04H, (*lds dx,dword ptr [bp+4] *)
  72.                     (*   ;fetch ptr to buffer, char[0] is len allowed *)
  73.                     (*   ; and char[1] is len returned to caller      *)
  74.     0CDH, 21H,      (*int 21h    *)
  75.     1FH)            (*pop ds     *)
  76.   END RB;
  77. BEGIN (*RS*)
  78.   ib[0] := CHR(maxbuf - 2);  ib[1] := 00X;
  79.   RB(ib);  WL;
  80.   i := ORD(ib[1]);  j := 2;  k := 0;
  81.   WHILE i > 0 DO
  82.     s[k] := ib[j];  INC(k); INC(j); DEC(i)
  83.   END;
  84.   s[k] := 00X
  85. END RS;
  86.  
  87. PROCEDURE WI * (li:LONGINT);
  88. VAR i:INTEGER; buf:ARRAY 30 OF INTEGER;
  89. BEGIN i := 0;  IF li < 0 THEN li := -li;  Wch("-") END;
  90.   REPEAT buf[i] := SHORT(li MOD 10);  li := li DIV 10; INC(i) UNTIL li = 0;
  91.   REPEAT DEC(i); Wch(CHR(buf[i] + ORD("0"))) UNTIL i = 0
  92. END WI;
  93.  
  94. END Term.
  95.