Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
RiscOS
S
Sources
Toolbox
Gadgets
Commits
09c6ee44
Commit
09c6ee44
authored
27 years ago
by
Rob Lougher
Browse files
Options
Download
Email Patches
Plain Diff
*** empty log message ***
parent
343f4f8d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
223 additions
and
0 deletions
+223
-0
c/glib3
c/glib3
+117
-0
c/string32
c/string32
+106
-0
No files found.
c/glib3
0 → 100644
View file @
09c6ee44
/* Copyright 1997 Acorn Computers Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <stdio.h>
#include <stdlib.h>
#include "kernel.h"
#include "swis.h"
#include "glib.h"
#include "glibP.h"
#include "toolbox.h"
#include "window.h"
#include "wimplib.h"
typedef
struct
_tasks
{
struct
_tasks
*
next
;
int
th
;
int
refc
;
int
SWI
;
}
TaskRec
;
static
TaskRec
*
all_tasks
[
8
]
=
NULL
;
static
TaskRec
*
find_current_task
(
int
*
th
,
int
type
)
{
TaskRec
*
list
=
all_tasks
[
type
];
WimpSysInfo
inf
;
wimp_read_sys_info
(
5
,
&
inf
);
if
(
th
)
*
th
=
inf
.
r0
;
while
(
list
)
{
if
(
list
->
th
==
inf
.
r0
)
return
list
;
list
=
list
->
next
;
}
return
list
;
}
int
FILTERS
[]
=
{
Toolbox_RegisterPostFilter_ToolboxEvent
,
Toolbox_RegisterPostFilter_WimpEvent
,
Toolbox_RegisterPostFilter_WimpMessage
};
_kernel_oserror
*
add_task_interest
(
FilterTypes
type
,
int
*
list
,
int
SWI
)
{
int
th
;
_kernel_swi_regs
regs
;
_kernel_oserror
*
e
;
TaskRec
*
rec
=
find_current_task
(
&
th
,
type
);
if
(
!
rec
)
{
rec
=
calloc
(
1
,
sizeof
(
TaskRec
));
if
(
!
rec
)
return
NULL
;
rec
->
th
=
th
;
rec
->
SWI
=
SWI
;
rec
->
next
=
all_tasks
[
type
];
all_tasks
[
type
]
=
rec
;
regs
.
r
[
0
]
=
0
;
regs
.
r
[
1
]
=
SWI
;
regs
.
r
[
2
]
=
(
int
)
rec
;
regs
.
r
[
3
]
=
FILTERS
[
type
];
regs
.
r
[
4
]
=
(
int
)
list
;
e
=
_kernel_swi
(
Toolbox_RegisterPostFilter
,
&
regs
,
&
regs
);
if
(
e
)
return
e
;
}
rec
->
refc
++
;
return
NULL
;
}
_kernel_oserror
*
remove_task_interest
(
FilterTypes
type
,
int
*
inter
)
{
_kernel_swi_regs
regs
;
_kernel_oserror
*
e
;
TaskRec
*
list
=
all_tasks
[
type
],
*
rec
=
find_current_task
(
0
,
type
);
if
(
rec
)
{
rec
->
refc
--
;
if
(
!
rec
->
refc
)
{
regs
.
r
[
0
]
=
Toolbox_RegisterPostFilter_Remove
;
regs
.
r
[
1
]
=
rec
->
SWI
;
regs
.
r
[
2
]
=
(
int
)
rec
;
regs
.
r
[
3
]
=
FILTERS
[
type
];
regs
.
r
[
4
]
=
(
int
)
inter
;
e
=
_kernel_swi
(
Toolbox_RegisterPostFilter
,
&
regs
,
&
regs
);
/* remove from list and free up */
if
(
list
==
rec
)
all_tasks
[
type
]
=
rec
->
next
;
else
{
while
(
list
)
{
if
(
list
->
next
==
rec
)
{
list
->
next
=
rec
->
next
;
break
;
}
list
=
list
->
next
;
}
}
free
(
rec
);
return
e
;
}
}
return
NULL
;
}
This diff is collapsed.
Click to expand it.
c/string32
0 → 100644
View file @
09c6ee44
/* Copyright 1997 Acorn Computers Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* File: string32.c
* Purpose: strings terminated by char < 32
* Author: Timothy Roddis
* History: 24-Jan-94: IDJ: created from original TGR sources
*/
#include "string32.h"
/* Strings passed to the toolbox might be terminated with any control character ... */
#define NULL 0
void
string_copy
(
char
*
dst_txt
,
char
*
src_txt
)
{
/*
* copy a ctrl-terminated string to a buffer big enough to
* hold the result (no length checking).
*/
if
(
!
src_txt
)
src_txt
=
""
;
while
((
*
(
dst_txt
++
)
=*
(
src_txt
++
))
>=
32
);
*
(
--
dst_txt
)
=
'\0'
;
}
char
*
string_copy_chk
(
char
*
dst_txt
,
char
*
src_txt
,
int
max_len
)
{
int
i
;
/*
* copy a ctrl-terminated string to a buffer checking it is big enough to
* hold the result. Return NULL and nul-terminate, if dst buffer not
* big enough.
*/
if
(
dst_txt
==
NULL
||
max_len
==
0
)
return
NULL
;
if
(
!
src_txt
)
src_txt
=
""
;
for
(
i
=
1
;(
*
dst_txt
++=*
src_txt
++
)
>=
32
;
i
++
)
if
(
i
>=
max_len
)
{
*
(
--
dst_txt
)
=
'\0'
;
return
NULL
;
}
*
(
--
dst_txt
)
=
'\0'
;
return
dst_txt
;
}
int
string_length
(
char
*
txt
)
{
int
i
=
0
;
/*
* return length of ctrl-terminated string
*/
if
(
!
txt
)
return
0
;
while
(
*
txt
++>=
32
)
i
++
;
return
i
;
}
void
string_to_buffer
(
char
*
dst_txt
,
char
*
src_txt
,
int
*
max_len
)
{
/*
* general purpose routine to fill in a user-supplied buffer (and report
* number of bytes written), or just report size of buffer needed.
* If buffer is supplied (dst_txt != 0), then *max_len gives size of supplied
* buffer; if this is not large enough, don't return an error, but return
* size of bufer required!
*/
int
src_len
=
string_length
(
src_txt
)
+
1
;
if
(
dst_txt
==
NULL
)
*
max_len
=
src_len
;
else
/* user-supplied buffer */
{
if
(
*
max_len
>=
src_len
)
string_copy
(
dst_txt
,
src_txt
);
else
string_copy_chk
(
dst_txt
,
src_txt
,
*
max_len
);
*
max_len
=
string_length
(
dst_txt
)
+
1
;
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment