├── zk ├── foo.txt ├── foo1.txt ├── zkversion.opt ├── foo2.txt ├── zklink_time.opt ├── compile_obj_fast.com ├── statistics.txt ├── zkmain_lnk.opt ├── zkparse_def.pas ├── zklex_def.pas ├── coutu.com ├── zkast_def.pas ├── zkparse_obj_def.pas ├── make_version.pas ├── zkinit_def.pas ├── zkkey_def.com ├── zkwizard_def.pas ├── zklink_time.pas ├── make_zk.com ├── dave.txt ├── games.txt ├── commands.txt ├── zkhelp.hlp ├── zkaction_def.pas ├── computer.txt ├── zkmain.pas ├── zkwizard.pas ├── zkroutines_def.pas ├── 11aug85.txt ├── zkcontext_def.pas ├── wizardry.txt ├── advent.txt ├── zkdef.pas ├── zkobject_def.pas ├── descrip.mms └── zklex.pas ├── kit ├── zkcld.cld ├── zkdcl_help.hlp └── kitinstal.com ├── ifc ├── ifcmsg_def.pas ├── ifcroom_def.pas ├── ifcmsg.msg ├── ifcmessage_def.pas ├── ifcobject_def.pas ├── ifcrtl_bliss.bli ├── ifclex_def.pas ├── ifccld.cld ├── ifcdef.pas ├── ifcrtl_def.pas ├── descrip.mms ├── ifcrtl_pascal.pas ├── ifc.pas ├── ifcmessage.pas ├── ifclex.pas └── ifcrtl_screen.pas ├── .gitignore ├── env ├── typedef.pas ├── stsdef.pas ├── eventdef.pas ├── clidef.pas ├── descrip.mms ├── secdef.pas ├── lockdef.pas ├── qiodef.pas ├── ssdef.pas ├── dscdef.pas ├── jpidef.mar ├── libdef.mar ├── dvidef.mar ├── rtldef.pas ├── smgdef.mar ├── sysdef.pas ├── smgdef.pas ├── vmsrtl.pas ├── syidef.mar └── iodef.mar ├── readme.txt └── descrip.mms /zk/foo.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /zk/foo1.txt: -------------------------------------------------------------------------------- 1 | fleh 2 | -------------------------------------------------------------------------------- /zk/zkversion.opt: -------------------------------------------------------------------------------- 1 | SYMBOL=ZK$T_VERSION, 808333400 -------------------------------------------------------------------------------- /zk/foo2.txt: -------------------------------------------------------------------------------- 1 | kdddddddddddddddddddddddddddddddddddddddddddddddd 2 | -------------------------------------------------------------------------------- /kit/zkcld.cld: -------------------------------------------------------------------------------- 1 | define verb ZK 2 | image ZK$MAIN 3 | parameter P1 value(type=$rest_of_line) 4 | -------------------------------------------------------------------------------- /zk/zklink_time.opt: -------------------------------------------------------------------------------- 1 | #SYMBOL=ZK$K_LINK_TIME_L0, 779997246"SYMBOL=ZK$K_LINK_TIME_L1, 11359614SYMBOL=ZK$K_BASELEVEL, 2 -------------------------------------------------------------------------------- /ifc/ifcmsg_def.pas: -------------------------------------------------------------------------------- 1 | module ifc$msg_def; 2 | 3 | var ifc$_nyi, 4 | ifc$_badobj, 5 | ifc$_badroom: 6 | [external, value] unsigned; 7 | 8 | end. 9 | -------------------------------------------------------------------------------- /zk/compile_obj_fast.com: -------------------------------------------------------------------------------- 1 | $ delete:="" 2 | $ ifc comp obj zk$obj 3 | $ mms/revise 4 | $ del env_files.;,zk_system.; 5 | $ del zk$main.exe; 6 | $ mms 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | alpha 2 | ia64 3 | vax 4 | kit/zk*/ 5 | .\$ADF\$* 6 | *\;* 7 | *-*/* 8 | *.jou 9 | *.tex 10 | *.dvi_* 11 | *.int_* 12 | *.tc[befi] 13 | -------------------------------------------------------------------------------- /zk/statistics.txt: -------------------------------------------------------------------------------- 1 | As of X1.0-459 2 | 3 | PSect Use Bytes % of Image 4 | 5 | $IFC$DATA Text, 48111 57% 6 | obj tables, 7 | room tables 8 | 9 | $CODE All routines 32132 38% 10 | 11 | $LOCAL Keyword tables 4712 5.5% 12 | -------------------------------------------------------------------------------- /zk/zkmain_lnk.opt: -------------------------------------------------------------------------------- 1 | CLUSTER=CODE1,,,OBJ$:ZK$MAIN, ZK$PARSE, ZK$AST, ZK$OBJECT, - 2 | ZK$ROUTINES, ZK$INIT, IFC$LIBRARY:IFC$RTL/LIB 3 | CLUSTER=CODE2,,,OBJ$:ZK$LEX, ZK$PARSE_OBJ, ZK$ACTION 4 | CLUSTER=DATA,,,OBJ$:ZK$ROOM, ZK$OBJ, ZK$DESC, ZK$TEXT 5 | -------------------------------------------------------------------------------- /ifc/ifcroom_def.pas: -------------------------------------------------------------------------------- 1 | module ifc$room_def; 2 | 3 | [external(ifc$compile_rooms)] procedure $compile_rooms( 4 | room_filename : varying[$u1] of char; 5 | object_filename : varying[$u2] of char; 6 | def_filename : varying[$u3] of char); 7 | extern; 8 | 9 | end. 10 | -------------------------------------------------------------------------------- /env/typedef.pas: -------------------------------------------------------------------------------- 1 | module types; 2 | 3 | type $ubyte = [byte] 0..2**8-1; 4 | $byte = [byte] -(2**7)..2**7-1; 5 | $uword = [word] 0..2**16-1; 6 | $quad = [quad, unsafe] record l0 : unsigned; l1 : integer end; 7 | $uquad = [quad, unsafe] record l0, l1 : unsigned end; 8 | end. 9 | -------------------------------------------------------------------------------- /ifc/ifcmsg.msg: -------------------------------------------------------------------------------- 1 | .title ifc$msg 2 | .facility ifc, 200/prefix=ifc$_ 3 | 4 | .severity informational 5 | 6 | nyi 7 | 8 | 9 | .severity fatal 10 | 11 | badobj 12 | badroom 13 | 14 | .end 15 | -------------------------------------------------------------------------------- /ifc/ifcmessage_def.pas: -------------------------------------------------------------------------------- 1 | module ifc$message_def; 2 | 3 | [external(ifc$compile_messages)] procedure $compile_messages( 4 | message_filename : varying[$u1] of char; 5 | object_filename : varying[$u2] of char; 6 | def_filename : varying[$u3] of char); 7 | extern; 8 | 9 | end. 10 | -------------------------------------------------------------------------------- /ifc/ifcobject_def.pas: -------------------------------------------------------------------------------- 1 | module ifc$object_def; 2 | 3 | [external(ifc$compile_objects)] procedure $compile_objects( 4 | var source_filename : varying[$u1] of char; 5 | var object_filename : varying[$u2] of char; 6 | var def_filename : varying[$u3] of char); 7 | extern; 8 | 9 | end. 10 | -------------------------------------------------------------------------------- /zk/zkparse_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:zk$def', 2 | 'lib$:zk$context_def')] 3 | module zk$parse_def; 4 | 5 | [external(zk$parse_command_line)] function $parse_command_line( 6 | var context : $context_block; 7 | var ast : $ast_node_ptr; 8 | followers : $symbol_set) : boolean; 9 | extern; 10 | 11 | end. 12 | -------------------------------------------------------------------------------- /env/stsdef.pas: -------------------------------------------------------------------------------- 1 | module stsdef; 2 | 3 | const sts$k_warning = 0; 4 | sts$k_success = 1; 5 | sts$k_error = 2; 6 | sts$k_informational = 3; 7 | sts$k_severe = 4; 8 | 9 | sts$m_msg_no = 2**3; 10 | sts$m_specific = 2**15; 11 | sts$m_facility = 2**16; 12 | sts$m_customer = 2**27; 13 | sts$m_inhibit = 2**28; 14 | 15 | end. 16 | -------------------------------------------------------------------------------- /zk/zklex_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:zk$def')] 2 | module zk$lex_def; 3 | 4 | [external(zk$init_lex)] function $init_lex : unsigned; 5 | extern; 6 | 7 | [external(zk$advance_symbol)] procedure $advance_symbol; 8 | extern; 9 | 10 | [external(zk$get_symbol)] procedure $get_symbol( 11 | var symbol : $symbol_desc); 12 | extern; 13 | 14 | end. 15 | -------------------------------------------------------------------------------- /zk/coutu.com: -------------------------------------------------------------------------------- 1 | $ define/key/terminate 1 "SW" 2 | $ define/key/terminate 2 "S" 3 | $ define/key/terminate 3 "SE" 4 | $ define/key/terminate 4 "W" 5 | $ define/key/terminate 5 "LOOK" 6 | $ define/key/terminate 6 "E" 7 | $ define/key/terminate 7 "NW" 8 | $ define/key/terminate 8 "N" 9 | $ define/key/terminate 9 "NE" 10 | $ define/key/terminate PF1 "OPEN DOOR" 11 | $ define/key/terminate PF2 "INVENTORY" 12 | $ define/key/terminate PF3 "SCORE" 13 | $ define/key/terminate PF4 "QUIT" 14 | 15 | -------------------------------------------------------------------------------- /zk/zkast_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:zk$def','lib$:zk$context_def')] 2 | module zk$ast_def; 3 | 4 | [external(zk$print_ast)] procedure $print_ast( 5 | ast : $ast_node_ptr; 6 | i : integer); 7 | extern; 8 | 9 | [external(zk$dispose_ast)] procedure $dispose_ast( 10 | ast : $ast_node_ptr); 11 | extern; 12 | 13 | [external(zk$dispatch_command)] function $dispatch_command( 14 | var context : $context_block; 15 | var actor_ptr : $object_ptr; 16 | var actor_name : varying[$u1] of char; 17 | ast : $ast_node_ptr) : boolean; 18 | extern; 19 | end. 20 | -------------------------------------------------------------------------------- /zk/zkparse_obj_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:zk$def')] 2 | module zk$parse_obj_def; 3 | 4 | [external(zk$test_symbol)] function $test_symbol( 5 | expected : $symbol_set) : boolean; 6 | extern; 7 | 8 | [external(zk$parse_object)] function $parse_object( 9 | var ast : $ast_node_ptr; 10 | followers : $symbol_set) : boolean; 11 | extern; 12 | 13 | [external(zk$parse_object_list)] function $parse_object_list( 14 | var ast : $ast_node_ptr; 15 | var verb : varying[$u1] of char; 16 | followers : $symbol_set) : boolean; 17 | extern; 18 | 19 | end. 20 | -------------------------------------------------------------------------------- /zk/make_version.pas: -------------------------------------------------------------------------------- 1 | program make_version(input, output); 2 | 3 | type $string_long = [long, unsafe] record 4 | case integer of 5 | 1: (string : packed array[1..4] of char); 6 | 2: (long : unsigned); 7 | end; 8 | 9 | var filename : varying[40] of char; 10 | version : $string_long; 11 | options_file : text; 12 | begin 13 | write('Filename? '); readln(filename); 14 | write('Version? '); readln(version.string); 15 | open(options_file, filename, history:=new); 16 | rewrite(options_file); 17 | writeln(options_file, 'SYMBOL=ZK$T_VERSION, ',version.long:0); 18 | close(options_file); 19 | end. 20 | -------------------------------------------------------------------------------- /zk/zkinit_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:zk$context_def')] 2 | module zk$init_def; 3 | 4 | [external(zk$initialize)] procedure $initialize( 5 | var context : $context_block); 6 | extern; 7 | 8 | [external(zk$restart_game)] function $restart_game( 9 | var context : $context_block) : boolean; 10 | extern; 11 | 12 | [external(zk$save_game)] function $save_game( 13 | var context : $context_block; 14 | var filename : varying[$u1] of char) : boolean; 15 | extern; 16 | 17 | [external(zk$restore_game)] function $restore_game( 18 | var context : $context_block; 19 | var filename : varying[$u1] of char) : boolean; 20 | extern; 21 | 22 | end. 23 | -------------------------------------------------------------------------------- /env/eventdef.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] module eventdef; 2 | 3 | function time$map_event : unsigned; 4 | extern; 5 | 6 | function time$put_event( 7 | event_code : char; 8 | var username : varying[$u1] of char; 9 | condition : unsigned; 10 | var message : varying[$u2] of char) : unsigned; 11 | extern; 12 | 13 | function time$get_event( 14 | var reader : integer; 15 | var date_time : $quad; 16 | var event_code : char; 17 | var username : varying[$u1] of char; 18 | var condition : unsigned; 19 | var message : varying[$u2] of char) : unsigned; 20 | extern; 21 | 22 | function time$unmap_event : unsigned; 23 | extern; 24 | 25 | end. 26 | 27 | -------------------------------------------------------------------------------- /ifc/ifcrtl_bliss.bli: -------------------------------------------------------------------------------- 1 | %TITLE 'IFC$RTL_MACRO - IFC Run-Time System code in BLISS' 2 | 3 | MODULE IFC$RTL_BLISS(IDENT = 'X01.00-00' 4 | %IF %BLISS(BLISS32V) %THEN 5 | ,ADDRESSING_MODE(EXTERNAL = GENERAL) 6 | %FI 7 | ) = 8 | BEGIN 9 | ! 10 | ! Edit History: 11 | ! 13-Sep-2009 TES Converted the MACRO-32 module to BLISS. 12 | ! 13 | ! 14 | 15 | GLOBAL ROUTINE IFC$MESSAGE : NOVALUE = 16 | BEGIN 17 | EXTERNAL ROUTINE 18 | IFC$MESSAGE_LIST : NOVALUE; 19 | 20 | BUILTIN 21 | ARGPTR; 22 | 23 | IFC$MESSAGE_LIST(ARGPTR()); 24 | END; 25 | 26 | GLOBAL ROUTINE IFC$MESSAGE_INDENT : NOVALUE = 27 | BEGIN 28 | EXTERNAL ROUTINE 29 | IFC$MESSAGE_INDENT_LIST : NOVALUE; 30 | 31 | BUILTIN 32 | ARGPTR; 33 | 34 | IFC$MESSAGE_INDENT_LIST(ARGPTR()); 35 | END; 36 | 37 | END 38 | ELUDOM 39 | -------------------------------------------------------------------------------- /zk/zkkey_def.com: -------------------------------------------------------------------------------- 1 | define/key pf1 ""/set_state=gold 2 | 3 | define/key pf2 "Inventory Self"/term 4 | define/key pf2 "Inventory Room"/if_state=gold/term 5 | define/key pf3 "Examine All"/term 6 | define/key pf4 "Take All"/term 7 | define/key pf4 "Drop All"/if_state=gold/term 8 | define/key kp0 "Look"/term 9 | define/key comma "in"/term 10 | define/key comma "out"/if_State=gold/term 11 | define/key period "say digital software engineering"/term/noecho 12 | 13 | define/key kp7 "North West"/term 14 | define/key kp8 "North"/term 15 | define/key kp9 "North East"/term 16 | define/key kp4 "West"/term 17 | define/key kp5 "Down"/term 18 | define/key kp5 "Up"/if_state=gold/term 19 | define/key kp6 "East"/term 20 | define/key kp1 "South West"/term 21 | define/key kp2 "South"/term 22 | define/key kp3 "South East"/term 23 | -------------------------------------------------------------------------------- /env/clidef.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] 2 | module clidef; 3 | 4 | [external(cli$dcl_parse)] function $dcl_parse( 5 | var command_string : varying[$u1] of char := %immed 0; 6 | var command_table : unsigned; 7 | %immed [unbound] function param_routine : unsigned := %immed 0; 8 | %immed [unbound] function prompt_routine : unsigned := %immed 0; 9 | prompt_string : varying[$u2] of char := %immed 0) : unsigned; 10 | extern; 11 | 12 | [external(cli$dispatch)] function $dispatch( 13 | %immed userarg : unsigned := %immed 0) : unsigned; 14 | extern; 15 | 16 | [external(cli$get_value)] function $get_value( 17 | entity_desc : varying[$u1] of char; 18 | var retdesc : varying[$u2] of char; 19 | var retlength : $uword := %immed 0) : unsigned; 20 | extern; 21 | 22 | [external(cli$present)] function $present( 23 | entity_desc : varying[$u1] of char) : unsigned; 24 | extern; 25 | end. 26 | -------------------------------------------------------------------------------- /env/descrip.mms: -------------------------------------------------------------------------------- 1 | PENVFLAGS = /NOOBJECT/ENVIRONMENT=$(MMS$TARGET)/NOLIST 2 | 3 | ALL : LIB$:CLIDEF.PEN LIB$:DSCDEF.PEN LIB$:EVENTDEF.PEN LIB$:LOCKDEF.PEN - 4 | LIB$:QIODEF.PEN LIB$:RTLDEF.PEN LIB$:SECDEF.PEN LIB$:SHRDEF.PEN - 5 | LIB$:SMGDEF.PEN LIB$:STSDEF.PEN LIB$:SYSDEF.PEN LIB$:TYPEDEF.PEN 6 | @ CONTINUE 7 | 8 | LIB$:CLIDEF.PEN : CLIDEF.PAS LIB$:TYPEDEF.PEN 9 | LIB$:DSCDEF.PEN : DSCDEF.PAS LIB$:TYPEDEF.PEN 10 | LIB$:EVENTDEF.PEN : EVENTDEF.PAS LIB$:TYPEDEF.PEN 11 | LIB$:LOCKDEF.PEN : LOCKDEF.PAS LIB$:TYPEDEF.PEN 12 | LIB$:QIODEF.PEN : QIODEF.PAS LIB$:TYPEDEF.PEN 13 | LIB$:RTLDEF.PEN : RTLDEF.PAS LIB$:TYPEDEF.PEN 14 | LIB$:SECDEF.PEN : SECDEF.PAS LIB$:TYPEDEF.PEN 15 | LIB$:SHRDEF.PEN : SHRDEF.PAS 16 | LIB$:SMGDEF.PEN : SMGDEF.PAS LIB$:TYPEDEF.PEN 17 | LIB$:STSDEF.PEN : STSDEF.PAS 18 | LIB$:SYSDEF.PEN : SYSDEF.PAS LIB$:TYPEDEF.PEN 19 | LIB$:TYPEDEF.PEN : TYPEDEF.PAS 20 | 21 | CLEAN : 22 | @ CONTINUE 23 | -------------------------------------------------------------------------------- /ifc/ifclex_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:ifc$def')] 2 | module ifc$lex_def; 3 | 4 | [external(ifc$open_lex)]procedure $open_lex( 5 | source_filename : varying[$u1] of char); 6 | extern; 7 | 8 | [external(ifc$close_lex)]procedure $close_lex; 9 | extern; 10 | 11 | [external(ifc$reset_lex)] procedure $reset_lex(error : boolean); 12 | extern; 13 | 14 | [external(ifc$advance_symbol)]procedure $advance_symbol; 15 | extern; 16 | 17 | [external(ifc$get_symbol)]procedure $get_symbol( 18 | var symbol : $symbol_desc); 19 | extern; 20 | 21 | [external(ifc$sync_symbol)]procedure $sync_symbol( 22 | followers : $symbol_set); 23 | extern; 24 | 25 | [external(ifc$test_symbol)]procedure $test_symbol( 26 | expected, followers : $symbol_set); 27 | extern; 28 | 29 | [external(ifc$defer_error_message)] procedure $defer_error_message( 30 | code : $error_code; 31 | string : $symbol_string; 32 | members : $symbol_set; 33 | value : $symbol_value); 34 | extern; 35 | end. 36 | -------------------------------------------------------------------------------- /zk/zkwizard_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:zk$context_def')] 2 | module zk$wizard_def; 3 | 4 | [weak_external(zk$edswbl_goto_room)] function $edswbl_goto_room( 5 | var context : $context_block; 6 | var room_number : integer) : boolean; 7 | extern; 8 | 9 | [weak_external(zk$edswbl_take_object)] function $edswbl_take_object( 10 | var context : $context_block; 11 | var object_number : integer) : boolean; 12 | extern; 13 | 14 | [weak_external(zk$edswbl_wait)] function $edswbl_wait( 15 | var context : $context_block) : boolean; 16 | extern; 17 | 18 | [weak_external(zk$edswbl_keypad)] function $edswbl_keypad( 19 | var context : $context_block) : boolean; 20 | extern; 21 | 22 | [weak_external(zk$edswbl_where)] function $edswbl_where( 23 | var context : $context_block) : boolean; 24 | extern; 25 | 26 | [weak_external(zk$edswbl_nurse)] function $edswbl_nurse( 27 | var context : $context_block) : boolean; 28 | extern; 29 | 30 | [weak_external(zk$edswbl_system)] function $edswbl_system( 31 | var context : $context_block) : boolean; 32 | extern; 33 | end. 34 | -------------------------------------------------------------------------------- /zk/zklink_time.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef', 2 | 'sys$library:starlet')] 3 | program zk$link_time; 4 | 5 | type fab$type_ptr = ^fab$type; 6 | nam$type_ptr = [unsafe]^nam$type; 7 | 8 | $pointer = record 9 | case integer of 10 | 1: (address : unsigned); 11 | 2: (char_ptr : ^char); 12 | end; 13 | 14 | var now : $uquad; 15 | version, i : integer; 16 | p : $pointer; 17 | options_file : text; 18 | fab : fab$type_ptr; 19 | nam : nam$type_ptr; 20 | 21 | function pas$fab(var file_variable : text) : fab$type_ptr; 22 | extern; 23 | 24 | begin 25 | open(options_file, 'ZKLINK_TIME.OPT', history:=new); 26 | rewrite(options_file); 27 | 28 | $gettim(now); 29 | 30 | writeln(options_file, 'SYMBOL=ZK$K_LINK_TIME_L0, ', now.l0:0); 31 | writeln(options_file, 'SYMBOL=ZK$K_LINK_TIME_L1, ', now.l1:0); 32 | 33 | fab:=pas$fab(options_file); nam:=fab^.fab$l_nam; 34 | p.address:=nam^.nam$l_ver; 35 | version:=0; 36 | for i:=2 to nam^.nam$b_ver do 37 | begin 38 | p.address:=p.address+1; 39 | version:=version*10+ord(p.char_ptr^)-48; 40 | end; 41 | 42 | writeln(options_file, 'SYMBOL=ZK$K_BASELEVEL, ', version:0); 43 | 44 | close(options_file); 45 | end. 46 | -------------------------------------------------------------------------------- /zk/make_zk.com: -------------------------------------------------------------------------------- 1 | $ pascal:="" 2 | $ link:="" 3 | $ purge:="" 4 | $ ! 5 | $ if p1 .nes. "" then goto 'p1 6 | $ mms 7 | $ ! 8 | $ set ver 9 | $ pascal/opt/nodeb/nocheck/obj=[.production] zk$main 10 | $ pascal/opt/nodeb/nocheck/obj=[.production] zk$parse 11 | $ pascal/opt/nodeb/nocheck/obj=[.production] zk$parse_obj 12 | $ pascal/opt/nodeb/nocheck/obj=[.production] zk$lex 13 | $ pascal/opt/nodeb/nocheck/obj=[.production] zk$ast 14 | $ pascal/opt/nodeb/nocheck/obj=[.production] zk$init 15 | $ pascal/opt/nodeb/nocheck/obj=[.production] zk$action 16 | $ pascal/opt/nodeb/nocheck/obj=[.production] zk$object 17 | $ pascal/opt/nodeb/nocheck/obj=[.production] zk$routines 18 | $ ! 19 | $link: 20 | $ copy zk$link_time.opt zk$prod_time.opt 21 | $ inquire foo "Do you wish to supply a different link time" 22 | $ if .not.foo then goto link1 23 | $ define/user sys$input sys$command 24 | $ run zk$prod_time 25 | $link1: 26 | $ link/notrace/exe=[.production]zk - 27 | v40shr/opt, zk$prod_time/opt, zk$version_v/opt 28 | $copy: 29 | $ set nover 30 | $ purge [.production] 31 | $ copy/log [.production]zk.exe sys$games/prot=w:r 32 | $ purge sys$games:zk.exe 33 | $ exit 34 | $update_needed: 35 | $ set nover 36 | $ exit 37 | -------------------------------------------------------------------------------- /env/secdef.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] module secdef; 2 | 3 | const sec$m_gbl = 1; 4 | sec$m_crf = 2; 5 | sec$m_dzro = 4; 6 | sec$m_wrt = 8; 7 | sec$m_shmgs = 16; 8 | sec$m_wrtmod = 192; 9 | sec$m_amod = 768; 10 | sec$m_resident = 8192; 11 | sec$m_perm = 16384; 12 | sec$m_sysgbl = 32768; 13 | sec$m_pfnmap = 65536; 14 | sec$m_expreg = 131072; 15 | sec$m_protect = 262144; 16 | sec$m_pagfil = 524288; 17 | sec$m_execute = 1048576; 18 | 19 | [asynchronous, external(sys$crmpsc)] function $crmpsc( 20 | var inadr : $quad := %immed 0; 21 | var retadr : $quad := %immed 0; 22 | %immed acmode : unsigned := %immed 0; 23 | %immed flags : unsigned := %immed 0; 24 | %stdescr gsdnam : packed array[$l1..$u1:integer] 25 | of char := %immed 0; 26 | ident : $quad := %immed 0; 27 | %immed relpag : unsigned := %immed 0; 28 | %immed chan : $uword := %immed 0; 29 | %immed pagcnt : [unsafe] unsigned := %immed 0; 30 | %immed vbn : unsigned := %immed 0; 31 | %immed prot : $uword := %immed 0; 32 | %immed pfc : unsigned := %immed 0) : unsigned; 33 | extern; 34 | 35 | [asynchronous, external(sys$deltva)] function $deltva( 36 | inadr : $quad := %immed 0; 37 | var retadr : $quad := %immed 0; 38 | %immed acmode : unsigned := %immed 0) : unsigned; 39 | extern; 40 | 41 | end. 42 | -------------------------------------------------------------------------------- /ifc/ifccld.cld: -------------------------------------------------------------------------------- 1 | module ifc$command_table 2 | 3 | ! Edit History: 4 | ! 13 Sep 2009 TES Changed qualifiers now that we generate MACRO-32. 5 | ! 6 | ! 7 | 8 | define verb exit 9 | routine ifc$exit 10 | 11 | define syntax compile_objects 12 | routine ifc$compile_objects_main 13 | parameter p1, value(required) 14 | parameter p2, label=filename, prompt="Object filename" 15 | value(required, type=$file) 16 | qualifier macro, value(required) 17 | qualifier definitions, value(required) 18 | 19 | define syntax compile_rooms 20 | routine ifc$compile_rooms_main 21 | parameter p1, value(required) 22 | parameter p2, label=filename, prompt="Room filename" 23 | value(required, type=$file) 24 | qualifier macro, value(required) 25 | qualifier definitions, value(required) 26 | 27 | define syntax compile_messages 28 | routine ifc$compile_messages_main 29 | parameter p1, value(required) 30 | parameter p2, label=filename, prompt="Message filename" 31 | value(required, type=$file) 32 | qualifier macro, value(required) 33 | qualifier definitions, value(required) 34 | 35 | define type compile_param 36 | keyword messages, syntax=compile_messages 37 | keyword rooms, syntax=compile_rooms 38 | keyword objects, syntax=compile_objects 39 | 40 | define verb compile 41 | parameter p1, value(required, type=compile_param) 42 | prompt="What" 43 | 44 | define verb help 45 | routine ifc$help 46 | parameter p1, label=help_keys, value(type=$rest_of_line) 47 | -------------------------------------------------------------------------------- /zk/dave.txt: -------------------------------------------------------------------------------- 1 | Dave's recent comments: 2 | 3 | (1) In lobby, guard's response to take keys has bad grammer. 4 | 5 | This is the plural/singular problem again. Use of 'set of keys' 6 | has temporarily fixed this problem but its a crock. The problem 7 | is that the code which prefixes 'some' or 'a' or 'an' doesn't apply 8 | to all messages. Therefore for the messages which expect singular 9 | objects, 'set of keys' works ok. For messages which see an 's' on 10 | the end of the object and append 'some', the object name 11 | 'some set of keys' doesn't make it. 12 | 13 | (2) Blue hall, N of elevator, a passage SW is described which is not 14 | implemented. 15 | 16 | TRUE. I have fixed this. 17 | 18 | (3) Diet Quiz - delicacy is spelled wrong 19 | 20 | TRUE. I fixed this yesterday or the day before. He's playing 21 | Sunday's last production compile. 22 | 23 | (4) ED's office, examine listings. 24 | 25 | I suppose he means 'the listings reads'... 26 | You seem to have changed this recently, removing READABLE from 27 | the detail of the listings. Again singular/plural problem. 28 | 29 | (5) The rooms RED_PASSAGE_1 and RED_PASSAGE_2 have the name 30 | 'End of red passage'. 31 | 32 | This was a cut/paste problem. We never noticed all the red 33 | passage rooms said 'end of red passage'. I have fixed this. 34 | 35 | (6) Could the phrase EXAMINE WALL be implemented. 36 | 37 | To mean LOOK ON ROOM, I guess, will consider 38 | -------------------------------------------------------------------------------- /zk/games.txt: -------------------------------------------------------------------------------- 1 | 2 | Tired of the same old pirates, thieves, Cyclops, wizards, dragons, horsemen, 3 | chiefs, spiders, weasel-like aliens and dungeon masters? Tired of traveling 4 | in spaceships, magic boats, magic barrels, spinning rooms and time machines? 5 | Tired of telling the robot where to go? Tired of paying $$$ for personal 6 | computer games you can't even relate to? Have we got an escape for you?! 7 | 8 | Announcing ZK, the first interactive fiction game written exclusively for the 9 | VAX! ZK is an sophisticated adventure game which takes place at Digital's 10 | Spitbrook software engineering facility. Meet famous Spitbrook personalities! 11 | Incredible treasures and mind-boggling encounters await you. Exercise your 12 | computer-related skills to solve the myriad of obstacles that lead to the 13 | acquisition of the ultimate treasure! 14 | 15 | ZK requires VAX/VMS version 4.0 or later. For reasons beyond our control 16 | performance will be poor on 4.0 and 4.1 systems. ZK is screen-based and 17 | must be played on a video terminal. The latest release can always be copied 18 | from {AURORA,GUIDO,NOD}::SYS$GAMES:ZK.EXE. A notes file has also been 19 | established at {AURORA,GUIDO,NOD}::SYS$NOTES:ZK for bug reports and general 20 | discussions of the game. 21 | 22 | Enjoy! 23 | 24 | William Lees 25 | Edmund Sullivan 26 | 27 | August 29, 1985 28 | 29 | 30 | PS - Enhancement or Maintenance releases are probable, but not promised. 31 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | The Halls of ZK 2 | 3 | Tired of the same old pirates, thieves, Cyclops, wizards, dragons, 4 | horsemen, chiefs, spiders, weasel-like aliens and dungeon masters? 5 | Tired of traveling in spaceships, magic boats, magic barrels, 6 | spinning rooms and time machines? Tired of telling the robot where 7 | to go? Tired of paying $$$$ for personal computer games you can't 8 | even relate to? Have we got an escape for you?! 9 | 10 | Announcing 'The Halls Of ZK', the original interactive fiction 11 | game written exclusively for OpenVMS! The Halls Of ZK is a 12 | sophisticated adventure game which takes place at Digital's 13 | Spitbrook software engineering facility. Meet famous Spitbrook 14 | personalities! Incredible treasures and mind-boggling encounters 15 | await you. Exercise your computer-related skills to solve the 16 | myriad of obstacles that lead to the acquisition of the ultimate 17 | treasure! 18 | 19 | The Halls of ZK was written by William Lees and Edmund Sulliva 20 | sometime in August 1985. Since that time a VAX binary and a VEST'd 21 | Alpha binary (with some source) has been floating around the 'net 22 | at various websites. Recently the full source code, including the 23 | source for the Interactive Fiction Compiler (IFC) was located by 24 | John Reagan. The code generator for IFC was re-written to output 25 | MACRO-32 source modules by Tim Sneddon and as such there are now 26 | native versions for all OpenVMS supported architectures available. 27 | -------------------------------------------------------------------------------- /kit/zkdcl_help.hlp: -------------------------------------------------------------------------------- 1 | 1 ZK 2 | The Halls Of ZK is an sophisticated adventure game which takes 3 | place at Digital's Spitbrook software engineering facility. 4 | Meet famous Spitbrook personalities! Incredible treasures and 5 | mind-boggling encounters await you. Exercise your computer- 6 | related skills to solve the myriad of obstacles that lead to 7 | the acquisition of the ultimate treasure! 8 | 9 | Format 10 | 11 | ZK 12 | 13 | 2 Credits 14 | 15 | The Halls of ZK was written by William Lees and Edmund Sullivan 16 | sometime in August 1985. Since that time a VAX binary and a 17 | VEST'd Alpha binary (with some source) has been floating around 18 | the 'net at various websites. 19 | 20 | Recently the full source code, including the source for the 21 | Interactive Fiction Compiler (IFC) was located by John Reagan. 22 | The code generator for IFC was re-written to output MACRO-32 23 | source modules by Tim Sneddon and as such there are now native 24 | versions for all OpenVMS supported architectures available. 25 | 26 | Thanks also go to Joe Ferraro for starting the quest to find 27 | and port the game from OpenVMS VAX to I64. 28 | 29 | 2 Support 30 | 31 | There is no formal support for The Halls Of ZK, it is provided 32 | "as is". The product website can be found here: 33 | 34 | http://hallsofzk.org 35 | 36 | At this website there is documentation, downloads and a 37 | community mailing list, please feel free to join. 38 | -------------------------------------------------------------------------------- /env/lockdef.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] module lockdef; 2 | 3 | const lck$m_valblk = 1; 4 | lck$m_convert = 2; 5 | lck$m_noqueue = 4; 6 | lck$m_syncsts = 8; 7 | lck$m_system = 16; 8 | lck$m_noquota = 32; 9 | lck$m_cvtsys = 64; 10 | lck$m_recover = 128; 11 | lck$m_protect = 256; 12 | lck$m_nodlckwt = 512; 13 | lck$m_nodlckblk = 1024; 14 | lck$m_deqall = 1; 15 | lck$m_cancel = 2; 16 | lck$m_invvalblk= 4; 17 | 18 | lck$k_nlmode = 0; 19 | lck$k_crmode = 1; 20 | lck$k_cwmode = 2; 21 | lck$k_prmode = 3; 22 | lck$k_pwmode = 4; 23 | lck$k_exmode = 5; 24 | 25 | type $lock_status_block = [quad] record 26 | condition : $uword; 27 | reserved : $uword; 28 | lock_id : unsigned; 29 | end; 30 | 31 | $lock_value_block = [byte(16)] record end; 32 | 33 | [asynchronous, external(sys$deq)] function $deq( 34 | %immed lkid : unsigned := %immed 0; 35 | var valblk : $lock_value_block := %immed 0; 36 | %immed acmode : unsigned := %immed 0; 37 | %immed flags : unsigned := %immed 0) : unsigned; 38 | extern; 39 | 40 | [asynchronous, external(sys$enqw)] function $enqw( 41 | %ref efn : unsigned := %immed 0; 42 | %immed lkmode : unsigned; 43 | var lksb : $lock_status_block; 44 | %immed flags : unsigned := %immed 0; 45 | %stdescr resnam : packed array[$l1..$u1:integer] 46 | of char := %immed 0; 47 | %immed parid : unsigned := %immed 0; 48 | %immed astadr : unsigned := %immed 0; 49 | %immed astprm : unsigned := %immed 0; 50 | %immed blkast : unsigned := %immed 0; 51 | %immed acmode : unsigned := %immed 0; 52 | %immed nullarg : unsigned := %immed 0) : unsigned; 53 | extern; 54 | 55 | end. 56 | -------------------------------------------------------------------------------- /zk/commands.txt: -------------------------------------------------------------------------------- 1 | EDSWBL/EDS/WBL {GO n, KEYPAD, WHERE, TAKE object } 2 | 3 | command. command[.] command THEN command THEN command 4 | [the] object AND object 5 | object FROM object 6 | 7 | N, S, E, W, NE, NW, SE, SW, U, D, IN, OUT, BACK 8 | NORTH, SOUTH, EAST, WEST, NORTH WEST/EAST, SOUTH WEST/EAST 9 | 10 | JUMP, SCREAM, XYZZY, PLUGH, WAIT, PRAY 11 | 12 | VERSION, SCORE, LOOK, EXIT/LEAVE, ENTER, SAVE, RESTORE, RESTART, QUIT/^Z 13 | BRIEF/QUIET, VERBOSE, HELLO 14 | 15 | GO/WALK/RUN 16 | PUSH/PULL/MOVE [] 17 | 18 | INVENTORY [] READ EXAMINE 19 | DROP BOOT INSTALL 20 | FOLLOW WEAR BOARD 21 | DISEMBARK GET/TAKE/DISMOUNT/REMOVE 22 | LOCATE SHUT SHAKE/WAVE 23 | 24 | LOCK [WITH ] UNLOCK [WITH ] 25 | OPEN [WITH ] CLOSE [WITH ] 26 | STOP [WITH ] LIGHT/START [WITH ] 27 | DESTROY/BREAK/KILL/SMASH/MUNG [WITH ] 28 | CURE/HEAL/REPAIR/FIX [WITH ] 29 | RUB/FONDLE [WITH ] 30 | 31 | MOUNT/PUT IN/ON 32 | GIVE TO 33 | 34 | TURN ON/OFF TURN ON/OFF 35 | SHUT OFF SHUT OFF 36 | PLAY WITH LOOK AT LOOK IN 37 | PUT ON PUT ON PICK UP 38 | PUT DOWN PUT DOWN STAND ON 39 | STEP ON/OFF GET ON/OFF WHERE IS 40 | 41 | SAY token [token...] 42 | TELL/ASK , 43 | TYPE digits LOOK UP "" 44 | -------------------------------------------------------------------------------- /zk/zkhelp.hlp: -------------------------------------------------------------------------------- 1 | EDSWBL/EDS/WBL {GO n, KEYPAD, WHERE, TAKE object } 2 | 3 | command. command[.] command THEN command THEN command 4 | [the] object AND object 5 | object FROM object 6 | 7 | N, S, E, W, NE, NW, SE, SW, U, D, IN, OUT, BACK 8 | NORTH, SOUTH, EAST, WEST, NORTH WEST/EAST, SOUTH WEST/EAST 9 | 10 | JUMP, SCREAM, XYZZY, PLUGH, WAIT, PRAY 11 | 12 | VERSION, SCORE, LOOK, EXIT/LEAVE, ENTER, SAVE, RESTORE, RESTART, QUIT/^Z 13 | BRIEF/QUIET, VERBOSE, HELLO 14 | 15 | GO/WALK/RUN 16 | PUSH/PULL/MOVE [] 17 | 18 | INVENTORY [] READ EXAMINE 19 | DROP BOOT INSTALL 20 | FOLLOW WEAR BOARD 21 | DISEMBARK GET/TAKE/DISMOUNT/REMOVE 22 | LOCATE SHUT SHAKE/WAVE 23 | 24 | LOCK [WITH ] UNLOCK [WITH ] 25 | OPEN [WITH ] CLOSE [WITH ] 26 | STOP [WITH ] LIGHT/START [WITH ] 27 | DESTROY/BREAK/KILL/SMASH/MUNG [WITH ] 28 | CURE/HEAL/REPAIR/FIX [WITH ] 29 | RUB/FONDLE [WITH ] 30 | 31 | MOUNT/PUT IN/ON 32 | GIVE TO 33 | 34 | TURN ON/OFF TURN ON/OFF 35 | SHUT OFF SHUT OFF 36 | PLAY WITH LOOK AT LOOK IN 37 | PUT ON PUT ON PICK UP 38 | PUT DOWN PUT DOWN STAND ON 39 | STEP ON/OFF GET ON/OFF WHERE IS 40 | 41 | SAY token [token...] 42 | TELL/ASK , 43 | TYPE digits LOOK UP "" 44 | -------------------------------------------------------------------------------- /env/qiodef.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] module qiodef; 2 | 3 | const io$_setmode = 35; 4 | io$_writevblk = 48; 5 | io$_readvblk = 49; 6 | io$m_ctrlcast = 256; 7 | io$m_ctrlyast = 128; 8 | io$m_readattn = 128; 9 | io$m_wrtattn = 256; 10 | io$m_now = 64; 11 | 12 | type $iosb_mailbox = [quad] record 13 | status : [unsafe] $uword; 14 | byte_count : $uword; 15 | pid : unsigned; 16 | end; 17 | 18 | [asynchronous, external(sys$qiow)] function $qiow_ast( 19 | %immed efn : unsigned := %immed 0; 20 | %immed chan : [unsafe] $uword; 21 | %immed func : unsigned; 22 | var iosb : $quad := %immed 0; 23 | %immed [unbound, asynchronous] procedure $astadr( 24 | var ast_param, r0, r1, pc, psl : unsigned) := %immed 0; 25 | %immed astprm : [unsafe] unsigned := %immed 0; 26 | %immed [unbound, asynchronous] procedure $ast_routine( 27 | var ast_param, r0, r1, pc, psl : unsigned) := %immed 0; 28 | %immed ast_param : [unsafe] unsigned := %immed 0; 29 | %immed access_mode : unsigned := %immed 0; 30 | %immed p4 : unsigned := %immed 0; 31 | %immed p5 : unsigned := %immed 0; 32 | %immed p6 : unsigned := %immed 0) : unsigned; 33 | extern; 34 | 35 | [asynchronous, external(sys$qiow)] function $qiow( 36 | %immed efn : unsigned := %immed 0; 37 | %immed chan : [unsafe] $uword; 38 | %immed func : unsigned; 39 | var iosb : $quad := %immed 0; 40 | %immed [unbound, asynchronous] procedure $astadr( 41 | var ast_param, r0, r1, pc, psl : unsigned) := %immed 0; 42 | %immed astprm : [unsafe] unsigned := %immed 0; 43 | %immed buffer : unsigned := %immed 0; 44 | %immed bufsiz : unsigned := %immed 0; 45 | %immed p3 : unsigned := %immed 0; 46 | %immed p4 : unsigned := %immed 0; 47 | %immed p5 : unsigned := %immed 0; 48 | %immed p6 : unsigned := %immed 0) : unsigned; 49 | extern; 50 | 51 | end. 52 | -------------------------------------------------------------------------------- /env/ssdef.pas: -------------------------------------------------------------------------------- 1 | [inherit('typedef')] module ssdef; 2 | 3 | var ss$_normal, 4 | ss$_created, 5 | ss$_msgnotfnd, 6 | rms$_nmf: 7 | [external, value] unsigned; 8 | 9 | [asynchronous, external(sys$fao)] function $fao( 10 | %stdescr ctrstr : packed array[$l1..$u1:integer] of char; 11 | var outlen : $uword := %immed 0; 12 | %stdescr outbuf : packed array[$l2..$u2:integer] of char; 13 | %immed args : [list] unsigned) : unsigned; 14 | extern; 15 | 16 | [asynchronous, external(sys$getmsg)] function $getmsg( 17 | %immed msgid : unsigned; 18 | var msglen : $uword; 19 | %stdescr bufadr : packed array[$l1..$u1:integer] of char; 20 | %immed flags : unsigned := %immed 0; 21 | var outadr : unsigned := %immed 0) : unsigned; 22 | extern; 23 | 24 | [asynchronous, external(sys$gettim)] function $gettim( 25 | var timadr : $quad) : unsigned; 26 | extern; 27 | 28 | [asynchronous, external(sys$bintim)] function $bintim( 29 | %stdescr timbuf : packed array[$l1..$u1:integer] of char; 30 | var timadr : $quad) : unsigned; 31 | extern; 32 | 33 | [asynchronous, external(sys$asctim)] function $asctim( 34 | var timlen : $uword := %immed 0; 35 | %stdescr timbuf : packed array[$l1..$u1:integer] of char; 36 | %ref timadr : $quad; 37 | %immed cvtflg : unsigned := %immed 0) : unsigned; 38 | extern; 39 | 40 | [asynchronous, external(sys$schdwk)] function $schdwk( 41 | %ref pidadr : unsigned := %immed 0; 42 | %stdescr prcnam : packed array[$l1..$u1:integer] 43 | of char := %immed 0; 44 | daytim : $quad; 45 | reptim : $quad := %immed 0) : unsigned; 46 | extern; 47 | 48 | [asynchronous, external(sys$wake)] function $wake( 49 | %ref pidadr : unsigned := %immed 0; 50 | %stdescr prcnam : packed array[$l1..$u1:integer] 51 | of char := %immed 0) : unsigned; 52 | extern; 53 | 54 | [asynchronous, external(sys$hiber)] function $hiber : unsigned; 55 | extern; 56 | end. 57 | -------------------------------------------------------------------------------- /ifc/ifcdef.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] 2 | module ifc$def; 3 | 4 | type $longword = [unsafe, long] packed record 5 | case integer of 6 | 1 : (long : unsigned); 7 | 2 : (word0, word1 : $uword); 8 | 3 : (byte0, byte1, byte2, byte3 : $ubyte); 9 | end; 10 | 11 | type $symbol_token = (identifier, integer_constant, unknown, 12 | invalid, end_of_file, text_string, 13 | character, 14 | 15 | plus_symbol, minus_symbol, star_symbol, 16 | fslash_symbol, equal_symbol, left_paren_symbol, 17 | right_paren_symbol, semicolon_symbol, 18 | colon_symbol, comma_symbol, dot_symbol, 19 | 20 | prefix_keyword, ident_keyword, message_keyword, 21 | end_keyword, fao_keyword, description_keyword, 22 | name_keyword, room_keyword, north_keyword, 23 | south_keyword, east_keyword, west_keyword, 24 | north_east_keyword, south_west_keyword, 25 | south_east_keyword, north_west_keyword, 26 | up_keyword, down_keyword, in_keyword, 27 | out_keyword, object_keyword, 28 | detail_keyword, strength_keyword, capacity_keyword, 29 | area_keyword, mass_keyword, volume_keyword, 30 | size_keyword, generic_keyword, specific_keyword, 31 | static_keyword, initial_keyword, infinite_keyword, 32 | bold_keyword, reverse_keyword, blink_keyword, 33 | underline_keyword, readable_keyword, 34 | openable_keyword, door_keyword, lockable_keyword, 35 | startable_keyword, cognizant_keyword, machine_keyword, 36 | flexible_keyword, class_keyword); 37 | 38 | $symbol_set = set of $symbol_token; 39 | $symbol_value = [unsafe] integer; 40 | $symbol_string = varying[132] of char; 41 | 42 | $symbol_desc = record 43 | string : $symbol_string; 44 | token : $symbol_token; 45 | value : $symbol_value; 46 | error : boolean; 47 | end; 48 | 49 | $error_code = (error_strtrm, error_invchr, error_syntax, 50 | error_expect, error_sync, error_skip, 51 | error_muldef); 52 | 53 | end. 54 | -------------------------------------------------------------------------------- /env/dscdef.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] module dscdef; 2 | 3 | const dsc$k_dtype_z = 0; 4 | dsc$k_dtype_v = 1; 5 | dsc$k_dtype_bu = 2; 6 | dsc$k_dtype_wu = 3; 7 | dsc$k_dtype_lu = 4; 8 | dsc$k_dtype_qu = 5; 9 | dsc$k_dtype_ou = 25; 10 | dsc$k_dtype_b = 6; 11 | dsc$k_dtype_w = 7; 12 | dsc$k_dtype_l = 8; 13 | dsc$k_dtype_q = 9; 14 | dsc$k_dtype_o = 26; 15 | dsc$k_dtype_f = 10; 16 | dsc$k_dtype_d = 11; 17 | dsc$k_dtype_g = 27; 18 | dsc$k_dtype_h = 28; 19 | dsc$k_dtype_fc = 12; 20 | dsc$k_dtype_dc = 13; 21 | dsc$k_dtype_gc = 29; 22 | dsc$k_dtype_hc = 30; 23 | dsc$k_dtype_cit = 31; 24 | dsc$k_dtype_vu = 34; 25 | dsc$k_dtype_t = 14; 26 | dsc$k_dtype_vt = 37; 27 | dsc$k_dtype_nu = 15; 28 | dsc$k_dtype_nl = 16; 29 | dsc$k_dtype_nlo = 17; 30 | dsc$k_dtype_nr = 18; 31 | dsc$k_dtype_nro = 19; 32 | dsc$k_dtype_nz = 20; 33 | dsc$k_dtype_p = 21; 34 | dsc$k_dtype_zi = 22; 35 | dsc$k_dtype_zem = 23; 36 | dsc$k_dtype_dsc = 24; 37 | dsc$k_dtype_bpv = 32; 38 | dsc$k_dtype_blv = 33; 39 | dsc$k_dtype_adt = 35; 40 | dsc$k_dtype_cad = 178; 41 | dsc$k_dtype_ent = 179; 42 | dsc$k_dtype_gbl = 180; 43 | dsc$k_dtype_ept = 181; 44 | dsc$k_dtype_r11 = 182; 45 | dsc$k_dtype_fld = 183; 46 | dsc$k_dtype_pct = 184; 47 | dsc$k_dtype_dpc = 185; 48 | dsc$k_dtype_lbl = 186; 49 | dsc$k_dtype_slb = 187; 50 | dsc$k_dtype_mod = 188; 51 | dsc$k_dtype_eom = 189; 52 | dsc$k_dtype_rtn = 190; 53 | dsc$k_dtype_eor = 191; 54 | 55 | dsc$k_class_z = 0; 56 | dsc$k_class_s = 1; 57 | dsc$k_class_d = 2; 58 | dsc$k_class_v = 3; 59 | dsc$k_class_a = 4; 60 | dsc$k_class_p = 5; 61 | dsc$k_class_pi = 6; 62 | dsc$k_class_j = 7; 63 | dsc$k_class_ji = 8; 64 | dsc$k_class_sd = 9; 65 | dsc$k_class_nca = 10; 66 | dsc$k_class_vs = 11; 67 | dsc$k_class_vsa = 12; 68 | dsc$k_class_ubs = 13; 69 | dsc$k_class_uba = 14; 70 | dsc$k_class_sb = 15; 71 | dsc$k_class_ubsb = 16; 72 | dsc$k_class_bfa = 191; 73 | 74 | type $descriptor = [quad] record 75 | dsc$w_length : $uword; 76 | dsc$b_dtype : $ubyte; 77 | dsc$b_class : $ubyte; 78 | dsc$a_pointer : unsigned; 79 | end; 80 | 81 | end. 82 | -------------------------------------------------------------------------------- /ifc/ifcrtl_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] 2 | module ifc$rtl_def; 3 | 4 | [asynchronous, external(ifc$message)] function $message( 5 | %immed message_codes : [list] unsigned) : unsigned; 6 | extern; 7 | 8 | [asynchronous, external(ifc$message_indent)] function $message_indent( 9 | %immed message_codes : [list] unsigned) : unsigned; 10 | extern; 11 | 12 | [external(ifc$get_room_info)] function $get_room_info( 13 | var table : unsigned; 14 | room_number : unsigned; 15 | var message_code : unsigned; 16 | var name : varying[$u1] of char; 17 | var link : [truncate] packed array[$l1..$u2:integer] of $ubyte; 18 | var class : [truncate] integer) : unsigned; 19 | extern; 20 | 21 | [external(ifc$get_object_info)] function $get_object_info( 22 | var table : unsigned; 23 | object_number : integer; 24 | var detail : unsigned; 25 | var name : varying[$u1] of char; 26 | var flags : [truncate] unsigned; 27 | var count : [truncate] integer; 28 | var info : packed array[$l2..$u2:integer] of $ubyte) : unsigned; 29 | extern; 30 | 31 | [external(ifc$init_screen)] function $init_screen( 32 | key_logical_name : varying[$u1] of char; 33 | [unbound, asynchronous] procedure ast_routine; 34 | ast_argument : [unsafe] unsigned) : unsigned; 35 | extern; 36 | 37 | [external(ifc$finish_screen)] function $finish_screen : unsigned; 38 | extern; 39 | 40 | [external(ifc$update_status_room)] function $update_status_room( 41 | var string : varying[$u1] of char) : unsigned; 42 | extern; 43 | 44 | [external(ifc$update_status_numbers)] function $update_status_numbers( 45 | var score : integer; 46 | var moves : integer) : unsigned; 47 | extern; 48 | 49 | [external(ifc$get_composed_line)] function $get_composed_line( 50 | var string : varying[$u1] of char; 51 | prompt_string : varying[$u2] of char) : unsigned; 52 | extern; 53 | 54 | [external(ifc$get_string)] function $get_string( 55 | var string : varying[$u1] of char; 56 | prompt_string : varying[$u2] of char) : unsigned; 57 | extern; 58 | 59 | [external(ifc$output_broadcast_messages)] function 60 | $output_broadcast_messages : unsigned; 61 | extern; 62 | end. 63 | -------------------------------------------------------------------------------- /ifc/descrip.mms: -------------------------------------------------------------------------------- 1 | PENVFLAGS = /NOOBJECT/ENVIRONMENT=$(MMS$TARGET)/NOLIST 2 | 3 | .IFDEF MMSALPHA 4 | .FIRST : 5 | @ IF (F$SEARCH("DISK$COMMON:[KEDNOS_AXP_TOOLS.PASCAL060]KEDNOS_PASCAL.COM") .NES. "") THEN - 6 | @DISK$COMMON:[KEDNOS_AXP_TOOLS.PASCAL060]KEDNOS_PASCAL 7 | .ENDIF 8 | 9 | ALL : ENV_FILES IFC_RTL EXE$:IFC.EXE 10 | @ CONTINUE 11 | 12 | ENV_FILES : LIB$:IFC$MSG_DEF.PEN LIB$:IFC$LEX_DEF.PEN - 13 | LIB$:IFC$ROOM_DEF.PEN LIB$:IFC$MESSAGE_DEF.PEN - 14 | LIB$:IFC$OBJECT_DEF.PEN 15 | @ CONTINUE 16 | 17 | IFC_RTL : LIB$:IFC$RTL_DEF.PEN LIB$:IFC$RTL.OLB 18 | @ CONTINUE 19 | 20 | EXE$:IFC.EXE : OBJ$:IFC.OBJ OBJ$:IFC$MSG.OBJ OBJ$:IFC$CLD.OBJ - 21 | OBJ$:IFC$LEX.OBJ OBJ$:IFC$MESSAGE.OBJ OBJ$:IFC$ROOM.OBJ - 22 | OBJ$:IFC$OBJECT.OBJ 23 | LINK/EXECUTABLE=$(MMS$TARGET) $(MMS$SOURCE_LIST) 24 | 25 | LIB$:IFC$RTL.OLB : LIB$:IFC$RTL.OLB(OBJ$:IFC$RTL_SCREEN.OBJ) - 26 | LIB$:IFC$RTL.OLB(OBJ$:IFC$RTL_PASCAL.OBJ) - 27 | LIB$:IFC$RTL.OLB(OBJ$:IFC$RTL_BLISS.OBJ) - 28 | LIB$:IFC$RTL.OLB(OBJ$:IFC$MSG.OBJ) 29 | @ CONTINUE 30 | 31 | OBJ$:IFC$RTL_BLISS.OBJ : IFCRTL_BLISS.BLI 32 | OBJ$:IFC$RTL_PASCAL.OBJ : IFCRTL_PASCAL.PAS LIB$:IFC$MSG_DEF.PEN 33 | OBJ$:IFC$RTL_SCREEN.OBJ : IFCRTL_SCREEN.PAS 34 | 35 | OBJ$:IFC.OBJ : IFC.PAS LIB$:IFC$MSG_DEF.PEN LIB$:IFC$MESSAGE_DEF.PEN - 36 | LIB$:IFC$ROOM_DEF.PEN LIB$:IFC$OBJECT_DEF.PEN 37 | OBJ$:IFC$LEX.OBJ : IFCLEX.PAS LIB$:IFC$DEF.PEN 38 | OBJ$:IFC$OBJ_$(MMSARCH_NAME).OBJ : IFCOBJ_$(MMSARCH_NAME).PAS 39 | OBJ$:IFC$MESSAGE.OBJ : IFCMESSAGE.PAS LIB$:IFC$LEX_DEF.PEN LIB$:IFC$DEF.PEN 40 | OBJ$:IFC$ROOM.OBJ : IFCROOM.PAS LIB$:IFC$LEX_DEF.PEN LIB$:IFC$DEF.PEN 41 | OBJ$:IFC$OBJECT.OBJ : IFCOBJECT.PAS LIB$:IFC$LEX_DEF.PEN LIB$:IFC$DEF.PEN 42 | OBJ$:IFC$CLD.OBJ : IFCCLD.CLD 43 | OBJ$:IFC$MSG.OBJ : IFCMSG.MSG 44 | 45 | LIB$:IFC$MSG_DEF.PEN : IFCMSG_DEF.PAS 46 | LIB$:IFC$LEX_DEF.PEN : IFCLEX_DEF.PAS LIB$:IFC$DEF.PEN 47 | LIB$:IFC$MESSAGE_DEF.PEN : IFCMESSAGE_DEF.PAS 48 | LIB$:IFC$ROOM_DEF.PEN : IFCROOM_DEF.PAS 49 | LIB$:IFC$OBJECT_DEF.PEN : IFCOBJECT_DEF.PAS 50 | LIB$:IFC$RTL_DEF.PEN : IFCRTL_DEF.PAS 51 | LIB$:IFC$DEF.PEN : IFCDEF.PAS 52 | 53 | CLEAN : 54 | @ CONTINUE 55 | -------------------------------------------------------------------------------- /zk/zkaction_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:zk$context_def')] 2 | module zk$action_def; 3 | 4 | (* Commands with no objects *) 5 | 6 | [external(zk$score)] procedure $score( 7 | var context : $context_block); 8 | extern; 9 | 10 | [external(zk$advance_clock)] function $advance_clock( 11 | var context : $context_block) : boolean; 12 | extern; 13 | 14 | [external(zk$describe_room)] function $describe_room( 15 | var context : $context_block; 16 | room : integer; 17 | seen_room : boolean; 18 | brief : boolean) : boolean; 19 | extern; 20 | 21 | [external(zk$version)] function $version : boolean; 22 | extern; 23 | 24 | [external(zk$hello)] function $hello( 25 | var context : $context_block; 26 | actor_ptr : $object_ptr; 27 | var name : varying[$u1] of char) : boolean; 28 | extern; 29 | 30 | [external(zk$wait)] function $wait( 31 | var context : $context_block; 32 | actor_ptr : $object_ptr; 33 | var name : varying[$u1] of char) : boolean; 34 | extern; 35 | 36 | [external(zk$quit)] function $quit( 37 | var context : $context_block; 38 | actor_ptr : $object_ptr; 39 | var name : varying[$u1] of char) : boolean; 40 | extern; 41 | 42 | [external(zk$say_string)] function $say_string( 43 | var context : $context_block; 44 | var string : varying[$u1] of char) : boolean; 45 | extern; 46 | 47 | [external(zk$lookup_string)] function $lookup_string( 48 | var context : $context_block; 49 | actor_ptr : $object_ptr; 50 | var actor_name : varying[$u1] of char; 51 | var string : varying[$u2] of char) : boolean; 52 | extern; 53 | 54 | [external(zk$move_direction)] function $move_direction( 55 | var context : $context_block; 56 | actor_ptr : $object_ptr; 57 | var actor_name : varying[$u1] of char; 58 | direction : integer; 59 | object_ptr : $object_ptr; 60 | var name : varying[$u2] of char) : boolean; 61 | extern; 62 | 63 | [external(zk$type_number)] function $type_number( 64 | var context : $context_block; 65 | actor_ptr : $object_ptr; 66 | var actor_name : varying[$u1] of char; 67 | var number : integer) : boolean; 68 | extern; 69 | 70 | [external(zk$install_object)] function $install_object( 71 | var context : $context_block; 72 | actor_ptr : $object_ptr; 73 | var actor_name : varying[$u1] of char) : boolean; 74 | extern; 75 | 76 | end. 77 | -------------------------------------------------------------------------------- /kit/kitinstal.com: -------------------------------------------------------------------------------- 1 | $! 2 | $! KITINSTAL procedure for ZK 3 | $! 4 | $ on control_y then vmi$callback control_y 5 | $ on warning then exit $status 6 | $ 7 | $! Determine architecture... 8 | $! 9 | $ version = f$integer(f$extract(1,1,f$getsyi("VERSION"))) 10 | $ if (version .ge. 6) 11 | $ then 12 | $ _arch_type = f$getsyi("ARCH_TYPE") 13 | $ _arch_name = f$element(_arch_type,",","OTHER,VAX,ALPHA,I64") - "," 14 | $ _vax = (_arch_type .eq. 1) 15 | $ _axp = (_arch_type .eq. 2) 16 | $ _i64 = (_arch_type .eq. 3) 17 | $ _other = (.not. (_vax .or. _axp .or. _i64)) 18 | $ else 19 | $ _vax = (f$search("SYS$SYSTEM:VMB.EXE") .nes. "") 20 | $ if (_vax) 21 | $ then 22 | $ _arch_type = 1 23 | $ _arch_name = "VAX" 24 | $ else 25 | $ _arch_type = 2 26 | $ _arch_name = "ALPHA" 27 | $ _axp = 1 28 | $ endif 29 | $ endif 30 | $ 31 | $! Determine course of action... 32 | $! 33 | $ if (p1 .eqs. "VMI$_INSTALL") then goto zk_install 34 | $ exit VMI$_UNSUPPORTED 35 | $ 36 | $! Install the product 37 | $! 38 | $zk_install: 39 | $ type sys$input: 40 | 41 | The Halls Of ZK 42 | 43 | This procedure install the sophisticated, interactive fiction 44 | adventure game, The Halls Of ZK. Discover incredible treasures, 45 | famous personalities and mind-boggling encounters as you walk the 46 | halls of Digital's Spitbrook software engineering facility. 47 | 48 | Installation of this product is supported on OpenVMS VAX, 49 | Alpha and I64. If you have an unsupported architecture, consider 50 | downloading the source kit and have a shot at building it. 51 | 52 | For support, downloads and other things related to ZK, visit 53 | the ZK webpage, here: 54 | 55 | http://hallsofzk.org 56 | 57 | $ 58 | $ save_set = f$element(_arch_type,",",",B,C,D") - "," 59 | $ 60 | $ if (save_set .eqs. "") 61 | $ then 62 | $ vmi$callback message E BADARCH "architecture not supported" - 63 | "binary installation is impossible" 64 | $ exitt 1 65 | $ endif 66 | $ 67 | $ vmi$callback restore_saveset 'save_set' 68 | $ 69 | $ vmi$callback provide_image zk$main zk$main.exe vmi$root:[sysexe] 70 | $ vmi$callback provide_dcl_command zk$cld.cld 71 | $ vmi$callback provide_dcl_help zk$dcl_help.hlp 72 | $ 73 | $ exit $status 74 | -------------------------------------------------------------------------------- /zk/computer.txt: -------------------------------------------------------------------------------- 1 | From: GUIDO::LEES "Will (ZKO1-2/D01, 381-1326)" 6-AUG-1985 09:45 2 | To: ED 3 | Subj: comments? 4 | 5 | Work Items for Computer Problem 6 | 7 | 1. Fixing the game such at you can only put logical things in the 8 | disk drive and the tape drive. 9 | 10 | check. 11 | 12 | 2. Distinguish between START and BOOT. START means turn on, while 13 | BOOT means get the OS running. 14 | 15 | there must be instructions somewhere for these suttle differences. 16 | how about on a hardware manaual lieing around. 17 | 18 | 3. Make console work: 19 | Have variable, last message on console. When you read 20 | the console you get the last message sent there. 21 | 22 | good. 'EXAM CONSOLE' 23 | 24 | 4. Error for BOOT with no disk in drive 25 | 26 | message on console "ZK-F- must have a valid system disk, no scratch" 27 | 28 | 5. If BOOT with scratch disk in drive 29 | Failure 30 | Service gnome appears 31 | give disk to field service rep 32 | returns system disk 33 | 34 | 6. If BOOT with system disk in drive, message on console 35 | "Standalone ZKINSTALL is running and waiting..." 36 | 37 | 7. If take disk out while booted, what happens? 38 | 39 | They die. They get a face full of magnetic disk. 40 | 41 | 8. if INSTALL with no tape in drive, error 42 | 43 | ZKINSTALL-F- media not in drive. 44 | 45 | 9. if INSTALL with different product in drive, error 46 | 47 | ZKINSTAL-F- INVAILID TAPE ON DRIVE ! see comment below. 48 | 49 | 10. Order of installation is VMS, CDD, DTR 50 | 51 | 11. If wrong order then "ZKINSTAL-W- PREREQUISITE PRODUCT REQUIRED" 52 | 53 | 12. If already installed then "ZKINSTAL-W- PRODUCT ALREADY INSTALLED" 54 | 55 | 13. What happens when they boot the vax with all products installed? 56 | SPAWN to $ level? 57 | 58 | Fine. No, Great. 59 | 60 | 14. What happens if they just install VMS. and don't install CDD!!!!! 61 | 62 | Well?? 63 | 64 | 65 | 66 | 67 | Commands: 68 | 69 | start vax 70 | boot vax 71 | put system disk in disk drive 72 | put vms tape in tape drive 73 | install vms 74 | ! What if they stop here 75 | take vms tape from disk drive 76 | put cdd tape in tape drive 77 | install cdd 78 | ! What if they stop here 79 | take cdd tape from disk drive 80 | put dtr tape in tape drive 81 | install dtr 82 | 83 | 84 | Comments: 85 | 86 | I think the command 'INSTAL [product]' should be just 'INSTALL'. 87 | Having the product name buys you nothing except error checking. 88 | Beside people will try '*' and stuff like that. The instructions 89 | for install say that it will install whatever's on the mag tape. 90 | -------------------------------------------------------------------------------- /env/jpidef.mar: -------------------------------------------------------------------------------- 1 | .MACRO $JPIDEF,$GBL 2 | $DEFINI JPI,$GBL 3 | $EQU JPI$C_ADRTYPE 1 4 | $EQU JPI$C_CTLTYPE 2 5 | $EQU JPI$C_PCBTYPE 3 6 | $EQU JPI$C_PHDTYPE 4 7 | $EQU JPI$C_PCBFLDTYPE 5 8 | $EQU JPI$C_PHDFLDTYPE 6 9 | $EQU JPI$C_JIBTYPE 7 10 | $EQU JPI$C_MAXSTRUC 6 11 | $EQU JPI$C_LISTEND 0 12 | $EQU JPI$_CHAIN -1 13 | $EQU JPI$K_OTHER 0 14 | $EQU JPI$K_NETWORK 1 15 | $EQU JPI$K_BATCH 2 16 | $EQU JPI$K_INTERACTIVE 3 17 | $EQU JPI$K_DETACHED 0 18 | $EQU JPI$K_LOCAL 3 19 | $EQU JPI$K_DIALUP 4 20 | $EQU JPI$K_REMOTE 5 21 | $EQU JPI$_ASTACT 768 22 | $EQU JPI$_ASTEN 769 23 | $EQU JPI$_PRI 770 24 | $EQU JPI$_OWNER 771 25 | $EQU JPI$_UIC 772 26 | $EQU JPI$_STS 773 27 | $EQU JPI$_STATE 774 28 | $EQU JPI$_MEM 775 29 | $EQU JPI$_GRP 776 30 | $EQU JPI$_PRIB 777 31 | $EQU JPI$_APTCNT 778 32 | $EQU JPI$_TMBU 779 33 | $EQU JPI$_GPGCNT 780 34 | $EQU JPI$_PPGCNT 781 35 | $EQU JPI$_ASTCNT 782 36 | $EQU JPI$_BIOCNT 783 37 | $EQU JPI$_BIOLM 784 38 | $EQU JPI$_BYTCNT 785 39 | $EQU JPI$_DIOCNT 786 40 | $EQU JPI$_DIOLM 787 41 | $EQU JPI$_FILCNT 788 42 | $EQU JPI$_TQCNT 789 43 | $EQU JPI$_EFWM 790 44 | $EQU JPI$_EFCS 791 45 | $EQU JPI$_EFCU 792 46 | $EQU JPI$_PID 793 47 | $EQU JPI$_BYTLM 794 48 | $EQU JPI$_PRCCNT 795 49 | $EQU JPI$_PRCNAM 796 50 | $EQU JPI$_TERMINAL 797 51 | $EQU JPI$_JOBPRCCNT 798 52 | $EQU JPI$_ENQCNT 799 53 | $EQU JPI$_ENQLM 800 54 | $EQU JPI$_SWPFILLOC 801 55 | $EQU JPI$_MODE 802 56 | $EQU JPI$_JOBTYPE 803 57 | $EQU JPI$_PROC_INDEX 804 58 | $EQU JPI$_MASTER_PID 805 59 | $EQU JPI$_LASTPCB 806 60 | $EQU JPI$_CURPRIV 1024 61 | $EQU JPI$_WSAUTH 1025 62 | $EQU JPI$_WSQUOTA 1026 63 | $EQU JPI$_DFWSCNT 1027 64 | $EQU JPI$_FREP0VA 1028 65 | $EQU JPI$_FREP1VA 1029 66 | $EQU JPI$_DFPFC 1030 67 | $EQU JPI$_CPUTIM 1031 68 | $EQU JPI$_PRCLM 1032 69 | $EQU JPI$_ASTLM 1033 70 | $EQU JPI$_PAGEFLTS 1034 71 | $EQU JPI$_DIRIO 1035 72 | $EQU JPI$_BUFIO 1036 73 | $EQU JPI$_CPULIM 1037 74 | $EQU JPI$_PGFLQUOTA 1038 75 | $EQU JPI$_FILLM 1039 76 | $EQU JPI$_TQLM 1040 77 | $EQU JPI$_WSSIZE 1041 78 | $EQU JPI$_AUTHPRIV 1042 79 | $EQU JPI$_IMAGPRIV 1043 80 | $EQU JPI$_PAGFILCNT 1044 81 | $EQU JPI$_FREPTECNT 1045 82 | $EQU JPI$_WSEXTENT 1046 83 | $EQU JPI$_WSAUTHEXT 1047 84 | $EQU JPI$_AUTHPRI 1048 85 | $EQU JPI$_PAGFILLOC 1049 86 | $EQU JPI$_IMAGECOUNT 1050 87 | $EQU JPI$_PHDFLAGS 1051 88 | $EQU JPI$_LASTPHD 1052 89 | $EQU JPI$_VIRTPEAK 512 90 | $EQU JPI$_WSPEAK 513 91 | $EQU JPI$_USERNAME 514 92 | $EQU JPI$_ACCOUNT 515 93 | $EQU JPI$_PROCPRIV 516 94 | $EQU JPI$_VOLUMES 517 95 | $EQU JPI$_LOGINTIM 518 96 | $EQU JPI$_IMAGNAME 519 97 | $EQU JPI$_SITESPEC 520 98 | $EQU JPI$_MSGMASK 521 99 | $EQU JPI$_CLINAME 522 100 | $EQU JPI$_TABLENAME 523 101 | $EQU JPI$_CREPRC_FLAGS 524 102 | $EQU JPI$_UAF_FLAGS 525 103 | $EQU JPI$_MAXDETACH 526 104 | $EQU JPI$_MAXJOBS 527 105 | $EQU JPI$_SHRFILLM 528 106 | $EQU JPI$_LASTCTL 529 107 | $EQU JPI$_EXCVEC 256 108 | $EQU JPI$_FINALEXC 257 109 | $EQU JPI$_LASTADR 258 110 | $EQU JPI$_LASTPCBFLD 1280 111 | $EQU JPI$_LASTPHDFLD 1536 112 | $DEFEND JPI,$GBL,DEF 113 | .ENDM 114 | -------------------------------------------------------------------------------- /ifc/ifcrtl_pascal.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef', 2 | 'lib$:rtldef', 3 | 'lib$:ifc$msg_def'), 4 | ident('X01.00-00')] 5 | module ifc$rtl_pascal; (* IFC Run-Time System code in PASCAL *) 6 | 7 | (* Edit History *) 8 | (* 13-Sep-2009 TES Changed to support conversion from VAX object to *) 9 | (* MACRO-32 code generation. *) 10 | (* *) 11 | 12 | type $room = packed record 13 | message : integer; 14 | name : integer; 15 | class : integer; 16 | link : packed array[1..14] of integer; 17 | end; 18 | 19 | $object = packed record 20 | detail : integer; 21 | name : integer; 22 | flags : integer; 23 | count : integer; 24 | info : packed array[1..16] of integer; 25 | end; 26 | 27 | $pointer = [unsafe, long] packed record 28 | case integer of 29 | 1 : (address : unsigned); 30 | 2 : (byte_ptr : ^$ubyte); 31 | 3 : (word_ptr : ^$uword); 32 | 4 : (long_ptr : ^unsigned); 33 | 5 : (room_ptr : ^$room); 34 | 6 : (object_ptr : ^$object); 35 | end; 36 | 37 | [global] function ifc$get_room_info( 38 | var table : unsigned; 39 | room_number : integer; 40 | var description : unsigned; 41 | var name : $quad; 42 | var link : [truncate] packed array[$l1..$u1:integer] of $ubyte; 43 | var class : [truncate] integer) : unsigned; 44 | 45 | var n, p : $pointer; 46 | return : unsigned; 47 | i : integer; 48 | begin 49 | establish($sig_to_ret); 50 | if (room_number<1) then $signal(ifc$_badroom); 51 | 52 | p.address:=iaddress(table) + (room_number-1)*68; 53 | 54 | description:=p.room_ptr^.message; 55 | 56 | if present(class) then class:=p.room_ptr^.class; 57 | if present(link) then 58 | for i:=1 to 14 do link[i]:=p.room_ptr^.link[i]; 59 | 60 | n:=p.room_ptr^.name; 61 | return:=$copy_r_dx(n.byte_ptr^, n.address+1, name); 62 | if (not odd(return)) then $signal(return); 63 | 64 | ifc$get_room_info:=1; 65 | end; 66 | 67 | [global] function ifc$get_object_info( 68 | var table : unsigned; 69 | object_number : integer; 70 | var detail : unsigned; 71 | var name : varying[$u1] of char; 72 | var flags : [truncate] unsigned; 73 | var count : [truncate] integer; 74 | var info : packed array[$l2..$u2:integer] of $ubyte) : unsigned; 75 | 76 | var n, p : $pointer; 77 | return : unsigned; 78 | i : integer; 79 | begin 80 | establish($sig_to_ret); 81 | if (object_number<1) then $signal(ifc$_badobj); 82 | 83 | p:=iaddress(table) + (object_number-1)*80; 84 | 85 | detail := p.object_ptr^.detail; 86 | 87 | if present(flags) then 88 | begin 89 | flags:=p.object_ptr^.flags; 90 | if (present(count)) then 91 | begin 92 | count:=p.object_ptr^.count; 93 | for i:=1 to count do 94 | info[i]:=p.object_ptr^.info[i]; 95 | end; 96 | end; 97 | 98 | n:=p.object_ptr^.name; 99 | return:=$copy_r_vs(n.byte_ptr^, n.address+1, name); 100 | if (not odd(return)) then $signal(return); 101 | 102 | ifc$get_object_info:=1; 103 | end; 104 | 105 | end. 106 | -------------------------------------------------------------------------------- /zk/zkmain.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef', 2 | 'lib$:rtldef', 3 | 'lib$:smgdef', 4 | 'lib$:sysdef', 5 | 'lib$:zk$def', 6 | 'lib$:zk$context_def', 7 | 'lib$:zk$parse_def', 'lib$:zk$lex_def', 'lib$:zk$ast_def', 8 | 'lib$:zk$text', 9 | 'lib$:zk$action_def', 'lib$:zk$init_def', 10 | 'ifc$library:ifc$rtl_def')] 11 | program zk$main; 12 | 13 | [unbound, asynchronous] procedure broadcast_handler( 14 | var context : $context_block); 15 | begin 16 | context.flags.messages_pending:=true; 17 | end; 18 | 19 | [asynchronous] function message_routine( 20 | var message : $uquad) : unsigned; 21 | begin 22 | $message(zk$text_text_error, 1, iaddress(message)); 23 | message_routine:=0; 24 | end; 25 | 26 | [asynchronous] function condition_handler( 27 | var signal : $signal_arg_vector; 28 | var mech : $mech_arg_vector) : unsigned; 29 | begin 30 | if (signal[1]<>ss$_unwind) then 31 | begin 32 | signal[0]:=signal[0]-2; 33 | signal[0]:=uor(signal[0],%x00010000); 34 | 35 | if (uand(signal[1],7)=4) then 36 | begin 37 | $message(zk$text_failure); 38 | $putmsg(signal, message_routine); 39 | $unwind; 40 | end 41 | else 42 | begin 43 | $message(zk$text_warning); 44 | $putmsg(signal, message_routine); 45 | $message(0); 46 | condition_handler:=ss$_continue; 47 | end; 48 | end; 49 | end; 50 | 51 | function interact(var context : $context_block) : unsigned; 52 | var return : unsigned; 53 | ast : $ast_node_ptr; 54 | error : boolean; 55 | self_name : varying[4] of char; 56 | begin 57 | self_name:='self'; 58 | 59 | establish(condition_handler); 60 | 61 | $update_status_numbers(context.score, context.moves); 62 | 63 | return:=$init_lex; 64 | if (odd(return)) then 65 | begin 66 | error:=$parse_command_line(context, ast, [end_of_line]); 67 | if ( (not error) and (ast<>nil) ) then 68 | begin 69 | (* $print_ast(ast, 1); *) 70 | $dispatch_command(context,context.self,self_name,ast); 71 | end; 72 | $dispose_ast(ast); 73 | if (context.flags.messages_pending) then 74 | begin 75 | if (context.room[context.location].class=2) then 76 | $message(0,0,zk$text_broadcast_outside) 77 | else $message(0,0,zk$text_broadcast_inside); 78 | return:=$output_broadcast_messages; 79 | if (not odd(return)) then $signal(return); 80 | context.flags.messages_pending:=false; 81 | end; 82 | end 83 | else $quit(context, context.self, self_name); 84 | interact:=return; 85 | end; 86 | 87 | procedure main; 88 | var context : $context_block; 89 | return : unsigned; 90 | begin 91 | return:=$init_screen('ZK$KEY_DEF',broadcast_handler,iaddress(context)); 92 | if (not odd(return)) then $signal(return) 93 | else 94 | begin 95 | $initialize(context); 96 | return:=1; 97 | while ( (not context.flags.won) and 98 | (not context.flags.died) and 99 | (not context.flags.quit) ) do interact(context); 100 | 101 | if (context.flags.won) then 102 | $message(0, 0, zk$text_player_won) 103 | else 104 | if (context.flags.died) then 105 | $message(0, 0, zk$text_player_died); 106 | 107 | $message(0); $score(context); $message(0); 108 | 109 | return:=$finish_screen; 110 | if (not odd(return)) then $signal(return); 111 | end; 112 | end; 113 | 114 | begin 115 | main; 116 | end. 117 | -------------------------------------------------------------------------------- /zk/zkwizard.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef', 2 | 'lib$:zk$context_def', 3 | 'lib$:zk$room', 'lib$:zk$text', 'lib$:zk$obj', 4 | 'lib$:zk$action_def', 'lib$:zk$routines_def', 5 | 'ifc$library:ifc$rtl_def')] 6 | module zk$wizard; 7 | 8 | [global] function zk$edswbl_take_object( 9 | var context : $context_block; 10 | object_number : integer) : boolean; 11 | 12 | var error : boolean; 13 | object_ptr : $object_ptr; 14 | flags, detail : unsigned; 15 | name : varying[31] of char; 16 | begin 17 | $get_object_info(zk$obj_table, object_number, detail, name, flags); 18 | if (uand(flags,1)<>0) then 19 | begin 20 | $message(zk$text_more_specific); 21 | error:=true; 22 | end 23 | else 24 | begin 25 | object_ptr:=$create_object(object_number); 26 | error:=$connect_object(object_ptr, context.self, true); 27 | $message(zk$text_done); 28 | end; 29 | 30 | zk$edswbl_take_object:=error; 31 | end; 32 | 33 | [global] function zk$edswbl_keypad( 34 | var context : $context_block) : boolean; 35 | begin 36 | $message(zk$text_combination, 1, context.combination); 37 | zk$edswbl_keypad:=false; 38 | end; 39 | 40 | [global] function zk$edswbl_wait( 41 | var context : $context_block) : boolean; 42 | begin 43 | while (not $advance_clock(context)) do ; 44 | zk$edswbl_wait:=false; 45 | end; 46 | 47 | [global] function zk$edswbl_goto_room( 48 | var context : $context_block; 49 | var room_number : integer) : boolean; 50 | var error : boolean; 51 | begin 52 | error:=false; 53 | if ( (room_number>0) and (room_number<=zk$room_max) ) then 54 | begin 55 | context.location:=room_number; 56 | context.self^.location:=room_number; 57 | $describe_room(context, room_number, 58 | context.room[room_number].seen, 59 | context.flags.brief); 60 | context.room[room_number].seen:=true; 61 | end 62 | else 63 | begin 64 | error:=true; 65 | $message(zk$text_cant_go_that_way); 66 | end; 67 | 68 | zk$edswbl_goto_room:=error; 69 | end; 70 | 71 | [global] function zk$edswbl_where( 72 | var context : $context_block) : boolean; 73 | 74 | var i : integer; 75 | detail : unsigned; 76 | name : varying[31] of char; 77 | link : packed array[1..14] of $ubyte; 78 | direction : [static] array[1..10] of varying[10] of char := 79 | ('North', 'South', 'East', 'West', 80 | 'North east', 'South west', 'South east', 'North west', 81 | 'Up', 'Down'); 82 | begin 83 | $get_room_info(zk$room_table, context.location, detail, name, link); 84 | 85 | $message(zk$text_here_is, 3, context.location, 86 | name.length, iaddress(name.body)); 87 | for i:=1 to 10 do 88 | if (link[i]<>0) then 89 | begin 90 | $get_room_info(zk$room_table, link[i], detail, name); 91 | $message(zk$text_goes_to, 5, 92 | direction[i].length, 93 | iaddress(direction[i].body), 94 | link[i], 95 | name.length, iaddress(name.body)); 96 | end; 97 | 98 | zk$edswbl_where:=false; 99 | end; 100 | 101 | [global] function zk$edswbl_nurse(var context : $context_block) : boolean; 102 | begin 103 | context.flags.physical:=true; 104 | $message(zk$text_done); 105 | zk$edswbl_nurse:=false; 106 | end; 107 | 108 | [global] function zk$edswbl_system(var context : $context_block) : boolean; 109 | begin 110 | context.flags.vms_installed:=true; 111 | context.flags.cdd_installed:=true; 112 | context.flags.dtr_installed:=true; 113 | 114 | $message(zk$text_done); 115 | zk$edswbl_system:=false; 116 | end; 117 | 118 | end. 119 | -------------------------------------------------------------------------------- /descrip.mms: -------------------------------------------------------------------------------- 1 | FACILITY = ZK 2 | 3 | BACKUP = BACKUP/INTERCHANGE/BLOCK_SIZE=8192 4 | ECHO = WRITE SYS$OUTPUT 5 | 6 | .FIRST : 7 | @ ROOT = F$PARSE(F$ENVIRONMENT("DEFAULT"),,,"DEVICE","NO_CONCEAL") - 8 | + F$PARSE(F$ENVIRONMENT("DEFAULT"),,,"DIRECTORY","NO_CONCEAL") - 9 | - "][" - ".000000" - "000000." - ".]" - "]" + ".]" 10 | @ DEFINE/JOB/NOLOG/TRANSLATION=CONCEALED BLD$ 'ROOT' 11 | @ DEFINE/JOB/NOLOG EXE$ BLD$:[$(MMSARCH_NAME).EXE] 12 | @ DEFINE/JOB/NOLOG LIB$ BLD$:[$(MMSARCH_NAME).LIB] 13 | @ DEFINE/JOB/NOLOG OBJ$ BLD$:[$(MMSARCH_NAME).OBJ] 14 | @ CREATE/NOLOG/DIRECTORY EXE$: 15 | @ CREATE/NOLOG/DIRECTORY LIB$: 16 | @ CREATE/NOLOG/DIRECTORY OBJ$: 17 | @ DEFINE/JOB/NOLOG IFC$LIBRARY LIB$ 18 | 19 | ALL : 20 | .IFDEF __MMK__ 21 | $(MMS)$(MMSQUALIFIERS)/WORK=[.ENV] 22 | $(MMS)$(MMSQUALIFIERS)/WORK=[.IFC] 23 | $(MMS)$(MMSQUALIFIERS)/WORK=[.ZK] 24 | .ELSE 25 | SET DEFAULT [.ENV] 26 | $(MMS)$(MMSQUALIFIERS) 27 | SET DEFAULT [-.IFC] 28 | $(MMS)$(MMSQUALIFIERS) 29 | SET DEFAULT [-.ZK] 30 | $(MMS)$(MMSQUALIFIERS) 31 | .ENDIF 32 | 33 | CLEAN : 34 | - DELETE [.$(MMSARCH_NAME)...]*.*;*/EXCLUDE=*.DIR 35 | .IFDEF __MMK__ 36 | - $(MMS)$(MMSQUALIFIERS)/WORK=[.ENV] $(MMS$TARGET) 37 | - $(MMS)$(MMSQUALIFIERS)/WORK=[.IFC] $(MMS$TARGET) 38 | - $(MMS)$(MMSQUALIFIERS)/WORK=[.ZK] $(MMS$TARGET) 39 | .ELSE 40 | SET DEFAULT [.ENV] 41 | $(MMS)$(MMSQUALIFIERS) $(MMS$TARGET) 42 | SET DEFAULT [-.IFC] 43 | $(MMS)$(MMSQUALIFIERS) $(MMS$TARGET) 44 | SET DEFAULT [-.ZK] 45 | $(MMS)$(MMSQUALIFIERS) $(MMS$TARGET) 46 | .ENDIF 47 | 48 | .IFDEF VERSION 49 | KIT : VERSION 50 | @ DEFINE/JOB/NOLOG KIT$ BLD$:[KIT.'F$TRNLNM("$VMI$")'] 51 | @ CREATE/NOLOG/DIRECTORY KIT$: 52 | $(BACKUP) BLD$:[KIT]KITINSTAL.COM,ZKCLD.CLD,ZKDCL_HELP.HLP - 53 | KIT$:'F$TRNLNM("$VMI$")'.A/SAVE_SET 54 | $(BACKUP) BLD$:[VAX.EXE]ZK$MAIN.EXE KIT$:'F$TRNLNM("$VMI$")'.B/SAVE_SET 55 | $(BACKUP) BLD$:[ALPHA.EXE]ZK$MAIN.EXE KIT$:'F$TRNLNM("$VMI$")'.C/SAVE_SET 56 | $(BACKUP) BLD$:[IA64.EXE]ZK$MAIN.EXE KIT$:'F$TRNLNM("$VMI$")'.D/SAVE_SET 57 | $(BACKUP) BLD$:[000000]DESCRIP.MMS,[ENV...]*.*,[IFC...]*.*, - 58 | [ZK...]*.* KIT$:'F$TRNLNM("$VMI$")'_SRC.BCK/SAVE_SET 59 | 60 | VERSION : 61 | @ TYPE = F$EDIT(F$EXTRACT(0, 1, "$(VERSION)"), "UPCASE") 62 | @ IF (F$TYPE(TYPE) .NES. "STRING") THEN TYPE = "" 63 | @ ED = F$ELEMENT(1, "-", "$(VERSION)"-TYPE) 64 | @ IF (ED .EQS. "-") THEN ED = "" 65 | @ MAJ=F$ELEMENT(0, "-" , "$(VERSION)"-TYPE) 66 | @ IF (MAJ .EQS. "") THEN MAJ="1" 67 | @ MIN=F$ELEMENT(1, ".", MAJ) 68 | @ IF (MIN .EQS. ".") THEN MIN = "0" 69 | @ MAJ=F$ELEMENT(0, ".", MAJ) 70 | @ IF (TYPE .EQS. "") THEN TYPE = "X" 71 | @ VERSION = TYPE + MAJ + "." + MIN 72 | @ IF (ED .NES. "") THEN VERSION = VERSION + "-" + ED 73 | @ PCSI = TYPE + F$FAO("!2ZL", F$INT(MAJ)) + F$FAO("!2ZL", F$INT(MIN)) 74 | @ VMI = "$(FACILITY)" + F$FAO("!2ZL", F$INT(MAJ)) + F$FAO("!1ZL", F$INT(MIN)) 75 | @ IF (ED .NES. "") THEN PCSI = PCSI + "-" + ED 76 | @ IF (TYPE .EQS. "E") THEN TYPE = "EARLY-ADOPTER" 77 | @ IF (TYPE .EQS. "T") THEN TYPE = "FIELD-TEST" 78 | @ IF (TYPE .EQS. "V") THEN TYPE = "RELEASE" 79 | @ IF (TYPE .EQS. "X") THEN TYPE = "EXPERIMENTAL" 80 | @ IF (F$LENGTH(TYPE) .LE. 1) THEN TYPE="OTHER" 81 | @ DEFINE/JOB/NOLOG $PCSI$ "''PCSI'" 82 | @ DEFINE/JOB/NOLOG $TYPE$ "''TYPE'" 83 | @ DEFINE/JOB/NOLOG $VERS$ "''VERSION'" 84 | @ DEFINE/JOB/NOLOG $VMI$ "''VMI'" 85 | .ELSE 86 | KIT : 87 | @ $(ECHO) "%W, VERSION macro not specified" 88 | @ $(ECHO) "" 89 | @ $(ECHO) "The KIT target must be called like so:" 90 | @ $(ECHO) "" 91 | @ $(ECHO) " $$(MMS) KIT/MACRO=""VERSION=V1.1""" 92 | @ $(ECHO) "" 93 | .ENDIF 94 | -------------------------------------------------------------------------------- /zk/zkroutines_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef', 2 | 'lib$:zk$context_def')] 3 | module zk$routines_def; 4 | 5 | [external(zk$random_integer)] function $random_integer( 6 | var seed : unsigned; 7 | upper : integer) : integer; 8 | extern; 9 | 10 | [external(zk$compare_date)] function $compare_date( 11 | var start, finish : $uquad) : integer; 12 | extern; 13 | 14 | [external(zk$room_dark)] function $room_dark( 15 | var context : $context_block) : boolean; 16 | extern; 17 | 18 | [external(zk$lookup_object_inside)] function $lookup_object_inside( 19 | var object : integer; 20 | var constraint : $object_ptr; 21 | var object_ptr : $object_ptr) : boolean; 22 | extern; 23 | 24 | [external(zk$lookup_object_list)] function $lookup_object_list( 25 | var object : integer; 26 | var constraint : $object_ptr; 27 | var object_ptr : $object_ptr) : boolean; 28 | extern; 29 | 30 | [external(zk$lookup_object_specific)] function $lookup_object_specific( 31 | object : integer; 32 | var constraint : $object_ptr; 33 | var context : $context_block; 34 | var object_ptr : $object_ptr; 35 | var list : boolean) : boolean; 36 | extern; 37 | 38 | [external(zk$lookup_object)] function $lookup_object( 39 | var object : integer; 40 | constraint : $object_ptr; 41 | var context : $context_block; 42 | var object_ptr : $object_ptr; 43 | var list : boolean) : boolean; 44 | extern; 45 | 46 | [external(zk$disconnect_object)] function $disconnect_object( 47 | var object_ptr : $object_ptr) : boolean; 48 | extern; 49 | 50 | [external(zk$connect_object)] function $connect_object( 51 | var object_ptr : $object_ptr; 52 | var owner : $object_ptr; 53 | inside : boolean) : boolean; 54 | extern; 55 | 56 | [external(zk$test_disconnect)] function $test_disconnect( 57 | var object1_ptr, object2_ptr : $object_ptr; 58 | inside : boolean) : boolean; 59 | extern; 60 | 61 | [external(zk$test_insertion)] function $test_insertion( 62 | var object1_ptr : $object_ptr; 63 | var name1 : varying[$u1] of char; 64 | var object2_ptr : $object_ptr; 65 | var name2 : varying[$u2] of char) : boolean; 66 | extern; 67 | 68 | [external(zk$list_contents)] function $list_contents( 69 | owner : $object_ptr; 70 | indent : integer; 71 | inside : boolean; 72 | list_static : boolean) : boolean; 73 | extern; 74 | 75 | [external(zk$list_contents_empty)] procedure $list_contents_empty( 76 | owner : $object_ptr; 77 | indent : integer); 78 | extern; 79 | 80 | [external(zk$describe_room_contents)] procedure $describe_room_contents( 81 | owner : $object_ptr); 82 | extern; 83 | 84 | [external(zk$create_object_info)] function $create_object_info( 85 | object_number : integer; 86 | var flags : unsigned; 87 | var info : packed array[$l1..$u1:integer] of $ubyte) : $object_ptr; 88 | extern; 89 | 90 | [external(zk$create_object)] function $create_object( 91 | object_number : integer) : $object_ptr; 92 | extern; 93 | 94 | [external(zk$dispose_object)] procedure $dispose_object( 95 | var object_ptr : $object_ptr); 96 | extern; 97 | 98 | [external(zk$test_retreival)] function $test_retreival( 99 | var context : $context_block; 100 | object_name : integer; 101 | var object_ptr : $object_ptr) : boolean; 102 | extern; 103 | 104 | [external(zk$probe_ownership)] function $probe_ownership( 105 | var context : $context_block; 106 | var actor_ptr : $object_ptr; 107 | var actor_name : varying[$u1] of char; 108 | var object_ptr : $object_ptr; 109 | var object_name : varying[$u2] of char) : boolean; 110 | extern; 111 | 112 | end. 113 | -------------------------------------------------------------------------------- /zk/11aug85.txt: -------------------------------------------------------------------------------- 1 | InFuckingCredible 2 | 3 | (1) The Coke machine no longer has capacity, for better or for worse. 4 | You can still put the coins in it, of course. 5 | 6 | (2) The Coke can is now openable, with a dark liquid inside. Implemented the 7 | drink command. If you drink the can or the liquid, the Coke_can becomes 8 | the empty_can. Changed the former empty_cans to discarded_cans (the ones 9 | in the CDD devo's office). Made a generic ANY_CANS. If you give the devo 10 | an open can he bitches. If you shake an open can you get splattered. 11 | Added SODA as a synonym. 12 | 13 | (3) Changed the 'nothing interesting happens' message when you move something 14 | to hint about specifying a direction. 15 | 16 | (4) Removed the text about the guard being friendly. Brought back 'dressed in 17 | typical guardly attire'. 18 | 19 | (5) If you say PUT ALL or GIVE ALL, then ALL-->POSSESSIONS 20 | 21 | (6) Put a kludge in to check for V4.0, V4.1 systems. If so, start the text 22 | at the bottom of the screen to prevent the status line getting blown 23 | away. 24 | 25 | (7) Added the personnel door. We can't have a health door, since there already 26 | is a stair door in BLUE_HALL_8. I changed the text accordingly. 27 | 28 | (8) Added a "the foo says 'See you later'" when you leave a room with a 29 | cognizant object in it. 30 | 31 | (9) Added the health services problem. The guard now directs you to health 32 | services on entry to the building. The nurse gives you directions when 33 | you enter her room. Commands: STAND ON SCALE, PUT ARM IN MACHINE. 34 | If you do both, a temp badge is left on the reception desk. Oh yes, 35 | I added an object: reception desk. The nurse bitches if you leave 36 | in the middle of the physical. 37 | 38 | (10) Implemented the roving guard. Once every 75 moves after you've 39 | had the physical. He escorts you out if you're not WEARING the 40 | badge. 41 | 42 | (11) New wizard mode commands: 43 | NURSE - Set the bits to indicate the physical has been taken 44 | SYSTEM - Set the bits to indicate all the LPs have been installed 45 | 46 | (12) Exit conditions: 47 | Can't leave lobby except by catwalk when not taken physical 48 | Can't leave lobby to antichamber when: 49 | System disk is visible (must hide in sack) 50 | Keys not returned 51 | Badge not returned 52 | Installed all LP's and haven't completed exit interview 53 | 54 | (13) Implemented the exit interview. The rep asks you three questions 55 | out of six. Must use SAY . Doesn't care about syntax, only 56 | that certain keywords are in the string. Also, I rewrote the 57 | description of personnel. 58 | 59 | <'What color are the rectangular shaped bars?'> 60 | Answer must contain: BLACK 61 | <'Where is the picture of Bill the Cat located?'> 62 | Answer must contain: ED 63 | <'How many stairwells are there?'> 64 | Answer must contain: 4 65 | <'Name a word in the ZK lexicon which is ambiguous in four letters?'> 66 | Answer must contain: COMP 67 | <'What color are the rooms described as "passages"? '> 68 | Answer must contain: YELLOW 69 | <'How much is the copy of ZK ENQUIRER worth?'> 70 | Answer must contain: 1BIT 71 | 72 | (14) Random fine tuning. If you put something on the reception desk 73 | the guard picks it up. 74 | 75 | ----------------------------------------------------------------- 76 | 77 | please describe the following objects: 78 | TEMP BADGE 79 | RECEPTION DESK 80 | PERSONNEL REP 81 | FS REP (if not done already) 82 | Also, please cruise through ZK$TEXT and tune up my new messages 83 | 84 | 85 | Will 86 | -------------------------------------------------------------------------------- /env/libdef.mar: -------------------------------------------------------------------------------- 1 | .MACRO $LIBDEF,$GBL 2 | $DEFINI LIB,$GBL 3 | ; THE RUN-TIME LIBRARY DECLARES THESE SYMBOLS AS EXTERNAL 4 | ; 5 | $EQU LIB$_FACILITY 21 6 | $EQU LIB$_NORMAL 1409025 7 | $EQU LIB$_STRTRU 1409041 8 | $EQU LIB$_ONEENTQUE 1409049 9 | ; 10 | $EQU LIB$_KEYALRINS 1409057 11 | ; 12 | $EQU LIB$_ERRROUCAL 1409065 13 | ; 14 | $EQU LIB$_RESTART 1409073 15 | ; 16 | ; 17 | ; 18 | ; 19 | ; 20 | ; 21 | $EQU LIB$_BADSTA 1409540 22 | ; 23 | $EQU LIB$_FATERRLIB 1409548 24 | ; 25 | $EQU LIB$_INSVIRMEM 1409556 26 | ; 27 | $EQU LIB$_INPSTRTRU 1409564 28 | ; 29 | $EQU LIB$_INVSTRDES 1409572 30 | ; 31 | $EQU LIB$_INTLOGERR 1409580 32 | $EQU LIB$_INVARG 1409588 33 | ; 34 | $EQU LIB$_AMBKEY 1409596 35 | ; 36 | $EQU LIB$_UNRKEY 1409604 37 | $EQU LIB$_PUSSTAOVE 1409612 38 | ; 39 | $EQU LIB$_USEFLORES 1409620 40 | ; 41 | $EQU LIB$_SIGNO_ARG 1409628 42 | ; 43 | $EQU LIB$_BADBLOADR 1409636 44 | ; 45 | $EQU LIB$_BADBLOSIZ 1409644 46 | ; 47 | $EQU LIB$_NOTFOU 1409652 48 | ; 49 | $EQU LIB$_ATTCONSTO 1409660 50 | ; 51 | $EQU LIB$_SYNTAXERR 1409668 52 | $EQU LIB$_INVTYPE 1409676 53 | ; 54 | $EQU LIB$_INSEF 1409684 55 | ; 56 | $EQU LIB$_EF_ALRFRE 1409692 57 | ; 58 | $EQU LIB$_EF_ALRRES 1409700 59 | ; 60 | $EQU LIB$_EF_RESSYS 1409708 61 | ; 62 | $EQU LIB$_INSLUN 1409716 63 | ; 64 | $EQU LIB$_LUNALRFRE 1409724 65 | ; 66 | $EQU LIB$_LUNRESSYS 1409732 67 | ; 68 | $EQU LIB$_SCRBUFOVF 1409740 69 | ; 70 | $EQU LIB$_INVSCRPOS 1409748 71 | ; 72 | $EQU LIB$_SECINTFAI 1409756 73 | ; 74 | $EQU LIB$_INVCHA 1409764 75 | ; 76 | $EQU LIB$_QUEWASEMP 1409772 77 | ; 78 | $EQU LIB$_STRIS_INT 1409780 79 | ; 80 | $EQU LIB$_KEYNOTFOU 1409788 81 | ; 82 | $EQU LIB$_INVCVT 1409796 83 | ; 84 | $EQU LIB$_INVDTYDSC 1409804 85 | ; 86 | $EQU LIB$_INVCLADSC 1409812 87 | ; 88 | $EQU LIB$_INVCLADTY 1409820 89 | ; 90 | $EQU LIB$_INVNBDS 1409828 91 | ; 92 | $EQU LIB$_DESSTROVF 1409836 93 | ; 94 | $EQU LIB$_INTOVF 1409844 95 | ; 96 | $EQU LIB$_DECOVF 1409852 97 | ; 98 | $EQU LIB$_FLTOVF 1409860 99 | ; 100 | $EQU LIB$_FLTUND 1409868 101 | ; 102 | $EQU LIB$_ROPRAND 1409876 103 | ; 104 | $EQU LIB$_WRONUMARG 1409884 105 | ; 106 | $EQU LIB$_NOSUCHSYM 1409892 107 | ; 108 | $EQU LIB$_INSCLIMEM 1409900 109 | ; 110 | $EQU LIB$_AMBSYMDEF 1409908 111 | ; 112 | $EQU LIB$_NOCLI 1409916 113 | ; 114 | $EQU LIB$_UNECLIERR 1409924 115 | ; 116 | $EQU LIB$_INVSYMNAM 1409932 117 | ; 118 | $EQU LIB$_ATTREQREF 1409940 119 | ; 120 | $EQU LIB$_INVFILSPE 1409948 121 | ; 122 | ; 123 | $EQU LIB$_INVXAB 1409956 124 | ; 125 | $EQU LIB$_NO_STRACT 1409964 126 | ; 127 | $EQU LIB$_BADTAGVAL 1409972 128 | ; 129 | $EQU LIB$_INVOPEZON 1409980 130 | ; 131 | $EQU LIB$_PAGLIMEXC 1409988 132 | ; 133 | $EQU LIB$_OUTSTRTRU 1413120 134 | ; 135 | $EQU LIB$_FILFAIMAT 1413128 136 | ; 137 | $EQU LIB$_NEGANS 1413136 138 | ; 139 | $EQU LIB$_QUIPRO 1413144 140 | ; 141 | $EQU LIB$_QUICONACT 1413152 142 | ; 143 | $EQU LIB$_BADCCC 1425408 144 | ; 145 | $EQU LIB$_EOMERROR 1425416 146 | ; 147 | $EQU LIB$_EOMFATAL 1425424 148 | ; 149 | $EQU LIB$_EOMWARN 1425432 150 | ; 151 | $EQU LIB$_GSDTYP 1425440 152 | ; 153 | $EQU LIB$_ILLFMLCNT 1425448 154 | ; 155 | $EQU LIB$_ILLMODNAM 1425456 156 | ; 157 | $EQU LIB$_ILLPSCLEN 1425464 158 | ; 159 | $EQU LIB$_ILLRECLEN 1425472 160 | ; 161 | $EQU LIB$_ILLRECLN2 1425480 162 | ; 163 | $EQU LIB$_ILLRECTYP 1425488 164 | ; 165 | $EQU LIB$_ILLRECTY2 1425496 166 | ; 167 | $EQU LIB$_ILLSYMLEN 1425504 168 | ; 169 | $EQU LIB$_NOEOM 1425512 170 | ; 171 | $EQU LIB$_RECTOOSML 1425520 172 | ; 173 | $EQU LIB$_SEQUENCE 1425528 174 | ; 175 | $EQU LIB$_SEQUENCE2 1425536 176 | ; 177 | $EQU LIB$_STRLVL 1425544 178 | ; 179 | $DEFEND LIB,$GBL,DEF 180 | .ENDM 181 | -------------------------------------------------------------------------------- /ifc/ifc.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef', 2 | 'lib$:rtldef', 3 | 'lib$:sysdef', 4 | 'lib$:clidef', 5 | 'lib$:ifc$msg_def', 6 | 'lib$:ifc$message_def', 7 | 'lib$:ifc$room_def', 8 | 'lib$:ifc$object_def')] 9 | 10 | program ifc(input, output); 11 | 12 | var command_table : [external(ifc$command_table)] unsigned; 13 | 14 | [asynchronous] function condition_handler( 15 | var signal : $signal_arg_vector; 16 | var mech : $mech_arg_vector) : unsigned; 17 | 18 | begin 19 | if (signal[1]<>ss$_unwind) then 20 | begin 21 | signal[0]:=signal[0]-2; 22 | $putmsg(signal); 23 | end; 24 | 25 | if (uand(signal[1],7)=4) then $unwind 26 | else 27 | condition_handler:=ss$_continue; 28 | end; 29 | 30 | procedure get_filespec( 31 | file_type : varying[$u1] of char; 32 | var source_filename : varying[$u2] of char; 33 | var macro_filename : varying[$u3] of char; 34 | var def_filename : varying[$u4] of char); 35 | 36 | var temp_filename : varying[80] of char; 37 | return, context : unsigned; 38 | begin 39 | $get_value('FILENAME', temp_filename); 40 | context:=0; 41 | $find_file(temp_filename, source_filename, context, file_type); 42 | $find_file_end(context); 43 | 44 | temp_filename.length:=0; 45 | return:=$present('MACRO'); 46 | if (odd(return)) then $get_value('MACRO', temp_filename); 47 | 48 | context:=0; 49 | $find_file(temp_filename, macro_filename, 50 | context, '.MAR', source_filename); 51 | $find_file_end(context); 52 | 53 | macro_filename.length:=index(macro_filename,';')-1; 54 | 55 | temp_filename.length:=0; 56 | return:=$present('DEFINITIONS'); 57 | if (odd(return)) then $get_value('DEFINITIONS', temp_filename); 58 | 59 | context:=0; 60 | $find_file(temp_filename, def_filename, 61 | context, '.PAS', source_filename); 62 | $find_file_end(context); 63 | 64 | def_filename.length:=index(def_filename,';')-1; 65 | end; 66 | 67 | [global] function ifc$compile_objects_main : unsigned; 68 | var source_filename, 69 | macro_filename, 70 | def_filename : varying[80] of char; 71 | begin 72 | establish(condition_handler); 73 | 74 | get_filespec('.OBJECT',source_filename,macro_filename,def_filename); 75 | 76 | $compile_objects(source_filename,macro_filename, def_filename); 77 | 78 | ifc$compile_objects_main:=1; 79 | end; 80 | 81 | [global] function ifc$compile_messages_main : unsigned; 82 | var source_filename, 83 | object_filename, 84 | def_filename : varying[80] of char; 85 | begin 86 | establish(condition_handler); 87 | 88 | get_filespec('.MESSAGE',source_filename,object_filename,def_filename); 89 | 90 | $compile_messages(source_filename, object_filename, def_filename); 91 | 92 | ifc$compile_messages_main:=1; 93 | end; 94 | 95 | [global] function ifc$compile_rooms_main : unsigned; 96 | var source_filename, 97 | object_filename, 98 | def_filename : varying[80] of char; 99 | begin 100 | establish(condition_handler); 101 | 102 | get_filespec('.ROOM',source_filename,object_filename,def_filename); 103 | 104 | $compile_rooms(source_filename, object_filename, def_filename); 105 | 106 | ifc$compile_rooms_main:=1; 107 | end; 108 | 109 | [global] function ifc$help : unsigned; 110 | begin 111 | $signal(ifc$_nyi); 112 | ifc$help:=1; 113 | end; 114 | 115 | [global] function ifc$exit : unsigned; 116 | begin 117 | ifc$exit:=rms$_eof; 118 | end; 119 | 120 | procedure main; 121 | var return : unsigned; 122 | command : varying[80] of char; 123 | begin 124 | return:=$get_foreign(command); 125 | if (command.length<>0) then 126 | begin 127 | return:=$dcl_parse(command, command_table); 128 | if (odd(return)) then $dispatch; 129 | end 130 | else 131 | begin 132 | return:=1; 133 | while (return<>rms$_eof) do 134 | begin 135 | return:=$dcl_parse(,command_table, lib$get_input, 136 | lib$get_input, 'ifc> '); 137 | if (odd(return)) then return:=$dispatch; 138 | end; 139 | end; 140 | end; 141 | 142 | begin 143 | main; 144 | end. 145 | -------------------------------------------------------------------------------- /zk/zkcontext_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef', 2 | 'lib$:zk$obj', 3 | 'lib$:zk$room')] 4 | module zk$context_def; 5 | 6 | (* Edit History: *) 7 | 8 | (* 19-JUL-2013 TES Changed to add a length for username and full buffer of *) 9 | (* 32 characters. *) 10 | (* *) 11 | 12 | type $object_flags = [long, unsafe] record 13 | case integer of 14 | 1: (long : unsigned); 15 | 2: ( 16 | generic : [bit, pos(0)] boolean; 17 | static : [bit, pos(1)] boolean; 18 | strength_infinite : [bit, pos(2)] boolean; 19 | capacity_infinite : [bit, pos(3)] boolean; 20 | area_infinite : [bit, pos(4)] boolean; 21 | readable : [bit, pos(5)] boolean; 22 | openable : [bit, pos(6)] boolean; 23 | lockable : [bit, pos(7)] boolean; 24 | startable : [bit, pos(8)] boolean; 25 | cognizant : [bit, pos(9)] boolean; 26 | machine : [bit, pos(10)] boolean; 27 | flexible : [bit, pos(11)] boolean; 28 | room : [bit, pos(12)] boolean; 29 | unused5 : [bit, pos(13)] boolean; 30 | unused6 : [bit, pos(14)] boolean; 31 | unused7 : [bit, pos(15)] boolean; 32 | inside : [bit, pos(16)] boolean; 33 | no_capacity : [bit, pos(17)] boolean; 34 | no_area : [bit, pos(18)] boolean; 35 | open : [bit, pos(19)] boolean; 36 | locked : [bit, pos(20)] boolean; 37 | on : [bit, pos(21)] boolean; 38 | irritated : [bit, pos(22)] boolean; 39 | shaken : [bit, pos(23)] boolean; 40 | ) 41 | end; 42 | 43 | $context_flags = [long, unsafe] record 44 | case integer of 45 | 1: (long : unsigned); 46 | 2: ( 47 | start : [bit, pos(0)] boolean; 48 | brief : [bit, pos(1)] boolean; 49 | won : [bit, pos(2)] boolean; 50 | quit : [bit, pos(3)] boolean; 51 | died : [bit, pos(4)] boolean; 52 | standing_on_doc : 53 | [bit, pos(5)] boolean; 54 | awarded_dtr : [bit, pos(6)] boolean; 55 | lamp_on : [bit, pos(7)] boolean; 56 | unused1 : [bit, pos(8)] boolean; 57 | booted : [bit, pos(9)] boolean; 58 | vms_installed : [bit, pos(10)] boolean; 59 | cdd_installed : [bit, pos(11)] boolean; 60 | dtr_installed : [bit, pos(12)] boolean; 61 | field_service : [bit, pos(13)] boolean; 62 | bp_taken : [bit, pos(14)] boolean; 63 | weight_taken : [bit, pos(15)] boolean; 64 | physical : [bit, pos(16)] boolean; 65 | interview : [bit, pos(17)] boolean; 66 | elevator_unlocked : [bit, pos(18)] boolean; 67 | messages_pending : [bit, pos(19)] boolean; 68 | multi_user : [bit, pos(20)] boolean; 69 | ) 70 | end; 71 | 72 | $object_ptr = ^$object; 73 | $object = record 74 | number : integer; 75 | location : integer; 76 | flags : $object_flags; 77 | total_mass : integer; 78 | strength : integer; 79 | remaining_capacity : integer; 80 | fixed_volume : integer; 81 | remaining_area : integer; 82 | fixed_size : integer; 83 | contents : $object_ptr; 84 | owner : $object_ptr; 85 | link : $object_ptr; 86 | next : $object_ptr; 87 | end; 88 | 89 | $room_info = record 90 | seen : boolean; 91 | class : integer; 92 | room : $object_ptr; 93 | end; 94 | 95 | $room_array = array[1..zk$room_max] of $room_info; 96 | 97 | $context_block = record 98 | username : packed array[1..32] of char; 99 | username_length : $uword; 100 | flags : $context_flags; 101 | room : $room_array; 102 | 103 | location : integer; 104 | score : integer; 105 | moves : integer; 106 | seed : unsigned; 107 | combination : integer; 108 | officer_leave_time : integer; 109 | lamp_remaining : integer; 110 | card_remaining : integer; 111 | console_message : integer; 112 | fs_remaining : integer; 113 | questions_remaining : integer; 114 | current_question : integer; 115 | crew_location : integer; 116 | crew_last_location : integer; 117 | badge_issued : $uquad; 118 | question_asked : packed array[1..32] 119 | of boolean; 120 | 121 | self : $object_ptr; 122 | lights_ptr : $object_ptr; 123 | arm_ptr : $object_ptr; 124 | 125 | card_ptr : $object_ptr; 126 | tape_drive_ptr : $object_ptr; 127 | disk_drive_ptr : $object_ptr; 128 | lamp_ptr : $object_ptr; 129 | end; 130 | end. 131 | -------------------------------------------------------------------------------- /env/dvidef.mar: -------------------------------------------------------------------------------- 1 | .MACRO $DVIDEF,$GBL 2 | $DEFINI DVI,$GBL 3 | $EQU DVI$_DEVCHAR 2 4 | $EQU DVI$_DEVCLASS 4 5 | $EQU DVI$_DEVTYPE 6 6 | $EQU DVI$_DEVBUFSIZ 8 7 | $EQU DVI$_DEVDEPEND 10 8 | $EQU DVI$_UNIT 12 9 | $EQU DVI$_PID 14 10 | $EQU DVI$_OWNUIC 16 11 | $EQU DVI$_VPROT 18 12 | $EQU DVI$_ERRCNT 20 13 | $EQU DVI$_OPCNT 22 14 | $EQU DVI$_RECSIZ 24 15 | $EQU DVI$_MAXBLOCK 26 16 | $EQU DVI$_DEVDEPEND2 28 17 | $EQU DVI$_REFCNT 30 18 | $EQU DVI$_DEVNAM 32 19 | $EQU DVI$_VOLNAM 34 20 | $EQU DVI$_SECTORS 36 21 | $EQU DVI$_TRACKS 38 22 | $EQU DVI$_CYLINDERS 40 23 | $EQU DVI$_FREEBLOCKS 42 24 | $EQU DVI$_LOGVOLNAM 44 25 | $EQU DVI$_VOLNUMBER 46 26 | $EQU DVI$_VOLCOUNT 48 27 | $EQU DVI$_ROOTDEVNAM 50 28 | $EQU DVI$_NEXTDEVNAM 52 29 | $EQU DVI$_TRANSCNT 54 30 | $EQU DVI$_MOUNTCNT 56 31 | $EQU DVI$_CLUSTER 58 32 | $EQU DVI$_MAXFILES 60 33 | $EQU DVI$_SERIALNUM 62 34 | $EQU DVI$_ACPPID 64 35 | $EQU DVI$_ACPTYPE 66 36 | $EQU DVI$_CONCEALED 68 37 | $EQU DVI$_REC 70 38 | $EQU DVI$_CCL 72 39 | $EQU DVI$_TRM 74 40 | $EQU DVI$_DIR 76 41 | $EQU DVI$_SDI 78 42 | $EQU DVI$_SQD 80 43 | $EQU DVI$_SPL 82 44 | $EQU DVI$_OPR 84 45 | $EQU DVI$_RCT 86 46 | $EQU DVI$_NET 88 47 | $EQU DVI$_FOD 90 48 | $EQU DVI$_DUA 92 49 | $EQU DVI$_SHR 94 50 | $EQU DVI$_GEN 96 51 | $EQU DVI$_AVL 98 52 | $EQU DVI$_MNT 100 53 | $EQU DVI$_MBX 102 54 | $EQU DVI$_DMT 104 55 | $EQU DVI$_ELG 106 56 | $EQU DVI$_ALL 108 57 | $EQU DVI$_FOR 110 58 | $EQU DVI$_SWL 112 59 | $EQU DVI$_IDV 114 60 | $EQU DVI$_ODV 116 61 | $EQU DVI$_RND 118 62 | $EQU DVI$_RTM 120 63 | $EQU DVI$_RCK 122 64 | $EQU DVI$_WCK 124 65 | $EQU DVI$_TT_PASSALL 126 66 | $EQU DVI$_TT_NOECHO 128 67 | $EQU DVI$_TT_NOTYPEAHD 130 68 | $EQU DVI$_TT_ESCAPE 132 69 | $EQU DVI$_TT_HOSTSYNC 134 70 | $EQU DVI$_TT_TTSYNC 136 71 | $EQU DVI$_TT_SCRIPT 138 72 | $EQU DVI$_TT_LOWER 140 73 | $EQU DVI$_TT_MECHTAB 142 74 | $EQU DVI$_TT_WRAP 144 75 | $EQU DVI$_TT_CRFILL 146 76 | $EQU DVI$_TT_LFFILL 148 77 | $EQU DVI$_TT_SCOPE 150 78 | $EQU DVI$_TT_REMOTE 152 79 | $EQU DVI$_TT_EIGHTBIT 154 80 | $EQU DVI$_TT_MBXDSABL 156 81 | $EQU DVI$_TT_NOBRDCST 158 82 | $EQU DVI$_TT_READSYNC 160 83 | $EQU DVI$_TT_MECHFORM 162 84 | $EQU DVI$_TT_HALFDUP 164 85 | $EQU DVI$_TT_MODEM 166 86 | $EQU DVI$_TT_OPER 168 87 | $EQU DVI$_TT_PAGE 170 88 | $EQU DVI$_TT_LOCALECHO 172 89 | $EQU DVI$_TT_AUTOBAUD 174 90 | $EQU DVI$_TT_HANGUP 176 91 | $EQU DVI$_TT_MODHANGUP 178 92 | $EQU DVI$_TT_BRDCSTMBX 180 93 | $EQU DVI$_TT_DMA 182 94 | $EQU DVI$_TT_ALTYPEAHD 184 95 | $EQU DVI$_TT_SETSPEED 186 96 | $EQU DVI$_TT_DCL_MAILBX 188 97 | $EQU DVI$_TT_EDITING 190 98 | $EQU DVI$_TT_INSERT 192 99 | $EQU DVI$_TT_FALLBACK 194 100 | $EQU DVI$_TT_DIALUP 196 101 | $EQU DVI$_TT_SECURE 198 102 | $EQU DVI$_TT_DISCONNECT 200 103 | $EQU DVI$_TT_PASTHRU 202 104 | $EQU DVI$_TT_SIXEL 204 105 | $EQU DVI$_TT_DRCS 206 106 | $EQU DVI$_TT_PRINTER 208 107 | $EQU DVI$_TT_APP_KEYPAD 210 108 | $EQU DVI$_TT_SYSPWD 212 109 | $EQU DVI$_TT_ANSICRT 214 110 | $EQU DVI$_TT_REGIS 216 111 | $EQU DVI$_TT_BLOCK 218 112 | $EQU DVI$_TT_AVO 220 113 | $EQU DVI$_TT_EDIT 222 114 | $EQU DVI$_TT_DECCRT 224 115 | $EQU DVI$_STS 226 116 | $EQU DVI$_DEVSTS 228 117 | $EQU DVI$_DEVCHAR2 230 118 | $EQU DVI$_FULLDEVNAM 232 119 | $EQU DVI$_LOCKID 234 120 | $EQU DVI$_ALLDEVNAM 236 121 | $EQU DVI$_VOLSETMEM 238 122 | $EQU DVI$_DEVLOCKNAM 240 123 | $EQU DVI$_ALLOCLASS 242 124 | $EQU DVI$_ALT_HOST_AVAIL 244 125 | $EQU DVI$_ALT_HOST_NAME 246 126 | $EQU DVI$_ALT_HOST_TYPE 248 127 | $EQU DVI$_HOST_AVAIL 250 128 | $EQU DVI$_HOST_COUNT 252 129 | $EQU DVI$_HOST_NAME 254 130 | $EQU DVI$_HOST_TYPE 256 131 | $EQU DVI$_REMOTE_DEVICE 258 132 | $EQU DVI$_SERVED_DEVICE 260 133 | $EQU DVI$_SHDW_CATCHUP_COPYING 262 134 | $EQU DVI$_SHDW_MASTER 264 135 | $EQU DVI$_SHDW_MASTER_NAME 266 136 | $EQU DVI$_SHDW_MEMBER 268 137 | $EQU DVI$_SHDW_MERGE_COPYING 270 138 | $EQU DVI$_SHDW_NEXT_MBR_NAME 272 139 | $EQU DVI$_TT_PHYDEVNAM 274 140 | $EQU DVI$_TT_DECCRT2 276 141 | $EQU DVI$_MEDIA_NAME 278 142 | $EQU DVI$_MEDIA_TYPE 280 143 | $EQU DVI$_MEDIA_ID 282 144 | $EQU DVI$_SHDW_spare_bit_1 284 145 | $EQU DVI$_SHDW_spare_bit_2 286 146 | $EQU DVI$_SHDW_spare_string_1 288 147 | $EQU DVI$_SHDW_spare_string_2 290 148 | $EQU DVI$_SHDW_spare_integer_1 292 149 | $EQU DVI$_SHDW_spare_integer_2 294 150 | $EQU DVI$C_SECONDARY 1 151 | $EQU DVI$C_ACP_F11V1 1 152 | $EQU DVI$C_ACP_F11V2 2 153 | $EQU DVI$C_ACP_MTA 3 154 | $EQU DVI$C_ACP_NET 4 155 | $EQU DVI$C_ACP_REM 5 156 | $EQU DVI$C_ACP_JNL 6 157 | $DEFEND DVI,$GBL,DEF 158 | .ENDM 159 | -------------------------------------------------------------------------------- /zk/wizardry.txt: -------------------------------------------------------------------------------- 1 | 2 | ZK problems: Total of 150 points 3 | ---------------------------------- 4 | 5 | Ranks: (they may perfectly into DEC's system) 6 | 7 | 0 - Diagnostic Programming Aid 8 | 1 to 24 - Entry Level Software Engineer 9 | 25 to 49 - Software Engineer II 10 | 50 to 99 - Senior Software Engineer 11 | 100 to 124 - Principal Software Engineer 12 | 125 to 149 - Consulting Engineer 13 | 150 - Hacker 14 | 15 | 16 | Entrance in the Building: (25 points) 17 | 18 | - magic word is "digitalsoftwareengineering" 19 | - verb: say digitalsoftwareengineering 20 | 21 | 22 | Getting Past the Guards on the way in: (25 points) 23 | 24 | - the gaurds escort you to Health Services 25 | - you must follow the guards or die 26 | - verb: follow 27 | 28 | - the nurse performs a physical on you 29 | - blood pressure machine 30 | - verb: give arm to nurse 31 | - scale 32 | - verb: stand on scale 33 | - the guards escort you back to lobby 34 | - you must follwo the guards or die 35 | - verb: follow 36 | 37 | - the guards give you a temporary badge 38 | - you can't go until you take the badge 39 | 40 | 41 | CDD Tape: (25 points) 42 | 43 | - 10 points for the getting the bills 44 | - 5 for changing the bills to coins 45 | - 5 for getting Coke from macine 46 | - 5 for giving Coke to CDD dev 47 | 48 | - find cyrstal balls in Ed's and Will office 49 | - rub both balls (print obsence message) 50 | - give a ball to petty cash officier 51 | - verb: give ball to officier 52 | - wait til petty cash closes (indicated by a reply message - 50 moves) 53 | - the petty cash door locks 54 | - look in your ball and see officer say magic words 55 | - verb: look in ball 56 | - goto petty cash and unlock safe 57 | - verb: say magic_word 58 | - take bills from safe 59 | - verb: take bills from safe 60 | - change bill to coins using working money changer 61 | - verb: put bills in machine 62 | - put coins in coke machine 63 | - verb: put coins in machine 64 | - take the coke 65 | - verb: take coke from machine 66 | - give the coke to CDD developer 67 | - veb: give coke to developer 68 | 69 | 70 | DTR tape: (25 points) 71 | 72 | - cant take documentation set 73 | - bring documentation to DTR office 74 | - need to put doc in elevator 75 | - can't bring doc past doors 76 | - put doc under the planter 77 | - verb: put doc under planter 78 | - climb up doc 79 | - verb: climb up doc (or) up 80 | - take the DTR tape 81 | - verb: take tape 82 | - get back down 83 | - verb: down 84 | 85 | VMS tape: (25 points) 86 | 87 | - find card in the maze 88 | - bring card to lab of implementors 89 | - turn off other lights (lamp) by putting them in sack 90 | - verb: put lamp in sack 91 | - put card under ultra-violet light which make letters appear on card 92 | - lettes last on card for 15 turns then fade away 93 | - verb: put card under ultraviolet light 94 | - go to VMS developer who asks for the card (need to see the lettering) 95 | - give card to developer 96 | - take VMS tape 97 | - verb: take tape 98 | 99 | Installation of Tapes: (25 points) 100 | 101 | - goto VMS lab 102 | - get scratch disk 103 | - verb: take scatch disk 104 | - give disk and VMS tape to field service who builds system disk 105 | - verb: give disk to field service 106 | - put disk in disk drive 107 | - verb: put disk in disk drive 108 | - boot vax 109 | - verb: boot [vax] 110 | - put CDD tape in tape drive 111 | - verb: put tape in tape drive 112 | - install CDD 113 | - verb: install cdd 114 | - take tape from tape drive 115 | - verb: take tape from tape drive 116 | - put DTR tape in tape drive 117 | - verb: put tape in tape drive 118 | - install DTR 119 | - verb: install dtr 120 | - take disk from disk drive 121 | - verb: take disk from disk drive 122 | 123 | Getting out of ZK past guards: (25 points) 124 | 125 | - goto lobby 126 | - if you try to leave with the system disk the guards escort you 127 | to personnel 128 | - must follow guards or die 129 | - verb: follow 130 | - personnel asks you questions about the game 131 | - must answer correctly or "you're not ready" 132 | - verb: answer to question 133 | - personnel rep escorts you out of building 134 | - verb: follow 135 | 136 | 137 | Random Occurences: 138 | 139 | - Wandering Guard checking for badge 140 | - Roaming night crew radomizing objects you touched only in maze 141 | - Random shutdown of lights in entire building (you must WAIT) 142 | - Guard to put lights back on 143 | - lamp runs down 144 | 145 | Special Cases: 146 | 147 | - Any cognizant object will kill you when you try to kill (any form) 148 | it 149 | - Try taking the packs from our cabinet and you die 150 | 151 | 152 | -------------------------------------------------------------------------------- /zk/advent.txt: -------------------------------------------------------------------------------- 1 | 35,You are obviously a rank amateur. Better luck next time. 2 | 100,Your score qualifies you as a novice class adventurer. 3 | 130,You have achieved the rating: "experienced adventurer". 4 | 200,You may now consider yourself a "seasoned adventurer". 5 | 250,You have reached "junior master" status. 6 | 300,Your score puts you in master adventurer class C. 7 | 330,Your score puts you in master adventurer class B. 8 | 349,Your score puts you in master adventurer class A. 9 | 9999,All of adventuredom gives tribute to you, adventurer grandmaster! 10 | 11 | 142,If you want to end your adventure early, say "quit". To suspend your 12 | 142,adventure such that you can continue later, say "suspend" (or "pause" 13 | 142,or "save"). To see what hours the cave is normally open, say "hours". 14 | 142,To see how well you're doing, say "score". To get full credit for a 15 | 142,treasure, you must have left it safely in the building, though you get 16 | 142,partial credit just for locating it. You lose points for getting 17 | 142,killed, or for quitting, though the former costs you more. There are 18 | 142,also points based on how much (if any) of the cave you've managed to 19 | 142,explore; in particular, there is a large bonus just for getting in (to 20 | 142,distinguish the beginners from the rest of the pack), and there are 21 | 142,other ways to determine whether you've been through some of the more 22 | 142,harrowing sections. If you think you've found all the treasures, just 23 | 142,keep exploring for a while. If nothing interesting happens, you 24 | 142,haven't found them all yet. If something interesting *does* happen, 25 | 142,it means you're getting a bonus and have an opportunity to garner many 26 | 142,more points in the master's section. I may occasionally offer hints 27 | 142,if you seem to be having trouble. If I do, I'll warn you in advance 28 | 142,how much it will affect your score to accept the hints. Finally, to 29 | 142,save paper, you may specify "brief", which tells me never to repeat 30 | 142,the full description of a place unless you explicitly ask me to. 31 | 32 | 51,I know of places, actions, and things. Most of my vocabulary 33 | 51,describes places and is used to move you there. To move, try words 34 | 51,like forest, building, downstream, enter, east, west, north, south, 35 | 51,up, or down. I know about a few special objects, like a black rod 36 | 51,hidden in the cave. These objects can be manipulated using some of 37 | 51,the action words that I know. Usually you will need to give both the 38 | 51,object and action words (in either order), but sometimes I can infer 39 | 51,the object from the verb alone. Some objects also imply verbs; in 40 | 51,particular, "inventory" implies "take inventory", which causes me to 41 | 51,give you a list of what you're carrying. The objects have side 42 | 51,effects; for instance, the rod scares the bird. Usually people having 43 | 51,trouble moving just need to try a few more words. Usually people 44 | 51,trying unsuccessfully to manipulate an object are attempting something 45 | 51,beyond their (or my!) capabilities and should try a completely 46 | 51,different tack. To speed the game you can sometimes move long 47 | 51,distances with a single word. For example, "building" usually gets 48 | 51,you to the building from anywhere above ground except when lost in the 49 | 51,forest. Also, note that cave passages turn a lot, and that leaving a 50 | 51,room to the north does not guarantee entering the next from the south. 51 | 52 | 000,There are a few recent issues of "Spelunker Today" magazine here. 53 | 54 | 126,You are on the edge of a breath-taking view. Far below you is an 55 | 126,active volcano, from which great gouts of molten lava come surging 56 | 126,out, cascading back down into the depths. The glowing rock fills the 57 | 126,farthest reaches of the cavern with a blood-red glare, giving every- 58 | 126,thing an eerie, macabre appearance. The air is filled with flickering 59 | 126,sparks of ash and a heavy smell of brimstone. The walls are hot to 60 | 126,the touch, and the thundering of the volcano drowns out all other 61 | 126,sounds. Embedded in the jagged roof far overhead are myriad twisted 62 | 126,formations composed of pure white alabaster, which scatter the murky 63 | 126,light into sinister apparitions upon the walls. To one side is a deep 64 | 126,gorge, filled with a bizarre chaos of tortured rock which seems to 65 | 126,have been crafted by the devil himself. An immense river of fire 66 | 126,crashes out from the depths of the volcano, burns its way through the 67 | 126,gorge, and plummets into a bottomless pit far off to your left. To 68 | 126,the right, an immense geyser of blistering steam erupts continuously 69 | 126,from a barren island in the center of a sulfurous lake, which bubbles 70 | 126,ominously. The far right wall is aflame with an incandescence of its 71 | 126,own, which lends an additional infernal splendor to the already 72 | 126,hellish scene. A dark, foreboding passage exits to the south. 73 | -------------------------------------------------------------------------------- /zk/zkdef.pas: -------------------------------------------------------------------------------- 1 | module zk$definitions; 2 | 3 | (* Enumerated types for tokens. The directions must be first, in the order 4 | specified. Any token which will appear in the 'token to object' table 5 | must be listed in alphabetical order. *) 6 | 7 | type $symbol_token = 8 | ( north_keyword, south_keyword, east_keyword, 9 | west_keyword, north_east_keyword, south_west_keyword, 10 | south_east_keyword, north_west_keyword, up_keyword, 11 | down_keyword, in_keyword, out_keyword, 12 | 13 | all_keyword, and_keyword, arm_keyword, ascii_keyword, 14 | at_keyword, back_keyword, badge_keyword, 15 | ball_keyword, bank_keyword, bars_keyword, 16 | bills_keyword, black_keyword, blank_keyword, 17 | blood_keyword, blue_keyword, 18 | board_keyword, boot_keyword, brief_keyword, 19 | broken_keyword, building_keyword, bulletin_keyword, 20 | burlap_keyword, button_keyword, 21 | cabinet_keyword, cafeteria_keyword, can_keyword, 22 | card_keyword, cdd_keyword, close_keyword, 23 | coins_keyword, coke_keyword, comma_symbol, 24 | compass_keyword, computer_keyword, 25 | console_keyword, contents_keyword, control_keyword, 26 | crystal_keyword, dark_keyword, debris_keyword, 27 | desk_keyword, developer_keyword, diet_keyword, 28 | discarded_keyword, disk_keyword, doc_keyword, 29 | door_keyword, drink_keyword, drive_keyword, 30 | drop_keyword, dtr_keyword, 31 | edswbl_keyword, end_of_line, 32 | elevator_keyword, elvish_keyword, empty_keyword, 33 | enquirer_keyword, enter_keyword, examine_keyword, 34 | exit_keyword, field_keyword, 35 | fluorescent_keyword, follow_keyword, from_keyword, 36 | get_keyword, give_keyword, glass_keyword, 37 | go_keyword, guard_keyword, heal_keyword, 38 | helicopter_keyword, hello_keyword, 39 | information_keyword, 40 | install_keyword, integer_constant, invalid, 41 | inventory_keyword, is_keyword, 42 | journal_keyword, jump_keyword, 43 | keypad_keyword, keys_keyword, kill_keyword, 44 | lamp_keyword, light_keyword, liquid_keyword, 45 | listings_keyword, locate_keyword, lock_keyword, 46 | look_keyword, machine_keyword, magazine_keyword, 47 | magic_keyword, mahogany_keyword, 48 | mail_keyword, manager_keyword, 49 | manuals_keyword, marker_keyword, media_keyword, 50 | menu_keyword, message_keyword, mirror_keyword, 51 | money_keyword, 52 | move_keyword, needle_keyword, neon_keyword, 53 | newspaper_keyword, nil_keyword, notes_keyword, 54 | nurse_keyword, off_keyword, 55 | officer_keyword, old_keyword, on_keyword, 56 | open_keyword, orange_keyword, pack_keyword, 57 | panel_keyword, pattern_keyword, people_keyword, 58 | period_symbol, personnel_keyword, pick_keyword, 59 | play_keyword, plant_keyword, please_keyword, 60 | plugh_keyword, 61 | possessions_keyword, pray_keyword, pressure_keyword, 62 | product_keyword, prototype_keyword, 63 | put_keyword, quit_keyword, quiz_keyword, 64 | racks_keyword, read_keyword, reception_keyword, 65 | red_keyword, rep_keyword, restart_keyword, 66 | restore_keyword, 67 | room_keyword, rose_keyword, route3_keyword, 68 | rtl_keyword, rub_keyword, rug_keyword, sack_keyword, 69 | safe_keyword, sailor_keyword, save_keyword, 70 | say_keyword, scale_keyword, score_keyword, 71 | scratch_keyword, scream_keyword, 72 | sdc_keyword, security_keyword, self_keyword, 73 | service_keyword, shake_keyword, 74 | shut_keyword, sign_keyword, software_keyword, 75 | stairwell_keyword, stand_keyword, 76 | start_keyword, stop_keyword, strange_keyword, 77 | sword_keyword, system_keyword, 78 | table_keyword, take_keyword, tape_keyword, 79 | tell_keyword, temporary_keyword, 80 | terminal_keyword, text_string, 81 | the_keyword, then_keyword, today_keyword, to_keyword, 82 | turn_keyword, type_keyword, 83 | undefined, unknown, unlock_keyword, 84 | vax_keyword, verbose_keyword, version_keyword, 85 | video_keyword, 86 | vms_keyword, wait_keyword, wall_keyword, 87 | wear_keyword, where_keyword, with_keyword, 88 | working_keyword, xyzzy_keyword, 89 | yellow_keyword, zk_keyword); 90 | 91 | $symbol_set = set of $symbol_token; 92 | $symbol_value = [unsafe] integer; 93 | $symbol_string = varying[132] of char; 94 | 95 | $symbol_desc = record 96 | string : $symbol_string; 97 | token : $symbol_token; 98 | value : $symbol_value; 99 | end; 100 | 101 | $ast_node_types = (command_node, object_node, string_node, 102 | number_node); 103 | $ast_node_ptr = ^$ast_node; 104 | $ast_node = record 105 | list : $ast_node_ptr; 106 | case node_type : $ast_node_types of 107 | command_node: 108 | (keyword1, keyword2 : $symbol_token; 109 | left, right : $ast_node_ptr; 110 | please : boolean); 111 | object_node: 112 | (object_code, from : integer); 113 | string_node: 114 | (string : $symbol_string); 115 | number_node: 116 | (number : integer); 117 | end; 118 | end. 119 | -------------------------------------------------------------------------------- /env/rtldef.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] module rtldef; 2 | 3 | const lib$m_cli_ctrlt = %x00100000; 4 | lib$m_cli_ctrly = %x02000000; 5 | 6 | [asynchronous, external(mth$random)] function $random( 7 | var seed : unsigned) : real; 8 | extern; 9 | 10 | [asynchronous, external(lib$day_of_week)] function $day_of_week( 11 | var time : $uquad := %immed 0; 12 | var day_number : integer) : unsigned; 13 | extern; 14 | 15 | [asynchronous, external(str$replace)] function $replace( 16 | var dst_str : varying[$u1] of char; 17 | var src_str : varying[$u2] of char; 18 | start_pos : integer; 19 | end_pos : integer; 20 | var rep_str : varying[$u3] of char) : unsigned; 21 | extern; 22 | 23 | [asynchronous, external(str$append)] function $append_vs_dx( 24 | var dst_str : varying[$u1] of char; 25 | var src_str : $uquad) : unsigned; 26 | extern; 27 | 28 | [asynchronous, external(str$upcase)] function $upcase( 29 | var dst_str : varying[$u1] of char; 30 | src_str : varying[$u2] of char) : unsigned; 31 | extern; 32 | 33 | [asynchronous, external(str$dupl_char)] function $dupl_char( 34 | var dst_str : varying[$u1] of char; 35 | length : integer; 36 | character : char) : unsigned; 37 | extern; 38 | 39 | [asynchronous, external(lib$find_file)] function $find_file( 40 | file_spec : varying[$u1] of char; 41 | var result_spec : varying[$u2] of char; 42 | var context : unsigned; 43 | default_spec : varying[$u4] of char := %immed 0; 44 | related_spec : varying[$u5] of char := %immed 0; 45 | var stv_addr : unsigned := %immed 0; 46 | user_flags : unsigned := %immed 0) : unsigned; 47 | extern; 48 | 49 | [asynchronous, external(lib$find_file_end)] function $find_file_end( 50 | context : unsigned) : unsigned; 51 | extern; 52 | 53 | [asynchronous, external(lib$scopy_dxdx)] function $copy_dx_vs( 54 | var src_str : $quad; 55 | var dst_str : varying[$u1] of char) : unsigned; 56 | extern; 57 | 58 | [asynchronous, external(lib$scopy_dxdx)] function $copy_vs_dx( 59 | var src_str : varying[$u1] of char; 60 | var dst_str : $quad) : unsigned; 61 | extern; 62 | 63 | [asynchronous, external(lib$scopy_r_dx)] function $copy_r_dx( 64 | src_len : $uword; 65 | %immed src_str : unsigned; 66 | var dst_str : $quad) : unsigned; 67 | extern; 68 | 69 | [asynchronous, external(lib$scopy_r_dx)] function $copy_r_vs( 70 | src_len : $uword; 71 | %immed src_str : unsigned; 72 | var dst_str : varying[$u1] of char) : unsigned; 73 | extern; 74 | 75 | [asynchronous, external(lib$signal)] function $signal( 76 | %immed condition : unsigned; 77 | %immed additonal : [list] unsigned) : unsigned; 78 | extern; 79 | 80 | (* Condition handler which returns signal to caller of establisher *) 81 | [asynchronous, external(lib$sig_to_ret)] function $sig_to_ret( 82 | var sig_args : unsigned; 83 | var mech_args : unsigned) : unsigned; 84 | extern; 85 | 86 | (* Subtract multiple precision *) 87 | [asynchronous, external(lib$subx)] function $subx( 88 | var a : $quad; 89 | var b : $quad; 90 | var result : $quad; 91 | %ref length : unsigned := %immed 0) : unsigned; 92 | extern; 93 | 94 | (* Add multiple precision *) 95 | [asynchronous, external(lib$addx)] function $addx( 96 | var a : $quad; 97 | var b : $quad; 98 | var result : $quad; 99 | %ref length : unsigned := %immed 0) : unsigned; 100 | extern; 101 | 102 | [asynchronous, external(lib$disable_ctrl)] function $disable_ctrl( 103 | disable_mask : unsigned; 104 | var old_mask : unsigned := %immed 0) : unsigned; 105 | extern; 106 | 107 | [asynchronous, external(lib$enable_ctrl)] function $enable_ctrl( 108 | enable_mask : unsigned; 109 | var old_mask : unsigned := %immed 0) : unsigned; 110 | extern; 111 | 112 | [asynchronous, external(str$compare)] function $compare( 113 | var src1_str : varying[$u1] of char; 114 | var src2_str : varying[$u2] of char) : integer; 115 | extern; 116 | 117 | [asynchronous, external(str$compare)] function $compare_vs_dx( 118 | var src1_str : varying[$u1] of char; 119 | var src2_str : $quad) : integer; 120 | extern; 121 | 122 | function lib$put_output : unsigned; extern; 123 | [asynchronous, external(lib$put_output)] function $put_output( 124 | msg_str: varying[$u1] of char) : unsigned; 125 | extern; 126 | 127 | function lib$get_input : unsigned; extern; 128 | [asynchronous, external(lib$get_input)] function $get_input( 129 | var msg_str : varying[$u1] of char; 130 | prompt_str : varying[$u2] of char := %immed 0) : unsigned; 131 | extern; 132 | 133 | [asynchronous, external(lib$get_foreign)] function $get_foreign( 134 | var get_str : varying[$u1] of char; 135 | user_prompt : varying[$u2] of char := %immed 0; 136 | var out_len : $uword := %immed 0; 137 | var force_prompt : unsigned := %immed 0) : unsigned; 138 | extern; 139 | 140 | [asynchronous, external(lib$get_logical)] function $get_logical( 141 | %stdescr log_nam : packed array[$l1..$u1:integer] of char; 142 | var res_str : packed array[$l2..$u2:integer] of char; 143 | var res_len : $uword := %immed 0; 144 | tbl_nam : varying[$u4] of char := %immed 0; 145 | var max_index : integer := %immed 0; 146 | index : unsigned := %immed 0; 147 | acmode : $ubyte := %immed 0; 148 | flags : unsigned := %immed 0) : unsigned; 149 | extern; 150 | 151 | end. 152 | -------------------------------------------------------------------------------- /zk/zkobject_def.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:zk$context_def')] 2 | module zk$object_def; 3 | 4 | [external(zk$stand_object)] function $stand_object( 5 | var context : $context_block; 6 | actor_ptr : $object_ptr; 7 | var actor_name : varying[$u1] of char; 8 | object_ptr : $object_ptr; 9 | var name : varying[$u2] of char; 10 | on : boolean) : boolean; 11 | extern; 12 | 13 | [external(zk$move_object)] function $move_object( 14 | var context : $context_block; 15 | actor_ptr : $object_ptr; 16 | var actor_name : varying[$u1] of char; 17 | object_ptr : $object_ptr; 18 | var object_name : varying[$u2] of char) : boolean; 19 | extern; 20 | 21 | [external(zk$look_in_object)] function $look_in_object( 22 | var context : $context_block; 23 | object_ptr : $object_ptr; 24 | var name : varying[$u1] of char) : boolean; 25 | extern; 26 | 27 | [external(zk$locate_object)] function $locate_object( 28 | var context : $context_block; 29 | actor_ptr : $object_ptr; 30 | var actor_name : varying[$u1] of char; 31 | object_number : integer) : boolean; 32 | extern; 33 | 34 | [external(zk$examine_object)] function $examine_object( 35 | var context : $context_block; 36 | actor_ptr : $object_ptr; 37 | var actor_name : varying[$u1] of char; 38 | object_ptr : $object_ptr; 39 | var name : varying[$u2] of char; 40 | var list : boolean; 41 | var detail : unsigned) : boolean; 42 | extern; 43 | 44 | [external(zk$inventory_object)] function $inventory_object( 45 | var context : $context_block; 46 | object_ptr : $object_ptr; 47 | var name : varying[$u1] of char) : boolean; 48 | extern; 49 | 50 | [external(zk$read_object)] function $read_object( 51 | var context : $context_block; 52 | actor_ptr : $object_ptr; 53 | var actor_name : varying[$u1] of char; 54 | object_ptr : $object_ptr; 55 | var name : varying[$u2] of char; 56 | var detail : unsigned) : boolean; 57 | extern; 58 | 59 | [external(zk$boot_object)] function $boot_object( 60 | var context : $context_block; 61 | actor_ptr : $object_ptr; 62 | var actor_name : varying[$u1] of char; 63 | object_ptr : $object_ptr; 64 | var name : varying[$u2] of char) : boolean; 65 | extern; 66 | 67 | [external(zk$shake_object)] function $shake_object( 68 | var context : $context_block; 69 | actor_ptr : $object_ptr; 70 | var actor_name : varying[$u1] of char; 71 | object_ptr : $object_ptr; 72 | var name : varying[$u2] of char) : boolean; 73 | extern; 74 | 75 | [external(zk$drink_object)] function $drink_object( 76 | var context : $context_block; 77 | actor_ptr : $object_ptr; 78 | var actor_name : varying[$u1] of char; 79 | object_ptr : $object_ptr; 80 | var name : varying[$u2] of char) : boolean; 81 | extern; 82 | 83 | (* Commands with two objects *) 84 | 85 | [external(zk$put_object)] function $put_object( 86 | var context : $context_block; 87 | actor_ptr : $object_ptr; 88 | var actor_name : varying[$u1] of char; 89 | object1_ptr : $object_ptr; 90 | var name1 : varying[$u2] of char; 91 | object2_ptr : $object_ptr; 92 | var name2 : varying[$u3] of char; 93 | inside : boolean; 94 | success_message : unsigned) : boolean; 95 | extern; 96 | 97 | [external(zk$give_object)] function $give_object( 98 | var context : $context_block; 99 | actor_ptr : $object_ptr; 100 | var actor_name : varying[$u1] of char; 101 | object1_ptr : $object_ptr; 102 | var name1 : varying[$u2] of char; 103 | object2_ptr : $object_ptr; 104 | var name2 : varying[$u3] of char) : boolean; 105 | extern; 106 | 107 | [external(zk$open_object)] function $open_object( 108 | var context : $context_block; 109 | actor_ptr : $object_ptr; 110 | var actor_name : varying[$u1] of char; 111 | object1_ptr : $object_ptr; 112 | var name1 : varying[$u2] of char; 113 | object2_ptr : $object_ptr; 114 | var name2 : varying[$u3] of char) : boolean; 115 | extern; 116 | 117 | [external(zk$close_object)] function $close_object( 118 | var context : $context_block; 119 | actor_ptr : $object_ptr; 120 | var actor_name : varying[$u1] of char; 121 | object1_ptr : $object_ptr; 122 | var name1 : varying[$u2] of char; 123 | object2_ptr : $object_ptr; 124 | var name2 : varying[$u3] of char) : boolean; 125 | extern; 126 | 127 | [external(zk$lock_unlock_object)] function $lock_unlock_object( 128 | var context : $context_block; 129 | actor_ptr : $object_ptr; 130 | var actor_name : varying[$u1] of char; 131 | object1_ptr : $object_ptr; 132 | var name1 : varying[$u2] of char; 133 | object2_ptr : $object_ptr; 134 | var name2 : varying[$u3] of char; 135 | lock : boolean) : boolean; 136 | extern; 137 | 138 | [external(zk$start_stop_object)] function $start_stop_object( 139 | var context : $context_block; 140 | actor_ptr : $object_ptr; 141 | var actor_name : varying[$u1] of char; 142 | object1_ptr : $object_ptr; 143 | var name1 : varying[$u2] of char; 144 | object2_ptr : $object_ptr; 145 | var name2 : varying[$u3] of char; 146 | start : boolean) : boolean; 147 | extern; 148 | 149 | [external(zk$heal_kill_object)] function $heal_kill_object( 150 | var context : $context_block; 151 | actor_ptr : $object_ptr; 152 | var actor_name : varying[$u1] of char; 153 | object1_ptr : $object_ptr; 154 | var name1 : varying[$u2] of char; 155 | object2_ptr : $object_ptr; 156 | var name2 : varying[$u3] of char; 157 | heal : boolean) : boolean; 158 | extern; 159 | 160 | [external(zk$rub_object)] function $rub_object( 161 | var context : $context_block; 162 | actor_ptr : $object_ptr; 163 | var actor_name : varying[$u1] of char; 164 | object1_ptr : $object_ptr; 165 | var name1 : varying[$u2] of char; 166 | object2_ptr : $object_ptr; 167 | var name2 : varying[$u3] of char) : boolean; 168 | extern; 169 | end. 170 | -------------------------------------------------------------------------------- /env/smgdef.mar: -------------------------------------------------------------------------------- 1 | .MACRO $SMGDEF,$GBL 2 | $DEFINI SMG,$GBL 3 | $EQU SMG$K_TRM_CTRLA 1 4 | $EQU SMG$K_TRM_CTRLB 2 5 | $EQU SMG$K_TRM_CTRLC 3 6 | $EQU SMG$K_TRM_CTRLD 4 7 | $EQU SMG$K_TRM_CTRLE 5 8 | $EQU SMG$K_TRM_CTRLF 6 9 | $EQU SMG$K_TRM_CTRLG 7 10 | $EQU SMG$K_TRM_CTRLH 8 11 | $EQU SMG$K_TRM_CTRLI 9 12 | $EQU SMG$K_TRM_CTRLJ 10 13 | $EQU SMG$K_TRM_CTRLK 11 14 | $EQU SMG$K_TRM_CTRLL 12 15 | $EQU SMG$K_TRM_CTRLM 13 16 | $EQU SMG$K_TRM_CTRLN 14 17 | $EQU SMG$K_TRM_CTRLO 15 18 | $EQU SMG$K_TRM_CTRLP 16 19 | $EQU SMG$K_TRM_CTRLQ 17 20 | $EQU SMG$K_TRM_CTRLR 18 21 | $EQU SMG$K_TRM_CTRLS 19 22 | $EQU SMG$K_TRM_CTRLT 20 23 | $EQU SMG$K_TRM_CTRLU 21 24 | $EQU SMG$K_TRM_CTRLV 22 25 | $EQU SMG$K_TRM_CTRLW 23 26 | $EQU SMG$K_TRM_CTRLX 24 27 | $EQU SMG$K_TRM_CTRLY 25 28 | $EQU SMG$K_TRM_CTRLZ 26 29 | $EQU SMG$K_TRM_BS 8 30 | $EQU SMG$K_TRM_HT 9 31 | $EQU SMG$K_TRM_LF 10 32 | $EQU SMG$K_TRM_CR 13 33 | $EQU SMG$K_TRM_PF1 256 34 | $EQU SMG$K_TRM_PF2 257 35 | $EQU SMG$K_TRM_PF3 258 36 | $EQU SMG$K_TRM_PF4 259 37 | $EQU SMG$K_TRM_KP0 260 38 | $EQU SMG$K_TRM_KP1 261 39 | $EQU SMG$K_TRM_KP2 262 40 | $EQU SMG$K_TRM_KP3 263 41 | $EQU SMG$K_TRM_KP4 264 42 | $EQU SMG$K_TRM_KP5 265 43 | $EQU SMG$K_TRM_KP6 266 44 | $EQU SMG$K_TRM_KP7 267 45 | $EQU SMG$K_TRM_KP8 268 46 | $EQU SMG$K_TRM_KP9 269 47 | $EQU SMG$K_TRM_ENTER 270 48 | $EQU SMG$K_TRM_MINUS 271 49 | $EQU SMG$K_TRM_COMMA 272 50 | $EQU SMG$K_TRM_PERIOD 273 51 | $EQU SMG$K_TRM_UP 274 52 | $EQU SMG$K_TRM_DOWN 275 53 | $EQU SMG$K_TRM_LEFT 276 54 | $EQU SMG$K_TRM_RIGHT 277 55 | $EQU SMG$K_TRM_F6 286 56 | $EQU SMG$K_TRM_F7 287 57 | $EQU SMG$K_TRM_F8 288 58 | $EQU SMG$K_TRM_F9 289 59 | $EQU SMG$K_TRM_F10 290 60 | $EQU SMG$K_TRM_F11 291 61 | $EQU SMG$K_TRM_F12 292 62 | $EQU SMG$K_TRM_F13 293 63 | $EQU SMG$K_TRM_F14 294 64 | $EQU SMG$K_TRM_HELP 295 65 | $EQU SMG$K_TRM_DO 296 66 | $EQU SMG$K_TRM_F17 297 67 | $EQU SMG$K_TRM_F18 298 68 | $EQU SMG$K_TRM_F19 299 69 | $EQU SMG$K_TRM_F20 300 70 | $EQU SMG$K_TRM_FIND 311 71 | $EQU SMG$K_TRM_INSERT_HERE 312 72 | $EQU SMG$K_TRM_REMOVE 313 73 | $EQU SMG$K_TRM_SELECT 314 74 | $EQU SMG$K_TRM_PREV_SCREEN 315 75 | $EQU SMG$K_TRM_NEXT_SCREEN 316 76 | $EQU SMG$K_TRM_E1 311 77 | $EQU SMG$K_TRM_E2 312 78 | $EQU SMG$K_TRM_E3 313 79 | $EQU SMG$K_TRM_E4 314 80 | $EQU SMG$K_TRM_E5 315 81 | $EQU SMG$K_TRM_E6 316 82 | $EQU SMG$K_TRM_CANCELLED 508 83 | $EQU SMG$K_TRM_TIMEOUT 509 84 | $EQU SMG$K_TRM_BUFFER_FULL 510 85 | $EQU SMG$K_TRM_UNKNOWN 511 86 | $EQU SMG$M_KEY_NOECHO 1 87 | $EQU SMG$M_KEY_TERMINATE 2 88 | $EQU SMG$M_KEY_LOCK 4 89 | $EQU SMG$M_KEY_PROTECTED 8 90 | $EQU SMG$M_KEY_SETSTATE 16 91 | $EQU SMG$S_KEY_DEF_ATTR 4 92 | $EQU SMG$V_KEY_NOECHO 0 93 | $EQU SMG$V_KEY_TERMINATE 1 94 | $EQU SMG$V_KEY_LOCK 2 95 | $EQU SMG$V_KEY_PROTECTED 3 96 | $EQU SMG$V_KEY_SETSTATE 4 97 | $EQU SMG$C_CHANGE_RENDITION 10 98 | $EQU SMG$C_DELETE_CHARS 11 99 | $EQU SMG$C_ERASE_DISPLAY 12 100 | $EQU SMG$C_ERASE_LINE 13 101 | $EQU SMG$C_HOME_CURSOR 14 102 | $EQU SMG$C_INSERT_CHARS 15 103 | $EQU SMG$C_INSERT_LINE 16 104 | $EQU SMG$C_PUT_CHARS 17 105 | $EQU SMG$C_PUT_LINE 18 106 | $EQU SMG$C_PUT_DISPLAY_ENCODED 19 107 | $EQU SMG$C_RETURN_CURSOR_POS 20 108 | $EQU SMG$C_PUT_WITH_SCROLL 21 109 | $EQU SMG$C_SET_CURSOR_ABS 22 110 | $EQU SMG$C_SET_CURSOR_REL 23 111 | $EQU SMG$C_DELETE_LINE 24 112 | $EQU SMG$C_ERASE_CHARS 25 113 | $EQU SMG$C_SCROLL_DISPLAY_AREA 26 114 | $EQU SMG$C_CHANGE_VIRTUAL_DISPLAY 27 115 | $EQU SMG$C_LABEL_BORDER 28 116 | $EQU SMG$C_END_DISPLAY_UPDATE 29 117 | $EQU SMG$C_UNITED_KINGDOM 0 118 | $EQU SMG$C_ASCII 1 119 | $EQU SMG$C_SPEC_GRAPHICS 2 120 | $EQU SMG$C_ALT_CHAR 3 121 | $EQU SMG$C_ALT_GRAPHICS 4 122 | $EQU SMG$C_UPPER_LEFT 0 123 | $EQU SMG$C_LOWER_LEFT 1 124 | $EQU SMG$C_UPPER_RIGHT 2 125 | $EQU SMG$C_LOWER_RIGHT 3 126 | $EQU SMGK_TOP 0 127 | $EQU SMGK_BOTTOM 1 128 | $EQU SMGK_LEFT 2 129 | $EQU SMGK_RIGHT 3 130 | $EQU SMG$M_BOLD 1 131 | $EQU SMG$M_REVERSE 2 132 | $EQU SMG$M_BLINK 4 133 | $EQU SMG$M_UNDERLINE 8 134 | $EQU SMG$M_NORMAL 0 135 | $EQU SMG$M_BUF_ENABLED 1 136 | $EQU SMG$M_MINUPD 2 137 | $EQU SMG$M_CLEAR_SCREEN 4 138 | $EQU SMG$M_NOTABS 8 139 | $EQU SMG$K_BUF_ENABLED 0 140 | $EQU SMG$K_MINUPD 1 141 | $EQU SMG$K_CLEAR_SCREEN 2 142 | $EQU SMG$K_NOTABS 3 143 | $EQU SMG$C_COLOR_UNKNOWN 0 144 | $EQU SMG$C_COLOR_WHITE 1 145 | $EQU SMG$C_COLOR_BLACK 2 146 | $EQU SMG$K_UNKNOWN 0 147 | $EQU SMG$K_VT05 1 148 | $EQU SMG$K_VT52 2 149 | $EQU SMG$K_VT100 3 150 | $EQU SMG$K_VTFOREIGN 4 151 | $EQU SMG$K_HARDCOPY 5 152 | $EQU SMG$M_BORDER 1 153 | $EQU SMG$M_TRUNC_ICON 2 154 | $EQU SMG$M_DISPLAY_CONTROLS 4 155 | $EQU SMG$M_UP 1 156 | $EQU SMG$M_DOWN 2 157 | $EQU SMG$M_RIGHT 4 158 | $EQU SMG$M_LEFT 8 159 | $EQU SMG$K_FIRST_PRIV_TYPE 191 160 | $EQU SMG$S_SMGDEF 32 161 | $EQU SMG$R_SMGDEF_BITS 0 162 | $EQU SMG$V_BOLD 0 163 | $EQU SMG$V_REVERSE 1 164 | $EQU SMG$V_BLINK 2 165 | $EQU SMG$V_UNDERLINE 3 166 | $EQU SMG$R_SMGMODE_BITS 0 167 | $EQU SMG$V_BUF_ENABLED 0 168 | $EQU SMG$V_MINUPD 1 169 | $EQU SMG$V_CLEAR_SCREEN 2 170 | $EQU SMG$V_NOTABS 3 171 | $EQU SMG$S_DISPLAY_ATTRIBUTES 1 172 | $EQU SMG$R_DISPLAY_ATTRIBUTES 0 173 | $EQU SMG$V_BORDER 0 174 | $EQU SMG$V_TRUNC_ICON 1 175 | $EQU SMG$V_DISPLAY_CONTROLS 2 176 | $EQU SMG$S_BAND_INFORMATION_TABLE 12 177 | $EQU SMG$R_BAND_INFORMATION_TABLE 0 178 | $EQU SMG$L_PASTEBOARD_ID 0 179 | $EQU SMG$L_ARG 4 180 | $EQU SMG$R_CHARACTER_OVERLAY 8 181 | $EQU SMG$B_CHARACTER 8 182 | $EQU SMG$L_CHARACTER 8 183 | $EQU SMG$S_PASTEBOARD_INFO_BLOCK 32 184 | $EQU SMG$R_PASTEBOARD_INFO_BLOCK 0 185 | $EQU SMG$L_DEVCHAR 0 186 | $EQU SMG$L_DEVDEPEND 4 187 | $EQU SMG$L_DEVDEPEND2 8 188 | $EQU SMG$B_DEVCLASS 12 189 | $EQU SMG$B_SMG_DEVTYPE 13 190 | $EQU SMG$B_PHY_DEVTYPE 14 191 | $EQU SMG$B_ROWS 15 192 | $EQU SMG$W_WIDTH 16 193 | $EQU SMG$B_COLOR 18 194 | $EQU SMG$B_PARITY 19 195 | $EQU SMG$W_SPEED 20 196 | $EQU SMG$W_FILL 22 197 | $EQU SMG$W_CURSOR_ROW 24 198 | $EQU SMG$W_CURSOR_COL 26 199 | $EQU SMG$L_CURSOR_DID 28 200 | $EQU SMG$S_SCROLL_DIRS 1 201 | $EQU SMG$R_SCROLL_DIRS 0 202 | $EQU SMG$V_UP 0 203 | $EQU SMG$V_DOWN 1 204 | $EQU SMG$V_RIGHT 2 205 | $EQU SMG$V_LEFT 3 206 | $DEFEND SMG,$GBL,DEF 207 | .ENDM 208 | -------------------------------------------------------------------------------- /env/sysdef.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] module sysdef; 2 | 3 | const dvi$_unit = 12; 4 | jpi$_username = 514; 5 | syi$_version = 4096; 6 | syi$_sid = 4097; 7 | syi$_node_swtype = 4309; 8 | syi$_node_swvers = 4310; 9 | syi$_node_hwtype = 4311; 10 | 11 | type $exit_block = record 12 | forward_link : unsigned; 13 | exit_handler : unsigned; 14 | arg_count : unsigned; 15 | condition : unsigned; 16 | param1 : [unsafe] unsigned; 17 | param2 : [unsafe] unsigned; 18 | param3 : [unsafe] unsigned; 19 | end; 20 | 21 | $item = record 22 | buffer_length : $uword; 23 | item_code : $uword; 24 | buffer_address : unsigned; 25 | return_length_address : unsigned; 26 | end; 27 | $item_list = packed array[1..10] of $item; 28 | 29 | $signal_arg_vector = packed array[0..255] of [unsafe] integer; 30 | $mech_arg_vector = packed array[0..4] of [unsafe] integer; 31 | 32 | var ss$_normal, 33 | ss$_created, 34 | ss$_msgnotfnd, 35 | ss$_continue, 36 | ss$_resignal, 37 | ss$_unwind, 38 | ss$_mbfull, 39 | ss$_msgnotfnd, 40 | rms$_eof, 41 | rms$_fnf, 42 | rms$_nmf: 43 | [external, value] unsigned; 44 | 45 | [asynchronous, external(sys$getsyiw)] function $getsyiw( 46 | efn : unsigned := %immed 0; 47 | var csidadr : unsigned := %immed 0; 48 | %stdescr nodename : packed array[$l1..$u1:integer] of char := %immed 0; 49 | var itmlst : $item_list; 50 | var iosb : $uquad := %immed 0; 51 | %immed astadr : unsigned := %immed 0; 52 | %immed astprm : unsigned := %immed 0) : unsigned; 53 | extern; 54 | 55 | [asynchronous, external(sys$getjpiw)] function $getjpiw( 56 | efn : unsigned := %immed 0; 57 | var pidadr : unsigned := %immed 0; 58 | %stdescr prcnam : packed array[$l1..$u1:integer] of char := %immed 0; 59 | var itmlst : $item_list; 60 | var iosb : $uquad := %immed 0; 61 | %immed astadr : unsigned := %immed 0; 62 | %immed astprm : unsigned := %immed 0) : unsigned; 63 | extern; 64 | 65 | [asynchronous, external(sys$putmsg)] procedure $putmsg( 66 | var msgvec : $signal_arg_vector; 67 | %immed [unbound] function message_routine( 68 | var message : $uquad) : unsigned := %immed 0; 69 | %stdescr facnam : packed array[$l1..$u1:integer] of char := %immed 0; 70 | %immed actprm : unsigned := %immed 0); 71 | extern; 72 | 73 | [asynchronous, external(sys$unwind)] procedure $unwind( 74 | var depadr : unsigned := %immed 0; 75 | %immed newpc : unsigned := %immed 0); 76 | extern; 77 | 78 | [asynchronous, external(sys$setrwm)] function $setrwm( 79 | %immed watflg : unsigned := %immed 0) : unsigned; 80 | extern; 81 | 82 | [asynchronous, external(sys$getdvi)] function $getdvi( 83 | efn : unsigned := %immed 0; 84 | %immed chan : $uword := %immed 0; 85 | %stdescr devnam : packed array[$l1..$u1:integer] 86 | of char := %immed 0; 87 | var item_list : $item_list; 88 | var iosb : $quad := %immed 0; 89 | %immed astadr : unsigned := %immed 0; 90 | %immed astprm : unsigned := %immed 0; 91 | %immed nullarg : unsigned := %immed 0) : unsigned; 92 | extern; 93 | 94 | [asynchronous, external(sys$exit)] function $exit( 95 | %immed code : unsigned) : unsigned; 96 | extern; 97 | 98 | [asynchronous, external(sys$crembx)] function $crembx( 99 | %immed prmflg : unsigned := %immed 0; 100 | var chan : [unsafe] $uword; 101 | %immed maxmsg : unsigned := %immed 0; 102 | %immed bufqio : unsigned := %immed 0; 103 | %immed promsk : unsigned := %immed 0; 104 | %immed acmode : unsigned := %immed 0; 105 | %stdescr lognam : packed array[$l1..$u1 : integer] 106 | of char := %immed 0) : unsigned; 107 | extern; 108 | 109 | [asynchronous, external(sys$delmbx)] function $delmbx( 110 | %immed chan : [unsafe] $uword) : unsigned; 111 | extern; 112 | 113 | [asynchronous, external(sys$dclexh)] function $dclexh( 114 | var desblk : $exit_block) : unsigned; 115 | extern; 116 | 117 | [asynchronous, external(sys$fao)] function $fao( 118 | %stdescr ctrstr : packed array[$l1..$u1:integer] of char; 119 | var outlen : $uword := %immed 0; 120 | %stdescr outbuf : packed array[$l2..$u2:integer] of char; 121 | %immed args : [list] unsigned) : unsigned; 122 | extern; 123 | 124 | [asynchronous, external(sys$getmsg)] function $getmsg( 125 | %immed msgid : unsigned; 126 | var msglen : $uword; 127 | %stdescr bufadr : packed array[$l1..$u1:integer] of char; 128 | %immed flags : unsigned := %immed 0; 129 | var outadr : unsigned := %immed 0) : unsigned; 130 | extern; 131 | 132 | [asynchronous, external(sys$gettim)] function $gettim( 133 | var timadr : $quad) : unsigned; 134 | extern; 135 | 136 | [asynchronous, external(sys$bintim)] function $bintim( 137 | %stdescr timbuf : packed array[$l1..$u1:integer] of char; 138 | var timadr : $quad) : unsigned; 139 | extern; 140 | 141 | [asynchronous, external(sys$asctim)] function $asctim( 142 | var timlen : $uword := %immed 0; 143 | %stdescr timbuf : packed array[$l1..$u1:integer] of char; 144 | %ref timadr : $quad; 145 | %immed cvtflg : unsigned := %immed 0) : unsigned; 146 | extern; 147 | 148 | [asynchronous, external(sys$schdwk)] function $schdwk( 149 | %ref pidadr : unsigned := %immed 0; 150 | %stdescr prcnam : packed array[$l1..$u1:integer] 151 | of char := %immed 0; 152 | daytim : $quad; 153 | reptim : $quad := %immed 0) : unsigned; 154 | extern; 155 | 156 | [asynchronous, external(sys$wake)] function $wake( 157 | %ref pidadr : unsigned := %immed 0; 158 | %stdescr prcnam : packed array[$l1..$u1:integer] 159 | of char := %immed 0) : unsigned; 160 | extern; 161 | 162 | [asynchronous, external(sys$hiber)] function $hiber : unsigned; 163 | extern; 164 | 165 | [asynchronous, external(sys$assign)] function $assign( 166 | %stdescr devnam : packed array[$l1..$u1:integer] of char; 167 | var chan : [unsafe] $uword; 168 | %immed acmode : unsigned := %immed 0; 169 | %stdescr mbxnam : packed array[$l2..$u2:integer] 170 | of char := %immed 0) : unsigned; 171 | extern; 172 | 173 | [asynchronous, external(sys$dassgn)] function $dassgn( 174 | %immed chan : [unsafe] $uword) : unsigned; 175 | extern; 176 | 177 | [asynchronous, external(sys$cancel)] function $cancel( 178 | %immed chan : [unsafe] $uword) : unsigned; 179 | extern; 180 | 181 | [asynchronous, external(sys$faol)] function $faol( 182 | %stdescr ctrstr : packed array[$l1..$u1:integer] of char; 183 | var outlen : $uword := %immed 0; 184 | %stdescr outbuf : packed array[$l2..$u2:integer] of char; 185 | %immed prmlst : unsigned) : unsigned; 186 | extern; 187 | end. 188 | -------------------------------------------------------------------------------- /zk/descrip.mms: -------------------------------------------------------------------------------- 1 | PENVFLAGS = /NOOBJECT/ENVIRONMENT=$(MMS$TARGET)/NOLIST 2 | 3 | .SUFFIXES : .MESSAGE .OBJECT .ROOM 4 | 5 | .MESSAGE.PEN : 6 | .IFDEF __MMK__ 7 | MCR EXE$:IFC COMPILE MESSAGE $(MMS$SOURCE) - 8 | /MACRO=NLA0:/DEFINITIONS=$(MMS$TARGET:.PEN=.PAS) 9 | $(PASCAL) $(PENVFLAGS) $(MMS$TARGET:.PEN=.PAS) 10 | .ELSE 11 | MCR EXE$:IFC COMPILE MESSAGE $(MMS$SOURCE) - 12 | /MACRO=NLA0:/DEFINITION=$(SUBST .PEN,.PAS,$(MMS$TARGET)) 13 | $(PASCAL) $(PENVFLAGS) $(SUBST .PEN,.PAS,$(MMS$TARGET)) 14 | .ENDIF 15 | 16 | .MESSAGE.OBJ : 17 | .IFDEF __MMK__ 18 | MCR EXE$:IFC COMPILE MESSAGE $(MMS$SOURCE) - 19 | /MACRO=$(MMS$TARGET:.OBJ=.MAR)/DEFINITIONS=NLA0: 20 | $(MACRO) $(MFLAGS) $(MMS$TARGET:.OBJ=.MAR) 21 | .ELSE 22 | MCR EXE$:IFC COMPILE MESSAGE $(MMS$SOURCE) - 23 | /MACRO=$(SUBST .OBJ,.MAR,$(MMS$TARGET))/DEFINITION=NLA0: 24 | $(MACRO) $(MFLAGS) $(SUBST .OBJ,.MAR,$(MMS$TARGET)) 25 | .ENDIF 26 | 27 | .OBJECT.PEN : 28 | .IFDEF __MMK__ 29 | MCR EXE$:IFC COMPILE OBJECT $(MMS$SOURCE) - 30 | /MACRO=NLA0:/DEFINITIONS=$(MMS$TARGET:.PEN=.PAS) 31 | $(PASCAL) $(PENVFLAGS) $(MMS$TARGET:.PEN=.PAS) 32 | .ELSE 33 | MCR EXE$:IFC COMPILE OBJECT $(MMS$SOURCE) - 34 | /MACRO=NLA0:/DEFINITION=$(SUBST .PEN,.PAS,$(MMS$TARGET)) 35 | $(PASCAL) $(PENVFLAGS) $(SUBST .PEN,.PAS,$(MMS$TARGET)) 36 | .ENDIF 37 | 38 | .OBJECT.OBJ : 39 | .IFDEF __MMK__ 40 | MCR EXE$:IFC COMPILE OBJECT $(MMS$SOURCE) - 41 | /MACRO=$(MMS$TARGET:.OBJ=.MAR)/DEFINITIONS=NLA0: 42 | $(MACRO) $(MFLAGS) $(MMS$TARGET:.OBJ=.MAR) 43 | .ELSE 44 | MCR EXE$:IFC COMPILE OBJECT $(MMS$SOURCE) - 45 | /MACRO=$(SUBST .OBJ,.MAR,$(MMS$TARGET))/DEFINITION=NLA0: 46 | $(MACRO) $(MFLAGS) $(SUBST .OBJ,.MAR,$(MMS$TARGET)) 47 | .ENDIF 48 | 49 | .ROOM.PEN : 50 | .IFDEF __MMK__ 51 | MCR EXE$:IFC COMPILE ROOM $(MMS$SOURCE) - 52 | /MACRO=NLA0:/DEFINITIONS=$(MMS$TARGET:.PEN=.PAS) 53 | $(PASCAL) $(PENVFLAGS) $(MMS$TARGET:.PEN=.PAS) 54 | .ELSE 55 | MCR EXE$:IFC COMPILE ROOM $(MMS$SOURCE) - 56 | /MACRO=NLA0:/DEFINITION=$(SUBST .PEN,.PAS,$(MMS$TARGET)) 57 | $(PASCAL) $(PENVFLAGS) $(SUBST .PEN,.PAS,$(MMS$TARGET)) 58 | .ENDIF 59 | 60 | .ROOM.OBJ : 61 | .IFDEF __MMK__ 62 | MCR EXE$:IFC COMPILE ROOM $(MMS$SOURCE) - 63 | /MACRO=$(MMS$TARGET:.OBJ=.MAR)/DEFINITIONS=NLA0: 64 | $(MACRO) $(MFLAGS) $(MMS$TARGET:.OBJ=.MAR) 65 | .ELSE 66 | MCR EXE$:IFC COMPILE ROOM $(MMS$SOURCE) - 67 | /MACRO=$(SUBST .OBJ,.MAR,$(MMS$TARGET))/DEFINITION=NLA0: 68 | $(MACRO) $(MFLAGS) $(SUBST .OBJ,.MAR,$(MMS$TARGET)) 69 | .ENDIF 70 | 71 | ALL : ENV_FILES MAIN 72 | @ CONTINUE 73 | 74 | ENV_FILES : LIB$:ZK$LEX_DEF.PEN LIB$:ZK$PARSE_DEF.PEN - 75 | LIB$:ZK$PARSE_OBJ_DEF.PEN LIB$:ZK$AST_DEF.PEN - 76 | LIB$:ZK$ACTION_DEF.PEN LIB$:ZK$ROUTINES_DEF.PEN - 77 | LIB$:ZK$WIZARD_DEF.PEN LIB$:ZK$OBJECT_DEF.PEN LIB$:ZK$INIT_DEF.PEN 78 | @ CONTINUE 79 | 80 | MAIN : EXE$:ZK$LINK_TIME.EXE EXE$:MAKE_VERSION.EXE EXE$:ZK$MAIN.EXE 81 | @ CONTINUE 82 | 83 | EXE$:ZK$LINK_TIME.EXE : OBJ$:ZK$LINK_TIME.OBJ 84 | LINK/EXECUTABLE=$(MMS$TARGET) $(MMS$SOURCE) 85 | 86 | EXE$:MAKE_VERSION.EXE : OBJ$:MAKE_VERSION.OBJ 87 | LINK/EXECUTABLE=$(MMS$TARGET) $(MMS$SOURCE) 88 | 89 | EXE$:ZK$MAIN.EXE : OBJ$:ZK$TEXT.OBJ OBJ$:ZK$DESC.OBJ OBJ$:ZK$OBJ.OBJ - 90 | OBJ$:ZK$ROOM.OBJ OBJ$:ZK$MAIN.OBJ OBJ$:ZK$PARSE.OBJ - 91 | OBJ$:ZK$LEX.OBJ OBJ$:ZK$AST.OBJ OBJ$:ZK$PARSE_OBJ.OBJ - 92 | OBJ$:ZK$ACTION.OBJ OBJ$:ZK$ROUTINES.OBJ OBJ$:ZK$ROOM.OBJ - 93 | OBJ$:ZK$WIZARD.OBJ OBJ$:ZK$OBJECT.OBJ OBJ$:ZK$INIT.OBJ - 94 | OBJ$:ZK$OBJ.OBJ OBJ$:ZK$TEXT.OBJ OBJ$:ZK$DESC.OBJ 95 | RUN EXE$:ZK$LINK_TIME 96 | .IFDEF VERSION 97 | PIPE ( WRITE SYS$OUTPUT "ZKVERSION.OPT" ; - 98 | WRITE SYS$OUTPUT "$(VERSION)" ) - 99 | | RUN EXE$:MAKE_VERSION 100 | LINK/EXECUTABLE=$(MMS$TARGET)/NOTRACEBACK ZKMAIN_LNK/OPT,- 101 | ZKLINK_TIME/OPT,ZKVERSION/OPT 102 | .ELSE 103 | PIPE ( WRITE SYS$OUTPUT "ZKVERSION.OPT" ; - 104 | WRITE SYS$OUTPUT "X0.0" ) - 105 | | RUN EXE$:MAKE_VERSION 106 | LINK/EXECUTABLE=$(MMS$TARGET) ZKMAIN_LNK/OPT,ZKLINK_TIME/OPT, - 107 | ZKVERSION/OPT 108 | .ENDIF 109 | 110 | OBJ$:ZK$MAIN.OBJ : ZKMAIN.PAS LIB$:ZK$DEF.PEN LIB$:ZK$CONTEXT_DEF.PEN - 111 | LIB$:ZK$PARSE_DEF.PEN LIB$:ZK$LEX_DEF.PEN - 112 | LIB$:ZK$AST_DEF.PEN LIB$:ZK$TEXT.PEN LIB$:ZK$INIT_DEF.PEN - 113 | LIB$:ZK$ACTION_DEF.PEN 114 | OBJ$:ZK$PARSE.OBJ : ZKPARSE.PAS LIB$:ZK$DEF.PEN LIB$:ZK$LEX_DEF.PEN - 115 | LIB$:ZK$PARSE_OBJ_DEF.PEN LIB$:ZK$CONTEXT_DEF.PEN 116 | OBJ$:ZK$PARSE_OBJ.OBJ : ZKPARSE_OBJ.PAS LIB$:ZK$DEF.PEN LIB$:ZK$OBJ.PEN - 117 | LIB$:ZK$TEXT.PEN LIB$:ZK$LEX_DEF.PEN 118 | OBJ$:ZK$LEX.OBJ : ZKLEX.PAS LIB$:ZK$DEF.PEN 119 | OBJ$:ZK$AST.OBJ : ZKAST.PAS LIB$:ZK$DEF.PEN LIB$:ZK$CONTEXT_DEF.PEN - 120 | LIB$:ZK$OBJ.PEN LIB$:ZK$TEXT.PEN LIB$:ZK$ACTION_DEF.PEN - 121 | LIB$:ZK$WIZARD_DEF.PEN LIB$:ZK$OBJECT_DEF.PEN - 122 | LIB$:ZK$ROUTINES_DEF.PEN LIB$:ZK$INIT_DEF.PEN 123 | OBJ$:ZK$ACTION.OBJ : ZKACTION.PAS LIB$:ZK$CONTEXT_DEF.PEN LIB$:ZK$ROOM.PEN - 124 | LIB$:ZK$OBJ.PEN LIB$:ZK$ROUTINES_DEF.PEN - 125 | LIB$:ZK$OBJECT_DEF.PEN LIB$:ZK$TEXT.PEN LIB$:ZK$DESC.PEN 126 | OBJ$:ZK$OBJECT.OBJ : ZKOBJECT.PAS LIB$:ZK$CONTEXT_DEF.PEN LIB$:ZK$ROOM.PEN - 127 | LIB$:ZK$OBJ.PEN LIB$:ZK$ROUTINES_DEF.PEN - 128 | LIB$:ZK$TEXT.PEN LIB$:ZK$ACTION_DEF.PEN 129 | OBJ$:ZK$ROUTINES.OBJ : ZKROUTINES.PAS LIB$:ZK$CONTEXT_DEF.PEN - 130 | LIB$:ZK$OBJ.PEN LIB$:ZK$ROOM.PEN LIB$:ZK$TEXT.PEN - 131 | LIB$:ZK$ROUTINES_DEF.PEN 132 | OBJ$:ZK$WIZARD.OBJ : ZKWIZARD.PAS LIB$:ZK$CONTEXT_DEF.PEN LIB$:ZK$OBJ.PEN - 133 | LIB$:ZK$ROOM.PEN LIB$:ZK$TEXT.PEN - 134 | LIB$:ZK$ACTION_DEF.PEN LIB$:ZK$ROUTINES_DEF.PEN 135 | OBJ$:ZK$INIT.OBJ : ZKINIT.PAS LIB$:ZK$CONTEXT_DEF.PEN LIB$:ZK$OBJ.PEN - 136 | LIB$:ZK$ROOM.PEN LIB$:ZK$ROUTINES_DEF.PEN - 137 | LIB$:ZK$TEXT.PEN LIB$:ZK$ACTION_DEF.PEN 138 | 139 | OBJ$:ZK$LINK_TIME.OBJ : ZKLINK_TIME.PAS 140 | OBJ$:MAKE_VERSION.OBJ : MAKE_VERSION.PAS 141 | 142 | LIB$:ZK$LEX_DEF.PEN : ZKLEX_DEF.PAS LIB$:ZK$DEF.PEN 143 | LIB$:ZK$PARSE_DEF.PEN : ZKPARSE_DEF.PAS LIB$:ZK$DEF.PEN LIB$:ZK$CONTEXT_DEF.PEN 144 | LIB$:ZK$PARSE_OBJ_DEF.PEN : ZKPARSE_OBJ_DEF.PAS LIB$:ZK$DEF.PEN 145 | LIB$:ZK$AST_DEF.PEN : ZKAST_DEF.PAS LIB$:ZK$DEF.PEN LIB$:ZK$CONTEXT_DEF.PEN 146 | LIB$:ZK$ACTION_DEF.PEN : ZKACTION_DEF.PAS LIB$:ZK$CONTEXT_DEF.PEN 147 | LIB$:ZK$OBJECT_DEF.PEN : ZKOBJECT_DEF.PAS LIB$:ZK$CONTEXT_DEF.PEN 148 | LIB$:ZK$ROUTINES_DEF.PEN : ZKROUTINES_DEF.PAS LIB$:ZK$CONTEXT_DEF.PEN 149 | LIB$:ZK$WIZARD_DEF.PEN : ZKWIZARD_DEF.PAS LIB$:ZK$CONTEXT_DEF.PEN 150 | LIB$:ZK$INIT_DEF.PEN : ZKINIT_DEF.PAS LIB$:ZK$CONTEXT_DEF.PEN 151 | LIB$:ZK$CONTEXT_DEF.PEN : ZKCONTEXT_DEF.PAS LIB$:ZK$OBJ.PEN LIB$:ZK$ROOM.PEN 152 | LIB$:ZK$DEF.PEN : ZKDEF.PAS 153 | 154 | OBJ$:ZK$DESC.OBJ : ZKDESC.MESSAGE 155 | OBJ$:ZK$OBJ.OBJ : ZKOBJ.OBJECT 156 | OBJ$:ZK$ROOM.OBJ : ZKROOM.ROOM 157 | OBJ$:ZK$TEXT.OBJ : ZKTEXT.MESSAGE 158 | 159 | LIB$:ZK$DESC.PEN : ZKDESC.MESSAGE 160 | LIB$:ZK$OBJ.PEN : ZKOBJ.OBJECT 161 | LIB$:ZK$ROOM.PEN : ZKROOM.ROOM 162 | LIB$:ZK$TEXT.PEN : ZKTEXT.MESSAGE 163 | 164 | CLEAN : 165 | @ CONTINUE 166 | -------------------------------------------------------------------------------- /env/smgdef.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef')] 2 | module smgdef; 3 | 4 | const smg$m_reverse = 2; 5 | smg$m_border = 1; 6 | smg$k_top = 0; 7 | smg$k_bottom = 1; 8 | smg$k_left = 2; 9 | smg$k_right = 3; 10 | 11 | io$m_noecho = 64; 12 | io$m_trmnoecho = 4096; 13 | 14 | var smg$_pasalrexi, 15 | smg$_no_mormsg, 16 | smg$_eof : [external, value] unsigned; 17 | 18 | [external(smg$create_pasteboard)] function $create_pasteboard( 19 | var new_pasteboard_id : unsigned; 20 | %stdescr output_device : packed array[$l1..$u1:integer] 21 | of char := %immed 0; 22 | var pb_rows : unsigned := %immed 0; 23 | var pb_columns : unsigned := %immed 0; 24 | preserve_screen_flag : unsigned := %immed 0) : unsigned; 25 | extern; 26 | 27 | [external(smg$delete_pasteboard)] function $delete_pasteboard( 28 | pasteboard_id : unsigned; 29 | clear_screen_flag : unsigned := %immed 0) : unsigned; 30 | extern; 31 | 32 | [external(smg$create_virtual_display)] function $create_virtual_display( 33 | num_rows : unsigned; 34 | new_columns : unsigned; 35 | var new_display_id : unsigned; 36 | display_attributes : unsigned := %immed 0; 37 | video_attributes : unsigned := %immed 0; 38 | char_set : unsigned := %immed 0) : unsigned; 39 | extern; 40 | 41 | [external(smg$delete_virtual_display)] function $delete_virtual_display( 42 | display_id : unsigned) : unsigned; 43 | extern; 44 | 45 | [external(smg$paste_virtual_display)] function $paste_virtual_display( 46 | display_id : unsigned; 47 | pasteboard_id : unsigned; 48 | pasteboard_row : unsigned; 49 | pasteboard_column : unsigned) : unsigned; 50 | extern; 51 | 52 | [external(smg$put_chars)] function $put_chars( 53 | display_id : unsigned; 54 | text_line : varying[$u1] of char; 55 | line_number : integer := %immed 0; 56 | column_number : integer := %immed 0; 57 | erase_flag : unsigned := %immed 0; 58 | rendition_set : unsigned := %immed 0; 59 | complement_set : unsigned := %immed 0; 60 | char_set : unsigned := %immed 0) : unsigned; 61 | extern; 62 | 63 | [external(smg$put_with_scroll)] function $put_with_scroll( 64 | display_id : unsigned; 65 | text_line : varying[$u1] of char := %immed 0; 66 | direction : unsigned := %immed 0; 67 | rendition_set : unsigned := %immed 0; 68 | complement_set : unsigned := %immed 0; 69 | wrap_flag : unsigned := %immed 0; 70 | char_set : unsigned := %immed 0) : unsigned; 71 | extern; 72 | 73 | [external(smg$put_with_scroll)] function $put_with_scroll_dx( 74 | display_id : unsigned; 75 | var text_line : $uquad := %immed 0; 76 | direction : unsigned := %immed 0; 77 | rendition_set : unsigned := %immed 0; 78 | complement_set : unsigned := %immed 0; 79 | wrap_flag : unsigned := %immed 0; 80 | char_set : unsigned := %immed 0) : unsigned; 81 | extern; 82 | 83 | [external(smg$label_border)] function $label_border( 84 | display_id : unsigned; 85 | label_text : varying[$u1] of char := %immed 0; 86 | position : unsigned := %immed 0; 87 | units : unsigned := %immed 0; 88 | rendition_set : unsigned := %immed 0; 89 | complement_set : unsigned := %immed 0; 90 | char_set : unsigned := %immed 0) : unsigned; 91 | extern; 92 | 93 | [external(smg$begin_pasteboard_update)] function $begin_pasteboard_update( 94 | pasteboard_id : unsigned) : unsigned; 95 | extern; 96 | 97 | [external(smg$end_pasteboard_update)] function $end_pasteboard_update( 98 | pasteboard_id : unsigned) : unsigned; 99 | extern; 100 | 101 | [external(smg$begin_display_update)] function $begin_display_update( 102 | display_id : unsigned) : unsigned; 103 | extern; 104 | 105 | [external(smg$end_display_update)] function $end_display_update( 106 | display_id : unsigned) : unsigned; 107 | extern; 108 | 109 | [external(smg$unpaste_virtual_display)] function $unpaste_virtual_display( 110 | display_id : unsigned; 111 | pasteboard_id : unsigned) : unsigned; 112 | extern; 113 | 114 | [external(smg$change_virtual_display)] function $change_virtual_display( 115 | display_id : unsigned; 116 | rows : unsigned; 117 | columns : unsigned; 118 | display_attributes : unsigned := %immed 0; 119 | video_attributes : unsigned := %immed 0; 120 | char_set : unsigned := %immed 0) : unsigned; 121 | extern; 122 | 123 | [external(smg$return_cursor_pos)] function $return_cursor_pos( 124 | display_id : unsigned; 125 | var rows : unsigned; 126 | var columns : unsigned) : unsigned; 127 | extern; 128 | 129 | [external(smg$set_cursor_abs)] function $set_cursor_abs( 130 | display_id : unsigned; 131 | rows : unsigned := %immed 0; 132 | columns : unsigned := %immed 0) : unsigned; 133 | extern; 134 | 135 | [external(smg$scroll_display_area)] function $scroll_display_area( 136 | display_id : unsigned; 137 | starting_row : unsigned := %immed 0; 138 | starting_column : unsigned := %immed 0; 139 | height : unsigned := %immed 0; 140 | width : unsigned := %immed 0; 141 | direction : unsigned := %immed 0; 142 | count : unsigned := %immed 0) : unsigned; 143 | extern; 144 | 145 | [external(smg$erase_chars)] function $erase_chars( 146 | display_id : unsigned; 147 | number_of_chars : integer; 148 | row_number : integer; 149 | column_number : integer) : unsigned; 150 | extern; 151 | 152 | [external(smg$create_virtual_keyboard)] function $create_virtual_keyboard( 153 | var keyboard_id : unsigned; 154 | filespec : varying[$u1] of char := %immed 0; 155 | default_filespec : varying[$u2] of char := %immed 0; 156 | var result_filespec : varying[$u3] of char := %immed 0) : unsigned; 157 | extern; 158 | 159 | [external(smg$delete_virtual_keyboard)] function $delete_virtual_keyboard( 160 | var keyboard_id : unsigned) : unsigned; 161 | extern; 162 | 163 | [external(smg$create_key_table)] function $create_key_table( 164 | var new_key_table_id : unsigned) : unsigned; 165 | extern; 166 | 167 | [external(smg$load_key_defs)] function $load_key_defs( 168 | var key_table_id : unsigned; 169 | var filespec : varying[$u1] of char; 170 | default_filespec : varying[$u2] of char := %immed 0; 171 | lognam_flag : unsigned := %immed 0) : unsigned; 172 | extern; 173 | 174 | [external(smg$read_composed_line)] function $read_composed_line( 175 | keyboard_id : unsigned; 176 | key_table_id : unsigned; 177 | var received_text : varying[$u1] of char; 178 | prompt_string : varying[$u2] of char := %immed 0; 179 | var received_string_length : $uword := %immed 0; 180 | display_id : unsigned := %immed 0) : unsigned; 181 | extern; 182 | 183 | [external(smg$read_string)] function $read_string( 184 | keyboard_id : unsigned; 185 | var received_text : varying[$u1] of char; 186 | prompt_string : varying[$u2] of char := %immed 0; 187 | max_length : unsigned := %immed 0; 188 | modifiers : unsigned := %immed 0; 189 | timeout : unsigned := %immed 0; 190 | terminator_set : packed array[$l3..$u3:integer] of char := %immed 0; 191 | var received_string_length : $uword := %immed 0; 192 | terminator_code : $uword := %immed 0; 193 | display_id : unsigned := %immed 0) : unsigned; 194 | extern; 195 | 196 | [external(smg$set_broadcast_trapping)] function $set_broadcast_trapping( 197 | pasteboard_id : unsigned; 198 | %immed [unbound, asynchronous] procedure ast_routine := %immed 0; 199 | %immed ast_argument : [unsafe] unsigned := %immed 0) : unsigned; 200 | extern; 201 | 202 | [external(smg$get_broadcast_message)] function $get_broadcast_message( 203 | pasteboard_id : unsigned; 204 | var message : varying[$u1] of char := %immed 0; 205 | var message_length : $uword := %immed 0) : unsigned; 206 | extern; 207 | end. 208 | -------------------------------------------------------------------------------- /env/vmsrtl.pas: -------------------------------------------------------------------------------- 1 | [inherit('types', 'dscdef')] module vmsrtl; 2 | 3 | type $item = record 4 | buffer_length : $uword; 5 | item_code : $uword; 6 | buffer_address : unsigned; 7 | return_length_address : unsigned; 8 | end; 9 | 10 | $item_list = array[1..10] of $item; 11 | 12 | $numeric_time = [word(7)] record 13 | year, 14 | month, 15 | day, 16 | hour, 17 | minute, 18 | second, 19 | hundredth : $uword; 20 | end; 21 | 22 | $brk_iosb = [quad] record 23 | condition : $uword; 24 | success : $uword; 25 | failed_timeout : $uword; 26 | failed_nobroad : $uword; 27 | end; 28 | 29 | [asynchronous, external(lib$signal)] function $signal( 30 | %immed condition : unsigned; 31 | %immed additonal : [list] unsigned) : unsigned; 32 | extern; 33 | 34 | [asynchronous, external(lib$get_foreign)] function $get_foreign( 35 | var get_str : varying[$u1] of char; 36 | user_prompt : varying[$u2] of char := %immed 0; 37 | var out_len : $uword := %immed 0; 38 | var force_prompt : unsigned := %immed 0) : unsigned; 39 | extern; 40 | 41 | [asynchronous, external(cli$dcl_parse)] function $dcl_parse( 42 | %stdescr command_string : packed array[$l1..$u1:integer] of char; 43 | var tables : unsigned) : unsigned; 44 | extern; 45 | 46 | [asynchronous, external(cli$present)] function $present( 47 | %stdescr name : packed array[$l1..$u1:integer] of char) : unsigned; 48 | extern; 49 | 50 | [asynchronous, external(cli$get_value)] function $get_value( 51 | %stdescr name : packed array[$l1..$u1:integer] of char; 52 | var ret_buf : varying[$u2] of char) : unsigned; 53 | extern; 54 | 55 | [asynchronous, external(sys$getjpiw)] function $getjpiw( 56 | %immed event_flag : $uword := %immed 0; 57 | var pidadr : unsigned := %immed 0; 58 | var prcnam : unsigned := %immed 0; 59 | var itmlst : $item_list; 60 | var iosb : unsigned := %immed 0; 61 | var astadr : unsigned := %immed 0; 62 | var astprm : unsigned := %immed 0) : unsigned; 63 | extern; 64 | 65 | [asynchronous, external(str$pos_extr)] function $extract( 66 | var dst : varying[$u1] of char; 67 | scr : varying[$u2] of char; 68 | %ref start : unsigned; 69 | %ref end_pos : unsigned) : unsigned; 70 | extern; 71 | 72 | [asynchronous, external(str$position)] function $position( 73 | src_str : varying[$u1] of char; 74 | sub_str : varying[$u2] of char; 75 | start_pos : unsigned := %immed 0) : unsigned; 76 | extern; 77 | 78 | [asynchronous, external(lib$sget1_dd)] function $sget1_dd( 79 | %ref len : $uword; 80 | var desc : $descriptor) : unsigned; 81 | extern; 82 | 83 | [asynchronous, external(lbr$output_help)] function $output_help( 84 | %immed [unbound] function output_routine : unsigned; 85 | var output_width : unsigned := %immed 0; 86 | help_keys : [class_s] packed array[$l1..$u1:integer] of char; 87 | help_file : [class_s] packed array[$l2..$u2:integer] of char; 88 | %ref flags : unsigned; 89 | %immed [unbound] function input_routine : unsigned) : unsigned; 90 | extern; 91 | 92 | [asynchronous, external, unbound] function lib$put_output : unsigned; 93 | extern; 94 | 95 | [asynchronous, external, unbound] function lib$get_input : unsigned; 96 | extern; 97 | 98 | [asynchronous, external(lib$get_input)] function $get_input( 99 | var get_str : varying[$u1] of char; 100 | prompt : varying[$u2] of char) : unsigned; 101 | extern; 102 | 103 | [asynchronous, external(sys$bintim)] function $bintim( 104 | %stdescr timbuf : packed array[$l1..$u1:integer] of char; 105 | var timadr : $uquad) : unsigned; 106 | extern; 107 | 108 | [asynchronous, external(sys$asctim)] function $asctim( 109 | var timlen : $uword := %immed 0; 110 | %stdescr timbuf : packed array[$l1..$u1:integer] of char; 111 | %ref timadr : $uquad; 112 | %immed cvtflg : unsigned := %immed 0) : unsigned; 113 | extern; 114 | 115 | [asynchronous, external(sys$numtim)] function $numtim( 116 | var timbuf : $numeric_time; 117 | var timadr : $uquad := %immed 0) : unsigned; 118 | extern; 119 | 120 | [asynchronous, external(sys$gettim)] function $gettim( 121 | var timadr : $uquad) : unsigned; 122 | extern; 123 | 124 | [asynchronous, external(lib$subx)] function $subx( 125 | var a : $uquad; 126 | var b : $uquad; 127 | var result : $uquad; 128 | %ref length : unsigned := %immed 0) : unsigned; 129 | extern; 130 | 131 | [asynchronous, external(lib$addx)] function $addx( 132 | var a : $uquad; 133 | var b : $uquad; 134 | var result : $uquad; 135 | %ref length : unsigned := %immed 0) : unsigned; 136 | extern; 137 | 138 | [asynchronous, external(lib$day)] function $day( 139 | var day_number : unsigned; 140 | var user_time : $uquad := %immed 0; 141 | var day_time : unsigned := %immed 0) : unsigned; 142 | extern; 143 | 144 | [asynchronous, external(sys$fao)] function $fao( 145 | %stdescr ctrstr : packed array[$l1..$u1:integer] of char; 146 | var outlen : $uword := %immed 0; 147 | %stdescr outbuf : packed array[$l2..$u2:integer] of char; 148 | %immed params : [list] unsigned) : unsigned; 149 | extern; 150 | 151 | [asynchronous, external(sys$creprc)] function $creprc( 152 | var pidadr : unsigned := %immed 0; 153 | %stdescr image : packed array[$l1..$u1:integer] of char; 154 | %stdescr sys_input : packed array[$l2..$u2:integer] 155 | of char := %immed 0; 156 | %stdescr sys_output : packed array[$l3..$u3:integer] 157 | of char := %immed 0; 158 | %stdescr sys_error : packed array[$l4..$u4:integer] 159 | of char := %immed 0; 160 | var prvadr : $uquad := %immed 0; 161 | %immed quota : unsigned := %immed 0; 162 | %stdescr prcnam : packed array[$l5..$u5:integer] 163 | of char := %immed 0; 164 | %immed baspri : unsigned := %immed 0; 165 | %immed uic : unsigned := %immed 0; 166 | %immed mbxunt : unsigned := %immed 0; 167 | %immed stsflg : unsigned := %immed 0) : unsigned; 168 | extern; 169 | 170 | [asynchronous, external(sys$hiber)] function $hiber : unsigned; 171 | extern; 172 | 173 | [asynchronous, external(sys$wake)] function $wake( 174 | pidadr : unsigned := %immed 0; 175 | %stdescr prcnam : packed array[$l1..$u1:integer] 176 | of char := %immed 0) : unsigned; 177 | extern; 178 | 179 | [asynchronous, external(sys$setimr)] function $setimr( 180 | %immed efn : unsigned := %immed 0; 181 | daytim : $uquad; 182 | %immed [asynchronous, unbound] procedure astadr( 183 | var i, r0, r1, pc, psl : integer) := %immed 0; 184 | %immed reqidt : unsigned := %immed 0) : unsigned; 185 | extern; 186 | 187 | [asynchronous, external(sys$brkthru)] function $brkthru( 188 | %immed efn : unsigned := %immed 0; 189 | %stdescr msgbuf : packed array[$l1..$u1:integer] of char; 190 | %stdescr sendto : packed array[$l2..$u2:integer] 191 | of char := %immed 0; 192 | %immed sndtyp : unsigned := %immed 0; 193 | var iosb : $brk_iosb; 194 | %immed carcon : unsigned := %immed 0; 195 | %immed flags : unsigned := %immed 0; 196 | %immed reqid : unsigned := %immed 0; 197 | %immed timout : unsigned := %immed 0; 198 | %immed [unbound, asynchronous] procedure astadr := %immed 0; 199 | %immed astprm : unsigned := %immed 0) : unsigned; 200 | extern; 201 | 202 | [asynchronous, external(lib$put_output)] function $put_output( 203 | msg_str: varying[$u1] of char) : unsigned; 204 | extern; 205 | 206 | [asynchronous, external(lib$put_output)] function $put_output_dx( 207 | desc : $descriptor) : unsigned; 208 | extern; 209 | 210 | [asynchronous, external(str$append)] function $append_dx_dx( 211 | var dst_str : $descriptor; 212 | var src_str : $descriptor) : unsigned; 213 | extern; 214 | [asynchronous, external(str$free1_dx)] function $free1_dx( 215 | var str : $descriptor) : unsigned; 216 | extern; 217 | end. 218 | 219 | -------------------------------------------------------------------------------- /ifc/ifcmessage.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:ifc$lex_def', 2 | 'lib$:ifc$def')] 3 | module ifc$message(output); 4 | 5 | const tab = chr(9); 6 | 7 | var prefix : varying[31] of char; 8 | def_file : text; 9 | macro_file : text; 10 | 11 | procedure parse_qualifier_list( 12 | followers : $symbol_set; 13 | var fao_count, attributes : unsigned); 14 | 15 | var symbol : $symbol_desc; 16 | starters : $symbol_set; 17 | mask : unsigned; 18 | begin 19 | fao_count:=0; 20 | starters:=[fslash_symbol]; 21 | $test_symbol(starters, followers); 22 | $get_symbol(symbol); 23 | while (symbol.token in starters) do 24 | begin 25 | $advance_symbol; 26 | $test_symbol([fao_keyword, bold_keyword, reverse_keyword, 27 | blink_keyword, underline_keyword], followers); 28 | $get_symbol(symbol); 29 | if (symbol.token = fao_keyword) then 30 | begin 31 | $advance_symbol; 32 | $test_symbol([equal_symbol], followers + 33 | [integer_constant]); 34 | $get_symbol(symbol); 35 | if (symbol.token = equal_symbol) then 36 | begin 37 | $advance_symbol; 38 | end; 39 | 40 | $test_symbol([integer_constant], followers); 41 | $get_symbol(symbol); 42 | if (symbol.token = integer_constant) then 43 | begin 44 | fao_count:=symbol.value; 45 | $advance_symbol; 46 | end; 47 | end 48 | else 49 | if (symbol.token in [bold_keyword, reverse_keyword, 50 | blink_keyword, underline_keyword]) then 51 | begin 52 | mask:=2**(ord(symbol.token)-ord(bold_keyword)); 53 | attributes:=uor(attributes, mask); 54 | $advance_symbol; 55 | end; 56 | 57 | $get_symbol(symbol); 58 | end; 59 | $sync_symbol(followers); 60 | end; 61 | 62 | procedure parse_text( 63 | followers : $symbol_set; 64 | default_attributes : unsigned); 65 | 66 | var symbol : $symbol_desc; 67 | starters : $symbol_set; 68 | attributes, fao_count, i : unsigned; 69 | message_text : $symbol_string; 70 | begin 71 | attributes:=default_attributes; 72 | fao_count:=0; 73 | 74 | message_text.length:=0; 75 | starters:=[text_string]; 76 | $test_symbol(starters, followers); 77 | $get_symbol(symbol); 78 | if (symbol.token in starters) then 79 | begin 80 | message_text:=symbol.string; 81 | $advance_symbol; 82 | 83 | $get_symbol(symbol); 84 | if (symbol.token = fslash_symbol) then 85 | parse_qualifier_list(followers, fao_count, attributes); 86 | 87 | writeln(macro_file, tab, '.byte ^X' + 88 | hex(message_text.length, 2, 2), 89 | tab, '; Message length'); 90 | writeln(macro_file, tab, '.byte ^X' + 91 | hex(fao_count, 2, 2), 92 | tab, '; FAO count'); 93 | writeln(macro_file, tab, '.byte ^X' + 94 | hex(attributes, 2, 2), 95 | tab, '; Attributes'); 96 | 97 | write(macro_file, tab, '.ascii '); 98 | for i:=1 to message_text.length do 99 | begin 100 | if ((i mod 10) = 0) then 101 | begin 102 | writeln(macro_file); 103 | write(macro_file, tab, '.ascii '); 104 | end; 105 | 106 | write(macro_file, '<^X' + hex(message_text[i], 2) + '>'); 107 | end; 108 | writeln(macro_file); 109 | 110 | $sync_symbol(followers); 111 | end; 112 | end; 113 | 114 | procedure parse_text_seq( 115 | followers : $symbol_set; 116 | var attributes : unsigned); 117 | 118 | var symbol : $symbol_desc; 119 | starters : $symbol_set; 120 | begin 121 | starters:=[text_string]; 122 | $test_symbol(starters, followers); 123 | $get_symbol(symbol); 124 | if (symbol.token in starters) then 125 | begin 126 | parse_text(followers + [text_string], attributes); 127 | 128 | $get_symbol(symbol); 129 | while (symbol.token in starters) do 130 | begin 131 | parse_text(followers + [text_string], attributes); 132 | $get_symbol(symbol); 133 | end; 134 | 135 | $sync_symbol(followers); 136 | end; 137 | end; 138 | 139 | procedure parse_message(followers : $symbol_set; first : boolean); 140 | var symbol : $symbol_desc; 141 | starters : $symbol_set; 142 | default_attributes, fao_count : unsigned; 143 | begin 144 | default_attributes:=0; 145 | starters:=[message_keyword]; 146 | $test_symbol(starters, followers); 147 | $get_symbol(symbol); 148 | if (symbol.token in starters) then 149 | begin 150 | $advance_symbol; 151 | 152 | $test_symbol([identifier], followers + 153 | [fslash_symbol, text_string]); 154 | $get_symbol(symbol); 155 | if (symbol.token = identifier) then 156 | begin 157 | writeln(macro_file, tab, '.align quad'); 158 | writeln(macro_file, prefix + symbol.string + '::'); 159 | if (first) then 160 | write(def_file,'var', tab, prefix, 161 | symbol.string) 162 | else 163 | begin 164 | writeln(def_file,','); 165 | write(def_file,tab,prefix,symbol.string); 166 | end; 167 | $advance_symbol; 168 | end; 169 | 170 | $get_symbol(symbol); 171 | if (symbol.token = fslash_symbol) then 172 | parse_qualifier_list(followers + [text_string], 173 | fao_count, default_attributes); 174 | 175 | parse_text_seq(followers, default_attributes); 176 | 177 | writeln(macro_file, tab, '.word ^X0000', tab, '; Terminator'); 178 | 179 | $sync_symbol(followers); 180 | end; 181 | end; 182 | 183 | procedure parse_message_seq(followers : $symbol_set); 184 | var symbol : $symbol_desc; 185 | starters : $symbol_set; 186 | begin 187 | starters:=[message_keyword]; 188 | $test_symbol(starters, followers); 189 | $get_symbol(symbol); 190 | if (symbol.token in starters) then 191 | begin 192 | parse_message(followers + [message_keyword], true); 193 | 194 | $get_symbol(symbol); 195 | while (symbol.token in starters) do 196 | begin 197 | parse_message(followers + [message_keyword], false); 198 | $get_symbol(symbol); 199 | end; 200 | 201 | $sync_symbol(followers); 202 | end; 203 | end; 204 | 205 | procedure parse_message_file(followers : $symbol_set); 206 | var symbol : $symbol_desc; 207 | starters : $symbol_set; 208 | module_version : varying[31] of char; 209 | begin 210 | prefix:='NONAME'; 211 | module_version:='V01.00-00'; 212 | 213 | $advance_symbol; 214 | starters:=[prefix_keyword]; 215 | $test_symbol(starters, followers); 216 | $get_symbol(symbol); 217 | if (symbol.token in starters) then 218 | begin 219 | $advance_symbol; 220 | 221 | $test_symbol([identifier], followers + 222 | [ident_keyword, message_keyword]); 223 | $get_symbol(symbol); 224 | if (symbol.token=identifier) then 225 | begin 226 | prefix:=symbol.string; 227 | $advance_symbol; 228 | end; 229 | 230 | $get_symbol(symbol); 231 | if (symbol.token=ident_keyword) then 232 | begin 233 | $advance_symbol; 234 | $test_symbol([text_string], followers + 235 | [message_keyword]); 236 | $get_symbol(symbol); 237 | if (symbol.token=text_string) then 238 | begin 239 | module_version:=symbol.string; 240 | $advance_symbol; 241 | end; 242 | end; 243 | 244 | writeln(def_file, 'module ',prefix,'DEF;'); 245 | writeln(def_file); 246 | 247 | parse_message_seq(followers + [end_keyword]); 248 | 249 | writeln(def_file,' : [external, value] unsigned;'); 250 | writeln(def_file); 251 | writeln(def_file,'end.'); 252 | 253 | $test_symbol([end_keyword], followers); 254 | $get_symbol(symbol); 255 | if (symbol.token = end_keyword) then 256 | begin 257 | $advance_symbol; 258 | end; 259 | 260 | $sync_symbol(followers); 261 | end; 262 | end; 263 | 264 | [global] procedure ifc$compile_messages( 265 | message_filename : varying[$u1] of char; 266 | macro_filename : varying[$u2] of char; 267 | def_filename : varying[$u3] of char); 268 | begin 269 | $open_lex(message_filename); $reset_lex(true); 270 | 271 | open(def_file, def_filename, history:=new); 272 | rewrite(def_file); 273 | 274 | open(macro_file, macro_filename, history:=new); 275 | rewrite(macro_file); 276 | 277 | writeln(macro_file, '.psect ZZZ$IFC$DATA noexe,quad,pic,rel,gbl,shr,rd'); 278 | 279 | parse_message_file([end_of_file]); 280 | 281 | $close_lex; 282 | close(def_file); 283 | writeln(macro_file, tab, '.end'); 284 | close(macro_file); 285 | end; 286 | 287 | end. 288 | -------------------------------------------------------------------------------- /env/syidef.mar: -------------------------------------------------------------------------------- 1 | .MACRO $SYIDEF,$GBL 2 | $DEFINI SYI,$GBL 3 | $EQU SYI$C_EXETYPE 1 4 | $EQU SYI$C_FLDTYPE 2 5 | $EQU SYI$C_RSDTYPE 3 6 | $EQU SYI$_VERSION 4096 7 | $EQU SYI$_SID 4097 8 | $EQU SYI$_PFCDEFAULT 4098 9 | $EQU SYI$_PAGTBLPFC 4099 10 | $EQU SYI$_SYSPFC 4100 11 | $EQU SYI$_KFILSTCNT 4101 12 | $EQU SYI$_GBLSECTIONS 4102 13 | $EQU SYI$_GBLPAGES 4103 14 | $EQU SYI$_GBLPAGFIL 4104 15 | $EQU SYI$_MAXPROCESSCNT 4105 16 | $EQU SYI$_PIXSCAN 4106 17 | $EQU SYI$_PROCSECTCNT 4107 18 | $EQU SYI$_MINWSCNT 4108 19 | $EQU SYI$_PAGFILCNT 4109 20 | $EQU SYI$_SWPFILCNT 4110 21 | $EQU SYI$_SYSMWCNT 4111 22 | $EQU SYI$_INTSTKPAGES 4112 23 | $EQU SYI$_DLCKEXTRASTK 4113 24 | $EQU SYI$_BALSETCNT 4114 25 | $EQU SYI$_IRPCOUNT 4115 26 | $EQU SYI$_IRPCOUNTV 4116 27 | $EQU SYI$_WSMAX 4117 28 | $EQU SYI$_NPAGEDYN 4118 29 | $EQU SYI$_NPAGEVIR 4119 30 | $EQU SYI$_PAGEDYN 4120 31 | $EQU SYI$_VIRTUALPAGECNT 4121 32 | $EQU SYI$_SPTREQ 4122 33 | $EQU SYI$_EXUSRSTK 4123 34 | $EQU SYI$_LRPCOUNT 4124 35 | $EQU SYI$_LRPCOUNTV 4125 36 | $EQU SYI$_LRPSIZE 4126 37 | $EQU SYI$_LRPMIN 4127 38 | $EQU SYI$_SRPCOUNT 4128 39 | $EQU SYI$_SRPCOUNTV 4129 40 | $EQU SYI$_SRPSIZE 4130 41 | $EQU SYI$_SRPMIN 4131 42 | $EQU SYI$_CHANNELCNT 4132 43 | $EQU SYI$_PIOPAGES 4133 44 | $EQU SYI$_CTLPAGES 4134 45 | $EQU SYI$_CTLIMGLIM 4135 46 | $EQU SYI$_IMGIOCNT 4136 47 | $EQU SYI$_QUANTUM 4137 48 | $EQU SYI$_MPW_WRTCLUSTER 4138 49 | $EQU SYI$_MPW_HILIMIT 4139 50 | $EQU SYI$_MPW_LOLIMIT 4140 51 | $EQU SYI$_MPW_PRIO 4141 52 | $EQU SYI$_SWP_PRIO 4142 53 | $EQU SYI$_MPW_THRESH 4143 54 | $EQU SYI$_MPW_WAITLIMIT 4144 55 | $EQU SYI$_TBSKIPWSL 4145 56 | $EQU SYI$_PHYSICALPAGES 4146 57 | $EQU SYI$_PFRATL 4147 58 | $EQU SYI$_PFRATH 4148 59 | $EQU SYI$_PFRATS 4149 60 | $EQU SYI$_WSINC 4150 61 | $EQU SYI$_WSDEC 4151 62 | $EQU SYI$_AWSMIN 4152 63 | $EQU SYI$_AWSTIME 4153 64 | $EQU SYI$_SWPRATE 4154 65 | $EQU SYI$_SWPOUTPGCNT 4155 66 | $EQU SYI$_SWPALLOCINC 4156 67 | $EQU SYI$_IOTA 4157 68 | $EQU SYI$_LONGWAIT 4158 69 | $EQU SYI$_SWPFAIL 4159 70 | $EQU SYI$_VMSD1 4160 71 | $EQU SYI$_VMSD2 4161 72 | $EQU SYI$_VMSD3 4162 73 | $EQU SYI$_VMSD4 4163 74 | $EQU SYI$_VMS5 4164 75 | $EQU SYI$_VMS6 4165 76 | $EQU SYI$_VMS7 4166 77 | $EQU SYI$_VMS8 4167 78 | $EQU SYI$_USERD1 4168 79 | $EQU SYI$_USERD2 4169 80 | $EQU SYI$_USER3 4170 81 | $EQU SYI$_USER4 4171 82 | $EQU SYI$_EXTRACPU 4172 83 | $EQU SYI$_MAXSYSGROUP 4173 84 | $EQU SYI$_MVTIMEOUT 4174 85 | $EQU SYI$_MAXBUF 4175 86 | $EQU SYI$_DEFMBXBUFQUO 4176 87 | $EQU SYI$_DEFMBXMXMSG 4177 88 | $EQU SYI$_DEFMBXNUMMSG 4178 89 | $EQU SYI$_FREELIM 4179 90 | $EQU SYI$_FREEGOAL 4180 91 | $EQU SYI$_GROWLIM 4181 92 | $EQU SYI$_BORROWLIM 4182 93 | $EQU SYI$_LOCKRETRY 4183 94 | $EQU SYI$_XFMAXRATE 4184 95 | $EQU SYI$_LAMAPREGS 4185 96 | $EQU SYI$_REALTIME_SPTS 4186 97 | $EQU SYI$_CLISYMTBL 4187 98 | $EQU SYI$_LOCKIDTBL 4188 99 | $EQU SYI$_RESHASHTBL 4189 100 | $EQU SYI$_DEADLOCK_WAIT 4190 101 | $EQU SYI$_SCSBUFFCNT 4191 102 | $EQU SYI$_SCSCONNCNT 4192 103 | $EQU SYI$_SCSRESPCNT 4193 104 | $EQU SYI$_SCSMAXDG 4194 105 | $EQU SYI$_SCSMAXMSG 4195 106 | $EQU SYI$_SCSFLOWCUSH 4196 107 | $EQU SYI$_SCSSYSTEMID 4197 108 | $EQU SYI$_SCSSYSTEMIDH 4198 109 | $EQU SYI$_SCSNODE 4199 110 | $EQU SYI$_PRCPOLINTERVAL 4201 111 | $EQU SYI$_PASTIMOUT 4202 112 | $EQU SYI$_PASTDGBUF 4203 113 | $EQU SYI$_PANUMPOLL 4204 114 | $EQU SYI$_PAPOLLINTERVAL 4205 115 | $EQU SYI$_PAPOOLINTERVAL 4206 116 | $EQU SYI$_TIMEPROMPTWAIT 4207 117 | $EQU SYI$_UDABURSTRATE 4208 118 | $EQU SYI$_LNMSHASHTBL 4209 119 | $EQU SYI$_LNMPHASHTBL 4210 120 | $EQU SYI$_TTY_SCANDELTA 4211 121 | $EQU SYI$_TTY_DIALTYPE 4212 122 | $EQU SYI$_TTY_SPEED 4213 123 | $EQU SYI$_TTY_RSPEED 4214 124 | $EQU SYI$_TTY_PARITY 4215 125 | $EQU SYI$_TTY_BUF 4216 126 | $EQU SYI$_TTY_DEFCHAR 4217 127 | $EQU SYI$_TTY_DEFCHAR2 4218 128 | $EQU SYI$_TTY_TYPAHDSZ 4219 129 | $EQU SYI$_TTY_ALTYPAHD 4220 130 | $EQU SYI$_TTY_ALTALARM 4221 131 | $EQU SYI$_TTY_DMASIZE 4222 132 | $EQU SYI$_TTY_PROT 4223 133 | $EQU SYI$_TTY_OWNER 4224 134 | $EQU SYI$_TTY_CLASSNAME 4225 135 | $EQU SYI$_TTY_SILOTIME 4226 136 | $EQU SYI$_TTY_DEFPORT 4227 137 | $EQU SYI$_RMS_DFMBC 4228 138 | $EQU SYI$_RMS_DFMBFSDK 4229 139 | $EQU SYI$_RMS_DFMBFSMT 4230 140 | $EQU SYI$_RMS_DFMBFSUR 4231 141 | $EQU SYI$_RMS_DFMBFREL 4232 142 | $EQU SYI$_RMS_DFMBFIDX 4233 143 | $EQU SYI$_RMS_DFMBFHSH 4234 144 | $EQU SYI$_RMS_PROLOGUE 4235 145 | $EQU SYI$_RMS_EXTEND_SIZE 4236 146 | $EQU SYI$_RMS_FILEPROT 4237 147 | $EQU SYI$_PQL_DASTLM 4238 148 | $EQU SYI$_PQL_MASTLM 4239 149 | $EQU SYI$_PQL_DBIOLM 4240 150 | $EQU SYI$_PQL_MBIOLM 4241 151 | $EQU SYI$_PQL_DBYTLM 4242 152 | $EQU SYI$_PQL_MBYTLM 4243 153 | $EQU SYI$_PQL_DCPULM 4244 154 | $EQU SYI$_PQL_MCPULM 4245 155 | $EQU SYI$_PQL_DDIOLM 4246 156 | $EQU SYI$_PQL_MDIOLM 4247 157 | $EQU SYI$_PQL_DFILLM 4248 158 | $EQU SYI$_PQL_MFILLM 4249 159 | $EQU SYI$_PQL_DPGFLQUOTA 4250 160 | $EQU SYI$_PQL_MPGFLQUOTA 4251 161 | $EQU SYI$_PQL_DPRCLM 4252 162 | $EQU SYI$_PQL_MPRCLM 4253 163 | $EQU SYI$_PQL_DTQELM 4254 164 | $EQU SYI$_PQL_MTQELM 4255 165 | $EQU SYI$_PQL_DWSDEFAULT 4256 166 | $EQU SYI$_PQL_MWSDEFAULT 4257 167 | $EQU SYI$_PQL_DWSQUOTA 4258 168 | $EQU SYI$_PQL_MWSQUOTA 4259 169 | $EQU SYI$_PQL_DWSEXTENT 4260 170 | $EQU SYI$_PQL_MWSEXTENT 4261 171 | $EQU SYI$_PQL_DENQLM 4262 172 | $EQU SYI$_PQL_MENQLM 4263 173 | $EQU SYI$_ACP_MAPCACHE 4264 174 | $EQU SYI$_ACP_HDRCACHE 4265 175 | $EQU SYI$_ACP_DIRCACHE 4266 176 | $EQU SYI$_ACP_WORKSET 4267 177 | $EQU SYI$_ACP_FIDCACHE 4268 178 | $EQU SYI$_ACP_EXTCACHE 4269 179 | $EQU SYI$_ACP_EXTLIMIT 4270 180 | $EQU SYI$_ACP_QUOCACHE 4271 181 | $EQU SYI$_ACP_SYSACC 4272 182 | $EQU SYI$_ACP_MAXREAD 4273 183 | $EQU SYI$_ACP_WINDOW 4274 184 | $EQU SYI$_ACP_WRITEBACK 4275 185 | $EQU SYI$_ACP_DATACHECK 4276 186 | $EQU SYI$_ACP_BASEPRIO 4277 187 | $EQU SYI$_ACP_SWAPFLGS 4278 188 | $EQU SYI$_DEFPRI 4279 189 | $EQU SYI$_IJOBLIM 4280 190 | $EQU SYI$_BJOBLIM 4281 191 | $EQU SYI$_NJOBLIM 4282 192 | $EQU SYI$_RJOBLIM 4283 193 | $EQU SYI$_QUORUM 4284 194 | $EQU SYI$_VOTES 4285 195 | $EQU SYI$_RECNXINTERVAL 4286 196 | $EQU SYI$_BOOTTIME 4287 197 | $EQU SYI$_LOCKIDTBL_MAX 4288 198 | $EQU SYI$_TAILORED 4289 199 | $EQU SYI$_STARTUP_P1 4290 200 | $EQU SYI$_STARTUP_P2 4291 201 | $EQU SYI$_STARTUP_P3 4292 202 | $EQU SYI$_STARTUP_P4 4293 203 | $EQU SYI$_STARTUP_P5 4294 204 | $EQU SYI$_STARTUP_P6 4295 205 | $EQU SYI$_STARTUP_P7 4296 206 | $EQU SYI$_STARTUP_P8 4297 207 | $EQU SYI$_CLUSTER_NODES 4298 208 | $EQU SYI$_CLUSTER_VOTES 4299 209 | $EQU SYI$_CLUSTER_QUORUM 4300 210 | $EQU SYI$_CLUSTER_FSYSID 4301 211 | $EQU SYI$_CLUSTER_FTIME 4302 212 | $EQU SYI$_CLUSTER_MEMBER 4303 213 | $EQU SYI$_NODE_CSID 4304 214 | $EQU SYI$_NODE_VOTES 4305 215 | $EQU SYI$_NODE_QUORUM 4306 216 | $EQU SYI$_NODE_SYSTEMID 4307 217 | $EQU SYI$_NODE_SWINCARN 4308 218 | $EQU SYI$_NODE_SWTYPE 4309 219 | $EQU SYI$_NODE_SWVERS 4310 220 | $EQU SYI$_NODE_HWTYPE 4311 221 | $EQU SYI$_NODE_HWVERS 4312 222 | $EQU SYI$_NODENAME 4313 223 | $EQU SYI$_ARCHFLAG 4314 224 | $EQU SYI$_SCS_EXISTS 4315 225 | $EQU SYI$_DISK_QUORUM 4316 226 | $EQU SYI$_PAMAXPORT 4320 227 | $EQU SYI$_PASANITY 4321 228 | $EQU SYI$_DEFQUEPRI 4322 229 | $EQU SYI$_MAXQUEPRI 4323 230 | $EQU SYI$_QDSKINTERVAL 4324 231 | $EQU SYI$_ALLOCLASS 4325 232 | $EQU SYI$_LGI_RETRY_LIM 4326 233 | $EQU SYI$_LGI_RETRY_TMO 4327 234 | $EQU SYI$_LGI_BRK_LIM 4328 235 | $EQU SYI$_LGI_BRK_TMO 4329 236 | $EQU SYI$_LGI_HID_TIM 4330 237 | $EQU SYI$_LGI_PWD_TMO 4331 238 | $EQU SYI$_PQL_DJTQUOTA 4332 239 | $EQU SYI$_PQL_MJTQUOTA 4333 240 | $EQU SYI$_VAXCLUSTER 4334 241 | $EQU SYI$_LOCKDIRWT 4335 242 | $EQU SYI$_QDSKVOTES 4336 243 | $EQU SYI$_DORMANTWAIT 4337 244 | $EQU SYI$_PAGEFILE_PAGE 4338 245 | $EQU SYI$_SWAPFILE_PAGE 4339 246 | $EQU SYI$_PAGEFILE_FREE 4340 247 | $EQU SYI$_SWAPFILE_FREE 4341 248 | $EQU SYI$_TTY_TIMEOUT 4342 249 | $EQU SYI$_TTY_AUTOCHAR 4343 250 | $EQU SYI$_PANOPOLL 4344 251 | $EQU SYI$_PE1 4345 252 | $EQU SYI$_PE2 4346 253 | $EQU SYI$_PE3 4347 254 | $EQU SYI$_PE4 4348 255 | $EQU SYI$_PE5 4349 256 | $EQU SYI$_PE6 4350 257 | $EQU SYI$_RMS_GBLBUFQUO 4351 258 | $EQU SYI$_RMS_DFNBC 4352 259 | $EQU SYI$_ACP_DINDXCACHE 4353 260 | $EQU SYI$_LASTEXE 4354 261 | ; ) equals SYI$C_EXETYPE@12 increment 1 prefix SYI tag $ 262 | $EQU SYI$_CPU 8192 263 | $EQU SYI$_BUGREBOOT 8193 264 | $EQU SYI$_CRDENABLE 8194 265 | $EQU SYI$_DUMPBUG 8195 266 | $EQU SYI$_BUGCHECKFATAL 8196 267 | $EQU SYI$_ACP_MULTIPLE 8197 268 | $EQU SYI$_NOAUTOCONFIG 8198 269 | $EQU SYI$_NOCLOCK 8199 270 | $EQU SYI$_NOCLUSTER 8200 271 | $EQU SYI$_POOLPAGING 8201 272 | $EQU SYI$_SBIERRENABLE 8202 273 | $EQU SYI$_SETTIME 8203 274 | $EQU SYI$_ACP_SHARE 8204 275 | $EQU SYI$_SYSPAGING 8205 276 | $EQU SYI$_UAFALTERNATE 8206 277 | $EQU SYI$_WRITABLESYS 8207 278 | $EQU SYI$_RESALLOC 8208 279 | $EQU SYI$_SSINHIBIT 8209 280 | $EQU SYI$_CONCEAL_DEVICES 8210 281 | $EQU SYI$_SAVEDUMP 8211 282 | $EQU SYI$_MOUNTMSG 8212 283 | $EQU SYI$_DISMOUMSG 8213 284 | $EQU SYI$_LOADERAPT 8214 285 | $EQU SYI$_LOADCHKPRT 8215 286 | $EQU SYI$_CJFLOAD 8217 287 | $EQU SYI$_CJFSYSRUJ 8218 288 | $EQU SYI$_NODE_AREA 8219 289 | $EQU SYI$_NODE_NUMBER 8220 290 | $EQU SYI$_CLASS_PROT 8221 291 | $EQU SYI$_CHARACTER_EMULATED 8222 292 | $EQU SYI$_DECIMAL_EMULATED 8223 293 | $EQU SYI$_D_FLOAT_EMULATED 8224 294 | $EQU SYI$_F_FLOAT_EMULATED 8225 295 | $EQU SYI$_G_FLOAT_EMULATED 8226 296 | $EQU SYI$_H_FLOAT_EMULATED 8227 297 | $EQU SYI$_LOADMTACCESS 8228 298 | $EQU SYI$_ACP_XQP_RES 8229 299 | $EQU SYI$_WRITESYSPARAMS 8230 300 | $EQU SYI$_LGI_BRK_TERM 8231 301 | $EQU SYI$_LGI_BRK_DISUSER 8232 302 | $EQU SYI$_ACP_REBLDSYSD 8233 303 | $EQU SYI$_WS_OPA0 8234 304 | $EQU SYI$_LASTFLD 8235 305 | ; ) equals SYI$C_FLDTYPE@12 increment 1 prefix SYI tag $ 306 | $EQU SYI$C_SFWTYPE 1 307 | $EQU SYI$C_HDWTYPE 2 308 | $EQU SYI$C_LISTEND 0 309 | $EQU SYI$_OLDVERSION 256 310 | $EQU SYI$_LASTSFW 257 311 | ; ) equals SYI$C_SFWTYPE@8 increment 1 prefix SYI tag $ 312 | $EQU SYI$_OLDCPU 512 313 | $EQU SYI$_OLDSID 513 314 | $EQU SYI$_LASTHDW 514 315 | ; ) equals SYI$C_HDWTYPE@8 increment 1 prefix SYI tag $ 316 | $DEFEND SYI,$GBL,DEF 317 | .ENDM 318 | -------------------------------------------------------------------------------- /env/iodef.mar: -------------------------------------------------------------------------------- 1 | .MACRO $IODEF,$GBL 2 | $DEFINI IO,$GBL 3 | $EQU IO$_NOP 0 4 | $EQU IO$_UNLOAD 1 5 | $EQU IO$_LOADMCODE 1 6 | $EQU IO$_SEEK 2 7 | $EQU IO$_SPACEFILE 2 8 | $EQU IO$_STARTMPROC 2 9 | $EQU IO$_RECAL 3 10 | $EQU IO$_STOP 3 11 | $EQU IO$_SNDJNLMSG 3 12 | $EQU IO$_DRVCLR 4 13 | $EQU IO$_INITIALIZE 4 14 | $EQU IO$_RELEASE 5 15 | $EQU IO$_SETCLOCKP 5 16 | $EQU IO$_OFFSET 6 17 | $EQU IO$_ERASETAPE 6 18 | $EQU IO$_STARTDATAP 6 19 | $EQU IO$_RETCENTER 7 20 | $EQU IO$_QSTOP 7 21 | $EQU IO$_PACKACK 8 22 | $EQU IO$_SEARCH 9 23 | $EQU IO$_SPACERECORD 9 24 | $EQU IO$_READRCT 9 25 | $EQU IO$_WRITECHECK 10 26 | $EQU IO$_WRITEPBLK 11 27 | $EQU IO$_READPBLK 12 28 | $EQU IO$_WRITEHEAD 13 29 | $EQU IO$_JNLDRVREQ 13 30 | $EQU IO$_RDSTATS 13 31 | $EQU IO$_CRESHAD 13 32 | $EQU IO$_READHEAD 14 33 | $EQU IO$_ADDSHAD 14 34 | $EQU IO$_WRITETRACKD 15 35 | $EQU IO$_COPYSHAD 15 36 | $EQU IO$_READTRACKD 16 37 | $EQU IO$_REMSHAD 16 38 | $EQU IO$_AVAILABLE 17 39 | $EQU IO$_SETPRFPATH 18 40 | $EQU IO$_DSE 21 41 | $EQU IO$_REREADN 22 42 | $EQU IO$_REREADP 23 43 | $EQU IO$_WRITERET 24 44 | $EQU IO$_WRITECHECKH 24 45 | $EQU IO$_READPRESET 25 46 | $EQU IO$_STARTSPNDL 25 47 | $EQU IO$_SETCHAR 26 48 | $EQU IO$_SENSECHAR 27 49 | $EQU IO$_WRITEMARK 28 50 | $EQU IO$_WRTTMKR 29 51 | $EQU IO$_DIAGNOSE 29 52 | $EQU IO$_FLUSH 29 53 | $EQU IO$_FORMAT 30 54 | $EQU IO$_CLEAN 30 55 | $EQU IO$_PHYSICAL 31 56 | $EQU IO$_WRITELBLK 32 57 | $EQU IO$_READLBLK 33 58 | $EQU IO$_REWINDOFF 34 59 | $EQU IO$_SETMODE 35 60 | $EQU IO$_REWIND 36 61 | $EQU IO$_SKIPFILE 37 62 | $EQU IO$_SKIPRECORD 38 63 | $EQU IO$_SENSEMODE 39 64 | $EQU IO$_WRITEOF 40 65 | $EQU IO$_LOGICAL 47 66 | $EQU IO$_WRITEVBLK 48 67 | $EQU IO$_READVBLK 49 68 | $EQU IO$_ACCESS 50 69 | $EQU IO$_CREATE 51 70 | $EQU IO$_DEACCESS 52 71 | $EQU IO$_DELETE 53 72 | $EQU IO$_MODIFY 54 73 | $EQU IO$_NETCONTROL 54 74 | $EQU IO$_READPROMPT 55 75 | $EQU IO$_SETCLOCK 55 76 | $EQU IO$_FORCE 55 77 | $EQU IO$_ACPCONTROL 56 78 | $EQU IO$_STARTDATA 56 79 | $EQU IO$_MOUNT 57 80 | $EQU IO$_TTYREADALL 58 81 | $EQU IO$_RUCONTROL 58 82 | $EQU IO$_TTYREADPALL 59 83 | $EQU IO$_CONINTREAD 60 84 | $EQU IO$_READINIT 60 85 | $EQU IO$_CONINTWRITE 61 86 | $EQU IO$_NEWVERSION 61 87 | $EQU IO$_VIRTUAL 63 88 | $EQU IO$M_FCODE 63 89 | $EQU IO$M_FMODIFIERS 65472 90 | $EQU IO$M_INHERLOG 2048 91 | $EQU IO$M_ERASE 1024 92 | $EQU IO$M_ENCRYPT 8192 93 | $EQU IO$M_DATACHECK 16384 94 | $EQU IO$M_INHRETRY 32768 95 | $EQU IO$M_INHSEEK 4096 96 | $EQU IO$M_REVERSE 64 97 | $EQU IO$M_NOWAIT 128 98 | $EQU IO$M_INHEXTGAP 4096 99 | $EQU IO$M_MSCPMODIFS 512 100 | $EQU IO$M_SHADOW 64 101 | $EQU IO$M_LOCATE 128 102 | $EQU IO$M_ALLHOSTS 64 103 | $EQU IO$M_DISSOVLE 128 104 | $EQU IO$M_FORCEPATH 64 105 | $EQU IO$M_COMMOD 64 106 | $EQU IO$M_MOVETRACKD 128 107 | $EQU IO$M_DIAGNOSTIC 256 108 | $EQU IO$M_SKPSECINH 512 109 | $EQU IO$M_DELDATA 64 110 | $EQU IO$M_NOMRSP 64 111 | $EQU IO$M_SWAP 256 112 | $EQU IO$M_OPPOSITE 512 113 | $EQU IO$M_CLSEREXCP 512 114 | $EQU IO$M_ACCESS 64 115 | $EQU IO$M_CREATE 128 116 | $EQU IO$M_DELETE 256 117 | $EQU IO$M_MOUNT 512 118 | $EQU IO$M_DMOUNT 1024 119 | $EQU IO$M_REMOUNT 2048 120 | $EQU IO$M_BINARY 64 121 | $EQU IO$M_PACKED 128 122 | $EQU IO$M_NOW 64 123 | $EQU IO$M_READATTN 128 124 | $EQU IO$M_WRTATTN 256 125 | $EQU IO$M_SETPROT 512 126 | $EQU IO$M_NORSWAIT 1024 127 | $EQU IO$M_NOECHO 64 128 | $EQU IO$M_TIMED 128 129 | $EQU IO$M_CVTLOW 256 130 | $EQU IO$M_NOFILTR 512 131 | $EQU IO$M_DSABLMBX 1024 132 | $EQU IO$M_PURGE 2048 133 | $EQU IO$M_TRMNOECHO 4096 134 | $EQU IO$M_REFRESH 8192 135 | $EQU IO$M_ESCAPE 16384 136 | $EQU IO$M_EXTEND 32768 137 | $EQU IO$M_CANCTRLO 64 138 | $EQU IO$M_ENABLMBX 128 139 | $EQU IO$M_NOFORMAT 256 140 | $EQU IO$M_BREAKTHRU 512 141 | $EQU IO$M_NEWLINE 1024 142 | $EQU IO$M_TYPEAHDCNT 64 143 | $EQU IO$M_MAINT 64 144 | $EQU IO$M_CTRLYAST 128 145 | $EQU IO$M_CTRLCAST 256 146 | $EQU IO$M_HANGUP 512 147 | $EQU IO$M_OUTBAND 1024 148 | $EQU IO$M_TT_CONNECT 2048 149 | $EQU IO$M_TT_DISCON 4096 150 | $EQU IO$M_TT_PROCESS 8192 151 | $EQU IO$M_BRDCST 16384 152 | $EQU IO$M_LOOP 128 153 | $EQU IO$M_UNLOOP 256 154 | $EQU IO$M_LINE_OFF 512 155 | $EQU IO$M_SET_MODEM 1024 156 | $EQU IO$M_LINE_ON 2048 157 | $EQU IO$M_LOOP_EXT 4096 158 | $EQU IO$M_AUTXOF_ENA 8192 159 | $EQU IO$M_AUTXOF_DIS 16384 160 | $EQU IO$M_INCLUDE 2048 161 | $EQU IO$M_TT_ABORT 4096 162 | $EQU IO$M_INTERRUPT 64 163 | $EQU IO$M_ABORT 256 164 | $EQU IO$M_SYNCH 512 165 | $EQU IO$M_STARTUP 64 166 | $EQU IO$M_SHUTDOWN 128 167 | $EQU IO$M_ATTNAST 256 168 | $EQU IO$M_CTRL 512 169 | $EQU IO$M_RD_MEM 64 170 | $EQU IO$M_RD_MODEM 128 171 | $EQU IO$M_RD_COUNT 256 172 | $EQU IO$M_CLR_COUNT 1024 173 | $EQU IO$K_SRRUNOUT 0 174 | $EQU IO$K_PTPBSC 8192 175 | $EQU IO$K_LOOPTEST 57344 176 | $EQU IO$M_MORE 64 177 | $EQU IO$M_QUALIFIED 128 178 | $EQU IO$M_REDIRECT 64 179 | $EQU IO$M_ACCEPT 128 180 | $EQU IO$M_SETEVF 64 181 | $EQU IO$M_WORD 64 182 | $EQU IO$M_SETFNCT 512 183 | $EQU IO$M_DATAPATH 1024 184 | $EQU IO$M_CYCLE 4096 185 | $EQU IO$M_RESET 8192 186 | $EQU IO$M_SETCUADR 256 187 | $EQU IO$M_SETBSIZE 512 188 | $EQU IO$M_SETPOOLSZ 1024 189 | $EQU IO$M_SETENQCNT 2048 190 | $EQU IO$M_CLEAR 4096 191 | $EQU IO$M_LPBEXT 8192 192 | $EQU IO$M_LPBINT 16384 193 | $EQU IO$M_READCSR 32768 194 | $EQU IO$M_NOCTSWAIT 64 195 | $EQU IO$M_SLAVLOOP 128 196 | $EQU IO$M_NODSRWAIT 256 197 | $EQU IO$M_MAINTLOOP 512 198 | $EQU IO$M_LASTBLOCK 1024 199 | $EQU IO$M_INTCLOCK 4096 200 | $EQU IO$M_FORCE 64 201 | $EQU IO$M_CNTRLENTRY 128 202 | $EQU IO$M_MULTIPLE 256 203 | $EQU IO$M_ENDRU1 512 204 | $EQU IO$M_ENDRU2 1024 205 | $EQU IO$M_DIO 2048 206 | $EQU IO$M_ADDFLTR 4096 207 | $EQU IO$M_DELFLTR 8192 208 | $EQU IO$M_NEWVERSION 16384 209 | $EQU IO$M_ALLJNLDEV 64 210 | $EQU IO$M_MNTJNLDEV 128 211 | $EQU IO$M_DALLJNLDEV 256 212 | $EQU IO$M_DMNTJNLDEV 512 213 | $EQU IO$M_CREAJNLDIR 1024 214 | $EQU IO$M_REMASTER 2048 215 | $EQU IO$M_CANCELIO 64 216 | $EQU IO$M_STOPSP 128 217 | $EQU IO$M_STARTSP 256 218 | $EQU IO$M_SYNCHCAN 512 219 | $EQU IO$M_SLVCRUCB 1024 220 | $EQU IO$M_SLVDELUCB 2048 221 | $EQU IO$M_REPOSITION 4096 222 | $EQU IO$M_RUIDLIST 64 223 | $EQU IO$M_RUJLIST 128 224 | $EQU IO$M_RUEBIT 256 225 | $EQU IO$M_CONNECT 64 226 | $EQU IO$M_DISCONNECT 128 227 | $EQU IO$M_CREMASTER 64 228 | $EQU IO$M_INQWRTBUF 64 229 | $EQU IO$M_RESUBWRT 128 230 | $EQU IO$M_WRTFOVRCPL 256 231 | $EQU IO$M_GETPART 512 232 | $EQU IO$M_ACKWRITE 1024 233 | $EQU IO$M_JNL_INIT 2048 234 | $EQU IO$M_GETMINFO 4096 235 | $EQU IO$S_IODEF 2 236 | $EQU IO$S_FCODE 6 237 | $EQU IO$V_FCODE 0 238 | $EQU IO$S_FMODIFIERS 10 239 | $EQU IO$V_FMODIFIERS 6 240 | $EQU IO$V_INHERLOG 11 241 | $EQU IO$V_ERASE 10 242 | $EQU IO$V_ENCRYPT 13 243 | $EQU IO$V_DATACHECK 14 244 | $EQU IO$V_INHRETRY 15 245 | $EQU IO$V_INHSEEK 12 246 | $EQU IO$V_REVERSE 6 247 | $EQU IO$V_NOWAIT 7 248 | $EQU IO$V_INHEXTGAP 12 249 | $EQU IO$V_MSCPMODIFS 9 250 | $EQU IO$V_SHADOW 6 251 | $EQU IO$V_LOCATE 7 252 | $EQU IO$V_ALLHOSTS 6 253 | $EQU IO$V_DISSOVLE 7 254 | $EQU IO$V_SPINDOWN 6 255 | $EQU IO$V_FORCEPATH 6 256 | $EQU IO$V_COMMOD 6 257 | $EQU IO$V_MOVETRACKD 7 258 | $EQU IO$V_DIAGNOSTIC 8 259 | $EQU IO$V_SKPSECINH 9 260 | $EQU IO$V_DELDATA 6 261 | $EQU IO$V_NOMRSP 6 262 | $EQU IO$V_SWAP 8 263 | $EQU IO$V_OPPOSITE 9 264 | $EQU IO$V_CLSEREXCP 9 265 | $EQU IO$V_ACCESS 6 266 | $EQU IO$V_CREATE 7 267 | $EQU IO$V_DELETE 8 268 | $EQU IO$V_MOUNT 9 269 | $EQU IO$V_DMOUNT 10 270 | $EQU IO$V_REMOUNT 11 271 | $EQU IO$V_BINARY 6 272 | $EQU IO$V_PACKED 7 273 | $EQU IO$V_NOW 6 274 | $EQU IO$V_READATTN 7 275 | $EQU IO$V_WRTATTN 8 276 | $EQU IO$V_SETPROT 9 277 | $EQU IO$V_NORSWAIT 10 278 | $EQU IO$V_NOECHO 6 279 | $EQU IO$V_TIMED 7 280 | $EQU IO$V_CVTLOW 8 281 | $EQU IO$V_NOFILTR 9 282 | $EQU IO$V_DSABLMBX 10 283 | $EQU IO$V_PURGE 11 284 | $EQU IO$V_TRMNOECHO 12 285 | $EQU IO$V_REFRESH 13 286 | $EQU IO$V_ESCAPE 14 287 | $EQU IO$V_EXTEND 15 288 | $EQU IO$V_CANCTRLO 6 289 | $EQU IO$V_ENABLMBX 7 290 | $EQU IO$V_NOFORMAT 8 291 | $EQU IO$V_BREAKTHRU 9 292 | $EQU IO$V_NEWLINE 10 293 | $EQU IO$V_TYPEAHDCNT 6 294 | $EQU IO$V_MAINT 6 295 | $EQU IO$V_CTRLYAST 7 296 | $EQU IO$V_CTRLCAST 8 297 | $EQU IO$V_HANGUP 9 298 | $EQU IO$V_OUTBAND 10 299 | $EQU IO$V_TT_CONNECT 11 300 | $EQU IO$V_TT_DISCON 12 301 | $EQU IO$V_TT_PROCESS 13 302 | $EQU IO$V_BRDCST 14 303 | $EQU IO$V_LOOP 7 304 | $EQU IO$V_UNLOOP 8 305 | $EQU IO$V_LINE_OFF 9 306 | $EQU IO$V_SET_MODEM 10 307 | $EQU IO$V_LINE_ON 11 308 | $EQU IO$V_LOOP_EXT 12 309 | $EQU IO$V_AUTXOF_ENA 13 310 | $EQU IO$V_AUTXOF_DIS 14 311 | $EQU IO$V_INCLUDE 11 312 | $EQU IO$V_TT_ABORT 12 313 | $EQU IO$V_INTERRUPT 6 314 | $EQU IO$V_ABORT 8 315 | $EQU IO$V_SYNCH 9 316 | $EQU IO$V_STARTUP 6 317 | $EQU IO$V_SHUTDOWN 7 318 | $EQU IO$V_ATTNAST 8 319 | $EQU IO$V_CTRL 9 320 | $EQU IO$V_RD_MEM 6 321 | $EQU IO$V_RD_MODEM 7 322 | $EQU IO$V_RD_COUNT 8 323 | $EQU IO$V_CLR_COUNT 10 324 | $EQU IO$V_MORE 6 325 | $EQU IO$V_QUALIFIED 7 326 | $EQU IO$V_REDIRECT 6 327 | $EQU IO$V_ACCEPT 7 328 | $EQU IO$V_SETEVF 6 329 | $EQU IO$V_WORD 6 330 | $EQU IO$V_SETFNCT 9 331 | $EQU IO$V_DATAPATH 10 332 | $EQU IO$V_CYCLE 12 333 | $EQU IO$V_RESET 13 334 | $EQU IO$V_SETCUADR 8 335 | $EQU IO$V_SETBSIZE 9 336 | $EQU IO$V_SETPOOLSZ 10 337 | $EQU IO$V_SETENQCNT 11 338 | $EQU IO$V_CLEAR 12 339 | $EQU IO$V_LPBEXT 13 340 | $EQU IO$V_LPBINT 14 341 | $EQU IO$V_READCSR 15 342 | $EQU IO$V_NOCTSWAIT 6 343 | $EQU IO$V_SLAVLOOP 7 344 | $EQU IO$V_NODSRWAIT 8 345 | $EQU IO$V_MAINTLOOP 9 346 | $EQU IO$V_LASTBLOCK 10 347 | $EQU IO$V_INTCLOCK 12 348 | $EQU IO$V_FORCE 6 349 | $EQU IO$V_CNTRLENTRY 7 350 | $EQU IO$V_MULTIPLE 8 351 | $EQU IO$V_ENDRU1 9 352 | $EQU IO$V_ENDRU2 10 353 | $EQU IO$V_DIO 11 354 | $EQU IO$V_ADDFLTR 12 355 | $EQU IO$V_DELFLTR 13 356 | $EQU IO$V_NEWVERSION 14 357 | $EQU IO$V_ALLJNLDEV 6 358 | $EQU IO$V_MNTJNLDEV 7 359 | $EQU IO$V_DALLJNLDEV 8 360 | $EQU IO$V_DMNTJNLDEV 9 361 | $EQU IO$V_CREAJNLDIR 10 362 | $EQU IO$V_REMASTER 11 363 | $EQU IO$V_CANCELIO 6 364 | $EQU IO$V_STOPSP 7 365 | $EQU IO$V_STARTSP 8 366 | $EQU IO$V_SYNCHCAN 9 367 | $EQU IO$V_SLVCRUCB 10 368 | $EQU IO$V_SLVDELUCB 11 369 | $EQU IO$V_REPOSITION 12 370 | $EQU IO$V_RUIDLIST 6 371 | $EQU IO$V_RUJLIST 7 372 | $EQU IO$V_RUEBIT 8 373 | $EQU IO$V_CONNECT 6 374 | $EQU IO$V_DISCONNECT 7 375 | $EQU IO$V_CREMASTER 6 376 | $EQU IO$V_INQWRTBUF 6 377 | $EQU IO$V_RESUBWRT 7 378 | $EQU IO$V_WRTFOVRCPL 8 379 | $EQU IO$V_GETPART 9 380 | $EQU IO$V_ACKWRITE 10 381 | $EQU IO$V_JNL_INIT 11 382 | $EQU IO$V_GETMINFO 12 383 | $DEFEND IO,$GBL,DEF 384 | .ENDM 385 | -------------------------------------------------------------------------------- /ifc/ifclex.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:rtldef', 2 | 'lib$:ifc$def')] 3 | module ifc$lex(output); 4 | 5 | const number_keywords = 46; 6 | 7 | type $error_ptr = ^$error_node; 8 | $error_node = record 9 | position : integer; 10 | number : integer; 11 | code : $error_code; 12 | string : $symbol_string; 13 | members : $symbol_set; 14 | value : $symbol_value; 15 | next : $error_ptr; 16 | end; 17 | 18 | $keyword_table_rec = record 19 | name : $symbol_string; 20 | value : $symbol_token; 21 | end; 22 | 23 | $keyword_table = array[1..number_keywords] of $keyword_table_rec; 24 | 25 | var current_symbol : $symbol_desc; 26 | current_line : $symbol_string; 27 | current_position : integer; 28 | first_error, last_error : $error_ptr := nil; 29 | source_file : text; 30 | errors_enabled : boolean; 31 | 32 | keyword_table : $keyword_table := 33 | ( ('AREA', area_keyword), 34 | ('BLINK', blink_keyword), 35 | ('BOLD', bold_keyword), 36 | ('CAPACITY', capacity_keyword), 37 | ('CLASS', class_keyword), 38 | ('COGNIZANT', cognizant_keyword), 39 | ('DESCRIPTION', description_keyword), 40 | ('DETAIL', detail_keyword), 41 | ('DOOR', door_keyword), 42 | ('DOWN', down_keyword), 43 | ('EAST', east_keyword), 44 | ('END', end_keyword), 45 | ('FAO', fao_keyword), 46 | ('FLEXIBLE', flexible_keyword), 47 | ('GENERIC', generic_keyword), 48 | ('IDENT', ident_keyword), 49 | ('IN', in_keyword), 50 | ('INFINITE', infinite_keyword), 51 | ('INITIAL', initial_keyword), 52 | ('LOCKABLE', lockable_keyword), 53 | ('MACHINE', machine_keyword), 54 | ('MASS', mass_keyword), 55 | ('MESSAGE', message_keyword), 56 | ('NAME', name_keyword), 57 | ('NORTH', north_keyword), 58 | ('NORTH_EAST', north_east_keyword), 59 | ('NORTH_WEST', north_west_keyword), 60 | ('OBJECT', object_keyword), 61 | ('OPENABLE', openable_keyword), 62 | ('OUT', out_keyword), 63 | ('PREFIX', prefix_keyword), 64 | ('READABLE', readable_keyword), 65 | ('REVERSE', reverse_keyword), 66 | ('ROOM', room_keyword), 67 | ('SIZE', size_keyword), 68 | ('SOUTH', south_keyword), 69 | ('SOUTH_EAST', south_east_keyword), 70 | ('SOUTH_WEST', south_west_keyword), 71 | ('SPECIFIC', specific_keyword), 72 | ('STARTABLE', startable_keyword), 73 | ('STATIC', static_keyword), 74 | ('STRENGTH', strength_keyword), 75 | ('UNDERLINE', underline_keyword), 76 | ('UP', up_keyword), 77 | ('VOLUME', volume_keyword), 78 | ('WEST', west_keyword) ); 79 | 80 | procedure lookup_keyword(var symbol : $symbol_desc); 81 | var found : boolean; 82 | t, b, m, state : integer; 83 | begin 84 | t:=1; b:=number_keywords; found:=false; 85 | while ((b>=t) and (not found)) do 86 | begin 87 | m:=t + (b-t) div 2; 88 | state:=$compare(symbol.string, keyword_table[m].name); 89 | if (state=0) then found:=true 90 | else 91 | begin 92 | if (state=-1) then b:=m-1 else t:=m+1; 93 | end; 94 | end; 95 | 96 | if (found) then symbol.token:=keyword_table[m].value; 97 | end; 98 | 99 | procedure enumerate_members(symbol_set : $symbol_set); 100 | var index : $symbol_token; 101 | begin 102 | index:=identifier; 103 | repeat 104 | begin 105 | if (index in symbol_set) then writeln(index); 106 | index:=succ(index); 107 | end 108 | until (index=identifier); 109 | end; 110 | 111 | [global] procedure ifc$defer_error_message( 112 | code : $error_code; 113 | string : $symbol_string; 114 | members : $symbol_set; 115 | value : $symbol_value); 116 | 117 | var p : $error_ptr; 118 | begin 119 | if (errors_enabled) then 120 | begin 121 | new(p); 122 | p^.position:=current_position; 123 | p^.number:=0; 124 | p^.code:=code; 125 | p^.string:=string; 126 | p^.members:=members; 127 | p^.value:=value; 128 | p^.next:=nil; 129 | 130 | if (last_error=nil) then 131 | begin 132 | first_error:=p; last_error:=p; 133 | end 134 | else 135 | begin 136 | last_error^.next:=p; last_error:=p; 137 | end; 138 | end; 139 | end; 140 | 141 | procedure write_error_message(p : $error_ptr); 142 | begin 143 | case (p^.code) of 144 | error_muldef: 145 | writeln('%IFC-W-MULDEF, (',p^.number:0,') Room ', 146 | p^.string,' is multiply defined'); 147 | error_strtrm: 148 | writeln('%IFC-W-STRTRM, (',p^.number:0,') String ', 149 | 'terminated at end of line'); 150 | error_invchr: 151 | writeln('%IFC-W-INVCHR, (',p^.number:0,') Character "', 152 | p^.string,'" is invalid'); 153 | error_syntax: 154 | writeln('%IFC-W-SYNTAX, (',p^.number:0,') Found ', 155 | 'unexpected syntax "',p^.string,'"'); 156 | error_expect: 157 | begin 158 | writeln('-IFC-W-EXPECT, Expecting one of the following:'); 159 | enumerate_members(p^.members); 160 | end; 161 | error_sync: 162 | begin 163 | writeln('-IFC-W-SYNC, Synchronizing with one ', 164 | 'of the following:'); 165 | enumerate_members(p^.members); 166 | end; 167 | error_skip: 168 | writeln('-IFC-W-SKIP, Some text may be skipped'); 169 | end; 170 | end; 171 | 172 | procedure emit_error_messages; 173 | var o, p : $error_ptr; 174 | bp, n, i : integer; 175 | buf : $symbol_string; 176 | begin 177 | p:=first_error; 178 | if (p<>nil) then 179 | begin 180 | writeln; writeln(current_line); 181 | end; 182 | 183 | buf:=''; bp:=0; n:=0; 184 | while (p<>nil) do 185 | begin 186 | if (p^.position>bp) then 187 | begin 188 | n:=n+1; 189 | for i:=(bp+1) to (p^.position-1) do buf:=buf+'.'; 190 | bp:=p^.position; 191 | buf:=buf+chr(n+48); 192 | end; 193 | p^.number:=n; 194 | p:=p^.next; 195 | end; 196 | 197 | p:=first_error; 198 | if (p<>nil) then writeln(buf); 199 | 200 | while (p<>nil) do 201 | begin 202 | write_error_message(p); 203 | o:=p; p:=p^.next; dispose(o); 204 | end; 205 | first_error:=nil; last_error:=nil; 206 | end; 207 | 208 | procedure expand_tabs( 209 | source : varying[$u1] of char; 210 | var dest : varying[$u2] of char); 211 | 212 | var i, j : integer; 213 | c : char; 214 | begin 215 | dest:=''; 216 | for i:=1 to (source.length) do 217 | begin 218 | c:=source[i]; 219 | if (c<>chr(9)) then dest:=dest + c 220 | else 221 | for j:=1 to (8-(dest.length mod 8)) do 222 | dest:=dest + ' '; 223 | end; 224 | end; 225 | 226 | procedure get_char(var c, n : char; var lp : integer); 227 | 228 | var line : [static] $symbol_string := ''; 229 | p : integer; 230 | begin 231 | while ((not eof(source_file)) and (line.length=0)) do 232 | begin 233 | readln(source_file, line); 234 | p:=index(line,'--'); 235 | if (p<>0) then line.length:=p-1; 236 | if (line.length<>0) then 237 | begin 238 | emit_error_messages; 239 | expand_tabs(line, line); current_line:=line; 240 | lp:=0; 241 | end; 242 | end; 243 | 244 | if (line.length<>0) then 245 | begin 246 | lp:=lp+1; c:=line[lp]; 247 | if (c<=' ') then c:=' '; 248 | if (lp='A') and (c<='Z')) or 270 | ((c>='a') and (c<='z')) or 271 | ((c>='0') and (c<='9')) or 272 | (c='_') or (c='$') ) then 273 | begin 274 | symbol.token:=unknown; 275 | while ( ((n>='A') and (n<='Z')) or 276 | ((n>='a') and (n<='z')) or 277 | ((n>='0') and (n<='9')) or 278 | (n='_') or (n='$') ) do 279 | begin 280 | get_char(c,n,lp); 281 | symbol.string:=symbol.string+c; 282 | end; 283 | end 284 | else 285 | begin 286 | case (c) of 287 | '+': symbol.token:=plus_symbol; 288 | '-': symbol.token:=minus_symbol; 289 | '*': symbol.token:=star_symbol; 290 | '(': symbol.token:=left_paren_symbol; 291 | ')': symbol.token:=right_paren_symbol; 292 | ';': symbol.token:=semicolon_symbol; 293 | ',': symbol.token:=comma_symbol; 294 | '.': symbol.token:=dot_symbol; 295 | '=': symbol.token:=equal_symbol; 296 | '/': symbol.token:=fslash_symbol; 297 | ':': symbol.token:=colon_symbol; 298 | '<': begin 299 | symbol.token:=text_string; 300 | symbol.string.length:=0; 301 | while ((n<>'>') and (n<>chr(13))) do 302 | begin 303 | get_char(c,n,lp); 304 | symbol.string:=symbol.string+c; 305 | end; 306 | if (n<>chr(13)) then get_char(c,n,lp) 307 | else 308 | ifc$defer_error_message(error_strtrm, 309 | '', [], 0); 310 | end; 311 | chr(26): begin 312 | symbol.token:=end_of_file; 313 | symbol.string:='END_OF_FILE'; 314 | end; 315 | otherwise 316 | begin 317 | symbol.token:=invalid; 318 | ifc$defer_error_message(error_invchr, c, [], 0); 319 | end; 320 | end; 321 | end; 322 | end; 323 | 324 | procedure convert_integer(var symbol : $symbol_desc); 325 | var d : integer; 326 | begin 327 | symbol.token:=integer_constant; 328 | symbol.value:=0; d:=0; 329 | while ( (d='0') and 334 | (symbol.string[d]<='9') ) then 335 | symbol.value := symbol.value*10 + 336 | ord(symbol.string[d])-48 337 | else symbol.token:=invalid; 338 | end; 339 | end; 340 | 341 | procedure recognize_token(var symbol : $symbol_desc); 342 | begin 343 | if (symbol.token=unknown) then 344 | begin 345 | if ( (symbol.string[1]>='0') and (symbol.string[1]<='9') ) then 346 | convert_integer(symbol) 347 | else 348 | begin 349 | $upcase(symbol.string, symbol.string); 350 | lookup_keyword(symbol); 351 | if (symbol.token=unknown) then 352 | symbol.token:=identifier; 353 | end; 354 | end; 355 | end; 356 | 357 | [global] procedure ifc$advance_symbol; 358 | begin 359 | get_token(current_symbol); 360 | recognize_token(current_symbol); 361 | end; 362 | 363 | [global] procedure ifc$get_symbol(var symbol : $symbol_desc); 364 | begin 365 | symbol:=current_symbol; 366 | end; 367 | 368 | procedure skip_symbol(followers : $symbol_set); 369 | begin 370 | ifc$defer_error_message(error_sync, '', followers, 0); 371 | while not (current_symbol.token in followers) do 372 | ifc$advance_symbol; 373 | end; 374 | 375 | [global] procedure ifc$sync_symbol(followers : $symbol_set); 376 | begin 377 | if not (current_symbol.token in followers) then 378 | begin 379 | if (not current_symbol.error) then 380 | begin 381 | current_symbol.error:=true; 382 | ifc$defer_error_message(error_syntax, 383 | current_symbol.string, [], 0); 384 | end; 385 | skip_symbol(followers); 386 | end; 387 | end; 388 | 389 | [global] procedure ifc$test_symbol(expected, followers : $symbol_set); 390 | begin 391 | if not (current_symbol.token in expected) then 392 | begin 393 | if (not current_symbol.error) then 394 | begin 395 | current_symbol.error:=true; 396 | ifc$defer_error_message(error_syntax, 397 | current_symbol.string, [], 0); 398 | ifc$defer_error_message(error_expect, '', 399 | expected, 0); 400 | end; 401 | skip_symbol(expected+followers); 402 | end; 403 | end; 404 | 405 | [global] procedure ifc$open_lex( 406 | source_filename : varying[$u1] of char); 407 | begin 408 | open(source_file, source_filename, history:=old); 409 | end; 410 | 411 | [global] procedure ifc$close_lex; 412 | begin 413 | emit_error_messages; 414 | close(source_file); 415 | end; 416 | 417 | [global] procedure ifc$reset_lex(error : boolean); 418 | begin 419 | emit_error_messages; 420 | reset(source_file); 421 | errors_enabled:=error; 422 | end; 423 | 424 | end. 425 | -------------------------------------------------------------------------------- /ifc/ifcrtl_screen.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef', 2 | 'lib$:dscdef', 3 | 'lib$:rtldef', 4 | 'lib$:sysdef', 5 | 'lib$:smgdef')] 6 | module ifc$rtl_screen; 7 | 8 | const number_trans = 4; 9 | 10 | type $trans_record = record 11 | pattern : varying[10] of char; 12 | replacement : varying[10] of char; 13 | end; 14 | $trans_array = array[1..number_trans] of $trans_record; 15 | 16 | $message_args = array[0..30] of integer; 17 | $pointer = [unsafe, long] packed record 18 | case integer of 19 | 1 : (address : unsigned); 20 | 2 : (byte_ptr : ^$ubyte); 21 | 3 : (word_ptr : ^$uword); 22 | 4 : (long_ptr : ^unsigned); 23 | end; 24 | 25 | var screen, (* pasteboard *) 26 | status_line, (* virtual display *) 27 | main_display, (* virtual display *) 28 | more_indicator, (* virtual display *) 29 | terminal, (* virtual keyboard *) 30 | key_table: (* terminal key definition table *) 31 | [static] unsigned; 32 | line_count: 33 | [static] integer := 0; 34 | 35 | [external(sys$faol)] function $$faol( 36 | var desc : $uquad; 37 | var outlen : $uword; 38 | %stdescr fao_desc : packed array[$l1..$u1:integer] of char; 39 | %immed prmlst : unsigned) : unsigned; 40 | extern; 41 | 42 | [global] function ifc$init_screen( 43 | key_logical_name : varying[$u1] of char; 44 | [unbound, asynchronous] procedure ast_routine; 45 | ast_argument : [unsafe] unsigned) : unsigned; 46 | 47 | var return : unsigned; 48 | item_list : $item_list; 49 | version : packed array[1..8] of char; 50 | begin 51 | establish($sig_to_ret); 52 | 53 | return:=$create_pasteboard(screen); 54 | if (not odd(return)) then $signal(return); 55 | 56 | return:=$create_virtual_keyboard(terminal); 57 | if (not odd(return)) then $signal(return); 58 | 59 | return:=$create_key_table(key_table); 60 | if (not odd(return)) then $signal(return); 61 | 62 | return:=$load_key_defs(key_table, key_logical_name, '.COM'); 63 | if ( (not odd(return)) and (return<>rms$_fnf) ) then 64 | $signal(return); 65 | 66 | return:=$create_virtual_display(1,80,status_line,,smg$m_reverse); 67 | if (not odd(return)) then $signal(return); 68 | 69 | return:=$create_virtual_display(23,80,main_display); 70 | if (not odd(return)) then $signal(return); 71 | 72 | return:=$create_virtual_display(1,9,more_indicator,,smg$m_reverse); 73 | if (not odd(return)) then $signal(return); 74 | 75 | return:=$set_broadcast_trapping(screen, %immed ast_routine, 76 | ast_argument); 77 | if (not odd(return)) then $signal(return); 78 | 79 | return:=$put_chars(status_line,'Score:',1,50); 80 | if (not odd(return)) then $signal(return); 81 | return:=$put_chars(status_line,'Moves:',1,65); 82 | if (not odd(return)) then $signal(return); 83 | return:=$put_chars(more_indicator,'[More...]',1,1); 84 | if (not odd(return)) then $signal(return); 85 | 86 | return:=$paste_virtual_display(status_line,screen,1,1); 87 | if (not odd(return)) then $signal(return); 88 | 89 | return:=$paste_virtual_display(main_display,screen,2,1); 90 | if (not odd(return)) then $signal(return); 91 | 92 | (* KLUDGE FOR V40,V41 SMG BUGS BEGINS HERE *) 93 | 94 | item_list[1].buffer_length:=8; 95 | item_list[1].item_code:=syi$_version; 96 | item_list[1].buffer_address:=iaddress(version); 97 | item_list[1].return_length_address:=0; 98 | item_list[2].buffer_length:=0; 99 | item_list[2].item_code:=0; 100 | 101 | return:=$getsyiw(,,,item_list); 102 | if (not odd(return)) then $signal(return); 103 | 104 | if ( (version[2]='4') and 105 | ( (version[4]='0') or (version[4]='1') ) ) then 106 | begin 107 | return:=$set_cursor_abs(main_display, 23, 1); 108 | if (not odd(return)) then $signal(return); 109 | end; 110 | 111 | ifc$init_screen:=ss$_normal; 112 | end; 113 | 114 | [global] function ifc$finish_screen : unsigned; 115 | var return : unsigned; 116 | begin 117 | establish($sig_to_ret); 118 | 119 | return:=$set_cursor_abs(main_display, 23, 1); 120 | if (not odd(return)) then $signal(return); 121 | 122 | return:=$delete_virtual_keyboard(terminal); 123 | if (not odd(return)) then $signal(return); 124 | 125 | return:=$delete_pasteboard(screen, 0); 126 | if (not odd(return)) then $signal(return); 127 | 128 | ifc$finish_screen:=ss$_normal; 129 | end; 130 | 131 | [global] function ifc$get_string( 132 | var string : varying[$u1] of char; 133 | prompt : varying[$u2] of char) : unsigned; 134 | var return : unsigned; 135 | begin 136 | ifc$get_string:=$read_string(terminal, string, prompt,,,,,,, 137 | main_display); 138 | line_count:=line_count + 1; 139 | end; 140 | 141 | [global] function ifc$get_composed_line( 142 | var string : varying[$u1] of char; 143 | prompt : varying[$u2] of char) : unsigned; 144 | 145 | var return : unsigned; 146 | begin 147 | line_count:=1; 148 | return:=$read_composed_line(terminal, key_table, 149 | string, prompt,, main_display); 150 | ifc$get_composed_line:=return; 151 | end; 152 | 153 | [global] function put_scroll_dx( 154 | column_number : [truncate] integer; 155 | var string : [truncate] $uquad; 156 | new_attributes : [truncate] unsigned) : unsigned; 157 | 158 | var return : unsigned; 159 | attributes : unsigned; 160 | buf : varying[10] of char; 161 | temp : varying[132] of char; 162 | begin 163 | if (line_count=23) then 164 | begin 165 | line_count:=0; 166 | 167 | return:=$paste_virtual_display(more_indicator, screen, 24, 1); 168 | if (not odd(return)) then $signal(return); 169 | 170 | return:=$read_string(terminal, buf,, 1, io$m_noecho); 171 | if (not odd(return)) then $signal(return); 172 | 173 | return:=$unpaste_virtual_display(more_indicator, screen); 174 | if (not odd(return)) then $signal(return); 175 | end; 176 | line_count:=line_count + 1; 177 | 178 | attributes:=0; 179 | if (present(new_attributes)) then attributes:=new_attributes; 180 | 181 | if (not present(column_number)) then 182 | return:=$put_with_scroll(main_display) 183 | else 184 | if (column_number=1) then 185 | return:=$put_with_scroll_dx(main_display,string,,attributes,,1) 186 | else 187 | begin 188 | return:=$dupl_char(temp, column_number-1, ' '); 189 | if (not odd(return)) then $signal(return); 190 | 191 | return:=$append_vs_dx(temp, string); 192 | if (not odd(return)) then $signal(return); 193 | 194 | return:=$put_with_scroll(main_display, temp,, attributes,,1) 195 | end; 196 | 197 | put_scroll_dx:=return; 198 | end; 199 | 200 | procedure convert_n_s( 201 | score : integer; 202 | var string : varying[$u1] of char); 203 | var p : integer; 204 | begin 205 | string:=' 0'; p:=3; 206 | while ( (p>0) and (score>0) ) do 207 | begin 208 | string[p]:=chr((score mod 10)+48); 209 | score:=score div 10; 210 | p:=p-1; 211 | end; 212 | end; 213 | 214 | [global] function ifc$update_status_numbers( 215 | var score : integer; 216 | var moves : integer) : unsigned; 217 | 218 | var return : unsigned; 219 | string : varying[3] of char; 220 | begin 221 | return:=$begin_display_update(status_line); 222 | if (not odd(return)) then $signal(return); 223 | 224 | convert_n_s(score, string); 225 | return:=$put_chars(status_line, string, 1, 57); 226 | if (not odd(return)) then $signal(return); 227 | 228 | convert_n_s(moves, string); 229 | return:=$put_chars(status_line, string, 1, 72); 230 | if (not odd(return)) then $signal(return); 231 | 232 | return:=$end_display_update(status_line); 233 | if (not odd(return)) then $signal(return); 234 | 235 | ifc$update_status_numbers:=ss$_normal; 236 | end; 237 | 238 | [global] function ifc$update_status_room( 239 | var string : varying[$u1] of char) : unsigned; 240 | 241 | var return : unsigned; 242 | begin 243 | return:=$begin_display_update(status_line); 244 | if (not odd(return)) then $signal(return); 245 | 246 | return:=$erase_chars(status_line, 31, 1, 1); 247 | if (not odd(return)) then $signal(return); 248 | 249 | return:=$put_chars(status_line, string, 1, 1); 250 | if (not odd(return)) then $signal(return); 251 | 252 | return:=$end_display_update(status_line); 253 | if (not odd(return)) then $signal(return); 254 | 255 | ifc$update_status_room:=ss$_normal; 256 | end; 257 | 258 | procedure correct_English( 259 | var string : varying[$u1] of char); 260 | 261 | var lowered : boolean; 262 | p, i : integer; 263 | trans : [static] $trans_array := 264 | ( ('the self', 'you'), 265 | ('you is', 'you are'), 266 | ('you does', 'you do'), 267 | ('s is', 's are') ); 268 | begin 269 | if (string[1]>='A') and (string[1]<='Z') then 270 | begin 271 | string[1]:=chr(ord(string[1])+32); lowered:=true 272 | end 273 | else lowered:=false; 274 | 275 | for i:=1 to number_trans do 276 | begin 277 | p:=index(string, trans[i].pattern); 278 | if (p<>0) then 279 | $replace(string, string, p, 280 | p + trans[i].pattern.length - 1, 281 | trans[i].replacement); 282 | end; 283 | 284 | if ( (string[1]>='a') and (string[1]<='z') and (lowered)) then 285 | string[1]:=chr(ord(string[1])-32); 286 | end; 287 | 288 | procedure write_message( 289 | column : integer; 290 | var message_ptr : $pointer; 291 | fao_count : integer; 292 | fao_block : $pointer); 293 | 294 | var fao_desc, desc : $descriptor; 295 | attributes, return : unsigned; 296 | line_fao_count : integer; 297 | fao_buffer : varying[132] of char; 298 | begin 299 | desc.dsc$b_dtype:=dsc$k_dtype_t; 300 | desc.dsc$b_class:=dsc$k_class_s; 301 | 302 | if (message_ptr.address=0) then 303 | put_scroll_dx 304 | else 305 | while (message_ptr.word_ptr^<>0) do 306 | begin 307 | desc.dsc$w_length:=message_ptr.byte_ptr^; 308 | 309 | message_ptr.address:=message_ptr.address + 1; 310 | line_fao_count:=message_ptr.byte_ptr^; 311 | 312 | message_ptr.address:=message_ptr.address + 1; 313 | attributes:=message_ptr.byte_ptr^; 314 | 315 | message_ptr.address:=message_ptr.address + 1; 316 | desc.dsc$a_pointer:=message_ptr.address; 317 | 318 | message_ptr.address:=message_ptr.address + desc.dsc$w_length; 319 | if (line_fao_count=0) then 320 | begin 321 | return:=put_scroll_dx(column, desc, attributes); 322 | if (not odd(return)) then $signal(return); 323 | end 324 | else 325 | begin 326 | return:=$$faol(desc, fao_buffer.length, 327 | fao_buffer.body, fao_block.address); 328 | if (not odd(return)) then $signal(return); 329 | 330 | correct_English(fao_buffer); 331 | 332 | fao_desc.dsc$w_length:=fao_buffer.length; 333 | fao_desc.dsc$b_dtype:=dsc$k_dtype_t; 334 | fao_desc.dsc$b_class:=dsc$k_class_s; 335 | fao_desc.dsc$a_pointer:=iaddress(fao_buffer.body); 336 | return:=put_scroll_dx(column, fao_desc, attributes); 337 | if (not odd(return)) then $signal(return); 338 | fao_block.address:=fao_block.address + 339 | (line_fao_count*4); 340 | end; 341 | end; 342 | end; 343 | 344 | [global] function ifc$message_indent_list( 345 | ap : $message_args) : unsigned; 346 | var i, fao_count, column : integer; 347 | message_code : unsigned; 348 | begin 349 | establish($sig_to_ret); 350 | 351 | (* $begin_display_update(main_display);*) 352 | column:=ap[1]; i:=2; 353 | while (i<=ap[0]) do 354 | begin 355 | message_code:=ap[i]; i:=i+1; 356 | if (i<=ap[0]) then 357 | begin 358 | fao_count:=ap[i]; i:=i+1; 359 | end 360 | else fao_count:=0; 361 | if (fao_count=0) then 362 | write_message(column, message_code, 0, 0) 363 | else 364 | begin 365 | write_message(column, message_code, 366 | fao_count, iaddress(ap[i])); 367 | i:=i+fao_count; 368 | end; 369 | end; 370 | (* $end_display_update(main_display);*) 371 | 372 | ifc$message_indent_list:=1; 373 | end; 374 | 375 | [global] function ifc$message_list( 376 | var ap : $message_args) : unsigned; 377 | var i, fao_count : integer; 378 | message_code : unsigned; 379 | begin 380 | establish($sig_to_ret); 381 | 382 | (* $begin_display_update(main_display);*) 383 | 384 | i:=1; 385 | while (i<=ap[0]) do 386 | begin 387 | message_code:=ap[i]; i:=i+1; 388 | if (i<=ap[0]) then 389 | begin 390 | fao_count:=ap[i]; i:=i+1; 391 | end 392 | else fao_count:=0; 393 | if (fao_count=0) then 394 | write_message(1, message_code, 0, 0) 395 | else 396 | begin 397 | write_message(1, message_code, fao_count, 398 | iaddress(ap[i])); 399 | i:=i+fao_count; 400 | end; 401 | end; 402 | (* $end_display_update(main_display);*) 403 | 404 | ifc$message_list:=1; 405 | end; 406 | 407 | [global] function ifc$output_broadcast_messages : unsigned; 408 | var return : unsigned; 409 | message : varying[255] of char; 410 | begin 411 | return:=$get_broadcast_message(screen, message); 412 | while ( odd(return) and (return<>smg$_no_mormsg) ) do 413 | begin 414 | return:=$put_with_scroll(main_display, message,, 415 | smg$m_reverse,,1); 416 | if (odd(return)) then 417 | return:=$get_broadcast_message(screen, message); 418 | end; 419 | ifc$output_broadcast_messages:=return; 420 | end; 421 | 422 | end. 423 | -------------------------------------------------------------------------------- /zk/zklex.pas: -------------------------------------------------------------------------------- 1 | [inherit('lib$:typedef', 2 | 'lib$:rtldef', 3 | 'lib$:dscdef', 4 | 'ifc$library:ifc$rtl_def', 5 | 'lib$:zk$def')] 6 | module zk$lex; 7 | 8 | const number_keywords = 272; 9 | 10 | type $bit7 = [byte] packed record 11 | bit0, bit1, bit2, bit3, 12 | bit4, bit5, bit6, bit7 : boolean; 13 | end; 14 | 15 | $keyword_rec = record 16 | string : varying[14] of char; 17 | token : $symbol_token; 18 | end; 19 | 20 | $keyword_table = array[1..number_keywords] of $keyword_rec; 21 | 22 | var current_symbol : $symbol_desc; 23 | current_line : varying[132] of char; 24 | line_pointer : integer; 25 | 26 | keyword_table : $keyword_table := 27 | ( ('ALL', all_keyword), 28 | ('AND', and_keyword), 29 | ('ARM', arm_keyword), 30 | ('ASCII', ascii_keyword), 31 | ('ASK', tell_keyword), 32 | ('AT', at_keyword), 33 | ('ATTACK', kill_keyword), 34 | ('BACK', back_keyword), 35 | ('BADGE', badge_keyword), 36 | ('BAG', sack_keyword), 37 | ('BALL', ball_keyword), 38 | ('BANK', bank_keyword), 39 | ('BARS', bars_keyword), 40 | ('BILLS', bills_keyword), 41 | ('BINDERS', doc_keyword), 42 | ('BLACK', black_keyword), 43 | ('BLANK', blank_keyword), 44 | ('BLOOD', blood_keyword), 45 | ('BLUE', blue_keyword), 46 | ('BOARD', board_keyword), 47 | ('BOOT', boot_keyword), 48 | ('BREAK', kill_keyword), 49 | ('BRIEF', brief_keyword), 50 | ('BROKEN', broken_keyword), 51 | ('BUILDING', building_keyword), 52 | ('BULLETIN', bulletin_keyword), 53 | ('BURLAP', burlap_keyword), 54 | ('BUTTON', button_keyword), 55 | ('CABINET', cabinet_keyword), 56 | ('CAFETERIA', cafeteria_keyword), 57 | ('CAN', can_keyword), 58 | ('CANS', can_keyword), 59 | ('CARD', card_keyword), 60 | ('CASH', bills_keyword), 61 | ('CDD', cdd_keyword), 62 | ('CLIMB', stand_keyword), 63 | ('CLOSE', close_keyword), 64 | ('COINS', coins_keyword), 65 | ('COKE', coke_keyword), 66 | (**) ('COMPASS', compass_keyword), 67 | (**) ('COMPUTER', computer_keyword), 68 | ('CONSOLE', console_keyword), 69 | (**) ('CONTENTS', contents_keyword), 70 | (**) ('CONTROL', control_keyword), 71 | ('CRETIN', self_keyword), 72 | ('CRYSTAL', crystal_keyword), 73 | ('D', down_keyword), 74 | ('DARK', dark_keyword), 75 | ('DATATRIEVE', dtr_keyword), 76 | ('DEBRIS', debris_keyword), 77 | ('DESIGN', pattern_keyword), 78 | ('DESK', desk_keyword), 79 | ('DESTROY', kill_keyword), 80 | ('DEVELOPER', developer_keyword), 81 | ('DEVO', developer_keyword), 82 | ('DIETARY', diet_keyword), 83 | ('DISCARDED', discarded_keyword), 84 | ('DISK', disk_keyword), 85 | ('DISMOUNT', take_keyword), 86 | ('DOC', doc_keyword), 87 | ('DOCUMENTATION', doc_keyword), 88 | ('DOOR', door_keyword), 89 | ('DOWN', down_keyword), 90 | ('DRINK', drink_keyword), 91 | ('DRIVE', drive_keyword), 92 | ('DROP', drop_keyword), 93 | ('DTR', dtr_keyword), 94 | ('E', east_keyword), 95 | ('EAST', east_keyword), 96 | ('EDS', edswbl_keyword), 97 | ('EDSWBL', edswbl_keyword), 98 | ('ELEVATOR', elevator_keyword), 99 | ('ELF', elvish_keyword), 100 | ('ELVISH', elvish_keyword), 101 | ('EMPTY', empty_keyword), 102 | ('ENQUIRER', enquirer_keyword), 103 | ('ENTER', enter_keyword), 104 | ('EXA', examine_keyword), 105 | ('EXAMINE', examine_keyword), 106 | ('EXIT', exit_keyword), 107 | ('FIELD', field_keyword), 108 | ('FIND', locate_keyword), 109 | ('FIX', heal_keyword), 110 | ('FLUORESCENT', fluorescent_keyword), 111 | ('FOLLOW', follow_keyword), 112 | ('FONDLE', rub_keyword), 113 | ('FROM', from_keyword), 114 | ('GARBAGE', debris_keyword), 115 | ('GET', get_keyword), 116 | ('GIVE', give_keyword), 117 | ('GLASS', glass_keyword), 118 | ('GO', go_keyword), 119 | ('GRAB', take_keyword), 120 | ('GREETINGS', hello_keyword), 121 | ('GUARD', guard_keyword), 122 | ('HACKER', developer_keyword), 123 | ('HEAL', heal_keyword), 124 | ('HELICOPTER', helicopter_keyword), 125 | ('HELLO', hello_keyword), 126 | ('I', inventory_keyword), 127 | ('IN', in_keyword), 128 | ('INCANT', say_keyword), 129 | ('INFORMATION', information_keyword), 130 | ('INSIDE', in_keyword), 131 | ('INSTALL', install_keyword), 132 | ('INTO', in_keyword), 133 | ('INVENTORY', inventory_keyword), 134 | ('IS', is_keyword), 135 | ('JOURNAL', journal_keyword), 136 | ('JUMP', jump_keyword), 137 | ('JUNK', debris_keyword), 138 | ('KEY', keys_keyword), 139 | ('KEYPAD', keypad_keyword), 140 | ('KEYS', keys_keyword), 141 | ('KILL', kill_keyword), 142 | ('KIT', tape_keyword), 143 | ('L', look_keyword), 144 | ('LAMP', lamp_keyword), 145 | ('LANTERN', lamp_keyword), 146 | ('LEAVE', exit_keyword), 147 | ('LIGHTS', light_keyword), 148 | ('LIQUID', liquid_keyword), 149 | ('LISTINGS', listings_keyword), 150 | ('LOAD', put_keyword), 151 | ('LOCATE', locate_keyword), 152 | ('LOCK', lock_keyword), 153 | ('LOOK', look_keyword), 154 | ('MACHINE', machine_keyword), 155 | ('MAGAZINE', magazine_keyword), 156 | ('MAGIC', magic_keyword), 157 | ('MAHOGANY', mahogany_keyword), 158 | ('MAIL', mail_keyword), 159 | ('MANAGER', manager_keyword), 160 | ('MANUALS', manuals_keyword), 161 | ('MARKER', marker_keyword), 162 | ('ME', self_keyword), 163 | ('MEDIA', media_keyword), 164 | ('MENU', menu_keyword), 165 | ('MESSAGE', message_keyword), 166 | ('MIRROR', mirror_keyword), 167 | ('MONEY', money_keyword), 168 | ('MOUNT', put_keyword), 169 | ('MOVE', move_keyword), 170 | ('MUNG', kill_keyword), 171 | ('N', north_keyword), 172 | ('NE', north_east_keyword), 173 | ('NEEDLE', needle_keyword), 174 | ('NEON', neon_keyword), 175 | ('NEWSPAPER', newspaper_keyword), 176 | ('NORTH', north_keyword), 177 | ('NOTES', notes_keyword), 178 | ('NURSE', nurse_keyword), 179 | ('NW', north_west_keyword), 180 | ('OFF', off_keyword), 181 | ('OFFICER', officer_keyword), 182 | ('OLD', old_keyword), 183 | ('ON', on_keyword), 184 | ('OPEN', open_keyword), 185 | ('ORANGE', orange_keyword), 186 | ('OUT', out_keyword), 187 | ('PACK', pack_keyword), 188 | ('PANEL', panel_keyword), 189 | ('PATTERN', pattern_keyword), 190 | ('PEOPLE', people_keyword), 191 | ('PERSONNEL', personnel_keyword), 192 | ('PICK', pick_keyword), 193 | ('PLANT', plant_keyword), 194 | ('PLAY', play_keyword), 195 | ('PLEASE', please_keyword), 196 | ('PLUGH', plugh_keyword), 197 | ('POSSESSIONS', possessions_keyword), 198 | ('PRAY', pray_keyword), 199 | ('PRESSURE', pressure_keyword), 200 | ('PRINTER', console_keyword), 201 | ('PRODUCT', product_keyword), 202 | ('PROGRAMMER', developer_keyword), 203 | ('PROTOTYPE', prototype_keyword), 204 | ('PULL', move_keyword), 205 | ('PUSH', move_keyword), 206 | ('PUT', put_keyword), 207 | ('QUIET', brief_keyword), 208 | ('QUIT', quit_keyword), 209 | ('QUIZ', quiz_keyword), 210 | ('RACKS', racks_keyword), 211 | ('READ', read_keyword), 212 | ('RECEPTION', reception_keyword), 213 | ('RED', red_keyword), 214 | ('REMOVE', take_keyword), 215 | ('REP', rep_keyword), 216 | ('REPAIR', heal_keyword), 217 | ('REPRESENTATIVE', rep_keyword), 218 | (**) ('RESTART', restart_keyword), 219 | (**) ('RESTORE', restore_keyword), 220 | ('RODS', bars_keyword), 221 | ('ROOM', room_keyword), 222 | ('ROSE', rose_keyword), 223 | ('ROUTE3', route3_keyword), 224 | ('RTL', rtl_keyword), 225 | ('RUB', rub_keyword), 226 | ('RUG', rug_keyword), 227 | ('RUN', go_keyword), 228 | ('S', south_keyword), 229 | ('SACK', sack_keyword), 230 | ('SAFE', safe_keyword), 231 | ('SAILOR', sailor_keyword), 232 | ('SAVE', save_keyword), 233 | ('SAY', say_keyword), 234 | ('SCALE', scale_keyword), 235 | ('SCORE', score_keyword), 236 | ('SCRATCH', scratch_keyword), 237 | ('SCREAM', scream_keyword), 238 | ('SCREEN', terminal_keyword), 239 | ('SDC', sdc_keyword), 240 | ('SE', south_east_keyword), 241 | ('SECURITY', security_keyword), 242 | ('SELF', self_keyword), 243 | ('SERVICE', service_keyword), 244 | ('SHAKE', shake_keyword), 245 | ('SHUT', shut_keyword), 246 | ('SIGN', sign_keyword), 247 | ('SMASH', kill_keyword), 248 | ('SODA', coke_keyword), 249 | ('SOFTWARE', software_keyword), 250 | ('SOUTH', south_keyword), 251 | ('SPHERE', ball_keyword), 252 | ('STAIRS', stairwell_keyword), 253 | ('STAIRWELL', stairwell_keyword), 254 | ('STAND', stand_keyword), 255 | ('START', start_keyword), 256 | ('STEP', stand_keyword), 257 | ('STOP', stop_keyword), 258 | ('STRANGE', strange_keyword), 259 | ('SW', south_west_keyword), 260 | ('SWORD', sword_keyword), 261 | ('SYSTEM', system_keyword), 262 | ('TABLE', table_keyword), 263 | ('TAKE', take_keyword), 264 | ('TAPE', tape_keyword), 265 | ('TELL', tell_keyword), 266 | ('TEMPORARY', temporary_keyword), 267 | ('TERMINAL', terminal_keyword), 268 | ('THE', the_keyword), 269 | ('THEN', then_keyword), 270 | ('TIDBITS', information_keyword), 271 | ('TO', to_keyword), 272 | ('TODAY', today_keyword), 273 | ('TURN', turn_keyword), 274 | ('TYPE', type_keyword), 275 | ('U', up_keyword), 276 | ('UNLOCK', unlock_keyword), 277 | ('UP', up_keyword), 278 | ('USING', with_keyword), 279 | ('VAX', vax_keyword), 280 | ('VERBOSE', verbose_keyword), 281 | ('VERSION', version_keyword), 282 | ('VIDEO', video_keyword), 283 | ('VMS', vms_keyword), 284 | ('VT100', video_keyword), 285 | ('W', west_keyword), 286 | ('WAIT', wait_keyword), 287 | ('WALK', go_keyword), 288 | ('WALL', wall_keyword), 289 | ('WAVE', shake_keyword), 290 | ('WBL', edswbl_keyword), 291 | ('WEAR', wear_keyword), 292 | ('WEST', west_keyword), 293 | ('WHERE', where_keyword), 294 | ('WITH', with_keyword), 295 | ('WORKING', working_keyword), 296 | ('XYZZY', xyzzy_keyword), 297 | ('YELLOW', yellow_keyword), 298 | ('ZK', zk_keyword) ); 299 | 300 | procedure get_char(var c, n : char); 301 | begin 302 | if (current_line.length<>0) then 303 | begin 304 | line_pointer:=line_pointer+1; 305 | c:=current_line[line_pointer]; 306 | if (c<=' ') then c:=' '; 307 | if (line_pointer='A') and (c<='Z')) or 326 | ((c>='a') and (c<='z')) or 327 | ((c>='0') and (c<='9')) or 328 | (c='_') or (c='$') ) then 329 | begin 330 | symbol.token:=unknown; 331 | while ( ((n>='A') and (n<='Z')) or 332 | ((n>='a') and (n<='z')) or 333 | ((n>='0') and (n<='9')) or 334 | (n='_') or (n='$') ) do 335 | begin 336 | get_char(c,n); 337 | symbol.string:=symbol.string+c; 338 | end; 339 | end 340 | else 341 | begin 342 | case (c) of 343 | ',': symbol.token:=comma_symbol; 344 | '.': symbol.token:=period_symbol; 345 | '"': begin 346 | symbol.token:=text_string; 347 | symbol.string.length:=0; 348 | while ((n<>'"') and (n<>chr(13))) do 349 | begin 350 | get_char(c,n); 351 | symbol.string:=symbol.string+c; 352 | end; 353 | if (n<>chr(13)) then get_char(c,n) 354 | end; 355 | chr(13): begin 356 | symbol.token:=end_of_line; 357 | symbol.string:='END_OF_LINE'; 358 | end; 359 | otherwise 360 | symbol.token:=invalid; 361 | end; 362 | end; 363 | end; 364 | 365 | procedure convert_integer(var symbol : $symbol_desc); 366 | var d : integer; 367 | begin 368 | symbol.token:=integer_constant; 369 | symbol.value:=0; d:=0; 370 | while ( (d='0') and 375 | (symbol.string[d]<='9') ) then 376 | symbol.value := symbol.value*10 + 377 | ord(symbol.string[d])-48 378 | else symbol.token:=invalid; 379 | end; 380 | end; 381 | 382 | procedure lookup_keyword(var symbol : $symbol_desc); 383 | 384 | var found : boolean; 385 | t, m, b, state : integer; 386 | nl, kl : $uword; 387 | keyword_desc : [static] $descriptor := 388 | (0, dsc$k_dtype_t, dsc$k_class_s, 0); 389 | begin 390 | nl:=symbol.string.length; 391 | t:=1; b:=number_keywords; found:=false; 392 | while ( (b>=t) and (not found) ) do 393 | begin 394 | m:=t + (b - t) div 2; 395 | 396 | kl:=keyword_table[m].string.length; 397 | if ( (nl < kl) and (nl>=4) ) then 398 | keyword_desc.dsc$w_length:=nl 399 | else keyword_desc.dsc$w_length:=kl; 400 | keyword_desc.dsc$a_pointer:= 401 | iaddress(keyword_table[m].string.body); 402 | 403 | state:=$compare_vs_dx(symbol.string, keyword_desc); 404 | if (state=0) then found:=true 405 | else 406 | if (state=-1) then b:=m-1 else t:=m+1; 407 | end; 408 | 409 | if (found) then symbol.token:=keyword_table[m].token 410 | else 411 | symbol.token:=unknown; 412 | end; 413 | 414 | procedure case_string( 415 | var string : varying[$u1] of char; 416 | lower : boolean); 417 | 418 | var i : integer; 419 | begin 420 | for i:=1 to string.length do 421 | if (string[i]::$bit7.bit6) then 422 | string[i]::$bit7.bit5:=lower; 423 | end; 424 | 425 | procedure recognize_token(var symbol : $symbol_desc); 426 | begin 427 | if (symbol.token=unknown) then 428 | begin 429 | if ( (symbol.string[1]>='0') and (symbol.string[1]<='9') ) then 430 | convert_integer(symbol) 431 | else 432 | begin 433 | case_string(symbol.string, lower:=false); 434 | lookup_keyword(symbol); 435 | case_string(symbol.string, lower:=true); 436 | end; 437 | end; 438 | end; 439 | 440 | [global] function zk$init_lex : unsigned; 441 | begin 442 | line_pointer:=0; 443 | $message(0); 444 | zk$init_lex:=$get_composed_line(current_line, '>'); 445 | end; 446 | 447 | [global] procedure zk$advance_symbol; 448 | begin 449 | get_token(current_symbol); 450 | recognize_token(current_symbol); 451 | end; 452 | 453 | [global] procedure zk$get_symbol(var symbol : $symbol_desc); 454 | begin 455 | symbol:=current_symbol; 456 | end; 457 | 458 | end. 459 | --------------------------------------------------------------------------------