home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume21 / p2c / part04 < prev    next >
Text File  |  1990-04-05  |  51KB  |  1,728 lines

  1. Subject:  v21i049:  Pascal to C translator, Part04/32
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: 486b3823 1a37e96d 9c306c2d 0ab06d9b
  5.  
  6. Submitted-by: Dave Gillespie <daveg@csvax.caltech.edu>
  7. Posting-number: Volume 21, Issue 49
  8. Archive-name: p2c/part04
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 4 (of 32)."
  17. # Contents:  HP/import/iodecl.imp HP/include/sysdevs.h
  18. #   examples/basic.doc examples/cref.p
  19. # Wrapped by rsalz@litchi.bbn.com on Mon Mar 26 14:29:28 1990
  20. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  21. if test -f 'HP/import/iodecl.imp' -a "${1}" != "-c" ; then 
  22.   echo shar: Will not clobber existing file \"'HP/import/iodecl.imp'\"
  23. else
  24. echo shar: Extracting \"'HP/import/iodecl.imp'\" \(11318 characters\)
  25. sed "s/^X//" >'HP/import/iodecl.imp' <<'END_OF_FILE'
  26. X
  27. X
  28. X{IncludeFrom=iodeclarations <p2c/iodecl.h>}
  29. X
  30. X
  31. X{*VarStrings=0} {*ExportSymbol=P_%s} {*Export_Symbol=%s}
  32. X
  33. X
  34. XMODULE IODECLARATIONS;
  35. XIMPORT  sysglobals;
  36. X
  37. XEXPORT
  38. X
  39. X   CONST
  40. X      iominisc   = 0 ;
  41. X      iomaxisc   = 31;
  42. X      minrealisc = 7 ;
  43. X      maxrealisc = 31;
  44. X
  45. X      io_line_feed    = CHR(10);
  46. X      io_carriage_rtn = CHR(13);
  47. X
  48. X      ioescapecode    =  -26;
  49. X
  50. X      ioe_no_error    = 0;
  51. X      ioe_no_card     = 1;
  52. X      ioe_not_hpib    = 2;
  53. X      ioe_not_act     = 3;
  54. X      ioe_not_dvc     = 4;
  55. X      ioe_no_space    = 5;
  56. X      ioe_no_data     = 6;
  57. X      ioe_bad_tfr     = 7;
  58. X      ioe_isc_busy    = 8;
  59. X      ioe_buf_busy    = 9;
  60. X      ioe_bad_cnt     = 10;
  61. X      ioe_bad_tmo     = 11;
  62. X      ioe_no_driver   = 12;
  63. X      ioe_no_dma      = 13;
  64. X      ioe_no_word     = 14;
  65. X      ioe_not_talk    = 15;
  66. X      ioe_not_lstn    = 16;
  67. X      ioe_timeout     = 17;
  68. X      ioe_not_sctl    = 18;
  69. X      ioe_rds_wtc     = 19;
  70. X      ioe_bad_sct     = 20;
  71. X      ioe_crd_dwn     = 21;
  72. X      ioe_eod_seen    = 22;
  73. X      ioe_misc        = 23;
  74. X
  75. X      ioe_sr_toomany  = 304;
  76. X      ioe_dc_fail     = 306;
  77. X      ioe_dc_usart    = 313;
  78. X      ioe_dc_ovfl     = 314;
  79. X      ioe_dc_clk      = 315;
  80. X      ioe_dc_cts      = 316;
  81. X      ioe_dc_car      = 317;
  82. X      ioe_dc_act      = 318;
  83. X      ioe_dc_conn     = 319;
  84. X      ioe_dc_conf     = 325;
  85. X      ioe_dc_reg      = 326;
  86. X      ioe_dc_rval     = 327;
  87. X      ioe_sr_fail     = 353;
  88. X
  89. X      no_isc          = 255;
  90. X
  91. X      gtl_message     = CHR( 1  );
  92. X      sdc_message     = CHR( 4  );
  93. X      ppc_message     = CHR( 5  );
  94. X      get_message     = CHR( 8  );
  95. X      tct_message     = CHR( 9  );
  96. X      llo_message     = CHR( 17 );
  97. X      dcl_message     = CHR( 20 );
  98. X      ppu_message     = CHR( 21 );
  99. X      spe_message     = CHR( 24 );
  100. X      spd_message     = CHR( 25 );
  101. X      unl_message     = CHR( 63 );
  102. X      unt_message     = CHR( 95 );
  103. X      ppe_message     = CHR( 96 );
  104. X      ppd_message     = CHR(112 );
  105. X
  106. X      talk_constant   = 64;
  107. X      listen_constant = 32;
  108. X
  109. X      no_card         = 0 ;
  110. X      other_card      = 1 ;
  111. X
  112. X      system_card     = 2 ;
  113. X      hpib_card       = 3 ;
  114. X      gpio_card       = 4 ;
  115. X      serial_card     = 5 ;
  116. X      graphics_card   = 6 ;
  117. X      srm_card        = 7 ;
  118. X      bubble_card     = 8 ;
  119. X      eprom_prgmr     = 9 ;
  120. X
  121. X      hp98628_dsndl   = -7;
  122. X      hp98629         = -6;
  123. X      hp_datacomm     = -5;
  124. X      hp98620         = -4;
  125. X      internal_kbd    = -3;
  126. X      internal_crt    = -2;
  127. X      internal_hpib   = -1;
  128. X
  129. X      no_id           =  0;
  130. X
  131. X      hp98624         =  1;
  132. X      hp98626         =  2;
  133. X
  134. X      hp98622         =  3;
  135. X      hp98623         =  4;
  136. X      hp98625         =  8;
  137. X      hp98628_async   = 20;
  138. X      hpGATOR         = 25;
  139. X      hp98253         = 27;
  140. X      hp98627         = 28;
  141. X      hp98259         = 30;
  142. X      hp98644         = 66;
  143. X
  144. X
  145. X
  146. X   TYPE
  147. X      type_isc        = iominisc..iomaxisc ;
  148. X      type_device     = iominisc..iomaxisc*100+99;
  149. X      io_bit          = 0..15 ;
  150. X      io_byte         = 0..255 ;
  151. X      io_word         = -32768..32767 ;
  152. X      io_string       =
  153. X      STRING[255];
  154. X      io_proc_type    = PROCEDURE;
  155. X      errlnk_type     = PROCEDURE ( errorcode : INTEGER ; VAR s     : io_string );
  156. X
  157. X      type_of_card    = io_word;
  158. X      type_card_id    = io_word;
  159. X
  160. X
  161. X
  162. X
  163. X      type_hpib_addr  = 0..31 ;
  164. X      type_hpib_line  = ( ren_line ,
  165. X                          ifc_line ,
  166. X                          srq_line ,
  167. X                          eoi_line ,
  168. X                          nrfd_line ,
  169. X                          ndac_line ,
  170. X                          dav_line ,
  171. X                          atn_line
  172. X                        ) ;
  173. X
  174. X
  175. X
  176. X
  177. X      type_parity     = ( no_parity ,
  178. X                          odd_parity ,
  179. X                          even_parity ,
  180. X                          zero_parity ,
  181. X                          one_parity
  182. X                        );
  183. X      type_serial_line= ( rts_line ,
  184. X                          cts_line ,
  185. X                          dcd_line ,
  186. X                          dsr_line ,
  187. X                          drs_line ,
  188. X                          ri_line  ,
  189. X
  190. X                          dtr_line
  191. X                        );
  192. X
  193. X
  194. X
  195. X      io_proc         = PROCEDURE ( temp  : ANYPTR );
  196. X      io_proc_c       = PROCEDURE ( temp  : ANYPTR; v     : CHAR );
  197. X      io_proc_vc      = PROCEDURE ( temp  : ANYPTR; VAR v : CHAR);
  198. X      io_proc_w       = PROCEDURE ( temp  : ANYPTR; v     : io_word );
  199. X      io_proc_vw      = PROCEDURE ( temp  : ANYPTR; VAR v : io_word );
  200. X      io_proc_s       = PROCEDURE ( temp  : ANYPTR; reg   : io_word ;
  201. X                                    v     : io_word );
  202. X      io_proc_vs      = PROCEDURE ( temp  : ANYPTR; reg   : io_word ;
  203. X                                    VAR v : io_word );
  204. X      io_proc_l       = PROCEDURE ( temp  : ANYPTR; line  : io_bit );
  205. X      io_proc_vl      = PROCEDURE ( temp  : ANYPTR; line  : io_bit ;
  206. X                                    VAR v : BOOLEAN );
  207. X      io_proc_vb      = PROCEDURE ( temp  : ANYPTR; VAR v : BOOLEAN );
  208. X      io_proc_ptr     = PROCEDURE ( temp  : ANYPTR; v     : ANYPTR );
  209. X
  210. X      drv_table_type  = RECORD
  211. X                           iod_init  : io_proc ;
  212. X                           iod_isr   : ISRPROCTYPE ;
  213. X                           iod_rdb   : io_proc_vc ;
  214. X                           iod_wtb   : io_proc_c ;
  215. X                           iod_rdw   : io_proc_vw ;
  216. X                           iod_wtw   : io_proc_w ;
  217. X                           iod_rds   : io_proc_vs ;
  218. X                           iod_wtc   : io_proc_s ;
  219. X                           iod_end   : io_proc_vb ;
  220. X                           iod_tfr   : io_proc_ptr ;
  221. X                           iod_send  : io_proc_c;
  222. X                           iod_ppoll : io_proc_vc ;
  223. X                           iod_set   : io_proc_l ;
  224. X                           iod_clr   : io_proc_l ;
  225. X                           iod_test  : io_proc_vl ;
  226. X                        END;
  227. X
  228. X
  229. X
  230. X      io_funny_proc   = RECORD
  231. X                           CASE BOOLEAN OF
  232. X                              TRUE: ( real_proc : io_proc );
  233. X                              FALSE: ( dummy_pr  : ANYPTR ; dummy_sl  : ANYPTR )
  234. X                        END;
  235. X
  236. X      io_temp_type    = PACKED RECORD
  237. X                           myisrib   : ISRIB ;
  238. X                           user_isr  : io_funny_proc;
  239. X                           user_parm : ANYPTR ;
  240. X                           card_addr : ANYPTR ;
  241. X                           in_bufptr : ANYPTR ;
  242. X                           out_bufptr: ANYPTR ;
  243. X                           eirbyte   : CHAR ;
  244. X                           my_isc    : io_byte ;
  245. X                           timeout   : INTEGER ;
  246. X                           addressed : io_word ;
  247. X                           drv_misc  : ARRAY[1..32] OF CHAR ;
  248. X                        END;
  249. X
  250. X      io_temp_type2   = PACKED RECORD
  251. X                           myisrib   : ISRIB ;
  252. X                           user_isr  : io_funny_proc;
  253. X                           user_parm : ANYPTR ;
  254. X                           card_addr : ANYPTR ;
  255. X                           in_bufptr : ANYPTR ;
  256. X                           out_bufptr: ANYPTR ;
  257. X                           eirbyte   : CHAR ;
  258. X                           my_isc    : io_byte ;
  259. X                           timeout   : INTEGER ;
  260. X                           addressed : io_word ;
  261. X                           drv_misc  : ARRAY[1..128] OF CHAR ;
  262. X                        END;
  263. X
  264. X      io_temp_type3   = PACKED RECORD
  265. X                           myisrib   : ISRIB ;
  266. X                           user_isr  : io_funny_proc;
  267. X                           user_parm : ANYPTR ;
  268. X                           card_addr : ANYPTR ;
  269. X                           in_bufptr : ANYPTR ;
  270. X                           out_bufptr: ANYPTR ;
  271. X                           eirbyte   : CHAR ;
  272. X                           my_isc    : io_byte ;
  273. X                           timeout   : INTEGER ;
  274. X                           addressed : io_word ;
  275. X                           drv_misc  : ARRAY[1..160] OF CHAR ;
  276. X                        END;
  277. X
  278. X      io_temp_type4   = PACKED RECORD
  279. X                           myisrib   : ISRIB ;
  280. X                           user_isr  : io_funny_proc;
  281. X                           user_parm : ANYPTR ;
  282. X                           card_addr : ANYPTR ;
  283. X                           in_bufptr : ANYPTR ;
  284. X                           out_bufptr: ANYPTR ;
  285. X                           eirbyte   : CHAR ;
  286. X                           my_isc    : io_byte ;
  287. X                           timeout   : INTEGER ;
  288. X                           addressed : io_word ;
  289. X                           drv_misc  : ARRAY[1..164] OF CHAR ;
  290. X                        END;
  291. X
  292. X
  293. X      pio_tmp_ptr     = ^io_temp_type;
  294. X
  295. X
  296. X      isc_table_type  = RECORD
  297. X                           io_drv_ptr: ^drv_table_type;
  298. X                           io_tmp_ptr: pio_tmp_ptr;
  299. X                           card_type : type_of_card;
  300. X                           user_time : INTEGER;
  301. X                           card_id   : type_card_id;
  302. X                           card_ptr  : ANYPTR;
  303. X                        END;
  304. X
  305. X
  306. X
  307. X      user_tfr_type   = ( dummy_tfr_1 ,
  308. X                          serial_DMA ,
  309. X                          serial_FHS ,
  310. X                          serial_FASTEST ,
  311. X                          dummy_tfr_2 ,
  312. X                          overlap_INTR ,
  313. X                          overlap_DMA ,
  314. X                          overlap_FHS ,
  315. X                          overlap_FASTEST ,
  316. X                          OVERLAP ) ;
  317. X                          actual_tfr_type = ( no_tfr ,
  318. X                          INTR_tfr ,
  319. X                          DMA_tfr ,
  320. X                          BURST_tfr ,
  321. X                          FHS_tfr
  322. X                        ) ;
  323. X      dir_of_tfr      = ( to_memory,
  324. X                          from_memory
  325. X                        ) ;
  326. X
  327. X      buf_type        = PACKED ARRAY[0..maxint] OF CHAR;
  328. X
  329. X      buf_info_type   = RECORD
  330. X                           drv_tmp_ptr : pio_tmp_ptr;
  331. X                           active_isc  : io_byte;
  332. X                           act_tfr     : actual_tfr_type ;
  333. X                           usr_tfr     : user_tfr_type ;
  334. X                           b_w_mode    : BOOLEAN ;
  335. X                           end_mode    : BOOLEAN ;
  336. X                           direction   : dir_of_tfr ;
  337. X                           term_char   : -1..255 ;
  338. X                           term_count  : INTEGER ;
  339. X                           buf_ptr     : ^buf_type ;
  340. X                           buf_size    : INTEGER ;
  341. X                           buf_empty   : ANYPTR ;
  342. X                           buf_fill    : ANYPTR ;
  343. X                           eot_proc    : io_funny_proc;
  344. X                           eot_parm    : ANYPTR ;
  345. X                           dma_priority: BOOLEAN;
  346. X                        END;
  347. X
  348. X   VAR
  349. X      dma_ch_0        : io_funny_proc ;
  350. X      dma_isc_0       : io_byte ;
  351. X      dma_ch_1        : io_funny_proc ;
  352. X      dma_isc_1       : io_byte ;
  353. X      dma_isrib0      : ISRIB ;
  354. X      dma_isrib1      : ISRIB ;
  355. X      dma_here        : BOOLEAN;
  356. X
  357. X      io_work_char    : CHAR;
  358. X
  359. X      ioe_result      : INTEGER;
  360. X      ioe_isc         : INTEGER;
  361. X
  362. X      isc_table       : PACKED ARRAY [type_isc]
  363. X      OF isc_table_type;
  364. X
  365. X      io_revid        : STRING[96];
  366. X
  367. X      io_error_link   : errlnk_type;
  368. X
  369. X   PROCEDURE io_escape   ( my_code    : INTEGER ; select_code: INTEGER);
  370. X   FUNCTION  io_find_isc ( iod_temp   : ANYPTR ): io_byte;
  371. XEND.
  372. X
  373. END_OF_FILE
  374. if test 11318 -ne `wc -c <'HP/import/iodecl.imp'`; then
  375.     echo shar: \"'HP/import/iodecl.imp'\" unpacked with wrong size!
  376. fi
  377. # end of 'HP/import/iodecl.imp'
  378. fi
  379. if test -f 'HP/include/sysdevs.h' -a "${1}" != "-c" ; then 
  380.   echo shar: Will not clobber existing file \"'HP/include/sysdevs.h'\"
  381. else
  382. echo shar: Extracting \"'HP/include/sysdevs.h'\" \(12249 characters\)
  383. sed "s/^X//" >'HP/include/sysdevs.h' <<'END_OF_FILE'
  384. X/* Header for module SYSDEVS, generated by p2c */
  385. X#ifndef SYSDEVS_H
  386. X#define SYSDEVS_H
  387. X
  388. X
  389. X
  390. X#ifndef SYSGLOBALS_H
  391. X#include <p2c/sysglobals.h>
  392. X#endif
  393. X
  394. X
  395. X
  396. X#ifdef SYSDEVS_G
  397. X# define vextern
  398. X#else
  399. X# define vextern extern
  400. X#endif
  401. X
  402. X
  403. X
  404. X/** DUMMY DECLARATIONS ***********************************/
  405. X/** CRT **************************************************/
  406. X/****** THIS SECTION HAS HARD OFFSET REFERENCES **********/
  407. X/*      IN MODULES CRTB (ASSY FILE GASSM)                */
  408. X
  409. X
  410. X
  411. X/* 3/25/85 */
  412. X/* 3/25/85 */
  413. X/*built in crt*/
  414. X/* CRT CONTROL CHARS */
  415. X/* CRT INFO & INPUT CHARS */
  416. X
  417. Xtypedef union CRTWORD {
  418. X    struct {
  419. X    Char HIGHLIGHTBYTE, CHARACTER;
  420. X    } U1;
  421. X    short WHOLEWORD;
  422. X} CRTWORD;
  423. X
  424. Xtypedef enum {
  425. X    CLLPUT, CLLSHIFTL, CLLSHIFTR, CLLCLEAR, CLLDISPLAY, PUTSTATUS
  426. X} CRTLLOPS;
  427. X
  428. Xtypedef enum {
  429. X    DBINFO, DBEXCG, DBGOTOXY, DBPUT, DBINIT, DBCLEAR, DBCLINE, DBSCROLLUP,
  430. X    DBSCROLLDN, DBSCROLLL, DBSCROLLR, DBHIGHL
  431. X} DBCRTOPS;
  432. X
  433. Xtypedef struct DBCINFO {
  434. X    Char *SAVEAREA;
  435. X    long SAVESIZE, DCURSORADDR;
  436. X    short XMIN, XMAX, YMIN, YMAX, CURSX, CURSY;
  437. X    Char C;
  438. X    boolean AREAISDBCRT, CHARISMAPPED;
  439. X    short DEBUGHIGHLIGHT;
  440. X} DBCINFO;
  441. X
  442. Xtypedef uchar crtconsttype[12];
  443. X
  444. Xtypedef struct crtfrec {
  445. X    unsigned nobreak : 1, stupid : 1, slowterm : 1, hasxycrt : 1,
  446. X         haslccrt : 1, hasclock : 1, canupscroll : 1, candownscroll : 1;
  447. X} crtfrec;
  448. X
  449. Xtypedef unsigned short b9;
  450. X
  451. Xtypedef unsigned short b14;
  452. X
  453. Xtypedef struct crtcrec {
  454. X    Char rlf, ndfs, eraseeol, eraseeos, home, escape, backspace;
  455. X    uchar fillcount;
  456. X    Char clearscreen, clearline;
  457. X    unsigned short prefixed;
  458. X} crtcrec;
  459. X
  460. Xtypedef struct crtirec {
  461. X    short width, height;
  462. X    long crtmemaddr, crtcontroladdr, keybufferaddr, progstateinfoaddr;
  463. X    short keybuffersize;
  464. X    crtconsttype crtcon;
  465. X    Char right, left, down, up, badch, chardel, stop, break_, flush, eof,
  466. X     altmode, linedel, backspace, etx, prefix;
  467. X    unsigned short prefixed;
  468. X    long cursormask, spare;
  469. X} crtirec;
  470. X
  471. Xtypedef struct environ {
  472. X    crtfrec miscinfo;
  473. X    long crttype;
  474. X    crtcrec crtctrl;
  475. X    crtirec crtinfo;
  476. X} environ;
  477. X
  478. Xtypedef enum {
  479. X    NOCRT, ALPHATYPE, BITMAPTYPE, SPECIALCRT1, SPECIALCRT2
  480. X} crtkinds;
  481. X
  482. X
  483. X
  484. X/* CURSOR X POSITION */
  485. X/* CURSOR Y POSITION */
  486. X/* ACTIVE ALPHA DRIVER TYPE */
  487. X/* ADDRESS OF BITMAP CONTROL SPACE */
  488. X/* ADDRESS OF BITMAP FRAME BUFFER */
  489. X/* REGISTER COPIES FOR BITMAP DISPLAY */
  490. X/* MUST BE IN GLOBALS BECAUSE REGISTERS */
  491. X/* ARE NOT READABLE -- MAY BE UNDEFINED */
  492. X/** KEYBOARD ********************************************/
  493. X#define KBD_ENABLE      0
  494. X#define KBD_DISABLE     1
  495. X#define SET_AUTO_DELAY  2
  496. X#define SET_AUTO_REPEAT 3
  497. X#define GET_AUTO_DELAY  4
  498. X#define GET_AUTO_REPEAT 5
  499. X#define SET_KBDTYPE     6
  500. X#define SET_KBDLANG     7
  501. X
  502. X
  503. X
  504. X/*ADDED FOR 3.1--SFB-5/22/85*/
  505. X
  506. Xtypedef enum {
  507. X    NOKBD, LARGEKBD, SMALLKBD, ITFKBD, SPECIALKBD1, SPECIALKBD2
  508. X} KEYBOARDTYPE;
  509. X
  510. Xtypedef enum {
  511. X    NO_KBD, FINISH_KBD, BELGIAN_KBD, CDN_ENG_KBD, CDN_FR_KBD, NORWEGIAN_KBD,
  512. X    DANISH_KBD, DUTCH_KBD, SWISS_GR_KBD, SWISS_FR_KBD, SPANISH_EUR_KBD,
  513. X    SPANISH_LATIN_KBD, UK_KBD, ITALIAN_KBD, FRENCH_KBD, GERMAN_KBD,
  514. X    SWEDISH_KBD, SPANISH_KBD, KATAKANA_KBD, US_KBD, ROMAN8_KBD, NS1_KBD,
  515. X    NS2_KBD, NS3_KBD, SWISS_GR_B_KBD, SWISS_FR_B_KBD
  516. X} LANGTYPE;
  517. X
  518. Xtypedef enum {
  519. X    M_NONE, M_SYSNORM, M_SYSSHIFT, M_U1, M_U2, M_U3, M_U4
  520. X} MENUTYPE;
  521. X
  522. X
  523. X
  524. X/* KEYBOARD CONFIGURATION JUMPER */
  525. X/** ENABLE / DISABLE *************************************/
  526. X#define KBDMASK         1
  527. X#define RESETMASK       2
  528. X#define TIMERMASK       4
  529. X#define PSIMASK         8
  530. X#define FHIMASK         16
  531. X
  532. X
  533. X
  534. X/* ENABLE, DISABLE */
  535. X/** BEEPER ***********************************************/
  536. X/** RPG **************************************************/
  537. X#define RPG_ENABLE      0
  538. X#define RPG_DISABLE     1
  539. X#define SET_RPG_RATE    2
  540. X#define GET_RPG_RATE    3
  541. X
  542. X
  543. X
  544. X/** BATTERY **********************************************/
  545. X
  546. X
  547. X
  548. X/** CLOCK ************************************************/
  549. X/*CUPDATE ADDED FOR BOBCAT 4/11/85 SFB*/
  550. X
  551. Xtypedef struct RTCTIME {
  552. X    long PACKEDTIME, PACKEDDATE;
  553. X} RTCTIME;
  554. X
  555. Xtypedef enum {
  556. X    CGETDATE, CGETTIME, CSETDATE, CSETTIME
  557. X} CLOCKFUNC;
  558. X
  559. Xtypedef enum {
  560. X    CGET, CSET, CUPDATE
  561. X} CLOCKOP;
  562. X
  563. Xtypedef union CLOCKDATA {
  564. X    timerec TIMETYPE;
  565. X    daterec DATETYPE;
  566. X} CLOCKDATA;
  567. X
  568. X
  569. X
  570. X/* CLOCK MODULE INTERFACE */
  571. X/* CARD DRIVER INTERFACE */
  572. X/** TIMER ************************************************/
  573. X
  574. Xtypedef enum {
  575. X    CYCLICT, PERIODICT, DELAYT, DELAY7T, MATCHT
  576. X} TIMERTYPES;
  577. X
  578. Xtypedef enum {
  579. X    SETT, READT, GETTINFO
  580. X} TIMEROPTYPE;
  581. X
  582. Xtypedef union TIMERDATA {
  583. X    long COUNT;
  584. X    timerec MATCH;
  585. X    struct {
  586. X    long RESOLUTION, RANGE;
  587. X    } U2;
  588. X} TIMERDATA;
  589. X
  590. X
  591. X
  592. X/** KEYBUFFER ********************************************/
  593. X#define KMAXBUFSIZE     255
  594. X
  595. X
  596. X
  597. Xtypedef enum {
  598. X    KGETCHAR, KAPPEND, KNONADVANCE, KCLEAR, KDISPLAY, KGETLAST, KPUTFIRST
  599. X} KOPTYPE;
  600. X
  601. Xtypedef Char KBUFTYPE[KMAXBUFSIZE + 1];
  602. X
  603. Xtypedef struct KBUFREC {
  604. X    boolean ECHO;
  605. X    Char NON_CHAR;
  606. X    long MAXSIZE, SIZE, INP, OUTP;
  607. X    Char *BUFFER;
  608. X} KBUFREC;
  609. X
  610. X
  611. X
  612. X/*0  s or f = STEP/FLASH IN PROGRESS (WAITING FOR TRAP #0)*/
  613. X/*1..5  last executed/current line number */
  614. X/*6  S=SYSTEM  U=USER  DEFINITION FOR ITF SOFT KEYS*/
  615. X/*   BLANK FOR NON ITF KEYBOARDS */
  616. X/*7  RUNLIGHT */
  617. X/** KEY TRANSLATION SERVICES *********************************/
  618. X/* ADDED NONA_ALPHA_KEY 5/9/84 RQ/SFB */
  619. X
  620. Xtypedef enum {
  621. X    KPASSTHRU, KSHIFT_EXTC, KPASS_EXTC
  622. X} KEYTRANSTYPE;
  623. X
  624. Xtypedef enum {
  625. X    ALPHA_KEY, NONADV_KEY, SPECIAL_KEY, IGNORED_KEY, NONA_ALPHA_KEY
  626. X} KEYTYPE;
  627. X
  628. Xtypedef struct LANGCOMREC {
  629. X    uchar STATUS, DATA;
  630. X    Char KEY;
  631. X    KEYTYPE RESULT;
  632. X    boolean SHIFT, CONTROL, EXTENSION;
  633. X} LANGCOMREC;
  634. X
  635. Xtypedef struct LANGKEYREC {
  636. X    boolean NO_CAPSLOCK, NO_SHIFT, NO_CONTROL, NO_EXTENSION;
  637. X    KEYTYPE KEYCLASS;
  638. X    Char KEYS[2];
  639. X} LANGKEYREC;
  640. X
  641. Xtypedef struct LANGRECORD {
  642. X    boolean CAN_NONADV;
  643. X    LANGTYPE LANGCODE;
  644. X    _PROCEDURE SEMANTICS;
  645. X    LANGKEYREC KEYTABLE[128];
  646. X} LANGRECORD;
  647. X
  648. X
  649. X
  650. X/** HPHIL ************************************************/
  651. X/*MOVED INTO SYSDEVS 4/6/84 SFB*/
  652. X#define le_configured   0x80
  653. X#define le_error        0x81
  654. X#define le_timeout      0x82
  655. X#define le_loopdown     0x84
  656. X#define lmaxdevices     7
  657. X
  658. X
  659. X
  660. X/*UNINIT ADDED 4/8/85 SFB*/
  661. X/*HPHILOP DEFINED AS NEW TYPE 4/6/84 SFB*/
  662. X/*5 PROCEDURES HOOKED AS TYPE HPHILCMDPROC 4/6/84 SFB*/
  663. X/* DEVICE DESCRIBE RECORD */
  664. X/* reserved : 0..3;        {DELETED 3/25/85 SFB*/
  665. X/*3/27/85 SFB*/
  666. X/*3/26/85 SFB*/
  667. X/*ADDED 3/15/85 SFB*/
  668. X/*ADDED 3/15/85 SFB*/
  669. X/*REDEFINED AS RECORD - 4/6/84 SFB*/
  670. X/* last loop command sent */
  671. X/* data bye in / out */
  672. X/* error occured on last operation */
  673. X/* now doing reconfigure */
  674. X/* last sent command is done */
  675. X/* loop is configured */
  676. X/* reading poll data */
  677. X/* 3.0 BUG #39 3/17/84 */
  678. X
  679. Xtypedef enum {
  680. X    datastarting, dataended, resetdevice, uninitdevice
  681. X} loopdvrop;
  682. X
  683. Xtypedef enum {
  684. X    RAWSHIFTOP, NORMSHIFTOP, CHECKLOOPOP, CONFIGUREOP, LCOMMANDOP
  685. X} HPHILOP;
  686. X
  687. Xtypedef union descriprec {
  688. X    struct {
  689. X    uchar id;
  690. X    unsigned twosets : 1, abscoords : 1, size16 : 1, hasprompts : 1,
  691. X         ext_desc : 1, security : 1, numaxes : 2;
  692. X    Signed int counts : 16, maxcountx : 16, maxcounty : 16,
  693. X           maxcountz : 16;
  694. X    unsigned promptack : 1, nprompts : 3, proximity : 1, nbuttons : 3;
  695. X    } U1;
  696. X    Char darray[11];
  697. X} descriprec;
  698. X
  699. Xtypedef struct devicerec {
  700. X    long devstate;
  701. X    descriprec descrip;
  702. X    _PROCEDURE opsproc;
  703. X    _PROCEDURE dataproc;
  704. X} devicerec;
  705. X
  706. Xtypedef struct loopdriverrec {
  707. X    uchar lowid, highid, daddr;
  708. X    _PROCEDURE opsproc;
  709. X    _PROCEDURE dataproc;
  710. X    struct loopdriverrec *next;
  711. X} loopdriverrec;
  712. X
  713. Xtypedef struct LOOPCONTROLREC {
  714. X    boolean rawmode;
  715. X    devicerec loopdevices[lmaxdevices];
  716. X    char loopdevice;
  717. X    uchar loopcmd, loopdata;
  718. X    boolean looperror, loopinconfig, loopcmddone, loopisok, loopdevreading;
  719. X} LOOPCONTROLREC;
  720. X
  721. X
  722. X
  723. X/*NEW TO END OF HPHIL_COMM_REC TYPE 3/26/85 SFB*/
  724. X/*DRIVER TYPES*/
  725. X#define NODRIVER        0
  726. X#define ABSLOCATOR      1
  727. X
  728. X/*range 1..15 reserved for DGL*/
  729. X/*CODETYPES FROM POLLBLOCK (OR OTHER HPHIL OPCODE)*/
  730. X#define NOCODES         0
  731. X#define ASCIICODES      1
  732. X#define SET1CODES       2
  733. X#define SET2CODES       3
  734. X
  735. X
  736. X
  737. X/*3/25/85 SFB*/
  738. X/*3/25/85 SFB*/
  739. X/*stop updating data after button press/event*/
  740. X/*capture data in ISR*/
  741. X/*dvr_comm_rec busy, delay update from ISR*/
  742. X/*bit/loopaddress that driver should service */
  743. X/*                                    put 0 where driver should NOT service device */
  744. X/*                                    with this dvr_comm_rec !*/
  745. X/*call update to flush delayed poll data update*/
  746. X/*next comm record*/
  747. X/*for extensibility use as pointer/datarec*/
  748. X/*HPHIL intrinsic data types from poll/command*/
  749. X/*describes content of codes*/
  750. X/*extensible for variant*/
  751. X
  752. Xtypedef union HPHIL_COMM_REC_TYPE {
  753. X    struct {
  754. X    short dvr_type;
  755. X    char dev_addr;
  756. X    boolean latch, active, reading;
  757. X    uchar devices;
  758. X    _PROCEDURE update;
  759. X    union HPHIL_COMM_REC_TYPE *link;
  760. X    long extend;
  761. X    short xloc, yloc, zloc, codetype, ncodes;
  762. X    Char codes[16];
  763. X    } U1;
  764. X    Char barray[54];
  765. X} HPHIL_COMM_REC_TYPE;
  766. X
  767. X
  768. X
  769. Xvextern environ *SYSCOM;
  770. Xvextern boolean ALPHASTATE, GRAPHICSTATE;
  771. Xvextern _PROCEDURE CRTIOHOOK;
  772. Xvextern _PROCEDURE TOGGLEALPHAHOOK;
  773. Xvextern _PROCEDURE TOGGLEGRAPHICSHOOK;
  774. Xvextern _PROCEDURE DUMPALPHAHOOK;
  775. Xvextern _PROCEDURE DUMPGRAPHICSHOOK;
  776. Xvextern _PROCEDURE UPDATECURSORHOOK;
  777. Xvextern _PROCEDURE CRTINITHOOK;
  778. Xvextern _PROCEDURE CRTLLHOOK;
  779. Xvextern _PROCEDURE DBCRTHOOK;
  780. Xvextern short XPOS, YPOS;
  781. Xvextern crtkinds CURRENTCRT;
  782. Xvextern long BITMAPADDR, FRAMEADDR;
  783. Xvextern short REPLREGCOPY, WINDOWREGCOPY, WRITEREGCOPY;
  784. Xvextern _PROCEDURE KBDREQHOOK;
  785. Xvextern _PROCEDURE KBDIOHOOK;
  786. Xvextern _PROCEDURE KBDISRHOOK;
  787. Xvextern _PROCEDURE KBDPOLLHOOK;
  788. Xvextern KEYBOARDTYPE KBDTYPE;
  789. Xvextern uchar KBDCONFIG;
  790. Xvextern LANGTYPE KBDLANG;
  791. Xvextern Char *SYSMENU, *SYSMENUSHIFT;
  792. Xvextern MENUTYPE MENUSTATE;
  793. Xvextern _PROCEDURE MASKOPSHOOK, BEEPERHOOK;
  794. Xvextern uchar BFREQUENCY, BDURATION;
  795. Xvextern _PROCEDURE RPGREQHOOK;
  796. Xvextern _PROCEDURE RPGISRHOOK;
  797. Xvextern boolean BATTERYPRESENT;
  798. Xvextern _PROCEDURE BATCMDHOOK;
  799. Xvextern _PROCEDURE BATREADHOOK;
  800. Xvextern _PROCEDURE CLOCKREQHOOK;
  801. Xvextern _PROCEDURE CLOCKIOHOOK;
  802. Xvextern _PROCEDURE TIMERIOHOOK;
  803. Xvextern _PROCEDURE TIMERISRHOOK;
  804. Xvextern KBUFREC *KEYBUFFER;
  805. Xvextern _PROCEDURE KBDWAITHOOK;
  806. Xvextern _PROCEDURE KBDRELEASEHOOK;
  807. Xvextern Char STATUSLINE[8];
  808. Xvextern LANGCOMREC LANGCOM;
  809. Xvextern LANGRECORD *LANGTABLE[2];
  810. Xvextern char LANGINDEX;
  811. Xvextern _PROCEDURE KBDTRANSHOOK;
  812. Xvextern KEYTRANSTYPE TRANSMODE;
  813. Xvextern boolean KBDSYSMODE, KBDALTLOCK, KBDCAPSLOCK;
  814. Xvextern loopdriverrec *loopdriverlist;
  815. Xvextern LOOPCONTROLREC *LOOPCONTROL;
  816. Xvextern _PROCEDURE HPHILCMDHOOK;
  817. Xvextern HPHIL_COMM_REC_TYPE *HPHIL_DATA_LINK;
  818. X
  819. X
  820. X
  821. X/*4/6/84 SFB*/
  822. X/*4/6/84 SFB*/
  823. X/*3/13/85 SFB*/
  824. X/*-----------------------------------------------------------------------------*/
  825. Xextern Void SYSDEV_INIT PV( );
  826. X
  827. X/** BEEPER ***********************************************/
  828. Xextern Void BEEP PV( );
  829. Xextern Void BEEPER PP((int FREQUENCY, int DURATION));
  830. X
  831. X/** RPG **************************************************/
  832. Xextern Void SETRPGRATE PP((int RATE));
  833. X
  834. X/** KEYBOARD *********************************************/
  835. Xextern Void KBDSETUP PP((int CMD, int VALUE));
  836. Xextern Void KBDIO PP((fib *FP, int REQUEST, Char *BUFFER, long BUFSIZE,
  837. X              long POSITION));
  838. Xextern Void lockedaction PP((_PROCEDURE a));
  839. X
  840. X/** CRT **************************************************/
  841. Xextern Void CRTIO PP((fib *FP, int REQUEST, Char *BUFFER, long BUFSIZE,
  842. X              long POSITION));
  843. Xextern Void DUMMYCRTLL PP((int OP, long *POSITION, int C));
  844. X
  845. X/** BATTERY **********************************************/
  846. Xextern Void BATCOMMAND PP((int CMD, long NUMDATA, int B1, int B2, int B3,
  847. X               int B4, int B5));
  848. Xextern uchar BATBYTERECEIVED PV( );
  849. X
  850. X/** CLOCK ************************************************/
  851. Xextern long sysclock PV( );
  852. X
  853. X/*centiseconds from midnight*/
  854. Xextern Void sysdate PP((daterec *thedate));
  855. Xextern Void systime PP((timerec *thetime));
  856. Xextern Void setsysdate PP((daterec thedate));
  857. Xextern Void setsystime PP((timerec thetime));
  858. X
  859. X/** KEYBUFFER ********************************************/
  860. Xextern Void KEYBUFOPS PP((int OP, Char *C));
  861. X
  862. X/** STATUSLINE *******************************************/
  863. Xextern Void SETSTATUS PP((long N, int C));
  864. Xextern Char RUNLIGHT PV( );
  865. Xextern Void SETRUNLIGHT PP((int C));
  866. X
  867. X
  868. X
  869. X#undef vextern
  870. X
  871. X#endif /*SYSDEVS_H*/
  872. X
  873. X/* End. */
  874. X
  875. END_OF_FILE
  876. if test 12249 -ne `wc -c <'HP/include/sysdevs.h'`; then
  877.     echo shar: \"'HP/include/sysdevs.h'\" unpacked with wrong size!
  878. fi
  879. # end of 'HP/include/sysdevs.h'
  880. fi
  881. if test -f 'examples/basic.doc' -a "${1}" != "-c" ; then 
  882.   echo shar: Will not clobber existing file \"'examples/basic.doc'\"
  883. else
  884. echo shar: Extracting \"'examples/basic.doc'\" \(11310 characters\)
  885. sed "s/^X//" >'examples/basic.doc' <<'END_OF_FILE'
  886. X
  887. X                             Chipmunk BASIC 1.0
  888. X                               David Gillespie
  889. X
  890. X
  891. X       --------------------------------------------------------------
  892. X
  893. X
  894. X
  895. X
  896. X   COMMANDS
  897. X
  898. X
  899. X      LIST line(s)
  900. X
  901. X         List the specified program lines.  For example,
  902. X
  903. X               LIST 10, 100-200
  904. X
  905. X         lists line 10, and lines 100 through 200, inclusive.
  906. X
  907. X
  908. X      RUN [line]
  909. X
  910. X         Begin execution of the program at the first line, or at the
  911. X         specified line.  All variables are cleared.
  912. X
  913. X
  914. X      RUN file[,line]
  915. X
  916. X         Load and run a program.  For example,
  917. X
  918. X               RUN "FOO", 30
  919. X
  920. X         loads a program from the file FOO.TEXT and begins execution at
  921. X         line 30.
  922. X
  923. X
  924. X      NEW
  925. X
  926. X         Erase the program in memory.
  927. X
  928. X
  929. X      LOAD file
  930. X
  931. X         Load a program into memory.  The program previously in memory is
  932. X         erased.  The file name should be in quotes; a .TEXT extension is
  933. X         automatically added.  Files contain ASCII listings of the programs.
  934. X         All lines in the file must begin with a line number, but line
  935. X         numbers do not need to be in increasing order.
  936. X
  937. X
  938. X      MERGE file
  939. X
  940. X         Load a program into memory.  The previous program remains in
  941. X         memory; if a line exists in both programs, the newly loaded
  942. X         line is kept.
  943. X
  944. X
  945. X      SAVE file
  946. X
  947. X         Save the program in memory to a file.
  948. X
  949. X
  950. X      BYE
  951. X
  952. X         Return to the operating system.
  953. X
  954. X
  955. X      DEL line(s)
  956. X
  957. X         Delete the specified program lines.  Line numbers may be
  958. X         separated by commas and dashes as in LIST.  If used inside
  959. X         a program, DEL will terminate execution only if it deletes
  960. X         the line on which it appears.
  961. X
  962. X
  963. X      RENUM [start[,inc]]
  964. X
  965. X         Renumber program lines.  By default, the new sequence is 10,20,30,...
  966. X         The first argument is a new initial line number; the second argument
  967. X         is the increment between line numbers.
  968. X
  969. X
  970. X
  971. X
  972. X   STATEMENTS
  973. X
  974. X      REM comment
  975. X
  976. X         A remark; ignored.  Comments may contain any characters except
  977. X         that REM can not be immediately followed by an alphanumeric
  978. X         character.
  979. X
  980. X
  981. X      [LET] var = expr
  982. X
  983. X         Assign a value to a variable.  Variable names contain up to 20
  984. X         significant characters, consisting of upper- and lower-case
  985. X         letters, digits, underscores, and dollar signs.  Variable names
  986. X         are case-sensitive.  Variables hold real numbers normally, or
  987. X         strings of up to 255 characters if their names end with $.
  988. X
  989. X         Examples:
  990. X
  991. X               LET X=20
  992. X               X$="FOO"
  993. X               X$=X$+"BAR"
  994. X
  995. X
  996. X      DIM var(dimensions), ...
  997. X
  998. X         Allocate memory for arrays.  Arrays may have up to 4 dimensions,
  999. X         ranging from 0 to the value specified in the DIM statement.
  1000. X         The same name must not be used for both a simple variable and
  1001. X         an array.
  1002. X
  1003. X         If an array is used before it is dimensioned, each dimension
  1004. X         is set to 10.
  1005. X
  1006. X         Example:
  1007. X
  1008. X               INPUT "How many elements? "; x
  1009. X               DIM array(x,1)
  1010. X               FOR i=1 TO x : INPUT array(i,0), array(i,1) : NEXT
  1011. X
  1012. X
  1013. X      PRINT items
  1014. X
  1015. X         Print the items on the screen.  Items may be either numeric
  1016. X         or string expressions, and may be separated by commas, semicolons,
  1017. X         or nothing.
  1018. X
  1019. X         Numbers are normally terminated by spaces.  To avoid this space,
  1020. X         convert the number to a string with STR$.
  1021. X
  1022. X         The line is terminated by a CR/LF, unless the item list ends 
  1023. X         with a comma or semicolon.
  1024. X
  1025. X         The word PRINT may be abbreviated as a question mark.
  1026. X
  1027. X         Examples:
  1028. X
  1029. X               PRINT "1+2=", 1+2
  1030. X               PRINT X$ "=" Z$;
  1031. X               ? x; y+z
  1032. X
  1033. X
  1034. X      INPUT [prompt;] vars
  1035. X
  1036. X         If a prompt string is given, it is printed.  Otherwise, a
  1037. X         question mark is printed.  The computer then waits for values 
  1038. X         for each variable to be entered.  If several variables are
  1039. X         listed, their names must be separated by commas.
  1040. X
  1041. X         If the variables are numeric, their values may be entered
  1042. X         on separate lines, or combined with commas.  Any numeric expression
  1043. X         is a valid response.
  1044. X
  1045. X         If the variables are strings, each string is typed on a separate
  1046. X         line.  The characters typed are copied verbatim into the string.
  1047. X
  1048. X         String and numeric variables may be not mixed in a single
  1049. X         INPUT statement.
  1050. X
  1051. X         Examples:
  1052. X
  1053. X            INPUT X$
  1054. X            INPUT "Type 3 numbers: "; X, Y, Z
  1055. X
  1056. X
  1057. X      GOTO line
  1058. X
  1059. X         Begin executing statements at the specified line.  The line
  1060. X         number may be any numeric expression.
  1061. X
  1062. X         The word GO TO may be used instead of GOTO if preferable.
  1063. X
  1064. X
  1065. X      IF condition THEN line/statements ELSE line/statements
  1066. X
  1067. X         If the condition is true (i.e., the numeric expression has a
  1068. X         non-zero value), the statements following the word THEN are
  1069. X         executed.  Otherwise, the statements following ELSE are
  1070. X         executed.  If there is no ELSE clause, execution proceeds
  1071. X         to the next line in the program.
  1072. X
  1073. X         A line number may be used after either THEN or ELSE, for an
  1074. X         implied GOTO statement.
  1075. X
  1076. X
  1077. X      END
  1078. X
  1079. X         Terminate the program.  An END statement is not required.
  1080. X
  1081. X
  1082. X      STOP
  1083. X
  1084. X         Terminate the program with an identifying "Break" message.
  1085. X
  1086. X
  1087. X      FOR var = first TO last [STEP inc]
  1088. X      {statements}
  1089. X      NEXT [var]
  1090. X
  1091. X         Execute {statements} repeatedly while the variable counts from
  1092. X         "first" to "last," incrementing by 1, or by the STEP value if
  1093. X         given.  If the STEP value is negative, the variable counts
  1094. X         downward.
  1095. X
  1096. X         If "first" is greater than "last" (or less than if STEP is
  1097. X         negative), execution proceeds directly to the NEXT statement,
  1098. X         without executing the body of the loop at all.
  1099. X
  1100. X         The variable name is optional on the NEXT statement.
  1101. X
  1102. X
  1103. X      WHILE [condition]
  1104. X      {statements}
  1105. X      WEND [condition]
  1106. X
  1107. X         Execute {statements} repeatedly until the WHILE condition (if
  1108. X         given) becomes false, or until the WEND condition becomes true.
  1109. X         This structure can emulate Pascal's WHILE-DO and REPEAT-UNTIL,
  1110. X         or even both at once.  If no conditions are given, the loop will
  1111. X         never terminate unless the Evil GOTO is used.
  1112. X
  1113. X
  1114. X      GOSUB line
  1115. X      RETURN
  1116. X
  1117. X         Execute the statements beginning at the specified line, then
  1118. X         when RETURN is reached, return to the statement following the 
  1119. X         GOSUB.
  1120. X
  1121. X
  1122. X      READ vars
  1123. X      DATA values
  1124. X      RESTORE line
  1125. X
  1126. X         Read numeric or string values from the DATA statements.  Reading
  1127. X         begins at the first DATA statement in the program and proceeds
  1128. X         to the last.  Reading past the end the last DATA statement
  1129. X         generates an error.
  1130. X
  1131. X         The DATA values must be either numeric or string expressions,
  1132. X         according to the type of variable being read.  Reading the wrong
  1133. X         kind of expression produces a Syntax Error.
  1134. X
  1135. X         The RESTORE statement causes the next READ to re-use the first
  1136. X         DATA statement in the program, or the first DATA statement on
  1137. X         or after a particular line.
  1138. X
  1139. X
  1140. X      GOTOXY across, down
  1141. X
  1142. X         Move the cursor to the specified screen position, between
  1143. X         0,0 and 79,23.
  1144. X
  1145. X
  1146. X      ON expr GOTO line, line, ...
  1147. X      ON expr GOSUB line, line, ...
  1148. X
  1149. X         If the expression's value, rounded to an integer, is N, go to
  1150. X         the Nth line number in the list.  If N is less than one or is
  1151. X         too large, execution continues at the next statement after
  1152. X         the ON-GOTO or ON-GOSUB.
  1153. X
  1154. X
  1155. X      POKE addr, data
  1156. X
  1157. X         Store a byte at the specified address.
  1158. X
  1159. X
  1160. X
  1161. X
  1162. X   NUMERIC EXPRESSIONS
  1163. X
  1164. X      x AND y
  1165. X
  1166. X         Logical AND of two integers.
  1167. X
  1168. X
  1169. X      x OR y
  1170. X
  1171. X         Logical OR of two integers.
  1172. X
  1173. X
  1174. X      x XOR y
  1175. X
  1176. X         Logical XOR of two integers.
  1177. X
  1178. X
  1179. X      NOT x
  1180. X
  1181. X         Logical complement of an integer.
  1182. X
  1183. X
  1184. X      x+y, x-y, x*y, x/y, x^y, -x
  1185. X
  1186. X         Typical floating-point arithmetic operations.
  1187. X
  1188. X
  1189. X      x=y, x<y, x>y, x<=y, x>=y, x<>y
  1190. X
  1191. X         Comparisons; result is 1 if true, 0 if false.
  1192. X
  1193. X
  1194. X      x MOD y
  1195. X
  1196. X         Modulo of two integers.
  1197. X
  1198. X
  1199. X      SQR x
  1200. X
  1201. X         Square of X.  Note that parentheses are not required if a function's
  1202. X         argument is a single entitity; for example, SQR SIN X needs no
  1203. X         parentheses, but SQR(1+X) does.
  1204. X
  1205. X
  1206. X      SQRT x
  1207. X
  1208. X         Square root of X.
  1209. X
  1210. X
  1211. X      SIN x, COS x, TAN x, ARCTAN x
  1212. X
  1213. X         Typical trig functions, in radians.
  1214. X
  1215. X
  1216. X      LOG x, EXP x
  1217. X
  1218. X         Natural logarithm, and e the power X.
  1219. X
  1220. X
  1221. X      ABS x
  1222. X
  1223. X         Absolute value of X.
  1224. X
  1225. X
  1226. X      SGN x
  1227. X
  1228. X         Sign of X:  1 if X is positive, 0 if zero, -1 if negative.
  1229. X
  1230. X
  1231. X      VAL x$
  1232. X
  1233. X         Value of the expression contained in the string X$.  For example,
  1234. X         VAL "1+2" yields 3.  X$ may be a single string literal, variable,
  1235. X         or function, or a string expression in parentheses.
  1236. X
  1237. X
  1238. X      ASC x$
  1239. X
  1240. X         ASCII code of the first character in X$, or 0 if X$ is null.
  1241. X
  1242. X
  1243. X      LEN x$
  1244. X
  1245. X         Number of characters in X$.
  1246. X
  1247. X
  1248. X      Precedence:      Parentheses
  1249. X                        Functions  (incl. NOT and unary minus)
  1250. X                            ^
  1251. X                        *, /, MOD
  1252. X                          +, -
  1253. X                   =, <, >, <=, >=, <>
  1254. X                           AND
  1255. X                         OR, XOR
  1256. X
  1257. X
  1258. X
  1259. X   STRING EXPRESSIONS
  1260. X
  1261. X      "string" or 'string'
  1262. X
  1263. X         String literal.  Single quotes are converted to double quotes
  1264. X         internally.
  1265. X
  1266. X
  1267. X      x$+y$
  1268. X
  1269. X         Concatenation.  Result must be 255 characters or less.
  1270. X
  1271. X
  1272. X      x$=y$, x$<y$, x$>y$, x$<=y$, x$>=y$, x$<>y$
  1273. X
  1274. X         String comparisons; result is 1 if true, 0 if false.
  1275. X
  1276. X
  1277. X      STR$(x)
  1278. X
  1279. X         The number X expressed as a string of digits.  No leading or
  1280. X         trailing spaces are included; scientific notation is used
  1281. X         if the absolute values is greater than 1E12 or less than 1E-2.
  1282. X
  1283. X
  1284. X      CHR$(x)
  1285. X
  1286. X         The character whose ASCII code is X.
  1287. X
  1288. X
  1289. X      MID$(x$, y)
  1290. X      MID$(x$, y, z)
  1291. X
  1292. X         (Parentheses required.)  The substring consisting of the first
  1293. X         Z characters starting at position Y of string X$.  Position 1
  1294. X         is the first character of the string.  If Z is omitted, 255
  1295. X         is used, i.e., the entire right part of the string.
  1296. X
  1297. X
  1298. X
  1299. X   CONVENTIONS
  1300. X
  1301. X      Multiple statements may be written on a line, separated by colons:
  1302. X
  1303. X            10 INPUT X : PRINT X : STOP
  1304. X
  1305. X
  1306. X      There is actually no difference between commands and statements;
  1307. X      both can be used in or out of programs at will.  Certain commands,
  1308. X      such as NEW, will, of course, halt program execution.
  1309. X
  1310. X
  1311. X      Line numbers may be any integer from 1 to MAXINT.
  1312. X
  1313. X
  1314. X      To delete a line use DEL, or type its line number alone:
  1315. X
  1316. X            10
  1317. X
  1318. X
  1319. X      Press CLR I/O to halt program execution.  [This is not supported
  1320. X      by p2c's translation!]  To leave BASIC, use the BYE command.
  1321. X
  1322. X
  1323. X      Keywords must be written in all upper- or all lower-case; they are
  1324. X      always converted to upper-case internally.  Spaces are ignored in
  1325. X      the input except between quotes.  Square brackets are converted to
  1326. X      parentheses.  Missing closing quotes at the end of the line are
  1327. X      added, as in the command:
  1328. X
  1329. X            SAVE "PROGRAM
  1330. X
  1331. X
  1332. X
  1333. X
  1334. END_OF_FILE
  1335. if test 11310 -ne `wc -c <'examples/basic.doc'`; then
  1336.     echo shar: \"'examples/basic.doc'\" unpacked with wrong size!
  1337. fi
  1338. # end of 'examples/basic.doc'
  1339. fi
  1340. if test -f 'examples/cref.p' -a "${1}" != "-c" ; then 
  1341.   echo shar: Will not clobber existing file \"'examples/cref.p'\"
  1342. else
  1343. echo shar: Extracting \"'examples/cref.p'\" \(11280 characters\)
  1344. sed "s/^X//" >'examples/cref.p' <<'END_OF_FILE'
  1345. X
  1346. X$debug$
  1347. X$ sysprog, partial_eval $
  1348. X
  1349. Xprogram crefprog(input, output);
  1350. X
  1351. X
  1352. Xconst
  1353. X {  linesperpage = 139;  }
  1354. X   maxnamelen = 30;
  1355. X
  1356. X
  1357. Xtype
  1358. X   str255 = string[255];
  1359. X
  1360. X   occurptr = ^occur;
  1361. X   occur =
  1362. X      record
  1363. X         next : occurptr;
  1364. X         lnum : integer;
  1365. X         fnum : integer;
  1366. X         defn : boolean;
  1367. X      end;
  1368. X
  1369. X   kinds = (k_normal, k_proc, k_var, k_const, k_type, k_strlit, k_extproc,
  1370. X            k_kw, k_prockw, k_varkw, k_constkw, k_typekw, k_beginkw);
  1371. X
  1372. X   nodeptr = ^node;
  1373. X   node =
  1374. X      record
  1375. X         left, right : nodeptr;
  1376. X         name : string[maxnamelen];
  1377. X         first : occurptr;
  1378. X         kind : kinds;
  1379. X      end;
  1380. X
  1381. X
  1382. Xvar
  1383. X   f : text;
  1384. X   fn : string[120];
  1385. X   fnum : integer;
  1386. X   buf, name : str255;
  1387. X   good : boolean;
  1388. X   i, j : integer;
  1389. X   lnum : integer;
  1390. X   np, base : nodeptr;
  1391. X   op : occurptr;
  1392. X   curkind, section : kinds;
  1393. X   paren : integer;
  1394. X   brace : integer;
  1395. X
  1396. X
  1397. X
  1398. Xprocedure lookup(var name : str255; var np : nodeptr);
  1399. X   var
  1400. X      npp : ^nodeptr;
  1401. X   begin
  1402. X      if strlen(name) > maxnamelen then
  1403. X         setstrlen(name, maxnamelen);
  1404. X      npp := addr(base);
  1405. X      while (npp^ <> nil) and (npp^^.name <> name) do
  1406. X         begin
  1407. X            if name < npp^^.name then
  1408. X               npp := addr(npp^^.left)
  1409. X            else
  1410. X               npp := addr(npp^^.right);
  1411. X         end;
  1412. X      if (npp^ = nil) then
  1413. X         begin
  1414. X            new(np);
  1415. X            npp^ := np;
  1416. X            np^.name := name;
  1417. X            np^.first := nil;
  1418. X            np^.left := nil;
  1419. X            np^.right := nil;
  1420. X            np^.kind := k_normal;
  1421. X         end
  1422. X      else
  1423. X         np := npp^;
  1424. X   end;
  1425. X
  1426. X
  1427. Xprocedure kw(name : str255; kind : kinds);
  1428. X   var
  1429. X      np : nodeptr;
  1430. X   begin
  1431. X      lookup(name, np);
  1432. X      np^.kind := kind;
  1433. X   end;
  1434. X
  1435. X
  1436. Xprocedure cref(np : nodeptr; kind : kinds);
  1437. X   var
  1438. X      op : occurptr;
  1439. X   begin
  1440. X      new(op);
  1441. X      op^.next := np^.first;
  1442. X      np^.first := op;
  1443. X      op^.lnum := lnum;
  1444. X      op^.fnum := fnum;
  1445. X      op^.defn := (kind in [k_var, k_type, k_const, k_proc]);
  1446. X      if op^.defn or (kind = k_strlit) or
  1447. X         ((kind = k_extproc) and (np^.kind = k_normal)) then
  1448. X         np^.kind := kind;
  1449. X   end;
  1450. X
  1451. X
  1452. X
  1453. Xprocedure traverse(np : nodeptr);
  1454. X   var
  1455. X      op : occurptr;
  1456. X      i : integer;
  1457. X   begin
  1458. X      if (np <> nil) then
  1459. X         begin
  1460. X            traverse(np^.left);
  1461. X            if np^.kind < k_kw then
  1462. X               begin
  1463. X                  case np^.kind of
  1464. X                     k_var:
  1465. X                        write(f, 'V:');
  1466. X                     k_type:
  1467. X                        write(f, 'T:');
  1468. X                     k_const:
  1469. X                        write(f, 'C:');
  1470. X                     k_proc:
  1471. X                        write(f, 'P:');
  1472. X                     k_strlit:
  1473. X                        write(f, 'S:');
  1474. X                     k_extproc:
  1475. X                        write(f, 'E:');
  1476. X                     k_normal:
  1477. X                        write(f, 'X:');
  1478. X                  end;
  1479. X                  write(f, np^.name);
  1480. X                  i := 0;
  1481. X                  op := np^.first;
  1482. X                  while op <> nil do
  1483. X                     begin
  1484. X                        if i = 0 then
  1485. X                           begin
  1486. X                              writeln(f);
  1487. X                              write(f, '   ');
  1488. X                              i := 5;
  1489. X                           end;
  1490. X                        write(f, ' ', op^.lnum:1, '/', op^.fnum:1);
  1491. X                        if op^.defn then
  1492. X                           write(f, '*');
  1493. X                        i := i - 1;
  1494. X                        op := op^.next;
  1495. X                     end;
  1496. X                  writeln(f);
  1497. X               end;
  1498. X            traverse(np^.right);
  1499. X         end;
  1500. X   end;
  1501. X
  1502. X
  1503. X
  1504. Xbegin
  1505. X   base := nil;
  1506. X   fnum := 0;
  1507. X   kw('procedure', k_prockw);
  1508. X   kw('function', k_prockw);
  1509. X   kw('var', k_varkw);
  1510. X   kw('record', k_varkw);
  1511. X   kw('type', k_typekw);
  1512. X   kw('const', k_constkw);
  1513. X   kw('begin', k_beginkw);
  1514. X   kw('end', k_kw);
  1515. X   kw('do', k_kw);
  1516. X   kw('for', k_kw);
  1517. X   kw('to', k_kw);
  1518. X   kw('while', k_kw);
  1519. X   kw('repeat', k_kw);
  1520. X   kw('until', k_kw);
  1521. X   kw('if', k_kw);
  1522. X   kw('then', k_kw);
  1523. X   kw('else', k_kw);
  1524. X   kw('case', k_kw);
  1525. X   kw('of', k_kw);
  1526. X   kw('div', k_kw);
  1527. X   kw('mod', k_kw);
  1528. X   kw('nil', k_kw);
  1529. X   kw('not', k_kw);
  1530. X   kw('and', k_kw);
  1531. X   kw('or', k_kw);
  1532. X   kw('with', k_kw);
  1533. X   kw('array', k_kw);
  1534. X   kw('integer', k_kw);
  1535. X   kw('char', k_kw);
  1536. X   kw('boolean', k_kw);
  1537. X   kw('true', k_kw);
  1538. X   kw('false', k_kw);
  1539. X   writeln;
  1540. X   writeln('Pascal Cross Reference Utility');
  1541. X   writeln;
  1542. X   repeat
  1543. X      fnum := fnum + 1;
  1544. X      write('Name of cross-reference file #', fnum:1, '? ');
  1545. X      readln(fn);
  1546. X      good := true;
  1547. X      if (fn <> '') then
  1548. X         begin
  1549. X            try
  1550. X               reset(f, fn);
  1551. X            recover
  1552. X               if escapecode <> -10 then
  1553. X                  escape(escapecode)
  1554. X               else
  1555. X                  begin
  1556. X                     good := false;
  1557. X                     writeln('Can''t read file!');
  1558. X                  end;
  1559. X         end
  1560. X      else
  1561. X         good := false;
  1562. X      if good then
  1563. X         begin
  1564. X            lnum := 0;
  1565. X            section := k_normal;
  1566. X            curkind := k_normal;
  1567. X            paren := 0;
  1568. X            while not eof(f) do
  1569. X               begin
  1570. X                  lnum := lnum + 1;
  1571. X                  readln(f, buf);
  1572. X                  strappend(buf, #0);
  1573. X                  i := 1;
  1574. X                  while (buf[i] = ' ') do
  1575. X                     i := i + 1;
  1576. X                  repeat
  1577. X                     while not (buf[i] in ['a'..'z', 'A'..'Z', '0'..'9', '_', #0]) do
  1578. X                        begin
  1579. X                           case buf[i] of
  1580. X                              ':', '=':
  1581. X                                 if brace = 0 then
  1582. X                                    curkind := k_normal;
  1583. X                              ';':
  1584. X                                 if brace = 0 then
  1585. X                                    curkind := section;
  1586. X                              '''':
  1587. X                                 if brace = 0 then
  1588. X                                    begin
  1589. X                                       i := i + 1;
  1590. X                                       j := i;
  1591. X                                       while ((buf[i] <> '''') or (buf[i+1] = '''')) and
  1592. X                                             (buf[i] <> #0) do
  1593. X                                          begin
  1594. X                                             if (buf[i] = '''') then
  1595. X                                                i := i + 2
  1596. X                                             else
  1597. X                                                i := i + 1;
  1598. X                                          end;
  1599. X                                       if (buf[i] = #0) then
  1600. X                                          i := i - 1;
  1601. X                                       name := '''' + str(buf, j, i-j) + '''';
  1602. X                                       lookup(name, np);
  1603. X                                       cref(np, k_strlit);
  1604. X                                    end;
  1605. X                              '(':
  1606. X                                 if brace = 0 then
  1607. X                                    if (buf[i+1] = '*') then
  1608. X                                       begin
  1609. X                                          brace := 1;
  1610. X                                          i := i + 1;
  1611. X                                       end
  1612. X                                    else
  1613. X                                       begin
  1614. X                                          paren := paren + 1;
  1615. X                                          curkind := k_normal;
  1616. X                                       end;
  1617. X                              ')':
  1618. X                                 if brace = 0 then
  1619. X                                    paren := paren - 1;
  1620. X                              '*':
  1621. X                                 if (buf[i+1] = ')') then
  1622. X                                    begin
  1623. X                                       brace := 0;
  1624. X                                       i := i + 1;
  1625. X                                    end;
  1626. X                              '{': brace := 1;
  1627. X                              '}': brace := 0;
  1628. X                              otherwise ;
  1629. X                           end;
  1630. X                           i := i + 1;
  1631. X                        end;
  1632. X                     if (buf[i] <> #0) then
  1633. X                        begin
  1634. X                           j := i;
  1635. X                           if (buf[i] in ['0'..'9']) and (i > 1) and (buf[i-1] = '-') then
  1636. X                              j := j - 1;
  1637. X                           while (buf[i] in ['a'..'z', 'A'..'Z', '0'..'9', '_']) do
  1638. X                              i := i + 1;
  1639. X                           if brace = 0 then
  1640. X                              begin
  1641. X                                 name := str(buf, j, i-j);
  1642. X                                 for j := 1 to strlen(name) do
  1643. X                                    if (buf[j] in ['A'..'Z']) then
  1644. X                                       buf[j] := chr(ord(buf[j]) + 32);
  1645. X                                 while (buf[i] = ' ') do
  1646. X                                    i := i + 1;
  1647. X                                 lookup(name, np);
  1648. X                                 case np^.kind of
  1649. X                                    k_varkw:
  1650. X                                       if paren = 0 then
  1651. X                                          begin
  1652. X                                             section := k_var;
  1653. X                                             curkind := section;
  1654. X                                          end;
  1655. X                                    k_typekw:
  1656. X                                       begin
  1657. X                                          section := k_type;
  1658. X                                          curkind := section;
  1659. X                                       end;
  1660. X                                    k_constkw:
  1661. X                                       begin
  1662. X                                          section := k_const;
  1663. X                                          curkind := section;
  1664. X                                       end;
  1665. X                                    k_prockw:
  1666. X                                       begin
  1667. X                                          section := k_normal;
  1668. X                                          curkind := k_proc;
  1669. X                                       end;
  1670. X                                    k_beginkw:
  1671. X                                       begin
  1672. X                                          section := k_normal;
  1673. X                                          curkind := k_normal;
  1674. X                                       end;
  1675. X                                    k_kw: ;
  1676. X                                    otherwise
  1677. X                                       if (curkind = k_normal) and (buf[i] = '(') then
  1678. X                                          cref(np, k_extproc)
  1679. X                                       else
  1680. X                                          cref(np, curkind);
  1681. X                                 end;
  1682. X                              end;
  1683. X                        end;
  1684. X                  until buf[i] = #0;
  1685. X               end;
  1686. X            if paren <> 0 then
  1687. X               writeln('Warning: ending paren count = ', paren:1);
  1688. X            close(f);
  1689. X         end;
  1690. X   until fn = '';
  1691. X   writeln;
  1692. X   repeat
  1693. X      write('Output file name: ');
  1694. X      readln(fn);
  1695. X   until fn <> '';
  1696. X   rewrite(f, fn);
  1697. X   traverse(base);
  1698. X   close(f, 'save');
  1699. Xend.
  1700. X
  1701. X
  1702. X
  1703. X
  1704. END_OF_FILE
  1705. if test 11280 -ne `wc -c <'examples/cref.p'`; then
  1706.     echo shar: \"'examples/cref.p'\" unpacked with wrong size!
  1707. fi
  1708. # end of 'examples/cref.p'
  1709. fi
  1710. echo shar: End of archive 4 \(of 32\).
  1711. cp /dev/null ark4isdone
  1712. MISSING=""
  1713. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ; do
  1714.     if test ! -f ark${I}isdone ; then
  1715.     MISSING="${MISSING} ${I}"
  1716.     fi
  1717. done
  1718. if test "${MISSING}" = "" ; then
  1719.     echo You have unpacked all 32 archives.
  1720.     echo "Now see PACKNOTES and the README"
  1721.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1722. else
  1723.     echo You still need to unpack the following archives:
  1724.     echo "        " ${MISSING}
  1725. fi
  1726. ##  End of shell archive.
  1727. exit 0
  1728.