DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦383464eba⟧ TextFile

    Length: 16896 (0x4200)
    Types: TextFile
    Names: »termiotxt   «

Derivation

└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer
    └─⟦f546e193b⟧ 
        └─⟦this⟧ »termiotxt   « 

TextFile

<*************************************************************************>
<* Terminal i/o procedures  used by mcl simulator test version           *>
<*************************************************************************>


<*************************************************************************>
<* Revision history                                                      *>
<* Archived 85.12.13 as termiotxt.01 on rcmenu-ark-001                   *>
<*                                                                       *>
<*-----------------------------------------------------------------------*>
<* 85.12.13 Version can only be used by rc855 tty simulator              *>
<*************************************************************************>

integer procedure read_text(z,dest,pos,length);
<*************************************************************************>
<* Read a text string into an array from a document used as a terminal   *>
<*                                                                       *>
<* z (call)       : Document used as a terminal;                         *>
<* dest (call)    : The text string is inserted into this array.         *>
<*                  Characters before and after the inserted are not     *>
<*                  changed.                                             *>
<* pos (call)     : As call value pos denotes the character position     *>
<*                  into which the first read charecter is to be         *>
<*                  inserted.                                            *>
<* pos (ret)      : The return value denotes the character               *>
<*                  position after the last inserted character.          *>
<* length (call)  : The length parameter controls the reading in the     *>
<*                  following way:                                       *>
<*                  length=0  : Characters are read until dist are full  *>
<*                              or a character with class>=8 are read.   *>
<*                              The terminator (class>=8) aren't inserted*>
<*                  length>0  : Exactly length characters are read.      *>
<*                  length<0  : At most abs length characters are read   *>
<*                              The reading are stoped if a character    *>
<*                              with class>=8 is read.                   *>
<*                              The terminator (class>=8) aren't inserted*>
<* length (ret)   : At return the value of length is the number of       *>
<*                  characters inserted into dest.                       *>
<*                  Length is negativ if dest is full.                   *>
<*                                                                       *>
<* read_text (ret): Returns the last character read. If dest is not full *>
<*                  this is the terminator else it is the last read      *>
<*                  character. If length >0 it is inserted else it's not.*>
<*                  Returned as class shift 12 + value.                  *>
<*************************************************************************>
zone z;
long array dest;
integer pos,length;
begin
  integer first_pos,class,ch,count;
  boolean dest_full;

  first_pos:=pos;
  dest_full:=false;
  class:=read_char(z,ch);
  if length=0 then
  begin
    while class<8 and -,dest_full do
    begin
      dest_full:=put_char(dest,pos,ch,1)=-1;
      class:=read_char(z,ch);
    end;
  end
  else
    if length>0 then
    begin
      for count:=1 step 1 until length do
      begin
        if put_char(dest,pos,ch,1)=-1 then
        begin
          dest_full:=true;
          count:=length+1;
        end;
        class:=read_char(z,ch);
      end;
    end
    else
    begin
      count:=1;
      while (class<8) and (count<=(abs length)) and -,dest_full do
      begin
        dest_full:=put_char(dest,pos,ch,1)=-1;
        count:=count+1;
        class:=read_char(z,ch);
      end;
    end;
  length:=pos-first_pos;
  if dest_full then
  begin
    length:=-length;
  end;
  read_text:=class shift 12 + ch;
  clear_zone(z);
end;


procedure clear_zone(z);
<* Clear the given (input) zone *>
zone z;
begin
  integer array zone_dec(1:20);
 
  getzone6(z,zone_dec);
  zone_dec(12):=1 shift 16;
  zone_dec(14):=zone_dec(15):=zone_dec(19);
  setzone(z,zone_dec);
end;


integer procedure screen_info(column,line,screen_type);
<**************************************************************************>
<* screen_info (return, integer) : Available terminal functions.  Bit:    *>
<*                                 clear_end_screen                0      *>
<*                                 clear_end_line                  1      *>
<*                                                                        *>
<* column (return, integer)      : Number of column's on line             *>
<* line (return, integer)        : Number of lines on screen              *>
<* screen_type (return, integer) : Screen function descreption.   Bit:    *>
<*                                 Scroll on last line             0      *>
<*                                                                        *>
<**************************************************************************>
integer column,line,screen_type;
begin
  column:=80;
  line:=23;
end;

procedure terminal_intable(alpha);
<**************************************************************************>
<* alpha (return, integer array(0:127) ) :                                *>
<*   Generates array to be used by intable with the following content:    *>
<*                                                                        *>
<*                     Class    Value                                     *>
<*   Nul character        0        0                                      *>
<*   Control characters   8     1 to 31                                   *>
<*     except the following values returned if the key is pressed         *>
<*   Return key           8       13                                      *>
<*   Cursor up key        9       11                                      *>
<*   Cursor down key      9       10                                      *>
<*   Cursor left key      9        8                                      *>
<*   Cursor right key     9        9                                      *>
<*   Home key            10       12                                      *>
<*   Cancel key          11       24                                      *>
<*                                                                        *>
<*   Letters ect.         6     32 to 126                                 *>
<*   Delete key          12       127                                     *>
<**************************************************************************>
integer array alpha;
begin
  integer ii;
  alpha(0):=0;
  for ii:=1 step 1 until 31 do
    alpha(ii):=8 shift 12 + ii;
  alpha(5):=11 shift 12 + 24;
  alpha(8):=9 shift 12 + 8;
  alpha(10):=9 shift 12 + 10;
  alpha(13):=8 shift 12 + 13;
  alpha(24):=9 shift 12 + 9;
  alpha(26):=9 shift 12 + 11;
  alpha(29):=10 shift 12 + 12;
  alpha(127):=12 shift 12 + 127;
  for ii:=32 step 1 until 126 do
    alpha(ii):=6 shift 12 + ii;
end;

procedure amx_table(z,table);
<**************************************************************************>
<* Set convert table number in amx driver in 3600 front end               *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<* table (call)   : The convert tabel number to be used                   *>
<**************************************************************************>
value table;
zone z;
integer table;
begin
end;

procedure clear_end_screen(z);
<**************************************************************************>
<* Clear all positions from cursor position (inc.) to end of screen       *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
  outchar(z,'us'+128);
end;


procedure clear_end_line(z);
<**************************************************************************>
<* Clear all positions from cursor position (inc.) to end of line         *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
 outchar(z,'rs'+128);
end;


procedure home(z);
<**************************************************************************>
<* Move cursor to the left position on first the line on screen (pos. 0,0)*>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
  outchar(z,'gs'+128);
end;


procedure new_line(z);
<**************************************************************************>
<* Move cursor to the first position on the next line                     *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
  outchar(z,'nl');
end;


procedure cursor_left(z);
<**************************************************************************>
<* Move the cursor one character to the left                              *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
  outchar(z,'bs'+128);
end;


procedure cursor_right(z);
<**************************************************************************>
<* Move the cursor one character to the right                             *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
  outchar(z,'can'+128);
end;


procedure cursor_down(z);
<**************************************************************************>
<* Move the cursor one line down                                          *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
  outchar(z,'nl'+128);
end;


procedure cursor_up(z);
<**************************************************************************>
<* Move the cursor one line up                                            *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
  outchar(z,'sub'+128);
end;


procedure bell(z);
<**************************************************************************>
<* Make a audio signal on the terminal                                    *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
  outchar(z,'bel'+128);
end;


procedure erase_screen(z);
<**************************************************************************>
<* Move the cursor to the home position and clear all chars. on the screen*>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
  home(z);
  clear_end_screen(z);
end;


procedure delete_line(z);
<**************************************************************************>
<* Delet the curent line and move succeeding lines up                     *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
end;


procedure insert_line(z);
<**************************************************************************>
<* Move current line and succeeding lines one line down                   *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
end;


procedure invers_start(z);
<**************************************************************************>
<* Start writing invers characters on the sceen                           *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
end;


procedure invers_stop(z);
<**************************************************************************>
<* Stop writing invers characters on the screen                           *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
end;


procedure highlight_start(z);
<**************************************************************************>
<* Start writing highligt characters on the sceen                         *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
end;


procedure highlight_stop(z);
<**************************************************************************>
<* Stop writing highlight characters on the screen                        *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
end;

procedure set_cursor(z,column,line);
<**************************************************************************>
<* Move the cursor to position : column,line                              *>
<* Position 0,0 is home.                                                  *>
<*                                                                        *>
<* z (call, zone)         : Specifies the document used as terminal       *>
<* column (call, integer) : Cursor column value                           *>
<* line (call, integer)   : Cursor line value                             *>
<**************************************************************************>
value column,line;
integer column,line;
zone z;
begin
  column:=if column<32 then
            column+224
          else
            if column<64 then
              column+160
            else
              column+96;
  outchar(z,'ack'+128);
  outchar(z,column);
  outchar(z,224+line);
end;


procedure init_terminal(z);
<**************************************************************************>
<* Initialese terminal                                                    *>
<*                                                                        *>
<* z (call, zone) : Specifies the document used as terminal               *>
<**************************************************************************>
zone z;
begin
end;
▶EOF◀