sysdevs.imp
上传用户:upcnvip
上传日期:2007-01-06
资源大小:474k
文件大小:15k
源码类别:

编译器/解释器

开发平台:

C/C++

  1. {IncludeFrom=sysdevs <p2c/sysdevs.h>}
  2. {*VarStrings=1} {*ExportSymbol=}
  3. MODULE SYSDEVS;
  4. $SEARCH 'INITLOAD'$ 
  5.  
  6. IMPORT SYSGLOBALS;
  7. EXPORT
  8.  {* DUMMY DECLARATIONS **********************************}
  9.  TYPE
  10.    KBDHOOKTYPE  = PROCEDURE(VAR STATBYTE,DATABYTE: BYTE;
  11.                             VAR DOIT: BOOLEAN);
  12.    OUT2TYPE     = PROCEDURE(VALUE1,VALUE2: BYTE);
  13.    REQUEST1TYPE = PROCEDURE(CMD: BYTE; VAR VALUE: BYTE);
  14.    BOOLPROC     = PROCEDURE(B:BOOLEAN);
  15.    
  16. {* CRT *************************************************}
  17. {***** THIS SECTION HAS HARD OFFSET REFERENCES *********}
  18. {      IN MODULES CRTB (ASSY FILE GASSM)                }
  19. TYPE
  20.   CRTWORD = RECORD CASE INTEGER OF
  21.             1:(HIGHLIGHTBYTE,CHARACTER: CHAR);
  22.             2:(WHOLEWORD: SHORTINT);
  23.             END;
  24.   CRTLLOPS =(CLLPUT,CLLSHIFTL,CLLSHIFTR,CLLCLEAR,CLLDISPLAY,PUTSTATUS);
  25.   CRTLLTYPE=PROCEDURE(OP:CRTLLOPS; ANYVAR POSITION:INTEGER; C:CHAR);
  26.   DBCRTOPS =(DBINFO,DBEXCG,DBGOTOXY,DBPUT,DBINIT,DBCLEAR,DBCLINE,DBSCROLLUP,
  27.              DBSCROLLDN,DBSCROLLL,DBSCROLLR,DBHIGHL);
  28.   DBCINFO  = RECORD
  29.                SAVEAREA : WINDOWP;
  30.                SAVESIZE : INTEGER;
  31.                DCURSORADDR : INTEGER;
  32.                XMIN,XMAX,YMIN,YMAX : SHORTINT;
  33.                CURSX,CURSY         : SHORTINT;
  34.                C : CHAR;
  35.                AREAISDBCRT : BOOLEAN;
  36.                CHARISMAPPED: BOOLEAN; { 3/25/85 }
  37.                DEBUGHIGHLIGHT: SHORTINT;  { 3/25/85 }
  38.              END;
  39.   DBCRTTYPE=PROCEDURE(OP:DBCRTOPS; VAR DBCRT:DBCINFO);
  40.   
  41.   crtconsttype = packed array [0..11] of byte;
  42.   
  43.   crtfrec = packed record
  44.                nobreak,stupid,slowterm,hasxycrt,
  45.                haslccrt{built in crt},hasclock,
  46.                canupscroll,candownscroll      :    boolean;
  47.              end;
  48.                            
  49.   b9 = packed array[0..8] of boolean;
  50.   b14= packed array[0..13] of boolean;
  51.   crtcrec = packed record                               (* CRT CONTROL CHARS *)
  52.                rlf,ndfs,eraseeol,
  53.                eraseeos,home,
  54.                escape             : char;
  55.                backspace          : char;
  56.                fillcount          : 0..255;
  57.                clearscreen,
  58.                clearline          : char;
  59.                prefixed           : b9
  60.             end;
  61.                                   
  62.   crtirec = packed record                          (* CRT INFO & INPUT CHARS *)
  63.                width,height      : shortint;
  64.                crtmemaddr,crtcontroladdr,
  65.                keybufferaddr,progstateinfoaddr:integer;
  66.                keybuffersize: shortint;
  67.                crtcon            : crtconsttype;
  68.                right,left,down,up: char;
  69.                badch,chardel,stop,
  70.                break,flush,eof   : char;
  71.                altmode,linedel   : char;
  72.                backspace,
  73.                etx,prefix        : char;
  74.                prefixed          : b14 ;
  75.                cursormask        : integer;
  76.                spare             : integer;
  77.             end;
  78.   environ = record
  79.               miscinfo: crtfrec;
  80.               crttype: integer;
  81.               crtctrl: crtcrec;
  82.               crtinfo: crtirec;
  83.             end; 
  84.   environptr    = ^environ; 
  85.   
  86.   crtkinds = (NOCRT, ALPHATYPE, BITMAPTYPE, SPECIALCRT1, SPECIALCRT2);
  87.   
  88. VAR
  89.   SYSCOM: ENVIRONPTR;
  90.   ALPHASTATE['ALPHAFLAG']       : BOOLEAN;
  91.   GRAPHICSTATE['GRAPHICSFLAG']  : BOOLEAN;
  92.   CRTIOHOOK             : AMTYPE;
  93.   TOGGLEALPHAHOOK       : PROCEDURE;
  94.   TOGGLEGRAPHICSHOOK    : PROCEDURE;
  95.   DUMPALPHAHOOK         : PROCEDURE;
  96.   DUMPGRAPHICSHOOK      : PROCEDURE;
  97.   UPDATECURSORHOOK      : PROCEDURE;
  98.   CRTINITHOOK           : PROCEDURE;
  99.   CRTLLHOOK             : CRTLLTYPE;
  100.   DBCRTHOOK             : DBCRTTYPE;
  101.   XPOS                  : SHORTINT; { CURSOR X POSITION }
  102.   YPOS                  : SHORTINT; { CURSOR Y POSITION }
  103.   CURRENTCRT            : CRTKINDS; { ACTIVE ALPHA DRIVER TYPE }
  104.   BITMAPADDR            : INTEGER;  { ADDRESS OF BITMAP CONTROL SPACE }
  105.   FRAMEADDR             : INTEGER;  { ADDRESS OF BITMAP FRAME BUFFER }
  106.   REPLREGCOPY           : SHORTINT; { REGISTER COPIES FOR BITMAP DISPLAY }
  107.   WINDOWREGCOPY         : SHORTINT; { MUST BE IN GLOBALS BECAUSE REGISTERS }
  108.   WRITEREGCOPY          : SHORTINT; { ARE NOT READABLE -- MAY BE UNDEFINED }
  109.  
  110.  {* KEYBOARD *******************************************}
  111.  CONST
  112.    KBD_ENABLE     = 0; KBD_DISABLE    = 1;
  113.    SET_AUTO_DELAY = 2; SET_AUTO_REPEAT= 3;
  114.    GET_AUTO_DELAY = 4; GET_AUTO_REPEAT= 5;
  115.    SET_KBDTYPE    = 6; SET_KBDLANG    = 7;
  116.  TYPE
  117.    STRING80PTR = ^STRING80;
  118.    KEYBOARDTYPE = (NOKBD,LARGEKBD,SMALLKBD,ITFKBD,SPECIALKBD1,SPECIALKBD2);
  119.    LANGTYPE = (NO_KBD,FINISH_KBD,BELGIAN_KBD,CDN_ENG_KBD,CDN_FR_KBD,
  120.                NORWEGIAN_KBD,DANISH_KBD,DUTCH_KBD,SWISS_GR_KBD,SWISS_FR_KBD,
  121.                SPANISH_EUR_KBD,SPANISH_LATIN_KBD,UK_KBD,ITALIAN_KBD,
  122.                FRENCH_KBD,GERMAN_KBD,SWEDISH_KBD,SPANISH_KBD,
  123.                KATAKANA_KBD,US_KBD,ROMAN8_KBD,NS1_KBD,NS2_KBD,NS3_KBD,
  124.                SWISS_GR_B_KBD,SWISS_FR_B_KBD {ADDED FOR 3.1--SFB-5/22/85} );
  125.    MENUTYPE = (M_NONE,M_SYSNORM,M_SYSSHIFT,M_U1,M_U2,M_U3,M_U4);
  126.  VAR
  127.    KBDREQHOOK   : REQUEST1TYPE;
  128.    KBDIOHOOK    : AMTYPE;
  129.    KBDISRHOOK   : KBDHOOKTYPE;
  130.    KBDPOLLHOOK  : BOOLPROC;
  131.    KBDTYPE      : KEYBOARDTYPE;
  132.    KBDCONFIG    : BYTE;         { KEYBOARD CONFIGURATION JUMPER }
  133.    KBDLANG      : LANGTYPE;
  134.    SYSMENU      : STRING80PTR;
  135.    SYSMENUSHIFT : STRING80PTR;
  136.    MENUSTATE    : MENUTYPE;
  137. {* ENABLE / DISABLE ************************************}
  138.  CONST
  139.    KBDMASK=1;RESETMASK=2;TIMERMASK=4;PSIMASK=8;FHIMASK=16;
  140.  VAR
  141.    MASKOPSHOOK : OUT2TYPE; { ENABLE, DISABLE }
  142. {* BEEPER **********************************************}
  143.  VAR
  144.    BEEPERHOOK: OUT2TYPE;
  145.    BFREQUENCY, BDURATION: BYTE;
  146. {* RPG *************************************************}
  147.  CONST
  148.    RPG_ENABLE   = 0; RPG_DISABLE = 1;
  149.    SET_RPG_RATE = 2; GET_RPG_RATE =3;
  150.  VAR
  151.    RPGREQHOOK: REQUEST1TYPE;
  152.    RPGISRHOOK: KBDHOOKTYPE;
  153.    
  154. {* BATTERY *********************************************}
  155. TYPE
  156.   BATCMDTYPE = PROCEDURE(CMD: BYTE; NUMDATA: INTEGER;
  157.                          B1, B2, B3, B4, B5: BYTE); 
  158.   BATREADTYPE= PROCEDURE(VAR DATA: BYTE);
  159. VAR
  160.   BATTERYPRESENT[-563]: BOOLEAN;
  161.   BATCMDHOOK : BATCMDTYPE;
  162.   BATREADHOOK: BATREADTYPE;
  163. {* CLOCK ***********************************************}
  164. TYPE
  165.   RTCTIME = PACKED RECORD 
  166.                PACKEDTIME,PACKEDDATE:INTEGER;
  167.             END;
  168.   CLOCKFUNC = (CGETDATE,CGETTIME,CSETDATE,CSETTIME);
  169.   CLOCKOP   = (CGET,CSET,CUPDATE);      {CUPDATE ADDED FOR BOBCAT 4/11/85 SFB}
  170.   CLOCKDATA = RECORD
  171.                 CASE BOOLEAN OF
  172.                 TRUE :(TIMETYPE:TIMEREC);
  173.                 FALSE:(DATETYPE:DATEREC);
  174.               END;
  175.   CLOCKREQTYPE = PROCEDURE(CMD:CLOCKFUNC; ANYVAR DATA:CLOCKDATA);
  176.   CLOCKIOTYPE  = PROCEDURE(CMD:CLOCKOP  ; VAR DATA:RTCTIME);
  177. VAR
  178.   CLOCKREQHOOK : CLOCKREQTYPE;  { CLOCK MODULE INTERFACE }
  179.   CLOCKIOHOOK  : CLOCKIOTYPE;   { CARD DRIVER INTERFACE }
  180. {* TIMER ***********************************************}
  181. TYPE
  182.   TIMERTYPES = (CYCLICT,PERIODICT,DELAYT,DELAY7T,MATCHT);
  183.   TIMEROPTYPE = (SETT,READT,GETTINFO);
  184.   TIMERDATA = RECORD
  185.                CASE INTEGER OF
  186.                0: (COUNT: INTEGER);
  187.                1: (MATCH: TIMEREC);
  188.                2: (RESOLUTION,RANGE:INTEGER);
  189.                END;
  190.   TIMERIOTYPE = PROCEDURE(TIMER: TIMERTYPES;OP: TIMEROPTYPE;VAR TD: TIMERDATA);
  191. VAR 
  192.   TIMERIOHOOK  : TIMERIOTYPE; 
  193.   TIMERISRHOOK : KBDHOOKTYPE;
  194. {* KEYBUFFER *******************************************}
  195. CONST
  196.   KMAXBUFSIZE = 255;
  197. TYPE
  198.   KOPTYPE = (KGETCHAR,KAPPEND,KNONADVANCE,KCLEAR,KDISPLAY,
  199.              KGETLAST,KPUTFIRST);
  200.   KBUFTYPE= PACKED ARRAY[0..KMAXBUFSIZE] OF CHAR;
  201.   KBUFPTR = ^KBUFTYPE;
  202.   KBUFRECPTR = ^KBUFREC;
  203.   KBUFREC = RECORD
  204.               ECHO: BOOLEAN;
  205.               NON_CHAR: CHAR;
  206.               MAXSIZE,SIZE,INP,OUTP: INTEGER;
  207.               BUFFER: KBUFPTR;
  208.             END;
  209.   
  210. VAR
  211.   KEYBUFFER : KBUFRECPTR;
  212.   KBDWAITHOOK: PROCEDURE;
  213.   KBDRELEASEHOOK: PROCEDURE;
  214.   STATUSLINE: PACKED ARRAY[0..7] OF CHAR;
  215.   {0  s or f = STEP/FLASH IN PROGRESS (WAITING FOR TRAP #0)}
  216.   {1..5  last executed/current line number }
  217.   {6  S=SYSTEM  U=USER  DEFINITION FOR ITF SOFT KEYS}
  218.   {   BLANK FOR NON ITF KEYBOARDS }
  219.   {7  RUNLIGHT }
  220. {* KEY TRANSLATION SERVICES ********************************}
  221. TYPE
  222.   KEYTRANSTYPE =(KPASSTHRU,KSHIFT_EXTC,KPASS_EXTC);
  223.   KEYTYPE = (ALPHA_KEY,NONADV_KEY,SPECIAL_KEY,IGNORED_KEY,NONA_ALPHA_KEY);
  224.   { ADDED NONA_ALPHA_KEY 5/9/84 RQ/SFB }
  225.   
  226.   LANGCOMREC = RECORD
  227.                  STATUS : BYTE;
  228.                  DATA   : BYTE;
  229.                  KEY    : CHAR;
  230.                  RESULT : KEYTYPE;
  231.                  SHIFT,CONTROL,EXTENSION: BOOLEAN;
  232.                END;
  233.   LANGKEYREC = RECORD
  234.                  NO_CAPSLOCK: BOOLEAN;
  235.                  NO_SHIFT   : BOOLEAN;
  236.                  NO_CONTROL : BOOLEAN;
  237.                  NO_EXTENSION : BOOLEAN;
  238.                  KEYCLASS   : KEYTYPE;
  239.                  KEYS : ARRAY[BOOLEAN] OF CHAR;
  240.                END;
  241.   LANGRECORD= RECORD
  242.                 CAN_NONADV: BOOLEAN;
  243.                 LANGCODE  : LANGTYPE;
  244.                 SEMANTICS : PROCEDURE;
  245.                 KEYTABLE  : ARRAY[0..127] OF LANGKEYREC;
  246.               END;
  247.   LANGPTR   = ^LANGRECORD;
  248. VAR
  249.   LANGCOM   : LANGCOMREC;
  250.   LANGTABLE : ARRAY[0..1] OF LANGPTR;
  251.   LANGINDEX : 0..1;
  252.   KBDTRANSHOOK : KBDHOOKTYPE;
  253.   TRANSMODE : KEYTRANSTYPE;
  254.   KBDSYSMODE, KBDALTLOCK, KBDCAPSLOCK : BOOLEAN;
  255.   
  256. {* HPHIL ***********************************************}
  257. {MOVED INTO SYSDEVS 4/6/84 SFB}
  258. const
  259.   le_configured = hex('80');
  260.   le_error      = hex('81');
  261.   le_timeout    = hex('82');
  262.   le_loopdown   = hex('84');
  263.   
  264.   lmaxdevices   = 7;
  265.   
  266. type
  267.   loopdvrop   = (datastarting,dataended,resetdevice,uninitdevice);
  268.                  {UNINIT ADDED 4/8/85 SFB}
  269.   loopdvrproc = procedure(op:loopdvrop);
  270.   
  271.   {HPHILOP DEFINED AS NEW TYPE 4/6/84 SFB}
  272.   HPHILOP      = (RAWSHIFTOP,NORMSHIFTOP,CHECKLOOPOP,CONFIGUREOP,LCOMMANDOP);
  273.   {5 PROCEDURES HOOKED AS TYPE HPHILCMDPROC 4/6/84 SFB}
  274.   HPHILCMDPROC = PROCEDURE(OP : HPHILOP);
  275.   
  276.   
  277.   descriprec = packed record    { DEVICE DESCRIBE RECORD }
  278.                  case boolean of
  279.                  true :(id       : byte;
  280.                         twosets  : boolean;
  281.                         abscoords: boolean;
  282.                         size16   : boolean;
  283.                         hasprompts:boolean;
  284.                       { reserved : 0..3;        {DELETED 3/25/85 SFB}
  285.                         ext_desc : boolean;     {3/27/85 SFB}
  286.                         security : boolean;     {3/26/85 SFB}
  287.                         numaxes  : 0..3;
  288.                         counts   : shortint;
  289.                         maxcountx: shortint;
  290.                         maxcounty: shortint;
  291.                         maxcountz: shortint;
  292.                         promptack: boolean;     {ADDED 3/15/85 SFB}
  293.                         nprompts : 0..7;
  294.                         proximity: boolean;     {ADDED 3/15/85 SFB}
  295.                         nbuttons : 0..7);
  296.                  false:(darray : array[1..11] of char);
  297.                end;
  298.   
  299.   devicerec = record
  300.                 devstate : integer;
  301.                 descrip : descriprec;
  302.                 opsproc  : loopdvrproc;
  303.                 dataproc : kbdhooktype;
  304.               end;
  305.   
  306.   loopdvrptr = ^loopdriverrec;
  307.   loopdriverrec = record
  308.                     lowid,highid,daddr : byte;
  309.                     opsproc  : loopdvrproc;
  310.                     dataproc : kbdhooktype;
  311.                     next     : loopdvrptr;
  312.                   end;
  313.   
  314.   LOOPCONTROLREC = RECORD                   {REDEFINED AS RECORD - 4/6/84 SFB}
  315.         rawmode : boolean;
  316.         loopdevices : array[1..lmaxdevices] of devicerec;
  317.         loopdevice : 1..lmaxdevices;
  318.         loopcmd    : byte;    { last loop command sent }
  319.         loopdata   : byte;    { data bye in / out }
  320.         looperror  : boolean; { error occured on last operation }
  321.         loopinconfig:boolean; { now doing reconfigure }
  322.         loopcmddone: boolean; { last sent command is done }
  323.         loopisok   : boolean; { loop is configured }
  324.         loopdevreading: boolean; { reading poll data }  { 3.0 BUG #39 3/17/84 }
  325.   END;
  326.   
  327.   CONST                         {NEW TO END OF HPHIL_COMM_REC TYPE 3/26/85 SFB}
  328.   
  329.   
  330.   {DRIVER TYPES}
  331.   NODRIVER   =  0;
  332.   ABSLOCATOR =  1;        {range 1..15 reserved for DGL}
  333.   
  334.   {CODETYPES FROM POLLBLOCK (OR OTHER HPHIL OPCODE)}
  335.   NOCODES       = 0;
  336.   ASCIICODES    = 1;
  337.   SET1CODES     = 2;
  338.   SET2CODES     = 3;
  339.   
  340.   TYPE
  341.   
  342.   HPHIL_COMM_REC_PTR_TYPE = ^hphil_comm_rec_type;  {3/25/85 SFB}
  343.   
  344.   HPHIL_COMM_REC_TYPE = RECORD CASE BOOLEAN OF              {3/25/85 SFB}
  345.    TRUE :
  346.          (dvr_type        : shortint;
  347.           dev_addr        : 0..7;
  348.           latch,                  {stop updating data after button press/event}
  349.           active,                 {capture data in ISR}
  350.           reading         : boolean;  {dvr_comm_rec busy, delay update from ISR}
  351.           devices         : byte; {bit/loopaddress that driver should service
  352.                                    put 0 where driver should NOT service device
  353.                                    with this dvr_comm_rec !}
  354.           update          : procedure(recptr : hphil_comm_rec_ptr_type);
  355.                                   {call update to flush delayed poll data update}
  356.           link            : hphil_comm_rec_ptr_type;  {next comm record}
  357.           extend          : integer; {for extensibility use as pointer/datarec}
  358.           
  359.           xloc,                   {HPHIL intrinsic data types from poll/command}
  360.           yloc,
  361.           zloc            : shortint;
  362.           codetype        : shortint;     {describes content of codes}
  363.           ncodes          : shortint;
  364.           codes           : packed array [1..16] of char 
  365.                                {extensible for variant} );
  366.    FALSE:
  367.          (barray          : array[0..53] of char);
  368.   END;
  369. var
  370.    
  371.   loopdriverlist : loopdvrptr;
  372.   LOOPCONTROL    : ^LOOPCONTROLREC;     {4/6/84 SFB}
  373.   HPHILCMDHOOK   : HPHILCMDPROC;        {4/6/84 SFB}
  374.   
  375.   HPHIL_DATA_LINK : hphil_comm_rec_ptr_type;  {3/13/85 SFB}
  376. {-----------------------------------------------------------------------------}
  377. PROCEDURE SYSDEV_INIT;
  378. {* BEEPER **********************************************}
  379. PROCEDURE BEEP;
  380. PROCEDURE BEEPER(FREQUENCY,DURATION:BYTE);
  381. {* RPG *************************************************}
  382. PROCEDURE SETRPGRATE(RATE : BYTE);
  383. {* KEYBOARD ********************************************}
  384. PROCEDURE KBDSETUP(CMD,VALUE:BYTE);
  385. PROCEDURE KBDIO(FP: FIBP; REQUEST: AMREQUESTTYPE;
  386.                 ANYVAR BUFFER: WINDOW; BUFSIZE,POSITION: INTEGER);
  387. procedure lockedaction(a: action); 
  388. {* CRT *************************************************}
  389. PROCEDURE CRTIO(FP: FIBP; REQUEST: AMREQUESTTYPE;
  390.                 ANYVAR BUFFER: WINDOW; BUFSIZE,POSITION: INTEGER);
  391. PROCEDURE DUMMYCRTLL(OP:CRTLLOPS; ANYVAR POSITION:INTEGER; C:CHAR);
  392. {* BATTERY *********************************************}
  393. PROCEDURE BATCOMMAND(CMD:BYTE; NUMDATA:INTEGER; B1, B2, B3, B4, B5: BYTE); 
  394. FUNCTION  BATBYTERECEIVED:BYTE;
  395. {* CLOCK ***********************************************}
  396. function  sysclock: integer;   {centiseconds from midnight} 
  397. procedure sysdate (var thedate: daterec); 
  398. procedure systime (var thetime: timerec); 
  399. procedure setsysdate ( thedate: daterec); 
  400. procedure setsystime ( thetime: timerec); 
  401. {* KEYBUFFER *******************************************}
  402. PROCEDURE KEYBUFOPS(OP:KOPTYPE; VAR C: CHAR);
  403. {* STATUSLINE ******************************************}
  404. PROCEDURE SETSTATUS(N:INTEGER; C:CHAR);
  405. FUNCTION  RUNLIGHT:CHAR;
  406. PROCEDURE SETRUNLIGHT(C:CHAR);
  407. end.